@robota-sdk/agent-cli 3.0.0-beta.77 → 3.0.0-beta.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node/bin.js +310 -20
- package/dist/node/bin.js.map +1 -1
- package/dist/node/index.cjs +310 -20
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +309 -19
- package/dist/node/index.js.map +1 -1
- package/package.json +31 -15
- package/dist/node/child-process-subagent-ipc--Vp2dk1v.js +0 -2
- package/dist/node/child-process-subagent-ipc--Vp2dk1v.js.map +0 -1
- package/dist/node/child-process-subagent-ipc-Aitv2i6E.cjs +0 -1
- package/dist/node/child-process-subagent-ipc-CEy8bLN6.cjs +0 -1
- package/dist/node/child-process-subagent-ipc-DVpVp43R.js +0 -2
- package/dist/node/child-process-subagent-ipc-DVpVp43R.js.map +0 -1
- package/dist/node/cli.cjs +0 -1
- package/dist/node/cli.d.ts +0 -7
- package/dist/node/cli.d.ts.map +0 -1
- package/dist/node/cli.js +0 -2
- package/dist/node/cli.js.map +0 -1
- package/dist/node/constants.cjs +0 -1
- package/dist/node/constants.js +0 -2
- package/dist/node/constants.js.map +0 -1
- package/dist/node/init/init-command.cjs +0 -32
- package/dist/node/init/init-command.js +0 -33
- package/dist/node/init/init-command.js.map +0 -1
- package/dist/node/modes/print-mode.cjs +0 -6
- package/dist/node/modes/print-mode.js +0 -7
- package/dist/node/modes/print-mode.js.map +0 -1
- package/dist/node/modes/shell-exec.cjs +0 -1
- package/dist/node/modes/shell-exec.js +0 -2
- package/dist/node/modes/shell-exec.js.map +0 -1
- package/dist/node/modes/tui-mode.cjs +0 -1
- package/dist/node/modes/tui-mode.js +0 -2
- package/dist/node/modes/tui-mode.js.map +0 -1
- package/dist/node/provider-default-definitions-CKtxv2k0.js +0 -2
- package/dist/node/provider-default-definitions-CKtxv2k0.js.map +0 -1
- package/dist/node/provider-default-definitions-GFiYzACo.cjs +0 -1
- package/dist/node/provider-default-definitions-g0ZUDeii.cjs +0 -1
- package/dist/node/startup/append-system-prompt.cjs +0 -3
- package/dist/node/startup/append-system-prompt.js +0 -4
- package/dist/node/startup/append-system-prompt.js.map +0 -1
- package/dist/node/startup/args-to-options.cjs +0 -1
- package/dist/node/startup/args-to-options.js +0 -2
- package/dist/node/startup/args-to-options.js.map +0 -1
- package/dist/node/startup/command-setup.cjs +0 -1
- package/dist/node/startup/command-setup.d.ts +0 -11
- package/dist/node/startup/command-setup.d.ts.map +0 -1
- package/dist/node/startup/command-setup.js +0 -2
- package/dist/node/startup/command-setup.js.map +0 -1
- package/dist/node/startup/config-phase.cjs +0 -1
- package/dist/node/startup/config-phase.js +0 -2
- package/dist/node/startup/config-phase.js.map +0 -1
- package/dist/node/startup/preflight.cjs +0 -1
- package/dist/node/startup/preflight.js +0 -2
- package/dist/node/startup/preflight.js.map +0 -1
- package/dist/node/startup/provider-setup.cjs +0 -1
- package/dist/node/startup/provider-setup.js +0 -2
- package/dist/node/startup/provider-setup.js.map +0 -1
- package/dist/node/startup/provider-startup.cjs +0 -2
- package/dist/node/startup/provider-startup.js +0 -3
- package/dist/node/startup/provider-startup.js.map +0 -1
- package/dist/node/startup/reset-config.cjs +0 -1
- package/dist/node/startup/reset-config.js +0 -2
- package/dist/node/startup/reset-config.js.map +0 -1
- package/dist/node/startup/session-setup.cjs +0 -1
- package/dist/node/startup/session-setup.js +0 -2
- package/dist/node/startup/session-setup.js.map +0 -1
- package/dist/node/startup/subagent-setup.cjs +0 -1
- package/dist/node/startup/subagent-setup.js +0 -2
- package/dist/node/startup/subagent-setup.js.map +0 -1
- package/dist/node/startup/update-notice.cjs +0 -1
- package/dist/node/startup/update-notice.js +0 -2
- package/dist/node/startup/update-notice.js.map +0 -1
- package/dist/node/startup/version.cjs +0 -1
- package/dist/node/startup/version.js +0 -2
- package/dist/node/startup/version.js.map +0 -1
- package/dist/node/subagents/child-process-subagent-worker.cjs +0 -1
- package/dist/node/subagents/child-process-subagent-worker.d.ts +0 -1
- package/dist/node/subagents/child-process-subagent-worker.js +0 -2
- package/dist/node/subagents/child-process-subagent-worker.js.map +0 -1
- package/dist/node/user-local-direct-command.cjs +0 -1
- package/dist/node/user-local-direct-command.js +0 -2
- package/dist/node/user-local-direct-command.js.map +0 -1
- package/dist/node/utils/cli-args.cjs +0 -35
- package/dist/node/utils/cli-args.js +0 -36
- package/dist/node/utils/cli-args.js.map +0 -1
- package/dist/web/assets/index-BY1oA5Bi.js +0 -37
- package/dist/web/assets/index-Dt0ve2tr.js +0 -37
package/dist/node/index.cjs
CHANGED
|
@@ -1,4 +1,182 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("node:child_process"),t=require("node:module"),n=require("@robota-sdk/agent-transport/headless"),r=require("@robota-sdk/agent-framework"),i=require("node:util"),a=require("@robota-sdk/agent-preset"),o=require("@robota-sdk/agent-core"),s=require("@robota-sdk/agent-provider"),c=require("@robota-sdk/agent-command"),l=require("@robota-sdk/agent-transport-tui"),u=require("@robota-sdk/agent-transport"),d=require("@robota-sdk/agent-transport-ws"),f=require("@robota-sdk/agent-executor"),p=require("@robota-sdk/agent-subagent-runner"),m=require("@robota-sdk/agent-session-analytics"),h=require("node:fs"),g=require("node:readline/promises"),_=require("node:net"),v=require("node:path");const y=[`plan`,`default`,`acceptEdits`,`bypassPermissions`],b=[`text`,`json`,`stream-json`];function ee(){return`
|
|
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("node:child_process"),l=require("node:module"),u=require("node:readline");u=s(u,1);let d=require("node:crypto"),f=require("jssha");f=s(f,1);let p=require("node:path");p=s(p,1);let m=require("node:os");m=s(m,1);let h=require("node:fs"),g=require("node:fs/promises"),_=require("croner"),v=require("zod"),y=require("fast-glob");y=s(y,1);let b=require("p-limit");b=s(b,1);let x=require("fs"),S=require("path"),C=require("node:url"),w=require("node:util"),T=require("@anthropic-ai/sdk");T=s(T,1);let E=require("openai");E=s(E,1);let D=require("@google/genai"),O=require("ink"),k=require("react");k=s(k,1);let A=require("react/jsx-runtime"),j=require("chalk");j=s(j,1);let ee=require("string-width");ee=s(ee,1);let te=require("marked"),ne=require("marked-terminal");ne=s(ne,1);let re=require("node:http"),ie=require("ws"),ae=require("node:readline/promises"),oe=require("node:net"),se=require("zod-to-json-schema");function ce(e){return{functionCalling:{supported:e},nativeWebTools:{webSearch:{supported:!1,enabled:!1,reason:`Provider does not declare native web search support.`},webFetch:{supported:!1,enabled:!1,reason:`Provider does not declare native web fetch support.`}}}}function le(e){let t=typeof e.supportsTools==`function`?e.supportsTools():!1;return e.getCapabilities?.()??ce(t)}function ue(e,t,n){n?.webSearch===!0&&de(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&de(e,`web fetch`,t.nativeWebTools.webFetch)}function de(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${fe(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${fe(n.reason)}`)}function fe(e){return e?` ${e}`:``}function M(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function pe(e){return e.map(e=>{if(!e.aliases||e.aliases.length===0)return e.type;let t=e.aliases.length===1?`alias`:`aliases`;return`${e.type} (${t}: ${e.aliases.join(`, `)})`}).join(`, `)}function me(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}const he=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function ge(e,t,n){return{id:e,title:t,description:n?.description,options:he,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function _e(e,t,n,r){return{id:e,title:t,options:n,maxSelect:1,description:r?.description,allowFreeText:r?.allowFreeText,maxVisible:r?.maxVisible,default:r?.default}}function ve(e,t,n){return{id:e,title:t,allowFreeText:!0,description:n?.description,masked:n?.masked,allowEmpty:n?.allowEmpty,placeholder:n?.placeholder,default:n?.default}}function ye(e){return e.type===`answer`&&e.values.includes(`yes`)}var be=class{history=[];isInitialized=!1;config;async configure(e){this.config=e,await this.ensureInitialized()}getHistory(){return[...this.history]}clearHistory(){this.history=[]}addMessage(e){this.history.push(e)}validateInput(e){if(!e||typeof e!=`string`)throw Error(`Input must be a non-empty string`)}async ensureInitialized(){this.isInitialized||=(await this.initialize(),!0)}async dispose(){this.clearHistory(),this.isInitialized=!1}},xe=class{initialized=!1;async initialize(){this.initialized||=(await this.doInitialize(),!0)}async dispose(){await this.doDispose(),this.initialized=!1}isInitialized(){return this.initialized}ensureInitialized(){if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function N(e){if(!Array.isArray(e))throw Error(`Messages must be an array`);if(e.length===0)throw Error(`Messages array cannot be empty`);for(let t of e)if(!t.role||![`user`,`assistant`,`system`,`tool`].includes(t.role))throw Error(`Invalid message role: ${t.role}`)}function Se(e){if(e){if(!Array.isArray(e))throw Error(`Tools must be an array`);for(let t of e){if(!t.name||typeof t.name!=`string`)throw Error(`Tool must have a valid name`);if(!t.description||typeof t.description!=`string`)throw Error(`Tool must have a valid description`);if(!t.parameters||typeof t.parameters!=`object`||t.parameters===null||Array.isArray(t.parameters))throw Error(`Tool must have valid parameters`)}}}async function Ce(e,t,n,r){if(!e)throw Error(`Executor is required for ${t} provider. Configure an executor or use direct execution path.`);if(!r?.model)throw Error(`Model is required for executor execution in ${t} provider.`);return e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*we(e,t,n,r){if(!e||!e.executeChatStream)throw Error(`Streaming executor is required for ${t} provider.`);if(!r?.model)throw Error(`Model is required for executor streaming in ${t} provider.`);let i=e.executeChatStream({messages:n,options:r,provider:t,model:r.model,stream:!0,...r.tools&&{tools:r.tools}});for await(let e of i)yield e}function Te(e){return e.category===`chat`}function Ee(e){let t=e.data;if(!t)throw Error(`Chat entry ${e.id} has no data`);return{...t,id:e.id,timestamp:e.timestamp}}function P(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function De(e){return e.role===`assistant`}function Oe(e){return e.role===`system`}function ke(e){return e.role===`tool`}const Ae={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var je=class e{static instance;globalLevel;constructor(){this.globalLevel=`warn`}static getInstance(){return e.instance||=new e,e.instance}getGlobalLevel(){return this.globalLevel}setGlobalLevel(e){this.globalLevel=e}},Me=class{level;packageName;sinkLogger;constructor(e,t){this.packageName=e,this.sinkLogger=t||Ae}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),Ne(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),Ne(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),Ne(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),Ne(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||je.getInstance().getGlobalLevel()}shouldLog(e){let t=this.getLevel();if(t===`silent`)return!1;let n=[`debug`,`info`,`warn`,`error`,`silent`];return n.indexOf(e)>=n.indexOf(t)}forward(e,t,n){let r={timestamp:new Date().toISOString(),level:e,message:t,...n&&{context:n},packageName:this.packageName},i=`[${r.timestamp}] [${r.level.toUpperCase()}] [${r.packageName}] ${r.message}`;switch(e){case`debug`:this.sinkLogger.debug(i,n??{});return;case`info`:this.sinkLogger.info(i,n??{});return;case`warn`:this.sinkLogger.warn(i,n??{});return;case`error`:this.sinkLogger.error(i,n??{});return;case`silent`:return}}};function Ne(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function F(e,t){return new Me(e,t)}function Pe(e){je.getInstance().setGlobalLevel(e)}const I=F(`agents`);var Fe=class{config;executor;logger;constructor(e=Ae){this.logger=e}async configure(e){this.config=e,this.hasExecutor(e)&&e.executor&&(this.executor=e.executor)}hasExecutor(e){return typeof e==`object`&&!!e&&`executor`in e}async*streamWithAbort(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await Ie(n,t);if(e.done||(await Le(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){let t=await this.chat(e.messages,{...e.model!==void 0&&{model:e.model},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}});return{content:t.content??null,toolCalls:De(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata}}async*generateStreamingResponse(e){if(!this.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${this.name}"`);for await(let t of this.chatStream(e.messages,{...e.model!==void 0&&{model:e.model},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}}))yield{content:t.content??null,toolCalls:De(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata}}supportsTools(){return!0}getCapabilities(){return ce(this.supportsTools())}validateConfig(){return!0}validateMessages(e){N(e)}validateTools(e){Se(e)}validateNativeWebTools(e){ue(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return Ce(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){this.logger.debug?.(`🔍 [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request`,{provider:this.name,model:t?.model,hasTools:!!t?.tools,toolsCount:t?.tools?.length||0,toolNames:t?.tools?.map(e=>e.name)||[]}),yield*we(this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Ie(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}async function Le(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}(function(e){return e.MONITORING=`monitoring`,e.LOGGING=`logging`,e.STORAGE=`storage`,e.NOTIFICATION=`notification`,e.SECURITY=`security`,e.PERFORMANCE=`performance`,e.ERROR_HANDLING=`error_handling`,e.LIMITS=`limits`,e.EVENT_PROCESSING=`event_processing`,e.CUSTOM=`custom`,e})({});let Re=function(e){return e[e.CRITICAL=1e3]=`CRITICAL`,e[e.HIGH=800]=`HIGH`,e[e.NORMAL=500]=`NORMAL`,e[e.LOW=200]=`LOW`,e[e.MINIMAL=100]=`MINIMAL`,e}({});const L={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},ze=`agent`,R={START:`start`,COMPLETE:`complete`,ERROR:`error`,ASSISTANT_MESSAGE_START:`assistant_message_start`,ASSISTANT_MESSAGE_COMPLETE:`assistant_message_complete`,USER_MESSAGE:`user_message`,TOOL_RESULTS_TO_LLM:`tool_results_to_llm`,TOOL_RESULTS_READY:`tool_results_ready`},Be=`execution`;function Ve(e){return`executionId`in e||`toolName`in e}function He(e){let t=0,n=!1;for(let r=0;r<e.length;r++){let i=e[r]===` `||e[r]===` `||e[r]===`
|
|
2
|
+
`||e[r]===`\r`;!i&&!n?(t++,n=!0):i&&(n=!1)}return t}var Ue=class{listeners=new Set;subscribe(e){this.listeners.add(e)}unsubscribe(e){this.listeners.delete(e)}notifyListeners(e,t,n){for(let r of this.listeners)r(e,t,n)}},We=class extends Ue{emit(e,t,n){}};const Ge=new We;function Ke(e){return e===Ge||e instanceof We}function qe(e,t){if(!e||e.trim().length===0)throw Error(`[EVENTS] ownerType is required to compose event names.`);if(e.includes(`.`))throw Error(`[EVENTS] ownerType must not contain '.': "${e}"`);if(!t||t.trim().length===0)throw Error(`[EVENTS] local event name is required.`);if(t.includes(`.`))throw Error(`[EVENTS] Local event name must not contain '.': "${t}"`);return`${e}.${t}`}function Je(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var Ye=class extends Ue{base;binding;constructor(e,t){super(),this.base=e,this.binding=t}emit(e,t,n){if(e.includes(`.`))throw Error(`[EVENTS] Local event name must not contain '.': "${e}"`);let r={...n,ownerType:this.binding.ownerType,ownerId:this.binding.ownerId,ownerPath:this.binding.ownerPath,depth:this.binding.ownerPath.length,spanId:n?.spanId??Je()},i=qe(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function Xe(e,t){return new Ye(e,t)}function Ze(e,t,n,r,i,a,o){e.emitExecution(R.START,{parameters:{input:t,agentConfiguration:i.aiProviderInfo,availableTools:i.toolsInfo,toolCount:i.toolsInfo.length,hasTools:i.toolsInfo.length>0,systemMessage:n.systemMessage,provider:n.defaultModel.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},metadata:{method:`execute`,inputLength:t.length,messageCount:r.length,aiProvider:i.aiProviderInfo.providerName,model:i.aiProviderInfo.model,toolsAvailable:i.toolsInfo.map(e=>e.name),agentCapabilities:{canUseTools:i.toolsInfo.length>0,supportedActions:i.toolsInfo.map(e=>e.name)}}},a,o)}function Qe(e,t,n,r){e.emitExecution(R.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:He(t),characterCount:t.length},metadata:{messageRole:`user`,inputLength:t.length,messageType:`user_message`,hasQuestions:t.includes(`?`),containsUrgency:/urgent|asap|critical|emergency/i.test(t),estimatedComplexity:t.length>200?`high`:t.length>50?`medium`:`low`}},n,r)}function $e(e,t,n,r,i,a,o,s){if(typeof n.content!=`string`||n.content.length===0)throw Error(`[EXECUTION] assistant response must have content or tool calls`);if(!(n.timestamp instanceof Date))throw Error(`[EXECUTION] assistant response timestamp is required`);let c=n.content,l=n.timestamp,u=new Date().getTime()-l.getTime();e.emitWithContext(R.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:He(c),responseTime:u,contentPreview:c.length>200?c.substring(0,200)+`...`:c},result:{success:!0,data:c.substring(0,100)+`...`,fullResponse:c,responseMetrics:{length:c.length,estimatedReadTime:Math.ceil(He(c)/200),hasCodeBlocks:/```/.test(c),hasLinks:/https?:\/\//.test(c),complexity:c.length>1e3?`high`:c.length>300?`medium`:`low`}},metadata:{executionId:r,round:i,completed:!0,reason:`no_tool_calls`,responseCharacteristics:{hasQuestions:c.includes(`?`),isError:/error|fail|wrong/i.test(c),isComplete:/complete|done|finish/i.test(c),containsNumbers:/\d/.test(c)}}},()=>e.buildResponseOwnerContext(a,r,o,s),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for response event`);return Xe(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function et(e,t,n,r,i,a,o,s,c,l){let u=n.map(e=>{if(!e.id||e.id.length===0)throw Error(`[EXECUTION] Tool call missing id for tool results ready payload`);return e.id});if(u.length===0)throw Error(`[EXECUTION] Tool results ready requires toolCallIds`);let d=()=>e.buildThinkingOwnerContext(a,o,c,l),f=e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for tool results event`);return Xe(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})};e.emitWithContext(R.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(R.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}var tt=class extends Error{context;constructor(e,t){super(e),this.context=t,this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype)}},z=class extends tt{code=`CONFIGURATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t){super(`Configuration Error: ${e}`,t)}},B=class extends tt{field;code=`VALIDATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t,n){super(`Validation Error: ${e}`,n),this.field=t}},nt=class extends tt{issues;attempts;code=`STRUCTURED_OUTPUT_ERROR`;category=`provider`;recoverable=!0;constructor(e,t,n,r){super(`Structured Output Error: ${e}`,r),this.issues=t,this.attempts=n}},rt=class extends tt{provider;originalError;code=`PROVIDER_ERROR`;category=`provider`;recoverable=!0;constructor(e,t,n,r){super(`Provider Error (${t}): ${e}`,r),this.provider=t,this.originalError=n}},it=class extends tt{provider;code=`AUTHENTICATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t,n){super(`Authentication Error: ${e}`,n),this.provider=t}},at=class extends tt{retryAfter;provider;code=`RATE_LIMIT_ERROR`;category=`provider`;recoverable=!0;constructor(e,t,n,r){super(`Rate Limit Error: ${e}`,r),this.retryAfter=t,this.provider=n}},ot=class extends tt{originalError;code=`NETWORK_ERROR`;category=`system`;recoverable=!0;constructor(e,t,n){super(`Network Error: ${e}`,n),this.originalError=t}},st=class extends tt{toolName;originalError;code=`TOOL_EXECUTION_ERROR`;category=`system`;recoverable=!1;constructor(e,t,n,r){super(`Tool Execution Error (${t}): ${e}`,r),this.toolName=t,this.originalError=n}},ct=class extends tt{pluginName;code=`PLUGIN_ERROR`;category=`system`;recoverable=!1;constructor(e,t,n){super(`Plugin Error (${t}): ${e}`,n),this.pluginName=t}},lt=class extends tt{code=`CACHE_INTEGRITY_ERROR`;category=`system`;recoverable=!1;constructor(e,t){super(`Cache Integrity Error: ${e}`,t)}};function ut(e){if(!e.executionId)throw new B(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new B(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new B(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function dt(e,t){let n=ut(e);return{toolName:e.toolName,parameters:e.parameters,...t?{signal:t}:{},executionId:n.executionId,ownerType:n.ownerType,ownerId:n.ownerId,ownerPath:e.ownerPath,metadata:e.metadata,eventService:e.eventService,baseEventService:e.baseEventService,...e.ask?{ask:e.ask}:{}}}function ft(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function pt(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function mt(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function ht(e){return e!==void 0}function gt(e){return e!==void 0}function _t(e,t){if(e===0)return 0;if(t===void 0||!Number.isFinite(t))return e;let n=Math.floor(t);return n<1?1:Math.min(n,e)}async function vt(e,t,n,r){let i=e.requests[r];if(i)try{let a=e.signal?.aborted?ft(i):await t.executeTool(i.toolName,i.parameters,dt(i,e.signal));n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=mt(a))}catch(e){let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=pt(i,t)}}async function yt(e,t,n){for(;n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await vt(e,t,n,r)}}async function bt(e,t){let n={resultsByIndex:Array(e.requests.length),errorsByIndex:Array(e.requests.length),nextRequestIndex:0},r=_t(e.requests.length,e.maxConcurrency),i=Array.from({length:r},()=>yt(e,t,n));await Promise.all(i);let a=n.resultsByIndex.filter(ht),o=n.errorsByIndex.filter(gt);if(o.length>0&&!e.continueOnError)throw o[0];return{results:a,errors:o}}async function xt(e,t){let n=[],r=[];for(let i of e.requests)try{let a=e.signal?.aborted?ft(i):await t.executeTool(i.toolName,i.parameters,dt(i,e.signal));if(n.push(a),a.success||r.push(mt(a)),!a.success&&!e.continueOnError)break}catch(t){let n=t instanceof Error?t:Error(String(t));if(r.push(n),!e.continueOnError)break}return{results:n,errors:r}}async function St(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?bt(e,t):xt(e,t)}const Ct={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},wt=`tool`,Tt=`unknown_tool`;var Et=class{tools;logger;askHandler;constructor(e,t=Ae){this.tools=e,this.logger=t}setAskHandler(e){this.askHandler=e}async executeTool(e,t,n){this.logger.debug(`Executing tool: ${e}`);try{if(!n?.executionId)throw new B(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);if(!this.tools.hasTool(e)){let t=this.tools.getTools().map(e=>e.name).sort(),r=Dt(e,t),i=n.eventService;if(i){let t={timestamp:new Date,toolName:e,error:r};i.emit(Ct.CALL_ERROR,t)}return this.logger.warn(`Tool call skipped because requested tool is not registered`,{toolName:e,availableTools:t}),{success:!1,error:r,toolName:e,executionId:n.executionId,metadata:{errorCode:Tt,requestedTool:e,availableTools:t}}}let r=n.eventService;if(r){let n={timestamp:new Date,toolName:e,parameters:t};r.emit(Ct.CALL_START,n)}let{toolName:i,parameters:a,...o}=n,s={...o,toolName:e,parameters:t,executionId:n.executionId},c=await this.tools.executeTool(e,t,s);if(this.logger.debug(`Tool execution completed: ${e}`),r){let t={timestamp:new Date,toolName:e,result:c};r.emit(Ct.CALL_COMPLETE,t),r.emit(Ct.CALL_RESPONSE_READY,t)}return{success:!0,result:c,toolName:e,executionId:s.executionId}}catch(t){this.logger.error(`Tool execution failed: ${e}`);let r=t instanceof Error?t:Error(String(t)),i=n?.eventService;if(i&&n?.executionId){let t={timestamp:new Date,toolName:e,error:r.message};i.emit(Ct.CALL_ERROR,t)}return{success:!1,error:r.message,toolName:e,executionId:n?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n;try{n=JSON.parse(e.function.arguments)}catch{throw new B(`Failed to parse arguments for tool "${e.function.name}" (call ${e.id}): invalid JSON`)}return{toolName:e.function.name,parameters:n,executionId:e.id,ownerType:`tool`,ownerId:e.id,ownerPath:[...t.ownerPathBase,{type:`tool`,id:e.id}],metadata:t.metadataFactory?t.metadataFactory(e):void 0,...this.askHandler?{ask:this.askHandler}:{}}})}async executeTools(e){return St(e,this,this.logger)}};function Dt(e,t){return`Tool "${e}" is not registered, so the tool call was not executed. Available tools: ${t.length>0?t.join(`, `):`no registered tools are available`}.`}function Ot(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function kt(e,t,n,r){if(!n||n.length===0)throw Error(`[EXECUTION] Missing rootId for execution owner context`);if(!r||r.length===0)throw Error(`[EXECUTION] Missing executionId for execution owner context`);let i=[...e.length?e:t];return n&&!i.some(e=>e.type===`agent`&&e.id===n)&&i.push({type:`agent`,id:n}),i.push({type:`execution`,id:r}),{ownerType:Be,ownerId:r,ownerPath:i}}function At(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...kt(e,t,n,r).ownerPath];return a&&(o.push({type:`thinking`,id:a}),o.push({type:`tool_result`,id:`tool_result_${a}`})),o.push({type:`thinking`,id:i}),{ownerType:Be,ownerId:r,ownerPath:o}}function jt(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:wt,ownerId:i,ownerPath:[...kt(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function Mt(e,t,n,r,i,a){let o=At(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:Be,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}var Nt=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=Ot(n),this.toolEventServices=new Map,this.agentOwnerPathBase=[]}prepareOwnerPathBases(e){this.toolEventServices.clear();let t=[...this.ownerPathBase,{type:`agent`,id:e}];this.agentOwnerPathBase=t}resetOwnerPathBases(){this.toolEventServices.clear(),this.agentOwnerPathBase=[]}ensureToolEventService(e,t){if(Ke(this.baseEventService))return this.baseEventService;if(!e)throw Error(`[EVENT-SERVICE] Missing ownerId for tool event context`);if(!t||t.length===0)throw Error(`[EVENT-SERVICE] Missing ownerPath for tool event context`);if(this.toolEventServices.has(e))return this.toolEventServices.get(e);let n=Xe(this.baseEventService,{ownerType:wt,ownerId:e,ownerPath:t.map(e=>({...e}))});return this.toolEventServices.set(e,n),n}clearToolEventServices(){this.toolEventServices.clear()}getBaseEventService(){return this.baseEventService}buildExecutionOwnerContext(e,t){return kt(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return At(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return jt(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return Mt(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}emitExecution(e,t,n,r){this.emitWithContext(e,t,()=>this.buildExecutionOwnerContext(n,r),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for execution event`);return Xe(this.baseEventService,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}emitTool(e,t,n,r,i){this.emitWithContext(e,t,()=>this.buildToolOwnerContext(n,r,i),e=>this.ensureToolEventService(e.ownerId,e.ownerPath))}emitWithContext(e,t,n,r){if(Ke(this.baseEventService))return;let i=n(),a=r(i),o={timestamp:new Date,...t};a.emit(e,o,i)}emitExecutionStartEvent(e,t,n,r,i,a){Ze(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Qe(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){$e(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){et(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function Pt(e){let t=Ft(e.metadata),n=Lt(e.usage);return t??n}function Ft(e){if(!e)return;let t=Lt({inputTokens:Rt(e,`inputTokens`),outputTokens:Rt(e,`outputTokens`),promptTokens:Rt(e,`promptTokens`),completionTokens:Rt(e,`completionTokens`),totalTokens:Rt(e,`totalTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return It(n);if(Bt(n))return Lt(n)}function It(e){try{return Lt(JSON.parse(e))}catch{return}}function Lt(e){if(!e)return;let t=zt(e.inputTokens,e.promptTokens),n=zt(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=zt(e.totalTokens);return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r}}}function Rt(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function zt(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function Bt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}function Vt(e){return Math.ceil(JSON.stringify(e).length/4)}function Ht(e,t={}){let n=Vt(e),r=Ut(e),i=r?.tokens,a=Wt(t.usageFloorTokens);return{usedTokens:r?.index===e.length-1?Math.max(i??0,a??0):Math.max(n,i??0,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function Ut(e){for(let t=e.length-1;t>=0;t--){let n=Pt(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Wt(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Gt={"claude-opus-4-6":{name:`Claude Opus 4.6`,id:`claude-opus-4-6`,contextWindow:1e6,maxOutput:128e3},"claude-sonnet-4-6":{name:`Claude Sonnet 4.6`,id:`claude-sonnet-4-6`,contextWindow:1e6,maxOutput:64e3},"claude-haiku-4-5":{name:`Claude Haiku 4.5`,id:`claude-haiku-4-5`,contextWindow:2e5,maxOutput:64e3},"claude-haiku-4-5-20251001":{name:`Claude Haiku 4.5`,id:`claude-haiku-4-5-20251001`,contextWindow:2e5,maxOutput:64e3},"claude-sonnet-4-5":{name:`Claude Sonnet 4.5`,id:`claude-sonnet-4-5`,contextWindow:2e5,maxOutput:64e3},"claude-sonnet-4-5-20250929":{name:`Claude Sonnet 4.5`,id:`claude-sonnet-4-5-20250929`,contextWindow:2e5,maxOutput:64e3},"claude-opus-4-5":{name:`Claude Opus 4.5`,id:`claude-opus-4-5`,contextWindow:2e5,maxOutput:64e3},"claude-opus-4-5-20251101":{name:`Claude Opus 4.5`,id:`claude-opus-4-5-20251101`,contextWindow:2e5,maxOutput:64e3}};function Kt(e){return Gt[e]?.contextWindow??2e5}function qt(e){return Gt[e]?.maxOutput??16384}function Jt(e){if(e>=1e6){let t=e/1e6;return Number.isInteger(t)?`${t}M`:`${parseFloat(t.toFixed(1))}M`}if(e<=0)return`0K`;if(e<1e3)return`<1K`;let t=e/1e3;return Number.isInteger(t)?`${t}K`:`${parseFloat(t.toFixed(1))}K`}const Yt=.95;function Xt(e,t,n){let r=Ht(e,{usageFloorTokens:n}),i=Kt(t),a=i*Yt,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:Yt*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function Zt(e,t,n,r,i,a){let o=Xt(e,t.defaultModel.model,n.cumulativeInputTokens);return o.shouldBlock?(i.warn(`[ROUND] Context hard-capacity prevention before provider call`,{estimatedTokens:o.estimatedTokens,contextLimit:o.contextLimit,thresholdTokens:o.thresholdTokens,thresholdPercentage:o.thresholdPercentage,serializedTokens:o.serializedTokens,providerTokens:o.providerTokens??0,usageFloorTokens:o.usageFloorTokens??0,round:a}),r.addAssistantMessage(`Context window is near capacity. Cannot process further in this round. Estimated ${o.estimatedTokens.toLocaleString()} / ${o.contextLimit.toLocaleString()} tokens (${Math.round(o.usedPercentage)}%) exceeds the hard-block threshold ${Math.round(o.thresholdPercentage)}%. Run /compact and retry.`,[],{round:a,contextOverflow:!0,estimatedTokens:o.estimatedTokens,contextLimit:o.contextLimit,thresholdTokens:o.thresholdTokens,thresholdPercentage:o.thresholdPercentage,serializedTokens:o.serializedTokens,providerTokens:o.providerTokens??0,usageFloorTokens:o.usageFloorTokens??0,usedPercentage:o.usedPercentage}),!0):!1}const Qt={beforeRun:async(e,t)=>{e.beforeRun&&t.input&&await e.beforeRun(t.input,t.metadata)},afterRun:async(e,t)=>{e.afterRun&&t.input&&t.response&&await e.afterRun(t.input,t.response,t.metadata)},beforeProviderCall:async(e,t)=>{e.beforeProviderCall&&t.messages&&await e.beforeProviderCall(t.messages)},afterProviderCall:async(e,t)=>{e.afterProviderCall&&t.messages&&t.responseMessage&&await e.afterProviderCall(t.messages,t.responseMessage)},onError:async(e,t)=>{if(e.onError&&t.error){let n={action:`${Be}.${R.ERROR}`,metadata:{}},r=t.executionContext?.executionId;typeof r==`string`&&r.length>0&&(n.executionId=r);let i=t.executionContext?.sessionId;typeof i==`string`&&i.length>0&&(n.sessionId=i);let a=t.executionContext?.userId;typeof a==`string`&&a.length>0&&(n.userId=a),await e.onError(t.error,n)}}};async function $t(e,t,n,r){let i=Qt[t];if(i)for(let a of e)try{await i(a,n)}catch(e){r.warn(`Plugin hook failed`,{pluginName:a.name,hookName:t,error:e instanceof Error?e.message:String(e)})}}function en(e){if(e?.type){if(e.type===`json_schema`){if(!e.schema)throw Error(`responseFormat.schema is required when type is 'json_schema'.`);return{type:`json_schema`,schema:e.schema,...e.name&&{name:e.name}}}return{type:e.type}}}function tn(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function nn(e,t){if(e===void 0||e===`auto`||e===`none`)return;let n=(t??[]).map(e=>e.name);if(e===`required`){if(n.length===0)throw Error(`toolChoice 'required' needs at least one tool, but the run has none.`);return}if(!n.includes(e.tool))throw Error(`toolChoice requests tool "${e.tool}" which is not available for this run. Available tools: ${n.length>0?n.join(`, `):`(none)`}`)}function rn(e,t,n){let r=e.getCurrentProvider(),i=r?e.getProvider(r.provider):null;if(!r||!r.provider||!i)throw Error(`[EXECUTION] Provider is required`);let a=t.getTools();return{provider:i,currentInfo:r,aiProviderInfo:{providerName:r.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},toolsInfo:a.map(e=>{let t=e.parameters?.properties;if(!e.description||e.description.length===0)throw Error(`[EXECUTION] Tool "${e.name}" is missing description`);return{name:e.name,description:e.description,parameters:t&&typeof t==`object`?Object.keys(t):[]}}),availableTools:a}}function an(e){if(!e.currentInfo)throw Error(`No AI provider configured`);if(!e.provider)throw Error(`AI provider '${e.currentInfo.provider}' not found`);if(typeof e.provider.chat!=`function`)throw Error(`Provider must have chat method to support execution`)}function on(e,t,n,r,i){let a=e.getConversationStore(t);if(!a.getMessages().some(e=>e.role!==`system`)&&n.length>0){for(let e of n)if(e.role===`user`)a.addUserMessage(e.content,e.metadata,e.parts);else if(e.role===`assistant`)a.addAssistantMessage(e.content,e.toolCalls,e.metadata,e.parts);else if(e.role===`tool`){let t=e.metadata?.toolName;if(typeof t!=`string`||t.length===0)throw Error(`[EXECUTION] Tool message missing toolName metadata`);a.addToolMessageWithId(e.content,e.toolCallId,t,e.metadata,e.parts)}}let o=a.getMessages().some(e=>e.role===`system`);return r.systemMessage&&!o&&a.setSystemPrompt(r.systemMessage,{executionId:i}),a}function sn(e,t,n,r){let i=e.getMessages(),a=i.filter(e=>e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0).pop(),o=a?a.content:`No response received. The context window may be full.`,s=a?.metadata?.providerError===!0,c=Date.now()-n.getTime();return{response:o,messages:i.map(e=>{if(typeof e.content!=`string`)throw Error(`[EXECUTION] Message content is required`);return{role:e.role,content:e.content,timestamp:e.timestamp,metadata:e.metadata,...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{}}}),executionId:t,duration:c,tokensUsed:i.filter(e=>e.metadata?.usage).reduce((e,t)=>{let n=t.metadata?.usage;if(n&&typeof n==`object`&&`totalTokens`in n){let t=Number(n.totalTokens);if(Number.isNaN(t))throw Error(`[EXECUTION] totalTokens must be a number`);return e+t}return e},0),toolsExecuted:r,success:!!a&&!s,...s?{error:Error(o)}:{}}}async function cn(e,t,n,r,i,a,o,s){let c=Date.now()-n.getTime();await $t(a,`onError`,{error:e instanceof Error?e:Error(String(e)),executionContext:fn(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(R.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function ln(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function un(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function dn(e,t,n,r,i,a){return{messages:e,config:t,startTime:n,executionId:r,conversationId:i,...a?.sessionId&&{sessionId:a.sessionId},...a?.userId&&{userId:a.userId},...a?.metadata&&{metadata:a.metadata},...a?.signal&&{signal:a.signal},...a?.onTextDelta&&{onTextDelta:a.onTextDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.maxExecutionRounds!==void 0&&{maxExecutionRounds:a.maxExecutionRounds},...a?.maxSameToolInputs!==void 0&&{maxSameToolInputs:a.maxSameToolInputs},...a?.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:a.allowToolOnlyCompletion},...a?.maxTokens!==void 0&&{maxTokens:a.maxTokens},...a?.temperature!==void 0&&{temperature:a.temperature},...a?.toolChoice!==void 0&&{toolChoice:a.toolChoice}}}function fn(e){let t={conversationId:un(e,`plugin-context`),executionId:e.executionId,startTime:e.startTime.toISOString(),messageCount:e.messages.length};return e.sessionId&&(t.sessionId=e.sessionId),e.userId&&(t.userId=e.userId),t}function pn(e,t){let n=Array.isArray(t.lastTrackedAssistantMessage?.toolCalls)&&t.lastTrackedAssistantMessage.toolCalls.length>0;return{thinkingNodeId:`thinking_${e}_round${t.runningAssistantCount+1}`,previousThinkingNodeId:n?`thinking_${e}_round${t.runningAssistantCount}`:void 0}}async function mn(e,t,n,r,i){if(!t.defaultModel?.model)throw Error(`Model is required in defaultModel configuration. Please specify a model.`);if(typeof t.defaultModel.model!=`string`||t.defaultModel.model.trim()===``)throw Error(`Model must be a non-empty string in defaultModel configuration.`);let a={model:t.defaultModel.model,effort:t.defaultModel.effort??`high`,...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.toolChoice!==void 0&&{toolChoice:t.defaultModel.toolChoice},...n.availableTools.length>0&&{tools:n.availableTools},...(()=>{let e=en(t.responseFormat);return e?{responseFormat:e}:{}})(),...i};nn(a.toolChoice,a.tools);let o=n.provider.chat.bind(n.provider);if(r){let n=r.lookup(e,t.defaultModel.model,t.defaultModel.provider,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens});if(n)return{role:`assistant`,content:n,timestamp:new Date,id:(0,d.randomUUID)(),state:`complete`};let i=await hn(o,e,a,t.timeout);return typeof i.content==`string`&&r.store(e,t.defaultModel.model,t.defaultModel.provider,i.content,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens}),i}return hn(o,e,a,t.timeout)}async function hn(e,t,n,r){let i=gn(r),a=n.signal;if(i===void 0&&a===void 0)return e(t,n);if(a?.aborted)throw _n();let o=new AbortController,s,c=!1,l,u=()=>{s!==void 0&&(clearTimeout(s),s=void 0)},d=e=>{c||(c=!0,l?.(e),o.abort(e))},f=()=>{i===void 0||c||(u(),s=setTimeout(()=>{d(Error(`Provider call idle timeout after ${i}ms`))},i))},p=()=>{d(_n())};a?.addEventListener(`abort`,p,{once:!0});let m=n.onTextDelta,h={...n,signal:o.signal,...m===void 0?{}:{onTextDelta:e=>{f(),m(e)}}};f();try{return await Promise.race([e(t,h),new Promise((e,t)=>{l=t})])}finally{c=!0,u(),a?.removeEventListener(`abort`,p)}}function gn(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function _n(){let e=Error(`aborted`);return e.name=`AbortError`,e}function vn(e,t,n,r,i){let a=e.role===`assistant`?e.toolCalls:void 0,o=Array.isArray(a)&&a.length>0;if(typeof e.content!=`string`&&!o)throw Error(`[EXECUTION] Provider response must have content or tool calls`);if(a&&!Array.isArray(a))throw Error(`[EXECUTION] assistant toolCalls must be an array`);let s=e.content??``;if(i.debug(`[ROUND-${r}] Provider response completed`,{executionId:t,conversationId:n,round:r,responseLength:s.length,hasToolCalls:Array.isArray(a)&&a.length>0,toolCallsCount:Array.isArray(a)?a.length:0}),e.role!==`assistant`)throw Error(`Unexpected response role: ${e.role}`);let c=e,l=c.toolCalls??[];if(!Array.isArray(l))throw Error(`[EXECUTION] assistantResponse.toolCalls must be an array`);return{assistantResponse:c,assistantToolCalls:l}}function yn(e,t,n,r){let i=0,a=0;return{wrappedOnTextDelta:a=>{e.onExecutionEvent?.(`provider_stream_raw_delta`,{executionId:n,conversationId:e.conversationId,round:r,sequence:i,delta:a}),i++,t.appendStreaming(a),e.onTextDelta?.(a)},wrappedOnProviderNativeRawPayload:t=>{let i=t.sequence??a;a=Math.max(a,i+1),e.onExecutionEvent?.(`provider_native_raw_payload`,{executionId:n,conversationId:e.conversationId,round:r,...t,sequence:i})}}}async function bn(e,t,n,r,i,a,o,s,c,l,u){try{i.onExecutionEvent?.(`provider_request`,{executionId:s,conversationId:i.conversationId,round:o,provider:n.currentInfo.provider,model:t.defaultModel.model,messages:e,tools:n.availableTools});let a=await mn(e,t,n,r,{signal:i.signal,onTextDelta:l,onProviderNativeRawPayload:u,...i.maxTokens!==void 0&&{maxTokens:i.maxTokens},...i.temperature!==void 0&&{temperature:i.temperature},...(()=>{let e=tn(i.toolChoice??t.defaultModel.toolChoice,o);return e===void 0?{}:{toolChoice:e}})()});return i.onExecutionEvent?.(`provider_response_raw`,{executionId:s,conversationId:i.conversationId,round:o,response:a,responseKind:`provider-normalized-message`}),i.onExecutionEvent?.(`provider_response_normalized`,{executionId:s,conversationId:i.conversationId,round:o,response:a,toolCallsCount:a.role===`assistant`&&Array.isArray(a.toolCalls)?a.toolCalls.length:0}),a}catch(e){if(e instanceof Error&&(e.name===`AbortError`||e.message.includes(`aborted`)||e.message.includes(`abort`)))throw a.commitAssistant(`interrupted`,{round:o}),e;a.discardPending();let t=e instanceof Error?e.message:String(e);return c.error(`[ROUND] Provider call failed`,{error:t,round:o}),a.addAssistantMessage(`Request failed: ${t}`,[],{round:o,providerError:!0}),null}}function xn(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function Sn(e,t,n,r,i,a){let o=!1,s=0,c=0;for(let l of e){if(!l.id)throw Error(`Tool call missing ID: ${JSON.stringify(l)}`);let e=l.function?.name;if(!e||e.length===0)throw Error(`[EXECUTION] Tool call "${l.id}" missing function name`);if(o){i.warn(`[ROUND] Skipping tool result due to context overflow`,{toolCallId:l.id,toolName:e,round:r}),n.addToolMessageWithId(`Error: Context window near capacity. Tool execution result skipped. Respond with available results and re-request skipped tools if needed.`,l.id,e,{round:r,success:!1,error:`context_overflow`,toolName:e}),c++;continue}let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>Ve(e)&&e.executionId===l.id),f,p={round:r};if(u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=typeof u.result==`string`?u.result:JSON.stringify(u.result),p.success=!0,u.toolName&&(p.toolName=u.toolName)}else if(u&&!u.success){if(!u.error||u.error.length===0)throw Error(`[EXECUTION] Tool result missing error message`);f=`Error: ${u.error}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=Tt,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool),Array.isArray(u.metadata.availableTools)&&(p.availableTools=u.metadata.availableTools.filter(e=>typeof e==`string`)))}else if(d){let e=d,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message`);f=`Error: ${t}`,p.success=!1,p.error=t,e.toolName&&(p.toolName=e.toolName)}else throw Error(`No execution result found for tool call ID: ${l.id}`);if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),n.addToolMessageWithId(f,l.id,e,p),a){let e=Ht(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — skipping remaining tools`,{estimatedTokens:e,contextLimit:a.contextLimit,toolCallId:l.id,round:r}),o=!0)}s++,i.debug(`Tool result added to history`,{toolCallId:l.id,newHistoryLength:n.getMessages().length,round:r})}return{contextOverflowed:o,addedCount:s,skippedCount:c,unknownToolFailureCount:0,unknownToolNames:[]}}function Cn(e,t,n){for(let r of e){let e=r.function?.name??`unknown`,i=`${e}::${typeof r.function?.arguments==`string`?r.function.arguments:JSON.stringify(r.function?.arguments??{})}`,a=(t.sameToolInputCounts.get(i)??0)+1;if(t.sameToolInputCounts.set(i,a),a>n)throw Error(`[EXECUTION] Tool "${e}" called with identical input ${a} times — aborting to prevent infinite loop`)}}async function wn(e,t,n,r,i,a,o,s,c,l,u,d,f){let{toolExecutionService:p,logger:m,eventEmitter:h}=c,g=f??l?.maxSameToolInputs;g!==void 0&&Cn(e,s,g),m.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:i,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let _=h.buildThinkingOwnerContext(n,r,a,o).ownerPath,v=e.length,y=`${a}`,b=p.createExecutionRequestsWithContext(e,{ownerPathBase:_,metadataFactory:e=>({conversationId:n,round:i,directParentId:a,batchId:y,expectedCount:v,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:h.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:h.getBaseEventService()}}),x={requests:b,mode:`parallel`,maxConcurrency:5,continueOnError:!0,signal:u};d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:y,mode:x.mode,maxConcurrency:x.maxConcurrency,requestCount:b.length,tools:b.map(e=>e.toolName)}),b.forEach((e,t)=>{d?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:y,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.parameters,ownerPath:e.ownerPath})});let S=await p.executeTools(x),C=S.results.filter(xn).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);S.results.forEach((e,t)=>{d?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:y,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})}),s.toolsExecuted.push(...S.results.filter(e=>!xn(e)).map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}));let w=Kt(l?.defaultModel?.model??``),T=t.getMessages().length,E=Sn(e,S,t,i,m,{contextLimit:w,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(T).forEach((e,t)=>{d?.(`tool_message_committed`,{executionId:r,conversationId:n,round:i,batchId:y,index:t,message:e}),d?.(`history_mutation`,{executionId:r,conversationId:n,round:i,batchId:y,mutation:`append_message`,index:T+t,message:e})}),h.emitToolResultsEvents(e,S,s.toolsExecuted,n,r,i,a,o),h.clearToolEventServices(),{...E,unknownToolFailureCount:C.length,unknownToolNames:C}}function Tn(e){let t=0,n=0,r=!1;for(let i of e){if(!Te(i)||i.data===void 0)continue;let e=Ee(i);if(e.role!==`assistant`)continue;let a=En(e);a&&(r=!0,t+=a.inputTokens,n+=a.outputTokens)}if(r)return{promptTokens:t,completionTokens:n,totalTokens:t+n}}function En(e){let t=Pt(e);if(!t)return;let n=t.totalTokens??t.inputTokens+t.outputTokens;return{inputTokens:t.inputTokens,outputTokens:t.outputTokens,usage:{totalTokens:n,inputTokens:t.inputTokens,outputTokens:t.outputTokens}}}async function Dn(e,t,n,r,i,a,o,s,c){let{plugins:l,logger:u,eventEmitter:d,cacheService:f}=c,p=e.currentRound;u.debug(`[ROUND-${p}] Starting execution round ${p}`,{executionId:i,conversationId:a.conversationId,round:p,maxRounds:t});let m=n.getMessages(),{thinkingNodeId:h,previousThinkingNodeId:g}=pn(r,e);if(await $t(l,`beforeProviderCall`,{messages:m},u),u.debug(`Sending messages to AI provider`,{round:p,messageCount:m.length,lastFewMessages:m.slice(-5).map(e=>({role:e.role,content:e.content?.substring(0,50),hasToolCalls:`toolCalls`in e?!!e.toolCalls?.length:!1,toolCallId:`toolCallId`in e?e.toolCallId:void 0}))}),d.emitWithContext(R.ASSISTANT_MESSAGE_START,{parameters:{round:p,messageCount:m.length},metadata:{round:p,thinkingNodeId:h}},()=>d.buildThinkingOwnerContext(r,i,h,g),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for thinking event`);return Xe(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),Zt(m,o,e,n,u,p))return!0;p>1&&a.onTextDelta?.(`
|
|
3
|
+
|
|
4
|
+
`),n.beginAssistant();let{wrappedOnTextDelta:_,wrappedOnProviderNativeRawPayload:v}=yn(a,n,i,p),y=await bn(m,o,s,f,a,n,p,i,u,_,v);if(y===null)return!0;let{assistantResponse:b,assistantToolCalls:x}=vn(y,i,a.conversationId,p,u);await $t(l,`afterProviderCall`,{messages:m,responseMessage:y},u);let S=typeof b.content==`string`&&b.content.trim().length>0;if(x.length===0&&!S)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let C=En(b),w=C?.inputTokens??0;w>0&&(e.cumulativeInputTokens=w),b.content&&!n.getPendingContent()&&n.appendStreaming(b.content);for(let e of x)n.appendToolCall(e);let T=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(T,{round:p,...C??{}});let E=n.getMessages().at(-1);if(a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:b}),E&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:E}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=b,x.length===0)return u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(b,i,p,r,h,g),!0;let D=await wn(x,n,r,i,p,h,g,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs);if(D.contextOverflowed&&u.warn(`[ROUND] Tool results partially skipped due to context overflow — continuing to let AI respond`,{added:D.addedCount,skipped:D.skippedCount,round:p}),D.unknownToolFailureCount>0?e.consecutiveUnknownToolFailureRounds+=1:e.consecutiveUnknownToolFailureRounds=0,e.consecutiveUnknownToolFailureRounds>=2){let t=[...new Set(D.unknownToolNames)].sort();return e.forcedSummaryInstruction=[`The model repeatedly requested unavailable tool(s): ${t.join(`, `)}.`,`Those tool calls were not executed because they are not registered tools.`,`Respond to the user now with that reason and use the available tool results already in the conversation history.`].join(` `),u.warn(`[ROUND] Stopping repeated unavailable tool-call loop`,{unavailableTools:t,consecutiveRounds:e.consecutiveUnknownToolFailureRounds,round:p}),!0}return u.debug(`Round ${p} completed - continuing to next round for agent ${a.conversationId}`),!1}function On(e,t){let n=t.maxExecutionRounds??e.maxExecutionRounds;if(n===void 0)return 10;if(!Number.isInteger(n)||n<0)throw Error(`[EXECUTION] maxExecutionRounds must be a non-negative integer`);return n}function kn(e,t){return t===0||e<t}async function An(e,t,n,r,i,a,o,s,c){let l=On(i,r);for(;kn(o.currentRound,l)&&!(s?.aborted||(o.currentRound++,await Dn(o,l,e,t,n,r,i,a,c))||s?.aborted););let u=e.getMessages(),d=u.length>0?u[u.length-1]:void 0,f=d?.role===`assistant`&&typeof d.content==`string`&&d.content.length>0&&(!(`toolCalls`in d)||d.toolCalls.length===0);s?.aborted||r.allowToolOnlyCompletion!==!0&&(f||await jn(e,a,i,n,o,t,r,c.logger,l))}async function jn(e,t,n,r,i,a,o,s,c=10){s.warn(`No final text response — forcing summary call`,{maxRounds:c===0?`unlimited`:c,currentRound:i.currentRound,conversationId:a});try{let r=i.forcedSummaryInstruction??`Tool round limit reached. Provide your response based on the information gathered so far. If results are incomplete, let the user know what was covered and what remains — the user can request additional analysis in a follow-up message.`;e.addUserMessage(r);let a=e.getMessages(),s=n.systemMessage??``,c=a.some(e=>e.role===`system`&&e.content===s),l=s&&!c?[{id:(0,d.randomUUID)(),role:`system`,content:s,state:`complete`,timestamp:new Date},...a]:a,u={model:t.aiProviderInfo.model};o.onTextDelta&&(u.onTextDelta=o.onTextDelta);let f=await t.provider.chat(l,u),p=e.getMessages();if(p.findIndex(e=>e.role===`user`&&e.content===r)!==-1){let t=p.filter(e=>!(e.role===`user`&&e.content===r));e.clear();for(let n of t)e.addMessage(n)}let m=typeof f.content==`string`?f.content:``;m?e.addAssistantMessage(m,[],f.metadata):e.addAssistantMessage(`Maximum rounds reached. Partial results available in conversation history.`)}catch(e){s.warn(`Forced summary call failed`,{error:e instanceof Error?e.message:String(e)})}}async function Mn(e,t,n,r,i,a,o,s,c,l,u){let d={...sn(t,n,r,i.toolsExecuted),interrupted:o};return await $t(c,`afterRun`,{input:e,response:d.response,metadata:s?.metadata},l),l.debug(`Execution pipeline completed successfully`,{executionId:n,conversationId:a,duration:d.duration,tokensUsed:d.tokensUsed,toolsExecuted:d.toolsExecuted.length,rounds:i.currentRound}),u.emitExecution(R.COMPLETE,{result:{success:!0,data:d.response.substring(0,100)+`...`},metadata:{method:`execute`,success:!0,duration:d.duration,tokensUsed:d.tokensUsed,toolsExecuted:d.toolsExecuted}},a,n),d}async function*Nn(e,t,n,r,i,a,o,s){o.debug(`[EXECUTION-SERVICE-STREAM] Executing tools:`,{tools:e.map(e=>e.function.name)});let c=n,l=`thinking_${c}_${Date.now()}_${r}`,u=[...a.buildExecutionOwnerContext(c,r).ownerPath,{type:`thinking`,id:l}],d={requests:i.createExecutionRequestsWithContext(e,{ownerPathBase:u}),mode:`parallel`,maxConcurrency:5,continueOnError:!0,...s?{signal:s}:{}},f=await i.executeTools(d);for(let n of e){if(!n.id)throw Error(`[EXECUTION] Tool call missing id in streaming mode`);if(!n.function?.name||n.function.name.length===0)throw Error(`[EXECUTION] Tool call "${n.id}" missing function name in streaming mode`);let e=f.results.find(e=>e.executionId===n.id),i=f.errors.find(e=>Ve(e)&&e.executionId===n.id),a,o={executionId:r};if(e&&e.success){if(e.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload in streaming mode`);a=typeof e.result==`string`?e.result:JSON.stringify(e.result),o.success=!0,e.toolName&&(o.toolName=e.toolName),yield{chunk:`\n[Tool: ${n.function.name} executed successfully]`,isComplete:!1}}else if(i){let e=i,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message in streaming mode`);a=`Error: ${t}`,o.success=!1,o.error=t,e.toolName&&(o.toolName=e.toolName),yield{chunk:`\n[Tool: ${n.function.name} failed: ${t}]`,isComplete:!1}}else throw Error(`[EXECUTION] Missing tool result for tool call "${n.id}" in streaming mode`);t.addToolMessageWithId(a,n.id,n.function.name,o)}let p=e.map(e=>{if(!e.id||e.id.length===0)throw Error(`[EXECUTION] Tool call missing id for streaming tool results ready payload`);return e.id});if(p.length===0)throw Error(`[EXECUTION] Tool results ready requires toolCallIds in streaming mode`);a.emitExecution(R.TOOL_RESULTS_READY,{parameters:{toolCallIds:p,round:1},metadata:{toolsExecuted:f.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:1}},n,r)}async function*Pn(e,t,n,r,i){let{aiProviders:a,tools:o,conversationHistory:s,toolExecutionService:c,plugins:l,logger:u,eventEmitter:d}=i;u.debug(`ExecutionService.executeStream called`);let f=i.generateExecutionId(),p=Date.now();if(!r?.conversationId||r.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for streaming`);let m=r.conversationId;d.prepareOwnerPathBases(m);try{let t=s.getConversationStore(r.conversationId);e&&t.addUserMessage(e,{executionId:f}),await $t(l,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},u);let i=a.getCurrentProvider();if(!i)throw new z(`No AI provider configured`);let p=a.getProvider(i.provider);if(!p)throw new z(`AI provider '${i.provider}' not found`);if(typeof p.chatStream!=`function`)throw new z(`Provider must have chatStream method to support streaming execution`);u.debug(`ExecutionService calling provider.chatStream`);let h=t.getMessages(),g=Array.isArray(n.tools)?n.tools.length:void 0;u.debug(`[EXECUTION-SERVICE] config.tools:`,{length:g});let _=o.getTools(),v=Array.isArray(_)?_.length:void 0;u.debug(`[EXECUTION-SERVICE] this.tools.getTools():`,{length:v}),u.debug(`[EXECUTION-SERVICE] config.tools exists:`,{exists:!!n.tools}),u.debug(`[EXECUTION-SERVICE] config.tools.length > 0:`,{hasTools:n.tools&&n.tools.length>0});let y=r?.maxTokens??n.defaultModel.maxTokens,b=r?.temperature??n.defaultModel.temperature,x=r?.toolChoice??n.defaultModel.toolChoice,S={model:n.defaultModel.model,effort:n.defaultModel.effort??`high`,...r?.signal&&{signal:r.signal},...y!==void 0&&{maxTokens:y},...b!==void 0&&{temperature:b},...x!==void 0&&{toolChoice:x},...n.tools&&n.tools.length>0&&{tools:o.getTools()},...(()=>{let e=en(n.responseFormat);return e?{responseFormat:e}:{}})()};nn(S.toolChoice,S.tools),u.debug(`[EXECUTION-SERVICE] Final chatOptions has tools:`,{hasTools:!!S.tools});let C=Array.isArray(S.tools)?S.tools.length:void 0;u.debug(`[EXECUTION-SERVICE] Final chatOptions.tools length:`,{length:C});let w=p.chatStream;if(!w)throw new z(`Provider does not support streaming`);let T=w.call(p,h,S),E=``,D=!1,O=[],k=-1,A;for await(let e of T){let t=En(e);if(t&&(A=t),typeof e.content==`string`&&(D=!0),e.content&&(E+=e.content,yield{chunk:e.content,isComplete:!1}),e.role===`assistant`){let t=e;if(Array.isArray(t.toolCalls)&&t.toolCalls.length>0){for(let e of t.toolCalls)if(e.id&&e.id!==``){if(!e.type||e.type.length===0)throw Error(`[EXECUTION] Tool call "${e.id}" missing type in stream`);if(!e.function?.name||e.function.name.length===0)throw Error(`[EXECUTION] Tool call "${e.id}" missing function name in stream`);if(typeof e.function.arguments!=`string`)throw Error(`[EXECUTION] Tool call "${e.id}" missing arguments in stream`);k=O.length,O.push({id:e.id,type:e.type,function:{name:e.function.name,arguments:e.function.arguments}}),u.debug(`[TOOL-STREAM] New tool call started: ${e.id} (${e.function?.name})`)}else if(k>=0){let t=typeof e.function?.name==`string`&&e.function.name.length>0,n=typeof e.function?.arguments==`string`&&e.function.arguments.length>0;if(!t&&!n)throw Error(`[EXECUTION] Tool call fragment missing name/arguments for ${O[k].id}`);t&&(O[k].function.name+=e.function.name),n&&(O[k].function.arguments+=e.function.arguments);let r=n?e.function.arguments:e.function.name;u.debug(`[TOOL-STREAM] Adding fragment to tool ${O[k].id}: "${r}"`)}}}}if(u.debug(`[EXECUTION-SERVICE-STREAM] Stream completed, toolCalls detected:`,{count:O.length}),typeof E!=`string`)throw Error(`[EXECUTION] Streaming response content is required`);if(!D&&O.length===0)throw Error(`[EXECUTION] Provider response must have content or tool calls`);t.addAssistantMessage(E,O,{executionId:f,...A??{}}),O.length>0&&(yield*Nn(O,t,m,f,c,d,u,r?.signal)),await $t(l,`afterRun`,{input:e,response:E,...r?.metadata?{metadata:r.metadata}:{}},u),yield{chunk:``,isComplete:!0}}catch(t){throw u.error(`ExecutionService streaming execution failed`,{error:t instanceof Error?t.message:String(t),executionTime:Date.now()-p}),await $t(l,`onError`,{input:e,error:t instanceof Error?t:Error(String(t)),...r?.metadata?{metadata:r.metadata}:{}},u),t}finally{d.resetOwnerPathBases()}}var Fn=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new Et(t),this.aiProviders=e,this.tools=t,this.conversationHistory=n,this.plugins=[],this.logger=F(`ExecutionService`),!r)throw Error(`[EXECUTION] EventService is required`);this.eventEmitter=new Nt(r,this.logger,i),this.cacheService=a}setAskHandler(e){this.toolExecutionService.setAskHandler(e)}registerPlugin(e){let t=e.priority??0,n=this.plugins.findIndex(e=>(e.priority??0)<t);n===-1?this.plugins.push(e):this.plugins.splice(n,0,e),this.logger.debug(`Plugin registered`,{pluginName:e.name,priority:t})}removePlugin(e){let t=this.plugins.findIndex(t=>t.name===e);return t===-1?!1:(this.plugins.splice(t,1),this.logger.debug(`Plugin removed`,{pluginName:e}),!0)}getPlugin(e){return this.plugins.find(t=>t.name===e)}getPlugins(){return[...this.plugins]}async execute(e,t,n,r){let i=ln(),a=new Date,o=un(r,`execute`),s=dn(t,n,a,i,o,r);this.eventEmitter.prepareOwnerPathBases(o),this.logger.debug(`Starting execution pipeline`,{executionId:i,conversationId:o,messageCount:t.length,hasContext:!!r});let c=rn(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=on(this.conversationHistory,o,t,n,i);try{let t=l.getMessages().length;l.addUserMessage(e,{executionId:i});let u=l.getMessages()[t];u&&s.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:o,mutation:`append_message`,index:t,message:u}),this.eventEmitter.emitUserMessageEvent(e,o,i),await $t(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger),an(c);let d={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await An(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),Mn(e,l,i,a,d,o,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){return e instanceof Error&&(e.name===`AbortError`||e.message.includes(`aborted`)||e.message.includes(`abort`))?{response:``,messages:l.getMessages(),executionId:i,duration:Date.now()-a.getTime(),toolsExecuted:[],success:!0,interrupted:!0}:(await cn(e,s,a,o,i,this.plugins,this.logger,this.eventEmitter),{response:``,messages:[],tokensUsed:0,toolsExecuted:[],duration:Date.now()-a.getTime(),executionId:i,success:!1,error:e instanceof Error?e:Error(String(e))})}finally{this.eventEmitter.resetOwnerPathBases()}}async*executeStream(e,t,n,r){yield*Pn(e,t,n,r,{aiProviders:this.aiProviders,tools:this.tools,conversationHistory:this.conversationHistory,toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,generateExecutionId:()=>ln()})}async getStats(){return{pluginCount:this.plugins.length,pluginNames:this.plugins.map(e=>e.name),historyStats:this.conversationHistory.getStats()}}clearPlugins(){this.plugins=[],this.logger.debug(`All plugins cleared`)}};const In=(e,t)=>`${e}.${t}`,Ln={START:In(Be,R.START),COMPLETE:In(Be,R.COMPLETE),ERROR:In(Be,R.ERROR)},Rn={CALL_START:In(wt,Ct.CALL_START),CALL_COMPLETE:In(wt,Ct.CALL_COMPLETE),CALL_ERROR:In(wt,Ct.CALL_ERROR)},zn={EXECUTION_START:In(ze,L.EXECUTION_START),EXECUTION_COMPLETE:In(ze,L.EXECUTION_COMPLETE),EXECUTION_ERROR:In(ze,L.EXECUTION_ERROR),CREATED:In(ze,L.CREATED)},V={EXECUTION_START:Ln.START,EXECUTION_COMPLETE:Ln.COMPLETE,EXECUTION_ERROR:Ln.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:Rn.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:zn.EXECUTION_START,AGENT_EXECUTION_COMPLETE:zn.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:zn.EXECUTION_ERROR,AGENT_CREATED:zn.CREATED,AGENT_DESTROYED:`agent.destroyed`,PLUGIN_LOADED:`plugin.loaded`,PLUGIN_UNLOADED:`plugin.unloaded`,PLUGIN_ERROR:`plugin.error`,ERROR_OCCURRED:`error.occurred`,WARNING_OCCURRED:`warning.occurred`,MODULE_INITIALIZE_START:`module.initialize.start`,MODULE_INITIALIZE_COMPLETE:`module.initialize.complete`,MODULE_INITIALIZE_ERROR:`module.initialize.error`,MODULE_EXECUTION_START:`module.execution.start`,MODULE_EXECUTION_COMPLETE:`module.execution.complete`,MODULE_EXECUTION_ERROR:`module.execution.error`,MODULE_DISPOSE_START:`module.dispose.start`,MODULE_DISPOSE_COMPLETE:`module.dispose.complete`,MODULE_DISPOSE_ERROR:`module.dispose.error`,MODULE_REGISTERED:`module.registered`,MODULE_UNREGISTERED:`module.unregistered`,EXECUTION_HIERARCHY:`execution.hierarchy`,EXECUTION_REALTIME:`execution.realtime`,TOOL_REALTIME:`tool.realtime`,CUSTOM:`custom`};var Bn=class{enabled=!0;category=`custom`;priority=Re.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=F(`AbstractPlugin`);stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&`enabled`in e&&typeof e.enabled==`boolean`?this.enabled=e.enabled:this.enabled=!0,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(e.priority,e.priority))}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(V.MODULE_INITIALIZE_START,V.MODULE_INITIALIZE_COMPLETE,V.MODULE_INITIALIZE_ERROR,V.MODULE_EXECUTION_START,V.MODULE_EXECUTION_COMPLETE,V.MODULE_EXECUTION_ERROR,V.MODULE_DISPOSE_START,V.MODULE_DISPOSE_COMPLETE,V.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let e of t){let t=this.eventEmitter.on(e,async t=>{try{this.stats.moduleEventsReceived++,this.stats.lastActivity=new Date,await this.onModuleEvent?.(e,t)}catch(t){this.stats.errors++;let n=t instanceof Error?t:Error(String(t));this.pluginLogger.error(`Plugin "${this.name}" failed to handle module event "${String(e)}"`,{plugin:this.name,eventType:String(e),error:n.message})}}),n=this.eventHandlers.get(e);n?n.push(t):this.eventHandlers.set(e,[t]),this.subscribedEvents.push(e)}}async unsubscribeFromModuleEvents(e){for(let[t,n]of this.eventHandlers.entries())for(let r of n)e.off(t,r);this.eventHandlers.clear(),this.subscribedEvents=[],this.eventEmitter=void 0}async dispose(){this.eventEmitter&&await this.unsubscribeFromModuleEvents(this.eventEmitter)}enable(){this.enabled=!0}disable(){this.enabled=!1}isEnabled(){return this.enabled}getConfig(){return{}}updateConfig(e){}getData(){return{name:this.name,version:this.version,enabled:this.enabled,category:this.category,priority:this.priority,subscribedEvents:[...this.subscribedEvents],metadata:{moduleEventsReceived:this.stats.moduleEventsReceived,totalCalls:this.stats.calls,totalErrors:this.stats.errors}}}getStatus(){return{name:this.name,version:this.version,enabled:this.enabled,initialized:!0,category:this.category,priority:this.priority,subscribedEventsCount:this.subscribedEvents.length,hasEventEmitter:!!this.eventEmitter}}getStats(){return{enabled:this.enabled,calls:this.stats.calls,errors:this.stats.errors,moduleEventsReceived:this.stats.moduleEventsReceived,...this.stats.lastActivity&&{lastActivity:this.stats.lastActivity}}}updateCallStats(){this.stats.calls++,this.stats.lastActivity=new Date}updateErrorStats(){this.stats.errors++,this.stats.lastActivity=new Date}},Vn=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??Ae}setEventService(e){this.eventService=e}getEventService(){return this.eventService}emitEvent(e,t){this.eventService&&this.eventService.emit(e,t)}async execute(e,t){return await this.executeImpl(e,t)}validate(e){return(this.schema.parameters.required||[]).every(t=>t in e)}validateParameters(e){let t=this.schema.parameters.required||[],n=[],r=e;for(let e of t)e in r||n.push(`Missing required parameter: ${e}`);return{isValid:n.length===0,errors:n}}getDescription(){return this.schema.description}getName(){return this.schema.name}},Hn=class{static validateAgentConfig(e){let t=[],n=[];return e.name||t.push(`name is required`),(!e.aiProviders||e.aiProviders.length===0)&&t.push(`aiProviders array is required and must have at least one provider`),e.defaultModel?(e.defaultModel.provider||t.push(`defaultModel.provider is required`),e.defaultModel.model||t.push(`defaultModel.model is required`)):t.push(`defaultModel is required`),e.aiProviders&&e.defaultModel?.provider&&(e.aiProviders.map(e=>e.name).includes(e.defaultModel.provider)||t.push(`defaultModel.provider "${e.defaultModel.provider}" is not found in aiProviders list`)),e.defaultModel?.temperature!==void 0&&(typeof e.defaultModel.temperature!=`number`||e.defaultModel.temperature<0||e.defaultModel.temperature>2)&&t.push(`defaultModel.temperature must be a number between 0 and 2`),e.defaultModel?.maxTokens!==void 0&&(typeof e.defaultModel.maxTokens!=`number`||e.defaultModel.maxTokens<=0)&&t.push(`defaultModel.maxTokens must be a positive number`),e.systemMessage&&e.systemMessage.length>1e3&&n.push(`systemMessage is quite long, consider keeping it concise for better performance`),e.tools&&e.tools.length>20&&n.push(`Large number of tools may impact performance, consider grouping related tools`),{isValid:t.length===0,errors:t,warnings:n}}static validateUserInput(e){let t=[],n=[];return!e||typeof e!=`string`?t.push(`Input must be a non-empty string`):(e.trim().length===0&&t.push(`Input cannot be only whitespace`),e.length>1e4&&n.push(`Very long input may be truncated by AI providers`)),{isValid:t.length===0,errors:t,warnings:n}}static validateProviderName(e){let t=[];return!e||typeof e!=`string`?t.push(`Provider name must be a non-empty string`):/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(e)||t.push(`Provider name must start with a letter and contain only letters, numbers, underscores, and hyphens`),{isValid:t.length===0,errors:t}}static validateModelName(e){let t=[];return!e||typeof e!=`string`?t.push(`Model name must be a non-empty string`):e.trim().length===0&&t.push(`Model name cannot be only whitespace`),{isValid:t.length===0,errors:t}}static validateApiKey(e){let t=[];return!e||typeof e!=`string`?(t.push(`API key must be a non-empty string`),{isValid:!1,errors:t}):(e.length<10&&t.push(`API key appears to be too short`),/\s/.test(e)&&t.push(`API key should not contain whitespace`),{isValid:t.length===0,errors:t,warnings:[]})}};const Un=Hn.validateAgentConfig;Hn.validateUserInput,Hn.validateProviderName,Hn.validateModelName,Hn.validateApiKey;function Wn(e){return e===`darwin`?'Host OS: macOS (POSIX, BSD userland). Use BSD-flavored utilities: `sed -i ""` needs an empty backup arg, `date`/`grep`/`stat` flags differ from GNU. Prefer portable POSIX flags; avoid Linux/GNU-only options.':e===`linux`?"Host OS: Linux (POSIX, usually GNU coreutils, but distro/user setup varies). Prefer portable POSIX flags; do not assume a specific distro, and probe with `command -v` before relying on a non-standard tool.":`Host OS: ${e} (POSIX). Write portable POSIX sh/bash syntax; avoid OS-specific flags.`}function Gn(e,t){let n=/(^|\/)bash$/.test(e)?`bash`:`sh`;return{command:e,kind:n,platform:t,commandArgs:e=>[`-c`,e],interactiveArgs:[],label:`${n} on ${t}`,syntaxHint:Wn(t)}}function Kn(e){return{command:e,kind:`powershell`,platform:`win32`,commandArgs:e=>[`-NoProfile`,`-Command`,e],interactiveArgs:[`-NoProfile`],label:`PowerShell (Windows)`,syntaxHint:"Write PowerShell syntax (not bash): e.g. `Get-ChildItem` not `ls -la`, `$env:VAR` not `$VAR`."}}function qn(e=process.env,t=process.platform){let n=e.ROBOTA_SHELL?.trim();if(t===`win32`)return n!==void 0&&n.length>0?/(^|\\)cmd(\.exe)?$/i.test(n)?{command:n,kind:`cmd`,platform:t,commandArgs:e=>[`/d`,`/s`,`/c`,e],interactiveArgs:[],label:`cmd.exe (Windows)`,syntaxHint:`Write Windows cmd.exe syntax (not bash).`}:Kn(n):Kn(`powershell.exe`);if(n!==void 0&&n.length>0)return Gn(n,t);let r=e.SHELL?.trim();return Gn(r!==void 0&&r.length>0?r:`/bin/sh`,t)}function Jn(e,t={}){let n={},r=[],i=e._def;if(!i)throw Error(`Zod schema is missing _def; cannot convert to JSON schema.`);if(i.typeName===`ZodObject`&&i.shape){let e=typeof i.shape==`function`?i.shape():i.shape;for(let[t,i]of Object.entries(e))n[t]=Yn(i),Xn(i)&&r.push(t)}return{type:`object`,properties:n,required:r,...(t.allowAdditionalProperties||i.unknownKeys===`passthrough`)&&{additionalProperties:!0}}}function Yn(e){let t=e._def;if(!t)throw Error(`Zod type is missing _def; cannot convert to JSON schema.`);let n={};switch(t.description&&(n.description=t.description),t.typeName){case`ZodString`:return{type:`string`,...n};case`ZodNumber`:return{type:`number`,...n};case`ZodBoolean`:return{type:`boolean`,...n};case`ZodArray`:if(!t.type)throw Error(`ZodArray is missing item type; cannot convert to JSON schema.`);return{type:`array`,items:Yn(t.type),...n};case`ZodObject`:return{type:`object`,...n};case`ZodEnum`:{let e=t.values;if(!e||!Array.isArray(e))throw Error(`ZodEnum is missing enum values; cannot convert to JSON schema.`);return{type:`string`,enum:e,...n}}case`ZodOptional`:if(t.innerType)return{...Yn(t.innerType),...n};throw Error(`ZodOptional is missing innerType; cannot convert to JSON schema.`);case`ZodNullable`:if(t.innerType)return{...Yn(t.innerType),...n};throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);case`ZodDefault`:if(t.innerType)return{...Yn(t.innerType),...n};throw Error(`ZodDefault is missing innerType; cannot convert to JSON schema.`);case`ZodRecord`:return t.valueType?{type:`object`,additionalProperties:Yn(t.valueType),...n}:{type:`object`,additionalProperties:{type:`string`},...n};default:throw Error(`Unsupported Zod type: ${String(t.typeName)}`)}}function Xn(e){let t=e._def;if(!t)throw Error(`Zod schema is missing _def; cannot determine required fields.`);return t.typeName!==`ZodOptional`&&t.typeName!==`ZodNullable`&&t.typeName!==`ZodDefault`}function Zn(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function Qn(e){if(e&&typeof e==`object`&&`issues`in e){let t=e.issues;if(Array.isArray(t))return t.map(e=>{if(e&&typeof e==`object`&&`message`in e){let t=Array.isArray(e.path)?e.path.join(`.`):``,n=String(e.message);return t?`${t}: ${n}`:n}return String(e)})}return[String(e)]}function $n(e){if(Zn(e))return{name:`structured_output`,jsonSchema:Jn(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:Qn(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=er(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function er(e,t,n){let r=[],i=e.type;switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${tr(t)}`];let i=t,a=`required`in e?e.required??[]:[];for(let e of a)e in i||r.push(`${n}.${e}: required property missing`);let o=e.properties??{};for(let[e,t]of Object.entries(o))e in i&&r.push(...er(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(s===void 0||s===!1)for(let e of Object.keys(i))e in o||r.push(`${n}.${e}: unexpected additional property`);else if(typeof s==`object`)for(let[e,t]of Object.entries(i))e in o||r.push(...er(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${tr(t)}`];let i=`items`in e?e.items:void 0;return i&&t.forEach((e,t)=>{r.push(...er(i,e,`${n}[${t}]`))}),r}case`string`:return typeof t==`string`?(`enum`in e&&e.enum&&!e.enum.some(e=>e===t)&&r.push(`${n}: value ${JSON.stringify(t)} is not one of the allowed enum values`),`pattern`in e&&e.pattern&&!new RegExp(e.pattern).test(t)&&r.push(`${n}: value does not match pattern ${e.pattern}`),r):[`${n}: expected string, got ${tr(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${tr(t)}`]:(i===`integer`&&!Number.isInteger(t)&&r.push(`${n}: expected integer, got non-integer number`),`minimum`in e&&e.minimum!==void 0&&t<e.minimum&&r.push(`${n}: value ${t} is below minimum ${e.minimum}`),`maximum`in e&&e.maximum!==void 0&&t>e.maximum&&r.push(`${n}: value ${t} is above maximum ${e.maximum}`),`enum`in e&&e.enum&&!e.enum.some(e=>e===t)&&r.push(`${n}: value ${t} is not one of the allowed enum values`),r);case`boolean`:return typeof t==`boolean`?r:[`${n}: expected boolean, got ${tr(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${tr(t)}`];default:return[`${n}: unsupported schema type ${String(i)}`]}}function tr(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function nr(e){let t=e.trim(),n=/^```(?:json)?\s*\n([\s\S]*?)\n?```$/.exec(t),r=n?n[1]:t;try{return{success:!0,value:JSON.parse(r)}}catch(e){return{success:!1,issue:`response is not valid JSON: ${e instanceof Error?e.message:String(e)}`}}}function rr(e,t){let n={id:(0,d.randomUUID)(),role:`user`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function ir(e,t){let n={id:(0,d.randomUUID)(),role:`assistant`,content:e,state:t?.state??`complete`,timestamp:new Date};return t?.toolCalls&&(n.toolCalls=t.toolCalls),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function H(e,t){let n={id:(0,d.randomUUID)(),role:`system`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function ar(e,t){let n={id:(0,d.randomUUID)(),role:`tool`,content:e,toolCallId:t.toolCallId,state:`complete`,timestamp:new Date};return t.name&&(n.name=t.name),t.metadata&&(n.metadata=t.metadata),t.parts&&(n.parts=t.parts),n}var or=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(P(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(rr(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(ir(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(H(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>Te(e)&&Oe(Ee(e)),i=this.entries.filter(e=>!r(e)),a=P(H(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(ar(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(Te).map(Ee)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(Te).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(Te);if(e.length<=this.maxMessages)return;let t=e.map(Ee),n=t.filter(Oe),r=t.filter(e=>!Oe(e)),i=Math.max(0,this.maxMessages-n.length),a=[...n,...r.slice(-i)],o=new Set(a.map(e=>e.id));this.entries=this.entries.filter(e=>!Te(e)||o.has(e.id))}},sr=class{history;pendingAssistant=null;constructor(e=0){this.history=new or({maxMessages:e})}addMessage(e){this.history.addMessage(e)}addUserMessage(e,t,n){this.history.addUserMessage(e,t,n)}addAssistantMessage(e,t,n,r){this.history.addAssistantMessage(e,t,n,r)}addSystemMessage(e,t,n){this.history.addSystemMessage(e,t,n)}setSystemPrompt(e,t,n){this.history.setSystemPrompt(e,t,n)}addToolMessage(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n||`unknown`,r,i)}addToolMessageWithId(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n,r,i)}addEntry(e){this.history.addEntry(e)}getHistory(){return this.history.getHistory()}getMessages(){return this.history.getMessages()}getMessagesByRole(e){return this.history.getMessagesByRole(e)}getRecentMessages(e){return this.history.getRecentMessages(e)}getMessageCount(){return this.history.getMessageCount()}beginAssistant(){this.pendingAssistant||={id:(0,d.randomUUID)(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:(0,d.randomUUID)(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:(0,d.randomUUID)(),content:``,toolCalls:[]},this.pendingAssistant.toolCalls.some(t=>t.id===e.id)||this.pendingAssistant.toolCalls.push(e)}commitAssistant(e,t){if(!this.pendingAssistant)return;let n=this.pendingAssistant,r=n.toolCalls.length>0,i=n.content,a={id:n.id,role:`assistant`,content:i,state:e,timestamp:new Date,...r&&{toolCalls:n.toolCalls},...t&&{metadata:t}};this.history.addMessage(a),this.pendingAssistant=null}discardPending(){this.pendingAssistant=null}hasPendingAssistant(){return this.pendingAssistant!==null}getPendingContent(){return this.pendingAssistant?.content??``}getMessagesForAPI(){return this.history.getMessages().map(e=>{let t={role:e.role,content:e.content};return De(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
5
|
+
|
|
6
|
+
[This response was interrupted by the user]`),De(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),ke(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},cr=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||0,this.maxConversations=e.maxConversations||50,this.logger=F(`ConversationHistory`)}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new sr(this.maxMessagesPerConversation))),this.conversations.get(e)}hasConversation(e){return this.conversations.has(e)}removeConversation(e){let t=this.conversations.delete(e);return t&&this.logger.debug(`Removed conversation`,{conversationId:e}),t}clearAll(){let e=this.conversations.size;this.conversations.clear(),this.logger.debug(`Cleared all conversations`,{removedCount:e})}getStats(){let e=Array.from(this.conversations.keys()),t=Array.from(this.conversations.values()).reduce((e,t)=>e+t.getMessageCount(),0);return{totalConversations:this.conversations.size,conversationIds:e,totalMessages:t}}cleanupOldConversations(){if(this.conversations.size===0)return;let e=this.conversations.keys().next().value;e&&this.conversations.delete(e)}};const lr=`$ENV:`;function ur(e){return e.startsWith(lr)}function dr(e){return`${lr}${e}`}function fr(e){if(!ur(e))return e;let t=e.slice(5).trim();if(t.length!==0)return process.env[t]}function pr(e){return e===void 0||e.length===0?!1:fr(e)!==void 0}var mr=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function hr(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new ct(`Invalid maxListeners option: ${e.maxListeners}. Must be a non-negative number.`,t,{maxListeners:e.maxListeners});if(e.buffer!==void 0&&e.buffer.maxSize!==void 0&&e.buffer.maxSize<0)throw new ct(`Invalid buffer.maxSize option: ${e.buffer.maxSize}. Must be a non-negative number.`,t,{bufferMaxSize:e.buffer.maxSize});if(e.buffer!==void 0&&e.buffer.flushInterval!==void 0&&e.buffer.flushInterval<0)throw new ct(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function gr(e,t,n,r,i){try{await e.listener(t)}catch(a){if(n.incrementErrors(),!r)throw a instanceof Error?a:Error(String(a));i.error(`Event handler error`,{eventType:t.type,handlerId:e.id,error:a instanceof Error?a.message:String(a)})}}async function _r(e,t,n,r,i){let a=t.get(e.type);if(!a||a.length===0)return;let o=a.filter(t=>!t.filter||t.filter(e));if(o.length!==0){for(let t of o.filter(e=>e.once))r(e.type,t.id);if(n){await Promise.all(o.map(t=>i(t,e)));return}for(let t of o)await i(t,e)}}function vr(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function yr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=vr(t),o=r.getSnapshot();return{enabled:e.enabled,calls:e.calls,errors:e.errors,eventTypes:Array.from(t.keys()),listenerCounts:i,totalListeners:a,bufferedEvents:n,totalEmitted:o.totalEmitted,totalErrors:o.totalErrors}}function br(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new ct(`Maximum listeners (${a}) exceeded for event type: ${t}`,o,{eventType:t,currentListeners:s.length});s.push({id:n,listener:r,once:i?.once??!1,...i?.filter&&{filter:i.filter}})}function xr(e,t,n){let r=e.get(t);if(!r)return!1;let i=typeof n==`string`?r.findIndex(e=>e.id===n):r.findIndex(e=>e.listener===n);return i===-1?!1:(r.splice(i,1),!0)}function Sr(e,t,n){let r=t.result!==null&&t.result!==void 0;return{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.name||``,toolId:t.id||``,toolResult:r?String(t.result):void 0,duration:n,success:r}}}var Cr=class extends Bn{name=`EventEmitterPlugin`;version=`1.0.0`;pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=F(`EventEmitterPlugin`),this.metrics=e.metrics??new mr,hr(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[V.AGENT_EXECUTION_START,V.AGENT_EXECUTION_COMPLETE,V.AGENT_EXECUTION_ERROR,V.TOOL_BEFORE_EXECUTE,V.TOOL_AFTER_EXECUTE,V.TOOL_SUCCESS,V.TOOL_ERROR],maxListeners:e.maxListeners??100,async:e.async??!0,catchErrors:e.catchErrors??!0,filters:e.filters??{},buffer:e.buffer??{enabled:!1,maxSize:1e3,flushInterval:5e3},category:e.category??`event_processing`,priority:e.priority??Re.HIGH,moduleEvents:e.moduleEvents??[],subscribeToAllModuleEvents:e.subscribeToAllModuleEvents??!1},this.pluginOptions.buffer.enabled&&(this.bufferTimer=setInterval(()=>{this.flushBuffer().catch(e=>{this.logger.error(`Buffered flush failed`,{error:e instanceof Error?e.message:String(e)})})},this.pluginOptions.buffer.flushInterval))}async beforeExecution(e){await this.emit(V.AGENT_EXECUTION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messageCount:e.messages?.length||0,...e.config&&{config:e.config}}})}async afterExecution(e,t){await this.emit(V.AGENT_EXECUTION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{duration:t?.duration,tokensUsed:t?.tokensUsed,toolsExecuted:t?.toolsExecuted}})}async beforeConversation(e){await this.emit(V.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(e=>({role:e.role,content:e.content||``,timestamp:e.timestamp?e.timestamp.toISOString():new Date().toISOString()})),config:e.config}})}async afterConversation(e,t){await this.emit(V.CONVERSATION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{response:t.content||t.response,tokensUsed:t.usage?.totalTokens||t.tokensUsed,toolCalls:t.toolCalls?.map(e=>({id:e.id||``,name:e.name||``,arguments:JSON.stringify(e.arguments||{}),result:String(e.result||``)}))}})}async beforeToolExecution(e,t){t&&await this.emit(V.TOOL_BEFORE_EXECUTE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.toolName,toolId:t.executionId,arguments:JSON.stringify(t.parameters??{})}})}async afterToolExecution(e,t){if(!(!t.toolCalls||t.toolCalls.length===0))for(let n of t.toolCalls){let r=n.result===null?V.TOOL_ERROR:V.TOOL_SUCCESS,i=Sr(e,n,t.duration);await this.emit(r,i),await this.emit(V.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(V.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}})}on(e,t,n){let r=`handler_${this.nextHandlerId++}`;return br(this.handlers,e,r,t,n,this.pluginOptions.maxListeners,this.name),r}once(e,t,n){return this.on(e,t,{once:!0,...n&&{filter:n}})}off(e,t){return xr(this.handlers,e,t)}async emit(e,t={}){if(!this.pluginOptions.events.includes(e))return;let n={type:e,timestamp:new Date,...t},r=this.pluginOptions.filters[e];if(!(r&&!r(n))){if(this.metrics.incrementEmitted(),this.pluginOptions.buffer.enabled){this.eventBuffer.push(n),this.eventBuffer.length>=this.pluginOptions.buffer.maxSize&&await this.flushBuffer();return}await this.processEvent(n)}}async processEvent(e){await _r(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>gr(e,t,this.metrics,this.pluginOptions.catchErrors,this.logger))}async flushBuffer(){if(this.eventBuffer.length===0)return;let e=[...this.eventBuffer];this.eventBuffer=[];for(let t of e)await this.processEvent(t)}getStats(){return yr(super.getStats(),this.handlers,this.eventBuffer.length,this.metrics)}clearAllListeners(){this.handlers.clear()}async dispose(){this.bufferTimer&&clearInterval(this.bufferTimer),await this.flushBuffer(),this.clearAllListeners(),await super.dispose()}},wr=class extends be{moduleManager;pluginManager;addPlugin(e){this.pluginManager.addPlugin(e)}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}};function Tr(e){if(!e.name)throw new z(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new z(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new z(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new z(`Default model must specify both provider and model`,{component:`Robota`});let t=e.aiProviders.map(e=>e.name),n=t.filter((e,n)=>t.indexOf(e)!==n);if(n.length>0)throw new z(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`Robota`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new z(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var Er=class{logger;getAIProviders;getTools;getEventService;isReady;ensureReady;getConfig;setConfig;getConfigVersion;bumpConfigVersion;getConfigUpdatedAt;setConfigUpdatedAt;emitAgentEvent;constructor(e,t,n,r,i,a,o,s,c,l,u,d,f){this.logger=e,this.getAIProviders=t,this.getTools=n,this.getEventService=r,this.isReady=i,this.ensureReady=a,this.getConfig=o,this.setConfig=s,this.getConfigVersion=c,this.bumpConfigVersion=l,this.getConfigUpdatedAt=u,this.setConfigUpdatedAt=d,this.emitAgentEvent=f}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new z(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addTool(r.schema,async(e,t)=>{if(!t)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);return(await r.execute(e,t)).data});let e=r.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let r=this.getConfig();r.tools=e,this.setConfig(r);let i=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(L.CONFIG_UPDATED,{parameters:{tools:t,systemMessage:r.systemMessage,provider:r.defaultModel.provider,model:r.defaultModel.model,temperature:r.defaultModel.temperature,maxTokens:r.defaultModel.maxTokens},metadata:{version:i}}),{version:i}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);throw new z(`updateConfiguration: only tools patch is supported at this time`)}async getConfiguration(){await this.ensureReady();let e=this.getTools().getTools().map(e=>({name:e.name,parameters:(()=>{let t=e.parameters?.properties;return t&&typeof t==`object`?Object.keys(t):void 0})()}));return{version:this.getConfigVersion(),tools:e,updatedAt:this.getConfigUpdatedAt(),metadata:void 0}}setModel(e){if(!e.provider||!e.model)throw new z(`Both provider and model are required`,{component:`Robota`});if(!this.isReady())throw new z(`Agent must be fully initialized before changing model configuration`,{component:`Robota`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new z(`AI Provider '${e.provider}' not found. Available: ${n.join(`, `)}`,{component:`Robota`,provider:e.provider,availableProviders:n});t.setCurrentProvider(e.provider,e.model);let r=this.getConfig();this.setConfig({...r,defaultModel:{...r.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.effort!==void 0&&{effort:e.effort}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){if(!this.isReady())throw new z(`Agent must be fully initialized before getting model configuration`,{component:`Robota`});let e=this.getAIProviders().getCurrentProvider();if(!e)throw new z(`No provider is currently set`,{component:`Robota`});let t=this.getConfig();return{provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP}}}setSystemMessage(e){let t=this.getConfig();t.systemMessage=e,this.setConfig(t),this.setConfigUpdatedAt(Date.now())}getSystemMessage(){return this.getConfig().systemMessage}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);return(await e.execute(t,n)).data}),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},Dr=class{agentName;moduleRegistry;logger;isReady;ensureReady;constructor(e,t,n,r,i){this.agentName=e,this.moduleRegistry=t,this.logger=n,this.isReady=r,this.ensureReady=i}async registerModule(e,t){await this.ensureReady(),await this.moduleRegistry.registerModule(e,{autoInitialize:t?.autoInitialize??!0,validateDependencies:t?.validateDependencies??!0}),this.logger.info(`Module registered`,{moduleName:e.name,moduleType:e.getModuleType().type})}async unregisterModule(e){if(!this.isReady())return!1;let t=await this.moduleRegistry.unregisterModule(e);return t&&this.logger.info(`Module unregistered`,{moduleName:e}),t}getModule(e){if(this.isReady())return this.moduleRegistry.getModule(e)}getModulesByType(e){return this.isReady()?this.moduleRegistry.getModulesByType(e):[]}getModules(){return this.isReady()?this.moduleRegistry.getAllModules():[]}getModuleNames(){return this.isReady()?this.moduleRegistry.getModuleNames():[]}hasModule(e){return this.isReady()?this.moduleRegistry.hasModule(e):!1}async executeModule(e,t){await this.ensureReady();let n={agentName:this.agentName,...t.executionId&&{executionId:t.executionId},...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}};return await this.moduleRegistry.executeModule(e,n)}getModuleStats(e){if(this.isReady())return this.moduleRegistry.getModuleStats(e)}},Or=class{logger;isReady;getExecutionService;constructor(e,t,n){this.logger=e,this.isReady=t,this.getExecutionService=n}addPlugin(e){let t=this.getExecutionService();if(!this.isReady()||!t)throw new z(`Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.`,{pluginName:e.name});t.registerPlugin(e),this.logger.debug(`Plugin added`,{pluginName:e.name})}removePlugin(e){let t=this.getExecutionService();if(!t)return!1;let n=t.removePlugin(e);return n&&this.logger.debug(`Plugin removed`,{pluginName:e}),n}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return!this.isReady()||!e?[]:e.getPlugins().map(e=>e.name)}};function kr(e){return{moduleManager:new Dr(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new Or(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new Er(e.getLogger(),e.getAiProviders,e.getTools,e.getEventService,e.getIsFullyInitialized,e.ensureFullyInitialized,e.getConfig,t=>e.setConfig(t),e.getConfigVersion,e.incrementConfigVersion,e.getConfigUpdatedAt,t=>e.setConfigUpdatedAt(t),(t,n)=>e.emitAgentEvent(t,n))}}function Ar(e,t){let n=Array.isArray(e.tools)?e.tools.map(e=>{let t=e?.schema?.name;if(typeof t==`string`&&t.length>0)return t;let n=e?.name;return typeof n==`string`&&n.length>0?n:``}).filter(e=>typeof e==`string`&&e.length>0):[];t(L.CREATED,{parameters:{tools:n,systemMessage:e.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function jr(e,t,n,r,i){Ke(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:ze,ownerId:t,ownerPath:Nr(t,n)})}function Mr(){return new Cr({enabled:!0,events:[V.MODULE_INITIALIZE_START,V.MODULE_INITIALIZE_COMPLETE,V.MODULE_INITIALIZE_ERROR,V.MODULE_EXECUTION_START,V.MODULE_EXECUTION_COMPLETE,V.MODULE_EXECUTION_ERROR,V.MODULE_DISPOSE_START,V.MODULE_DISPOSE_COMPLETE,V.MODULE_DISPOSE_ERROR]})}function Nr(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function Pr(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.maxExecutionRounds!==void 0&&{maxExecutionRounds:t.maxExecutionRounds},...t.maxSameToolInputs!==void 0&&{maxSameToolInputs:t.maxSameToolInputs},...t.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:t.allowToolOnlyCompletion},...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.temperature!==void 0&&{temperature:t.temperature},...t.toolChoice!==void 0&&{toolChoice:t.toolChoice}}}async function Fr(e,t,n={},r){try{e.emitAgentEvent(L.EXECUTION_START,{}),e.logger.debug(`Starting Robota execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=await e.getExecutionService().execute(t,i,a,Pr(e,n));if(e.logger.debug(`Robota execution completed`,{success:o.success,duration:o.duration,tokensUsed:o.tokensUsed,toolsExecuted:o.toolsExecuted,interrupted:o.interrupted}),o.interrupted)return e.emitAgentEvent(L.EXECUTION_COMPLETE,{}),o.response;if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return e.emitAgentEvent(L.EXECUTION_COMPLETE,{}),o.response}catch(t){throw e.logger.error(`Robota execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(L.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}}async function*Ir(e,t,n={},r){try{e.emitAgentEvent(L.EXECUTION_START,{}),e.logger.debug(`Starting Robota streaming execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=e.getExecutionService().executeStream(t,i,a,Pr(e,n));for await(let e of o)yield e.chunk}catch(t){throw e.logger.error(`Robota streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(L.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}finally{e.emitAgentEvent(L.EXECUTION_COMPLETE,{})}}function Lr(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function Rr(e,t){return[`Your previous response did not match the required JSON schema.`,`Validation issues:`,...t.map(e=>`- ${e}`),``,`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e.jsonSchema)].join(`
|
|
7
|
+
`)}async function zr(e,t,n,r){let i=(n.outputRetries??2)+1,a=Lr(r),o=t,s=[];for(let t=1;t<=i;t++){let c=Vr(r,await Fr(e,o,n,a));if(c.success)return c.value;s=c.issues,e.logger.debug(`Structured output validation failed`,{attempt:t,maxAttempts:i,issues:s}),t<i&&(o=Rr(r,s))}throw new nt(`response failed schema validation after ${i} attempt(s)`,s,i)}async function*Br(e,t,n,r){let i=(n.outputRetries??2)+1,a=Lr(r),o=t,s=[];for(let t=1;t<=i;t++){let c=``;for await(let t of Ir(e,o,n,a))c+=t,yield t;let l=Vr(r,c);if(l.success)return l.value;s=l.issues,e.logger.debug(`Structured output validation failed (stream)`,{attempt:t,maxAttempts:i,issues:s}),t<i&&(o=Rr(r,s))}throw new nt(`response failed schema validation after ${i} attempt(s)`,s,i)}function Vr(e,t){let n=nr(t);if(!n.success)return{success:!1,issues:[n.issue]};let r=e.validate(n.value);return r.success?{success:!0,value:r.value}:{success:!1,issues:r.issues}}function Hr(e,t){return e.getConversationStore(t).getMessages().map(e=>({id:e.id,role:e.role,content:e.content,state:e.state,timestamp:e.timestamp,metadata:e.metadata,...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{},...e.role===`tool`&&`name`in e?{name:e.name}:{}}))}function Ur(e,t){return e.getConversationStore(t).getHistory()}function Wr(e,t,n){e.getConversationStore(t).addEntry(n)}function Gr(e,t){e.getConversationStore(t).clear()}function Kr(e,t,n,r,i){let a=e.getConversationStore(t);n===`tool`&&i?.toolCallId?a.addToolMessageWithId(r,i.toolCallId,i.name??`unknown`):n===`assistant`?a.addAssistantMessage(r,[]):n===`system`?a.addSystemMessage(r):a.addUserMessage(r)}function qr(e,t,n){e.getConversationStore(t).addMessage(n)}var Jr=class{build(e,t,n,r){let i=e.map(e=>({role:e.role,content:e.content})),a=JSON.stringify({messages:i,model:t,provider:n,temperature:r?.temperature,maxTokens:r?.maxTokens});return{hash:this.sha256(a),model:t,provider:n}}computeIntegrityHash(e){return this.sha256(e)}sha256(e){let t=new f.default(`SHA-256`,`TEXT`);return t.update(e),t.getHash(`HEX`)}},Yr=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new Jr;hits=0;misses=0;constructor(e){this.maxEntries=e.maxEntries,this.ttlMs=e.ttlMs}get(e){let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>this.ttlMs){this.cache.delete(e),this.removeFromAccessOrder(e),this.misses++;return}let n=this.keyBuilder.computeIntegrityHash(t.response);if(t.integrityHash!==n)throw this.cache.delete(e),this.removeFromAccessOrder(e),new lt(`Integrity check failed for cache entry ${e}`,{hash:e,expected:n,actual:t.integrityHash});return this.touchAccessOrder(e),this.hits++,t}set(e){let t=e.key.hash;!this.cache.has(t)&&this.cache.size>=this.maxEntries&&this.evictLRU(),this.cache.set(t,e),this.touchAccessOrder(t)}delete(e){return this.cache.has(e)?(this.cache.delete(e),this.removeFromAccessOrder(e),!0):!1}clear(){this.cache.clear(),this.accessOrder.length=0,this.hits=0,this.misses=0}getStats(){let e=this.hits+this.misses;return{hits:this.hits,misses:this.misses,entries:this.cache.size,hitRate:e===0?0:this.hits/e}}touchAccessOrder(e){this.removeFromAccessOrder(e),this.accessOrder.push(e)}removeFromAccessOrder(e){let t=this.accessOrder.indexOf(e);t!==-1&&this.accessOrder.splice(t,1)}evictLRU(){let e=this.accessOrder.shift();e&&this.cache.delete(e)}},Xr=class{storage;keyBuilder;constructor(e,t){this.storage=e,this.keyBuilder=t}lookup(e,t,n,r){let i=this.keyBuilder.build(e,t,n,r),a=this.storage.get(i.hash);return a?a.response:void 0}store(e,t,n,r,i){let a=this.keyBuilder.build(e,t,n,i);this.storage.set({key:a,response:r,timestamp:Date.now(),integrityHash:this.keyBuilder.computeIntegrityHash(r)})}getStats(){return this.storage.getStats()}};async function Zr(e){let{config:t,aiProviders:n,tools:r,agentFactory:i,conversationHistory:a,moduleRegistry:o,eventEmitter:s,eventService:c,logger:l}=e;if(l.debug(`Starting Robota initialization with independent managers`),await Promise.all([n.initialize(),r.initialize(),i.initialize()]),t.aiProviders)for(let e of t.aiProviders)n.addProvider(e.name,e);if(t.defaultModel&&n.setCurrentProvider(t.defaultModel.provider,t.defaultModel.model),t.modules){for(let e of t.modules)await o.registerModule(e,{autoInitialize:!0,validateDependencies:!0});l.debug(`Modules registered and initialized`,{moduleCount:t.modules.length,moduleNames:t.modules.map(e=>e.name)})}if(t.tools)for(let e of t.tools)e instanceof Vn&&c&&e.setEventService(c),r.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);return(await e.execute(t,n)).data}),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new Xr(new Yr({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new Jr));let d=new Fn(n,r,a,c,t.executionContext,u);if(t.ask&&d.setAskHandler(t.ask),t.plugins)for(let e of t.plugins)d.registerPlugin(e),e.subscribeToModuleEvents&&(await e.subscribeToModuleEvents(s),l.debug(`Plugin subscribed to module events`,{pluginName:e.name}));return l.debug(`Robota initialization completed successfully with independent managers`),d}async function Qr(e){try{let t=await Zr(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`Robota initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function $r(e){let t=e.isFullyInitialized?e.aiProviders.getProviderNames():[],n=e.isFullyInitialized?e.aiProviders.getCurrentProvider():null,r=n?n.provider:null,i=e.isFullyInitialized?e.tools.getTools().map(e=>e.name):[],a=e.getPluginNames(),o=e.getModuleNames(),s=e.getHistory(),c=Date.now()-e.startTime,l={user:0,assistant:0,system:0,tool:0};for(let e of s)e.role in l&&l[e.role]++;return{name:e.name,version:e.version,conversationId:e.conversationId,providers:t,currentProvider:r,tools:i,plugins:a,modules:o,historyLength:s.length,historyStats:{userMessages:l.user,assistantMessages:l.assistant,systemMessages:l.system,toolMessages:l.tool},uptime:c}}async function ei(e){e.logger.debug(`Destroying Robota instance`,{name:e.name});let t=[],n=async(n,r)=>{try{await r(),e.logger.debug(n)}catch(r){let i=r instanceof Error?r:Error(String(r));t.push(i),e.logger.error(`Error during Robota destruction step`,{step:n,error:i.message})}};if(e.isFullyInitialized&&e.moduleRegistry&&await n(`All modules disposed`,()=>e.moduleRegistry.disposeAllModules()),e.executionService){let t=e.executionService.getPlugins();for(let e of t)await n(`Plugin disposed: ${e.name}`,()=>e.dispose());e.logger.debug(`ExecutionService plugins cleaned up`)}return e.moduleRegistry&&await n(`ModuleRegistry cleared`,()=>e.moduleRegistry.clearAllModules()),e.eventEmitter&&await n(`EventEmitter disposed`,()=>e.eventEmitter.dispose()),e.resetState(),t.length===0?e.logger.info(`Robota instance destroyed successfully`,{name:e.name}):e.logger.warn(`Robota instance destroyed with cleanup failures`,{name:e.name,failureCount:t.length}),{errors:t}}function ti(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage||`You are a helpful AI assistant.`,strictValidation:e.strictValidation??!0,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function ni(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new z(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new z(`No model specified: set config.defaultModel.model or the AgentFactory defaultModel option`);let i=n?.provider??e.aiProviders[0]?.name??t.defaultProvider;if(!i)throw new z(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||ri(),name:e.name||`Unnamed Agent`,aiProviders:e.aiProviders,defaultModel:{provider:i,model:r,temperature:n?.temperature??.7,...n?.maxTokens!==void 0&&{maxTokens:n.maxTokens},...n?.topP!==void 0&&{topP:n.topP}},systemMessage:e.systemMessage||t.defaultSystemMessage,tools:e.tools||[],plugins:e.plugins||[],metadata:e.metadata||{},...e.logging&&{logging:e.logging},...e.conversationId&&{conversationId:e.conversationId},...e}}function ri(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function ii(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var ai=class{templates=new Map;logger;constructor(){this.logger=F(`AgentTemplates`),this.logger.info(`AgentTemplates initialized`)}registerTemplate(e){if(!e.id)throw Error(`Template must have an ID`);this.templates.has(e.id)&&this.logger.warn(`Template "${e.id}" is already registered, overriding`),this.templates.set(e.id,e),this.logger.info(`Template "${e.id}" registered successfully`,{templateId:e.id,category:e.category,tags:e.tags})}unregisterTemplate(e){let t=this.templates.delete(e);return t?this.logger.info(`Template "${e}" unregistered`):this.logger.warn(`Attempted to unregister non-existent template "${e}"`),t}getTemplates(){return Array.from(this.templates.values())}getTemplate(e){return this.templates.get(e)}findTemplates(e){return this.getTemplates().filter(t=>!(e.category&&t.category!==e.category||e.tags&&e.tags.length>0&&!e.tags.some(e=>t.tags?.includes(e))||e.provider&&t.config.defaultModel?.provider!==e.provider||e.model&&t.config.defaultModel?.model!==e.model))}applyTemplate(e,t={}){let n=[],r=!1,i={...e.config},a={...i,...t},o=e=>{e in t&&i[e]!==t[e]&&(r=!0,i[e]!==void 0&&n.push(`Override: ${e} changed from "${String(i[e])}" to "${String(t[e])}"`))};t.name!==void 0&&o(`name`),t.systemMessage!==void 0&&o(`systemMessage`);let s=a;return this.logger.debug(`Template applied`,{templateId:e.id,overridesCount:Object.keys(t).length,warningsCount:n.length,modified:r}),{config:s,template:e,warnings:n,modified:r}}hasTemplate(e){return this.templates.has(e)}getTemplateCount(){return this.templates.size}clearAll(){this.templates.clear(),this.logger.info(`All templates cleared`)}getStats(){let e=this.getTemplates(),t=[...new Set(e.map(e=>e.category).filter(e=>typeof e==`string`&&e.length>0))],n=[...new Set(e.flatMap(e=>e.tags||[]))],r=[...new Set(e.map(e=>e.config.defaultModel?.provider).filter(e=>typeof e==`string`&&e.length>0))],i=[...new Set(e.map(e=>e.config.defaultModel?.model).filter(e=>typeof e==`string`&&e.length>0))];return{totalTemplates:e.length,categories:t,tags:n,providers:r,models:i}}},oi=class{agentTemplates;initialized=!1;logger;options;activeAgents;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new ai,this.logger=F(`AgentFactory`),this.options=ti(e),this.activeAgents=new Map,this.creationStats={totalCreated:0,activeCount:0,fromTemplates:0,customConfigured:0,templateUsageRatio:0},this.lifecycleEvents=t,this.logger.debug(`AgentFactory initialized`,{maxConcurrentAgents:this.options.maxConcurrentAgents,strictValidation:this.options.strictValidation,hasDefaultModel:!!this.options.defaultModel,hasDefaultProvider:!!this.options.defaultProvider,hasLifecycleEvents:this.lifecycleEvents!==null})}async initialize(){this.initialized||(this.logger.debug(`Initializing AgentFactory`),this.initialized=!0,this.logger.debug(`AgentFactory initialization completed`))}async createAgent(e,t,n=!1){let r;try{if(this.activeAgents.size>=this.options.maxConcurrentAgents)throw new z(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);if(r=ni(t,this.options),this.options.strictValidation){let e=Un(r);if(!e.isValid)throw new B(`Invalid agent configuration: ${e.errors.join(`, `)}`)}this.lifecycleEvents.beforeCreate&&await this.lifecycleEvents.beforeCreate(r);let i=new e(r),a=i;typeof a.initialize==`function`&&await a.initialize();let o=ri();return this.activeAgents.set(o,i),ii(this.creationStats,n),this.lifecycleEvents.afterCreate&&await this.lifecycleEvents.afterCreate(i,r),this.logger.info(`Agent created successfully`,{agentId:o,model:r.defaultModel.model,provider:r.defaultModel.provider}),i}catch(e){let n=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&r&&await this.lifecycleEvents.onCreateError(n,r),this.logger.error(`Failed to create agent`,{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}async createFromTemplate(e,t,n={}){let r=this.agentTemplates.getTemplate(t);if(!r)throw new z(`Template not found: ${t}`);let i=this.applyTemplate(r,n);i.warnings.length>0&&this.logger.warn(`Template application warnings`,{templateId:t,warnings:i.warnings});let a=await this.createAgent(e,i.config,!0);return this.logger.info(`Agent created from template`,{templateId:t,modified:i.modified,warnings:i.warnings.length}),a}registerTemplate(e){this.agentTemplates.registerTemplate(e)}unregisterTemplate(e){return this.agentTemplates.unregisterTemplate(e)}getTemplates(){return this.agentTemplates.getTemplates()}getTemplate(e){return this.agentTemplates.getTemplate(e)}findTemplates(e){return this.agentTemplates.findTemplates(e)}applyTemplate(e,t={}){return this.agentTemplates.applyTemplate(e,t)}async destroyAgent(e){let t=this.activeAgents.get(e);if(!t)return!1;try{let n=t;return typeof n.cleanup==`function`&&await n.cleanup(),this.activeAgents.delete(e),this.creationStats.activeCount--,this.lifecycleEvents.onDestroy&&await this.lifecycleEvents.onDestroy(e),this.logger.info(`Agent destroyed`,{agentId:e}),!0}catch(t){throw this.logger.error(`Error destroying agent`,{agentId:e,error:t instanceof Error?t.message:String(t)}),t}}getCreationStats(){return{...this.creationStats}}getActiveAgents(){return new Map(this.activeAgents)}validateConfiguration(e){return Un(e)}},si=class extends xe{providers=new Map;currentProvider;currentModel;constructor(){super()}async doInitialize(){I.debug(`AIProviders initialized`)}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),I.debug(`Closed AI provider: ${e}`)}catch(t){I.warn(`Failed to close AI provider ${e}`,{error:t instanceof Error?t.message:String(t)})}this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0,I.debug(`AIProviders disposed`)}addProvider(e,t){this.ensureInitialized();let n=Hn.validateProviderName(e);if(!n.isValid)throw new B(`Invalid provider name: ${n.errors.join(`, `)}`);if(!t||typeof t!=`object`||!t||Array.isArray(t))throw new B(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new B(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new B(`Provider must have a chat method`);this.providers.has(e)&&I.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),I.debug(`AI provider "${e}" registered successfully`,{providerName:e,version:t.version,supportsStreaming:typeof t.chatStream==`function`})}removeProvider(e){if(this.ensureInitialized(),!this.providers.has(e)){I.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(t=>{I.warn(`Failed to close provider ${e}`,{error:t.message})}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,I.debug(`Cleared current provider selection after removing "${e}"`)),I.debug(`AI provider "${e}" removed successfully`)}getProvider(e){return this.ensureInitialized(),this.providers.get(e)}getProviders(){return this.ensureInitialized(),Object.fromEntries(this.providers)}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new z(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,I.debug(`Current AI provider set to "${e}" with model "${t}"`)}getCurrentProvider(){if(this.ensureInitialized(),!(!this.currentProvider||!this.currentModel))return{provider:this.currentProvider,model:this.currentModel}}isConfigured(){return this.ensureInitialized(),!!(this.currentProvider&&this.currentModel&&this.providers.has(this.currentProvider))}getCurrentProviderInstance(){if(!(!this.isConfigured()||!this.currentProvider))return this.providers.get(this.currentProvider)}getProviderNames(){return this.ensureInitialized(),Array.from(this.providers.keys())}getProvidersByPattern(e){this.ensureInitialized();let t=typeof e==`string`?new RegExp(e):e,n={};for(let[e,r]of this.providers)t.test(e)&&(n[e]=r);return n}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return!1;let n=this.providers.get(t);return!!(n&&typeof n.chatStream==`function`)}getProviderCount(){return this.ensureInitialized(),this.providers.size}};function ci(e,t,n){if(!e.name||e.name.trim()===``)throw new z(`Module name is required`);if(!e.version||e.version.trim()===``)throw new z(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new z(`Invalid module type: ${i.errors.join(`, `)}`,{moduleName:e.name,errors:i.errors});i.warnings.length>0&&n.warn(`Module type validation warnings`,{moduleName:e.name,warnings:i.warnings})}async function li(e,t,n,r){let i=e.getModuleType();if(!i.dependencies||i.dependencies.length===0)return;for(let n of i.dependencies)if(!t.hasType(n))throw new z(`Module '${e.name}' depends on unregistered type '${n}'`,{moduleName:e.name,dependencyType:n});let a=new Set;for(let e of n.values())a.add(e.getModuleType().type);let o=[];for(let e of i.dependencies)a.has(e)||o.push(e);o.length>0&&r.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:o})}function ui(e,t){let n=t.get(e);if(!n)return[];let r=n.getModuleType().type,i=[];for(let[n,a]of t.entries())n!==e&&a.getModuleType().dependencies?.includes(r)&&i.push(n);return i}function di(e,t){let n={},r=0,i=0,a=0,o=0,s=0,c=0;for(let t of e.values()){let e=t.getModuleType().type;n[e]=(n[e]||0)+1,t.isInitialized()&&r++,t.isEnabled()&&i++}for(let e of t.values())a+=e.totalExecutions,o+=e.successfulExecutions,s+=e.failedExecutions,c+=e.totalExecutionTime;return{totalModules:e.size,initializedModules:r,enabledModules:i,modulesByType:n,totalExecutions:a,totalSuccessfulExecutions:o,totalFailedExecutions:s,averageExecutionTime:a>0?c/a:0}}function fi(){return[{type:`storage`,category:`storage`,layer:`infrastructure`,capabilities:[`data-persistence`,`data-retrieval`]},{type:`memory-storage`,category:`storage`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`in-memory-storage`,`fast-access`]},{type:`file-storage`,category:`storage`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`persistent-storage`,`file-system-access`]},{type:`text-processing`,category:`processing`,layer:`application`,capabilities:[`text-analysis`,`content-transformation`]},{type:`file-processing`,category:`processing`,layer:`application`,dependencies:[`storage`],capabilities:[`file-parsing`,`content-extraction`]},{type:`api-integration`,category:`integration`,layer:`application`,capabilities:[`external-api-access`,`data-synchronization`]},{type:`database-integration`,category:`integration`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`database-access`,`query-execution`]},{type:`rag`,category:`capability`,layer:`domain`,dependencies:[`storage`,`text-processing`],capabilities:[`document-search`,`context-retrieval`,`semantic-search`]},{type:`speech-processing`,category:`capability`,layer:`domain`,capabilities:[`speech-to-text`,`text-to-speech`,`audio-processing`]},{type:`image-analysis`,category:`capability`,layer:`domain`,capabilities:[`image-recognition`,`visual-analysis`,`content-extraction`]}]}function pi(e,t){let n=[],r=[];if((!e.type||e.type.trim()===``)&&n.push(`Module type is required and cannot be empty`),e.category||n.push(`Module category is required`),e.layer||n.push(`Module layer is required`),e.type&&!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(e.type)&&n.push(`Module type must start with a letter and contain only letters, numbers, hyphens, and underscores`),e.dependencies){for(let t of e.dependencies)(!t||t.trim()===``)&&n.push(`Dependencies cannot be empty`);e.dependencies.includes(e.type)&&n.push(`Module cannot depend on itself`)}if(e.capabilities)for(let t of e.capabilities)(!t||t.trim()===``)&&n.push(`Capabilities cannot be empty`);if(e.dependencies){let n=[`infrastructure`,`core`,`application`,`domain`,`presentation`],i=n.indexOf(e.layer);for(let a of e.dependencies){let o=t(a);o&&n.indexOf(o.layer)>i&&r.push(`Module '${e.type}' (${e.layer}) depends on '${a}' (${o.layer}) which is in a higher layer`)}}return{valid:n.length===0,errors:n,warnings:r}}function mi(e,t,n){let r=new Set,i=new Set,a=[],o=[],s=[];for(let r of e){let e=t(r);if(!e){s.push(r);continue}if(e.dependencies)for(let t of e.dependencies)!n(t)&&!s.includes(t)&&s.push(t)}let c=(s,l=[])=>{if(i.has(s)){let e=l.indexOf(s);o.push(l.slice(e).concat([s]));return}if(r.has(s))return;let u=t(s);if(!u)return;i.add(s);let d=[...l,s];if(u.dependencies)for(let t of u.dependencies)(e.includes(t)||n(t))&&c(t,d);i.delete(s),r.add(s),a.push(s)};for(let t of e)r.has(t)||c(t);return{resolved:s.length===0&&o.length===0,order:a,circularDependencies:o,missingDependencies:s}}function hi(e,t){let n=[],r=[],i=new Map;for(let n of e){let e=t(n);e&&(i.has(e.layer)||i.set(e.layer,[]),i.get(e.layer).push(n))}let a=new Map;for(let n of e){let e=t(n);if(e?.capabilities)for(let t of e.capabilities)a.has(t)||a.set(t,[]),a.get(t).push(n)}for(let[e,t]of Array.from(a.entries()))if(t.length>1)for(let r=0;r<t.length;r++)for(let i=r+1;i<t.length;i++){let a=t[r],o=t[i];a&&o&&n.push({module1:a,module2:o,reason:`Both modules provide capability '${e}'`})}return n.length>0&&(r.push(`Consider using only one module per capability`),r.push(`Check if modules can be configured to avoid conflicts`)),!i.has(`infrastructure`)&&e.length>1&&r.push(`Consider adding infrastructure modules for better foundation`),{compatible:n.length===0,conflicts:n,suggestions:r}}function gi(e){let t={core:0,storage:0,processing:0,integration:0,interface:0,capability:0},n={infrastructure:0,core:0,application:0,domain:0,presentation:0},r=0,i=0;for(let a of e.values())t[a.category]++,n[a.layer]++,a.dependencies&&a.dependencies.length>0&&r++,a.capabilities&&a.capabilities.length>0&&i++;return{totalTypes:e.size,typesByCategory:t,typesByLayer:n,typesWithDependencies:r,typesWithCapabilities:i}}var _i=class{registeredTypes=new Map;logger;constructor(){this.logger=F(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new z(`Invalid module type descriptor: ${t.errors.join(`, `)}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let t=this.registeredTypes.get(e.type);this.logger.warn(`Overriding existing module type`,{type:e.type,previousCategory:t?.category||`unknown`,newCategory:e.category})}this.registeredTypes.set(e.type,e),this.logger.info(`Module type registered`,{type:e.type,category:e.category,layer:e.layer,dependencies:e.dependencies?.length||0,capabilities:e.capabilities?.length||0})}unregisterType(e){if(!this.registeredTypes.has(e))return!1;let t=this.findDependentTypes(e);if(t.length>0)throw new z(`Cannot unregister module type '${e}' - it is required by: ${t.join(`, `)}`,{type:e,dependentTypes:t});return this.registeredTypes.delete(e),this.logger.info(`Module type unregistered`,{type:e}),!0}getType(e){return this.registeredTypes.get(e)}getAllTypes(){return Array.from(this.registeredTypes.values())}getTypesByCategory(e){return Array.from(this.registeredTypes.values()).filter(t=>t.category===e)}getTypesByLayer(e){return Array.from(this.registeredTypes.values()).filter(t=>t.layer===e)}hasType(e){return this.registeredTypes.has(e)}validateTypeDescriptor(e){return pi(e,e=>this.getType(e))}resolveDependencies(e){return mi(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return hi(e,e=>this.getType(e))}findDependentTypes(e){let t=[];for(let[n,r]of this.registeredTypes)r.dependencies?.includes(e)&&t.push(n);return t}registerBuiltinTypes(){for(let e of fi())this.registerType(e);this.logger.info(`Built-in module types registered`,{totalTypes:this.registeredTypes.size})}clearAllTypes(){this.registeredTypes.clear(),this.logger.info(`All module types cleared`)}getStats(){return gi(this.registeredTypes)}};const vi={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var yi=class{modules=new Map;moduleOptions=new Map;moduleStatuses=new Map;moduleStats=new Map;registrationOrder=[];initializationOrder=[];typeRegistry;eventEmitter;logger;isDisposing=!1;constructor(e,t){this.eventEmitter=e,this.typeRegistry=t??new _i,this.logger=F(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new z(`Cannot register modules during disposal`);if(ci(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new z(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await li(e,this.typeRegistry,this.modules,this.logger),this.modules.set(e.name,e),this.moduleOptions.set(e.name,t.initOptions||{}),this.registrationOrder.push(e.name);let n=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:n.type,enabled:e.isEnabled(),initialized:!1,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:n.dependencies||[],dependents:[]}),this.moduleStats.set(e.name,{totalExecutions:0,successfulExecutions:0,failedExecutions:0,averageExecutionTime:0,totalExecutionTime:0}),t.autoInitialize&&await this.initializeModule(e.name,t.initTimeout),this.eventEmitter&&await this.eventEmitter.emit(vi.REGISTERED,{data:{moduleName:e.name,moduleType:n.type},timestamp:new Date})}async unregisterModule(e){let t=this.modules.get(e);if(!t)return!1;let n=ui(e,this.modules);if(n.length>0)throw new z(`Cannot unregister module '${e}' - it is required by: ${n.join(`, `)}`,{moduleName:e,dependents:n});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let r=this.registrationOrder.indexOf(e);r!==-1&&this.registrationOrder.splice(r,1);let i=this.initializationOrder.indexOf(e);return i!==-1&&this.initializationOrder.splice(i,1),this.eventEmitter&&await this.eventEmitter.emit(vi.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new z(`Module '${e}' not found`);if(n.isInitialized())return;let r=this.moduleOptions.get(e),i=n.initialize(r,this.eventEmitter);if(t&&t>0){let n,r=new Promise((r,i)=>{n=setTimeout(()=>{i(Error(`Module '${e}' initialization timed out after ${t}ms`))},t)});await Promise.race([i.then(e=>(clearTimeout(n),e)),r])}else await i;let a=this.moduleStatuses.get(e);a&&(a.initialized=!0,a.initializationTime=new Date),this.initializationOrder.includes(e)||this.initializationOrder.push(e)}async initializeAllModules(e){let t=Array.from(this.modules.keys());if(t.length===0)return;let n=t.map(e=>this.modules.get(e).getModuleType().type),r=this.typeRegistry.resolveDependencies(n);if(!r.resolved){let e=[];throw r.missingDependencies.length>0&&e.push(`Missing dependencies: ${r.missingDependencies.join(`, `)}`),r.circularDependencies.length>0&&e.push(`Circular dependencies: ${r.circularDependencies.map(e=>e.join(` -> `)).join(`; `)}`),new z(`Cannot initialize modules: ${e.join(`; `)}`,{missingDependencies:r.missingDependencies,circularDependencies:r.circularDependencies.map(e=>e.join(` -> `))})}for(let n of r.order){let r=t.find(e=>this.modules.get(e).getModuleType().type===n);r&&await this.initializeModule(r,e)}}async executeModule(e,t){let n=this.modules.get(e);if(!n)throw new z(`Module '${e}' not found`);if(!n.isInitialized())throw new z(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new z(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new z(`Module '${e}' does not support execute()`);let a=await n.execute(t),o=Date.now()-i;r.totalExecutions++,r.successfulExecutions++,r.totalExecutionTime+=o,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date;let s=this.moduleStatuses.get(e);return s&&(s.lastActivity=new Date),a}catch(e){let t=Date.now()-i;throw r.totalExecutions++,r.failedExecutions++,r.totalExecutionTime+=t,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date,e}}getModule(e){return this.modules.get(e)}getModulesByType(e){return Array.from(this.modules.values()).filter(t=>t.getModuleType().type===e)}getAllModules(){return Array.from(this.modules.values())}getModuleNames(){return Array.from(this.modules.keys())}hasModule(e){return this.modules.has(e)}getModuleStatus(e){return this.moduleStatuses.get(e)}getAllModuleStatuses(){return Array.from(this.moduleStatuses.values())}getModuleStats(e){return this.moduleStats.get(e)}getAllModuleStats(){let e={};for(let[t,n]of this.moduleStats.entries())e[t]={...n};return e}async disposeAllModules(){this.isDisposing=!0;let e=[...this.initializationOrder].reverse();for(let t of e){let e=this.modules.get(t);if(e&&e.isInitialized())try{e.dispose&&await e.dispose();let n=this.moduleStatuses.get(t);n&&(n.initialized=!1)}catch(e){this.logger.error(`Failed to dispose module`,{name:t,error:e instanceof Error?e.message:String(e)})}}this.initializationOrder=[],this.isDisposing=!1}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=!1}getRegistryStats(){return di(this.modules,this.moduleStats)}},bi=class{tools=new Map;register(e){if(!e.schema?.name)throw new B(`Tool must have a valid schema with name`);let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&I.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),I.debug(`Tool "${t}" registered successfully`,{toolName:t,toolType:e.constructor.name,parameters:Object.keys(e.schema.parameters?.properties||{})})}unregister(e){if(!this.tools.has(e)){I.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),I.debug(`Tool "${e}" unregistered successfully`)}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getSchemas(){let e=this.getAll();return I.debug(`[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction`,{count:e.length,tools:e.map(e=>({name:e.schema?.name??`unnamed`,hasSchema:!!e.schema,schemaType:typeof e.schema,toolType:e.constructor?.name||`unknown`}))}),this.getAll().map(e=>e.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),I.debug(`Cleared ${e} tools from registry`)}getToolNames(){return Array.from(this.tools.keys())}getToolsByPattern(e){let t=typeof e==`string`?new RegExp(e):e;return this.getAll().filter(e=>t.test(e.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!=`string`)throw new B(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new B(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new B(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new B(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let t of Object.keys(e.parameters.properties)){let n=e.parameters.properties[t];if(!n?.type)throw new B(`Parameter "${t}" must have a type`);if(![`string`,`number`,`boolean`,`array`,`object`].includes(n.type))throw new B(`Parameter "${t}" has invalid type "${n.type}"`)}if(e.parameters.required){let t=e.parameters.properties||{};for(let n of e.parameters.required)if(!t[n])throw new B(`Required parameter "${n}" is not defined in properties`)}}},xi=class{schema;fn;eventService;constructor(e,t){this.schema=e,this.fn=t,this.validateConstructorInputs()}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(e,t){let n=this.schema.name;if(!this.validate(e))throw new B(`Invalid parameters for tool "${n}": ${this.getValidationErrors(e).join(`, `)}`);let r=Date.now(),i;try{i=await this.fn(e,t)}catch(r){throw r instanceof st||r instanceof B?r:new st(`Function tool execution failed: ${r instanceof Error?r.message:String(r)}`,n,r instanceof Error?r:Error(String(r)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let a=Date.now()-r;return{success:!0,data:i,metadata:{executionTime:a,toolName:n,parameters:e}}}validate(e){return this.getValidationErrors(e).length===0}validateParameters(e){let t=this.getValidationErrors(e);return{isValid:t.length===0,errors:t}}getDescription(){return this.schema.description}getValidationErrors(e){let t=[],n=this.schema.parameters.required||[],r=this.schema.parameters.properties||{};for(let r of n)r in e||t.push(`Missing required parameter: ${r}`);for(let[n,i]of Object.entries(e)){let e=r[n];if(!e){t.push(`Unknown parameter: ${n}`);continue}let a=this.validateParameterType(n,i,e);a&&t.push(a)}return t}validateParameterType(e,t,n){switch(n.type){case`string`:if(typeof t!=`string`)return`Parameter "${e}" must be a string, got ${typeof t}`;break;case`number`:if(typeof t!=`number`||isNaN(t))return`Parameter "${e}" must be a number, got ${typeof t}`;break;case`boolean`:if(typeof t!=`boolean`)return`Parameter "${e}" must be a boolean, got ${typeof t}`;break;case`array`:if(!Array.isArray(t))return`Parameter "${e}" must be an array, got ${typeof t}`;if(n.items)for(let r=0;r<t.length;r++){let i=this.validateParameterType(`${e}[${r}]`,t[r],n.items);if(i)return i}break;case`object`:if(typeof t!=`object`||!t||Array.isArray(t))return`Parameter "${e}" must be an object, got ${typeof t}`;break}if(n.enum&&n.enum.length>0){let r=n.enum,i=!1;for(let e of r)if(t===e){i=!0;break}if(!i)return`Parameter "${e}" must be one of: ${r.join(`, `)}, got ${t}`}}validateConstructorInputs(){if(!this.schema)throw new B(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new B(`Tool function is required and must be a function`);if(!this.schema.name)throw new B(`Tool schema must have a name`)}},Si=class extends xe{registry;allowedTools;constructor(){super(),this.registry=new bi}async doInitialize(){I.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),delete this.allowedTools,I.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new xi(e,t);this.registry.register(n),I.debug(`Tool "${e.name}" registered successfully`)}removeTool(e){this.ensureInitialized(),this.registry.unregister(e)}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas();return this.allowedTools?e.filter(e=>this.allowedTools.includes(e.name)):e}async executeTool(e,t,n){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new st(`Tool "${e}" is not in the allowed tools list`,e);let r=this.registry.get(e);if(!r)throw new st(`Tool "${e}" is not registered`,e);let i;try{i=await r.execute(t,n)}catch(t){throw t instanceof Error?new st(t.message,e,t):new st(String(t),e)}if(!i.success)throw new st(i.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(i)});if(i.data===void 0)throw new st(`Tool execution succeeded but returned no data`,e);return i.data}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],I.debug(`Set allowed tools: ${e.join(`, `)}`)}getAllowedTools(){return this.ensureInitialized(),this.allowedTools?[...this.allowedTools]:void 0}getRegistry(){return this.ensureInitialized(),this.registry}getToolCount(){return this.ensureInitialized(),this.registry.size()}},Ci=class extends wr{name;version=`1.0.0`;aiProviders;tools;agentFactory;conversationHistory;moduleRegistry;eventEmitter;executionService;eventService;agentEventService;config;conversationId;logger;initializationPromise;destroyed=!1;isFullyInitialized=!1;startTime;configVersion=1;configUpdatedAt=Date.now();configManager;constructor(e){super(),this.name=e.name,this.config=e,this.conversationId=e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,this.logger=F(`Robota`),this.startTime=Date.now(),e.logging&&(e.logging.level&&Pe(e.logging.level),e.logging.enabled===!1&&Pe(`silent`)),Tr(e),this.aiProviders=new si,this.tools=new Si,this.agentFactory=new oi,this.conversationHistory=new cr,this.eventEmitter=Mr(),this.moduleRegistry=new yi(this.eventEmitter),this.eventService=e.eventService||Ge,this.agentEventService=Xe(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:Nr(this.conversationId,this.config.executionContext)});let t=kr({getName:()=>this.name,getModuleRegistry:()=>this.moduleRegistry,getLogger:()=>this.logger,getIsFullyInitialized:()=>this.isFullyInitialized,ensureFullyInitialized:()=>this.ensureFullyInitialized(),getExecutionService:()=>this.executionService,getAiProviders:()=>this.aiProviders,getTools:()=>this.tools,getEventService:()=>this.eventService,getConfig:()=>this.config,setConfig:e=>{this.config=e},getConfigVersion:()=>this.configVersion,incrementConfigVersion:()=>++this.configVersion,getConfigUpdatedAt:()=>this.configUpdatedAt,setConfigUpdatedAt:e=>{this.configUpdatedAt=e},emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)});this.moduleManager=t.moduleManager,this.pluginManager=t.pluginManager,this.configManager=t.configManager,Ar(this.config,(e,t)=>this.emitAgentEvent(e,t))}async ensureReady(){await this.ensureFullyInitialized()}async run(e,t={}){return this.assertNotDestroyed(),this.enqueueRun(t.signal,async()=>{await this.ensureFullyInitialized();try{if(t.output){let n=$n(t.output);return await zr(this.executionDeps(),e,t,n)}return await Fr(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory()}})}async*runStream(e,t={}){this.assertNotDestroyed();let n=await this.acquireRunSlot(t.signal);try{if(await this.ensureFullyInitialized(),t.output){let n=$n(t.output);return yield*Br(this.executionDeps(),e,t,n)}return yield*Ir(this.executionDeps(),e,t),void 0}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueueTail=Promise.resolve();async acquireRunSlot(e){let t=this.runQueueTail,n=()=>{};if(this.runQueueTail=new Promise(e=>{n=e}),await t,e?.aborted)throw n(),Error(`Run aborted while queued behind another run on this instance`);return n}async enqueueRun(e,t){let n=await this.acquireRunSlot(e);try{return await t()}finally{n()}}executionDeps(){return{conversationId:this.conversationId,config:this.config,logger:this.logger,getHistory:()=>this.getHistory(),getExecutionService:()=>this.executionService,emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)}}getHistory(){return Hr(this.conversationHistory,this.conversationId)}getFullHistory(){return Ur(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Wr(this.conversationHistory,this.conversationId,e)}clearHistory(){Gr(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){Kr(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){qr(this.conversationHistory,this.conversationId,e)}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e)}getModel(){return this.configManager.getModel()}updateSystemPrompt(e){this.configManager.setSystemMessage(e),this.conversationHistory.getConversationStore(this.conversationId).setSystemPrompt(e)}getSystemPrompt(){return this.configManager.getSystemMessage()}registerTool(e){this.configManager.registerTool(e,this.tools)}unregisterTool(e){this.tools.removeTool(e)}getConfig(){return{...this.config}}swapDefaultProvider(e,t){this.aiProviders.addProvider(e.name,e),this.configManager.setModel({provider:e.name,model:t})}getStats(){return $r({name:this.name,version:this.version,conversationId:this.conversationId,startTime:this.startTime,isFullyInitialized:this.isFullyInitialized,aiProviders:this.aiProviders,tools:this.tools,getPluginNames:()=>this.getPluginNames(),getModuleNames:()=>this.getModuleNames(),getHistory:()=>this.getHistory()})}async destroy(){return this.destroyed?{errors:[]}:(this.destroyed=!0,await this.runQueueTail,ei({name:this.name,isFullyInitialized:this.isFullyInitialized,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,executionService:this.executionService,logger:this.logger,resetState:()=>{this.isFullyInitialized=!1,this.initializationPromise=void 0}}))}assertNotDestroyed(){if(this.destroyed)throw Error(`[LIFECYCLE] Agent "${this.name}" has been destroyed — create a new instance`)}async initialize(){await this.ensureFullyInitialized()}async ensureFullyInitialized(){this.assertNotDestroyed(),!this.isFullyInitialized&&(this.initializationPromise||=this.doAsyncInit().catch(e=>{throw this.initializationPromise=void 0,e}),await this.initializationPromise)}doAsyncInit(){return Qr({ctx:{config:this.config,aiProviders:this.aiProviders,tools:this.tools,agentFactory:this.agentFactory,conversationHistory:this.conversationHistory,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,eventService:this.eventService,logger:this.logger},setExecutionService:e=>{this.executionService=e},setFullyInitialized:e=>{this.isFullyInitialized=e}})}emitAgentEvent(e,t){jr(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const wi={safe:`plan`,moderate:`default`,full:`acceptEdits`},Ti={plan:{Shell:`deny`,Bash:`deny`,Read:`auto`,Write:`deny`,Edit:`deny`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`,AskUserQuestion:`auto`},default:{Shell:`approve`,Bash:`approve`,Read:`auto`,Write:`approve`,Edit:`approve`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`,AskUserQuestion:`auto`},acceptEdits:{Shell:`approve`,Bash:`approve`,Read:`auto`,Write:`auto`,Edit:`auto`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`,AskUserQuestion:`auto`},bypassPermissions:{Shell:`auto`,Bash:`auto`,Read:`auto`,Write:`auto`,Edit:`auto`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`,AskUserQuestion:`auto`}},Ei={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`};function Di(e){let t=e.replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function Oi(e){let t=e.indexOf(`(`);return t===-1?{toolName:e.trim(),argPattern:void 0}:{toolName:e.slice(0,t).trim(),argPattern:e.slice(t+1,e.lastIndexOf(`)`)).trim()}}function ki(e,t){switch(e){case`Shell`:case`Bash`:return typeof t.command==`string`?t.command:void 0;case`Read`:case`Write`:case`Edit`:return typeof t.filePath==`string`?t.filePath:void 0;case`Glob`:case`Grep`:return typeof t.pattern==`string`?t.pattern:void 0;default:return}}function Ai(e,t,n){let r=Oi(n);if(r.toolName!==e)return!1;if(r.argPattern===void 0)return!0;let i=ki(e,t);return i===void 0?!1:Di(r.argPattern).test(i)}function ji(e,t,n,r={}){let{allow:i=[],deny:a=[]}=r;for(let n of a)if(Ai(e,t,n))return`deny`;for(let n of i)if(Ai(e,t,n))return`auto`;let o=Ti[n][e];return o===void 0?Ei[n]:o}const Mi=1e6,Ni={"claude-opus-4-7":{inputPerMillion:15,outputPerMillion:75},"claude-opus-4-5":{inputPerMillion:15,outputPerMillion:75},"claude-sonnet-4-6":{inputPerMillion:3,outputPerMillion:15},"claude-sonnet-4-5":{inputPerMillion:3,outputPerMillion:15},"claude-haiku-4-5":{inputPerMillion:.8,outputPerMillion:4},"claude-3-5-sonnet-20241022":{inputPerMillion:3,outputPerMillion:15},"claude-3-5-haiku-20241022":{inputPerMillion:.8,outputPerMillion:4},"claude-3-opus-20240229":{inputPerMillion:15,outputPerMillion:75},"gpt-4o":{inputPerMillion:2.5,outputPerMillion:10},"gpt-4o-mini":{inputPerMillion:.15,outputPerMillion:.6},o1:{inputPerMillion:15,outputPerMillion:60},"o1-mini":{inputPerMillion:3,outputPerMillion:12},o3:{inputPerMillion:10,outputPerMillion:40},"o3-mini":{inputPerMillion:1.1,outputPerMillion:4.4},"deepseek-chat":{inputPerMillion:.14,outputPerMillion:.28},"deepseek-reasoner":{inputPerMillion:.55,outputPerMillion:2.19},"gemini-2.0-flash":{inputPerMillion:.1,outputPerMillion:.4},"gemini-2.0-flash-thinking":{inputPerMillion:.35,outputPerMillion:3.5},"gemini-1.5-pro":{inputPerMillion:1.25,outputPerMillion:5},"gemini-1.5-flash":{inputPerMillion:.075,outputPerMillion:.3}},Pi=[{pattern:/claude-opus/i,price:{inputPerMillion:15,outputPerMillion:75}},{pattern:/claude-sonnet/i,price:{inputPerMillion:3,outputPerMillion:15}},{pattern:/claude-haiku/i,price:{inputPerMillion:.8,outputPerMillion:4}},{pattern:/gpt-4o-mini/i,price:{inputPerMillion:.15,outputPerMillion:.6}},{pattern:/gpt-4/i,price:{inputPerMillion:2.5,outputPerMillion:10}},{pattern:/deepseek/i,price:{inputPerMillion:.14,outputPerMillion:.28}},{pattern:/gemini-2/i,price:{inputPerMillion:.1,outputPerMillion:.4}},{pattern:/gemini-1/i,price:{inputPerMillion:1.25,outputPerMillion:5}}];function Fi(e){let t=Ni[e];if(t)return t;for(let{pattern:t,price:n}of Pi)if(t.test(e))return n}function Ii(e,t,n){let r=Fi(e);if(r)return t/Mi*r.inputPerMillion+n/Mi*r.outputPerMillion}var Li=class{type=`command`;execute(e,t){let n=(e.timeout??600)*1e3,r=JSON.stringify(t);return new Promise(i=>{let a=[],o=[],s=!1,l=qn(),u=(0,c.spawn)(l.command,l.commandArgs(e.command),{cwd:t.cwd,env:{...process.env,...t.env}});u.stdout.on(`data`,e=>a.push(e)),u.stderr.on(`data`,e=>o.push(e)),u.stdin.on(`error`,()=>{}),u.stdin.write(r),u.stdin.end();let d=setTimeout(()=>{s||(s=!0,u.kill(`SIGTERM`),i({exitCode:1,stdout:``,stderr:`Hook timed out`}))},n);u.on(`close`,e=>{s||(s=!0,clearTimeout(d),i({exitCode:e??1,stdout:Buffer.concat(a).toString(`utf8`),stderr:Buffer.concat(o).toString(`utf8`)}))}),u.on(`error`,e=>{s||(s=!0,clearTimeout(d),i({exitCode:1,stdout:``,stderr:e.message}))})})}};function Ri(e){return e.replace(/\$([A-Za-z_][A-Za-z0-9_]*)/g,(e,t)=>{let n=process.env[t];return n===void 0?e:n})}var zi=class{type=`http`;async execute(e,t){let n=(e.timeout??10)*1e3,r={"Content-Type":`application/json`};if(e.headers)for(let[t,n]of Object.entries(e.headers))r[t]=Ri(n);try{let i=await fetch(e.url,{method:`POST`,headers:r,body:JSON.stringify(t),signal:AbortSignal.timeout(n)});if(!i.ok)return{exitCode:1,stdout:``,stderr:`HTTP ${i.status} ${i.statusText}`};let a=await i.json();return a.ok?{exitCode:0,stdout:JSON.stringify(a),stderr:``}:{exitCode:2,stdout:``,stderr:a.reason??`Blocked by HTTP hook`}}catch(e){return{exitCode:1,stdout:``,stderr:e instanceof Error?e.message:String(e)}}}};function Bi(){return[new Li,new zi]}const Vi={deny:3,defer:2,ask:1,allow:0};function Hi(e){let t=e.trim();if(!t.startsWith(`{`))return null;try{return JSON.parse(t)}catch{return null}}function Ui(e,t){if(!e.matcher)return!0;if(!t)return!1;try{return new RegExp(e.matcher).test(t)}catch{return e.matcher===t}}function Wi(e){if(e.tool_name)return e.tool_name;if(e.hook_event_name===`SubagentStart`||e.hook_event_name===`SubagentStop`)return e.agent_type??e.agent_id;if(e.hook_event_name===`SessionEnd`)return e.reason}async function Gi(e,t,n,r){if(!e)return{blocked:!1,stdout:``};let i=e[t];if(!i||i.length===0)return{blocked:!1,stdout:``};let a=r??Bi(),o=new Map;for(let e of a)o.set(e.type,e);let s=[],c=Wi(n),l=-1,u,d;for(let e of i){if(!Ui(e,c))continue;let r=e.env?{...n,env:{...n.env,...e.env}}:n;for(let n of e.hooks){let e=o.get(n.type);if(!e)continue;let i=await e.execute(n,r);if(i.exitCode===2)return{blocked:!0,reason:i.stderr||`Blocked by hook`,stdout:s.join(`
|
|
8
|
+
`)};if(i.exitCode!==0)continue;let a=Hi(i.stdout);if(a!==null){if(a.continue===!1)return{blocked:!0,reason:typeof a.stopReason==`string`?a.stopReason:`Blocked by hook (continue: false)`,stdout:s.join(`
|
|
9
|
+
`)};if(t===`UserPromptSubmit`&&a.decision===`block`){let e=a.hookSpecificOutput,t=typeof e==`object`&&e&&`additionalContext`in e?String(e.additionalContext):void 0;return{blocked:!0,reason:`Blocked by hook (decision: block)`,stdout:t?[...s,t].join(`
|
|
10
|
+
`):s.join(`
|
|
11
|
+
`)}}if(t===`UserPromptSubmit`){let e=a.hookSpecificOutput;if(typeof e==`object`&&e&&`additionalContext`in e){let t=String(e.additionalContext);t&&s.push(t)}}if(t===`PreToolUse`){let e=a.hookSpecificOutput;if(typeof e==`object`&&e){let t=e,n=t.permissionDecision;if(typeof n==`string`&&n in Vi){let e=Vi[n];if(e>l&&(l=e,u=n),n===`deny`)return{blocked:!0,reason:`Blocked by hook (permissionDecision: deny)`,stdout:s.join(`
|
|
12
|
+
`),permissionDecision:`deny`};e>=l&&t.updatedInput!==void 0&&(d=t.updatedInput)}}}typeof a.systemMessage==`string`&&a.systemMessage&&s.push(a.systemMessage)}else i.stdout.trim()&&s.push(i.stdout.trim())}}let f={blocked:!1,stdout:s.join(`
|
|
13
|
+
`)};return u!==void 0&&(f.permissionDecision=u),d!==void 0&&(f.updatedInput=d),f}const Ki=process.platform===`win32`;function qi(e){return e.exitCode!==null||e.signalCode!==null}function Ji(e,t,n){if(n&&!Ki&&typeof e.pid==`number`)try{process.kill(-e.pid,t);return}catch{}try{e.kill(t)}catch{}}function Yi(e,t){if(Ki&&typeof e.pid==`number`){(0,c.spawnSync)(`taskkill`,[`/pid`,String(e.pid),`/T`,`/F`],{stdio:`ignore`});return}Ji(e,`SIGKILL`,t)}async function Xi(e,t={}){let n=t.graceMs??2e3,r=t.signal??`SIGTERM`,i=t.processGroup??!1;if(!qi(e)){if(typeof e.pid!=`number`)throw Error(`[agent-process] killProcessTree called with an unspawned child (no pid)`);if(t.preKill){try{await t.preKill()}catch{}if(qi(e))return}return new Promise(t=>{let a,o=()=>{a&&clearTimeout(a),t()};if(e.once(`exit`,o),qi(e)){e.removeListener(`exit`,o),t();return}Ji(e,r,i),a=setTimeout(()=>{qi(e)||Yi(e,i)},n),a.unref?.()})}}var U=class extends Error{category;recoverable;constructor(e,t,n=!0){super(t),this.name=`BackgroundTaskError`,this.category=e,this.recoverable=n}};const Zi=new Set([`idle`,`max_runtime`,`output_limit`,`repetition`,`stale_worker`]);function Qi(){let e=()=>{},t=()=>{},n=new Promise((n,r)=>{e=n,t=r});return n.catch(()=>{}),{promise:n,resolve:e,reject:t}}function $i(e){return new U(`runner`,e)}function ea(e){return e instanceof U?{category:e.category,message:e.message,recoverable:e.recoverable}:{category:`runner`,message:e instanceof Error?e.message:e,recoverable:!0}}function ta(e){return e instanceof Error?e.message:e}function na(e,t){let n=t.metadata?.worktreePath;typeof n==`string`&&(e.worktreePath=n);let r=t.metadata?.branchName;typeof r==`string`&&(e.branchName=r);let i=t.metadata?.worktreeStatus;typeof i==`string`&&(e.worktreeStatus=i);let a=t.metadata?.worktreeNextAction;typeof a==`string`&&(e.worktreeNextAction=a);let o=t.metadata?.worktreeBaseRevision;typeof o==`string`&&(e.worktreeBaseRevision=o);let s=t.metadata?.parentWorktreeStatus;typeof s==`string`&&(e.parentWorktreeStatus=s);let c=t.metadata?.logPath;typeof c==`string`&&(e.logPath=c);let l=t.metadata?.transcriptPath;typeof l==`string`&&(e.transcriptPath=l);let u=t.metadata?.timeoutReason;ra(u)&&(e.timeoutReason=u)}function ra(e){return typeof e==`string`&&Zi.has(e)}function ia(e){e.unref?.()}function aa(e){return e.replace(/\s+/g,` `).trim()}function oa(e,t){return e.length<=t?e:e.slice(e.length-t)}function sa(e,t){if(t<=1)return!1;let n=aa(e);if(!n)return!1;let r=n.split(/(?<=[.!?。!?])\s+/).map(e=>e.trim()).filter(e=>e.length>=12);if(r.length<t)return!1;let i=``,a=0;for(let e of r)if(e===i?a+=1:(i=e,a=1),a>=t)return!0;return!1}function ca(e,t){if(e.kind===`agent`)return{promptPreview:e.prompt.slice(0,t)};if(e.kind===`process`)return{commandPreview:e.command.slice(0,t)};let n=e.command??e.agentInstruction;return n===void 0?{}:{commandPreview:n.slice(0,t)}}function la(e,t,n,r){let i=ca(t,r),a=t.kind===`scheduled`?{schedule:{cronExpression:t.cronExpression,...t.agentInstruction===void 0?{}:{agentInstruction:t.agentInstruction},...t.command===void 0?{}:{command:t.command},...t.shell===void 0?{}:{shell:t.shell},...t.env===void 0?{}:{env:{...t.env}}}}:{};return{id:e,kind:t.kind,label:t.label,agentType:t.kind===`agent`?t.agentType:void 0,status:`queued`,mode:t.mode,parentSessionId:t.parentSessionId,parentTaskId:t.parentTaskId,depth:t.depth,cwd:t.cwd,updatedAt:n,unread:!1,isolation:t.kind===`agent`?t.isolation:void 0,...t.metadata?{metadata:{...t.metadata}}:{},...a,...i}}function ua(e,t){return t?!(t.kind&&e.kind!==t.kind||t.status&&e.status!==t.status||t.mode&&e.mode!==t.mode):!0}function W(e){let t=e.result?{...e.result,metadata:e.result.metadata?{...e.result.metadata}:void 0}:void 0;return{...e,metadata:e.metadata?{...e.metadata}:void 0,result:t,error:e.error?{...e.error}:void 0,schedule:e.schedule?{...e.schedule,env:e.schedule.env?{...e.schedule.env}:void 0}:void 0}}const da=new Set([`completed`,`failed`,`cancelled`]),fa=[{from:`queued`,event:`START`,to:`running`},{from:`queued`,event:`CANCEL`,to:`cancelled`},{from:`running`,event:`REQUEST_PERMISSION`,to:`waiting_permission`},{from:`running`,event:`COMPLETE`,to:`completed`},{from:`running`,event:`FAIL`,to:`failed`},{from:`running`,event:`CANCEL`,to:`cancelled`},{from:`running`,event:`SLEEP`,to:`sleeping`},{from:`waiting_permission`,event:`PERMISSION_ALLOWED`,to:`running`},{from:`waiting_permission`,event:`PERMISSION_DENIED`,to:`failed`},{from:`waiting_permission`,event:`CANCEL`,to:`cancelled`},{from:`sleeping`,event:`WAKE`,to:`running`},{from:`sleeping`,event:`CANCEL`,to:`cancelled`}];function pa(e){return da.has(e)}function ma(e,t){let n=fa.find(n=>n.from===e&&n.event===t);if(n)return n.to;throw new U(`validation`,`Invalid background task transition: ${e} + ${t} (${pa(e)?`terminal status`:`unsupported event`})`)}function ha(e,t){return e.state.status=ma(e.state.status,`START`),e.state.startedAt=t,e.state.updatedAt=t,e.state.lastActivityAt=t,W(e.state)}function ga(e,t,n){if(e.depth>n)throw new U(`validation`,`Background task depth limit exceeded: depth=${e.depth} maxDepth=${n}`);if(!t.has(e.kind))throw $i(`No background task runner registered for kind: ${e.kind}`)}function _a(e,t,n){if(e.handle=t,t.pid&&(e.state.pid=t.pid),t.logPath&&(e.state.logPath=t.logPath),t.transcriptPath&&(e.state.transcriptPath=t.transcriptPath),!t.pid&&!t.logPath&&!t.transcriptPath)return;let r=n();return e.state.updatedAt=r,e.state.lastActivityAt=r,W(e.state)}function va(e,t,n){return e.state.status=ma(e.state.status,`COMPLETE`),e.state.result=t,na(e.state,t),e.state.unread=e.state.mode===`background`,e.state.completedAt=n,e.state.updatedAt=n,W(e.state)}function ya(e,t,n){return e.state.status=ma(e.state.status,`FAIL`),e.state.error=ea(t),e.state.completedAt=n,e.state.updatedAt=n,W(e.state)}function ba(e,t,n){return e.state.status=ma(e.state.status,`CANCEL`),e.state.error={category:`runner`,message:t??`Background task cancelled`,recoverable:!0},e.state.completedAt=n,e.state.updatedAt=n,{task:W(e.state)}}function xa(e,t,n){if(e.state.lastActivityAt=n,t.type===`background_task_tool_start`)return e.state.currentAction=t.firstArg??t.toolName,e.state.updatedAt=n,W(e.state);if(t.type===`background_task_tool_end`)return e.state.currentAction=t.success?void 0:t.error??t.toolName,e.state.updatedAt=n,W(e.state);if(t.type===`background_task_sleeping`)return e.state.status=ma(e.state.status,`SLEEP`),e.state.nextFireAt=t.nextFireAt,e.state.updatedAt=n,W(e.state);if(t.type===`background_task_waking`)return e.state.status===`sleeping`&&(e.state.status=ma(e.state.status,`WAKE`)),e.state.nextFireAt=void 0,e.state.updatedAt=n,W(e.state)}function Sa(e){try{let t=e.runner.start({taskId:e.task.state.id,request:e.task.request,emit:e.onEvent}),n=_a(e.task,t,e.now);n&&e.onUpdated(n),e.onStarted(),t.result.then(t=>e.onCompleted(t),t=>e.onFailed(t instanceof Error?t:String(t)))}catch(t){e.onFailed(t instanceof Error?t:String(t))}}var Ca=class{defaults;onTimeout;constructor(e,t){this.defaults=e,this.onTimeout=t}start(e){if(e.request.kind!==`agent`)return;this.resetIdleTimer(e);let t=e.request.maxRuntimeMs??this.defaults.agentMaxRuntimeMs;t>0&&(e.maxRuntimeTimer=setTimeout(()=>{this.onTimeout(e,`max_runtime`,`Background agent exceeded max runtime: ${t}ms`)},t),ia(e.maxRuntimeTimer))}recordActivity(e,t){e.state.status!==`running`&&e.state.status!==`waiting_permission`||(e.state.lastActivityAt=t,this.resetIdleTimer(e))}clear(e){e.idleTimer&&=(clearTimeout(e.idleTimer),void 0),e.maxRuntimeTimer&&=(clearTimeout(e.maxRuntimeTimer),void 0)}applyTextGuards(e,t){if(e.request.kind!==`agent`)return;e.outputBytes+=Buffer.byteLength(t,`utf8`),e.textDeltas+=1,e.recentText=oa(`${e.recentText}${t}`,e.request.repetitionWindow??this.defaults.repetitionWindow);let n=e.request.outputLimitBytes??this.defaults.agentOutputLimitBytes;if(n>0&&e.outputBytes>n){this.onTimeout(e,`output_limit`,`Background agent exceeded output limit: ${n} bytes`);return}let r=e.request.maxTextDeltas??this.defaults.agentMaxTextDeltas;if(r>0&&e.textDeltas>r){this.onTimeout(e,`output_limit`,`Background agent exceeded text delta limit: ${r}`);return}this.isRepetitiveOutput(e,t)&&this.onTimeout(e,`repetition`,`Background agent produced repetitive output`)}resetIdleTimer(e){if(e.request.kind!==`agent`)return;e.idleTimer&&clearTimeout(e.idleTimer);let t=e.request.idleTimeoutMs??e.request.timeoutMs??this.defaults.agentIdleTimeoutMs;t<=0||(e.idleTimer=setTimeout(()=>{this.onTimeout(e,`idle`,`Background agent produced no activity for ${t}ms`)},t),ia(e.idleTimer))}isRepetitiveOutput(e,t){if(e.request.kind!==`agent`)return!1;let n=e.request.repetitionThreshold??this.defaults.repetitionThreshold;if(n<=1)return!1;let r=aa(t);return r&&r===e.lastNormalizedDelta?e.repeatedDeltaCount+=1:(e.lastNormalizedDelta=r,e.repeatedDeltaCount=+!!r),e.repeatedDeltaCount>=n?!0:sa(e.recentText,n)}};function wa(e,t){return new Ca({agentIdleTimeoutMs:e.agentIdleTimeoutMs??24e4,agentMaxRuntimeMs:e.agentMaxRuntimeMs??0,agentOutputLimitBytes:e.agentOutputLimitBytes??256e3,agentMaxTextDeltas:e.agentMaxTextDeltas??2e4,repetitionWindow:e.repetitionWindow??800,repetitionThreshold:e.repetitionThreshold??8},t)}var Ta=class{runners=new Map;maxConcurrent;maxDepth;now;idFactory;watchdogs;listeners=new Set;eventSink;tasks=new Map;queue=[];slotHolders=new Set;sequence=0;shuttingDown=!1;shutdownPromise;constructor(e){for(let t of e.runners)this.runners.set(t.kind,t);this.maxConcurrent=e.maxConcurrent??4,this.maxDepth=e.maxDepth??1,this.eventSink=e.eventSink,this.now=e.now??(()=>new Date().toISOString()),this.watchdogs=wa(e,(e,t,n)=>{this.failForTimeout(e,t,n)}),this.idFactory=e.idFactory??(()=>(this.sequence+=1,`task_${this.sequence}`))}async spawn(e){if(this.shuttingDown)throw new U(`validation`,`Background task manager is shutting down`);ga(e,this.runners,this.maxDepth);let t=this.idFactory(e),n=Qi();n.promise.catch(()=>void 0);let r=la(t,e,this.now(),120);return this.tasks.set(t,{state:r,request:e,completion:n.promise,resolve:n.resolve,reject:n.reject,recentText:``,outputBytes:0,textDeltas:0,repeatedDeltaCount:0}),this.queue.push(t),this.emit({type:`background_task_created`,task:W(r)}),this.drainQueue(),W(r)}wait(e){return this.requireTask(e).completion}list(e){return[...this.tasks.values()].map(e=>e.state).filter(t=>ua(t,e)).map(e=>W(e))}get(e){let t=this.tasks.get(e);return t?W(t.state):void 0}async cancel(e,t){let n=this.requireTask(e);if(pa(n.state.status))return;if(n.state.status===`queued`){this.removeFromQueue(e),this.cancelTask(n,t);return}let r=n.handle;this.cancelTask(n,t),await r?.cancel(t).catch(()=>void 0)}async close(e){if(!pa(this.requireTask(e).state.status))throw $i(`Cannot close active background task: ${e}`);this.tasks.delete(e),this.emit({type:`background_task_closed`,taskId:e})}shutdown(e=`Background task manager shutdown`){return this.shutdownPromise?this.shutdownPromise:(this.shuttingDown=!0,this.shutdownPromise=Promise.all([...this.tasks.values()].filter(e=>!pa(e.state.status)).map(t=>this.cancel(t.state.id,e))).then(()=>void 0),this.shutdownPromise)}async send(e,t){let n=this.requireTask(e);if(!n.handle?.send)throw $i(`Background task runner does not support input: ${e}`);await n.handle.send(t)}async readLog(e,t){let n=this.requireTask(e);if(!n.handle?.readLog)throw $i(`Background task runner does not support log reads: ${e}`);return n.handle.readLog(t)}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}acquireSlot(e){this.slotHolders.add(e)}releaseSlot(e){this.slotHolders.delete(e)}drainQueue(){for(;this.slotHolders.size<this.maxConcurrent;){let e=this.queue.shift();if(!e)return;let t=this.tasks.get(e);!t||t.state.status!==`queued`||this.startTask(t)}}startTask(e){let t=this.runners.get(e.request.kind);if(!t){this.failTask(e,$i(`No runner for task kind: ${e.request.kind}`));return}let n=ha(e,this.now());this.acquireSlot(e.state.id),this.emit({type:`background_task_started`,task:n}),Sa({task:e,runner:t,now:this.now,onEvent:t=>this.handleRunnerEvent(e,t),onStarted:()=>this.watchdogs.start(e),onUpdated:e=>this.emit({type:`background_task_updated`,task:e}),onCompleted:t=>this.completeTask(e,t),onFailed:t=>this.failTask(e,t)})}completeTask(e,t){if(pa(e.state.status))return;this.watchdogs.clear(e);let n=va(e,t,this.now());this.releaseSlot(e.state.id),e.resolve(t),this.emit({type:`background_task_completed`,task:n}),this.shuttingDown||this.drainQueue()}failTask(e,t){if(pa(e.state.status))return;this.watchdogs.clear(e);let n=ya(e,t,this.now());this.releaseSlot(e.state.id),e.reject($i(ta(t))),this.emit({type:`background_task_failed`,task:n}),this.shuttingDown||this.drainQueue()}cancelTask(e,t){if(pa(e.state.status))return;this.watchdogs.clear(e);let n=ba(e,t,this.now());this.releaseSlot(e.state.id),e.reject($i(e.state.error?.message??`Background task cancelled`)),this.emit({type:`background_task_cancelled`,task:n.task}),this.shuttingDown||this.drainQueue()}handleRunnerEvent(e,t){if(!pa(e.state.status)){if(this.applyRunnerEventToState(e,t),t.type===`background_task_sleeping`){this.releaseSlot(e.state.id),this.shuttingDown||this.drainQueue();return}if(t.type===`background_task_waking`){this.acquireSlot(e.state.id),this.emit({type:`background_task_waking`,taskId:e.state.id,...t.instruction===void 0?{}:{instruction:t.instruction}});return}this.emit({...t,taskId:e.state.id}),t.type===`background_task_text_delta`&&this.watchdogs.applyTextGuards(e,t.delta)}}applyRunnerEventToState(e,t){let n=this.now();this.watchdogs.recordActivity(e,n);let r=xa(e,t,n);r&&this.emit({type:`background_task_updated`,task:r})}async failForTimeout(e,t,n){if(pa(e.state.status))return;e.state.timeoutReason=t;let r=e.handle;this.failTask(e,new U(`timeout`,n));try{await r?.cancel(n)}catch{}}removeFromQueue(e){let t=this.queue.indexOf(e);t>=0&&this.queue.splice(t,1)}requireTask(e){let t=this.tasks.get(e);if(!t)throw $i(`Unknown background task: ${e}`);return t}emit(e){this.eventSink?.(e);for(let t of this.listeners)t(e)}};const Ea=new TextEncoder;function Da(e){let t=[],n=0,r=!1,i=e.truncationMarker??`
|
|
14
|
+
[output truncated]
|
|
15
|
+
`;return{appendOutput(a){if(r)return;let o=e.limitBytes-n,s=Aa(a);if(s<=o){t.push(a),n+=s;return}let c=ja(a,Math.max(o,0));c.length>0&&t.push(c),t.push(i),r=!0},getOutput(){return t.join(``)}}}function Oa(e,t,n){for(let r of n.split(/\r?\n/))r.length>0&&e.push(`[${t}] ${r}`)}function ka(e,t,n,r=200){let i=n?.offset??0,a=Math.min(i+r,t.length);return{taskId:e,cursor:n,nextCursor:a<t.length?{offset:a}:void 0,lines:t.slice(i,a)}}function Aa(e){return Ea.encode(e).byteLength}function ja(e,t){let n=0,r=0;for(let i of e){let e=Aa(i);if(n+e>t)break;n+=e,r+=i.length}return e.slice(0,r)}function Ma(e){let t=new RegExp(e.matchPattern),n=e.cooldownMs??1e3,r=e.now??(()=>Date.now()),i=``,a=-1/0;return{push(o){i+=o;let s=i.split(`
|
|
16
|
+
`);i=s.pop()??``;for(let i of s){if(!t.test(i))continue;let o=r();o-a<n||(a=o,e.emit(`${e.agentInstruction}\n\nMatched output line: ${i.trim()}`))}}}}const Na=process.platform!==`win32`;function Pa(e,t){if(!(e.matchPattern===void 0||e.agentInstruction===void 0||!t))return Ma({matchPattern:e.matchPattern,agentInstruction:e.agentInstruction,emit:e=>t({type:`background_task_waking`,instruction:e})})}function Fa(e){return{command:e.shell??`sh`,args:[`-c`,e.command]}}function Ia(e,t){return new Promise((n,r)=>{let i=t=>{e.stdin.off(`error`,i),r(t)};e.stdin.once(`error`,i),e.stdin.end(t,()=>{e.stdin.off(`error`,i),n()})})}function La(e={}){let t=e.killGraceMs??2e3;return{kind:`process`,start(e){if(e.request.kind!==`process`)throw new U(`runner`,`Invalid process task kind: ${e.request.kind}`);return Ra(e.taskId,e.request,t,e.emit)}}}function Ra(e,t,n,r){let i=Fa(t),a=Pa(t,r),o={taskId:e,request:t,child:(0,c.spawn)(i.command,i.args,{cwd:t.cwd,env:{...process.env,...t.env??{}},stdio:[`pipe`,`pipe`,`pipe`],detached:Na}),logs:[],capture:Da({limitBytes:t.outputLimitBytes??3e4}),killGraceMs:n,...a?{wakeMatcher:a}:{}};return Ba(o,za(o))}function za(e){let t=!1;return new Promise((n,r)=>{let i=e.request.timeoutMs?setTimeout(()=>{Oa(e.logs,`system`,`timed out after ${e.request.timeoutMs}ms`),Xi(e.child,{processGroup:Na,graceMs:e.killGraceMs}),s(new U(`timeout`,`Background process timed out`))},e.request.timeoutMs):void 0;function a(){i&&clearTimeout(i)}function o(r,i){t||(t=!0,a(),n({taskId:e.taskId,kind:`process`,output:e.capture.getOutput(),exitCode:r,signalCode:i}))}function s(e){t||(t=!0,a(),r(e))}Va(e),e.child.on(`error`,t=>{Oa(e.logs,`system`,t.message),s(new U(`process`,t.message))}),e.child.on(`close`,(e,t)=>{o(e??void 0,t??void 0)}),e.request.stdin!==void 0&&Ia(e.child,e.request.stdin).catch(t=>{Oa(e.logs,`system`,`stdin write failed: ${t.message}`)})})}function Ba(e,t){return{taskId:e.taskId,...e.child.pid===void 0?{}:{pid:e.child.pid},result:t,cancel:async t=>{await Ha(e,t)},send:async t=>{t.stdin&&await Ia(e.child,t.stdin)},readLog:t=>Promise.resolve(Ua(e,t))}}function Va(e){e.child.stdout.on(`data`,t=>{let n=t.toString(`utf8`);e.capture.appendOutput(n),Oa(e.logs,`stdout`,n),e.wakeMatcher?.push(n)}),e.child.stderr.on(`data`,t=>{let n=t.toString(`utf8`);e.capture.appendOutput(n),Oa(e.logs,`stderr`,n),e.wakeMatcher?.push(n)})}async function Ha(e,t){Oa(e.logs,`system`,t?`cancel requested: ${t}`:`cancel requested`),await Xi(e.child,{processGroup:Na,graceMs:e.killGraceMs})}function Ua(e,t){return ka(e.taskId,e.logs,t)}const Wa=process.platform!==`win32`,Ga=3e4;function Ka(e={}){return{kind:`scheduled`,start(t){if(t.request.kind!==`scheduled`)throw new U(`runner`,`Invalid scheduled task kind: ${t.request.kind}`);return qa(t.taskId,t.request,t.emit??(()=>void 0),e)}}}function qa(e,t,n,r){let i,a=new Promise(e=>{i=e}),o=[],s={protect:!0,...r.timezone===void 0?{}:{timezone:r.timezone}},c={taskId:e,request:t,logs:o,cancelled:!1,emit:n,resolve:i,job:new _.Cron(t.cronExpression,s,()=>{c.cancelled||Ja(c)})};return Ya(c),{taskId:e,result:a,cancel:async()=>{c.cancelled=!0,c.job.stop(),c.currentChild&&await Xi(c.currentChild,{processGroup:Wa}),i({taskId:e,kind:`scheduled`,output:Da({limitBytes:Ga}).getOutput()})},readLog:t=>Promise.resolve(ka(e,o,t))}}function Ja(e){if(e.cancelled)return;e.emit(e.request.agentInstruction===void 0?{type:`background_task_waking`}:{type:`background_task_waking`,instruction:e.request.agentInstruction});let t=e.request.command;if(t===void 0){e.cancelled||Ya(e);return}let n=Da({limitBytes:e.request.outputLimitBytes??Ga}),r=(0,c.spawn)(e.request.shell??`sh`,[`-c`,t],{cwd:e.request.cwd,env:{...process.env,...e.request.env??{}},stdio:[`ignore`,`pipe`,`pipe`],detached:Wa});e.currentChild=r;let i=e.request.timeoutMs===void 0?void 0:setTimeout(()=>{Oa(e.logs,`system`,`fire timed out after ${e.request.timeoutMs}ms — killing`),Xi(r,{processGroup:Wa})},e.request.timeoutMs),a=()=>{i&&clearTimeout(i)};r.stdout?.on(`data`,t=>{let r=t.toString(`utf8`);n.appendOutput(r),Oa(e.logs,`stdout`,r)}),r.stderr?.on(`data`,t=>{let r=t.toString(`utf8`);n.appendOutput(r),Oa(e.logs,`stderr`,r)}),r.on(`close`,()=>{a(),e.currentChild===r&&(e.currentChild=void 0),e.cancelled||Ya(e)}),r.on(`error`,t=>{a(),e.currentChild===r&&(e.currentChild=void 0),Oa(e.logs,`system`,t.message),e.cancelled||Ya(e)})}function Ya(e){let t=e.job.nextRun();t!==null&&e.emit({type:`background_task_sleeping`,nextFireAt:t.toISOString()})}function Xa(){return[La(),Ka()]}function Za(e,t){let n=M(t,e.name)?.defaults??{},r=e.model??n.model;if(!r)throw Error(`Provider ${e.name} requires model`);let i=e.apiKey??n.apiKey,a=e.options??n.options;return{name:e.name,model:r,apiKey:i===void 0?void 0:fr(i),baseURL:e.baseURL??n.baseURL,timeout:e.timeout,...a!==void 0&&{options:a}}}function Qa(e,t){let n=M(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${pe(t)}`);let r=me(n);if(r!==void 0&&!$a(e,r))throw Error(`Provider ${e.name} requires ${to(r)}`);return n.createProvider(e)}function $a(e,t){return t.anyOf.some(t=>eo(e,t))}function eo(e,t){let n=e[t];return n!==void 0&&n.length>0}function to(e){return e.anyOf.join(` or `)}var no=class{backgroundTaskManager;sequence=0;processSequence=0;constructor(e){this.backgroundTaskManager=e.backgroundTaskManager??this.createBackgroundTaskManager(e)}async spawn(e){let t=await this.backgroundTaskManager.spawn(this.toBackgroundRequest(e));return this.toSubagentState(t)}async wait(e){let t=await this.backgroundTaskManager.wait(e);return{jobId:t.taskId,output:t.output,metadata:t.metadata}}list(){return this.backgroundTaskManager.list({kind:`agent`}).map(e=>this.toSubagentState(e))}get(e){let t=this.backgroundTaskManager.get(e);return t?.kind===`agent`?this.toSubagentState(t):void 0}async cancel(e,t){await this.backgroundTaskManager.cancel(e,t)}async close(e){await this.backgroundTaskManager.close(e)}async send(e,t){await this.backgroundTaskManager.send(e,{prompt:t})}async shutdown(e){await this.backgroundTaskManager.shutdown(e)}getBackgroundTaskManager(){return this.backgroundTaskManager}createBackgroundTaskManager(e){if(!e.runner)throw new U(`runner`,`SubagentManager requires a runner or backgroundTaskManager`);return new Ta({runners:[ro(e.runner),...e.backgroundTaskRunners??[]],maxConcurrent:e.maxConcurrent,maxDepth:e.maxDepth,now:e.now,idFactory:e.idFactory??(e=>this.nextTaskId(e)),agentIdleTimeoutMs:e.agentIdleTimeoutMs,agentMaxRuntimeMs:e.agentMaxRuntimeMs,agentOutputLimitBytes:e.agentOutputLimitBytes,agentMaxTextDeltas:e.agentMaxTextDeltas,repetitionWindow:e.repetitionWindow,repetitionThreshold:e.repetitionThreshold})}nextTaskId(e){return e.kind===`agent`?(this.sequence+=1,`agent_${this.sequence}`):(this.processSequence+=1,`process_${this.processSequence}`)}toBackgroundRequest(e){return{kind:`agent`,agentType:e.type,label:e.label,parentSessionId:e.parentSessionId,mode:e.mode,depth:e.depth,cwd:e.cwd,prompt:e.prompt,model:e.model,isolation:e.isolation,allowedTools:e.allowedTools,disallowedTools:e.disallowedTools,timeoutMs:e.timeoutMs,idleTimeoutMs:e.idleTimeoutMs,maxRuntimeMs:e.maxRuntimeMs,outputLimitBytes:e.outputLimitBytes,maxTextDeltas:e.maxTextDeltas,repetitionWindow:e.repetitionWindow,repetitionThreshold:e.repetitionThreshold,metadata:e.metadata,permissionPolicy:`inherit-allowlist`}}toSubagentState(e){return{id:e.id,type:e.agentType??e.label,label:e.label,parentSessionId:e.parentSessionId,status:e.status,mode:e.mode,depth:e.depth,pid:e.pid,cwd:e.cwd,isolation:e.isolation,worktreePath:e.worktreePath,branchName:e.branchName,worktreeStatus:e.worktreeStatus,worktreeNextAction:e.worktreeNextAction,worktreeBaseRevision:e.worktreeBaseRevision,parentWorktreeStatus:e.parentWorktreeStatus,promptPreview:e.promptPreview??``,currentTool:e.currentAction,logPath:e.logPath,transcriptPath:e.transcriptPath,startedAt:e.startedAt,updatedAt:e.updatedAt,completedAt:e.completedAt,timeoutReason:e.timeoutReason,result:e.result?.output,error:e.error?.message,metadata:e.metadata}}};function ro(e){return{kind:`agent`,start(t){if(t.request.kind!==`agent`)throw new U(`runner`,`Invalid subagent task kind: ${t.request.kind}`);let n=e.start({jobId:t.taskId,request:io(t.request),emit:t.emit}),r={taskId:t.taskId,pid:n.pid,logPath:n.logPath,transcriptPath:n.transcriptPath,result:n.result.then(e=>ao(e)),cancel:e=>n.cancel(e)};if(n.send){let e=n.send;r.send=t=>e(t.prompt??``)}if(n.readLog){let e=n.readLog;r.readLog=t=>e(t)}return r}}}function io(e){return{type:e.agentType,label:e.label,parentSessionId:e.parentSessionId,mode:e.mode,depth:e.depth,cwd:e.cwd,prompt:e.prompt,model:e.model,allowedTools:e.allowedTools,disallowedTools:e.disallowedTools,timeoutMs:e.timeoutMs,idleTimeoutMs:e.idleTimeoutMs,maxRuntimeMs:e.maxRuntimeMs,outputLimitBytes:e.outputLimitBytes,maxTextDeltas:e.maxTextDeltas,repetitionWindow:e.repetitionWindow,repetitionThreshold:e.repetitionThreshold,isolation:e.isolation,metadata:e.metadata}}function ao(e){return{taskId:e.jobId,kind:`agent`,output:e.output,metadata:e.metadata,...e.usage?{usage:e.usage}:{}}}const oo=/already exists|is already checked out|missing but already registered/i;function so(e){return new co(e)}var co=class{worktreeDir;branchPrefix;idFactory;maxCreateAttempts;constructor(e={}){this.worktreeDir=e.worktreeDir??`.robota/worktrees`,this.branchPrefix=e.branchPrefix??`robota`,this.idFactory=e.idFactory??po,this.maxCreateAttempts=e.maxCreateAttempts??5}prepare(e){if(this.maxCreateAttempts<1)throw new U(`runner`,`Git worktree creation attempts must be at least 1`);let t=fo(e.cwd),n=lo(t,[`rev-parse`,`HEAD`]).trim(),r=lo(t,[`status`,`--porcelain`]).trimEnd(),i=(0,p.join)(t,this.worktreeDir);(0,h.mkdirSync)(i,{recursive:!0});let a;for(let o=0;o<this.maxCreateAttempts;o+=1){let o=mo(this.idFactory()),s=ho(e.jobId),c=`${this.branchPrefix}/${s}-${o}`,l=(0,p.join)(i,`${s}-${o}`);try{return lo(t,[`worktree`,`add`,`-b`,c,l,`HEAD`]),{repoRoot:t,worktreePath:l,branchName:c,baseRevision:n,parentStatus:r}}catch(e){if(a=go(e),!_o(a))throw a}}throw new U(`runner`,`Unable to create Git worktree after ${this.maxCreateAttempts} attempts due to branch or path collisions. Last error: ${a?.message??`unknown error`}`)}isClean(e){return this.getStatus(e).trim().length===0}getStatus(e){return lo(e.worktreePath,[`status`,`--porcelain`])}remove(e){lo(e.repoRoot,[`worktree`,`remove`,`--force`,e.worktreePath]),lo(e.repoRoot,[`branch`,`-D`,e.branchName])}};function lo(e,t){try{return(0,c.execFileSync)(`git`,t,{cwd:e,encoding:`utf8`,stdio:[`ignore`,`pipe`,`pipe`],env:uo()})}catch(e){let n=e instanceof Error?e.message:String(e);throw new U(`runner`,`git ${t.join(` `)} failed: ${n}`)}}function uo(){let e={...process.env};for(let t of Object.keys(e))t.startsWith(`GIT_`)&&delete e[t];return e}function fo(e){try{return lo(e,[`rev-parse`,`--show-toplevel`]).trim()}catch(e){throw new U(`runner`,`Worktree isolation requires a Git repository. Run from a Git worktree or request isolation "none". Details: ${e instanceof Error?e.message:String(e)}`)}}function po(){return(0,d.randomUUID)().slice(0,8)}function mo(e){let t=ho(e).slice(0,8);return t.length>0?t:po()}function ho(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`).replace(/^-+|-+$/g,``);return t.length>0?t:`agent`}function go(e){return e instanceof Error?e:Error(String(e))}function _o(e){return oo.test(e.message)}function vo(e){return new yo(e)}var yo=class{options;constructor(e){this.options=e}start(e){if(e.request.isolation!==`worktree`)return this.options.runner.start(e);let t=this.options.worktreeAdapter.prepare({jobId:e.jobId,cwd:e.request.cwd}),n=So(this.options,t,e);Do(this.options,`WorktreeCreate`,e,t,!1);let r=this.startWrappedRunner(e,t,n);return this.createHandle(r,e,t,n)}startWrappedRunner(e,t,n){try{return this.options.runner.start(bo(e,t))}catch(e){throw n.cleanupClean(),e}}createHandle(e,t,n,r){let i={jobId:e.jobId,...e.pid===void 0?{}:{pid:e.pid},result:e.result.then(e=>xo(e,this.options,n,r)).catch(e=>{throw r.cleanupClean(),e}),cancel:t=>{let n=e.cancel(t);return n.then(()=>r.cleanupClean()).catch(()=>void 0),n}},a=e.send;return a&&(i.send=e=>a(e)),i}};function bo(e,t){return{...e,request:{...e.request,cwd:t.worktreePath,worktreePath:t.worktreePath,branchName:t.branchName}}}function xo(e,t,n,r){return r.cleanupClean()?{...e,metadata:To(e.metadata,{isolation:`worktree`,worktreeRemoved:!0})}:{...e,metadata:To(e.metadata,Eo({isolation:`worktree`,worktreeRemoved:!1,worktreePath:n.worktreePath,branchName:n.branchName,worktreeBaseRevision:n.baseRevision,parentWorktreeStatus:n.parentStatus,worktreeStatus:Co(t,n),worktreeNextAction:wo(n)}))}}function So(e,t,n){let r=!1;return{cleanupClean(){return r?!0:e.worktreeAdapter.isClean(t)?(e.worktreeAdapter.remove(t),r=!0,Do(e,`WorktreeRemove`,n,t,!0),!0):!1}}}function Co(e,t){let n=e.worktreeAdapter.getStatus?.(t).trimEnd();return n&&n.length>0?n:`(dirty worktree)`}function wo(e){let t=e.baseRevision?` based on ${e.baseRevision.slice(0,12)}`:``,n=e.parentStatus?.trim()?` Parent checkout had uncommitted changes when this worktree was created; review the base before merging.`:``;return`Review ${e.worktreePath}, then merge or delete branch ${e.branchName}${t}.${n}`}function To(e,t){return{...e??{},...t}}function Eo(e){return Object.fromEntries(Object.entries(e).filter(e=>e[1]!==void 0))}function Do(e,t,n,r,i){let a={session_id:n.request.parentSessionId,cwd:r.repoRoot,hook_event_name:t,tool_name:`Agent`,tool_input:{jobId:n.jobId,agentType:n.request.type,worktreePath:r.worktreePath,branchName:r.branchName,removed:i}};Gi(e.hooks,t,a,e.hookTypeExecutors).catch(()=>void 0)}const Oo=/^[A-Za-z]:[\\/]/,ko=/'/g;async function Ao(e,t,n={}){if(e.applyManifest)return e.applyManifest(t,n);let r=Ho(n.targetRoot??`/workspace`),i=[];for(let[a,o]of Object.entries(t.entries)){let t=jo(a),s=Uo(r,t);i.push(await Mo(e,t,s,r,o,n))}return{entries:i}}function jo(e){if(e.length===0)throw Error(`workspace manifest path must not be empty`);if(e.includes(`\0`))throw Error(`workspace manifest path must not contain NUL bytes`);if(e.startsWith(`/`)||e.startsWith(`\\`)||Oo.test(e))throw Error(`workspace manifest path must be workspace-relative`);let t=e.replace(/\\/g,`/`).split(`/`).filter(Boolean);if(t.length===0)throw Error(`workspace manifest path must not resolve to the workspace root`);if(t.some(e=>e===`..`))throw Error(`workspace manifest path cannot contain traversal segments`);let n=t.filter(e=>e!==`.`);if(n.length===0)throw Error(`workspace manifest path must not resolve to the workspace root`);return n.join(`/`)}async function Mo(e,t,n,r,i,a){switch(i.type){case`file`:return await Ro(e,n,r,i.content),No(t,i.type);case`dir`:return await zo(e,n),No(t,i.type);case`localFile`:return await Po(e,i.src,n,r,a),No(t,i.type);case`localDir`:return await Fo(e,i.src,n,a),No(t,i.type);case`gitRepo`:return await Lo(e,i,n),No(t,i.type);case`s3Mount`:case`gcsMount`:case`r2Mount`:case`azureBlobMount`:return{path:t,type:i.type,status:`unsupported`,message:`${i.type} requires a provider-specific sandbox adapter.`};default:return Go(i)}}function No(e,t){return{path:e,type:t,status:`applied`}}async function Po(e,t,n,r,i){await Ro(e,n,r,await(0,g.readFile)(Vo(t,i.hostRoot),`utf8`))}async function Fo(e,t,n,r){await Io(e,Vo(t,r.hostRoot),n)}async function Io(e,t,n){await zo(e,n);let r=await(0,g.readdir)(t,{withFileTypes:!0});for(let i of r){let r=(0,p.join)(t,i.name),a=Uo(n,i.name);if(i.isDirectory()){await Io(e,r,a);continue}if(i.isFile()){let t=await(0,g.readFile)(r,`utf8`);await e.writeFile(a,t)}}}async function Lo(e,t,n){await Bo(e,`git clone${t.shallow===!1?``:` --depth 1`}${t.ref?` --branch ${Wo(t.ref)}`:``} ${Wo(t.url)} ${Wo(n)}`)}async function Ro(e,t,n,r){let i=p.posix.dirname(t);i!==n&&await zo(e,i),await e.writeFile(t,r)}async function zo(e,t){await Bo(e,`mkdir -p ${Wo(t)}`)}async function Bo(e,t){let n=await e.run(t);if(n.exitCode!==0)throw Error(`workspace manifest command failed: ${t}\n${n.stderr??n.stdout}`)}function Vo(e,t){return(0,p.isAbsolute)(e)?(0,p.resolve)(e):(0,p.resolve)(t??process.cwd(),e)}function Ho(e){let t=e.replace(/\\/g,`/`).replace(/\/+$/,``);if(!t.startsWith(`/`))throw Error(`workspace manifest targetRoot must be an absolute sandbox path`);return t.length===0?`/`:t}function Uo(e,t){let n=Ho(e);return n===`/`?`/${t}`:`${n}/${t}`}function Wo(e){return`'${e.replace(ko,`'\\''`)}'`}function Go(e){throw Error(`unsupported workspace manifest entry: ${JSON.stringify(e)}`)}function Ko(e,t,n){switch(n.type){case`string`:if(typeof t!=`string`)return`Parameter "${e}" must be a string, got ${typeof t}`;break;case`number`:if(typeof t!=`number`||isNaN(t))return`Parameter "${e}" must be a number, got ${typeof t}`;break;case`boolean`:if(typeof t!=`boolean`)return`Parameter "${e}" must be a boolean, got ${typeof t}`;break;case`array`:if(!Array.isArray(t))return`Parameter "${e}" must be an array, got ${typeof t}`;if(n.items)for(let r=0;r<t.length;r++){let i=Ko(`${e}[${r}]`,t[r],n.items);if(i)return i}break;case`object`:if(typeof t!=`object`||!t||Array.isArray(t))return`Parameter "${e}" must be an object, got ${typeof t}`;break}if(n.enum&&n.enum.length>0){let r=n.enum,i=!1;for(let e of r)if(t===e){i=!0;break}if(!i)return`Parameter "${e}" must be one of: ${r.join(`, `)}, got ${t}`}}function qo(e,t,n,r){let i=[];for(let n of t)n in e||i.push(`Missing required parameter: ${n}`);for(let[t,a]of Object.entries(e)){let e=n[t];if(!e){if(r===!0)continue;if(r&&typeof r==`object`){let e=Ko(t,a,r);e&&i.push(e);continue}i.push(`Unknown parameter: ${t}`);continue}let o=Ko(t,a,e);o&&i.push(o)}return i}function Jo(e,t,n,r){let i=qo(e,t,n,r);return{isValid:i.length===0,errors:i}}var Yo=class{schema;fn;eventService;constructor(e,t){this.schema=e,this.fn=t,this.validateConstructorInputs()}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(e,t){let n=this.schema.name;if(!this.validate(e))throw new B(`Invalid parameters for tool "${n}": ${qo(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let r=Date.now(),i;try{i=await this.fn(e,t)}catch(r){throw r instanceof st||r instanceof B?r:new st(`Function tool execution failed: ${r instanceof Error?r.message:String(r)}`,n,r instanceof Error?r:Error(String(r)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let a=Date.now()-r;return{success:!0,data:i,metadata:{executionTime:a,toolName:n,parameters:e}}}validate(e){return qo(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return Jo(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new B(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new B(`Tool function is required and must be a function`);if(!this.schema.name)throw new B(`Tool schema must have a name`)}};function Xo(e,t,n,r){return new Yo({name:e,description:t,parameters:Jn(n)},async(e,t)=>{let i=n.safeParse(e);if(!i.success)throw new B(`Zod validation failed: ${i.error}`);let a=await r(i.data,t);return typeof a==`string`?a:JSON.stringify(a)})}const Zo=process.platform!==`win32`,Qo=v.z.object({command:v.z.string().describe(`The shell command to execute`),timeout:v.z.number().optional().describe(`Optional timeout in milliseconds (max 600000). Default is 120000 (2 minutes)`),workingDirectory:v.z.string().optional().describe(`Working directory for the command. Defaults to the current working directory`)});function $o(e){return[`Executes a command in the host shell and returns its output.`,``,`Active shell: ${e.label}. ${e.syntaxHint}`,``,`The working directory persists between commands, but shell state does not.`,``,"IMPORTANT: Avoid using this tool to run `find`, `grep`, `cat`, `head`, `tail`, `sed`, `awk`, or `echo` commands. Instead, use the appropriate dedicated tool:",` - File search: Use Glob (NOT find or ls)`,` - Content search: Use Grep (NOT grep or rg)`,` - Read files: Use Read (NOT cat/head/tail)`,` - Edit files: Use Edit (NOT sed/awk)`,``,`For simple commands, keep the description brief (5-10 words). For complex commands, include enough context to clarify what the command does.`,``,`Output is limited to 30,000 characters. Longer output will be middle-truncated.`].join(`
|
|
17
|
+
`)}async function es(e,t,n,r){try{let i=await r.sandboxClient.run(e,{timeoutMs:t,workingDirectory:n}),a={success:!0,output:i.stderr?`${i.stdout}\nstderr:\n${i.stderr}`:i.stdout,exitCode:i.exitCode};return JSON.stringify(a)}catch(e){let t={success:!1,output:``,error:e instanceof Error?e.message:String(e)};return JSON.stringify(t)}}async function ts(e,t={},n){let{command:r,timeout:i=12e4,workingDirectory:a}=e,o=Math.min(i,6e5);if(t.sandboxClient)return es(r,o,a,t);let s=qn();return n?.aborted?JSON.stringify({success:!1,output:``,error:`Aborted before start`}):new Promise(e=>{let t=[],i=[],l=!1,u=!1,d=(0,c.spawn)(s.command,s.commandArgs(r),{cwd:a??process.cwd(),env:process.env,stdio:[`pipe`,`pipe`,`pipe`],detached:Zo});d.stdin?.end(),d.stdout.on(`data`,e=>{t.push(e)}),d.stderr.on(`data`,e=>{i.push(e)});let f=setTimeout(()=>{l=!0,Xi(d,{processGroup:Zo}),p({success:!1,output:Buffer.concat(t).toString(`utf8`),error:`Command timed out after ${o}ms`})},o);function p(t){u||(u=!0,clearTimeout(f),n?.removeEventListener(`abort`,m),e(JSON.stringify(t)))}function m(){Xi(d,{processGroup:Zo}),p({success:!1,output:Buffer.concat(t).toString(`utf8`),error:`Aborted`})}n?.addEventListener(`abort`,m,{once:!0}),d.on(`error`,e=>{p({success:!1,output:``,error:e.message})}),d.on(`close`,e=>{if(l){p({success:!1,output:Buffer.concat(t).toString(`utf8`),error:`Command timed out after ${o}ms`,exitCode:e??void 0});return}let n=Buffer.concat(t).toString(`utf8`),r=Buffer.concat(i).toString(`utf8`),a=e??0;p({success:!0,output:r?`${n}\nstderr:\n${r}`:n,exitCode:a})})})}function ns(e,t){return Xo(e,$o(qn()),Qo,async(e,n)=>ts(e,t,n?.signal))}function rs(e={}){return ns(`Shell`,e)}function is(e={}){return ns(`Bash`,e)}rs(),is();function as(e,t){if(t===void 0)return;let n=(0,p.resolve)(e),r=(0,p.resolve)(t);if(n!==r&&!n.startsWith(r+p.sep)){let t={success:!1,output:``,error:`Access denied: "${e}" is outside the working directory`};return JSON.stringify(t)}}const os=2e3,ss=v.z.object({filePath:v.z.string().describe(`The absolute path to the file to read`),offset:v.z.number().optional().describe(`The line number to start reading from (1-based). Only provide if the file is too large to read at once`),limit:v.z.number().optional().describe(`The number of lines to read (default: ${os}). Only provide if the file is too large to read at once`)});function cs(e){let t=Math.min(e.length,8192);for(let n=0;n<t;n++)if(e[n]===0)return!0;return!1}function ls(e,t){let n=t+e.length-1,r=String(n).length;return e.map((e,n)=>`${String(t+n).padStart(r,` `)}\t${e}`).join(`
|
|
18
|
+
`)}function us(e,t,n,r){let i=t.split(`
|
|
19
|
+
`);i[i.length-1]===``&&i.pop();let a=n-1,o=i.slice(a,a+r),s=ls(o,n),c=i.length,l=o.length,u={success:!0,output:(l<c?`[File: ${e} (lines ${n}-${n+l-1} of ${c})]\n`:`[File: ${e} (${c} lines)]\n`)+s};return JSON.stringify(u)}async function ds(e,t={}){let{filePath:n,offset:r,limit:i=os}=e,a=r!==void 0&&r>0?r:1;if(t.sandboxClient)try{return us(n,await t.sandboxClient.readFile(n),a,i)}catch(e){let t={success:!1,output:``,error:e instanceof Error?e.message:String(e)};return JSON.stringify(t)}let o=as(n,t.cwd);if(o!==void 0)return o;let s;try{s=await(0,g.stat)(n)}catch{let e={success:!1,output:``,error:`File not found: ${n}`};return JSON.stringify(e)}if(!s.isFile()){let e={success:!1,output:``,error:`Path is not a file: ${n}`};return JSON.stringify(e)}let c;try{c=await(0,g.readFile)(n)}catch(e){let t={success:!1,output:``,error:e instanceof Error?e.message:String(e)};return JSON.stringify(t)}if(cs(c)){let e={success:!1,output:``,error:`Binary file not supported: ${n}`};return JSON.stringify(e)}return us(n,c.toString(`utf8`),a,i)}function fs(e={}){return Xo(`Read`,`Reads a file from the local filesystem.
|
|
20
|
+
|
|
21
|
+
By default, reads up to 2000 lines from the beginning of the file. You can optionally specify offset and limit for partial reads.
|
|
22
|
+
|
|
23
|
+
Results are returned using cat -n format, with line numbers starting at 1.
|
|
24
|
+
|
|
25
|
+
The file_path parameter must be an absolute path, not a relative path.`,ss,async t=>ds(t,e))}fs();function ps(e){let t=(0,p.dirname)(e),n=(0,p.basename)(e),r=(0,d.randomBytes)(6).toString(`hex`);return(0,p.join)(t,`.${n}.robota-tmp-${process.pid}-${Date.now()}-${r}`)}async function ms(e){try{return(await(0,g.stat)(e)).mode&4095}catch(e){if(e instanceof Error&&hs(e,`ENOENT`))return;throw e}}function hs(e,t){return`code`in e&&e.code===t}async function gs(e,t){await(0,g.mkdir)((0,p.dirname)(e),{recursive:!0});let n=await ms(e),r=ps(e);try{await(0,g.writeFile)(r,t,`utf8`),n!==void 0&&await(0,g.chmod)(r,n),await(0,g.rename)(r,e)}catch(e){throw await(0,g.rm)(r,{force:!0}).catch(()=>void 0),e}}const _s=v.z.object({filePath:v.z.string().describe(`The absolute path to the file to write`),content:v.z.string().describe(`The content to write to the file`)});async function vs(e,t={}){let{filePath:n,content:r}=e;if(!t.sandboxClient){let e=as(n,t.cwd);if(e!==void 0)return e}try{t.sandboxClient?await t.sandboxClient.writeFile(n,r):await gs(n,r);let e={success:!0,output:`Written ${Buffer.byteLength(r,`utf8`)} bytes to ${n}`};return JSON.stringify(e)}catch(e){let t={success:!1,output:``,error:e instanceof Error?e.message:String(e)};return JSON.stringify(t)}}function ys(e={}){return Xo(`Write`,`Writes a file to the local filesystem. This will overwrite an existing file if one exists.
|
|
26
|
+
|
|
27
|
+
ALWAYS prefer the Edit tool for modifying existing files — it only sends the diff. Only use this tool to create new files or for complete rewrites.
|
|
28
|
+
|
|
29
|
+
NEVER create documentation files (*.md) or README files unless explicitly requested by the user.`,_s,async t=>vs(t,e))}ys();const bs=v.z.object({filePath:v.z.string().describe(`The absolute path to the file to modify`),oldString:v.z.string().describe(`The text to replace (must be an exact match of existing content)`),newString:v.z.string().describe(`The text to replace it with (must be different from old_string)`),replaceAll:v.z.boolean().optional().describe(`Replace all occurrences of old_string (default: false). Useful for renaming variables`)});async function xs(e,t={}){let{filePath:n,oldString:r,newString:i,replaceAll:a=!1}=e;if(!t.sandboxClient){let e=as(n,t.cwd);if(e!==void 0)return e}let o;try{o=t.sandboxClient?await t.sandboxClient.readFile(n):await(0,g.readFile)(n,`utf8`)}catch{let e={success:!1,output:``,error:`File not found: ${n}`};return JSON.stringify(e)}if(!o.includes(r)){let e={success:!1,output:``,error:`oldString not found in file: ${n}`};return JSON.stringify(e)}if(!a&&o.indexOf(r)!==o.lastIndexOf(r)){let e={success:!1,output:``,error:`oldString is not unique in file (found ${o.split(r).length-1} occurrences). Provide more context to make it unique, or use replaceAll:true.`};return JSON.stringify(e)}let s=a?o.split(r).join(i):o.slice(0,o.indexOf(r))+i+o.slice(o.indexOf(r)+r.length);try{t.sandboxClient?await t.sandboxClient.writeFile(n,s):await gs(n,s)}catch(e){let t={success:!1,output:``,error:e instanceof Error?e.message:String(e)};return JSON.stringify(t)}let c=a?o.split(r).length-1:1,l=o.indexOf(r),u=l>=0?o.substring(0,l).split(`
|
|
30
|
+
`).length:1,d={success:!0,output:`Replaced ${c} occurrence(s) in ${n}`,startLine:u};return JSON.stringify(d)}function Ss(e={}){return Xo(`Edit`,`Performs exact string replacements in files.
|
|
31
|
+
|
|
32
|
+
You must use the Read tool at least once before editing. When editing text from Read output, preserve the exact indentation.
|
|
33
|
+
|
|
34
|
+
The edit will FAIL if old_string is not unique in the file. Either provide more surrounding context to make it unique, or use replace_all to change every instance.
|
|
35
|
+
|
|
36
|
+
ALWAYS prefer editing existing files over creating new ones.`,bs,async t=>xs(t,e))}Ss();const Cs=v.z.object({pattern:v.z.string().describe(`The glob pattern to match files against (e.g. "**/*.ts", "src/**/*.tsx")`),path:v.z.string().optional().describe(`The directory to search in. Defaults to the current working directory. Must be a valid directory path if provided`),limit:v.z.number().optional().describe(`Maximum number of results to return (default: 1000). Use a smaller limit to save context space`)});async function ws(e){let{pattern:t,path:n}=e,r=n?(0,p.resolve)(n):process.cwd(),i;try{i=await(0,y.default)(t,{cwd:r,ignore:[`**/node_modules/**`,`**/.git/**`],dot:!0,absolute:!1})}catch(e){let t={success:!1,output:``,error:e instanceof Error?e.message:String(e)};return JSON.stringify(t)}let a=(0,b.default)(100),o=await Promise.all(i.map(e=>a(async()=>{let t=(0,p.resolve)(r,e);try{return{path:e,mtime:(await(0,g.stat)(t)).mtimeMs}}catch{return{path:e,mtime:0}}})));o.sort((e,t)=>t.mtime-e.mtime);let s=e.limit??1e3,c=o.length,l=c>s,u=(l?o.slice(0,s):o).map(e=>e.path),d=u.length>0?u.join(`
|
|
37
|
+
`):`(no matches)`;return l&&(d+=`\n\n[Showing ${s} of ${c} matches. Use limit parameter to see more.]`),JSON.stringify({success:!0,output:d})}const Ts=Xo(`Glob`,`Fast file pattern matching tool that works with any codebase size.
|
|
38
|
+
|
|
39
|
+
Supports glob patterns like '**/*.js' or 'src/**/*.ts'. Returns matching file paths sorted by modification time.
|
|
40
|
+
|
|
41
|
+
Use this tool when you need to find files by name patterns. When doing an open-ended search that may require multiple rounds, use the Agent tool instead.
|
|
42
|
+
|
|
43
|
+
Default limit is 1000 results. Use the limit parameter if you need fewer results to save context space.`,Cs,async e=>ws(e)),Es=v.z.object({pattern:v.z.string().describe(`The regular expression pattern to search for in file contents`),path:v.z.string().optional().describe(`File or directory to search in. Defaults to the current working directory`),glob:v.z.string().optional().describe(`Glob pattern to filter files (e.g. "*.ts", "*.{ts,tsx}"). Only files matching this pattern will be searched`),contextLines:v.z.number().optional().describe(`Number of context lines to show before and after each match. Only applies when outputMode is "content". Default: 0`),outputMode:v.z.enum([`files_with_matches`,`content`,`count`]).optional().describe(`Output mode: "files_with_matches" shows only file paths (default), "content" shows matching lines with context, "count" shows per-file match counts`),headLimit:v.z.number().int().positive().optional().describe(`Maximum number of result lines (file paths, content lines, or count rows) to return. Excess results are truncated with a marker line`)});function Ds(e){let t=e.replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`[^/]*`);return RegExp(`^${t}$`)}function Os(e,t){return t===void 0?!0:Ds(t).test(e)}async function ks(e,t){let n=[];async function r(e){let i;try{i=await(0,g.readdir)(e)}catch{return}for(let a of i){if(a===`node_modules`||a===`.git`)continue;let i=(0,p.join)(e,a),o;try{o=await(0,g.stat)(i)}catch{continue}o.isDirectory()?await r(i):o.isFile()&&Os(a,t)&&n.push(i)}}return await r(e),n}function As(e,t,n,r,i){let a=e.split(`
|
|
44
|
+
`),o=[];for(let e=0;e<a.length;e++)n.test(a[e])&&o.push(e);if(o.length===0)return[];if(i===`files_with_matches`)return[t];if(i===`count`)return[`${t}:${o.length}`];let s=new Set;for(let e of o)for(let t=Math.max(0,e-r);t<=Math.min(a.length-1,e+r);t++)s.add(t);let c=[],l=Array.from(s).sort((e,t)=>e-t),u;for(let e of l){u!==void 0&&e>u+1&&c.push(`--`);let n=e+1,r=o.includes(e)?`:`:`-`;c.push(`${t}:${n}${r}${a[e]}`),u=e}return c}async function js(e){let{pattern:t,path:n,glob:r,contextLines:i=0,outputMode:a=`files_with_matches`,headLimit:o}=e,s=n?(0,p.resolve)(n):process.cwd(),c;try{c=new RegExp(t)}catch{let e={success:!1,output:``,error:`Invalid regex pattern: ${t}`};return JSON.stringify(e)}let l;try{l=await(0,g.stat)(s)}catch{let e={success:!1,output:``,error:`Path not found: ${s}`};return JSON.stringify(e)}let u;u=l.isFile()?[s]:await ks(s,r);let d=[];for(let e of u){let t;try{let n=await(0,g.readFile)(e),r=Math.min(n.length,8192),i=!1;for(let e=0;e<r;e++)if(n[e]===0){i=!0;break}if(i)continue;t=n.toString(`utf8`)}catch{continue}let n=As(t,e,c,i,a);d.push(...n)}let f=d;if(o!==void 0&&f.length>o){let e=f.length-o;f=[...f.slice(0,o),`(+${e} more results truncated by headLimit)`]}let m={success:!0,output:f.length>0?f.join(`
|
|
45
|
+
`):`(no matches)`};return JSON.stringify(m)}const Ms=Xo(`Grep`,`A powerful search tool built on regex matching.
|
|
46
|
+
|
|
47
|
+
Supports full regex syntax (e.g., 'log.*Error', 'function\\\\s+\\\\w+'). Filter files with glob parameter (e.g., '*.js', '**/*.tsx').
|
|
48
|
+
|
|
49
|
+
Output modes: 'content' shows matching lines with context, 'files_with_matches' shows only file paths (default), 'count' shows per-file match counts.
|
|
50
|
+
|
|
51
|
+
Use this tool for ALL search tasks. NEVER invoke grep or rg as a Bash command.
|
|
52
|
+
|
|
53
|
+
Use headLimit to control result size and save context space.`,Es,async e=>js(e)),Ns=3e4,Ps=5e6,Fs=v.z.object({url:v.z.string().describe(`The URL to fetch`),headers:v.z.record(v.z.string()).optional().describe(`Optional HTTP headers as key-value pairs`)});function Is(e){return e.replace(/<script[\s\S]*?<\/script>/gi,``).replace(/<style[\s\S]*?<\/style>/gi,``).replace(/<[^>]+>/g,` `).replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/ /g,` `).replace(/\s+/g,` `).trim()}function Ls(e){if(!(e instanceof Error))return String(e);if(e.name===`AbortError`)return`Request timed out after ${Ns/1e3}s. The server did not respond in time.`;let t=e.code;return t===`ENOTFOUND`||t===`EAI_AGAIN`?`Network error: DNS resolution failed for this host. The URL may be incorrect or the host does not exist. Do not retry with the same URL.`:t===`ECONNREFUSED`?`Network error: Connection refused. The server is not accepting connections at this address. Do not retry with the same URL.`:t===`ECONNRESET`?`Network error: Connection was reset by the server. The server may be temporarily unavailable.`:t===`ETIMEDOUT`?`Network error: Connection timed out. The server is not reachable within the expected time.`:t===`CERT_HAS_EXPIRED`||t===`UNABLE_TO_VERIFY_LEAF_SIGNATURE`?`Network error: SSL certificate error (${t}). The server's certificate is invalid. Do not retry with the same URL.`:`Network error: ${e.message} Check that the URL is correct and the server is reachable.`}async function Rs(e,t){let{url:n,headers:r}=e;try{new URL(n)}catch{let e={success:!1,output:``,error:`Invalid URL: "${n}". Fix the URL format before retrying.`};return JSON.stringify(e)}try{let e=new AbortController,i=setTimeout(()=>e.abort(),Ns),a=t?AbortSignal.any([e.signal,t]):e.signal,o=await fetch(n,{headers:{"User-Agent":`Robota-CLI/3.0`,...r??{}},signal:a,redirect:`follow`});if(clearTimeout(i),!o.ok){let e=o.status>=500?` The server is temporarily unavailable — retrying may help.`:` Do not retry with the same URL.`,t={success:!1,output:``,error:`HTTP ${o.status} ${o.statusText}.${e}`};return JSON.stringify(t)}let s=o.headers.get(`content-type`)??``,c=await o.arrayBuffer();if(c.byteLength>Ps){let e={success:!1,output:``,error:`Response too large: ${c.byteLength} bytes (max ${Ps}). Consider fetching a more specific URL or a paginated endpoint.`};return JSON.stringify(e)}let l=new TextDecoder().decode(c);return s.includes(`html`)&&(l=Is(l)),JSON.stringify({success:!0,output:l})}catch(e){let t={success:!1,output:``,error:Ls(e)};return JSON.stringify(t)}}const zs=Xo(`WebFetch`,`Fetch a URL and return its content as text. HTML pages are converted to plain text.`,Fs,async(e,t)=>Rs(e,t?.signal)),Bs=v.z.object({query:v.z.string().describe(`The search query`),limit:v.z.number().optional().describe(`Maximum number of results to return (default: 10)`)});async function Vs(e,t){let{query:n,limit:r=10}=e,i=process.env.BRAVE_API_KEY;if(!i)return JSON.stringify({success:!1,output:``,error:`Web search requires BRAVE_API_KEY environment variable. Get a free API key at https://brave.com/search/api/ (2,000 queries/month free).`});try{let e=new AbortController,a=setTimeout(()=>e.abort(),15e3),o=t?AbortSignal.any([e.signal,t]):e.signal,s=new URLSearchParams({q:n,count:String(Math.min(r,20))}),c=await fetch(`https://api.search.brave.com/res/v1/web/search?${s}`,{headers:{Accept:`application/json`,"Accept-Encoding":`gzip`,"X-Subscription-Token":i},signal:o});if(clearTimeout(a),!c.ok){let e={success:!1,output:``,error:`Brave Search API error: HTTP ${c.status} ${c.statusText}`};return JSON.stringify(e)}let l=((await c.json()).web?.results??[]).map(e=>({title:e.title,url:e.url,snippet:e.description})),u={success:!0,output:JSON.stringify(l,null,2)};return JSON.stringify(u)}catch(e){let t={success:!1,output:``,error:e instanceof Error?e.message:String(e)};return JSON.stringify(t)}}const Hs=Xo(`WebSearch`,`Search the web and return results with title, URL, and snippet.`,Bs,async(e,t)=>Vs(e,t?.signal)),Us=v.z.object({question:v.z.string().min(1).describe(`The complete question to ask the user.`),header:v.z.string().optional().describe(`Very short topic label for the question (e.g. "Auth method").`),options:v.z.array(v.z.union([v.z.string().min(1).describe(`Display text of this choice.`),v.z.object({label:v.z.string().min(1).describe(`Display text of this choice.`),description:v.z.string().optional().describe(`What choosing this option means.`)})])).optional().describe(`Predefined choices (strings or {label, description}). Omit for pure free text.`),multiSelect:v.z.boolean().optional().describe(`Allow selecting multiple options (default: single select).`),allowFreeText:v.z.boolean().optional().describe(`Allow a typed custom answer besides the options (default: true).`)}),Ws=v.z.object({questions:v.z.array(Us).min(1).max(4).describe(`Questions to ask the user (1-4), rendered one at a time.`)}),Gs=[`Ask the user one or more structured questions and wait for their answers.`,``,`Use this when you are blocked on a decision only the user can make — ambiguous requirements,`,`mutually exclusive approaches, or choices with real trade-offs. Do not use it for decisions with`,`a conventional default or facts you can verify yourself.`,``,`Provide 1-4 questions. Each question offers predefined options and/or free text:`,` - options + default: user picks one option (or types a custom answer unless allowFreeText: false)`,` - multiSelect: true: user may pick several options`,` - no options: pure free-text entry`,``,"The result is a JSON array with one entry per question: the selected option labels in `values`","and/or the typed answer in `text`, or `cancelled: true` if the user dismissed the question.","If no interactive user is attached (headless run), the result is `{ unavailable: true }` —",`continue autonomously with your best judgment and say what you assumed.`].join(`
|
|
54
|
+
`);function Ks(e){let t=(e.options??[]).map(e=>typeof e==`string`?{label:e}:e),n=e.multiSelect===!0&&t.length>1;return{id:`ask_${(0,d.randomUUID)()}`,title:e.question,...e.header===void 0?{}:{description:e.header},...t.length>0?{options:t.map(e=>({value:e.label,label:e.label,...e.description===void 0?{}:{description:e.description}}))}:{},minSelect:+(t.length>0),maxSelect:n?t.length:1,allowFreeText:e.allowFreeText!==!1||t.length===0}}async function qs(e,t){let n=[],r=!1;for(let i of e.questions){if(r){n.push({question:i.question,cancelled:!0});continue}let e=await t(Ks(i));if(e.type===`cancelled`){r=!0,n.push({question:i.question,cancelled:!0});continue}n.push({question:i.question,values:[...e.values],...e.text===void 0?{}:{text:e.text}})}return{answers:n}}function Js(){return Xo(`AskUserQuestion`,Gs,Ws,async(e,t)=>{let n=e,r=t?.ask,i=r?await qs(n,r):{unavailable:!0,reason:`no interactive user attached`},a={success:!0,output:JSON.stringify(i)};return JSON.stringify(a)})}Js();var Ys=class{getPermissionMode(){return this.permissionMode}setPermissionMode(e){this.permissionMode=e}getActivePresetId(){return this.activePresetId}setActivePresetId(e){this.activePresetId=e}getParallelSubagentsEnabled(){return this.parallelSubagentsEnabled}setParallelSubagentsEnabled(e){this.parallelSubagentsEnabled=e}getSessionId(){return this.sessionId}getSystemMessage(){return this.systemMessage}updateSystemMessage(e){this.systemMessage=e,this.robota.updateSystemPrompt(e)}async applyModelOptions(e){await this.robota.ensureReady();let t=e.model??this.model;this.robota.setModel({provider:this.aiProvider.name,model:t,...e.effort!==void 0&&{effort:e.effort},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxOutputTokens!==void 0&&{maxTokens:e.maxOutputTokens}}),this.model=t}getToolSchemas(){return this.toolSchemas}getMessageCount(){return this.messageCount}getSessionAllowedTools(){return this.permissionEnforcer.getSessionAllowedTools()}clearSessionAllowedTools(){this.permissionEnforcer.clearSessionAllowedTools()}abort(){this.abortController&&=(this.abortController.abort(),null)}isRunning(){return this.abortController!==null}getContextState(){return this.contextTracker.getContextState()}syncContextFromHistory(){this.contextTracker.updateFromHistory(this.robota.getHistory())}getAutoCompactThreshold(){return this.contextTracker.getAutoCompactThreshold()}setAutoCompactThreshold(e){this.contextTracker.setAutoCompactThreshold(e)}getHistory(){return this.robota.getHistory()}getFullHistory(){return this.robota.getFullHistory()}getSessionTokenUsage(){let e=0,t=0,n=!1;for(let r of this.getFullHistory()){if(r.category!==`event`||r.type!==`usage-summary`)continue;let i=r.data;e+=i?.promptTokens??0,t+=i?.completionTokens??0,n=!0}return n?{inputTokens:e,outputTokens:t}:void 0}getModelId(){return this.model}addHistoryEntry(e){this.robota.addHistoryEntry(e)}injectMessage(e,t,n){this.robota.injectMessage(e,t,n)}injectRawMessage(e){this.robota.injectRawMessage(e)}clearHistory(){this.robota.clearHistory(),this.contextTracker.reset()}},Xs=class extends Error{constructor(e){super(e),this.name=`CompactionError`}},Zs=class{sessionId;cwd;model;hooks;compactInstructions;hookTypeExecutors;constructor(e){this.sessionId=e.sessionId,this.cwd=e.cwd,this.model=e.model,this.hooks=e.hooks,this.compactInstructions=e.compactInstructions,this.hookTypeExecutors=e.hookTypeExecutors}async compact(e,t,n){if(t.length===0)return``;let r=n===void 0?`auto`:`manual`,i={session_id:this.sessionId,cwd:this.cwd,hook_event_name:`PreCompact`,trigger:r};await Gi(this.hooks,`PreCompact`,i,this.hookTypeExecutors);let a=this.buildCompactionPrompt(t,n),o=await e.chat([{id:(0,d.randomUUID)(),role:`user`,content:a,state:`complete`,timestamp:new Date}],{model:this.model});if(typeof o.content!=`string`||o.content.trim()===``)throw new Xs(`Compaction produced an invalid summary (provider=${e.name}, content type=${typeof o.content}); conversation history preserved untouched`);return o.content}buildCompactionPrompt(e,t){let n=t??this.compactInstructions??``;return[`Summarize the following conversation concisely, preserving:`,`- User's original requests and goals`,`- Key decisions and conclusions`,`- Important code changes and file paths`,`- Current task status and next steps`,n?`\nAdditional focus:\n${n}\n`:``,`Drop verbose tool outputs, debugging steps, and exploratory work that didn't lead to results.`,``,`Conversation:`,e.map(e=>{let t=typeof e.content==`string`?e.content:JSON.stringify(e.content);return`${e.role}: ${t}`}).join(`
|
|
55
|
+
`)].join(`
|
|
56
|
+
`)}};const Qs=.835;var $s=class{contextUsedTokens=0;contextMaxTokens;autoCompactThreshold;constructor(e,t,n){this.contextMaxTokens=t??Kt(e),this.autoCompactThreshold=ec(n)}getContextState(){let e=Math.min(100,this.contextUsedTokens/this.contextMaxTokens*100);return{maxTokens:this.contextMaxTokens,usedTokens:this.contextUsedTokens,usedPercentage:Math.round(e*100)/100,remainingPercentage:Math.round((100-e)*100)/100}}shouldAutoCompact(){return this.autoCompactThreshold===!1?!1:this.getContextState().usedPercentage>=this.autoCompactThreshold*100}getAutoCompactThreshold(){return this.autoCompactThreshold}setAutoCompactThreshold(e){this.autoCompactThreshold=ec(e)}updateFromHistory(e){this.contextUsedTokens=Ht(e).usedTokens}reset(){this.contextUsedTokens=0}};function ec(e){if(e===void 0)return Qs;if(e===!1)return!1;if(!Number.isFinite(e)||e<=0||e>1)throw RangeError(`autoCompactThreshold must be a number greater than 0 and at most 1.`);return e}const tc={success:!0,data:JSON.stringify({success:!1,output:``,error:`Permission denied. The user did not approve this action.`}),metadata:{}},nc=F(`ToolHookHelpers`);function rc(e){if(typeof e.data!=`string`||e.data.length<=3e4)return e;let t=15e3,n=e.data.substring(0,t),r=e.data.substring(e.data.length-t),i=`${n}\n\n[... output truncated: ${e.data.length.toLocaleString()} chars total, showing first and last ${t.toLocaleString()} chars ...]\n\n${r}`;return{...e,data:i}}function ic(e,t,n,r,i,a){return{session_id:e,cwd:t,hook_event_name:`PreToolUse`,tool_name:n,tool_input:r,...i!==void 0&&{permission_mode:i},...a!==void 0&&{transcript_path:a}}}async function ac(e,t,n){let r=await Gi(e,`PreToolUse`,t,n);return r.blocked?{success:!0,data:JSON.stringify({blocked:!0,reason:r.reason??`Blocked by hook`}),metadata:{}}:null}function oc(e,t,n,r){Gi(e,`PostToolUse`,{...t,hook_event_name:`PostToolUse`,tool_output:typeof n.data==`string`?n.data:JSON.stringify(n.data)},r).catch(e=>nc.warn(`hook failed`,{error:e}))}var sc=class{sessionId;cwd;getPermissionMode;config;terminal;permissionHandler;promptForApprovalFn;sessionLogger;onToolExecution;hookTypeExecutors;transcriptPath;sessionAllowedTools=new Set;onProjectAllowTool;constructor(e){this.sessionId=e.sessionId,this.cwd=e.cwd,this.getPermissionMode=e.getPermissionMode,this.config=e.config,this.terminal=e.terminal,this.permissionHandler=e.permissionHandler,this.promptForApprovalFn=e.promptForApprovalFn,this.sessionLogger=e.sessionLogger,this.onToolExecution=e.onToolExecution,this.hookTypeExecutors=e.hookTypeExecutors,this.transcriptPath=e.transcriptPath,this.onProjectAllowTool=e.onProjectAllowTool}wrapTools(e){return e.map(e=>this.wrapToolWithPermission(e))}getSessionAllowedTools(){return[...this.sessionAllowedTools]}clearSessionAllowedTools(){this.sessionAllowedTools.clear()}wrapToolWithPermission(e){let t=this,n=e.execute.bind(e),r=Object.create(e);return r.execute=async(r,i)=>{try{let a=e.getName();t.log(`tool_call`,{tool:a,args:r});let o=ic(t.sessionId,t.cwd,a,r,t.getPermissionMode(),t.transcriptPath),s=await ac(t.config.hooks,o,t.hookTypeExecutors);if(s)return t.log(`tool_blocked`,{tool:a,reason:`hook`}),s;if(!await t.checkPermission(a,r))return t.log(`tool_denied`,{tool:a,reason:`permission`}),t.onToolExecution?.({type:`end`,toolName:a,toolArgs:r,success:!1,denied:!0,executionId:i?.executionId}),tc;t.onToolExecution?.({type:`start`,toolName:a,toolArgs:r,executionId:i?.executionId});let c=await n(r,i),l=rc(c);l!==c&&typeof c.data==`string`&&t.terminal.writeLine(` ⚠ Output truncated: ${c.data.length.toLocaleString()} chars total — model sees first and last 15,000 chars`),t.onToolExecution?.({type:`end`,toolName:a,toolArgs:r,success:l.success,toolResultData:typeof l.data==`string`?l.data:JSON.stringify(l.data),executionId:i?.executionId});let u=typeof l.data==`string`?l.data.length:JSON.stringify(l.data).length;return t.log(`tool_result`,{tool:a,success:l.success,dataChars:u,truncated:l!==c}),oc(t.config.hooks,o,l,t.hookTypeExecutors),l}catch(e){let t=e instanceof Error?e.message:String(e);return{success:!0,data:JSON.stringify({success:!1,output:``,error:t}),metadata:{}}}},r}async checkPermission(e,t){let n=ji(e,t,this.getPermissionMode(),{allow:this.config.permissions.allow,deny:this.config.permissions.deny});if(n===`auto`)return!0;if(n===`deny`)return!1;if(this.sessionAllowedTools.has(e))return!0;if(this.permissionHandler){let n=await this.permissionHandler(e,t);return n===`allow-session`?(this.sessionAllowedTools.add(e),!0):n===`allow-project`?(this.sessionAllowedTools.add(e),this.onProjectAllowTool?.(e),!0):n}if(this.promptForApprovalFn){let n=await this.promptForApprovalFn(this.terminal,e,t);return n===`allow-session`?(this.sessionAllowedTools.add(e),!0):n===`allow-project`?(this.sessionAllowedTools.add(e),this.onProjectAllowTool?.(e),!0):n}return!1}log(e,t){this.sessionLogger?.log(this.sessionId,e,t)}};function cc(e,t,n,r,i){return new sc({sessionId:t,cwd:n,getPermissionMode:r,config:{permissions:e.permissions??{allow:[],deny:[]},hooks:e.hooks},terminal:e.terminal,permissionHandler:e.permissionHandler,promptForApprovalFn:e.promptForApproval,sessionLogger:e.sessionLogger,onToolExecution:e.onToolExecution,hookTypeExecutors:e.hookTypeExecutors,transcriptPath:i,onProjectAllowTool:e.onProjectAllowTool})}function lc(e,t,n,r){return{contextTracker:new $s(t,e.contextMaxTokens,e.autoCompactThreshold),compactionOrchestrator:new Zs({sessionId:n,cwd:r,model:t,hooks:e.hooks,compactInstructions:e.compactInstructions,hookTypeExecutors:e.hookTypeExecutors})}}function uc(e,t,n,r,i,a){let o=t.wrapTools(n);return new Ci({name:e.agentName??`agent`,aiProviders:[r],defaultModel:{provider:r.name,model:i,...e.effort!==void 0&&{effort:e.effort}},systemMessage:a,tools:o,logging:{enabled:!1},...e.providerTimeout!==void 0&&{timeout:e.providerTimeout},...e.responseFormat?{responseFormat:e.responseFormat}:{},...e.ask?{ask:e.ask}:{}})}const dc=F(`SessionHistoryOps`);async function fc(e,t){let n=t.robota.getHistory();if(n.length===0)return;t.contextTracker.updateFromHistory(n);let r=t.contextTracker.getContextState(),i=n.filter(e=>e.role!==`system`),a=await t.compactionOrchestrator.compact(t.aiProvider,i,e);t.robota.clearHistory(),t.robota.injectMessage(`system`,t.systemMessage),t.robota.injectMessage(`assistant`,`[Context Summary]\n${a}`),t.contextTracker.updateFromHistory(t.robota.getHistory());let o={session_id:t.sessionId,cwd:t.cwd,hook_event_name:`PostCompact`,trigger:t.trigger,compact_summary:a};Gi(t.hooks,`PostCompact`,o,t.hookTypeExecutors).catch(e=>dc.warn(`hook failed`,{error:e}));let s=t.contextTracker.getContextState();t.log(`context_compact`,{trigger:t.trigger,before:r,after:s}),t.onCompactEventCallback?.({trigger:t.trigger,before:r,after:s}),t.onCompactCallback&&t.onCompactCallback(a)}function pc(e){let t=e.robota.getHistory(),n=new Date().toISOString(),r=e.sessionStore.load(e.sessionId),i={id:e.sessionId,name:r?.name,cwd:e.cwd,createdAt:r?.createdAt??n,updatedAt:n,messages:t,history:e.getFullHistory(),systemPrompt:e.systemPrompt,toolSchemas:e.toolSchemas};e.sessionStore.save(i)}const mc=F(`SessionLifecycle`);function hc(e,t,n){e.configureNativeWebTools?.({webSearch:!0}),`onServerToolUse`in e&&(e.onServerToolUse=(e,t)=>{n(`server_tool`,{tool:e,...t})})}function gc(e,t,n,r,i,a,o){Gi(n,`SessionStart`,{session_id:e,cwd:t,hook_event_name:`SessionStart`,...a!==void 0&&{permission_mode:a},...o!==void 0&&{transcript_path:o},env:{CLAUDE_PROJECT_DIR:t,CLAUDE_SESSION_ID:e}},r).then(e=>{e.stdout&&i(e.stdout)}).catch(e=>mc.warn(`SessionStart hook failed`,{error:e}))}async function _c(e,t,n,r,i,a,o){await Gi(r,`SessionEnd`,{session_id:e,cwd:t,hook_event_name:`SessionEnd`,reason:n,...a!==void 0&&{permission_mode:a},...o!==void 0&&{transcript_path:o},env:{CLAUDE_PROJECT_DIR:t,CLAUDE_SESSION_ID:e}},i)}const vc=`unknown_tool`;function yc(e){return{knownToolNames:new Set(e.knownToolNames),unknownToolCallIds:new Set,...e.onToolExecution&&{onToolExecution:e.onToolExecution}}}function bc(e,t,n){if(e.onToolExecution){if(t===`tool_execution_request`){xc(e,n);return}t===`tool_execution_result`&&Sc(e,n)}}function xc(e,t){let n=wc(t.toolName),r=wc(t.toolCallId);!n||!r||e.knownToolNames.has(n)||(e.unknownToolCallIds.add(r),e.onToolExecution?.({type:`start`,toolName:n,toolArgs:Cc(t.parameters)}))}function Sc(e,t){let n=wc(t.toolName),r=wc(t.toolCallId);if(!n||!r)return;let i=Tc(t.metadata);if(!(e.unknownToolCallIds.has(r)||i?.errorCode===vc))return;e.unknownToolCallIds.delete(r);let a=wc(t.error)??`Tool "${n}" is not registered.`;e.onToolExecution?.({type:`end`,toolName:n,success:!1,toolResultData:JSON.stringify({success:!1,error:a,errorCode:vc,requestedTool:wc(i?.requestedTool)??n,availableTools:Ec(i?.availableTools)})})}function Cc(e){let t=Tc(e);if(!t)return;let n={};for(let[e,r]of Object.entries(t))(typeof r==`string`||typeof r==`number`||typeof r==`boolean`||typeof r==`object`&&r)&&(n[e]=r);return n}function wc(e){return typeof e==`string`&&e.length>0?e:void 0}function Tc(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function Ec(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}const Dc=F(`SessionRun`);async function Oc(e,t,n,r){if(n.contextTracker.updateFromHistory(n.robota.getHistory()),n.contextTracker.shouldAutoCompact()){let e=n.aiProvider,t=e.onTextDelta;e.onTextDelta=void 0;try{await n.compact()}finally{e.onTextDelta=t}}n.log(`user`,{content:e});let i=await Gi(n.hooks,`UserPromptSubmit`,{session_id:n.sessionId,cwd:n.cwd,hook_event_name:`UserPromptSubmit`,user_message:t??e,prompt:t??e,...n.permissionMode!==void 0&&{permission_mode:n.permissionMode},...n.transcriptPath!==void 0&&{transcript_path:n.transcriptPath},env:{CLAUDE_PROJECT_DIR:n.cwd,CLAUDE_SESSION_ID:n.sessionId}},n.hookTypeExecutors),a=[n.sessionStartStdout,i.stdout].filter(Boolean).join(`
|
|
57
|
+
`),o=a?`<system-reminder>\n${a}\n</system-reminder>\n${e}`:e;n.clearSessionStartStdout();let s=n.robota.getHistory(),c=JSON.stringify(s),l=le(n.aiProvider);n.log(`pre_run`,{historyLength:s.length,historyChars:c.length,historyEstTokens:Math.ceil(c.length/4),input:o,history:s,model:n.model,provider:n.aiProvider.name,maxTokens:n.contextTracker.getContextState().maxTokens,nativeWebSearchSupported:l.nativeWebTools.webSearch.supported,nativeWebSearchEnabled:l.nativeWebTools.webSearch.enabled,nativeWebFetchSupported:l.nativeWebTools.webFetch.supported,nativeWebFetchEnabled:l.nativeWebTools.webFetch.enabled}),n.contextTracker.updateFromHistory([...s,rr(o)]),n.onContextUpdate?.(n.contextTracker.getContextState());let u;try{let e=yc({knownToolNames:n.knownToolNames??[],...n.onToolExecution&&{onToolExecution:n.onToolExecution}}),t=n.onTextDelta?e=>{n.log(`text_delta`,{delta:e}),n.onTextDelta?.(e)}:void 0;if(u=await n.robota.run(o,{signal:r,maxExecutionRounds:n.maxTurns??0,onExecutionEvent:(t,r)=>{n.log(t,r),bc(e,t,r),t===`assistant_message_committed`&&(n.contextTracker.updateFromHistory(n.robota.getHistory()),n.onContextUpdate?.(n.contextTracker.getContextState()))},...t&&{onTextDelta:t}}),r.aborted)throw new DOMException(`Aborted`,`AbortError`)}catch(e){throw n.log(`error`,{message:e instanceof Error?e.message:String(e),stack:e instanceof Error?e.stack??``:``,historyLength:n.robota.getHistory().length}),Gi(n.hooks,`StopFailure`,{session_id:n.sessionId,cwd:n.cwd,hook_event_name:`StopFailure`,reason:e instanceof Error?e.message:String(e),stop_hook_active:!1,...n.permissionMode!==void 0&&{permission_mode:n.permissionMode},...n.transcriptPath!==void 0&&{transcript_path:n.transcriptPath},env:{CLAUDE_PROJECT_DIR:n.cwd,CLAUDE_SESSION_ID:n.sessionId}},n.hookTypeExecutors).catch(e=>Dc.warn(`hook failed`,{error:e})),e}let d=n.robota.getHistory(),f=d.map(e=>{let t=`toolCalls`in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0,n=t?e.toolCalls.map(e=>e.function.name):[];return{role:e.role,contentLength:typeof e.content==`string`?e.content.length:0,hasToolCalls:t,toolCallNames:n,...e.metadata?{metadata:e.metadata}:{}}});n.log(`assistant`,{content:u,historyLength:d.length,estimatedChars:JSON.stringify(d).length,history:d,historyStructure:f}),n.contextTracker.updateFromHistory(d);let p=n.contextTracker.getContextState();return n.onContextUpdate?.(p),n.log(`context`,{maxTokens:p.maxTokens,usedTokens:p.usedTokens,usedPercentage:p.usedPercentage,remainingPercentage:p.remainingPercentage}),Gi(n.hooks,`Stop`,{session_id:n.sessionId,cwd:n.cwd,hook_event_name:`Stop`,response:u.substring(0,500),last_assistant_message:u,stop_hook_active:!1,...n.permissionMode!==void 0&&{permission_mode:n.permissionMode},...n.transcriptPath!==void 0&&{transcript_path:n.transcriptPath},env:{CLAUDE_PROJECT_DIR:n.cwd,CLAUDE_SESSION_ID:n.sessionId}},n.hookTypeExecutors).catch(e=>Dc.warn(`hook failed`,{error:e})),n.getSessionStore()&&n.persistSession(),u}var kc=class extends Ys{robota;permissionEnforcer;contextTracker;permissionMode;activePresetId;parallelSubagentsEnabled;sessionId;aiProvider;toolSchemas;model;systemMessage;messageCount=0;abortController=null;terminal;sessionStore;cwd;hooks;hookTypeExecutors;onTextDeltaCallback;onContextUpdateCallback;onToolExecutionCallback;onCompactCallback;onCompactEventCallback;sessionLogger;maxTurns;compactionOrchestrator;shutdownPromise=null;sessionStartStdout=``;transcriptPath;constructor(e){super();let{tools:t,provider:n,systemMessage:r}=e;this.terminal=e.terminal,this.sessionStore=e.sessionStore,this.systemMessage=r,this.toolSchemas=t.map(e=>e.schema),this.cwd=process.cwd(),this.sessionLogger=e.sessionLogger,this.hooks=e.hooks,this.hookTypeExecutors=e.hookTypeExecutors,this.onTextDeltaCallback=e.onTextDelta,this.onContextUpdateCallback=e.onContextUpdate,this.onToolExecutionCallback=e.onToolExecution,this.onCompactCallback=e.onCompact,this.onCompactEventCallback=e.onCompactEvent,this.maxTurns=e.maxTurns,this.model=e.model??`claude-sonnet-4-5`,this.sessionId=e.sessionId??`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,this.permissionMode=e.permissionMode??(e.defaultTrustLevel?wi[e.defaultTrustLevel]:void 0)??`default`,this.activePresetId=e.activePresetId??`default`,this.parallelSubagentsEnabled=e.enableParallelSubagents??!0,this.transcriptPath=e.sessionStore?.getFilePath?.(this.sessionId),this.log(`session_init`,{cwd:this.cwd,systemPromptLength:r.length,systemPrompt:r,toolSchemas:this.toolSchemas,model:this.model,provider:n.name}),this.aiProvider=n,hc(n,e,(e,t)=>this.log(e,t)),this.permissionEnforcer=cc(e,this.sessionId,this.cwd,()=>this.permissionMode,this.transcriptPath);let{contextTracker:i,compactionOrchestrator:a}=lc(e,this.model,this.sessionId,this.cwd);this.contextTracker=i,this.compactionOrchestrator=a,this.robota=uc(e,this.permissionEnforcer,t,n,this.model,r),gc(this.sessionId,this.cwd,this.hooks,this.hookTypeExecutors,e=>void(this.sessionStartStdout=e),this.permissionMode,this.transcriptPath)}async run(e,t){this.abortController=new AbortController;let{signal:n}=this.abortController;try{let r=await Oc(e,t,this.buildRunContext(),n);return this.messageCount+=1,r}finally{this.abortController=null}}log(e,t){this.sessionLogger?.log(this.sessionId,e,t)}persistSessionInternal(){this.sessionStore&&pc({sessionId:this.sessionId,cwd:this.cwd,systemPrompt:this.systemMessage,toolSchemas:this.toolSchemas,sessionStore:this.sessionStore,robota:this.robota,getFullHistory:()=>this.getFullHistory()})}shutdown(e={}){if(this.shutdownPromise)return this.shutdownPromise;let t=e.reason??`other`,n=async(e,t)=>{try{await t()}catch(t){this.log(`session_shutdown_step_error`,{step:e,error:t instanceof Error?t.message:String(t)})}};return this.shutdownPromise=(async()=>{await n(`abort`,()=>this.abort()),this.log(`session_shutdown`,{reason:t}),await n(`persist`,()=>this.persistSessionInternal()),await n(`session-end-hook`,()=>_c(this.sessionId,this.cwd,t,this.hooks,this.hookTypeExecutors,this.permissionMode,this.transcriptPath)),await n(`destroy-agent`,async()=>{await this.robota.destroy()})})(),this.shutdownPromise}swapProvider(e,t){this.robota.swapDefaultProvider(e,t),e.configureNativeWebTools?.({webSearch:!0}),`onServerToolUse`in e&&(e.onServerToolUse=(e,t)=>this.log(`server_tool`,{tool:e,...t})),this.aiProvider=e}async compact(e,t=`manual`){await fc(e,{sessionId:this.sessionId,cwd:this.cwd,systemMessage:this.systemMessage,robota:this.robota,aiProvider:this.aiProvider,compactionOrchestrator:this.compactionOrchestrator,contextTracker:this.contextTracker,hooks:this.hooks,hookTypeExecutors:this.hookTypeExecutors,onCompactCallback:this.onCompactCallback,onCompactEventCallback:this.onCompactEventCallback,trigger:t,log:(e,t)=>this.log(e,t)})}buildRunContext(){return{sessionId:this.sessionId,cwd:this.cwd,model:this.model,robota:this.robota,aiProvider:this.aiProvider,contextTracker:this.contextTracker,hooks:this.hooks,hookTypeExecutors:this.hookTypeExecutors,sessionStartStdout:this.sessionStartStdout,log:(e,t)=>this.log(e,t),compact:()=>this.compact(void 0,`auto`),persistSession:()=>this.persistSessionInternal(),getSessionStore:()=>!!this.sessionStore,clearSessionStartStdout:()=>void(this.sessionStartStdout=``),permissionMode:this.permissionMode,transcriptPath:this.transcriptPath,maxTurns:this.maxTurns,onTextDelta:this.onTextDeltaCallback,onContextUpdate:this.onContextUpdateCallback,onToolExecution:this.onToolExecutionCallback,knownToolNames:this.toolSchemas.map(e=>e.name)}}};const Ac=/^(api[-_]?key|authorization|access[-_]?token|refresh[-_]?token|secret|password|x[-_]?api[-_]?key)$/i;var jc=class{logDir;options;constructor(e,t={}){this.logDir=e,this.options={externalPayloadThresholdBytes:t.externalPayloadThresholdBytes??32768,redactedValue:t.redactedValue??`[REDACTED]`};try{(0,h.mkdirSync)(e,{recursive:!0})}catch{}}log(e,t,n){try{let r=Mc(e,this.logDir,n,this.options),i=JSON.stringify({timestamp:new Date().toISOString(),sessionId:e,event:t,...r});(0,h.appendFileSync)((0,p.join)(this.logDir,`${e}.jsonl`),i+`
|
|
58
|
+
`)}catch{}}};function Mc(e,t,n,r){let i={};for(let[a,o]of Object.entries(n))i[a]=Nc(e,t,a,o,r);return i}function Nc(e,t,n,r,i){if(Ac.test(n))return i.redactedValue;if(r==null||typeof r==`string`||typeof r==`number`)return Pc(e,t,r,i);if(typeof r==`boolean`)return r;if(r instanceof Date)return r.toISOString();if(Array.isArray(r))return Pc(e,t,r.map(r=>Nc(e,t,n,r,i)),i);if(typeof r==`object`){let n=r,a={};for(let[r,o]of Object.entries(n))a[r]=Nc(e,t,r,o,i);return Pc(e,t,a,i)}return String(r)}function Pc(e,t,n,r){let i=JSON.stringify(n);if(i===void 0)return n;let a=Buffer.byteLength(i);if(a<=r.externalPayloadThresholdBytes)return n;let o=(0,d.createHash)(`sha256`).update(i).digest(`hex`),s=`${e}.payloads`,c=(0,p.join)(s,`${o}.json`),l=(0,p.join)(t,s),u=(0,p.join)(t,c);return(0,h.mkdirSync)(l,{recursive:!0}),(0,h.existsSync)(u)||(0,h.writeFileSync)(u,i,`utf-8`),{kind:`external-payload`,encoding:`json`,sha256:o,byteLength:a,relativePath:c}}function Fc(e){let t=[],n=Ic(),r=Lc();return e.forEach((e,i)=>{Wc(e,i,t),Rc(n,e,i),zc(r,e,i)}),Bc(n,t),Vc(r,t),{ok:t.length===0,issues:t}}function Ic(){return{requests:new Map,nativeRawPayloads:new Set,rawResponses:new Set,normalizedResponses:new Set}}function Lc(){return{requests:new Map,results:new Set}}function Rc(e,t,n){let r=Hc(t);r&&(t.event===`provider_request`&&e.requests.set(r.key,{executionId:r.executionId,round:r.round,index:n}),t.event===`provider_response_raw`&&e.rawResponses.add(r.key),t.event===`provider_native_raw_payload`&&(t.payloadKind===`response`||t.payloadKind===`stream_event`)&&e.nativeRawPayloads.add(r.key),t.event===`provider_response_normalized`&&e.normalizedResponses.add(r.key))}function zc(e,t,n){let r=Uc(t);r&&(t.event===`tool_execution_request`&&e.requests.set(r.key,{executionId:r.executionId,toolCallId:r.toolCallId,index:n}),t.event===`tool_execution_result`&&e.results.add(r.key))}function Bc(e,t){for(let[n,r]of e.requests)e.nativeRawPayloads.has(n)||t.push({code:`PROVIDER_NATIVE_RAW_PAYLOAD_MISSING`,message:`Provider request ${n} has no provider-native raw response or stream payload event.`,eventIndex:r.index,executionId:r.executionId,round:r.round}),e.rawResponses.has(n)||t.push({code:`PROVIDER_RESPONSE_RAW_MISSING`,message:`Provider request ${n} has no raw response event.`,eventIndex:r.index,executionId:r.executionId,round:r.round}),e.normalizedResponses.has(n)||t.push({code:`PROVIDER_RESPONSE_NORMALIZED_MISSING`,message:`Provider request ${n} has no normalized response event.`,eventIndex:r.index,executionId:r.executionId,round:r.round})}function Vc(e,t){for(let[n,r]of e.requests)e.results.has(n)||t.push({code:`TOOL_RESULT_MISSING`,message:`Tool request ${n} has no terminal result event.`,eventIndex:r.index,executionId:r.executionId,toolCallId:r.toolCallId})}function Hc(e){if(typeof e.executionId!=`string`)return;let t=typeof e.round==`number`?e.round:Number(e.round);if(Number.isFinite(t))return{key:`${e.executionId}:${t}`,executionId:e.executionId,round:t}}function Uc(e){if(typeof e.executionId!=`string`)return;let t=typeof e.toolCallId==`string`?e.toolCallId:typeof e.toolExecutionId==`string`?e.toolExecutionId:void 0;if(t)return{key:`${e.executionId}:${t}`,executionId:e.executionId,toolCallId:t}}function Wc(e,t,n){if(Array.isArray(e)){e.forEach(e=>Wc(e,t,n));return}if(Gc(e)){if(e.kind===`external-payload`){(e.encoding!==`json`||typeof e.sha256!=`string`||typeof e.relativePath!=`string`||typeof e.byteLength!=`number`)&&n.push({code:`PAYLOAD_REFERENCE_INVALID`,message:`External payload reference is missing required replay fields.`,eventIndex:t});return}Object.values(e).forEach(e=>Wc(e,t,n))}}function Gc(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Kc(e){return(0,h.existsSync)(e)?(0,h.readFileSync)(e,`utf-8`).split(`
|
|
59
|
+
`).map(e=>e.trim()).filter(e=>e.length>0).map(e=>JSON.parse(e)):[]}function qc(e){let t=[],n=[],r={backgroundTaskEvents:[],backgroundJobGroupEvents:[],memoryEvents:[]},i,a,o,s;for(let c of e){if(i??=c.sessionId,o??=c.timestamp,s=c.timestamp,c.event===`session_init`&&(a=typeof c.cwd==`string`?c.cwd:a),c.event===`history_mutation`&&c.mutation===`append_message`){let e=Yc(c.message);e&&(t.push(e),n.push(P(e)))}Jc(c,r)}return{sessionId:i,cwd:a,createdAt:o,updatedAt:s,messages:t,history:n,backgroundTaskEvents:r.backgroundTaskEvents,backgroundJobGroupEvents:r.backgroundJobGroupEvents,memoryEvents:r.memoryEvents}}function Jc(e,t){if(e.event===`background_task_event`){Qc(t.backgroundTaskEvents,e,`backgroundEvent`,`data`);return}if(e.event===`background_job_group_event`){Qc(t.backgroundJobGroupEvents,e,`backgroundJobGroupEvent`,`data`);return}e.event===`memory_event`&&Qc(t.memoryEvents,e,`memoryEvent`,`data`)}function Yc(e){if(!Xc(e))return;let t=e.role;if(t!==`user`&&t!==`assistant`&&t!==`system`&&t!==`tool`)return;let n=typeof e.id==`string`?e.id:`${t}-${Date.now()}`,r=e.timestamp instanceof Date?e.timestamp:new Date(typeof e.timestamp==`string`?e.timestamp:Date.now());return{...e,id:n,role:t,timestamp:r}}function Xc(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Zc(e,t){let n=e[t];if(!(typeof n!=`object`||!n||Array.isArray(n)||n instanceof Date))return n}function Qc(e,t,n,r){let i=Zc(t,n)??Zc(t,r);i&&e.push(i)}function $c(){return process.env.HOME??process.env.USERPROFILE??`/`}var el=class{baseDir;constructor(e){this.baseDir=e??(0,S.join)($c(),`.robota`,`sessions`)}ensureDir(){(0,x.existsSync)(this.baseDir)||(0,x.mkdirSync)(this.baseDir,{recursive:!0})}filePath(e){return(0,S.join)(this.baseDir,`${e}.json`)}getFilePath(e){return this.filePath(e)}save(e){this.ensureDir();let t=this.filePath(e.id),n=`${t}.${process.pid}.tmp`;(0,x.writeFileSync)(n,JSON.stringify(e,null,2),`utf-8`);try{(0,x.renameSync)(n,t)}catch(e){throw(0,x.unlinkSync)(n),e}}load(e){let t=this.filePath(e);if((0,x.existsSync)(t))try{let e=(0,x.readFileSync)(t,`utf-8`);return JSON.parse(e)}catch{return}}list(){if(!(0,x.existsSync)(this.baseDir))return[];let e=(0,x.readdirSync)(this.baseDir).filter(e=>e.endsWith(`.json`)),t=[];for(let n of e)try{let e=(0,x.readFileSync)((0,S.join)(this.baseDir,n),`utf-8`),r=JSON.parse(e);t.push(r)}catch{}return t.sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime())}delete(e){let t=this.filePath(e);(0,x.existsSync)(t)&&(0,x.unlinkSync)(t)}};function tl(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 nl(e,t,n){let r=e.find(e=>e.sourcePath===t.sourcePath),i=e.filter(e=>e.sourcePath!==t.sourcePath),a=r?ol(r,t):t;return sl([...i,a],n)}function rl(e,t){let n=ul(t),r=e.find(e=>dl(e,n));return r?{references:e.filter(e=>e.sourcePath!==r.sourcePath),result:{removed:r}}:{references:[...e],result:{}}}function il(e){return{removed:[...e]}}function al(e){return e.filter(e=>e.status===`active`)}function ol(e,t){return t.status===`active`?{...t,loadedAt:e.loadedAt}:{...e,byteLength:t.byteLength,originalReference:t.originalReference,lastUsedAt:t.lastUsedAt}}function sl(e,t){let n=t?.maxActiveReferences??8,r=t?.maxActiveBytes??262144,i=t?.maxObservedReferences??32,a=[],o=[...e];for(;cl(o)>n||ll(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 cl(e){return e.filter(e=>e.status===`active`).length}function ll(e){return e.reduce((e,t)=>e+(t.status===`active`?t.byteLength:0),0)}function ul(e){return e.startsWith(`@`)?e.slice(1):e}function dl(e,t){return e.relativePath===t||e.sourcePath===t||e.originalReference===t||e.originalReference===`@${t}`}function fl(e,t){return t.length===0?e:[e,`<robota_file_references>`,...t.map(e=>{let t=e.content.replaceAll(`</file>`,`<\\/file>`);return[`<file path="${_l(e.relativePath)}" bytes="${e.byteLength}" reason="${e.reason}">`,t,`</file>`].join(`
|
|
60
|
+
`)}),`</robota_file_references>`].join(`
|
|
61
|
+
|
|
62
|
+
`)}function pl(e){return e.some(e=>e.severity===`error`)}function ml(e){return e.length===0?``:[`File reference error:`,...e.map(e=>`- ${e.reference}: ${e.message}`)].join(`
|
|
63
|
+
`)}function hl(e){return e.map(({content:e,...t})=>t)}function gl(e){let t=hl(e);return{id:`prompt_file_reference_${(0,d.randomUUID)()}`,timestamp:new Date,category:`event`,type:`prompt-file-reference`,data:{message:vl(t),references:t}}}function _l(e){return e.replaceAll(`&`,`&`).replaceAll(`"`,`"`).replaceAll(`<`,`<`).replaceAll(`>`,`>`)}function vl(e){return`Loaded file references: ${e.map(e=>`${e.relativePath} (${e.byteLength} B)`).join(`, `)}`}const yl=/(^|[\s([{])@([^\s)\]}>,;"'`]+)/g;function bl(e){let t=[];for(let n of e.matchAll(yl)){let e=xl(n[2]??``);Sl(e)&&t.push({original:`@${e}`,path:e,index:n.index??0})}return t}function xl(e){let t=e.length;for(;t>0&&/[.,:;!?]/.test(e[t-1]??``);)--t;return e.slice(0,t)}function Sl(e){return e.length===0||e.includes(`://`)?!1:e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)||e.startsWith(`~/`)||e.startsWith(`.`)||e.includes(`.`)}function Cl(e,t){return e.startsWith(`~/`)?(0,p.resolve)((0,m.homedir)(),e.slice(2)):(0,p.isAbsolute)(e)?(0,p.resolve)(e):(0,p.resolve)(t,e)}function wl(e,t){let n=(0,p.relative)(t,e);return n===``||!n.startsWith(`..`)&&!(0,p.isAbsolute)(n)}function Tl(e,t){return(0,p.relative)(e,t).split(p.sep).join(`/`)}var G=class{existsSync(e){return(0,h.existsSync)(e)}readFileSync(e,t){return(0,h.readFileSync)(e,t)}writeFileSync(e,t,n){(0,h.writeFileSync)(e,t,n??`utf8`)}mkdirSync(e,t){(0,h.mkdirSync)(e,t)}readdirSync(e,t){return t?.withFileTypes?(0,h.readdirSync)(e,{withFileTypes:!0}):(0,h.readdirSync)(e)}statSync(e){return(0,h.statSync)(e)}rmSync(e,t){(0,h.rmSync)(e,t)}cpSync(e,t,n){(0,h.cpSync)(e,t,n)}renameSync(e,t){(0,h.renameSync)(e,t)}get constants(){return h.constants}},El=class{async access(e,t){await(0,g.access)(e,t)}async copyFile(e,t,n){await(0,g.copyFile)(e,t,n)}async mkdir(e,t){await(0,g.mkdir)(e,t)}async readFile(e,t){return(0,g.readFile)(e,t)}async readdir(e,t){return t?.withFileTypes?await(0,g.readdir)(e,{withFileTypes:!0}):(0,g.readdir)(e)}async realpath(e){return(0,g.realpath)(e)}async rename(e,t){await(0,g.rename)(e,t)}async rm(e,t){await(0,g.rm)(e,t)}async stat(e){return(0,g.stat)(e)}async writeFile(e,t,n){await(0,g.writeFile)(e,t,n??`utf8`)}};async function Dl(e,t){let n=await kl(t);for(let t of bl(e))await Nl(t,0,[],n);return Al(n)}async function Ol(e,t){let n=await kl(t);for(let t of e)await Nl({original:`@${t}`,path:t,index:0},0,[],n);return Al(n)}async function kl(e){let t=e.fsAsync??new El;return{rootPath:await Ml(e.cwd,t),limits:jl(e.limits),reason:e.reason??`prompt-reference`,references:[],diagnostics:[],loadedPaths:new Set,totalBytes:0,fsAsync:t}}function Al(e){return{references:e.references,diagnostics:e.diagnostics}}function jl(e){return{maxDepth:e?.maxDepth??2,maxReferences:e?.maxReferences??8,maxFileBytes:e?.maxFileBytes??65536,maxTotalBytes:e?.maxTotalBytes??262144}}async function Ml(e,t){try{return await t.realpath(e)}catch{return(0,p.resolve)(e)}}async function Nl(e,t,n,r){if(!Pl(e,t,r))return;let i=await Fl(e,r);if(i===void 0||!Il(e,i,n,r))return;let a=await Ll(e,i,r);if(a===void 0)return;let o=await Rl(e,i,r);o!==void 0&&(r.loadedPaths.add(i),r.totalBytes+=a.byteLength,r.references.push(zl(e,a,t,o,r)),await Bl(o,t,[...n,i],r))}function Pl(e,t,n){return n.references.length>=n.limits.maxReferences?(Vl(n,`too-many-references`,e,`Too many file references.`),!1):t>n.limits.maxDepth?(Vl(n,`max-depth`,e,`File reference nesting is too deep.`),!1):!0}async function Fl(e,t){let n=Cl(e.path,t.rootPath);if(!wl(n,t.rootPath)){Vl(t,`outside-root`,e,`Referenced path is outside the workspace.`);return}try{let r=await t.fsAsync.realpath(n);if(wl(r,t.rootPath))return r;Vl(t,`outside-root`,e,`Referenced path resolves outside the workspace.`)}catch{Vl(t,`not-found`,e,`Referenced file was not found.`)}}function Il(e,t,n,r){return n.includes(t)?(Vl(r,`circular-reference`,e,`Circular file reference detected.`),!1):!r.loadedPaths.has(t)}async function Ll(e,t,n){try{let r=await n.fsAsync.stat(t);if(r.isDirectory()){Vl(n,`directory-not-supported`,e,`Directory references are not supported.`);return}if(r.size>n.limits.maxFileBytes){Vl(n,`file-too-large`,e,`Referenced file exceeds the per-file size limit.`);return}if(n.totalBytes+r.size>n.limits.maxTotalBytes){Vl(n,`total-too-large`,e,`Referenced files exceed the total size limit.`);return}return{sourcePath:t,byteLength:r.size}}catch{Vl(n,`unreadable`,e,`Referenced file could not be inspected.`);return}}async function Rl(e,t,n){try{return await n.fsAsync.readFile(t,`utf8`)}catch{Vl(n,`unreadable`,e,`Referenced file could not be read.`);return}}function zl(e,t,n,r,i){return{originalReference:e.original,sourcePath:t.sourcePath,relativePath:Tl(i.rootPath,t.sourcePath),reason:i.reason,depth:n,byteLength:t.byteLength,content:r}}async function Bl(e,t,n,r){for(let i of bl(e))await Nl(i,t+1,n,r)}function Vl(e,t,n,r){e.diagnostics.push({code:t,severity:`error`,reference:n.original,message:r,path:n.path})}function Hl(e){return e instanceof DOMException&&e.name===`AbortError`||e instanceof Error&&(e.message.includes(`aborted`)||e.message.includes(`abort`))}function Ul(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 Wl(e,t,n,r,i,a){let o=Ul(t,r),s=Xl(t,r,i);return{response:e,history:n,toolSummaries:o,contextState:i,...s&&{usage:s},...a&&a.length>0?{promptFileReferences:[...a]}:{}}}function Gl(e,t,n,r){let i=Ul(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=Xl(e,n,r);return{response:a.join(`
|
|
64
|
+
|
|
65
|
+
`),history:t,toolSummaries:i,contextState:r,...o&&{usage:o}}}function Kl(e){return{id:`usage_${(0,d.randomUUID)()}`,timestamp:new Date,category:`event`,type:`usage-summary`,data:e}}function ql(e,t){return Kl({kind:`exact`,scope:`turn`,totalTokens:e.totalTokens,promptTokens:e.promptTokens,completionTokens:e.completionTokens,contextUsedTokens:0,contextMaxTokens:0,contextUsedPercentage:0,costStatus:`exact`,source:t})}async function Jl(e,t,n,r=[]){let i=await Ol(al(r).map(e=>e.sourcePath),{cwd:t,reason:`manual`}),a=await Dl(e,{cwd:t}),o=[...i.diagnostics,...a.diagnostics];if(pl(o))throw Error(ml(o));let s=fl(e,Yl([...i.references,...a.references])),c=n??(s===e?void 0:e),l=hl(i.references),u=hl(a.references),d=a.references.length>0?gl(a.references):void 0;return{modelInput:s,...c===void 0?{}:{hookInput:c},activeContextReferenceRecords:l,promptFileReferenceRecords:u,...d===void 0?{}:{promptFileReferenceEntry:d}}}function Yl(e){return[...new Map(e.map(e=>[e.sourcePath,e])).values()]}function Xl(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=En(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 Zl={write:()=>{},writeLine:()=>{},writeMarkdown:()=>{},writeError:()=>{},prompt:()=>Promise.resolve(``),select:()=>Promise.resolve(0),spinner:()=>({stop:()=>{},update:()=>{}})},Ql=1e3;var $l=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:cu(r.state)}),this.evaluateCompletion(r),cu(r.state)}listGroups(){return[...this.groups.values()].map(e=>cu(e.state))}getGroup(e){let t=this.groups.get(e);return t?cu(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(cu(e));this.groups.set(e.id,t),e.status===`completed`&&t.resolve(cu(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&&pa(n.status)&&this.captureTask(e,n)}}handleTaskEvent(e){let t=eu(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:cu(e.state)}))}captureTask(e,t){return e.state.results.some(e=>e.taskId===t.id)?!1:(e.state.results=[...e.state.results,nu(t)],e.state.updatedAt=this.now(),!0)}evaluateCompletion(e){if(e.state.status===`completed`)return;if(!tu(e.state)){this.emit({type:`background_job_group_updated`,group:cu(e.state)});return}let t=this.now();e.state.status=`completed`,e.state.completedAt=t,e.state.updatedAt=t;let n=cu(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 eu(e){if(e.type===`background_task_completed`||e.type===`background_task_failed`||e.type===`background_task_cancelled`)return e.task}function tu(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 nu(e){return{taskId:e.id,label:e.label,status:e.status,...e.result?.output?{summary:ru(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 ru(e){let t=e.trim();return t.length<=Ql?t:`${t.slice(0,Ql)}...`}function iu(e){let t=au(e,`completed`),n=au(e,`failed`),r=au(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=>ou(e))}}function au(e,t){return e.results.filter(e=>e.status===t).length}function ou(e){let t=su(e),n=e.outputRef&&e.summary?` (output: ${e.outputRef})`:``;return`[${e.status}] ${e.label} ${e.taskId}: ${t}${n}`}function su(e){let t=(e.error?.message??e.summary??``).replace(/\s+/g,` `).trim();return t.length>0?t:`(no summary)`}function cu(e){return{...e,taskIds:[...e.taskIds],results:e.results.map(e=>({...e,...e.error?{error:{...e.error}}:{}}))}}const K={kind:`executionOriginKind`,sessionId:`executionOriginSessionId`,turnId:`executionOriginTurnId`,commandName:`executionOriginCommandName`,toolCallId:`executionOriginToolCallId`,skillId:`executionOriginSkillId`,label:`executionOriginLabel`};function lu(e){return[`main`,e].join(`:`)}function uu(e){return[`task`,e].join(`:`)}function du(e){return[`group`,e].join(`:`)}function fu(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 pu(e){return{[K.kind]:e.kind,[K.sessionId]:e.sessionId,...e.turnId?{[K.turnId]:e.turnId}:{},...e.commandName?{[K.commandName]:e.commandName}:{},...e.toolCallId?{[K.toolCallId]:e.toolCallId}:{},...e.skillId?{[K.skillId]:e.skillId}:{},...e.label?{[K.label]:e.label}:{}}}function mu(e){let t=yu(e.groups),n=[hu(e.mainThread),...Au(e.groups).map(e=>_u(e)),...ku(e.tasks).map(e=>gu(e,t.get(e.id)))].filter(t=>Ou(t,e.filter));return{sessionId:e.sessionId,selectedEntryId:e.selectedEntryId??n.find(e=>e.kind===`main_thread`)?.id??lu(e.sessionId),updatedAt:n[0]?.updatedAt??e.mainThread.updatedAt,entries:n}}function hu(e){return{id:lu(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:ju(e.preview),unread:!1,attention:`none`,visibility:`default`,updatedAt:e.updatedAt,controls:[`select`]}}function gu(e,t){return{id:uu(e.id),sourceId:e.id,kind:`background_task`,parentId:e.parentTaskId?uu(e.parentTaskId):lu(e.parentSessionId),...t?{groupId:du(t)}:{},origin:vu(e.metadata,{kind:`system`,sessionId:e.parentSessionId}),taskKind:e.kind,status:e.status,title:e.label,subtitle:xu(e),preview:wu(e),currentAction:e.currentAction,unread:e.unread,attention:Tu(e),visibility:Eu(e),updatedAt:e.lastActivityAt??e.updatedAt,controls:bu(e)}}function _u(e){let t=ju(e.results.map(e=>e.summary??e.error?.message).join(` `));return{id:du(e.id),sourceId:e.id,kind:`background_group`,parentId:lu(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:Du(e),visibility:e.status===`completed`?`collapsed`:`default`,updatedAt:e.updatedAt,controls:e.status===`running`?[`select`,`wait`]:[`select`]}}function vu(e,t){let n=Nu(e?.[K.kind]),r=Mu(e?.[K.sessionId]);return{kind:n??t.kind,sessionId:r??t.sessionId,turnId:Mu(e?.[K.turnId])??t.turnId,commandName:Mu(e?.[K.commandName])??t.commandName,toolCallId:Mu(e?.[K.toolCallId])??t.toolCallId,skillId:Mu(e?.[K.skillId])??t.skillId,label:Mu(e?.[K.label])??t.label}}function yu(e){return new Map(e.flatMap(e=>e.taskIds.map(t=>[t,e.id])))}function bu(e){let t=[`select`];return pa(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 xu(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: ${Cu(e.nextFireAt)}`;return t===void 0?n:`↻ wake "${Su(t)}" · ${n}`}return e.cwd}function Su(e){let t=e.trim();return t.length>32?`${t.slice(0,32)}…`:t}function Cu(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 wu(e){return e.status===`failed`?ju(e.error?.message):e.status===`completed`?ju(e.result?.output):ju(e.promptPreview??e.commandPreview)}function Tu(e){return e.status===`failed`?`failed`:e.status===`waiting_permission`?`permission`:e.unread?`unread`:e.status===`completed`?`completed`:`none`}function Eu(e){return e.status===`completed`&&!e.unread&&!e.error&&(e.result?.exitCode??0)===0&&!e.result?.signalCode&&!e.worktreePath&&!e.branchName?`collapsed`:`default`}function Du(e){return e.results.some(e=>e.status===`failed`)?`failed`:e.status===`completed`?`completed`:`none`}function Ou(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 ku(e){return[...e].sort((e,t)=>{let n=e.startedAt??e.updatedAt,r=t.startedAt??t.updatedAt,i=n.localeCompare(r);return i===0?e.id.localeCompare(t.id):i})}function Au(e){return[...e].sort((e,t)=>e.id.localeCompare(t.id))}function ju(e){let t=e?.trim().replace(/\s+/g,` `);if(t)return t.length>120?`${t.slice(0,120)}...`:t}function Mu(e){return typeof e==`string`?e:void 0}function Nu(e){if(e===`user_prompt`||e===`slash_command`||e===`model_command`||e===`tool_call`||e===`skill`||e===`transport`||e===`system`)return e}function Pu(e){let t=Iu(e.cursor?.offset),n=e.history.slice(t,t+80),r=n.map(e=>({id:e.id,kind:e.category===`chat`?`message`:`progress`,text:Lu(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 Fu(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 Iu(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?Math.floor(e):0}function Lu(e){return typeof e.data==`string`?e.data:e.type}function Ru(e){return{spawnAgent:t=>e.manager.spawn(zu(e,t)),spawnProcess:t=>e.manager.spawn(Bu(e,t)),createGroup:t=>e.groupOrchestrator.createGroup({parentSessionId:e.sessionId,waitPolicy:t.waitPolicy,taskIds:[...t.taskIds],label:t.label})}}function zu(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:pu(e.origin)}}function Bu(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:pu(e.origin)}}const Vu=new WeakMap;function Hu(e,t){Vu.set(e,t)}function Uu(e){return Vu.get(e)}const Wu=[{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.
|
|
66
|
+
|
|
67
|
+
Your role is to complete the assigned task thoroughly and accurately. Follow these guidelines:
|
|
68
|
+
|
|
69
|
+
- Execute the task as described in the prompt. Do not expand scope beyond what is requested.
|
|
70
|
+
- Use the most appropriate tools for each step. Prefer precise tools (Read, Grep, Glob) over broad ones (Bash) when possible.
|
|
71
|
+
- Report your findings clearly and concisely when the task is complete.
|
|
72
|
+
- If a task cannot be completed, explain why and what information is missing.
|
|
73
|
+
- Maintain the same code quality standards as the parent session (strict types, no fallbacks, proper error handling).`},{name:`Explore`,description:`Read-only codebase exploration and analysis agent.`,systemPrompt:`You are a codebase exploration and analysis agent. Your purpose is to search, read, and understand code without making any modifications.
|
|
74
|
+
|
|
75
|
+
You operate in read-only mode. You must NEVER attempt to write or edit files. Your tools are restricted to read-only operations: reading files, searching with grep and glob, and running non-destructive bash commands.
|
|
76
|
+
|
|
77
|
+
Your role is to answer questions about the codebase by:
|
|
78
|
+
|
|
79
|
+
- Searching for relevant files, symbols, and patterns using Glob and Grep.
|
|
80
|
+
- Reading source files, configuration, and documentation to understand structure and behavior.
|
|
81
|
+
- Tracing code paths across modules to understand how components interact.
|
|
82
|
+
- Summarizing findings in a clear, structured format with file paths and line references.
|
|
83
|
+
- Identifying architectural patterns, dependencies, and potential issues.
|
|
84
|
+
|
|
85
|
+
When exploring, prefer targeted searches over broad scans. Start with the most likely locations and narrow down. Always include absolute file paths in your responses so the caller can navigate directly to relevant code.`,disallowedTools:[`Write`,`Edit`]},{name:`Plan`,description:`Read-only planning, research, and architecture agent.`,systemPrompt:`You are a planning, research, and architecture agent. Your purpose is to analyze requirements, research approaches, and produce structured plans without making any code modifications.
|
|
86
|
+
|
|
87
|
+
You operate in read-only mode. You must NEVER attempt to write or edit files. Your tools are restricted to read-only operations.
|
|
88
|
+
|
|
89
|
+
Your role is to:
|
|
90
|
+
|
|
91
|
+
- Analyze the current codebase state relevant to the task by reading specs, source code, and tests.
|
|
92
|
+
- Research implementation approaches by examining existing patterns and architectural conventions in the repository.
|
|
93
|
+
- Identify affected files, modules, and interfaces that a proposed change would touch.
|
|
94
|
+
- Assess risks, dependencies, and potential breaking changes.
|
|
95
|
+
- Produce a structured implementation plan with clear steps, file lists, and ordering.
|
|
96
|
+
- Consider edge cases, error handling, and test coverage requirements.
|
|
97
|
+
|
|
98
|
+
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 Gu(e){return Wu.find(t=>t.name===e)}function Ku(){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.
|
|
99
|
+
|
|
100
|
+
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.
|
|
101
|
+
|
|
102
|
+
Do not use emojis.`}function qu(){return`You are a worker subagent executing a specific task. Do NOT spawn subagents; execute directly. Keep your report under 500 words. Use this structure:
|
|
103
|
+
- Scope: What was requested
|
|
104
|
+
- Result: What was done
|
|
105
|
+
- Key files: Relevant file paths (absolute)
|
|
106
|
+
- Files changed: List of modifications
|
|
107
|
+
- Issues: Any problems encountered`}function Ju(e){let t=[e.agentBody];e.claudeMd&&t.push(e.claudeMd),e.agentsMd&&t.push(e.agentsMd);let n=e.isForkWorker?qu():Ku();return t.push(n),t.join(`
|
|
108
|
+
|
|
109
|
+
`)}const Yu=`robota_command_`,Xu=/^[A-Za-z0-9_-]{1,64}$/;function Zu(e){return e.trim().replace(/^\/+/,``).split(/\s+/)[0]??``}function Qu(e){let t=Zu(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=`${Yu}${n}`;if(Xu.test(r))return r;let i=(0,d.createHash)(`sha256`).update(t).digest(`hex`).slice(0,8),a=`${Yu}${n.slice(0,40).replace(/[_-]+$/g,``)||`command`}_${i}`;if(!Xu.test(a))throw Error(`Projected model command tool name is not provider-safe: ${a}`);return a}function $u(e){let t=new Set,n=new Map,r=new Map,i=[];for(let a of e){let e=Zu(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=Qu(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:id(e,a),descriptor:a,requiresPermission:a.requiresPermission!==!1})}return{commandTools:i,toolNameToCommandName:n,commandNameToToolName:r}}function ed(e){return`${e.toolName} — ${e.descriptor.description}`}function td(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 nd(e){return $u(e.commandDescriptors).commandTools.map(t=>{let n=rd(t.descriptor);return Xo(t.toolName,t.description,n,async r=>{let i=n.parse(r);return e.isModelInvocable(t.commandName)?td(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 rd(e){let t=e.argumentHint?`Arguments for the command. Expected grammar: ${e.argumentHint}`:`Arguments for the command as a single string.`;return v.z.object({args:v.z.string().optional().describe(t)})}function id(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(`
|
|
110
|
+
|
|
111
|
+
`)}const ad={sonnet:`claude-sonnet-4-6`,haiku:`claude-haiku-4-5`,opus:`claude-opus-4-6`},od=Qu(`agent`);function sd(e,t){return ad[e]??e}function cd(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()!==od),n}function ld(e){let{agentDefinition:t,parentConfig:n,parentContext:r,parentTools:i,terminal:a}=e,o=cd(i,t),s=t.model?sd(t.model,n.provider.model):n.provider.model,c=Ju({agentBody:t.systemPrompt,claudeMd:r.claudeMd,agentsMd:r.agentsMd,isForkWorker:e.isForkWorker??!1}),l=e.provider;return new kc({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 ud(e,t){let n=t?.(e)??Gu(e);if(!n)throw Error(`Unknown agent type: ${e}`);return n}function dd(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 fd(e){if(!e)return;let t=Object.values(e)[0];if(t!==void 0)return typeof t==`object`?JSON.stringify(t):String(t)}function pd(e){if(e.request.isolation===`worktree`)throw Error(`Worktree isolation requires a runtime shell subagent runner`)}function md(e,t){if(t.type===`start`){e.emit?.({type:`background_task_tool_start`,toolName:t.toolName,firstArg:fd(t.toolArgs)});return}e.emit?.({type:`background_task_tool_end`,toolName:t.toolName,success:t.success??!0})}function hd(e){try{return Tn(e.getFullHistory())}catch{return}}function gd(e){return{start(t){pd(t);let n=ld({agentDefinition:dd(ud(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=>{md(t,n),e.onToolExecution?.(n)}});return{jobId:t.jobId,result:n.run(t.request.prompt).then(e=>{let r=hd(n);return{jobId:t.jobId,output:e,...r?{usage:r}:{}}}),cancel:()=>(n.abort(),Promise.resolve())}}}}[`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(` `),v.z.object({prompt:v.z.string().optional().describe(`The task for a single subagent to perform. Required when jobs is omitted.`),subagent_type:v.z.string().optional().describe(`Agent type: "general-purpose", "Explore", "Plan", or a custom agent name`),model:v.z.string().optional().describe(`Optional model override`),isolation:v.z.enum([`none`,`worktree`]).optional().describe(`Optional runtime isolation mode. "worktree" runs in a Git worktree.`),jobs:v.z.array(v.z.object({label:v.z.string().optional().describe(`Stable role label for this batch job`),prompt:v.z.string().describe(`The task for this subagent to perform`),subagent_type:v.z.string().optional().describe(`Agent type for this job`),model:v.z.string().optional().describe(`Optional model override for this job`),isolation:v.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();const _d=new WeakMap;function vd(e,t){_d.set(e,t)}function yd(e){return _d.get(e)}var bd=class{getManager;onChanged;emitTaskEvent;emitGroupEvent;persistSession;onWake;appendSystemNote;appendHistoryEntry;backgroundTasks=[];backgroundTaskEvents=[];backgroundJobGroups=[];backgroundJobGroupEvents=[];backgroundTaskUnsubscribe=null;backgroundJobUnsubscribe=null;backgroundJobOrchestrator=null;constructor(e,t,n,r,i,a,o,s){this.getManager=e,this.onChanged=t,this.emitTaskEvent=n,this.emitGroupEvent=r,this.persistSession=i,this.onWake=a,this.appendSystemNote=o,this.appendHistoryEntry=s}subscribe(e){if(this.backgroundTaskUnsubscribe)return;let t=Uu(e)??yd(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 $l({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 Fu({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 Fu({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 Fu({entryId:e,lines:iu(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.recordCompletedTaskUsage(e),this.persistSession(),this.onChanged(`background_task`,xd(e))}recordCompletedTaskUsage(e){if(e.type!==`background_task_completed`)return;let t=e.task.result?.usage;!t||t.totalTokens<=0||this.appendHistoryEntry?.(ql(t,{scope:`background`,id:e.task.id,label:e.task.agentType??e.task.label}))}recordGroupEvent(e,t){this.backgroundJobGroups=this.getGroupSnapshots(),this.backgroundJobGroupEvents.push(e),this.persistSession(),this.onChanged(`background_group`,du(e.group.id))}};function xd(e){if(`task`in e)return uu(e.task.id);if(`taskId`in e)return uu(e.taskId)}function Sd(e){let t=yd(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 Cd(e){let t=Sd(e);if(!t.subagentManager)throw Error(`Subagent manager is not available for this session.`);return t.subagentManager}function wd(e,t){let n=t.customAgentRegistry?.(e);if(!n)throw Error(`Unknown agent type: ${e}`);return n}function Td(e){return(yd(e)?.agentDefinitions??[]).map(e=>({name:e.name,description:e.description}))}async function Ed(e,t,n,r){let i=Sd(e),a=wd(t.agentType,i),o=e.getSessionId();return Cd(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:pu({kind:r===`model`?`model_command`:`slash_command`,sessionId:o,commandName:`agent`,label:t.label})})}async function Dd(e,t){return Cd(e).wait(t)}async function Od(e,t,n){await Cd(e).send(t,n)}async function kd(e,t,n){await Cd(e).cancel(t,n)}async function Ad(e,t){await Cd(e).close(t)}function jd(e){return Cd(e).list()}function Md(e,t={}){let{sessionId:n,execCtrl:r,histTracker:i,bgTracker:a}=e,o=i.getHistory();return mu({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 Nd(e,t,n,r,i){let a=fu(e);if(!a)throw Error(`Unknown execution workspace entry: ${e}`);return a.kind===`main_thread`?Pu({entryId:e,history:t(),cursor:i}):a.kind===`background_group`?n.readGroupDetail(e,a.sourceId,r):n.readTaskDetail(e,a.sourceId,i)}function Pd(e,t,n,r){return Ru({manager:e.getManagerOrThrow(),groupOrchestrator:e.getOrchestratorOrThrow(t),sessionId:t,cwd:n,origin:{...r,sessionId:r.sessionId||t}})}var Fd=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 Md({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(),Nd(e,()=>this.histTracker.getHistory(),this.bgTracker,this.getSessionOrThrow().getSessionId(),t)}createExecutionWorkspaceTaskSpawner(e){return Pd(this.bgTracker,this.getSessionOrThrow().getSessionId(),this.getCwd(),e)}listAgentDefinitions(){return Td(this.getSessionOrThrow())}listAgentJobs(){return jd(this.getSessionOrThrow())}async spawnAgentJob(e){return await this.ensureInitialized(),Ed(this.getSessionOrThrow(),e,this.getCwd(),this.skillRouter.getCommandInvocationSource())}async waitAgentJob(e){return await this.ensureInitialized(),Dd(this.getSessionOrThrow(),e)}async sendAgentJob(e,t){await this.ensureInitialized(),await Od(this.getSessionOrThrow(),e,t)}async cancelAgentJob(e,t){await this.ensureInitialized(),await kd(this.getSessionOrThrow(),e,t)}async closeAgentJob(e){await this.ensureInitialized(),await Ad(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})}};function Id(e){return(0,d.createHash)(`sha256`).update(e,`utf-8`).digest(`hex`)}function Ld(e,t=new G){let n=t.readFileSync(e,`utf-8`);return{filePath:e,content:n,contentHash:Id(n)}}async function Rd(e,t=new G){let n=[],r=[];for(let i of e){if(!t.existsSync(i.filePath)){r.push(i);continue}Id(t.readFileSync(i.filePath,`utf-8`))===i.contentHash?r.push(i):n.push(i)}return{stale:n,fresh:r}}async function zd(e,t=new G){let{stale:n}=await Rd(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:Id(n)}}),refreshed:i}}async function Bd(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 zd(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(`
|
|
112
|
+
|
|
113
|
+
`),d.map(e=>e.content).join(`
|
|
114
|
+
|
|
115
|
+
`));i().updateSystemMessage(f);for(let e of l)a(`context_file_refreshed`,{filePath:e})}function Vd(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 Hd(e,t,n){let r=e?.[t]??e?.[n];return typeof r==`string`?r:null}function Ud(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 Wd(e){if(e.toolName!==`Edit`)return{};let t=Hd(e.toolArgs,`file_path`,`filePath`),n=Hd(e.toolArgs,`old_string`,`oldString`),r=Hd(e.toolArgs,`new_string`,`newString`);return!t||n===null||r===null||n===r?{}:{diffFile:t,diffLines:Kd(n,r,Ud(e.toolResultData),t)}}function Gd(e,t,n){return[...e.split(`
|
|
116
|
+
`).map((e,t)=>({type:`remove`,text:e,lineNumber:n+t})),...t.split(`
|
|
117
|
+
`).map((e,t)=>({type:`add`,text:e,lineNumber:n+t}))]}function Kd(e,t,n,r,i=new G){let a=Gd(e,t,n),o;try{o=i.readFileSync(r,`utf8`).split(`
|
|
118
|
+
`)}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(`
|
|
119
|
+
`).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(`
|
|
120
|
+
`).length,p=t.split(`
|
|
121
|
+
`).length;return[{type:`hunk`,text:`@@ -${d},${s.length+f+l.length} +${d},${s.length+p+l.length} @@`,lineNumber:d},...s,...a,...l]}function qd(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(`
|
|
122
|
+
`);e.history.push({id:(0,d.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 Jd(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 Yd(e,t){let n=Vd(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,d.randomUUID)(),timestamp:new Date,category:`event`,type:`tool-start`,data:{toolName:t.toolName,firstArg:n,isRunning:!0}}),r}function Xd(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],...Wd(t),isRunning:!1,result:n,toolResultData:t.toolResultData};return e.activeTools[r]=i,e.activeTools=Jd(e.activeTools),e.history.push({id:(0,d.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 Zd=[{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 Qd(e){if(e instanceof it)return"Invalid API key. Run `/provider` to reconfigure, or check your settings file (~/.robota/settings.json).";if(e instanceof at)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 ot)return`Network connection failed. Check your internet connection and verify your provider URL in settings.`;if(e instanceof rt&&e.originalError)return Qd(e.originalError);let t=e.message;for(let{pattern:e,message:n}of Zd)if(e.test(t))return n;return t}async function $d(e,t,n,r){let i=r.getHistory();i.push(P(rr(t??e))),r.onWorkspaceUpdated();let a=r.getSession().getHistory().length;r.resetUsedMemoryReferences();try{let o=await Jl(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(),qd({activeTools:r.getActiveTools(),history:i}),r.clearStreaming();let c=Wl(s||`(empty response)`,r.getSession().getHistory(),i,a,r.getSession().getContextState(),o.promptFileReferenceRecords);i.push(P(ir(c.response))),c.usage&&i.push(Kl(c.usage)),r.onComplete(c),r.onContextUpdate()}catch(e){if(r.flushStreaming(),Hl(e)){let e=Gl(r.getSession().getHistory(),i,a,r.getSession().getContextState());qd({activeTools:r.getActiveTools(),history:i}),r.clearStreaming(),e.response&&i.push(P(ir(e.response))),e.usage&&i.push(Kl(e.usage)),i.push(P(H(`Interrupted by user.`))),r.onInterrupted(e)}else{qd({activeTools:r.getActiveTools(),history:i});let t=r.getStreamingText();if(r.clearStreaming(),t.trim().length>0){let e=ir(t);e.state=`interrupted`,i.push(P(e))}let n=e instanceof Error?e:Error(String(e)),a=Qd(n);i.push(P(H(`Error: ${a}`,{metadata:{kind:`error`}}))),r.onError(n)}}}var ef=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.pendingTurnOptions.wakeTaskId!==void 0&&this.wakeTaskIds.delete(this.pendingTurnOptions.wakeTaskId),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(P(H(`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=Yd(t,e);this.activeTools=t.activeTools,this.callbacks.emit(`tool_start`,n)}else{let n=Xd(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 Bd(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 $d(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(),getStreamingText:()=>this.streamingText,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(P(rr(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(P(H(`Error: ${Qd(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(),qd({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(P(ir(e))),this.callbacks.emit(`complete`,t),this.callbacks.emit(`context_update`,this.callbacks.getContextState())}};function tf(e,t,n){let r=yd(n)?.customAgentRegistry?.(e)??Gu(e);if(!r)throw Error(`Unknown agent type: ${e}`);return t.allowedTools?{...r,tools:t.allowedTools}:r}async function nf(e,t,n){let r=yd(n);if(!r)throw Error(`Fork execution is not available. Agent runtime deps may not be initialized.`);return ld({agentDefinition:tf(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 rf(e,t,n){let r=await Ol([t],{cwd:n,reason:`manual`});if(pl(r.diagnostics))return{references:[...e],result:{evicted:[],diagnostics:[ml(r.diagnostics)]}};let i=r.references[0];if(!i)return{references:[...e],result:{evicted:[],diagnostics:[`No context reference was resolved.`]}};let a=tl(hl([i])[0],`manual`,`active`),o=nl(e,a);return{references:o.references,result:{reference:a,evicted:o.evicted,diagnostics:[]}}}function af(e,t,n){if(t.length===0)return[...e];let r=new Date().toISOString(),i=[...e];for(let e of t){let t=tl(e,n.loadType,n.status,r);i=nl(i,t).references}return i}function of(e,t){let n=new Date().toISOString();return e.map(e=>{let r=(0,p.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 sf(e){let t=(0,p.join)(e,`.robota`);return{settings:(0,p.join)(t,`settings.json`),settingsLocal:(0,p.join)(t,`settings.local.json`),logs:(0,p.join)(t,`logs`),sessions:(0,p.join)(t,`sessions`),memory:(0,p.join)(t,`memory`),checkpoints:(0,p.join)(t,`checkpoints`)}}function cf(){let e=(0,p.join)((0,m.homedir)(),`.robota`);return{settings:(0,p.join)(e,`settings.json`),sessions:(0,p.join)(e,`sessions`),onboarded:(0,p.join)(e,`onboarded`)}}function lf(e){let t=e.fs??new G,n=e.manifests.filter(t=>t.sequence>e.target.sequence),r=e.manifests.filter(t=>t.sequence>=e.target.sequence);return{target:uf(e.target),capturedFiles:e.target.files.map(n=>{let r=n.snapshotFile?(0,p.join)(e.checkpointDir(e.sessionId,e.target.id),n.snapshotFile):void 0,i=r?ff(r,t):void 0;return{originalPath:n.originalPath,relativePath:(0,p.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:df(n),rollbackThroughCheckpoint:df(r)}}function uf(e){return{id:e.id,sessionId:e.sessionId,sequence:e.sequence,prompt:e.prompt,createdAt:e.createdAt,fileCount:e.fileCount}}function df(e){return{checkpointIds:e.map(e=>e.id),fileCount:e.reduce((e,t)=>e+t.fileCount,0)}}function ff(e,t){try{return t.statSync(e)}catch{return}}const pf=`manifest.json`,mf=`files`;var hf=class{fs;fsAsync;cwd;rootDir;now;activeTurn=null;constructor(e,t=new G,n=new El){this.fs=t,this.fsAsync=n,this.cwd=(0,p.resolve)(e.cwd),this.rootDir=sf(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,p.join)(this.sessionDir(e.sessionId),n);await this.fsAsync.mkdir((0,p.join)(r,mf),{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},gf(i)}async captureFile(e){if(!this.activeTurn)return;let t=(0,p.resolve)(this.cwd,e);if(this.activeTurn.capturedPaths.has(t)||vf(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),gf(e.manifest)}list(e){return this.loadManifests(e).map(gf)}inspect(e,t){let n=this.loadManifests(e),r=n.find(e=>e.id===t);if(!r)throw Error(`Unknown edit checkpoint: ${t}`);return lf({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:gf(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:gf(r),restoredCheckpointCount:i.length,restoredFileCount:a,removedCheckpointCount:i.length}}async createFileRecord(e,t){if(!await yf(this.fsAsync,this.fs,e))return{originalPath:e,existed:!1};let n=(0,p.join)(mf,`${String(t.manifest.files.length+1).padStart(6,`0`)}.content`);return await this.fsAsync.copyFile(e,(0,p.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,p.dirname)(n.originalPath),{recursive:!0}),await this.fsAsync.copyFile((0,p.join)(this.checkpointDir(e,t),n.snapshotFile),n.originalPath)}loadManifests(e){let t=this.sessionDir(e);return bf(this.fs,t).map(e=>(0,p.join)(t,e,pf)).map(e=>xf(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,p.join)(e,pf),r=`${n}.tmp`;await this.fsAsync.writeFile(r,JSON.stringify(t,null,2),`utf8`),await this.fsAsync.rename(r,n)}sessionDir(e){return(0,p.join)(this.rootDir,_f(e))}checkpointDir(e,t){return(0,p.join)(this.sessionDir(e),_f(t))}};function gf(e){return{id:e.id,sessionId:e.sessionId,sequence:e.sequence,prompt:e.prompt,createdAt:e.createdAt,fileCount:e.fileCount}}function _f(e){return e.replace(/[^a-zA-Z0-9._-]/g,`_`)}function vf(e,t){let n=(0,p.relative)(e,t);return n.length===0||!n.startsWith(`..`)&&!n.startsWith(`/`)}async function yf(e,t,n){try{return await e.access(n,t.constants.F_OK),!0}catch{return!1}}function bf(e,t){try{return e.readdirSync(t)}catch{return[]}}function xf(e,t){try{let n=e.readFileSync(t,`utf8`);return JSON.parse(n)}catch{return}}function Sf(e){return e.source===`plugin`?`plugin`:`skill`}function Cf(e){return e.context===`fork`?`fork`:`inject`}function wf(e){return{type:`skill-activation`,skillName:e.skill.name,source:Sf(e.skill),invocation:e.invocation,mode:Cf(e.skill),status:e.status,timestamp:new Date().toISOString(),...e.qualifiedName===void 0?{}:{qualifiedName:e.qualifiedName},...e.error===void 0?{}:{error:e.error}}}function Tf(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 Ef=new Set([`memory_candidate_saved`,`memory_candidate_approved`,`memory_candidate_rejected`,`memory_retrieved`]);function Df(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 Of=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=af(this.contextReferences,e,{loadType:`manual`,status:`active`}),this.persistSession()}recordPromptContextReferences(e){this.contextReferences=af(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(P(H(`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(P(H(`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(P(H(`Checkpoint error: ${t.message}`))),t}}setEditCheckpointStore(e){this.editCheckpointStore=e}getUsedMemoryReferences(){return[...this.usedMemoryReferences]}recordMemoryEvent(e){this.memoryEvents.push(e),Ef.has(e.type)&&this.history.push({id:(0,d.randomUUID)(),timestamp:new Date(e.at),category:`event`,type:`memory-event`,data:{...e,message:Df(e)}}),this.emitMemoryEvent(e),this.persistSession()}recordSystemContextFiles(e){this.systemContextReferences=of(e,this.cwd)}listContextReferences(){return[...this.systemContextReferences,...this.contextReferences]}listInjectionContextReferences(){return[...this.contextReferences]}async addContextReference(e){let{references:t,result:n}=await rf(this.contextReferences,e,this.cwd);return this.contextReferences=t,this.persistSession(),n}removeContextReference(e){let t=rl(this.contextReferences,e);return this.contextReferences=t.references,this.persistSession(),t.result}clearContextReferences(){let e=il(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,d.randomUUID)(),timestamp:new Date(e.timestamp),category:`event`,type:`skill-activation`,data:{...e,message:Tf(e)}}),this.emitSkillActivation(e),this.persistSession()}getCheckpointStore(){return this.editCheckpointStore||=new hf({cwd:this.cwd}),this.editCheckpointStore}};function kf(e){if((0,x.existsSync)(e))try{return JSON.parse((0,x.readFileSync)(e,`utf-8`))}catch{return}}function Af(e){if((0,x.existsSync)((0,S.join)(e,`pnpm-workspace.yaml`))||(0,x.existsSync)((0,S.join)(e,`pnpm-lock.yaml`)))return`pnpm`;if((0,x.existsSync)((0,S.join)(e,`yarn.lock`)))return`yarn`;if((0,x.existsSync)((0,S.join)(e,`bun.lockb`)))return`bun`;if((0,x.existsSync)((0,S.join)(e,`package-lock.json`)))return`npm`}async function jf(e){let t=(0,S.join)(e,`package.json`),n=(0,S.join)(e,`tsconfig.json`),r=(0,S.join)(e,`pyproject.toml`),i=(0,S.join)(e,`Cargo.toml`),a=(0,S.join)(e,`go.mod`);if((0,x.existsSync)(t)){let r=kf(t),i=(0,x.existsSync)(n)?`typescript`:`javascript`,a=Af(e);return{type:`node`,name:r?.name,packageManager:a,language:i}}return(0,x.existsSync)(r)||(0,x.existsSync)((0,S.join)(e,`setup.py`))?{type:`python`,language:`python`}:(0,x.existsSync)(i)?{type:`rust`,language:`rust`}:(0,x.existsSync)(a)?{type:`go`,language:`go`}:{type:`unknown`,language:`unknown`}}function Mf(e,t){e.injectRawMessage(t)}function Nf(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,goal: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}=Pf(a,o),g=r.name,_=null;if(r.messages)if(n)for(let e of r.messages)Mf(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,goal:r.goal}}function Pf(e,t){let n=new Date().toISOString(),r=[];return{backgroundTasks:e.map(e=>{if(Ff(e.status)||If(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 Ff(e){return e===`completed`||e===`failed`||e===`cancelled`}function If(e){return e.kind===`scheduled`&&e.status===`sleeping`&&e.schedule!==void 0}function Lf(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 Rf(e,t,n,r){let i=Lf(e);!i||!(`task`in e)||Gi(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 zf=[`Shell — execute host shell commands (OS-aware: bash/PowerShell)`,`Bash — alias of Shell (model-familiar name)`,`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`,`AskUserQuestion — ask the user structured questions (options/multi-select/free text) mid-task`];function Bf(e={}){return[rs(e),is(e),fs(e),ys(e),Ss(e),Ts,Ms,zs,Hs,Js()]}const Vf=new Set([`tools`,`disallowedTools`]),Hf=new Set([`maxTurns`]);function Uf(e){let t=e.includes(`,`)?/\s*,\s*/:/\s+/;return e.split(t).map(e=>e.trim()).filter(e=>e.length>0)}function Wf(e){let t=e.split(`
|
|
123
|
+
`);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();Vf.has(i)?r[i]=Uf(a):Hf.has(i)?r[i]=parseInt(a,10):r[i]=a}let i=t.slice(n+1).join(`
|
|
124
|
+
`).trim();return{frontmatter:Object.keys(r).length>0?r:null,body:i}}function Gf(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,p.join)(e,i.name),{frontmatter:a,body:o}=Wf(t.readFileSync(r,`utf-8`)),s=(0,p.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 Kf=class{cwd;home;fs;constructor(e,t,n=new G){this.cwd=e,this.home=t??(0,m.homedir)(),this.fs=n}loadAll(){let e=[Gf((0,p.join)(this.cwd,`.robota`,`agents`),this.fs),Gf((0,p.join)(this.cwd,`.agents`,`agents`),this.fs),Gf((0,p.join)(this.cwd,`.claude`,`agents`),this.fs),Gf((0,p.join)(this.home,`.robota`,`agents`),this.fs),Gf((0,p.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 Wu)t.has(e.name)||r.push(e);return r}getAgent(e){return this.loadAll().find(t=>t.name===e)}};function qf(e){let t=e.content.trim();return e.title?[`## ${e.title}`,t].join(`
|
|
125
|
+
`):t}function Jf(e){return[...e].filter(e=>e.content.trim().length>0).sort((e,t)=>e.priority-t.priority||e.id.localeCompare(t.id)).map(e=>qf(e)).join(`
|
|
126
|
+
|
|
127
|
+
`)}function Yf(e,t,n,r,i){return{id:e,title:t,priority:n,content:r,source:i}}function Xf(e){return Yf(`preset-persona`,void 0,5,e,`persona`)}function Zf(){return Yf(`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 Qf(e){if(e)return Yf(`runtime-cwd`,`Working Directory`,30,`\`${e}\``,`runtime`)}function $f(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}`),Yf(`runtime-project`,`Current Project`,40,t.join(`
|
|
128
|
+
`),`runtime`)}function ep(e){return Yf(`permission-mode`,`Permission Mode`,50,`- **Permission mode:** ${e}`,`permissions`)}function tp(e){if(!(e===void 0||e.trim().length===0))return Yf(`runtime-response-language`,`Response Language`,45,e,`runtime`)}function np(e){if(e.trim().length!==0)return Yf(`project-agents-md`,`Agent Instructions`,10,e,`project-instructions`)}function rp(e){if(e.trim().length!==0)return Yf(`project-claude-md`,`Project Notes`,20,e,`project-instructions`)}function ip(e){if(!(e===void 0||e.trim().length===0))return Yf(`project-memory`,`Project Memory`,25,e,`project-instructions`)}function ap(e){if(!(e===void 0||e.trim().length===0))return Yf(`active-task-context`,`Active Task Context`,27,e,`project-instructions`)}function op(e){if(e.length!==0)return Yf(`tool-descriptions`,`Available Tools`,60,e.map(e=>`- ${e}`).join(`
|
|
129
|
+
`),`tool`)}function sp(e){let t=e.argumentHint?` ${e.argumentHint}`:``;return`- ${e.name}${t}: ${e.description}`}function cp(e,t,n,r,i){let a=i.filter(t=>t.modelInvocable&&t.kind===e).map(sp);if(a.length!==0)return Yf(`capability-${e}`,t,n,a.join(`
|
|
130
|
+
`),r)}function lp(e){let t=[],n=cp(`builtin-command`,`Built-in Commands`,70,`command`,e),r=cp(`skill`,`Skills`,80,`skill`,e),i=cp(`agent`,`Agents`,90,`agent`,e),a=cp(`tool`,`Tools`,100,`tool`,e);return n&&t.push(n),r&&t.push(r),i&&t.push(i),a&&t.push(a),t}function up(e,t){t!==void 0&&e.push(t)}function dp(e){return e.map(e=>({name:e.name,kind:`skill`,description:e.description,userInvocable:!0,modelInvocable:e.disableModelInvocation!==!0}))}function fp(e){return e.map(e=>({name:e.name,kind:`agent`,description:e.description,userInvocable:!1,modelInvocable:!0,safety:`background-agent`}))}function pp(e){return[...e.commandDescriptors??[],...e.skills?dp(e.skills):[],...e.agents?fp(e.agents):[]]}function mp(e){let t=[];return up(t,e.persona!==void 0&&e.persona.trim().length>0?Xf(e.persona):void 0),up(t,e.selfVerification===!0?Zf():void 0),up(t,np(e.agentsMd)),up(t,rp(e.claudeMd)),up(t,ip(e.memoryMd)),up(t,ap(e.taskContext)),up(t,Qf(e.cwd)),t.push($f(e.projectInfo)),up(t,tp(e.language)),t.push(ep(e.permissionMode)),up(t,op(e.toolDescriptions)),t.push(...lp(pp(e))),Jf(t)}const hp=v.z.object({command:v.z.string().describe(`The shell command to start in the background`),timeout:v.z.number().optional().describe(`Optional timeout in milliseconds. Default is 120000.`),workingDirectory:v.z.string().optional().describe(`Working directory for the command. Defaults to the current project directory.`),stdin:v.z.string().optional().describe(`Optional stdin to write after the process starts.`),outputLimitBytes:v.z.number().optional().describe(`Maximum captured output bytes kept in the task result.`)});function gp(e,t,n){return JSON.stringify({success:!0,background:!0,output:``,taskId:e,status:t,command:n})}function _p(e){return JSON.stringify({success:!1,background:!0,output:``,error:`Background process error: ${e}`})}async function vp(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 gp(n.id,n.status,e.command)}catch(e){return _p(e instanceof Error?e.message:String(e))}}function yp(e){return Xo(`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.`,hp,async t=>vp(t,e))}function bp(e,t,n,r,i,a){let o,s=[],c;if(e.enableAgentRuntime||e.enableParallelSubagents){let l=new Kf(n);s=l.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=>l.getAgent(e),agentDefinitions:s};let u=new no({runner:(e.subagentRunnerFactory??gd)(o),backgroundTaskRunners:e.backgroundTaskRunners});o.subagentManager=u,c=u.getBackgroundTaskManager(),o.backgroundTaskManager=c}else c=new Ta({runners:e.backgroundTaskRunners??[]});let l=e.sessionLogger;return l&&c.subscribe(e=>Tp(l,t,e)),c.subscribe(t=>Rf(t,n,e.config.hooks,a.length>0?a:void 0)),{agentToolDeps:o,agentDefinitions:s,backgroundTaskManager:c}}function xp(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:pu({kind:`tool_call`,sessionId:n,label:`BackgroundProcess`})};return i.push(yp(a)),{backgroundProcessToolDeps:a}}function Sp(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??wi[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 Cp(e,t,n,r,i,a,o){let s=e.systemPromptBuilder??mp,c=[...zf,...r?r.commandTools.map(ed):[]],l=e.toolDescriptions??(i?[...c,`BackgroundProcess — start long-running shell commands as managed background tasks`]:c),u=e.persona,d=e.selfVerification,f=Sp(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 wp(e,t,n,r){t&&(t.parentSessionId=e.getSessionId()),t&&(t.isParallelSubagentsEnabled=()=>e.getParallelSubagentsEnabled()),n&&(n.parentSessionId=e.getSessionId()),Hu(e,r),t&&vd(e,t)}function Tp(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 Ep=new Set([`Write`,`Edit`]);function Dp(e,t){return e.map(e=>Ep.has(e.getName())?new Op(e,t):e)}var Op=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=kp(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 kp(e){if(!e||typeof e!=`object`)return;let t=e.filePath;return typeof t==`string`&&t.length>0?t:void 0}const Ap=new Set([`disable-model-invocation`,`user-invocable`]),jp=new Set([`allowed-tools`]);function Mp(e){return e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}function Np(e){let t=e.includes(`,`)?/\s*,\s*/:/\s+/;return e.split(t).map(e=>e.trim()).filter(e=>e.length>0)}function Pp(e){let t=e.split(`
|
|
131
|
+
`);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=Mp(a);Ap.has(a)?n[s]=o===`true`:jp.has(a)?n[s]=Np(o):n[s]=o}return Object.keys(n).length>0?n:null}function Fp(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 Ip(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,p.join)(e,i.name,`SKILL.md`);if(!t.existsSync(r))continue;let a=t.readFileSync(r,`utf-8`),o=Pp(a);n.push(Fp(o,a,i.name))}return n}function Lp(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,p.join)(e,i.name),a=t.readFileSync(r,`utf-8`),o=Pp(a),s=(0,p.basename)(i.name,`.md`);n.push(Fp(o,a,s))}return n}var Rp=class{name=`skill`;cwd;home;fs;cachedCommands=null;constructor(e,t,n=new G){this.cwd=e,this.home=t??(0,m.homedir)(),this.fs=n}getCommands(){if(this.cachedCommands)return this.cachedCommands;let e=[Ip((0,p.join)(this.cwd,`.claude`,`skills`),this.fs),Lp((0,p.join)(this.cwd,`.claude`,`commands`),this.fs),Ip((0,p.join)(this.home,`.robota`,`skills`),this.fs),Ip((0,p.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)}},zp=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 Bp(){return(0,p.join)(process.env.HOME??process.env.USERPROFILE??`/`,`.robota`,`settings.json`)}function Vp(e,t){return t===void 0||t===`user`?Bp():(0,p.join)(e,`.robota`,`settings.local.json`)}function Hp(e){if(!(0,h.existsSync)(e))return{};let t=(0,h.readFileSync)(e,`utf8`);try{return JSON.parse(t)}catch(t){throw new zp(e,t instanceof Error?t.message:String(t))}}function Up(e,t){(0,h.mkdirSync)((0,p.dirname)(e),{recursive:!0}),(0,h.writeFileSync)(e,JSON.stringify(t,null,2)+`
|
|
132
|
+
`,`utf8`)}function Wp(e){return(0,h.existsSync)(e)?((0,h.unlinkSync)(e),!0):!1}const Gp=`report_goal_status`,Kp=v.z.object({status:v.z.enum([`continue`,`satisfied`]).describe(`"satisfied" when the assigned goal is fully achieved; otherwise "continue".`),reason:v.z.string().describe(`A short justification for the status — what was achieved or what remains.`)});function qp(){return Xo(Gp,`Report progress toward the currently assigned autonomous goal. Call this only when you have an assigned goal: use status "satisfied" once it is fully achieved, or "continue" with the remaining work. Do not call it when no goal has been assigned.`,Kp,async e=>({acknowledged:!0,status:e.status===`satisfied`?`satisfied`:`continue`}))}const Jp=`When you have made as much progress as you can this turn, call \`${Gp}\`: use status "satisfied" once the goal is fully achieved, or status "continue" with a short reason describing the remaining work. Do the actual work with your tools first; the signal only reports your assessment.`;function Yp(e){return[`You have been assigned an autonomous goal to pursue across multiple turns:`,``,`GOAL: ${e}`,``,`Work toward this goal now. ${Jp}`].join(`
|
|
133
|
+
`)}function Xp(e){let t=e.progress[e.progress.length-1],n=t?.reason?`\nMost recent assessment: ${t.reason}`:``;return[`Continue pursuing the assigned goal (iteration ${e.iterations+1} of at most ${e.maxIterations}).`,``,`GOAL: ${e.objective}${n}`,``,`Keep going from where you left off. ${Jp}`].join(`
|
|
134
|
+
`)}const Zp={now:()=>new Date().toISOString(),createId:()=>`goal_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`};function Qp(e){let t;try{t=JSON.parse(e)}catch{return null}return{status:t.status===`satisfied`?`satisfied`:`continue`,reason:typeof t.reason==`string`?t.reason:``}}function $p(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(!(!n||n.name!==`report_goal_status`))return Qp(n.args)}return null}function em(e){return e.filter(e=>e.name!==Gp).length}var tm=class{deps;goal=null;consecutiveIdleTurns=0;noProgressLimit=2;constructor(e=Zp){this.deps=e}getState(){return this.goal}isActive(){return this.goal?.status===`active`}start(e,t={}){let n=e.trim();if(n.length===0)throw Error(`A goal objective must be a non-empty string.`);let r=t.maxIterations&&t.maxIterations>0?Math.floor(t.maxIterations):25;return this.noProgressLimit=t.noProgressLimit&&t.noProgressLimit>0?Math.floor(t.noProgressLimit):2,this.consecutiveIdleTurns=0,this.goal={id:this.deps.createId(),objective:n,status:`active`,iterations:0,maxIterations:r,startedAt:this.deps.now(),progress:[]},{goal:this.goal,prompt:Yp(n)}}restore(e,t=2){this.goal=e.status===`active`?e:null,this.noProgressLimit=t,this.consecutiveIdleTurns=0}cancel(){return!this.goal||this.goal.status!==`active`?null:(this.goal={...this.goal,status:`stopped`,stopReason:`cancelled`},this.goal)}onTurnComplete(e){if(!this.goal||this.goal.status!==`active`)return null;let t=$p(e.toolSummaries),n=this.goal.iterations+1;if(this.goal={...this.goal,iterations:n,progress:[...this.goal.progress,{iteration:n,signal:t?.status??`continue`,reason:t?.reason??``}]},t?.status===`satisfied`)return this.stop(`satisfied`);let r=em(e.toolSummaries)>0;return this.consecutiveIdleTurns=r?0:this.consecutiveIdleTurns+1,this.consecutiveIdleTurns>=this.noProgressLimit?this.stop(`no-progress`):n>=this.goal.maxIterations?this.stop(`max-iterations`):{action:`continue`,prompt:Xp(this.goal),goal:this.goal}}stop(e){let t=e===`satisfied`?`satisfied`:`stopped`;return this.goal={...this.goal,status:t,stopReason:e},{action:`stop`,reason:e,goal:this.goal}}};function nm(e){let t=/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/.exec(e);return t?t[1].trim():e.trim()}var rm=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=nm(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 im(e){let t=/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/.exec(e);return t?t[1].trim():e.trim()}var am=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=im(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 om=new Set([`Write`,`Edit`]),sm=new Set([`Shell`,`Bash`,`BackgroundProcess`]),cm=new Set([`Read`,`Glob`,`Grep`,`WebFetch`,`WebSearch`]);function lm(e){let t=e.toolName;return cm.has(t)?{toolName:t,reversible:!0,sideEffect:`none`,rollbackLayer:`none`,status:`read-only`,message:`${t} does not mutate the local workspace.`}:om.has(t)?e.context.isolation===`worktree`||e.context.isolation===`provider-sandbox`?fm(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.`}:sm.has(t)?fm(t,`shell-process`,e.context):t===`Agent`?pm(e.toolArgs,e.context):{toolName:t,reversible:!1,sideEffect:`unknown`,rollbackLayer:`none`,status:`unknown`,message:`${t} has no reversible execution contract.`}}function um(e,t){let n={checkpointAvailable:t.checkpointAvailable,isolation:t.isolation??`none`},r=t.enforceUntrackedSideEffects??!0;return e.map(e=>new dm(e,{safetyContext:n,enforceUntrackedSideEffects:r}))}var dm=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=lm({toolName:this.getName(),toolArgs:_m(e),context:this.options.safetyContext});return!n.reversible&&this.options.enforceUntrackedSideEffects?vm(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 fm(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 pm(e,t){return t.isolation===`worktree`||t.isolation===`provider-sandbox`?fm(`Agent`,`subagent`,t):mm(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 mm(e){if(!e)return!1;let t=e.jobs;return Array.isArray(t)?t.length>0&&t.every(e=>gm(e)?hm(e)===`worktree`:!1):hm(e)===`worktree`}function hm(e){let t=e.isolation;return typeof t==`string`?t:void 0}function gm(e){return e!==void 0&&typeof e==`object`&&!Array.isArray(e)}function _m(e){if(!(!e||typeof e!=`object`||Array.isArray(e)))return e}function vm(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 ym(e){return(e??[]).filter(e=>e.modelInvocable&&e.kind===`builtin-command`)}function bm(e){return e.trim().replace(/^\/+/,``).split(/\s+/)[0]??``}function xm(e,t){return e.some(e=>bm(e.name)===t)}function Sm(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??Cm(),i=new Rp(n),a=ym(e.commandDescriptors),o=a.length>0&&e.modelCommandExecutor!==void 0&&e.isModelCommandInvocable!==void 0,s=o?$u(a):void 0,c=xm(a,`skills`)?i.getModelInvocableSkills():[],l=Bf({sandboxClient:e.sandboxClient,cwd:n}),u=e.editCheckpointRecorder!==void 0&&e.sandboxClient===void 0,d=[...u&&e.editCheckpointRecorder?Dp(l,e.editCheckpointRecorder):l,...e.additionalTools??[],...e.includeGoalTool?[qp()]:[]],f=e.reversibleExecution?{...e.reversibleExecution,isolation:e.reversibleExecution.isolation??(e.sandboxClient?`provider-sandbox`:void 0)}:void 0,m=f?um(d,{...f,checkpointAvailable:u}):d;o&&e.modelCommandExecutor!==void 0&&e.isModelCommandInvocable!==void 0&&m.push(...nd({execute:e.modelCommandExecutor,isModelInvocable:e.isModelCommandInvocable,commandDescriptors:a}));let h=[];e.providerFactory&&h.push(new am({providerFactory:e.providerFactory,defaultModel:e.config.provider.model})),e.sessionFactory&&h.push(new rm({sessionFactory:e.sessionFactory})),e.additionalHookExecutors&&h.push(...e.additionalHookExecutors);let{agentToolDeps:g,agentDefinitions:_,backgroundTaskManager:v}=bp(e,r,n,t,m,h),{backgroundProcessToolDeps:y}=xp(e,v,r,n,m),{finalSystemMessage:b,rebuildSystemMessage:x}=Cp(e,n,a,s,y,c,_),S=[`Read(.agents/**)`,`Read(.claude/**)`,`Read(.robota/**)`,`Glob(.agents/**)`,`Glob(.claude/**)`,`Glob(.robota/**)`],C=s?s.commandTools.filter(e=>!e.requiresPermission).map(e=>e.toolName):[],w=(e.allowedTools??[]).map(e=>`${e}(*)`),T=(e.deniedTools??[]).map(e=>`${e}(*)`),E={allow:[...S,...C,...e.config.permissions.allow??[],...w],deny:[...e.config.permissions.deny??[],...T]},D=(0,p.join)(n,`.robota`,`settings.local.json`);function O(e){let t=`${e}(*)`,n=Hp(D),r=Array.isArray(n.permissions)?[]:n.permissions?.allow??[];r.includes(t)||Up(D,{...n,permissions:{...n.permissions??{},allow:[...r,t]}})}let k=new kc({tools:m,provider:t,systemMessage:b,terminal:e.terminal,permissions:E,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,...e.ask?{ask:e.ask}:{},onProjectAllowTool:O,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 wp(k,g,y,v),{session:k,rebuildSystemMessage:x}}function Cm(){return`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}const wm=v.z.lazy(()=>v.z.union([v.z.string(),v.z.number(),v.z.boolean(),v.z.null(),v.z.undefined(),v.z.date(),v.z.array(wm),v.z.record(wm)])),Tm=v.z.object({name:v.z.string().optional(),model:v.z.string().optional(),apiKey:v.z.string().optional(),baseURL:v.z.string().optional(),timeout:v.z.number().optional(),options:v.z.record(wm).optional()}),Em=v.z.object({type:v.z.string().optional(),model:v.z.string().optional(),apiKey:v.z.string().optional(),baseURL:v.z.string().optional(),timeout:v.z.number().optional(),options:v.z.record(wm).optional()}),Dm=v.z.object({allow:v.z.array(v.z.string()).optional(),deny:v.z.array(v.z.string()).optional()}),Om=v.z.record(v.z.string()).optional(),km=v.z.object({type:v.z.literal(`command`),command:v.z.string(),timeout:v.z.number().optional()}),Am=v.z.object({type:v.z.literal(`http`),url:v.z.string(),headers:v.z.record(v.z.string()).optional(),timeout:v.z.number().optional()}),jm=v.z.object({type:v.z.literal(`prompt`),prompt:v.z.string(),model:v.z.string().optional()}),Mm=v.z.object({type:v.z.literal(`agent`),agent:v.z.string(),maxTurns:v.z.number().optional(),timeout:v.z.number().optional()}),Nm=v.z.discriminatedUnion(`type`,[km,Am,jm,Mm]),q=v.z.object({matcher:v.z.string(),hooks:v.z.array(Nm)}),Pm=v.z.object({PreToolUse:v.z.array(q).optional(),PostToolUse:v.z.array(q).optional(),SessionStart:v.z.array(q).optional(),SessionEnd:v.z.array(q).optional(),Stop:v.z.array(q).optional(),StopFailure:v.z.array(q).optional(),PreCompact:v.z.array(q).optional(),PostCompact:v.z.array(q).optional(),UserPromptSubmit:v.z.array(q).optional(),SubagentStart:v.z.array(q).optional(),SubagentStop:v.z.array(q).optional(),WorktreeCreate:v.z.array(q).optional(),WorktreeRemove:v.z.array(q).optional()}).optional(),Fm=v.z.record(v.z.boolean()).optional(),Im=v.z.object({source:v.z.object({type:v.z.enum([`github`,`git`,`local`,`url`]),repo:v.z.string().optional(),url:v.z.string().optional(),path:v.z.string().optional(),ref:v.z.string().optional()})}),Lm=v.z.record(Im).optional().catch(void 0),Rm=v.z.union([v.z.number().gt(0).lte(1),v.z.literal(!1)]).optional(),zm=v.z.object({enabled:v.z.boolean().optional(),options:v.z.record(wm).optional()}),Bm=v.z.object({defaultTrustLevel:v.z.enum([`safe`,`moderate`,`full`]).optional(),language:v.z.string().optional(),preset:v.z.string().optional(),currentProvider:v.z.string().optional(),providers:v.z.record(Em).optional(),provider:Tm.optional(),permissions:Dm.optional(),env:Om,hooks:Pm,enabledPlugins:Fm,extraKnownMarketplaces:Lm,autoCompactThreshold:Rm,transports:v.z.record(zm).optional()});function Vm(){return process.env.HOME??process.env.USERPROFILE??`/`}const Hm={defaultTrustLevel:`moderate`,provider:{name:`anthropic`,model:`claude-opus-4-5`,apiKey:void 0},permissions:{allow:[],deny:[]},env:{}};function Um(e){if(!(0,x.existsSync)(e))return;let t=(0,x.readFileSync)(e,`utf-8`).trim();if(t.length!==0)try{return JSON.parse(t)}catch{return}}function Wm(e){if(e.startsWith(`$ENV:`)){let t=e.slice(5);return process.env[t]??e}return e}function Gm(e){let t=e.provider?.apiKey===void 0?e.provider:Km(e.provider);if(e.providers!==void 0){let n=Object.fromEntries(Object.entries(e.providers).map(([e,t])=>[e,Km(t)]));return{...e,provider:t,providers:n}}return{...e,provider:t}}function Km(e){return{...e,...e.apiKey!==void 0&&{apiKey:Wm(e.apiKey)}}}function qm(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?Jm(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 Jm(e,t){let n={...e??{}};for(let[e,r]of Object.entries(t??{}))n[e]={...n[e],...r};return n}function Ym(e){if(e.currentProvider!==void 0)return Xm(e);if(e.provider!==void 0)throw Error(`Legacy flat "provider" settings are not supported. Migrate to "currentProvider" + "providers" format.`);return{...Hm.provider}}function Xm(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??Hm.provider.model,apiKey:n.apiKey??Hm.provider.apiKey,...n.baseURL!==void 0&&{baseURL:n.baseURL},...n.timeout!==void 0&&{timeout:n.timeout},...n.options!==void 0&&{options:n.options}}}function Zm(e){return{defaultTrustLevel:e.defaultTrustLevel??Hm.defaultTrustLevel,language:e.language,currentProvider:e.currentProvider,provider:Ym(e),permissions:{allow:e.permissions?.allow??Hm.permissions.allow,deny:e.permissions?.deny??Hm.permissions.deny},env:e.env??Hm.env,hooks:e.hooks??void 0,enabledPlugins:e.enabledPlugins??void 0,extraKnownMarketplaces:e.extraKnownMarketplaces??void 0,autoCompactThreshold:e.autoCompactThreshold}}function Qm(e){let t=Vm();return[(0,S.join)(t,`.robota`,`settings.json`),(0,S.join)(t,`.claude`,`settings.json`),(0,S.join)(e,`.robota`,`settings.json`),(0,S.join)(e,`.robota`,`settings.local.json`),(0,S.join)(e,`.claude`,`settings.json`),(0,S.join)(e,`.claude`,`settings.local.json`)]}async function $m(e){let t=Qm(e),n=[];for(let e of t){let t=Um(e);t!==void 0&&n.push({raw:t,path:e})}return Zm(qm(n.map(({raw:e,path:t})=>{let n=Bm.safeParse(e);if(!n.success)throw Error(`Invalid settings in ${t}: ${n.error.message}`);return Gm(n.data)})))}const eh=(0,p.join)(`.agents`,`tasks`),th={"in-progress":1,todo:2,blocked:3,unknown:4,completed:5};function nh(e){let t=e?.trim().toLowerCase();return t===`todo`||t===`in-progress`||t===`blocked`||t===`completed`?t:`unknown`}function rh(e,t){return e.split(/\r?\n/).find(e=>/^#\s+/.test(e))?.replace(/^#\s+/,``).trim()||(0,p.basename)(t,`.md`)}function ih(e,t){return RegExp(`^- \\*\\*${t}\\*\\*:\\s*(.+)$`,`im`).exec(e)?.[1]?.trim()}function ah(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(`
|
|
135
|
+
`).trim();return o.length>0?o:void 0}function oh(e){return e.split(/\r?\n/).map(e=>/^- \[ \]\s+(.+)$/.exec(e)?.[1]?.trim()).filter(e=>e!==void 0&&e.length>0)}function sh(e,t){return t&&e.branch===t?0:th[e.status]}function ch(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(`
|
|
136
|
+
`)}function lh(e,t){let n=(0,p.resolve)(e),r=!1;for(;!r;){let e=(0,p.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,p.isAbsolute)(r)?r:(0,p.resolve)(n,r)}let i=(0,p.dirname)(n);r=i===n,n=i}}function uh(e,t=new G){let n=lh(e,t);if(!n)return;let r=(0,p.join)(n,`HEAD`);if(t.existsSync(r))return(t.readFileSync(r,`utf8`).trim().match(/^ref:\s+refs\/heads\/(.+)$/)?.[1])?.trim()}function dh(e,t=new G){let n=(0,p.join)(e,eh);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,p.join)(n,e)):[]}function fh(e,t,n=new G){let r=n.readFileSync(e,`utf8`);return{path:e,relativePath:(0,p.relative)(t,e),title:rh(r,e),status:nh(ih(r,`Status`)),branch:ih(r,`Branch`),scope:ih(r,`Scope`),objective:ah(r,`Objective`),openItems:oh(r)}}function ph(e,t={}){let n=t.maxTasks??3;return[...e].filter(e=>e.status!==`completed`).sort((e,n)=>sh(e,t.currentBranch)-sh(n,t.currentBranch)||e.relativePath.localeCompare(n.relativePath)).slice(0,n)}function mh(e){return e.map(ch).join(`
|
|
137
|
+
|
|
138
|
+
`)}function hh(e,t={},n=new G){let r=t.currentBranch??uh(e,n);return mh(ph(dh(e,n).map(t=>fh(t,e,n)),{...t,currentBranch:r}))}const gh=25600,_h=[`user`,`feedback`,`project`,`reference`];function vh(e){return _h.includes(e)}function yh(e){return(0,S.join)(e,`.robota`,`memory`)}function bh(e,t){let n=Buffer.from(e,`utf8`);return n.byteLength<=t?e:n.subarray(0,t).toString(`utf8`)}function xh(e,t){let n=e.split(/\r?\n/);return{content:n.slice(0,t).join(`
|
|
139
|
+
`).trimEnd(),truncated:n.length>t}}function Sh(e){return e.trim().toLowerCase().replace(/[^a-z0-9가-힣_-]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,80)||`general`}function Ch(e,t,n){let r=e.toISOString().slice(0,10),i=t.text.trim().replace(/\s+/g,` `);return`[${r}] (${t.type}/${n}) ${i}`}function wh(e){return e.trim().replace(/\s+/g,` `)}var Th=class{cwd;now;constructor(e,t=()=>new Date){this.cwd=e,this.now=t}getIndexPath(){return(0,S.join)(yh(this.cwd),`MEMORY.md`)}getTopicsPath(){return(0,S.join)(yh(this.cwd),`topics`)}loadStartupMemory(){let e=this.getIndexPath();if(!(0,x.existsSync)(e))return{content:``,path:e,lineCount:0,truncated:!1};let t=(0,x.readFileSync)(e,`utf8`),n=bh(t,gh),r=Buffer.byteLength(t,`utf8`)>gh,i=xh(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,x.existsSync)(e)?(0,x.readdirSync)(e,{withFileTypes:!0}).filter(e=>e.isFile()&&e.name.endsWith(`.md`)).map(t=>({name:(0,S.basename)(t.name,`.md`),path:(0,S.join)(e,t.name)})).sort((e,t)=>e.name.localeCompare(t.name)):[];return{indexPath:this.getIndexPath(),topicsPath:e,topics:t}}readTopic(e){let t=Sh(e),n=(0,S.join)(this.getTopicsPath(),`${t}.md`);return(0,x.existsSync)(n)?(0,x.readFileSync)(n,`utf8`).trimEnd():``}append(e){let t=Sh(e.topic),n=yh(this.cwd),r=this.getTopicsPath();(0,x.mkdirSync)(r,{recursive:!0});let i=this.getIndexPath(),a=(0,S.join)(r,`${t}.md`),o=Ch(this.now(),e,t),s=(0,x.existsSync)(a)?``:`# ${t}\n\n`,c=wh(e.text);return(0,x.existsSync)(a)&&(0,x.readFileSync)(a,`utf8`).includes(`) ${c}`)?{indexPath:i,topicPath:a,topic:t,deduplicated:!0}:((0,x.existsSync)(i)||((0,x.mkdirSync)(n,{recursive:!0}),(0,x.writeFileSync)(i,`# Project Memory
|
|
140
|
+
|
|
141
|
+
`,`utf8`)),(0,x.appendFileSync)(i,`- ${o}\n`,`utf8`),(0,x.appendFileSync)(a,`${s}- ${o}\n`,`utf8`),{indexPath:i,topicPath:a,topic:t,deduplicated:!1})}};function Eh(e,t){let n=[],r=(0,S.resolve)(e),i=!1;for(;!i;){let e=(0,S.join)(r,t);(0,x.existsSync)(e)&&n.push(e);let a=(0,S.dirname)(r);i=a===r,i||(r=a)}return n.reverse()}function Dh(e){let t=e.split(`
|
|
142
|
+
`),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(`
|
|
143
|
+
`).trim()||void 0}async function Oh(e){let t=Eh(e,`AGENTS.md`),n=Eh(e,`CLAUDE.md`),r=t.map(e=>Ld(e)),i=n.map(e=>Ld(e)),a=r.map(e=>e.content).join(`
|
|
144
|
+
|
|
145
|
+
`),o=i.map(e=>e.content).join(`
|
|
146
|
+
|
|
147
|
+
`),s=Dh(o),c=new Th(e).loadStartupMemory().content||void 0,l=hh(e);return{agentsMd:a,claudeMd:o,memoryMd:c,taskContext:l.trim().length>0?l:void 0,compactInstructions:s,agentsFileEntries:r,claudeFileEntries:i}}function kh(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(`
|
|
148
|
+
`)){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 Ah(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 jh(e,t=new G){if(!t.existsSync(e))return[];try{return t.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name).sort()}catch{return[]}}var Mh=class{pluginsDir;enabledPlugins;fs;constructor(e,t,n=new G){this.pluginsDir=e,this.enabledPlugins=t??{},this.fs=n}loadPluginsSync(){return this.discoverAndLoad()}async loadAll(){return this.discoverAndLoad()}discoverAndLoad(){let e=(0,p.join)(this.pluginsDir,`cache`);if(!this.fs.existsSync(e))return[];let t=[],n=jh(e,this.fs);for(let r of n){let n=(0,p.join)(e,r),i=jh(n,this.fs);for(let e of i){let i=(0,p.join)(n,e),a=jh(i,this.fs);if(a.length===0)continue;let o=a[a.length-1],s=(0,p.join)(i,o),c=(0,p.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 Ah(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,p.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,p.join)(n,e.name,`SKILL.md`);if(!this.fs.existsSync(t))continue;let{metadata:r,content:a}=kh(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,p.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}=kh(this.fs.readFileSync((0,p.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,p.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,p.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,p.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$/,``)):[]}};function Nh(e){let t=(0,p.join)((0,p.dirname)((0,p.dirname)(e.pluginDir)),`data`,e.manifest.name);return{CLAUDE_PLUGIN_ROOT:e.pluginDir,CLAUDE_PLUGIN_PATH:e.pluginDir,CLAUDE_PLUGIN_DATA:t}}function Ph(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 Fh(e){let t={};for(let n of e){let e=n.hooks;if(!e)continue;let r=Nh(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=Ph(e,n.pluginDir);return t.env=r,t});t[e].push(...i)}}return t}function Ih(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 Lh(e){let t=e.cwd,[n,r,i]=await Promise.all([e.config?Promise.resolve(e.config):$m(t),e.bare?Promise.resolve({agentsMd:``,claudeMd:``,agentsFileEntries:[],claudeFileEntries:[]}):Oh(t),e.bare?Promise.resolve({type:`unknown`,language:`unknown`}):jf(t)]),a=e.language?{...n,language:e.language}:n,o=new Mh((0,p.join)((0,m.homedir)(),`.robota`,`plugins`));if(!e.bare)try{let e=o.loadPluginsSync();if(e.length>0){let t=Fh(e);a={...a,hooks:Ih(a.hooks,t)}}}catch{}let s=sf(t);await zh(e)||await Rh(e,t);let c=e.resumeSessionId&&!e.forkSession?e.resumeSessionId:void 0,{session:l,rebuildSystemMessage:u}=Sm({config:a,cwd:t,context:r,projectInfo:i,permissionMode:e.permissionMode,maxTurns:e.maxTurns,terminal:Zl,sessionLogger:new jc(s.logs),permissionHandler:e.permissionHandler,...e.askHandler?{ask:e.askHandler}:{},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}:{},includeGoalTool:!0,...e.responseFormat?{responseFormat:e.responseFormat}:{}});return{session:l,agentsFileEntries:r.agentsFileEntries??[],claudeFileEntries:r.claudeFileEntries??[],rebuildSystemMessage:u}}async function Rh(e,t){if(e.workspaceManifest){if(!e.sandboxClient)throw Error(`workspaceManifest requires sandboxClient.`);await Ao(e.sandboxClient,e.workspaceManifest,{hostRoot:t,...e.sandboxWorkspaceRoot?{targetRoot:e.sandboxWorkspaceRoot}:{}})}}async function zh(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 Bh(e,t){let n=e.config??await $m(e.cwd),r=n.autoCompactThreshold===void 0?`default`:`settings`,i=new hf({cwd:e.cwd});t.setEditCheckpointStore(i);let a=await Lh({cwd:e.cwd,provider:e.provider,config:n,permissionMode:e.permissionMode,maxTurns:e.maxTurns,permissionHandler:e.permissionHandler,...e.askHandler?{askHandler:e.askHandler}:{},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)Mf(a.session,e);a.session.syncContextFromHistory()}return{session:a.session,agentsFileEntries:a.agentsFileEntries,claudeFileEntries:a.claudeFileEntries,rebuildSystemMessage:a.rebuildSystemMessage,autoCompactThresholdSource:r}}function Vh(e,t,n,r,i,a,o,s,c,l,u){try{let d=t.getSessionId(),f=e.load(d),p=l?.snapshotId??f?.sandboxSnapshotId;e.save(Hh({session:t,sessionId:d,sessionName:n??f?.name,cwd:r,history:i,createdAt:f?.createdAt,backgroundState:a,memoryState:o,skillActivationState:s,contextReferenceState:c,...p===void 0?{}:{sandboxSnapshotId:p},...u===void 0?{}:{goalState:u}}))}catch{}}function Hh(e){return{id:e.sessionId,...e.goalState===void 0?{}:{goal:e.goalState},...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},...Uh(e.backgroundState),...Wh(e.memoryState),...Gh(e.skillActivationState),...Kh(e.contextReferenceState)}}function Uh(e){return e?{backgroundTasks:[...e.tasks],backgroundTaskEvents:[...e.events],backgroundJobGroups:[...e.groups??[]],backgroundJobGroupEvents:[...e.groupEvents??[]]}:{}}function Wh(e){return e?{memoryEvents:[...e.events],usedMemoryReferences:[...e.usedReferences]}:{}}function Gh(e){return e?{skillActivationEvents:[...e.events]}:{}}function Kh(e){return e?{contextReferences:[...e.references]}:{}}function qh(e){return e.source===`skill`||e.source===`plugin`&&e.skillContent?`skill`:`builtin-command`}function Jh(e){let t=e.source===`skill`||e.source===`plugin`&&!!e.skillContent;return{name:e.name,kind:qh(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 Yh=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=>Jh(e))}},Xh=class{commands;constructor(e){this.commands=new Map;for(let t of e??Zh())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 Zh(){return[]}function Qh(e,t,n){return{...e,providers:{...e.providers??{},[t]:n}}}function $h(e,t){if(!e.providers?.[t])throw Error(`Provider profile "${t}" was not found`);return{...e,currentProvider:t}}function eg(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 tg(e,t,n={}){if(!t.type)throw Error(`Provider profile "${e}" is missing type`);let r=n.providerDefinitions??[],i=M(r,t.type);if(i===void 0&&r.length>0)throw Error(`Unknown provider "${t.type}". Supported providers: ${pe(r)}`);if(!t.model)throw Error(`Provider profile "${e}" is missing model`);let a=me(i);if(a!==void 0&&!og(t,i?.defaults,a))throw Error(`Provider profile "${e}" is missing ${cg(a)}`)}function ng(e,t={}){let n=rg(e,t);return tg(e.profile,n,t),{...e.setCurrent&&{currentProvider:e.profile},providers:{[e.profile]:n}}}function rg(e,t={}){let n=ag(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:dr(e.apiKeyEnv),i=e.baseURL??n.baseURL;return{type:e.type,model:e.model??n.model,...lg(r)&&{apiKey:r},...i!==void 0&&{baseURL:i},...e.timeout!==void 0&&{timeout:e.timeout}}}function ig(e,t){let[n,r]=Object.entries(t.providers)[0]??[];if(!n||!r)return e;let i=Qh(e,n,r);return t.currentProvider?$h(i,t.currentProvider):i}function ag(e,t){return M(t,e)?.defaults??{}}function og(e,t,n){return n.anyOf.some(n=>pr(sg(n,e,t)))}function sg(e,t,n){return t[e]??n?.[e]}function cg(e){return e.anyOf.join(` or `)}function lg(e){return e!==void 0&&e.length>0}async function ug(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{tg(i,a,{providerDefinitions:r.providerDefinitions})}catch(e){return{message:e instanceof Error?e.message:String(e),success:!1}}let o=await((a.type?M(r.providerDefinitions,a.type):void 0)?.probeProfile??dg)(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 dg(e){return{ok:!0,message:`Profile fields are valid; no endpoint probe configured.`}}function fg(e,t=[]){return pg(e,t)?`valid`:`incomplete`}function pg(e,t){if(typeof e.currentProvider==`string`){let n=e.providers?.[e.currentProvider];return mg(n?.type,n,t)}return!!(e.provider&&mg(e.provider.name,e.provider,t))}function mg(e,t,n){if(!t)return!1;if(!e)return pr(t.apiKey);let r=M(n,e);if(r===void 0)return!1;let i=me(r);return i===void 0?!0:hg(t,r,i)}function hg(e,t,n){return n.anyOf.some(n=>pr(gg(n,e,t)))}function gg(e,t,n){return t[e]??n.defaults?.[e]}function _g(e,t=new G){return e.reduce((e,n)=>{let r=vg(n,t);return r===void 0?e:yg(e,r)},{})}function vg(e,t){if(!t.existsSync(e))return;let n=t.readFileSync(e,`utf8`);try{return JSON.parse(n)}catch(t){throw new zp(e,t instanceof Error?t.message:String(t))}}function yg(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?bg(e.providers,t.providers):void 0}}function bg(e,t){let n={...e??{}};for(let[e,r]of Object.entries(t??{}))n[e]={...n[e],...r};return n}function xg(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 Za({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 Za({name:i.name,model:i.model,apiKey:i.apiKey,baseURL:i.baseURL,timeout:i.timeout,options:i.options},n)}function Sg(){return process.env.HOME??process.env.USERPROFILE??`/`}function Cg(e){let t=Sg();return[(0,p.join)(t,`.robota`,`settings.json`),(0,p.join)(t,`.claude`,`settings.json`),(0,p.join)(e,`.robota`,`settings.json`),(0,p.join)(e,`.robota`,`settings.local.json`),(0,p.join)(e,`.claude`,`settings.json`),(0,p.join)(e,`.claude`,`settings.local.json`)]}function wg(e,t={}){let n=t.settingsPaths??Cg(e),r=jg(n)??n[0];if(r===void 0)throw Error(`No settings path available for provider update`);return r}function Tg(e){return Hp(e)}function Eg(e,t,n={}){let r=ig(Tg(e),ng(t,n));return Up(e,r),r}function Dg(e,t,n={}){let r=Tg(e),i=r.providers?.[t]!==void 0,a=n.knownProviders?.[t]!==void 0,o=i||a?{...r,currentProvider:t}:$h(r,t);return Up(e,o),o}function Og(e,t,n={}){let r=n.settingsPaths??Cg(e),i=_g(r),a=n.providerOverride??i.currentProvider;if(typeof a!=`string`)throw Error(`Cannot update model: no active provider profile. Set "currentProvider" in settings.`);return kg(r,a,t)}function kg(e,t,n){let r=Ag(e,t)??e[0];if(r===void 0)throw Error(`No settings path available for model update`);let i=Tg(r),a=i.providers??{},o=a[t]??{},s={...i,providers:{...a,[t]:{...o,model:n}}};return Up(r,s),{settingsPath:r,settings:s,profileName:t}}function Ag(e,t){for(let n=e.length-1;n>=0;--n){let r=e[n];if(r!==void 0&&Tg(r).providers?.[t]!==void 0)return r}}function jg(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n!==void 0&&Tg(n).currentProvider!==void 0)return n}}var Mg=class extends Error{constructor(e){super(e),this.name=`ProviderConfigError`}};function Ng(e){return _g(Cg(e))}function Pg(e,t=process.env){for(let n of e){let e=n.defaults;if(e?.apiKey===void 0||e.model===void 0||!ur(e.apiKey))continue;let r=e.apiKey.slice(5).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 Fg(e,t={}){let n=xg(Ng(e),t.providerOverride,t.providerDefinitions??[]);if(n!==void 0)return n;let r=Pg(t.providerDefinitions??[],t.env);if(r!==void 0)return r;throw new Mg("No provider configuration found. Run `robota` to set up.")}function Ig(e,t,n={}){let r=n.providerDefinitions??[],i=Fg(e,{...n,providerDefinitions:r}),a=t??i.model;return Qa({...i,model:a},r)}var Lg=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 Rg(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 zg=Qs,Bg=`autoCompactThreshold`;function Vg(e){return e.getContextState()}function Hg(e){return e.getAutoCompactThreshold()}function Ug(e){return e.getAutoCompactThresholdSource?.()??`session`}function Wg(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 Gg(e,t){let n=Qg(e);return n?(n.write({...n.read(),[Bg]:t}),!0):!1}function Kg(e){let t=Qg(e);if(!t)return!1;let n={...t.read()};return delete n[Bg],t.write(n),!0}async function qg(e,t){let n=Vg(e),r=e.getSession().getMessageCount();return await e.compactContext(t),{before:n,after:Vg(e),beforeMessageCount:r,afterMessageCount:e.getSession().getMessageCount()}}function Jg(e){return e.listContextReferences?.()??[]}async function Yg(e,t){return e.addContextReference?e.addContextReference(t):{evicted:[],diagnostics:[`Command host does not support context reference additions.`]}}function Xg(e,t){return e.removeContextReference?.(t)??{}}function Zg(e){return e.clearContextReferences?.()??{removed:[]}}function Qg(e){return e.getCommandHostAdapters?.().settings}function $g(e,t={}){let n=e_(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 e_(e){let t=e?.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``);return t!==void 0&&t.length>0?t:void 0}function t_(e){return e.listCommands?.()??[]}function n_(e){return[`Available commands:`,...t_(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(`
|
|
149
|
+
`)}function r_(){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 i_(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=s_(e),s=t?` — ${t}`:``;return`${e.id} [${e.status}${n}${i}${a}${o}] ${e.kind}:${e.label}${r}${s}`}function a_(e){return e.length===0?`No background tasks.`:[`Background tasks:`,...e.map(e=>` ${i_(e)}`)].join(`
|
|
150
|
+
`)}function o_(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isNaN(t)?void 0:{offset:t}}function s_(e){let t=[];return e.worktreePath&&t.push(`worktree=${e.worktreePath}`),e.branchName&&t.push(`branch=${e.branchName}`),e.worktreeStatus&&t.push(`worktreeStatus="${c_(e.worktreeStatus)}"`),e.worktreeNextAction&&t.push(`next="${c_(e.worktreeNextAction)}"`),t.length===0?``:` ${t.join(` `)}`}function c_(e){let t=e.trim().replace(/\s+/g,` `);return t.length>160?`${t.slice(0,160)}...`:t}function l_(e,t){return e.listBackgroundTasks(t)}function u_(e,t,n){return e.readBackgroundTaskLog(t,n)}function d_(e,t,n){return e.cancelBackgroundTask(t,n)}function f_(e,t){return e.closeBackgroundTask(t)}const p_=[{code:`ko`,description:`Korean`},{code:`en`,description:`English`},{code:`ja`,description:`Japanese`},{code:`zh`,description:`Chinese`}];function m_(e=`language`){return p_.map(t=>({name:t.code,description:t.description,source:e}))}function h_(e){let t=e.trim().split(/\s+/)[0];return t!==void 0&&t.length>0?t:void 0}function g_(e=`language`){return`Usage: ${e} <code> (e.g., ko, en, ja, zh)`}const __=`plan | default | acceptEdits | bypassPermissions`,v_=[`plan`,`default`,`acceptEdits`,`bypassPermissions`];function y_(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 b_(e){let t=e.trim().split(/\s+/)[0];return t!==void 0&&t.length>0?t:void 0}function x_(e){return v_.includes(e)}function S_(){return`Invalid mode. Valid: ${v_.join(` | `)}`}function C_(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 w_(e){return C_(e).getPermissionMode()}function T_(e,t){C_(e).setPermissionMode(t)}function E_(e){return C_(e).listSessionAllowedTools()}function D_(e){return{mode:w_(e),sessionAllowed:E_(e)}}function O_(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(`
|
|
151
|
+
`)}async function k_(e,t,n){let r=[],i=[];e.getSession().setActivePresetId?.(t),n.permissionMode===void 0?i.push(`permissionMode`):(T_(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 A_={enabled:!0,gitBranch:!0};function j_(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 M_(e){return(e.enabled===void 0||typeof e.enabled==`boolean`)&&(e.gitBranch===void 0||typeof e.gitBranch==`boolean`)}function N_(e){let t=e.statusline;return F_(t)?{enabled:typeof t.enabled==`boolean`?t.enabled:A_.enabled,gitBranch:typeof t.gitBranch==`boolean`?t.gitBranch:A_.gitBranch}:{...A_}}function P_(e,t){let n=Hp(e),r={...N_(n),...t};return n.statusline=r,Up(e,n),r}function F_(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function I_(){return{type:`plugin-tui-requested`}}function L_(){return{type:`plugin-registry-reload-requested`}}function R_(e){return e.getCommandHostAdapters?.().plugin}function z_(){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 B_(e){if(e.clearConversationHistory!==void 0){e.clearConversationHistory();return}e.getSession().clearHistory()}function V_(e){let t=e.trim();return t.length>0?t:void 0}function H_(e){return{type:`session-renamed`,name:e}}function U_(){return{type:`session-picker-requested`}}function W_(){return{type:`session-exit-requested`}}function G_(e){let t=e.getSession();return{sessionId:t.getSessionId(),messageCount:t.getMessageCount()}}function K_(e){let t=e.validateCurrentSessionReplayLog?.();if(t!==void 0)return t;let n=e.getSession().getSessionId(),r=(0,p.join)(sf(e.getCwd()).logs,`${n}.jsonl`),i=Kc(r);return{logFile:r,entryCount:i.length,validation:Fc(i)}}function q_(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(`
|
|
152
|
+
`);let r=e.validation.issues.map((e,t)=>{let n=J_(e);return`${t+1}. ${e.code}${n}: ${e.message}`});return[t,...n,``,...r].join(`
|
|
153
|
+
`)}function J_(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 Y_(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 X_(e){return e.listEditCheckpoints()}function Z_(e,t){if(!e.inspectEditCheckpoint)throw Error(`Checkpoint inspection is not available in this command host.`);return e.inspectEditCheckpoint(t)}function Q_(e,t){return e.restoreEditCheckpoint(t)}function $_(e,t){return e.rollbackEditCheckpoint(t)}const ev=[/\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 tv(e){return ev.some(t=>t.test(e))}function nv(e){return(0,p.join)(e,`.robota`,`memory`)}function rv(){return{version:1,records:[]}}var iv=class{fs;path;now;constructor(e,t=()=>new Date,n=new G){this.fs=n,this.path=(0,p.join)(nv(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 rv();try{return{version:1,records:JSON.parse(this.fs.readFileSync(this.path,`utf8`)).records??[]}}catch{return rv()}}write(e){this.fs.mkdirSync((0,p.dirname)(this.path),{recursive:!0}),this.fs.writeFileSync(this.path,JSON.stringify(e,null,2),`utf8`)}};function av(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 ov(e,t){return new Th(e,t)}function sv(e,t){return new iv(e,t)}function cv(e,t){let n=e.getCwd();return{project:ov(n,t),pending:sv(n,t)}}function lv(e){return vh(e)}function uv(e){return tv(e)}function dv(e){return e.getUsedMemoryReferences()}function fv(e,t,n=()=>new Date){e.recordMemoryEvent({...t,at:n().toISOString()})}function pv(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 mv(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 hv(e,t,n,r){return e.skillContent?pv(await mv(e.skillContent,n.shellExec),t,r):null}async function gv(e,t,n,r){let i=await hv(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 _v(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 hv(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 gv(e,t,n,r)}}function vv(e){return e.trim().replace(/^\/+/,``).split(/\s+/)[0]??``}function yv(e){return e.trim().replace(/^\/+/,``).split(/\s+/)[0]??``}function bv(e,t){let n=t.trim();return n.length>0?`${e} ${n}`:e}function xv(e){if(!e?.startsWith(`/`))return;let t=e.slice(1).trim().split(/\s+/)[0];return t&&t.length>0?t:void 0}var Sv=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 Xh(e.flatMap(e=>e.systemCommands??[])),this.skillCommandSource=new Rp(t),this.commandHostAdapters=n}reapplyCommandModuleSelection(e,t){let n=Rg(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=vv(e);return this.skillCommandSource.getCommands().find(e=>e.name.toLowerCase()===t.toLowerCase())}async executeCommand(e,t){let n=yv(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,bv(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=xv(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 _v(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=wf({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 Cv(e,t){return`${e}${t?`\nContact your administrator: ${t}`:``}`}function wv(e){return e?!e.startsWith(`$ENV:`):!1}function Tv(e,t){if(!e)return;let n={type:`cancelled`};return{ask:r=>t()===`model`?Promise.resolve(n):e(r)}}var Ev=class extends Fd{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;goalController=new tm;currentTurnSource=`user`;terminalHandoff;askHandler;terminalHandoffActive=!1;constructor(e){super(),this.sessionStore=e.sessionStore,this.sessionName=e.sessionName,this.terminalHandoff=e.terminalHandoff,this.askHandler=e.askHandler,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 hf({cwd:t})),this.bgTracker=new bd(()=>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(P(H(e))),e=>this.histTracker.append(e)),this.histTracker=new Of(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 Sv(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)=>nf(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 ef(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),this.on(`turn_source`,e=>{this.currentTurnSource=e}),this.on(`complete`,e=>this.handleGoalTurnComplete(e));let o=this.configureInjectedSession(e);this.restoreSessionRecordIfNeeded(e),this.startAsyncInitializationIfNeeded(e,o),this.initialized&&this.bgTracker.subscribe(this.session),this.initialized&&this.persistCurrentSession(),this.resumeGoalIfActive()}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=Nf(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.forkSession&&t.goal&&this.goalController.restore(t.goal),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 Bh(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){return this.execCtrl.shuttingDown||this.execCtrl.wakeTaskIds.has(t)?!1:(this.execCtrl.wakeTaskIds.add(t),this.submit(e,void 0,void 0,{turnSource:`agent-wakeup`,wakeTaskId:t}),!0)}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(`
|
|
154
|
+
|
|
155
|
+
`),n=this.claudeFileEntries.map(e=>e.content).join(`
|
|
156
|
+
|
|
157
|
+
`),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(`
|
|
158
|
+
|
|
159
|
+
`),n=this.claudeFileEntries.map(e=>e.content).join(`
|
|
160
|
+
|
|
161
|
+
`),r=this.rebuildSystemMessage(t,n,{selfVerification:e});this.getSessionOrThrow().updateSystemMessage(r)}applyCommandModuleSelection(e,t){this.skillRouter.reapplyCommandModuleSelection(e,t)}getAgentJobCapability(){return this}getUserInteraction(){return Tv(this.askHandler,()=>this.getCommandInvocationSource())}canHandoffTerminal(){return this.terminalHandoff?.canHandoffTerminal===!0}async runWithTerminal(e){if(!this.canHandoffTerminal()||this.terminalHandoff===void 0)throw Error(`Terminal handoff is unavailable: no interactive terminal (headless or non-TTY output).`);if(this.terminalHandoffActive)throw Error(`A terminal handoff is already in progress.`);this.terminalHandoffActive=!0;try{return await this.terminalHandoff.runWithTerminal(e)}finally{this.terminalHandoffActive=!1}}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 Uu(this.session)??yd(this.session)?.backgroundTaskManager}reportBackgroundError(e,t=`background`){let n=Qd(e);this.histTracker.append(P(H(`Error: ${n}`,{metadata:{kind:`error`,source:t}}))),this.emit(`error`,e)}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(P(H(`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();Vh(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},this.goalController.getState()??void 0)}async setGoal(e,t={}){await this.ensureInitialized();let{goal:n,prompt:r}=this.goalController.start(e,t);return this.emit(`goal_event`,{type:`goal_started`,goal:n}),this.persistCurrentSession(),this.scheduleGoalTurn(r,n),n}getGoalState(){return this.goalController.getState()}cancelGoal(){let e=this.goalController.cancel();return e&&(this.emit(`goal_event`,{type:`goal_stopped`,goal:e}),this.persistCurrentSession()),e}scheduleGoalTurn(e,t){if(this.execCtrl.shuttingDown)return;let n=`goal:${t.id}:${t.iterations}`;setTimeout(()=>this.requestWakeup(e,n),0)}handleGoalTurnComplete(e){if(!this.goalController.isActive()||this.currentTurnSource!==`agent-wakeup`)return;let t=this.goalController.onTurnComplete(e);t&&(this.persistCurrentSession(),t.action===`continue`?(this.emit(`goal_event`,{type:`goal_progress`,goal:t.goal}),this.scheduleGoalTurn(t.prompt,t.goal)):this.emit(`goal_event`,{type:`goal_stopped`,goal:t.goal}))}resumeGoalIfActive(){let e=this.goalController.getState();!e||e.status!==`active`||this.ensureInitialized().then(()=>{!this.goalController.isActive()||this.execCtrl.shuttingDown||this.scheduleGoalTurn(Xp(e),e)})}async switchProvider(e){let t=this.getSessionOrThrow(),n=this.getCwd(),r=Fg(n,{providerOverride:e,providerDefinitions:this.providerDefinitions}),i=Ig(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:Cv(`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:Cv(`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 Dv(e,t=new G){let n=sf(e);return new Mv(n.sessions,n.logs,t)}function Ov(e=new G){return new Mv(cf().sessions,void 0,e)}function kv(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:Nv(e.messages)}))}function Av(e,t){return kv(e,t)[0]?.id}function jv(e,t){return(e?.list()??[]).find(e=>e.id===t||e.name===t)?.id}var Mv=class{store;logsDir;fs;constructor(e,t,n=new G){this.store=new el(e),this.logsDir=t,this.fs=n}save(e){this.store.save(Pv(e))}load(e){let t=this.store.load(e);return t===void 0?this.loadFromReplayLog(e):Fv(t)}list(){let e=this.store.list().map(Fv),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=qc(Kc((0,p.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:Iv(n),backgroundTaskEvents:n,backgroundJobGroups:Rv(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 Nv(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 Pv(e){return{...e}}function Fv(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 Iv(e){let t=new Map;for(let n of e){let e=Lv(n);e&&t.set(e.id,e)}return[...t.values()]}function Lv(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 Rv(e){let t=new Map;for(let n of e)t.set(n.group.id,n.group);return[...t.values()]}function zv(e){return e.toLowerCase().replace(/[^a-z0-9\s-]/g,``).trim().replace(/\s+/g,`-`).replace(/-+/g,`-`).slice(0,60)}async function Bv(e,t){let n=t.slice(0,200),r=await e.chat([H(`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.`),rr(n)],{maxTokens:20}),i=zv(typeof r.content==`string`?r.content:``);return!i||i.length<3?zv(t):i}var Vv=class{settingsPath;fs;constructor(e,t=new G){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,p.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:{}}},Hv=class{pluginsDir;cacheDir;registryPath;settingsStore;marketplaceClient;exec;fs;constructor(e){this.pluginsDir=e.pluginsDir,this.cacheDir=(0,p.join)(this.pluginsDir,`cache`),this.registryPath=(0,p.join)(this.pluginsDir,`installed_plugins.json`),this.settingsStore=e.settingsStore,this.marketplaceClient=e.marketplaceClient,this.exec=e.exec,this.fs=e.fs??new G}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,p.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,p.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,p.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 Uv(e,t=new G){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 Wv(e,t,n=new G){let r=(0,p.dirname)(e);n.existsSync(r)||n.mkdirSync(r,{recursive:!0}),n.writeFileSync(e,JSON.stringify(t,null,2),`utf-8`)}function Gv(e,t,n=new G){let r=(0,p.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,p.dirname)(r);n.existsSync(e)||n.mkdirSync(e,{recursive:!0}),n.writeFileSync(r,JSON.stringify(i,null,2),`utf-8`)}}const Kv=6e4;var qv=class{pluginsDir;exec;marketplacesDir;registryPath;fs;constructor(e){this.pluginsDir=e.pluginsDir,this.exec=e.exec,this.marketplacesDir=(0,p.join)(this.pluginsDir,`marketplaces`),this.registryPath=(0,p.join)(this.pluginsDir,`known_marketplaces.json`),this.fs=e.fs??new G}addMarketplace(e){let t=`temp-`+Date.now().toString(36),n=(0,p.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:Kv,stdio:`pipe`})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to clone marketplace: ${t}`)}}let r=(0,p.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=Uv(this.registryPath,this.fs);if(a[i])throw this.fs.rmSync(n,{recursive:!0,force:!0}),Error(`Marketplace "${i}" already exists`);let o=(0,p.join)(this.marketplacesDir,i);return this.fs.renameSync(n,o),a[i]={source:e,installLocation:o,lastUpdated:new Date().toISOString()},Wv(this.registryPath,a,this.fs),i}removeMarketplace(e){let t=Uv(this.registryPath,this.fs),n=t[e];if(!n)throw Error(`Marketplace "${e}" not found`);Gv(this.pluginsDir,e,this.fs),this.fs.existsSync(n.installLocation)&&this.fs.rmSync(n.installLocation,{recursive:!0,force:!0}),delete t[e],Wv(this.registryPath,t,this.fs)}updateMarketplace(e){let t=Uv(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:Kv,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(),Wv(this.registryPath,t,this.fs)}listMarketplaces(){let e=Uv(this.registryPath,this.fs);return Object.entries(e).map(([e,t])=>({name:e,source:t.source,lastUpdated:t.lastUpdated}))}fetchManifest(e){let t=Uv(this.registryPath,this.fs)[e];if(!t)throw Error(`Marketplace "${e}" not found`);let n=(0,p.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=Uv(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:Kv,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}};const Jv=[{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 Yv(e){return e.toISOString()}function Xv(e,t){if(t.trim().length===0)throw Error(`${e} must not be empty.`);if(!p.default.isAbsolute(t))throw Error(`${e} must be an absolute path: ${t}`)}function Zv(){return process.env.HOME??(0,m.homedir)()}function Qv(e,t){let n=p.default.relative(e,t);return n===``||!n.startsWith(`..`)&&!p.default.isAbsolute(n)}async function $v(e,t){let n=e;for(;p.default.dirname(n)!==n;)try{let r=await t.realpath(n),i=p.default.relative(n,e);return p.default.resolve(r,i)}catch{n=p.default.dirname(n)}try{return await t.realpath(n)}catch{return p.default.resolve(e)}}async function ey(e){let t=e.fsAsync??new El,n=p.default.resolve(e.activeRepositoryRoot);Xv(`activeRepositoryRoot`,n);let r=e.storageRoot===void 0?p.default.join(e.homeDir??Zv(),`.robota`):e.storageRoot;Xv(`userLocalStorageRoot`,r);let i=p.default.resolve(r),a=await $v(i,t);if(Qv(await $v(n,t),a))throw Error(`User-local storage root must be outside the active repository: ${i}`);return i}function ty(e,t){return p.default.join(e,t)}async function ny(e,t,n){let r=ty(e,t),i;try{i=await n.readdir(r,{withFileTypes:!0})}catch{return[]}return(await Promise.all(i.map(async i=>{let a=p.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:Yv(new Date(o.birthtimeMs)),lastUsedAt:Yv(new Date(o.mtimeMs)),enabled:!0,deleteAvailable:!0,disableAvailable:!1}}))).sort((e,t)=>e.key.localeCompare(t.key))}async function ry(e){let t=e.fsAsync??new El,n=await ey(e),r=p.default.resolve(e.activeRepositoryRoot),i=e.createDirectories??!0;return i&&await t.mkdir(n,{recursive:!0}),{root:n,activeRepositoryRoot:r,categories:await Promise.all(Jv.map(async e=>{let r=ty(n,e.category);i&&await t.mkdir(r,{recursive:!0});let a=await ny(n,e.category,t);return{category:e.category,purpose:e.purpose,mayExecuteCommands:e.mayExecuteCommands,storageLocation:r,itemCount:a.length,items:a}})),generatedAt:Yv((e.now??(()=>new Date))())}}const iy=[`view-preference`,`last-visible-cwd`,`background-selection`,`task-association`,`display-preference`,`inspection-choice`],ay=`.json`,oy=/^[a-z0-9][a-z0-9._-]*$/u,sy={"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 cy(e){return e.toISOString()}function ly(e){return iy.includes(e)}function uy(e){if(!ly(e))throw Error(`Unsupported user-local memory category: ${e}`);return e}function dy(e,t){let n=t.trim();if(n.length===0)throw Error(`${e} must not be empty.`);if(n.length>80||!oy.test(n))throw Error(`${e} must use lowercase letters, numbers, dots, underscores, or hyphens: ${t}`);return n}function fy(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 py(e){return fy(`value`,e,240)}function my(e,t){return`${e}__${t}${ay}`}async function hy(e){let t=await ey(e);return{root:t,memoryRoot:p.default.join(t,`memory-projections`)}}function gy(e,t){let n=JSON.parse(e),r=_y(n,`category`);if(n.schemaVersion!==1)throw Error(`Unsupported user-local memory schema at ${t}`);return{schemaVersion:1,category:uy(r),key:_y(n,`key`),value:_y(n,`value`),summary:_y(n,`summary`),source:_y(n,`source`),scope:_y(n,`scope`),createdAt:_y(n,`createdAt`),lastUsedAt:_y(n,`lastUsedAt`),enabled:vy(n,`enabled`)}}function _y(e,t){let n=e[t];if(typeof n!=`string`)throw Error(`Invalid user-local memory field: ${t}`);return n}function vy(e,t){let n=e[t];if(typeof n!=`boolean`)throw Error(`Invalid user-local memory field: ${t}`);return n}function yy(e,t,n){return{root:e,category:n.category,key:n.key,summary:n.summary,valueSummary:py(n.value),source:n.source,scope:n.scope,storageLocation:t,createdAt:n.createdAt,lastUsedAt:n.lastUsedAt,enabled:n.enabled,displayNavigationRule:sy[n.category],commandExecutionEffect:`none`,deleteAvailable:!0,disableAvailable:!0}}async function by(e,t,n){return yy(e,t,gy(await n.readFile(t,`utf8`),t))}async function xy(e){let t=uy(e.category),n=dy(`key`,e.key),{root:r,memoryRoot:i}=await hy(e);return{root:r,storageLocation:p.default.join(i,my(t,n))}}async function Sy(e){let t=e.fsAsync??new El,n=uy(e.category),r=dy(`key`,e.key),i=fy(`summary`,e.summary,240),a=fy(`source`,e.source,80),o=fy(`scope`,e.scope??`user`,120),s=py(e.value),c=cy((e.now??(()=>new Date))()),{root:l,memoryRoot:u}=await hy(e),d=p.default.join(u,my(n,r)),f=c;try{f=gy(await t.readFile(d,`utf8`),d).createdAt}catch(e){if(e instanceof Error&&e.message.includes(`ENOENT`))f=c;else throw e}let m={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(m,null,2)}\n`,`utf8`),yy(l,d,m)}async function Cy(e){let t=e.fsAsync??new El,{root:n,memoryRoot:r}=await hy(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(ay)).map(e=>by(n,p.default.join(r,e.name),t)));return{root:n,activeRepositoryRoot:p.default.resolve(e.activeRepositoryRoot),items:a.sort((e,t)=>`${e.category}/${e.key}`.localeCompare(`${t.category}/${t.key}`))}}async function wy(e){let t=e.fsAsync??new El,{root:n,storageLocation:r}=await xy(e);return by(n,r,t)}async function Ty(e){let t=e.fsAsync??new El,{root:n,storageLocation:r}=await xy(e),i={...gy(await t.readFile(r,`utf8`),r),enabled:!1,lastUsedAt:cy((e.now??(()=>new Date))())};return await t.writeFile(r,`${JSON.stringify(i,null,2)}\n`,`utf8`),yy(n,r,i)}async function Ey(e){let t=e.fsAsync??new El,{storageLocation:n}=await xy(e);return await t.rm(n),{category:e.category,key:e.key,deleted:!0}}function Dy(e){return/^\/\S/.test(e)}function Oy(e){let t=e.slice(1).trim().split(/\s+/);return{name:t[0]??``,args:t.slice(1).filter(e=>e.length>0)}}function ky(){let e=Bp();return{deleted:Wp(e),path:e}}function Ay(e){try{let t=jy(e);if(!t)return;let n=(0,h.readFileSync)((0,p.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 jy(e){let t=(0,p.resolve)(e),n=(0,p.dirname)(t);for(;n!==t;){let e=My((0,p.join)(t,`.git`),t);if(e)return e;t=n,n=(0,p.dirname)(t)}return My((0,p.join)(t,`.git`),t)}function My(e,t){if(!(0,h.existsSync)(e))return;let n=(0,h.lstatSync)(e);if(n.isDirectory())return e;if(!n.isFile())return;let r=(0,h.readFileSync)(e,`utf8`).trim();if(!r.startsWith(`gitdir:`))return;let i=r.slice(7).trim();return(0,p.isAbsolute)(i)?i:(0,p.resolve)(t,i)}function Ny(e,t){let n=Fy(e),r=Fy(t);if(n===void 0||r===void 0)return Math.sign(e.localeCompare(t));let i=Ly(n.major,r.major)||Ly(n.minor,r.minor)||Ly(n.patch,r.patch);return i===0?Ry(n.prerelease,r.prerelease):i}function Py(e,t){return Ny(e,t)>0}function Fy(e){let[t,n]=(e.trim().replace(/^v/,``).split(`+`)[0]??``).split(`-`,2),[r,i,a]=t.split(`.`),o=Iy(r),s=Iy(i),c=Iy(a);if(!(o===void 0||s===void 0||c===void 0))return{major:o,minor:s,patch:c,prerelease:n?n.split(`.`):[]}}function Iy(e){if(!(e===void 0||!/^\d+$/.test(e)))return Number(e)}function Ly(e,t){return Math.sign(e-t)}function Ry(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=zy(n,i);if(a!==0)return a}return 0}function zy(e,t){let n=Iy(e),r=Iy(t);return n!==void 0&&r!==void 0?Ly(n,r):n===void 0?r===void 0?Math.sign(e.localeCompare(t)):1:-1}function By(e){let t=(0,p.dirname)((0,C.fileURLToPath)(e)),n=[(0,p.join)(t,`..`,`..`,`package.json`),(0,p.join)(t,`..`,`package.json`)];for(let e of n)try{let t=(0,h.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 Vy(e=process.env.HOME??process.env.USERPROFILE??`/`){return(0,p.join)(e,`.robota`,`update-check.json`)}function Hy(e){if((0,h.existsSync)(e))try{return rb(JSON.parse((0,h.readFileSync)(e,`utf8`)))}catch{return}}function Uy(e,t){(0,h.mkdirSync)((0,p.dirname)(e),{recursive:!0}),(0,h.writeFileSync)(e,JSON.stringify(t,null,2)+`
|
|
162
|
+
`,`utf8`)}async function Wy(e){if(e.disabled===!0)return{status:`skipped`,reason:`disabled`};let t=e.packageName??`@robota-sdk/agent-cli`,n=e.cachePath??Vy(),r=e.now??new Date,i=e.ttlMs??864e5;if(e.force!==!0){let a=Hy(n);if(a!==void 0&&$y(a,r,i,t))return Zy(a,e.currentVersion)}let a=await Gy(e,t,n,r);return typeof a==`string`?Qy(e.currentVersion,a):a}async function Gy(e,t,n,r){let i=await eb({fetchImpl:e.fetchImpl??fetch,packageName:t,registryUrl:e.registryUrl??`https://registry.npmjs.org`,timeoutMs:e.timeoutMs??1500});return i.ok?(Ky(n,{packageName:t,checkedAt:r.toISOString(),currentVersion:e.currentVersion,latestVersion:i.version}),i.version):(Ky(n,{packageName:t,checkedAt:r.toISOString(),currentVersion:e.currentVersion,errorMessage:i.errorMessage}),{status:`error`,errorMessage:i.errorMessage})}function Ky(e,t){try{Uy(e,t)}catch{}}async function qy(e){let t=await Wy(e);return t.status===`update_available`?t.notice:void 0}function Jy(e){return e.printMode===!1&&e.disableUpdateCheck===!1}function Yy(e){return[`Robota update available: ${e.currentVersion} -> ${e.latestVersion}.`,`Run ${e.installCommand}`].join(` `)}function Xy(e){return e.status===`update_available`?Yy(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 Zy(e,t){return e.errorMessage===void 0?e.latestVersion===void 0?{status:`error`,errorMessage:`Cached update check has no latest version`}:Qy(t,e.latestVersion):{status:`error`,errorMessage:e.errorMessage}}function Qy(e,t){return Py(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 $y(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 eb(e){try{return{ok:!0,version:await tb(e)}}catch(e){return{ok:!1,errorMessage:e instanceof Error?e.message:String(e)}}}async function tb(e){let t=new AbortController,n=setTimeout(()=>t.abort(),e.timeoutMs);try{let n=nb(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 nb(e,t){return`${e.replace(/\/+$/,``)}/${encodeURIComponent(t)}`}function rb(e){if(!ib(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 ib(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var ab=class{write(e){process.stdout.write(e)}writeLine(e){process.stdout.write(e+`
|
|
163
|
+
`)}writeMarkdown(e){process.stdout.write(e)}writeError(e){process.stderr.write(e+`
|
|
164
|
+
`)}prompt(e){return new Promise(t=>{let n=u.createInterface({input:process.stdin,output:process.stdout,terminal:!1,historySize:0});n.question(e,e=>{n.close(),t(e)})})}async select(e,t=0){for(let n=0;n<e.length;n++){let r=n===t?`>`:` `;process.stdout.write(` ${r} ${n+1}) ${e[n]}\n`)}let n=(await this.prompt(` Choose [1-${e.length}] (default: ${e[t]}): `)).trim().toLowerCase();if(n===``)return t;let r=parseInt(n,10);return!isNaN(r)&&r>=1&&r<=e.length?r-1:t}spinner(e){return{stop(){},update(){}}}};const ob=(e,t=!1)=>new Promise((n,r)=>{process.stdout.write(e);let i=``,a=process.stdin,o=a.isRaw;if(!a.isTTY){r(Error(`Cannot prompt for input: stdin is not a TTY.
|
|
165
|
+
Set your API key via environment variable instead:
|
|
166
|
+
ANTHROPIC_API_KEY=<key> robota
|
|
167
|
+
OPENAI_API_KEY=<key> robota`));return}a.setRawMode(!0),a.resume(),a.setEncoding(`utf8`);let s=e=>{for(let r of e)if(r===`\r`||r===`
|
|
168
|
+
`){a.removeListener(`data`,s),a.setRawMode(o??!1),a.pause(),process.stdout.write(`
|
|
169
|
+
`),n(i.trim());return}else r===``||r===`\b`?i.length>0&&(i=i.slice(0,-1),process.stdout.write(`\b \b`)):r===``?(a.removeListener(`data`,s),a.setRawMode(o??!1),a.pause(),process.stdout.write(`
|
|
170
|
+
`),process.exit(0)):r.charCodeAt(0)>=32&&(i+=r,process.stdout.write(t?`*`:r))};a.on(`data`,s)});function sb(e){let t=e.trimStart();if(!t.startsWith(`/`))return null;let[n=``,...r]=t.slice(1).split(/\s+/);return n.length===0?null:{name:n,args:r.join(` `)}}async function cb(e,t){let n=sb(t);if(!n)return{kind:`not-slash`};let r=await e.executeCommand(n.name,n.args);return r?r.effects?.some(e=>e.type===`session-execution-started`)?{kind:`session-execution`}:{kind:`command-result`,result:r}:{kind:`command-result`,result:{message:`Unknown command "/${n.name}".`,success:!1}}}function lb(e,t,n){let r=JSON.stringify({type:`stream_event`,event:n,session_id:t(e),uuid:(0,d.randomUUID)()});process.stdout.write(r+`
|
|
171
|
+
`)}function ub(e,t,n,r){let i=n=>lb(e,t,n),a=e=>i({type:`content_block_delta`,delta:{type:`text_delta`,text:e}}),o=e=>i({type:`background_task_event`,background_task_event:e}),s=e=>i({type:`background_job_group_event`,background_job_group_event:e}),c=()=>db(e,{onTextDelta:a,onBackgroundTaskEvent:o,onBackgroundJobGroupEvent:s,onComplete:l,onInterrupted:u,onError:d}),l=i=>{c(),n(t(e),i.response,`success`),r(0)},u=i=>{c(),n(t(e),i.response,`success`),r(0)},d=i=>{c(),n(t(e),``,`error`,i),r(1)};return e.on(`text_delta`,a),e.on(`background_task_event`,o),e.on(`background_job_group_event`,s),e.on(`complete`,l),e.on(`interrupted`,u),e.on(`error`,d),c}function db(e,t){e.off(`text_delta`,t.onTextDelta),e.off(`background_task_event`,t.onBackgroundTaskEvent),e.off(`background_job_group_event`,t.onBackgroundJobGroupEvent),e.off(`complete`,t.onComplete),e.off(`interrupted`,t.onInterrupted),e.off(`error`,t.onError)}function fb(e){let{session:t,outputFormat:n}=e;return{run:e=>n===`text`?_b(t,e):n===`json`?vb(t,e):yb(t,e),runGoal:(e,r={})=>pb(t,e,r,n)}}function pb(e,t,n,r){return new Promise(i=>{let a=()=>{e.off(`complete`,o),e.off(`error`,s),e.off(`goal_event`,c)},o=e=>{e.response&&process.stdout.write(e.response+`
|
|
172
|
+
`)},s=t=>{a(),r===`text`?process.stderr.write(t.message+`
|
|
173
|
+
`):hb(gb(e),``,`error`,t),i(1)},c=t=>{if(t.type!==`goal_stopped`)return;a();let n=t.goal,o=n.stopReason===`satisfied`,s=o?`Goal satisfied after ${n.iterations} iteration(s).`:`Goal stopped: ${n.stopReason} (after ${n.iterations} iteration(s)).`;r===`text`?(o?process.stdout:process.stderr).write(s+`
|
|
174
|
+
`):hb(gb(e),s,o?`success`:`error`),i(o?0:2)};e.on(`complete`,o),e.on(`error`,s),e.on(`goal_event`,c),e.setGoal(t,n.maxIterations?{maxIterations:n.maxIterations}:{})})}function mb(e){let t=e.message.toLowerCase();return t.includes(`api key`)||t.includes(`no provider`)||t.includes(`provider`)?`config_error`:t.includes(`tool`)||t.includes(`execution`)?`tool_error`:`api_error`}function hb(e,t,n,r){let i={type:`result`,result:t,session_id:e,subtype:n};n===`error`&&r!==void 0&&(i.error_code=mb(r));let a=JSON.stringify(i);process.stdout.write(a+`
|
|
175
|
+
`)}function gb(e){try{return e.getSession().getSessionId()}catch{return``}}function _b(e,t){return new Promise(n=>{let r=()=>{e.off(`complete`,i),e.off(`interrupted`,a),e.off(`error`,o)},i=e=>{r(),process.stdout.write(e.response+`
|
|
176
|
+
`),n(0)},a=e=>{r(),e.response&&process.stdout.write(e.response+`
|
|
177
|
+
`),n(0)},o=e=>{r(),process.stderr.write(e.message+`
|
|
178
|
+
`),n(1)};e.on(`complete`,i),e.on(`interrupted`,a),e.on(`error`,o),cb(e,t).then(i=>{if(i.kind===`command-result`){r(),process.stdout.write(i.result.message+`
|
|
179
|
+
`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function vb(e,t){return new Promise(n=>{let r=()=>{e.off(`complete`,i),e.off(`interrupted`,a),e.off(`error`,o)},i=t=>{r(),hb(gb(e),t.response,`success`),n(0)},a=t=>{r(),hb(gb(e),t.response,`success`),n(0)},o=t=>{r(),hb(gb(e),``,`error`,t),n(1)};e.on(`complete`,i),e.on(`interrupted`,a),e.on(`error`,o),cb(e,t).then(i=>{if(i.kind===`command-result`){r(),hb(gb(e),i.result.message,i.result.success?`success`:`error`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}function yb(e,t){return new Promise(n=>{let r=ub(e,gb,hb,n);cb(e,t).then(i=>{if(i.kind===`command-result`){r(),hb(gb(e),i.result.message,i.result.success?`success`:`error`),n(+!i.result.success);return}i.kind!==`session-execution`&&e.submit(t)})})}var bb=class{opts;exitCode=0;constructor(e){this.opts=e}async run(e){let t=this.createSession(),n=fb({session:t,outputFormat:this.opts.outputFormat});this.exitCode=await n.run(e),await t.shutdown({reason:`prompt_input_exit`,message:`Headless transport complete`})}async runGoal(e,t={}){let n=this.createSession(),r=fb({session:n,outputFormat:this.opts.outputFormat});this.exitCode=await r.runGoal(e,t),await n.shutdown({reason:`prompt_input_exit`,message:`Headless goal complete`})}createSession(){let e=this.opts.shellExec??(e=>(0,c.execSync)(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd());return new Ev({cwd:this.opts.cwd,provider:this.opts.provider,permissionMode:this.opts.permissionMode??`bypassPermissions`,maxTurns:this.opts.maxTurns,sessionStore:this.opts.sessionStore,resumeSessionId:this.opts.resumeSessionId,forkSession:this.opts.forkSession,sessionName:this.opts.sessionName,bare:this.opts.bare||void 0,allowedTools:this.opts.allowedTools,deniedTools:this.opts.deniedTools,appendSystemPrompt:this.opts.appendSystemPrompt,...this.opts.persona===void 0?{}:{persona:this.opts.persona},...this.opts.systemPrompt?{systemPrompt:this.opts.systemPrompt}:{},backgroundTaskRunners:this.opts.backgroundTaskRunners,subagentRunnerFactory:this.opts.subagentRunnerFactory,commandModules:this.opts.commandModules,commandHostAdapters:this.opts.commandHostAdapters,shellExec:e,agentName:this.opts.agentName,...this.opts.activePresetId===void 0?{}:{activePresetId:this.opts.activePresetId},...this.opts.enableParallelSubagents===void 0?{}:{enableParallelSubagents:this.opts.enableParallelSubagents},...this.opts.selfVerification===void 0?{}:{selfVerification:this.opts.selfVerification}})}getExitCode(){return this.exitCode}};const xb=[`plan`,`default`,`acceptEdits`,`bypassPermissions`],Sb=[`text`,`json`,`stream-json`];function Cb(){return`
|
|
2
180
|
Usage: robota [options] [-p <prompt>]
|
|
3
181
|
|
|
4
182
|
Options:
|
|
@@ -44,19 +222,121 @@ Examples:
|
|
|
44
222
|
robota --task-file task.md Run task from file (appended to system prompt)
|
|
45
223
|
robota -p "Refactor the auth module" --dry-run Plan only, no execution
|
|
46
224
|
robota --continue Resume the last session
|
|
47
|
-
`}function
|
|
48
|
-
`)}
|
|
49
|
-
`)
|
|
50
|
-
`);return}if(n.
|
|
51
|
-
`),
|
|
52
|
-
|
|
53
|
-
`),process.exit(1)),process.stdout.write((0,m.formatSingleSession)((0,m.analyzeSession)(a))+`
|
|
54
|
-
`)}
|
|
55
|
-
Recommendation: use iTerm2 (https://iterm2.com)`}:{label:`Terminal`,status:`ok`,message:e}}function ue(e){let t=`Network (${e.host})`;return new Promise(n=>{let r=Date.now(),i=(0,_.createConnection)({host:e.host,port:e.port}),a=setTimeout(()=>{i.destroy(),n({label:t,status:`fail`,message:`timeout (3s)`})},3e3);i.on(`connect`,()=>{clearTimeout(a),i.destroy(),n({label:t,status:`ok`,message:`reachable (${Date.now()-r}ms)`})}),i.on(`error`,e=>{clearTimeout(a),n({label:t,status:`warn`,message:`${e.message}\n Check proxy settings or firewall`})})})}async function de(e,t={checkNetwork:ue}){e.terminal.writeLine(`
|
|
225
|
+
`}function wb(e){if(e===void 0)return;let t=e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0);return t.length>0?t:void 0}function Tb(e){if(e!==void 0){if(!Sb.includes(e))throw Error(`Invalid --output-format "${e}". Valid: ${Sb.join(` | `)}`);return e}}function Eb(e){if(e!==void 0){if(!xb.includes(e))throw Error(`Invalid --permission-mode "${e}". Valid: ${xb.join(` | `)}`);return e}}function Db(e){if(e===void 0)return;let t=parseInt(e,10);if(isNaN(t)||t<=0)throw Error(`Invalid --max-turns "${e}". Must be a positive integer.`);return t}const Ob={allowPositionals:!0,options:{help:{type:`boolean`,short:`h`,default:!1},p:{type:`boolean`,short:`p`,default:!1},continue:{type:`boolean`,short:`c`,default:!1},resume:{type:`string`,short:`r`},language:{type:`string`},"permission-mode":{type:`string`},"max-turns":{type:`string`},goal:{type:`string`},"goal-max-iterations":{type:`string`},"fork-session":{type:`boolean`,default:!1},name:{type:`string`,short:`n`},"output-format":{type:`string`},format:{type:`string`},summary:{type:`string`},source:{type:`string`},"system-prompt":{type:`string`},"append-system-prompt":{type:`string`},"task-file":{type:`string`},version:{type:`boolean`,default:!1},reset:{type:`boolean`,default:!1},bare:{type:`boolean`,default:!1},"allowed-tools":{type:`string`},"denied-tools":{type:`string`},model:{type:`string`},preset:{type:`string`},"no-session-persistence":{type:`boolean`,default:!1},"json-schema":{type:`string`},configure:{type:`boolean`,default:!1},"configure-provider":{type:`string`},provider:{type:`string`},"session-log":{type:`string`},type:{type:`string`},"base-url":{type:`string`},"api-key":{type:`string`},"api-key-env":{type:`string`},"set-current":{type:`boolean`,default:!1},"settings-scope":{type:`string`},"check-update":{type:`boolean`,default:!1},"disable-update-check":{type:`boolean`,default:!1},"dry-run":{type:`boolean`,default:!1},yes:{type:`boolean`,short:`y`,default:!1}}};function kb(e,t){return{positional:t,help:e.help??!1,printMode:e.p??!1,continueMode:e.continue??!1,resumeId:e.resume,language:e.language,permissionMode:Eb(e[`permission-mode`]),maxTurns:Db(e[`max-turns`]),goal:e.goal,goalMaxIterations:Db(e[`goal-max-iterations`]),forkSession:e[`fork-session`]??!1,sessionName:e.name,outputFormat:Tb(e[`output-format`]),format:e.format,summary:e.summary,source:e.source,systemPrompt:e[`system-prompt`],appendSystemPrompt:e[`append-system-prompt`],taskFile:e[`task-file`],version:e.version??!1,reset:e.reset??!1,bare:e.bare??!1,allowedTools:e[`allowed-tools`],deniedTools:e[`denied-tools`],model:e.model,preset:e.preset,noSessionPersistence:e[`no-session-persistence`]??!1,jsonSchema:e[`json-schema`],configure:e.configure??!1,configureProvider:e[`configure-provider`],provider:e.provider,sessionLog:e[`session-log`],providerType:e.type,baseURL:e[`base-url`],apiKey:e[`api-key`],apiKeyEnv:e[`api-key-env`],setCurrent:e[`set-current`]??!1,settingsScope:e[`settings-scope`],checkUpdate:e[`check-update`]??!1,disableUpdateCheck:e[`disable-update-check`]??!1,dryRun:e[`dry-run`]??!1,yes:e.yes??!1}}function Ab(){let{values:e,positionals:t}=(0,w.parseArgs)(Ob),n=kb(e,t);if(n.printMode){if(n.resumeId===``)throw Error(`Print mode requires an explicit session id: -r <id|name> (the interactive session picker is TUI-only)`);if(n.noSessionPersistence&&(n.continueMode||n.resumeId!==void 0))throw Error(`--no-session-persistence conflicts with -c/-r (resume needs the session store)`)}if(n.dryRun){if(n.permissionMode!==void 0&&n.permissionMode!==`plan`)throw Error(`--dry-run is an alias for --permission-mode plan and conflicts with --permission-mode ${n.permissionMode}`);return{...n,permissionMode:`plan`}}return n}const jb={id:`default`,title:`Default`,description:`Neutral baseline preset — no overrides; reproduces the standard agent behaviour.`},Mb={id:`autonomous-builder`,title:`Autonomous Builder`,description:`Proactive, self-verifying builder posture — high effort, acts first, dispatches parallel subagents (proactive autonomous-builder persona; original English wording).`,effort:`high`,autonomy:`act-first`,enableParallelSubagents:!0,selfVerification:!0,persona:[`You are a proactive, high-autonomy builder. When you have enough to proceed, proceed and`,`complete the task — act rather than stop to ask. Keep going through the points where a more`,`hesitant assistant would pause for confirmation, and only check in when something is genuinely`,`ambiguous or risky.`,``,`Stay inside the scope of the task. Do the simplest thing that works; do not refactor, add`,`abstractions, or expand scope beyond what was asked. Handle the adjacent detail that the task`,`plainly needs, but resist turning a focused change into a sweeping one.`,``,`After making changes, verify your own work — run the tests, re-read the goal, and confirm the`,`result actually matches what was requested before you call it done.`,``,`Ground your claims in evidence. Before reporting progress, check each claim against an actual`,`tool result from this session; if something is not yet verified, say so plainly rather than`,`implying it is finished.`,``,`Be warm and honest without being sycophantic — tell people what is useful, not just what they`,`want to hear. Stay even-handed and let your conclusions follow from the evidence. When you get`,`something wrong, own it directly, correct it, and move on.`,``,`Lead with the outcome. Report results plainly instead of narrating each step, keep formatting`,`light, and stay concise.`].join(`
|
|
226
|
+
`)},Nb={id:`careful-reviewer`,title:`Careful Reviewer`,description:`Conservative, ask-first reviewing posture — reads and plans before changing, prompts on write/exec, self-verifies, runs focused (no parallel subagents) at high effort.`,effort:`high`,autonomy:`ask-first`,enableParallelSubagents:!1,selfVerification:!0,persona:[`You are a careful, review-oriented assistant. Read and analyse before you change anything —`,`understand the surrounding code and context first, then lay out a short plan for the change and`,`wait for confirmation before you write or run things that have side effects.`,``,`When you propose a change, explain why — the reasoning behind it and the trade-offs against the`,`alternatives you considered, so the choice can be reviewed rather than taken on trust.`,``,`Stay conservative in scope. Make the change that was asked for and the detail it plainly needs;`,`do not widen the blast radius with unrequested refactors or rewrites.`,``,`Ground your claims in evidence. Before reporting progress or completion, check each claim against`,`an actual tool result from this session; if something is not yet verified, say so plainly rather`,`than implying it is done.`,``,`Be warm and honest without being sycophantic — tell people what is useful, not just what they`,`want to hear. Stay even-handed and let your conclusions follow from the evidence. When you get`,`something wrong, own it directly, correct it, and move on.`].join(`
|
|
227
|
+
`)},Pb={id:`neutral-executor`,title:`Neutral Executor`,description:`Thin, steerable executor — follows instructions literally, minimal editorialising, strict scope, terse output; balanced autonomy, no parallel subagents, no self-verification, medium effort for predictable scripted use (neutral-alignment work-style; original English wording).`,effort:`medium`,autonomy:`balanced`,enableParallelSubagents:!1,selfVerification:!1,persona:[`Follow the system and user instructions literally. Do what was asked, the way it was asked, and`,`defer to the given instructions over your own preferences.`,``,`Editorialise as little as possible. Skip unrequested commentary, caveats, and asides — give the`,`result, not a narration of it.`,``,`Stay strictly in scope. Make only the change that was requested and the detail it plainly needs;`,`do not add adjacent refactors, comments, or features that were not asked for.`,``,`Keep output terse. Prefer the shortest response that fully answers, so the result is predictable`,`and easy to consume in a script or pipeline.`].join(`
|
|
228
|
+
`)},Fb={"ask-first":`default`,balanced:`default`,"act-first":`acceptEdits`},Ib=`robota-cli`,Lb=[jb,Mb,Nb,Pb],Rb=[];function zb(){return[...Lb,...Rb]}function Bb(e){let t=new Set(Lb.map(e=>e.id)),n=[],r=[];for(let i of e){if(t.has(i.id)){r.push({id:i.id,reason:`collides with built-in preset`});continue}if(Rb.some(e=>e.id===i.id)){r.push({id:i.id,reason:`duplicate preset id`});continue}Rb.push(i),n.push(i.id)}return{registered:n,rejected:r}}function Vb(){return zb().map(({id:e,title:t,description:n})=>({id:e,title:t,description:n}))}function Hb(e){return zb().find(t=>t.id===e)}function Ub(e){let{id:t,title:n,description:r,...i}=e;return i}function Wb(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function Gb(e,t){return t?{...e,...Wb(t)}:e}function Kb(e,t={}){let n=Hb(e);if(!n){let t=zb().map(e=>e.id).join(`, `);throw Error(`Unknown preset: "${e}". Available presets: ${t}.`)}let r=Ub(n);return r=Gb(r,t.cliOverrides),r=Gb(r,t.explicit),qb(r)}function qb(e){return e.permissionMode===void 0?e.defaultPermissionMode===void 0?e.autonomy===void 0?e:{...e,permissionMode:Fb[e.autonomy]}:{...e,permissionMode:e.defaultPermissionMode}:e}const Jb=[`low`,`medium`,`high`,`xhigh`,`max`],Yb=[`ask-first`,`act-first`,`balanced`],Xb=[`plan`,`default`,`acceptEdits`,`bypassPermissions`],Zb=[`safe`,`moderate`,`full`];function Qb(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function $b(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}function ex(e,t){let n=[[`persona`,e.persona,e=>t.persona=e],[`systemPrompt`,e.systemPrompt,e=>t.systemPrompt=e],[`appendSystemPrompt`,e.appendSystemPrompt,e=>t.appendSystemPrompt=e],[`agentName`,e.agentName,e=>t.agentName=e],[`model`,e.model,e=>t.model=e],[`language`,e.language,e=>t.language=e]];for(let[e,t,r]of n)if(t!==void 0){if(typeof t!=`string`)return`${e}: expected a string`;r(t)}}function tx(e,t){let n=[[`temperature`,e.temperature,e=>t.temperature=e],[`maxOutputTokens`,e.maxOutputTokens,e=>t.maxOutputTokens=e]];for(let[e,t,r]of n)if(t!==void 0){if(typeof t!=`number`||Number.isNaN(t))return`${e}: expected a number`;r(t)}let r=[[`enableParallelSubagents`,e.enableParallelSubagents,e=>t.enableParallelSubagents=e],[`selfVerification`,e.selfVerification,e=>t.selfVerification=e]];for(let[e,t,n]of r)if(t!==void 0){if(typeof t!=`boolean`)return`${e}: expected a boolean`;n(t)}}function nx(e,t){if(e.effort!==void 0){if(!Jb.includes(e.effort))return`effort: expected one of ${Jb.join(`, `)}`;t.effort=e.effort}if(e.autonomy!==void 0){if(!Yb.includes(e.autonomy))return`autonomy: expected one of ${Yb.join(`, `)}`;t.autonomy=e.autonomy}let n=[[`permissionMode`,e.permissionMode,e=>t.permissionMode=e],[`defaultPermissionMode`,e.defaultPermissionMode,e=>t.defaultPermissionMode=e]];for(let[e,t,r]of n)if(t!==void 0){if(!Xb.includes(t))return`${e}: expected one of ${Xb.join(`, `)}`;r(t)}if(e.defaultTrustLevel!==void 0){if(!Zb.includes(e.defaultTrustLevel))return`defaultTrustLevel: expected one of ${Zb.join(`, `)}`;t.defaultTrustLevel=e.defaultTrustLevel}}function rx(e,t){let n=[[`allowedTools`,e.allowedTools,e=>t.allowedTools=e],[`deniedTools`,e.deniedTools,e=>t.deniedTools=e],[`enabledCommandModules`,e.enabledCommandModules,e=>t.enabledCommandModules=e],[`disabledCommandModules`,e.disabledCommandModules,e=>t.disabledCommandModules=e]];for(let[e,t,r]of n)if(t!==void 0){if(!$b(t))return`${e}: expected an array of strings`;r(t)}}function ix(e){if(!Qb(e))return{ok:!1,error:`preset: expected a non-null object`};let t=[[`id`,e.id],[`title`,e.title],[`description`,e.description]];for(let[e,n]of t)if(typeof n!=`string`||n.length===0)return{ok:!1,error:`${e}: expected a non-empty string`};let n={},r=ex(e,n)??tx(e,n)??nx(e,n)??rx(e,n);return r===void 0?{ok:!0,preset:{id:e.id,title:e.title,description:e.description,...n}}:{ok:!1,error:r}}function ax(){return(0,p.join)((0,m.homedir)(),`.robota`,`presets`)}function ox(e){if(!(0,h.existsSync)(e))return{loaded:[],errors:[]};let t=[],n=[],r=new Map,i=(0,h.readdirSync)(e).filter(e=>e.endsWith(`.json`));for(let a of i){let i=(0,p.join)(e,a),o;try{o=JSON.parse((0,h.readFileSync)(i,`utf8`))}catch(e){t.push({file:a,error:e instanceof Error?e.message:String(e)});continue}let s=ix(o);if(!s.ok){t.push({file:a,error:s.error});continue}n.push(s.preset),r.set(s.preset.id,a)}let a=Bb(n);for(let e of a.rejected)t.push({file:r.get(e.id)??e.id,error:e.reason});return{loaded:a.registered,errors:t}}function sx(e){return ox(e?.dir??ax())}function cx(e,t){return e.preset??t??`default`}function lx(e){return{...e.model===void 0?{}:{model:e.model},...e.systemPrompt===void 0?{}:{systemPrompt:e.systemPrompt},...e.appendSystemPrompt===void 0?{}:{appendSystemPrompt:e.appendSystemPrompt},...e.language===void 0?{}:{language:e.language},...e.permissionMode===void 0?{}:{permissionMode:e.permissionMode}}}function ux(e,t){return Kb(cx(e,t),{cliOverrides:lx(e)})}function dx(e){if(!e.parts||e.parts.length===0)return[{type:`text`,text:e.content||``}];let t=[];for(let n of e.parts)n.type===`text`?t.push({type:`text`,text:n.text}):n.type===`image_inline`?t.push({type:`image`,source:{type:`base64`,media_type:n.mimeType,data:n.data}}):n.type===`image_uri`&&t.push({type:`image`,source:{type:`url`,url:n.uri}});return t}function fx(e){return e.map(e=>{if(e.role===`user`){let t=e;return t.parts&&t.parts.length>0?{role:`user`,content:dx(t)}:{role:`user`,content:e.content||``}}else if(e.role===`assistant`){let t=e;if(t.toolCalls&&t.toolCalls.length>0){let e=[];t.content&&e.push({type:`text`,text:t.content});for(let n of t.toolCalls)e.push({type:`tool_use`,id:n.id,name:n.function.name,input:JSON.parse(n.function.arguments)});return{role:`assistant`,content:e}}return{role:`assistant`,content:t.content||``}}else if(e.role===`tool`)return{role:`user`,content:[{type:`tool_result`,tool_use_id:e.toolCallId??``,content:e.content||``}]};else return{role:`user`,content:e.content||``}})}function px(e){if(!Array.isArray(e.content))return``;let t=e.content.filter(e=>e.type===`web_search_result`&&`title`in e&&`url`in e).map((e,t)=>`${t+1}. ${e.title}\n ${e.url}`).join(`
|
|
229
|
+
`);return t?`[Web Search Results]\n${t}`:``}function mx(e){return e.map(e=>({name:e.name,description:e.description,input_schema:e.parameters}))}function hx(e){return e===`auto`?{type:`auto`}:e===`none`?{type:`none`}:e===`required`?{type:`any`}:{type:`tool`,name:e.tool}}async function gx(e,t,n,r,i,a){let o={...t,stream:!0};a?.({provider:`anthropic`,apiSurface:`anthropic-messages`,payloadKind:`request`,payload:o});let s=await e.messages.create(o,i?{signal:i}:void 0),c=[],l=[],u=``,f=``,p=``,m={input_tokens:0,output_tokens:0},h=``,g=null;try{let e=0;for await(let t of vx(s,i))switch(a?.({provider:`anthropic`,apiSurface:`anthropic-messages`,payloadKind:`stream_event`,sequence:e,payload:t}),e++,t.type){case`message_start`:m=t.message.usage,h=t.message.model;break;case`content_block_start`:if(t.content_block.type===`tool_use`)u=t.content_block.id,f=t.content_block.name,p=``;else if(t.content_block.type===`server_tool_use`){let e=t.content_block,i=e.input?.query??``,a=i?`\n🔍 Searching: "${i}"\n`:`\n🔍 [${e.name??`server_tool`}]\n`;c.push(a),n(a),r&&r(e.name??`server_tool`,{query:i})}else if(t.content_block.type===`web_search_tool_result`){let e=t.content_block,r=px(e);r&&(c.push(`\n${r}\n\n`),n(`\n${r}\n\n`))}break;case`content_block_delta`:t.delta.type===`text_delta`?(c.push(t.delta.text),n(t.delta.text)):t.delta.type===`input_json_delta`&&(p+=t.delta.partial_json);break;case`content_block_stop`:u&&(l.push({id:u,type:`function`,function:{name:f,arguments:p||`{}`}}),u=``,f=``,p=``);break;case`message_delta`:t.usage&&(m.output_tokens=t.usage.output_tokens),g=t.delta.stop_reason;break}}catch(e){if(e instanceof Error&&e.name===`AbortError`)return _x(c,l,m,h);throw e}if(i?.aborted)return _x(c,l,m,h);let _=c.join(``)||``,v={id:(0,d.randomUUID)(),role:`assistant`,content:_,state:`complete`,timestamp:new Date,...l.length>0&&{toolCalls:l}};return v.metadata={inputTokens:m.input_tokens,outputTokens:m.output_tokens,model:h},g&&(v.metadata.stopReason=g),v}function _x(e,t,n,r){let i=e.join(``)||``,a={id:(0,d.randomUUID)(),role:`assistant`,content:i,state:`complete`,timestamp:new Date,...t.length>0&&{toolCalls:t}};return a.metadata={inputTokens:n.input_tokens,outputTokens:n.output_tokens,model:r,stopReason:`aborted`},a}async function*vx(e,t){for await(let n of e){if(t?.aborted)break;yield n}}var yx=class extends Fe{name=`anthropic`;version=`1.0.0`;client;options;enableWebTools=!1;onTextDelta;onServerToolUse;constructor(e){if(super(),this.options=e,e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client;else if(e.apiKey)this.client=new T.default({apiKey:e.apiKey,...e.timeout&&{timeout:e.timeout},...e.baseURL&&{baseURL:e.baseURL}});else throw new z(`Either Anthropic client, apiKey, or executor is required`)}async chat(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)return this.executeViaExecutorOrDirect(e,t);if(!this.client)throw Error(`Anthropic client not available. Either provide a client/apiKey or use an executor.`);let n=e.filter(e=>e.role===`system`),r=fx(e.filter(e=>e.role!==`system`)),i=n.map(e=>e.content||``).join(`
|
|
230
|
+
|
|
231
|
+
`)||void 0;if(!t?.model)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let a=t?.tools?mx(t.tools):[],o=this.enableWebTools?[{type:`web_search_20250305`,name:`web_search`}]:[],s=[...a,...o],c={model:t.model,messages:r,max_tokens:t?.maxTokens||qt(t.model),...i&&{system:i},...t?.temperature!==void 0&&{temperature:t.temperature},...s.length>0&&{tools:s},...s.length>0&&t?.toolChoice!==void 0&&{tool_choice:hx(t.toolChoice)},...bx(t)},l=t?.onTextDelta??this.onTextDelta??(()=>{});try{return await gx(this.client,c,l,this.onServerToolUse,t?.signal,t?.onProviderNativeRawPayload)}catch(e){let t=e;throw t.status===429||t.error?.type===`rate_limit_error`?new at(t.message??`Anthropic rate limit exceeded.`,void 0,`anthropic`):e}}async*chatStream(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor){yield*this.executeStreamViaExecutorOrDirect(e,t);return}if(!this.client)throw Error(`Anthropic client not available. Either provide a client/apiKey or use an executor.`);let n=fx(e);if(!t?.model)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let r={model:t.model,messages:n,max_tokens:t?.maxTokens||qt(t.model),stream:!0,...bx(t)};t?.temperature!==void 0&&(r.temperature=t.temperature);let i=t?.tools?mx(t.tools):[],a=this.enableWebTools?[{type:`web_search_20250305`,name:`web_search`}]:[],o=[...i,...a];o.length>0&&(r.tools=o,t?.toolChoice!==void 0&&(r.tool_choice=hx(t.toolChoice))),t?.onProviderNativeRawPayload?.({provider:`anthropic`,apiSurface:`anthropic-messages`,payloadKind:`request`,payload:r});let s;try{s=await this.client.messages.create(r)}catch(e){let t=e;throw t.status===429||t.error?.type===`rate_limit_error`?new at(t.message??`Anthropic rate limit exceeded.`,void 0,`anthropic`):e}let c=0;for await(let e of s)t?.onProviderNativeRawPayload?.({provider:`anthropic`,apiSurface:`anthropic-messages`,payloadKind:`stream_event`,sequence:c,payload:e}),c++,e.type===`content_block_delta`&&e.delta.type===`text_delta`&&(yield{id:(0,d.randomUUID)(),role:`assistant`,content:e.delta.text,state:`complete`,timestamp:new Date})}supportsTools(){return!0}getCapabilities(){return{functionCalling:{supported:!0},nativeWebTools:{webSearch:this.enableWebTools?{supported:!0,enabled:!0,source:`anthropic-messages`}:{supported:!0,enabled:!1,source:`anthropic-messages`,reason:`Call configureNativeWebTools({ webSearch: true }) or set enableWebTools.`},webFetch:{supported:!1,enabled:!1,source:`anthropic-messages`,reason:`Anthropic provider exposes server web search only.`}}}}configureNativeWebTools(e){return e.webSearch===!0&&(this.enableWebTools=!0),this.validateNativeWebTools(e),this.getCapabilities()}validateConfig(){return!!this.client&&!!this.options&&!!this.options.apiKey}async dispose(){}validateMessages(e){if(!Array.isArray(e))throw new B(`Messages must be an array`,`messages`);if(e.length===0)throw new B(`Messages array cannot be empty`,`messages`);for(let t of e)if(!t.role||![`user`,`assistant`,`system`,`tool`].includes(t.role))throw new B(`Invalid message role: ${t.role}`,`role`)}};function bx(e){return e?.responseFormat?.type===`json_schema`?{output_config:{format:{type:`json_schema`,schema:xx(e.responseFormat.schema)}}}:{}}function xx(e){if(Array.isArray(e))return e.map(xx);if(typeof e!=`object`||!e)return e;let t=e,n={...t};return t.properties&&typeof t.properties==`object`&&(n.properties=Object.fromEntries(Object.entries(t.properties).map(([e,t])=>[e,xx(t)]))),t.items&&typeof t.items==`object`&&(n.items=xx(t.items)),t.additionalProperties&&typeof t.additionalProperties==`object`?n.additionalProperties=xx(t.additionalProperties):t.type===`object`&&(n.additionalProperties=!1),n}async function Sx(e,t=Tx){return Cx(e,t)}async function Cx(e,t){let n=await t(`https://api.anthropic.com/v1/models`,wx(e.apiKey)).catch(e=>({ok:!1,status:0,json:()=>Promise.resolve({data:[]}),errorMessage:`Anthropic model refresh failed: ${e instanceof Error?e.message:String(e)}`}));if(`errorMessage`in n)return{status:`unavailable`,sourceUrl:Ox,message:n.errorMessage};if(!n.ok)return{status:`unavailable`,sourceUrl:Ox,message:`Anthropic model refresh failed: HTTP ${n.status}`};let r=await n.json(),i=new Date().toISOString(),a=(r.data??[]).filter(e=>typeof e.id==`string`&&e.id.length>0).map(e=>({id:e.id,displayName:e.display_name??e.id,lifecycle:`active`,sourceUrl:Ox,lastVerifiedAt:i}));return{status:`live`,sourceUrl:Ox,lastVerifiedAt:kx,entries:a,message:`Fetched ${a.length} models from Anthropic API`}}function wx(e){if(e)return{headers:{"x-api-key":e,"anthropic-version":`2023-06-01`}}}async function Tx(e,t){let n=await fetch(e,{...t?.headers!==void 0&&{headers:t.headers}});return{ok:n.ok,status:n.status,json:()=>n.json()}}const Ex=`claude-sonnet-4-6`,Dx=`$ENV:ANTHROPIC_API_KEY`,Ox=`https://platform.claude.com/docs/en/api/models/list`,kx=`2026-05-04`,Ax=[{kind:`api-key`,label:`Anthropic API keys`,url:`https://platform.claude.com/settings/keys`,sourceUrl:`https://platform.claude.com/docs/en/api/overview`,lastVerifiedAt:`2026-05-08`}];function jx(){return{type:`anthropic`,displayName:`Anthropic`,description:`Claude series — strong at coding tasks. API key required.`,category:`cloud-paid`,defaults:{model:Ex,apiKey:Dx},modelCatalog:{status:`fallback`,sourceUrl:Ox,lastVerifiedAt:kx,entries:Mx()},setupHelpLinks:Ax,setupSteps:[{key:`apiKey`,title:`Anthropic API key`,defaultValue:Dx,masked:!0},{key:`model`,title:`Anthropic model`,defaultValue:Ex}],refreshModelCatalog:({profile:e})=>Sx(e),modelCatalogCacheTtlSeconds:86400,requiresApiKey:!0,createProvider:e=>new yx({apiKey:Nx(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},defaultModel:e.model})}}function Mx(){let e=new Set,t=[];for(let n of Object.values(Gt))e.has(n.name)||(e.add(n.name),t.push({id:n.id,displayName:n.name,contextWindow:n.contextWindow,capabilities:[`tools`,`vision`,`json_schema`,`reasoning`,`streaming`],lifecycle:`active`,sourceUrl:Ox,lastVerifiedAt:kx}));return t}function Nx(e){if(!e)throw Error(`Provider anthropic requires apiKey`);return e}function Px(e){return e.map(e=>Lx(e))}function Fx(e){return e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.parameters}}))}function Ix(e){if(!e.parts||e.parts.length===0||!e.parts.some(e=>e.type===`image_inline`||e.type===`image_uri`))return e.content||``;let t=[];for(let n of e.parts)if(n.type===`text`)t.push({type:`text`,text:n.text});else if(n.type===`image_inline`){let e=n;t.push({type:`image_url`,image_url:{url:`data:${e.mimeType};base64,${e.data}`}})}else if(n.type===`image_uri`){let e=n;t.push({type:`image_url`,image_url:{url:e.uri}})}return t.length===0?e.content||``:t}function Lx(e){if(e.role===`user`)return{role:`user`,content:Ix(e)};if(e.role===`assistant`)return Rx(e);if(e.role===`system`)return{role:`system`,content:e.content||``};if(e.role===`tool`){if(!e.toolCallId||e.toolCallId.trim().length===0)throw Error(`Tool message missing toolCallId: ${JSON.stringify(e)}`);return{role:`tool`,content:e.content||``,tool_call_id:e.toolCallId}}throw Error(`Unsupported message role: ${JSON.stringify(e)}`)}function Rx(e){return e.toolCalls&&e.toolCalls.length>0?{role:`assistant`,content:e.content===``?null:e.content||null,tool_calls:e.toolCalls.map(e=>({id:e.id,type:`function`,function:{name:e.function.name,arguments:e.function.arguments}}))}:{role:`assistant`,content:e.content===null?null:e.content||``}}var zx=class{logger;textProjector;toolCallTextProjector;constructor(e={}){this.logger=e.logger??Ae,this.textProjector=e.textProjector,this.toolCallTextProjector=e.toolCallTextProjector}parseResponse(e){try{let t=e.choices?.[0];if(!t)throw Error(`No choices found in OpenAI-compatible response`);return this.parseChoice(t,e.usage)}catch(e){let t=e instanceof Error?e.message:`OpenAI-compatible response parsing failed`;throw this.logger.error(`Response parsing failed`,{error:t}),Error(`OpenAI-compatible response parsing failed: ${t}`)}}parseChoice(e,t){let n=e.message,r=this.projectToolCallText(n.content||``),i=this.toolCallTextProjector?.flush(),a=this.parseNativeToolCalls(n),o=[...r.toolCalls,...i?.toolCalls??[]],s=[...a,...o];return{id:(0,d.randomUUID)(),state:`complete`,role:`assistant`,content:this.projectText(r.visibleText+(i?.visibleText??``)),timestamp:new Date,...s.length>0&&{toolCalls:s},...t&&{usage:this.parseUsage(t)},metadata:{finishReason:e.finish_reason||void 0,...this.buildToolTextMetadata(r,i)}}}parseNativeToolCalls(e){return e.tool_calls?.map(e=>({id:e.id,type:`function`,function:{name:e.function.name,arguments:e.function.arguments}}))||[]}parseUsage(e){return{promptTokens:e.prompt_tokens,completionTokens:e.completion_tokens,totalTokens:e.total_tokens}}parseStreamingChunk(e){try{let t=e.usage?this.parseUsage(e.usage):void 0,n=e.choices?.[0];if(!n)return t?{id:(0,d.randomUUID)(),state:`complete`,role:`assistant`,content:``,timestamp:new Date,usage:t,metadata:{isStreamChunk:!0,isComplete:!0}}:null;let r=n.finish_reason,i=n.delta.tool_calls?.map(e=>({id:e.id||``,type:`function`,function:{name:e.function?.name||``,arguments:e.function?.arguments||``}}));return i?{id:(0,d.randomUUID)(),state:`complete`,role:`assistant`,content:``,timestamp:new Date,toolCalls:i,...t&&{usage:t},metadata:{isStreamChunk:!0,isComplete:r===`stop`||r===`tool_calls`}}:{id:(0,d.randomUUID)(),state:`complete`,role:`assistant`,content:this.projectText(n.delta.content||``),timestamp:new Date,...t&&{usage:t},metadata:{isStreamChunk:!0,isComplete:r===`stop`||r===`tool_calls`}}}catch(e){let t=e instanceof Error?e.message:`OpenAI-compatible chunk parsing failed`;throw this.logger.error(`Chunk parsing failed`,{error:t}),Error(`OpenAI-compatible chunk parsing failed: ${t}`)}}projectText(e){return this.textProjector?this.textProjector(e):e}projectToolCallText(e){return this.toolCallTextProjector?.project(e)??{visibleText:e,toolCalls:[],removedToolCallText:!1}}buildToolTextMetadata(e,t){let n=[e.rawToolCallText,t?.rawToolCallText].filter(e=>typeof e==`string`&&e.length>0).join(``);return{...(e.removedToolCallText||(t?.removedToolCallText??!1))&&{toolCallTextProjected:!0},...n.length>0&&{rawToolCallText:n}}}};async function Bx(e){let t={textParts:[],toolCallParts:new Map,projectedToolCalls:[],rawToolCallTextParts:[],toolCallTextProjected:!1,model:``,finishReason:null};for await(let n of Zx(e.stream,e.signal))Vx(t,n,e);return Wx(t,e),Jx(t,e.metadata)}function Vx(e,t,n){t.model&&(e.model=t.model),t.usage&&(e.usage={promptTokens:t.usage.prompt_tokens,completionTokens:t.usage.completion_tokens,totalTokens:t.usage.total_tokens});let r=t.choices?.[0];r&&(e.finishReason=r.finish_reason??e.finishReason,Hx(e,r.delta.content,n),qx(e,r.delta.tool_calls??[]))}function Hx(e,t,n){if(!t)return;let r=Gx(t,n.toolCallTextProjector);Kx(e,r);let i=Ux(r.visibleText,n.textProjector);i.length!==0&&(e.textParts.push(i),n.onTextDelta?.(i))}function Ux(e,t){return t?t(e):e}function Wx(e,t){let n=t.toolCallTextProjector?.flush();if(n){Kx(e,n);let r=Ux(n.visibleText,t.textProjector);r.length>0&&(e.textParts.push(r),t.onTextDelta?.(r))}let r=t.textProjectorFlush?.();r&&(e.textParts.push(r),t.onTextDelta?.(r))}function Gx(e,t){return t?.project(e)??{visibleText:e,toolCalls:[],removedToolCallText:!1}}function Kx(e,t){t.toolCalls.length>0&&e.projectedToolCalls.push(...t.toolCalls),t.removedToolCallText&&(e.toolCallTextProjected=!0),t.rawToolCallText&&t.rawToolCallText.length>0&&e.rawToolCallTextParts.push(t.rawToolCallText)}function qx(e,t){for(let n of t){let t=n.index??0,r=e.toolCallParts.get(t)??{id:``,name:``,arguments:``},i=n.function?.name??r.name;e.toolCallParts.set(t,{id:n.id??r.id,name:i,arguments:r.arguments+(n.function?.arguments??``)})}}function Jx(e,t={}){let n={...t};e.model&&(n.model=e.model),e.finishReason&&(n.finishReason=e.finishReason),e.toolCallTextProjected&&(n.toolCallTextProjected=!0),e.rawToolCallTextParts.length>0&&(n.rawToolCallText=e.rawToolCallTextParts.join(``));let r=Yx(e);return{id:(0,d.randomUUID)(),role:`assistant`,content:e.textParts.join(``),state:`complete`,timestamp:new Date,...r.length>0&&{toolCalls:r},...e.usage&&{usage:e.usage},...Object.keys(n).length>0&&{metadata:n}}}function Yx(e){return[...Xx(e.toolCallParts),...e.projectedToolCalls]}function Xx(e){return Array.from(e.entries()).sort(([e],[t])=>e-t).map(([e,t])=>({id:t.id||`call_${e}`,type:`function`,function:{name:t.name,arguments:t.arguments||`{}`}}))}async function*Zx(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await Qx(n,t);if(e.done||(await $x(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async function Qx(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}async function $x(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}async function*eS(e,t){let n=t.initialSequence??0;for await(let r of e)t.onProviderNativeRawPayload?.({provider:t.provider,...t.apiSurface!==void 0&&{apiSurface:t.apiSurface},payloadKind:`stream_event`,sequence:n,payload:r}),n++,yield r}async function tS(e,t=nS){if(!e.baseURL)return{ok:!0,message:`Profile fields are valid; no endpoint probe configured.`};try{let n=await t(`${e.baseURL.replace(/\/$/,``)}/models`);if(!n.ok)return{ok:!1,message:`HTTP ${n.status}`};let r=((await n.json()).data??[]).map(e=>e.id).filter(e=>!!e);return{ok:!0,message:`${r.length} model(s) discovered`,models:r}}catch(e){return{ok:!1,message:e instanceof Error?e.message:String(e)}}}async function nS(e){let t=await fetch(e);return{ok:t.ok,status:t.status,json:()=>t.json()}}function rS(e){return e===void 0||e===`auto`?`auto`:e===`none`||e===`required`?e:{type:`function`,function:{name:e.tool}}}function iS(e){return e===void 0||e===`auto`?`auto`:e===`none`||e===`required`?e:{type:`function`,name:e.tool}}function aS(e){return Px(e)}function oS(e){return Fx(e)}function sS(e,t){return t?.type===void 0?e:t.type===`json_schema`?{...e,responseFormat:`json_schema`,jsonSchema:{name:t.name??`structured_output`,schema:t.schema}}:{...e,responseFormat:t.type}}function cS(e){if(e.responseFormat===void 0||e.responseFormat===`text`)return;if(e.responseFormat===`json_object`)return{type:`json_object`};let t=uS(e);return{type:`json_schema`,json_schema:{name:t.name,schema:t.schema,...t.description!==void 0&&{description:t.description},...t.strict!==void 0&&{strict:t.strict}}}}function lS(e){if(e.responseFormat===void 0||e.responseFormat===`text`)return;if(e.responseFormat===`json_object`)return{format:{type:`json_object`}};let t=uS(e);return{format:{type:`json_schema`,name:t.name,schema:t.schema,...t.description!==void 0&&{description:t.description},...t.strict!==void 0&&{strict:t.strict}}}}function uS(e){let t=e.jsonSchema;if(e.responseFormat!==`json_schema`)throw Error(`Unsupported OpenAI response format: ${e.responseFormat}`);if(!t?.schema)throw Error(`OpenAI jsonSchema.schema is required when responseFormat is json_schema`);return{name:t.name,schema:t.schema,...t.description!==void 0&&{description:t.description},...t.strict!==void 0&&{strict:t.strict}}}async function dS(e){let t=_S(e.client);try{let n=mS(e);if(e.chatOptions?.onTextDelta??e.onTextDelta)return await hS(t,e,{...n,stream:!0,...pS(e)});await gS(e,n,`chat`),e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let r=await t.chat.completions.create(n);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`chat-completions`,payloadKind:`response`,payload:r}),e.responseParser.parseResponse(r)}catch(e){let t=e;if(t.status===429)throw new at(t.message??`OpenAI rate limit exceeded.`,void 0,`openai`);let n=t.message||`OpenAI API request failed`;throw Error(`OpenAI chat failed: ${n}`)}}async function*fS(e){let t=_S(e.client);try{let n={...mS(e),stream:!0,...pS(e)};await gS(e,n,`stream`),e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let r=await t.chat.completions.create(n,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0);for await(let t of eS(r,{provider:`openai`,apiSurface:`chat-completions`,onProviderNativeRawPayload:e.chatOptions?.onProviderNativeRawPayload})){let n=e.responseParser.parseStreamingChunk(t);n&&(yield n)}}catch(e){let t=e;if(t.status===429)throw new at(t.message??`OpenAI rate limit exceeded.`,void 0,`openai`);let n=t.message||`OpenAI API request failed`;throw Error(`OpenAI stream failed: ${n}`)}}function pS(e){return e.providerOptions.includeStreamUsage===!1?{}:{stream_options:{include_usage:!0}}}function mS(e){let t=aS(e.messages),n=e.chatOptions?.model??e.providerOptions.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let r=cS(sS(e.providerOptions,e.chatOptions?.responseFormat));return{model:n,messages:t,...e.chatOptions?.temperature!==void 0&&{temperature:e.chatOptions.temperature},...e.chatOptions?.maxTokens!==void 0&&{max_tokens:e.chatOptions.maxTokens},...e.chatOptions?.tools&&{tools:oS(e.chatOptions.tools),tool_choice:rS(e.chatOptions.toolChoice)},...r!==void 0&&{response_format:r}}}async function hS(e,t,n){try{return await gS(t,n,`stream`),t.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n}),Bx({stream:eS(await e.chat.completions.create(n,t.chatOptions?.signal?{signal:t.chatOptions.signal}:void 0),{provider:`openai`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t.chatOptions?.onProviderNativeRawPayload}),onTextDelta:t.chatOptions?.onTextDelta??t.onTextDelta,signal:t.chatOptions?.signal})}catch(e){let t=e;if(t.status===429)throw new at(t.message??`OpenAI rate limit exceeded.`,void 0,`openai`);let n=t.message||`OpenAI streaming request failed`;throw Error(`OpenAI stream failed: ${n}`)}}async function gS(e,t,n){if(!e.payloadLogger?.isEnabled())return;let r={model:t.model,messagesCount:t.messages.length,hasTools:!!t.tools,temperature:t.temperature??void 0,maxTokens:t.max_tokens??void 0,timestamp:new Date().toISOString()};await e.payloadLogger.logPayload(r,n)}function _S(e){if(!e)throw Error(`OpenAI client not available. Either provide a client/apiKey or use an executor.`);return e}var vS=class{parser;constructor(e){this.parser=new zx({logger:e})}parseResponse(e){try{return this.parser.parseResponse(e)}catch(e){let t=yS(e instanceof Error?e.message:`OpenAI response parsing failed`);throw Error(`OpenAI response parsing failed: ${t}`)}}parseStreamingChunk(e){try{return this.parser.parseStreamingChunk(e)}catch(e){let t=yS(e instanceof Error?e.message:`OpenAI chunk parsing failed`);throw Error(`OpenAI chunk parsing failed: ${t}`)}}};function yS(e){return e.replace(/^OpenAI-compatible response parsing failed: /,``).replace(/^OpenAI-compatible chunk parsing failed: /,``).replace(`OpenAI-compatible response`,`OpenAI response`)}function bS(e){switch(e){case`low`:return`low`;case`medium`:return`medium`;case`high`:case`xhigh`:case`max`:return`high`;default:return e}}function xS(e,t){return t===void 0?e:{...e,effort:bS(t)}}function SS(e){return e.flatMap(e=>wS(e))}function CS(e,t){let n=e?.map(e=>({type:`function`,name:e.name,description:e.description,parameters:e.parameters,strict:t??!1}))??[];return n.length>0?n:void 0}function wS(e){if(e.role===`user`)return[OS(`user`,ES(e.content,e.parts))];if(e.role===`system`)return[OS(`system`,e.content)];if(e.role===`tool`){if(!e.toolCallId||e.toolCallId.trim().length===0)throw Error(`Tool message missing toolCallId: ${JSON.stringify(e)}`);return[{type:`function_call_output`,call_id:e.toolCallId,output:e.content||``}]}return TS(e)}function TS(e){let t=[];e.content&&e.content.length>0&&t.push(OS(`assistant`,e.content));for(let n of e.toolCalls??[])t.push({type:`function_call`,call_id:n.id,name:n.function.name,arguments:n.function.arguments});return t.length===0&&t.push(OS(`assistant`,``)),t}function ES(e,t){if(!t||t.length===0)return e;let n=t.map(e=>DS(e));return e.length>0&&!t.some(e=>e.type===`text`)?[{type:`input_text`,text:e},...n]:n}function DS(e){return e.type===`text`?{type:`input_text`,text:e.text}:e.type===`image_uri`?{type:`input_image`,image_url:e.uri}:{type:`input_image`,image_url:`data:${e.mimeType};base64,${e.data}`}}function OS(e,t){return{role:e,content:t}}async function*kS(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await AS(n,t);if(e.done||t?.aborted)break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async function AS(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}function jS(e){XS(e);let t=e.output??[];return IS({content:e.output_text??HS(t),toolCalls:zS(t),response:e,reasoning:GS(t)})}async function MS(e){let t={textParts:[],toolCalls:[],reasoning:qS()};for await(let n of kS(e.stream,e.signal))NS(t,n,e.onTextDelta);return t.completedResponse===void 0?IS({content:t.textParts.join(``),toolCalls:t.toolCalls,reasoning:t.reasoning}):FS(t)}function NS(e,t,n){if(t.type===`response.output_text.delta`){e.textParts.push(t.delta),n?.(t.delta);return}if(t.type===`response.completed`){e.completedResponse=t.response,JS(e.reasoning,GS(t.response.output??[]));return}if(t.type===`response.output_item.done`){PS(e,t.item);return}if(t.type===`response.error`||t.type===`response.failed`||t.type===`response.incomplete`)throw Error(`OpenAI Responses API failed: ${ZS(t)}`)}function PS(e,t){if(BS(t)){e.toolCalls.push(VS(t));return}KS(t)&&JS(e.reasoning,GS([t]))}function FS(e){let t=e.completedResponse;if(t===void 0)throw Error(`OpenAI Responses stream completed without response metadata`);XS(t);let n=t.output??[],r=zS(n),i=e.textParts.length>0?e.textParts.join(``):t.output_text??HS(n),a=GS(n);return JS(a,e.reasoning),IS({content:i,toolCalls:r.length>0?r:e.toolCalls,response:t,reasoning:a})}function IS(e){return{id:(0,d.randomUUID)(),role:`assistant`,content:e.content,state:`complete`,timestamp:new Date,...e.toolCalls.length>0&&{toolCalls:e.toolCalls},...e.response?.usage!==void 0&&{usage:RS(e.response.usage)},metadata:LS(e.response,e.reasoning)}}function LS(e,t){return{providerApiSurface:`responses`,...e?.id!==void 0&&{responseId:e.id},...e?.model!==void 0&&{model:e.model},...e?.status!==void 0&&{finishReason:e.status},...t.reasoningSummaryCount>0&&{reasoningSummaryCount:t.reasoningSummaryCount,reasoningSummaries:t.reasoningSummaries},...t.hasEncryptedReasoning&&{hasEncryptedReasoning:!0}}}function RS(e){return{promptTokens:e.input_tokens??0,completionTokens:e.output_tokens??0,totalTokens:e.total_tokens??0}}function zS(e){return e.filter(BS).map(e=>VS(e))}function BS(e){return e.type===`function_call`&&`call_id`in e&&`name`in e&&`arguments`in e}function VS(e){return{id:e.call_id,type:`function`,function:{name:e.name,arguments:e.arguments}}}function HS(e){return e.filter(WS).flatMap(e=>e.content).map(US).join(``)}function US(e){return e.type===`refusal`?e.refusal:e.text}function WS(e){return e.type===`message`&&`content`in e&&Array.isArray(e.content)}function GS(e){let t=qS();for(let n of e){if(!KS(n))continue;let e=n.summary?.map(e=>e.text).filter(YS)??[];t.reasoningSummaryCount+=e.length,t.reasoningSummaries.push(...e),t.hasEncryptedReasoning=t.hasEncryptedReasoning||!!n.encrypted_content}return t}function KS(e){return e.type===`reasoning`}function qS(){return{reasoningSummaryCount:0,reasoningSummaries:[],hasEncryptedReasoning:!1}}function JS(e,t){e.reasoningSummaryCount+=t.reasoningSummaryCount,e.reasoningSummaries.push(...t.reasoningSummaries),e.hasEncryptedReasoning=e.hasEncryptedReasoning||t.hasEncryptedReasoning}function YS(e){return e!==void 0}function XS(e){if(e.status===`failed`||e.status===`incomplete`)throw Error(`OpenAI Responses API failed: ${e.error?.message??e.status}`)}function ZS(e){return e.message??e.error?.message??e.response?.error?.message??`unknown error`}async function QS(e){let t=e.chatOptions?.onTextDelta??e.onTextDelta;if(t)return eC({...e,chatOptions:{...e.chatOptions,onTextDelta:t}});if(!e.client)throw Error(`OpenAI Responses client not available.`);try{let t=tC(e);e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`responses`,payloadKind:`request`,payload:t});let n=await e.client.responses.create(t,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`responses`,payloadKind:`response`,payload:n}),jS(n)}catch(e){let t=e.message||`OpenAI Responses API request failed`;throw Error(`OpenAI responses failed: ${t}`)}}async function*$S(e){let t={deltas:[]},n=e.chatOptions?.onTextDelta??e.onTextDelta,r=eC({...e,chatOptions:{...e.chatOptions,onTextDelta:e=>{n?.(e),aC(t,rC(e))}}}).then(e=>oC(t,e)).catch(e=>sC(t,dC(e)));yield*iC(t),await r}async function eC(e){if(!e.client)throw Error(`OpenAI Responses client not available.`);try{let t=nC(e);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`openai`,apiSurface:`responses`,payloadKind:`request`,payload:t}),MS({stream:eS(await e.client.responses.create(t,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0),{provider:`openai`,apiSurface:`responses`,onProviderNativeRawPayload:e.chatOptions?.onProviderNativeRawPayload}),onTextDelta:e.chatOptions?.onTextDelta,signal:e.chatOptions?.signal})}catch(e){let t=e.message||`OpenAI Responses streaming request failed`;throw Error(`OpenAI responses stream failed: ${t}`)}}function tC(e){let t=e.chatOptions?.model??e.providerOptions.defaultModel;if(!t)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let n=CS(e.chatOptions?.tools,e.providerOptions.strictTools),r=lS(e.providerOptions),i=xS(e.providerOptions.reasoning,e.chatOptions?.effort);return{model:t,input:SS(e.messages),...n!==void 0&&{tools:n,tool_choice:iS(e.chatOptions?.toolChoice)},...e.chatOptions?.temperature!==void 0&&{temperature:e.chatOptions.temperature},...e.chatOptions?.maxTokens!==void 0&&{max_output_tokens:e.chatOptions.maxTokens},...r!==void 0&&{text:r},...i!==void 0&&{reasoning:i},...e.providerOptions.includeEncryptedReasoning===!0&&{include:[`reasoning.encrypted_content`]},...e.providerOptions.store!==void 0&&{store:e.providerOptions.store}}}function nC(e){return{...tC(e),stream:!0}}function rC(e){return{id:(0,d.randomUUID)(),role:`assistant`,content:e,state:`complete`,timestamp:new Date,metadata:{providerApiSurface:`responses`,isStreamChunk:!0,isComplete:!1}}}async function*iC(e){for(;;){let t=e.deltas.shift();if(t!==void 0){yield t;continue}if(e.error!==void 0)throw e.error;if(e.finalMessage!==void 0){yield uC(e.finalMessage);return}await cC(e)}}function aC(e,t){e.deltas.push(t),lC(e)}function oC(e,t){e.finalMessage=t,lC(e)}function sC(e,t){e.error=t,lC(e)}function cC(e){return new Promise(t=>{e.wake=t})}function lC(e){e.wake?.(),e.wake=void 0}function uC(e){return{...e,content:``,metadata:{...e.metadata,isStreamChunk:!0,isComplete:!0}}}function dC(e){return e instanceof Error?e:Error(String(e))}var fC=class extends Fe{name=`openai`;version=`1.0.0`;client;options;apiSurface;payloadLogger;responseParser;onTextDelta;constructor(e){if(super(e.logger||Ae),this.options=e,this.apiSurface=pC(e),hC(this.apiSurface,e.nativeWebTools),e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client;else if(e.apiKey)this.client=new E.default({apiKey:e.apiKey,...e.organization&&{organization:e.organization},...e.timeout&&{timeout:e.timeout},...e.baseURL&&{baseURL:e.baseURL}});else throw Error(`Either OpenAI client, apiKey, or executor is required`);this.responseParser=new vS(this.logger),this.payloadLogger=e.payloadLogger}async chat(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`OpenAI Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}return this.apiSurface===`responses`?QS({client:this.client,messages:e,chatOptions:t,providerOptions:this.options,onTextDelta:this.onTextDelta}):dS({client:this.client,messages:e,chatOptions:t,providerOptions:this.options,payloadLogger:this.payloadLogger,responseParser:this.responseParser,onTextDelta:this.onTextDelta})}async*chatStream(e,t){if(this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`OpenAI Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}if(this.apiSurface===`responses`){yield*$S({client:this.client,messages:e,chatOptions:t,providerOptions:this.options,onTextDelta:this.onTextDelta});return}yield*fS({client:this.client,messages:e,chatOptions:t,providerOptions:this.options,payloadLogger:this.payloadLogger,responseParser:this.responseParser,onTextDelta:this.onTextDelta})}supportsTools(){return!0}getCapabilities(){let e=this.apiSurface===`chat-completions`?`openai-compatible-chat-completions`:`openai-responses`;return{functionCalling:{supported:!0},nativeWebTools:{webSearch:{supported:!1,enabled:!1,source:e,reason:mC(this.apiSurface,`search`)},webFetch:{supported:!1,enabled:!1,source:e,reason:mC(this.apiSurface,`fetch`)}}}}validateConfig(){return!!this.client&&!!this.options}async dispose(){}validateMessages(e){super.validateMessages(e);for(let t of e)if(t.role===`assistant`){let e=t;if(e.toolCalls&&e.toolCalls.length>0&&e.content===``)continue}}};function pC(e){return e.apiSurface===void 0?e.baseURL?`chat-completions`:`responses`:e.apiSurface}function mC(e,t){return e===`chat-completions`?`OpenAI-compatible Chat Completions endpoints support declared function tools, not provider-native web ${t}.`:`OpenAI Responses native web ${t} is not wired in this Robota provider version.`}function hC(e,t){if(!(t?.webSearch!==!0&&t?.webFetch!==!0))throw Error(`Provider openai native web search/fetch is not supported for apiSurface ${e} in this Robota provider version.`)}const gC=`https://platform.openai.com/docs/api-reference/models/list`;async function _C(e,t={}){if(!e.apiKey)return xC(`OpenAI model catalog refresh requires apiKey.`);let n=t.fetcher??SC,r=t.now??(()=>new Date),i=vC(e.baseURL);try{let t=await n(i,{headers:{Authorization:`Bearer ${e.apiKey}`}});if(!t.ok)return xC(bC(t));let a=yC(await t.json());return{status:`live`,entries:a,lastVerifiedAt:r().toISOString(),sourceUrl:gC,message:`${a.length} OpenAI model(s) discovered.`}}catch(e){return xC(e instanceof Error?e.message:String(e))}}function vC(e){return e?`${e.replace(/\/$/,``)}/models`:`https://api.openai.com/v1/models`}function yC(e){return(e.data??[]).map(e=>e.id).filter(e=>e!==void 0&&e.trim().length>0).map(e=>({id:e,displayName:e,lifecycle:`active`}))}function bC(e){let t=e.statusText?` ${e.statusText}`:``;return`OpenAI model catalog refresh failed: HTTP ${e.status}${t}`}function xC(e){return{status:`unavailable`,sourceUrl:gC,message:e}}async function SC(e,t){let n=await fetch(e,t);return{ok:n.ok,status:n.status,statusText:n.statusText,json:()=>n.json()}}const CC=`$ENV:OPENAI_API_KEY`,wC=[{kind:`api-key`,label:`OpenAI API keys`,url:`https://platform.openai.com/api-keys`,sourceUrl:`https://developers.openai.com/api/reference/overview#authentication`,lastVerifiedAt:`2026-05-08`}];function TC(){return{type:`openai`,displayName:`OpenAI`,description:`GPT series — general-purpose assistant. API key required.`,category:`cloud-paid`,defaults:{apiKey:CC},modelCatalog:{status:`unavailable`,sourceUrl:`https://platform.openai.com/docs/api-reference/models/list`,message:`OpenAI model availability should be discovered live from GET /v1/models.`},setupHelpLinks:wC,setupSteps:[{key:`model`,title:`OpenAI model`,required:!0},{key:`apiKey`,title:`OpenAI API key`,defaultValue:CC,masked:!0}],requiresApiKey:!0,probeProfile:tS,refreshModelCatalog:({profile:e})=>_C(e),modelCatalogCacheTtlSeconds:86400,createProvider:e=>{let t=DC(e.options),n=OC(e.options);return AC(e.baseURL,t,n),new fC({apiKey:EC(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},...t!==void 0&&{apiSurface:t},...n!==void 0&&{nativeWebTools:n},defaultModel:e.model})}}}function EC(e){if(!e)throw Error(`Provider openai requires apiKey`);return e}function DC(e){let t=e?.apiSurface;if(t===`responses`||t===`chat-completions`)return t}function OC(e){let t=kC(e?.nativeWebTools)??kC(e?.builtInWebTools);if(t!==void 0)return t}function kC(e){if(e==null||e instanceof Date||Array.isArray(e)||typeof e!=`object`)return;let t=e.webSearch,n=e.webFetch;return{...typeof t==`boolean`&&{webSearch:t},...typeof n==`boolean`&&{webFetch:n}}}function AC(e,t,n){if(!(n?.webSearch!==!0&&n?.webFetch!==!0))throw Error(e!==void 0||t===`chat-completions`?`Provider openai profile uses an OpenAI-compatible Chat Completions endpoint; native web search/fetch is not supported for this profile. Use Robota local WebSearch/WebFetch tools or a provider with documented hosted web support.`:`Provider openai native web search/fetch is not wired in this Robota provider version. Use Robota local WebSearch/WebFetch tools or a provider with documented hosted web support.`)}const jC=`deepseek-v4-flash`,MC=`$ENV:DEEPSEEK_API_KEY`,NC=`https://api.deepseek.com`;var PC=class extends Fe{name=`deepseek`;version=`1.0.0`;client;options;responseParser;onTextDelta;constructor(e){if(super(e.logger||Ae),this.options=e,e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client;else if(e.apiKey)this.client=new E.default({apiKey:e.apiKey,baseURL:e.baseURL??`https://api.deepseek.com`,...e.timeout!==void 0&&{timeout:e.timeout}});else throw Error(`Either DeepSeek client, apiKey, or executor is required`);this.responseParser=new zx({logger:this.logger})}async chat(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`DeepSeek Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}let n=this.getClient();try{let r=this.buildRequestParams(e,t),i=t?.onTextDelta??this.onTextDelta;if(i)return await this.chatWithStreamingAssembly({...r,stream:!0},{...t,onTextDelta:i});t?.onProviderNativeRawPayload?.({provider:`deepseek`,apiSurface:`chat-completions`,payloadKind:`request`,payload:r});let a=await n.chat.completions.create(r);return t?.onProviderNativeRawPayload?.({provider:`deepseek`,apiSurface:`chat-completions`,payloadKind:`response`,payload:a}),this.responseParser.parseResponse(a)}catch(e){let t=e.message||`DeepSeek API request failed`;throw Error(`DeepSeek chat failed: ${t}`)}}async*chatStream(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`DeepSeek Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}let n=this.getClient();try{let r=this.buildStreamingRequestParams(e,t);t?.onProviderNativeRawPayload?.({provider:`deepseek`,apiSurface:`chat-completions`,payloadKind:`request`,payload:r});let i=eS(await n.chat.completions.create(r),{provider:`deepseek`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t?.onProviderNativeRawPayload});for await(let e of this.streamWithAbort(i,t?.signal)){let t=this.responseParser.parseStreamingChunk(e);t&&(yield t)}}catch(e){let t=e.message||`DeepSeek API request failed`;throw Error(`DeepSeek stream failed: ${t}`)}}supportsTools(){return!0}getCapabilities(){return{functionCalling:{supported:!0},nativeWebTools:{webSearch:{supported:!1,enabled:!1,source:`openai-compatible-chat-completions`,reason:`DeepSeek OpenAI-compatible Chat Completions supports declared function tools, not provider-native web search.`},webFetch:{supported:!1,enabled:!1,source:`openai-compatible-chat-completions`,reason:`DeepSeek OpenAI-compatible Chat Completions supports declared function tools, not provider-native web fetch.`}}}}validateConfig(){return!!this.client&&!!this.options}async dispose(){}buildRequestParams(e,t){this.validateTools(t?.tools);let n=t?.model??this.options.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);return{model:n,messages:Px(e),...t?.temperature!==void 0&&{temperature:t.temperature},...t?.maxTokens!==void 0&&{max_tokens:t.maxTokens},...t?.tools&&{tools:Fx(t.tools),tool_choice:rS(t.toolChoice)},...this.options.thinking!==void 0&&{thinking:{type:this.options.thinking}},...this.options.reasoningEffort!==void 0&&{reasoning_effort:this.options.reasoningEffort}}}buildStreamingRequestParams(e,t){return{...this.buildRequestParams(e,t),stream:!0}}getClient(){if(!this.client)throw Error(`DeepSeek client not available. Either provide a client/apiKey or use an executor.`);return this.client}async chatWithStreamingAssembly(e,t){let n=this.getClient();try{return t.onProviderNativeRawPayload?.({provider:`deepseek`,apiSurface:`chat-completions`,payloadKind:`request`,payload:e}),Bx({stream:eS(await n.chat.completions.create(e,t.signal?{signal:t.signal}:void 0),{provider:`deepseek`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t.onProviderNativeRawPayload}),onTextDelta:t.onTextDelta,signal:t.signal})}catch(e){let t=e.message||`DeepSeek streaming request failed`;throw Error(`DeepSeek stream failed: ${t}`)}}};const FC=`https://api-docs.deepseek.com/quick_start/pricing`,IC=`2026-05-07`,LC=`2026-07-24`,RC=[{id:jC,displayName:`DeepSeek V4 Flash`,contextWindow:1e6,capabilities:[`tools`,`reasoning`,`json_schema`,`streaming`],lifecycle:`active`,sourceUrl:FC,lastVerifiedAt:IC},{id:`deepseek-v4-pro`,displayName:`DeepSeek V4 Pro`,contextWindow:1e6,capabilities:[`tools`,`reasoning`,`json_schema`,`streaming`],lifecycle:`active`,sourceUrl:FC,lastVerifiedAt:IC},{id:`deepseek-chat`,displayName:`DeepSeek Chat compatibility alias, deprecated ${LC}`,aliases:[jC],contextWindow:1e6,capabilities:[`tools`,`json_schema`,`streaming`],lifecycle:`deprecated`,sourceUrl:FC,lastVerifiedAt:IC},{id:`deepseek-reasoner`,displayName:`DeepSeek Reasoner compatibility alias, deprecated ${LC}`,aliases:[jC],contextWindow:1e6,capabilities:[`reasoning`,`json_schema`,`streaming`],lifecycle:`deprecated`,sourceUrl:FC,lastVerifiedAt:IC}];function zC(e){return RC.find(t=>t.id===e)}async function BC(e,t=WC){let n=await t(`${UC(e.baseURL??`https://api.deepseek.com`)}/models`,VC(e.apiKey));return n.ok?{status:`live`,sourceUrl:FC,lastVerifiedAt:IC,entries:((await n.json()).data??[]).map(e=>e.id).filter(e=>typeof e==`string`&&e.length>0).map(HC)}:{status:`unavailable`,sourceUrl:FC,message:`DeepSeek model refresh failed: HTTP ${n.status}`}}function VC(e){if(e)return{headers:{Authorization:`Bearer ${e}`}}}function HC(e){return zC(e)??{id:e,displayName:e,lifecycle:`active`,sourceUrl:`https://api-docs.deepseek.com/quick_start/pricing`,lastVerifiedAt:`2026-05-07`}}function UC(e){return e.replace(/\/$/,``)}async function WC(e,t){let n=await fetch(e,{...t?.headers!==void 0&&{headers:t.headers}});return{ok:n.ok,status:n.status,json:()=>n.json()}}const GC={status:`fallback`,sourceUrl:FC,lastVerifiedAt:IC,entries:RC},KC=[{kind:`api-key`,label:`DeepSeek API keys`,url:`https://platform.deepseek.com/api_keys`,sourceUrl:`https://api-docs.deepseek.com/`,lastVerifiedAt:`2026-05-08`}];function qC(){return{type:`deepseek`,displayName:`DeepSeek`,description:`High performance at low cost. API key required.`,category:`cloud-paid`,defaults:{model:jC,apiKey:MC,baseURL:NC},modelCatalog:GC,setupHelpLinks:KC,setupSteps:[{key:`baseURL`,title:`DeepSeek OpenAI-compatible base URL`,defaultValue:NC},{key:`model`,title:`DeepSeek model`,defaultValue:jC},{key:`apiKey`,title:`DeepSeek API key`,defaultValue:MC,masked:!0}],requiresApiKey:!0,probeProfile:tS,refreshModelCatalog:({profile:e})=>BC(e),modelCatalogCacheTtlSeconds:86400,createProvider:e=>{let t=YC(e.options);return new PC({apiKey:JC(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},...t.thinking!==void 0&&{thinking:t.thinking},...t.reasoningEffort!==void 0&&{reasoningEffort:t.reasoningEffort},defaultModel:e.model})}}}function JC(e){if(!e)throw Error(`Provider deepseek requires apiKey`);return e}function YC(e){let t=XC(e?.thinking),n=ZC(e?.reasoningEffort);return{...t!==void 0&&{thinking:t},...n!==void 0&&{reasoningEffort:n}}}function XC(e){if(e===!0)return`enabled`;if(e===!1)return`disabled`;if(e===`enabled`||e===`disabled`)return e;let t=QC(e)?.type;return t===`enabled`||t===`disabled`?t:void 0}function ZC(e){if(e===`low`||e===`medium`||e===`high`||e===`xhigh`||e===`max`)return e}function QC(e){if(!(e==null||e instanceof Date||Array.isArray(e)))return typeof e==`object`?e:void 0}function $C(e){return e?e.some(e=>e.type===`image_inline`||e.type===`image_uri`):!1}function ew(e){if(!e)return[];let t=[];for(let n of e)n.type===`image_inline`&&t.push({kind:`uri`,uri:`data:${n.mimeType};base64,${n.data}`,mimeType:n.mimeType});return t}function tw(e){let t=e.indexOf(`,`);if(t<0)return;let n=e.slice(0,t),r=e.slice(t+1);if(!n.endsWith(`;base64`))return;let i=n.replace(`data:`,``).replace(`;base64`,``).trim();if(!(i.length===0||r.trim().length===0))return{mimeType:i,data:r}}function nw(e){if(e.kind===`inline`)return e.mimeType.trim().length===0||e.data.trim().length===0?{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Inline image source requires non-empty mimeType and data.`}}:{ok:!0,value:{type:`image_inline`,mimeType:e.mimeType,data:e.data}};if(!e.uri.startsWith(`data:`))return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Google image provider supports only inline or data URI input sources.`}};let t=tw(e.uri);return t?{ok:!0,value:{type:`image_inline`,mimeType:t.mimeType,data:t.data}}:{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Data URI source must use base64 payload.`}}}function rw(e,t,n){return n&&n.length>0?n:e.some(e=>$C(e.parts))?[`TEXT`,`IMAGE`]:t&&t.length>0?t:[`TEXT`]}function iw(e,t){return!t||t.length===0?!0:t.includes(e)}function aw(e,t,n){dw(t);let r=rw(e,t.defaultResponseModalities,n?.google?.responseModalities);ow(n?.model,r,t);let i={responseModalities:r};return sw(i,n),cw(i,t,n),lw(i,t),uw(i,t),i}function ow(e,t,n){if(!(!e||!t.includes(`IMAGE`))&&!iw(e,n.imageCapableModels))throw Error(`Selected model "${e}" is not configured as image-capable for Google provider.`)}function sw(e,t){typeof t?.temperature==`number`&&(e.temperature=t.temperature),typeof t?.maxTokens==`number`&&(e.maxOutputTokens=t.maxTokens),typeof t?.google?.topP==`number`&&(e.topP=t.google.topP),typeof t?.google?.topK==`number`&&(e.topK=t.google.topK),typeof t?.google?.candidateCount==`number`&&(e.candidateCount=t.google.candidateCount),t?.google?.stopSequences&&t.google.stopSequences.length>0&&(e.stopSequences=t.google.stopSequences),t?.signal&&(e.abortSignal=t.signal)}function cw(e,t,n){let r=n?.google?.safetySettings??t.safetySettings;r&&r.length>0&&(e.safetySettings=r)}function lw(e,t){t.responseMimeType&&(e.responseMimeType=t.responseMimeType),t.responseSchema&&(e.responseMimeType=t.responseMimeType??`application/json`,e.responseSchema=t.responseSchema),t.responseJsonSchema&&(e.responseMimeType=t.responseMimeType??`application/json`,e.responseJsonSchema=t.responseJsonSchema)}function uw(e,t){t.thinkingConfig&&(e.thinkingConfig=t.thinkingConfig),t.toolConfig&&(e.toolConfig=t.toolConfig)}function dw(e){if(e.responseSchema&&e.responseJsonSchema)throw Error(`Gemini structured output options responseSchema and responseJsonSchema are mutually exclusive.`)}function fw(e){let t=[],n=e.parts??[];for(let e of n){if(e.type===`text`){t.push({text:e.text});continue}if(e.type===`image_inline`){t.push({inlineData:{mimeType:e.mimeType,data:e.data}});continue}throw Error(`Google provider does not support image URI parts directly: ${e.uri}`)}return t.length===0&&typeof e.content==`string`&&e.content.length>0&&t.push({text:e.content}),t}function pw(e){let t=[],n=[];for(let r of e){if(r.role===`user`){t.push({role:`user`,parts:fw(r)});continue}if(r.role===`assistant`){t.push(mw(r));continue}if(r.role===`tool`){t.push(hw(r));continue}let e=gw(r);e.length>0&&n.push(e)}return{contents:t,...n.length>0&&{systemInstruction:n.join(`
|
|
232
|
+
`)}}}function mw(e){let t=[],n=fw(e);for(let e of n)t.push(e);return t.length===0&&e.content&&t.push({text:e.content}),e.toolCalls&&e.toolCalls.length>0&&e.toolCalls.forEach(e=>{t.push({functionCall:{id:e.id,name:e.function.name,args:vw(e.function.arguments)}})}),{role:`model`,parts:t}}function hw(e){return{role:`user`,parts:[{functionResponse:{id:e.toolCallId,name:_w(e),response:yw(e.content)}}]}}function gw(e){let t=fw(e);if(t.length===0)return e.content;let n=[];for(let e of t){if(typeof e.text==`string`){n.push(e.text);continue}throw Error(`Google provider system instructions support only text parts.`)}return n.join(`
|
|
233
|
+
`)}function _w(e){let t=e.name?.trim();if(!t)throw Error(`Google provider tool message requires a function name.`);return t}function vw(e){let t=JSON.parse(e);if(!bw(t))throw Error(`Google provider tool call arguments must be a JSON object.`);return t}function yw(e){let t=e.trim();if(t.length===0)return{output:null};try{let e=JSON.parse(t);return bw(e)?e:{output:e}}catch{return{output:e}}}function bw(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const xw={string:D.Type.STRING,number:D.Type.NUMBER,integer:D.Type.INTEGER,boolean:D.Type.BOOLEAN,array:D.Type.ARRAY,object:D.Type.OBJECT};function Sw(e){return e.map(e=>({name:e.name,description:e.description,parameters:{type:D.Type.OBJECT,properties:ww(e.parameters.properties),required:e.parameters.required}}))}function Cw(e){return e===`auto`?{mode:D.FunctionCallingConfigMode.AUTO}:e===`none`?{mode:D.FunctionCallingConfigMode.NONE}:e===`required`?{mode:D.FunctionCallingConfigMode.ANY}:{mode:D.FunctionCallingConfigMode.ANY,allowedFunctionNames:[e.tool]}}function ww(e){let t={};for(let[n,r]of Object.entries(e))t[n]=Tw(r);return t}function Tw(e){let t={},n=Ew(e.type);return n&&(t.type=n),e.description&&(t.description=e.description),e.enum&&(t.enum=e.enum.map(String)),e.items&&(t.items=Tw(e.items)),e.properties&&(t.properties=ww(e.properties)),typeof e.minimum==`number`&&(t.minimum=e.minimum),typeof e.maximum==`number`&&(t.maximum=e.maximum),e.pattern&&(t.pattern=e.pattern),e.format&&(t.format=e.format),e.default!==void 0&&(t.default=e.default),t}function Ew(e){if(e!==`null`)return xw[e]}function Dw(){return`call_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Ow(e){let t=e.candidates?.[0];if(!t)throw Error(`No candidate in Gemini response`);let n=t.content;if(!n||!n.parts||n.parts.length===0)throw Error(`No content in Gemini response`);let r=kw(n.parts),i={id:(0,d.randomUUID)(),state:`complete`,role:`assistant`,content:r.textValues.length>0?r.textValues.join(``):null,parts:r.messageParts,timestamp:new Date};if(r.functionCalls.length>0){let e=i;e.toolCalls=r.functionCalls.map(e=>({id:e.id??Dw(),type:`function`,function:{name:Nw(e),arguments:JSON.stringify(e.args??{})}}))}let a=Mw(e);return a&&(i.metadata=a),i}function kw(e){let t=[],n=[],r=[];for(let i of e)Aw(i,t,n),jw(i,n),i.functionCall&&r.push(i.functionCall);return{textValues:t,messageParts:n,functionCalls:r}}function Aw(e,t,n){typeof e.text==`string`&&(t.push(e.text),n.push({type:`text`,text:e.text}))}function jw(e,t){!e.inlineData||typeof e.inlineData.data!=`string`||typeof e.inlineData.mimeType!=`string`||t.push({type:`image_inline`,data:e.inlineData.data,mimeType:e.inlineData.mimeType})}function Mw(e){if(!(!e.usageMetadata||typeof e.usageMetadata.promptTokenCount!=`number`||typeof e.usageMetadata.candidatesTokenCount!=`number`||typeof e.usageMetadata.totalTokenCount!=`number`))return{promptTokens:e.usageMetadata.promptTokenCount,completionTokens:e.usageMetadata.candidatesTokenCount,totalTokens:e.usageMetadata.totalTokenCount}}function Nw(e){if(!e.name||e.name.trim().length===0)throw Error(`Gemini function call is missing a function name.`);return e.name}async function Pw(e,t,n,r,i=`gemini`){let a=Lw(t,r),o=rw(n,t.defaultResponseModalities,r?.google?.responseModalities);if(r?.onTextDelta&&!o.includes(`IMAGE`))return Rw(e,t,n,r,i);let s=pw(n),c=aw(n,t,{...r,model:a}),l=Iw(a,s.contents,c,r,s.systemInstruction);zw(r,i,`request`,l);let u=await e.models.generateContent(l);zw(r,i,`response`,u);let d=Ow(u);if(o.includes(`IMAGE`)&&!$C(d.parts))throw Error(`Gemini response did not include an image part while IMAGE modality was requested.`);return d}async function*Fw(e,t,n,r,i=`gemini`){let a=Lw(t,r);if(rw(n,t.defaultResponseModalities,r?.google?.responseModalities).includes(`IMAGE`))throw Error(`Google provider does not support streaming image modality responses.`);let o=pw(n),s=aw(n,t,{...r,model:a}),c=Iw(a,o.contents,s,r,o.systemInstruction);zw(r,i,`request`,c);let l=await e.models.generateContentStream(c),u=0;for await(let e of l){zw(r,i,`stream_event`,e,u),u++;let t=Bw(e);t&&(r?.onTextDelta?.(t),yield{id:(0,d.randomUUID)(),role:`assistant`,content:t,state:`complete`,timestamp:new Date})}}function Iw(e,t,n,r,i){let a={...n};return r?.tools&&r.tools.length>0&&(a.tools=[{functionDeclarations:Sw(r.tools)}],r.toolChoice!==void 0&&(a.toolConfig={functionCallingConfig:Cw(r.toolChoice)})),i&&(a.systemInstruction=i),r?.responseFormat?.type===`json_schema`?(a.responseMimeType=`application/json`,a.responseSchema=r.responseFormat.schema):r?.responseFormat?.type===`json_object`&&(a.responseMimeType=`application/json`),{model:e,contents:t,config:a}}function Lw(e,t){let n=t?.model??e.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);return n}async function Rw(e,t,n,r,i=`gemini`){let a=[];for await(let o of Fw(e,t,n,r,i))typeof o.content==`string`&&a.push(o.content);let o=a.join(``);return{id:(0,d.randomUUID)(),role:`assistant`,content:o,parts:o.length>0?[{type:`text`,text:o}]:[],state:`complete`,timestamp:new Date}}function zw(e,t,n,r,i){e?.onProviderNativeRawPayload?.({provider:t,apiSurface:`gemini-generate-content`,payloadKind:n,...i!==void 0&&{sequence:i},payload:r})}function Bw(e){let t=e.text;return typeof t==`function`?t():t}async function Vw(e,t,n){try{let r=ew((await e(t,{model:n,google:{responseModalities:[`TEXT`,`IMAGE`]}})).parts);return r.length===0?{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:`Google image response did not include image output parts.`}}:{ok:!0,value:{outputs:r,model:n}}}catch(e){return{ok:!1,error:{code:`PROVIDER_UPSTREAM_ERROR`,message:e instanceof Error?e.message:`Google image request failed.`}}}}var Hw=class extends Fe{name=`gemini`;version=`1.0.0`;onTextDelta;client;options;constructor(e){super(),this.options=e,e.executor&&(this.executor=e.executor),this.executor||(this.client=new D.GoogleGenAI({apiKey:e.apiKey}))}async chat(e,t){if(this.validateMessages(e),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`Gemini Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Google client not available. Either provide apiKey or use an executor.`);try{return await Pw(this.client,this.options,e,this.withProviderCallbacks(t),this.name)}catch(e){let t=e instanceof Error?e.message:`Google API request failed`;throw Error(`Google chat failed: ${t}`)}}async*chatStream(e,t){if(this.validateMessages(e),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`Gemini Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Google client not available. Either provide apiKey or use an executor.`);try{yield*Fw(this.client,this.options,e,this.withProviderCallbacks(t),this.name)}catch(e){let t=e instanceof Error?e.message:`Google API request failed`;throw Error(`Google stream failed: ${t}`)}}async generateImage(e){if(e.prompt.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image generation requires a non-empty prompt.`}};if(e.model.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image generation requires a non-empty model.`}};let t={id:(0,d.randomUUID)(),role:`user`,content:e.prompt,state:`complete`,parts:[{type:`text`,text:e.prompt}],timestamp:new Date};return Vw(this.chat.bind(this),[t],e.model)}async editImage(e){if(e.prompt.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image edit requires a non-empty prompt.`}};if(e.model.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image edit requires a non-empty model.`}};let t=nw(e.image);if(!t.ok)return t;let n={id:(0,d.randomUUID)(),role:`user`,content:e.prompt,state:`complete`,parts:[t.value,{type:`text`,text:e.prompt}],timestamp:new Date};return Vw(this.chat.bind(this),[n],e.model)}async composeImage(e){if(e.prompt.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image compose requires a non-empty prompt.`}};if(e.model.trim().length===0)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image compose requires a non-empty model.`}};if(e.images.length<2)return{ok:!1,error:{code:`PROVIDER_INVALID_REQUEST`,message:`Image compose requires at least two input images.`}};let t=[];for(let n of e.images){let e=nw(n);if(!e.ok)return e;t.push(e.value)}t.push({type:`text`,text:e.prompt});let n={id:(0,d.randomUUID)(),role:`user`,content:e.prompt,state:`complete`,parts:t,timestamp:new Date};return Vw(this.chat.bind(this),[n],e.model)}supportsTools(){return!0}validateConfig(){return this.executor?this.executor.validateConfig():!!this.client&&!!this.options&&!!this.options.apiKey}async dispose(){}withProviderCallbacks(e){let t=e?.onTextDelta??this.onTextDelta;return t?{...e,onTextDelta:t}:e}};const Uw=`$ENV:GEMINI_API_KEY`,Ww=`gemini-3-flash-preview`,Gw=`https://ai.google.dev/api/models`,Kw=`2026-05-04`,qw=[{kind:`api-key`,label:`Google AI Studio API keys`,url:`https://aistudio.google.com/apikey`,sourceUrl:`https://ai.google.dev/gemini-api/docs/api-key`,lastVerifiedAt:`2026-05-08`}];function Jw(){return{type:`gemini`,aliases:[`google`],displayName:`Gemini`,description:`Google Gemini series — free tier available.`,category:`cloud-free`,defaults:{model:Ww,apiKey:Uw},modelCatalog:{status:`fallback`,sourceUrl:Gw,lastVerifiedAt:Kw,entries:[{id:Ww,displayName:`Gemini 3 Flash Preview`,capabilities:[`tools`,`vision`,`json_schema`,`reasoning`,`streaming`],lifecycle:`preview`,sourceUrl:Gw,lastVerifiedAt:Kw}]},setupHelpLinks:qw,setupSteps:[{key:`model`,title:`Gemini model`,defaultValue:Ww},{key:`apiKey`,title:`Gemini API key`,defaultValue:Uw,masked:!0}],requiresApiKey:!0,refreshModelCatalog:({profile:e})=>Zw(e),modelCatalogCacheTtlSeconds:86400,createProvider:e=>new Hw({apiKey:Yw(e.apiKey),defaultModel:e.model})}}function Yw(e){if(!e)throw Error(`Provider gemini requires apiKey`);return e}const Xw=`https://generativelanguage.googleapis.com/v1beta/models`;async function Zw(e,t=eT){let n=await t(e.apiKey?`${Xw}?key=${e.apiKey}`:Xw);if(!n.ok)return{status:`unavailable`,sourceUrl:Gw,message:`Gemini model refresh failed: HTTP ${n.status}`};let r=((await n.json()).models??[]).filter(Qw).map($w);return{status:`live`,sourceUrl:Gw,lastVerifiedAt:new Date().toISOString(),entries:r,message:`Fetched ${r.length} Gemini models`}}function Qw(e){return e.supportedGenerationMethods?.includes(`generateContent`)===!0}function $w(e){let t=e.name??``,n=t.startsWith(`models/`)?t.slice(7):t,r=t.includes(`preview`)?`preview`:`active`;return{id:n,displayName:e.displayName??n,lifecycle:r,sourceUrl:Gw,lastVerifiedAt:Kw}}async function eT(e,t){let n=await fetch(e);return{ok:n.ok,status:n.status,json:()=>n.json()}}const tT=`<|channel>`;function nT(e){let t=iT(e,{final:!0});return{rawText:e,visibleText:t.visibleParts.join(``),removedReasoning:t.removedReasoning}}var rT=class{buffer=``;emittedVisibleText=``;hasRemovedReasoning=!1;get rawText(){return this.buffer}get removedReasoning(){return this.hasRemovedReasoning}project(e){return e.length===0?``:(this.buffer+=e,this.projectVisibleText({final:!1}))}flush(){return this.projectVisibleText({final:!0})}projectVisibleText(e){let t=iT(this.buffer,e);this.hasRemovedReasoning=this.hasRemovedReasoning||t.removedReasoning;let n=t.visibleParts.join(``),r=n.slice(this.emittedVisibleText.length);return this.emittedVisibleText=n,r}};function iT(e,t){let n={visibleParts:[],removedReasoning:!1},r=0;for(;r<e.length;){let i=e.indexOf(tT,r);if(i===-1){aT(n,e.slice(r),t);break}aT(n,e.slice(r,i),t);let a=i+10,o=e.indexOf(`<channel|>`,a);if(o===-1){t.final&&(n.removedReasoning=!0);break}n.removedReasoning=!0,r=oT(e,a,o)}return n}function aT(e,t,n){if(t.length===0)return;if(n.final){e.visibleParts.push(t);return}let r=sT(t);e.visibleParts.push(t.slice(0,t.length-r))}function oT(e,t,n){let r=e.slice(t,n),i=n+10;if(r.trim().length===0){let t=e.slice(i).match(/^thought(?:\r?\n)*/);return t&&(i+=t[0].length),i}return r.split(/\r?\n/,1)[0]?.trim(),i}function sT(e){let t=Math.min(e.length,9);for(let n=t;n>0;--n)if(tT.startsWith(e.slice(e.length-n)))return n;return 0}function cT(e){return[`<`]}function lT(e,t,n){return e.indexOf(`<`,t)}function uT(e,t){return+!!e.endsWith(`<`)}function dT(e,t){let n=e.indexOf(`>`,t+1);if(n===-1)return;let r=e.slice(t,n+1),i=r.match(/^<\s*([A-Za-z][\w:-]*)([\s/>][\s\S]*?|)>$/);if(!i)return;let a=i[1]??``;return{tagName:a,normalizedName:a.toLowerCase(),rawOpenTag:r,attributes:hT(i[2]??``),openEnd:n+1,selfClosing:/\/\s*>$/.test(r)}}function fT(e,t,n){if(t.selfClosing)return{innerText:``,end:t.openEnd,complete:!0};let r=vT(e,t.tagName,t.openEnd);if(r===-1)return{innerText:e.slice(t.openEnd),end:n.final?e.length:t.openEnd-t.rawOpenTag.length,complete:!1};let i=e.indexOf(`>`,r);return{innerText:e.slice(t.openEnd,r),end:i===-1?e.length:i+1,complete:!0}}function pT(e,t){if(t.selfClosing)return{rawText:t.rawOpenTag,end:t.openEnd};let n=vT(e,t.tagName,t.openEnd);if(n===-1)return{rawText:t.rawOpenTag,end:t.openEnd};let r=e.indexOf(`>`,n),i=r===-1?e.length:r+1;return{rawText:e.slice(t.openEnd-t.rawOpenTag.length,i),end:i}}function mT(e,t){let n=yT(e);return t.find(e=>yT(e)===n)}function hT(e){let t={},n=/([A-Za-z_][\w:-]*)\s*=\s*(?:"([^"]*)"|'([^']*)')/g,r=n.exec(e);for(;r;){let i=r[1]??``;t[i]=gT(_T(r[2]??r[3]??``)),r=n.exec(e)}return t}function gT(e){return e===`true`?!0:e===`false`?!1:e===`null`?null:/^-?(?:0|[1-9]\d*)(?:\.\d+)?$/.test(e)?Number(e):e}function _T(e){return e.replace(/"/g,`"`).replace(/'/g,`'`).replace(/</g,`<`).replace(/>/g,`>`).replace(/&/g,`&`)}function vT(e,t,n){return e.toLowerCase().indexOf(`</${t.toLowerCase()}>`,n)}function yT(e){return e.replace(/[^a-z0-9]/gi,``).toLowerCase()}function bT(e,t){let n=xT(e,t);return n?[n]:[]}function xT(e,t){let n=e.indexOf(`>`),r=e.lastIndexOf(`</`);if(n===-1||r===-1||r<=n)return;let i=ST(e.slice(n+1,r).trim());if(!CT(i))return;let a=i.command,o=i.args;if(typeof a!=`string`||!CT(o))return;let s=mT(a,t);if(s)return{toolName:s,args:o}}function ST(e){try{return JSON.parse(e)}catch{return}}function CT(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function wT(e,t,n){let r=PT(),i=cT(t.toolNames),a=0;for(;a<e.length;){let o=lT(e,a,i);if(o===-1){AT(r,e.slice(a),n,i);break}AT(r,e.slice(a,o),n,i);let s=TT(e,o,r,t,n);if(!s.completed)break;a=s.cursor}return{visibleText:r.visibleParts.join(``),toolCalls:r.toolCalls,rawToolCallTextParts:r.rawToolCallTextParts,removedToolCallText:r.removedToolCallText}}function TT(e,t,n,r,i){let a=dT(e,t);if(!a)return ET(e,t,n,i);let o=mT(a.tagName,r.toolNames);return o?kT(e,a,o,n,r):DT(e,t,a,n,r,i)}function ET(e,t,n,r){return r.final?(n.visibleParts.push(e[t]??``),{cursor:t+1,completed:!0}):{cursor:t,completed:!1}}function DT(e,t,n,r,i,a){let o=fT(e,n,a);if(!o.complete&&!a.final)return{cursor:t,completed:!1};let s=e.slice(t,o.end),c=r.rawToolCallTextParts.length;return r.removedToolCallText=!0,MT(r,s,i),FT(r,OT(o,r,i)),r.rawToolCallTextParts.length===c&&r.rawToolCallTextParts.push(s),{cursor:o.end,completed:!0}}function OT(e,t,n){return wT(e.innerText,{...n,startCallIndex:IT(t,n)},{final:!0})}function kT(e,t,n,r,i){let a=pT(e,t);return jT(r,n,t.attributes,a.rawText,i),{cursor:a.end,completed:!0}}function AT(e,t,n,r){if(t.length===0)return;if(n.final){e.visibleParts.push(t);return}let i=uT(t,r);e.visibleParts.push(t.slice(0,t.length-i))}function jT(e,t,n,r,i){Object.keys(n).length!==0&&(e.toolCalls.push(NT(t,n,i,e)),e.rawToolCallTextParts.push(r),e.removedToolCallText=!0)}function MT(e,t,n){let r=bT(t,n.toolNames);for(let i of r)e.toolCalls.push(NT(i.toolName,i.args,n,e)),e.rawToolCallTextParts.push(t)}function NT(e,t,n,r){return{id:`${n.callIdPrefix??`gemma_call`}_${IT(r,n)}`,type:`function`,function:{name:e,arguments:JSON.stringify(t)}}}function PT(){return{visibleParts:[],toolCalls:[],rawToolCallTextParts:[],removedToolCallText:!1}}function FT(e,t){e.toolCalls.push(...t.toolCalls),e.rawToolCallTextParts.push(...t.rawToolCallTextParts),e.removedToolCallText=e.removedToolCallText||t.removedToolCallText}function IT(e,t){return(t.startCallIndex??0)+e.toolCalls.length}const LT=`<|"|>`;var RT=class{source;cursor=0;constructor(e){this.source=e}parse(){let e=this.parseObject();if(this.skipWhitespace(),this.cursor===this.source.length)return e}parseObject(){if(!this.consume(`{`))return;let e={};if(this.skipWhitespace(),this.consume(`}`))return e;for(;this.cursor<this.source.length;){let t=this.parseKey();if(!t||!this.consume(`:`))return;let n=this.parseValue();if(n===void 0)return;if(e[t]=n,this.skipWhitespace(),this.consume(`}`))return e;if(!this.consume(`,`))return}}parseArray(){if(!this.consume(`[`))return;let e=[];if(this.skipWhitespace(),this.consume(`]`))return e;for(;this.cursor<this.source.length;){let t=this.parseValue();if(t===void 0)return;if(e.push(t),this.skipWhitespace(),this.consume(`]`))return e;if(!this.consume(`,`))return}}parseValue(){return this.skipWhitespace(),this.source.startsWith(LT,this.cursor)?this.parseString():this.source.startsWith(`{`,this.cursor)?this.parseObject():this.source.startsWith(`[`,this.cursor)?this.parseArray():this.consumeLiteral(`true`)?!0:this.consumeLiteral(`false`)?!1:this.consumeLiteral(`null`)?null:this.parseNumber()}parseKey(){if(this.skipWhitespace(),this.source.startsWith(LT,this.cursor))return this.parseString();let e=/^[A-Za-z_][A-Za-z0-9_-]*/.exec(this.source.slice(this.cursor));if(e)return this.cursor+=e[0].length,this.skipWhitespace(),e[0]}parseString(){if(!this.consume(LT))return;let e=this.source.indexOf(LT,this.cursor);if(e===-1)return;let t=this.source.slice(this.cursor,e);return this.cursor=e+5,this.skipWhitespace(),t}parseNumber(){let e=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/.exec(this.source.slice(this.cursor));if(e)return this.cursor+=e[0].length,this.skipWhitespace(),Number(e[0])}consume(e){return this.skipWhitespace(),this.source.startsWith(e,this.cursor)?(this.cursor+=e.length,this.skipWhitespace(),!0):!1}consumeLiteral(e){return this.source.startsWith(e,this.cursor)?(this.cursor+=e.length,this.skipWhitespace(),!0):!1}skipWhitespace(){for(;/\s/.test(this.source[this.cursor]??``);)this.cursor+=1}};const zT=`<|tool_call>`,BT=`gemma_call`;function VT(e){if(!(!e||e.length===0))return new HT({toolNames:e.map(e=>e.name)})}var HT=class{options;buffer=``;emittedVisibleText=``;emittedRawToolCallText=``;emittedToolCallIds=new Set;constructor(e){this.options=e}project(e){return e.length===0?YT():(this.buffer+=e,this.projectVisibleText({final:!1}))}flush(){return this.projectVisibleText({final:!0})}projectVisibleText(e){let t=UT(this.buffer,this.options,e),n=t.visibleParts.join(``),r=n.slice(this.emittedVisibleText.length),i=t.rawToolCallTextParts.join(``),a=i.slice(this.emittedRawToolCallText.length);return this.emittedVisibleText=n,this.emittedRawToolCallText=i,{visibleText:r,toolCalls:t.toolCalls.filter(e=>this.emittedToolCallIds.has(e.id)?!1:(this.emittedToolCallIds.add(e.id),!0)),removedToolCallText:a.length>0,...a.length>0&&{rawToolCallText:a}}}};function UT(e,t,n){let r=WT(e,t,n),i=wT(r.visibleParts.join(``),{toolNames:t.toolNames,callIdPrefix:t.callIdPrefix??BT,startCallIndex:r.toolCalls.length},n);return{visibleParts:[i.visibleText],toolCalls:[...r.toolCalls,...i.toolCalls],rawToolCallTextParts:[...r.rawToolCallTextParts,...i.rawToolCallTextParts],removedToolCallText:r.removedToolCallText||i.removedToolCallText}}function WT(e,t,n){let r=KT(),i=new Set(t.toolNames),a=0,o=0;for(;a<e.length;){let s=e.indexOf(zT,a);if(s===-1){qT(r,e.slice(a),n);break}qT(r,e.slice(a,s),n);let c=s+12,l=e.indexOf(`<tool_call|>`,c);if(l===-1){n.final&&r.visibleParts.push(e.slice(s));break}let u=e.slice(s,l+12),d=GT(e.slice(c,l),i,t,o);d?(r.toolCalls.push(d),r.rawToolCallTextParts.push(u),r.removedToolCallText=!0,o+=1):r.visibleParts.push(u),a=l+12}return r}function GT(e,t,n,r){let i=e.trim();if(!i.startsWith(`call:`))return;let a=i.slice(5).trimStart(),o=a.indexOf(`{`);if(o<=0)return;let s=a.slice(0,o).trim();if(!t.has(s))return;let c=new RT(a.slice(o)).parse();if(c)return{id:`${n.callIdPrefix??BT}_${r}`,type:`function`,function:{name:s,arguments:JSON.stringify(c)}}}function KT(){return{visibleParts:[],toolCalls:[],rawToolCallTextParts:[],removedToolCallText:!1}}function qT(e,t,n){if(t.length===0)return;if(n.final){e.visibleParts.push(t);return}let r=JT(t);e.visibleParts.push(t.slice(0,t.length-r))}function JT(e){let t=Math.min(e.length,11);for(let n=t;n>0;--n)if(zT.startsWith(e.slice(e.length-n)))return n;return 0}function YT(){return{visibleText:``,toolCalls:[],removedToolCallText:!1}}function XT(e,t,n){let r=e.choices?.[0]?.message.content||``,i=new zx({logger:t,...n?.tools&&{toolCallTextProjector:VT(n.tools)}}).parseResponse(e),a=nT(i.content??``);return ZT({...i,content:a.visibleText},r,a.removedReasoning)}function ZT(e,t,n){return n?{...e,metadata:{...e.metadata??{},gemmaReasoningFiltered:!0,gemmaRawContent:t}}:e}function QT(e,t){return{id:(0,d.randomUUID)(),role:`assistant`,content:e,state:`complete`,timestamp:new Date,metadata:{isStreamChunk:!0,isComplete:t===`stop`||t===`tool_calls`}}}function $T(e,t){return{id:(0,d.randomUUID)(),role:`assistant`,content:``,toolCalls:e,state:`complete`,timestamp:new Date,metadata:{isStreamChunk:!0,isComplete:t===`stop`||t===`tool_calls`}}}function eE(e,t){return{reasoningProjector:new rT,responseParser:new zx({logger:e}),...t&&{toolCallProjector:VT(t)}}}function tE(e,t){let n=e.choices?.[0];if(!n)return[];let r=t.responseParser.parseStreamingChunk(e);return r&&De(r)&&r.toolCalls?.length?[r]:rE(n.delta.content||``,n.finish_reason,t)}function nE(e){let t=rE(``,null,e,!0),n=e.reasoningProjector.flush();return n.length>0&&t.push(QT(n,null)),t}function rE(e,t,n,r=!1){let i=r?n.toolCallProjector?.flush():n.toolCallProjector?.project(e),a=[];i?.toolCalls.length&&a.push($T(i.toolCalls,t));let o=i?.visibleText??e,s=n.reasoningProjector.project(o);return s.length>0&&a.push(QT(s,t)),a}var iE=class extends Fe{name=`gemma`;version=`1.0.0`;client;options;onTextDelta;constructor(e){if(super(e.logger||Ae),this.options=e,e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client;else if(e.apiKey)this.client=new E.default({apiKey:e.apiKey,...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout}});else throw Error(`Either Gemma client, apiKey, or executor is required`)}async chat(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`Gemma Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Gemma client not available. Either provide a client/apiKey or use an executor.`);try{let n=this.buildRequestParams(e,t),r=t?.onTextDelta??this.onTextDelta;if(r)return await this.chatWithStreamingAssembly({...n,stream:!0},{...t,onTextDelta:r});t?.onProviderNativeRawPayload?.({provider:`gemma`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let i=await this.client.chat.completions.create(n);return t?.onProviderNativeRawPayload?.({provider:`gemma`,apiSurface:`chat-completions`,payloadKind:`response`,payload:i}),XT(i,this.logger,t)}catch(e){let t=e.message||`Gemma API request failed`;throw Error(`Gemma chat failed: ${t}`)}}async*chatStream(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`Gemma Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Gemma client not available. Either provide a client/apiKey or use an executor.`);try{let n=this.buildStreamingRequestParams(e,t);t?.onProviderNativeRawPayload?.({provider:`gemma`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let r=await this.client.chat.completions.create(n),i=eE(this.logger,t?.tools),a=eS(r,{provider:`gemma`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t?.onProviderNativeRawPayload});for await(let e of this.streamWithAbort(a,t?.signal))for(let t of tE(e,i))yield t;for(let e of nE(i))yield e}catch(e){let t=e.message||`Gemma API request failed`;throw Error(`Gemma stream failed: ${t}`)}}supportsTools(){return!0}getCapabilities(){return{functionCalling:{supported:!0},nativeWebTools:{webSearch:{supported:!1,enabled:!1,source:`openai-compatible-chat-completions`,reason:`Gemma OpenAI-compatible endpoints support declared function tools, not provider-native web search.`},webFetch:{supported:!1,enabled:!1,source:`openai-compatible-chat-completions`,reason:`Gemma OpenAI-compatible endpoints support declared function tools, not provider-native web fetch.`}}}}validateConfig(){return!!this.client&&!!this.options}async dispose(){}validateMessages(e){super.validateMessages(e);for(let t of e)if(t.role===`assistant`){let e=t;if(e.toolCalls&&e.toolCalls.length>0&&e.content===``)continue}}buildRequestParams(e,t){let n=t?.model??this.options.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);return{model:n,messages:Px(e),...t?.temperature!==void 0&&{temperature:t.temperature},...t?.maxTokens!==void 0&&{max_tokens:t.maxTokens},...t?.tools&&{tools:Fx(t.tools),tool_choice:rS(t.toolChoice)}}}buildStreamingRequestParams(e,t){return{...this.buildRequestParams(e,t),stream:!0}}async chatWithStreamingAssembly(e,t){if(!this.client)throw Error(`Gemma client not available. Either provide a client/apiKey or use an executor.`);try{t.onProviderNativeRawPayload?.({provider:`gemma`,apiSurface:`chat-completions`,payloadKind:`request`,payload:e});let n=await this.client.chat.completions.create(e,t.signal?{signal:t.signal}:void 0),r=new rT;return ZT(await Bx({stream:eS(n,{provider:`gemma`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t.onProviderNativeRawPayload}),onTextDelta:t.onTextDelta,signal:t.signal,textProjector:e=>r.project(e),textProjectorFlush:()=>r.flush(),toolCallTextProjector:VT(t.tools)}),r.rawText,r.removedReasoning)}catch(e){let t=e.message||`Gemma streaming request failed`;throw Error(`Gemma stream failed: ${t}`)}}};const aE=`supergemma4-26b-uncensored-v2`,oE=`lm-studio`,sE=`http://localhost:1234/v1`,cE=`https://ai.google.dev/gemma`,lE=`2026-05-04`,uE=`https://lmstudio.ai/docs/developer`,dE=[{kind:`official`,label:`LM Studio local API documentation`,url:uE,sourceUrl:uE,lastVerifiedAt:`2026-05-08`}],fE={status:`fallback`,sourceUrl:cE,lastVerifiedAt:lE,entries:[{id:aE,displayName:`SuperGemma 4 26B`,capabilities:[`tools`,`streaming`],lifecycle:`active`,sourceUrl:cE,lastVerifiedAt:lE}]};function pE(){return{type:`gemma`,displayName:`Ollama / LM Studio / llama.cpp`,description:`Local models via LM Studio or Ollama. No API key needed.`,category:`local-free`,defaults:{model:aE,apiKey:oE,baseURL:sE},modelCatalog:fE,setupHelpLinks:dE,setupSteps:[{key:`baseURL`,title:`Gemma OpenAI-compatible base URL`,defaultValue:sE},{key:`model`,title:`Gemma model`,defaultValue:aE},{key:`apiKey`,title:`Gemma OpenAI-compatible API key`,defaultValue:oE,masked:!0}],requiresApiKey:!0,probeProfile:tS,createProvider:e=>new iE({apiKey:mE(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},defaultModel:e.model})}}function mE(e){if(!e)throw Error(`Provider gemma requires apiKey`);return e}const hE={singapore:`https://dashscope-intl.aliyuncs.com/compatible-mode/v1`,usVirginia:`https://dashscope-us.aliyuncs.com/compatible-mode/v1`,beijing:`https://dashscope.aliyuncs.com/compatible-mode/v1`,hongKong:`https://cn-hongkong.dashscope.aliyuncs.com/compatible-mode/v1`},gE={singapore:`https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1`,usVirginia:`https://dashscope-us.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1`,beijing:`https://dashscope.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1`},_E=`qwen-plus`,vE=`$ENV:DASHSCOPE_API_KEY`,yE=hE.singapore,bE=gE.singapore,xE=`https://www.alibabacloud.com/help/en/model-studio/compatibility-of-openai-with-dashscope`,SE=`2026-05-04`,CE=`qwen-responses`;function wE(e){let t=e.builtInWebTools,n=t?.webSearch===!0||t?.webFetch===!0,r=t?.webFetch===!0;return{functionCalling:{supported:!0},nativeWebTools:{webSearch:n?{supported:!0,enabled:!0,source:CE}:{supported:!0,enabled:!1,source:CE,reason:`Enable builtInWebTools.webSearch or builtInWebTools.webFetch.`},webFetch:r?{supported:!0,enabled:!0,source:CE}:{supported:!0,enabled:!1,source:CE,reason:`Enable builtInWebTools.webFetch.`}}}}async function TE(e,t,n){try{return n.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`chat-completions`,payloadKind:`request`,payload:t}),Bx({stream:eS(await e.chat.completions.create(t,n.signal?{signal:n.signal}:void 0),{provider:`qwen`,apiSurface:`chat-completions`,onProviderNativeRawPayload:n.onProviderNativeRawPayload}),onTextDelta:n.onTextDelta,signal:n.signal})}catch(e){let t=e.message||`Qwen streaming request failed`;throw Error(`Qwen stream failed: ${t}`)}}function EE(e){let t=[];return(e?.webSearch===!0||e?.webFetch===!0)&&t.push(`web_search`),e?.webFetch===!0&&t.push(`web_extractor`),t}function DE(e){return EE(e).length>0}function OE(e){return e.flatMap(e=>jE(e))}function kE(e,t){let n=[...e.map(e=>({type:e})),...AE(t)];return n.length>0?n:void 0}function AE(e){return e?.map(e=>({type:`function`,name:e.name,description:e.description,parameters:e.parameters}))??[]}function jE(e){return e.role===`user`?[NE(`user`,e.content)]:e.role===`system`?[NE(`system`,e.content)]:e.role===`tool`?[{type:`function_call_output`,call_id:e.toolCallId,output:e.content||``}]:ME(e)}function ME(e){let t=[];e.content&&e.content.length>0&&t.push(NE(`assistant`,e.content));for(let n of e.toolCalls??[])t.push({type:`function_call`,call_id:n.id,name:n.function.name,arguments:n.function.arguments});return t.length===0&&t.push(NE(`assistant`,``)),t}function NE(e,t){return{role:e,content:t??``}}async function*PE(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await FE(n,t);if(e.done||t?.aborted)break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async function FE(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}function IE(e,t){let n=e.output??[],r=WE(n,e.usage),i=YE(n);return VE({content:e.output_text??QE(n),toolCalls:i,response:e,usage:r,enabledBuiltInTools:t.enabledBuiltInTools})}async function LE(e){let t={textParts:[],toolCalls:[],usage:qE()};for await(let n of PE(e.stream,e.signal))RE(t,n,e.onTextDelta);return t.completedResponse===void 0?VE({content:t.textParts.join(``),toolCalls:t.toolCalls,usage:t.usage,enabledBuiltInTools:e.enabledBuiltInTools}):zE(t,e.enabledBuiltInTools)}function RE(e,t,n){if(t.type===`response.output_text.delta`){e.textParts.push(t.delta),n?.(t.delta);return}if(t.type===`response.completed`){e.completedResponse=t.response,KE(e.usage,WE(t.response.output??[],t.response.usage));return}if(t.type===`response.output_item.done`){BE(e,t.item);return}if(t.type===`response.web_search_call.completed`){e.usage.webSearchCalls+=1;return}if(t.type===`response.error`||t.type===`response.failed`)throw Error(`Qwen Responses API failed: ${$E(t)}`)}function zE(e,t){let n=e.completedResponse;if(n===void 0)throw Error(`Qwen Responses stream completed without response metadata`);let r=n.output??[],i=YE(r),a=e.textParts.length>0?e.textParts.join(``):n.output_text??QE(r),o=WE(r,n.usage);return KE(o,e.usage),VE({content:a,toolCalls:i.length>0?i:e.toolCalls,response:n,usage:o,enabledBuiltInTools:t})}function BE(e,t){if(t.type===`function_call`){XE(t)&&e.toolCalls.push(ZE(t));return}KE(e.usage,WE([t],void 0))}function VE(e){return{id:(0,d.randomUUID)(),role:`assistant`,content:e.content,state:`complete`,timestamp:new Date,...e.toolCalls.length>0&&{toolCalls:e.toolCalls},...e.response?.usage!==void 0&&{usage:{promptTokens:e.response.usage.input_tokens??0,completionTokens:e.response.usage.output_tokens??0,totalTokens:e.response.usage.total_tokens??0}},metadata:HE(e.enabledBuiltInTools,e.usage,e.response)}}function HE(e,t,n){let r=UE(t);return{providerToolMode:`qwen_responses`,providerBuiltInToolsEnabled:[...e],...r.length>0&&{providerBuiltInToolsUsed:r},qwenWebSearchCalls:t.webSearchCalls,qwenWebExtractorCalls:t.webExtractorCalls,...t.unsupportedToolTypes.size>0&&{qwenUnsupportedProviderToolTypes:[...t.unsupportedToolTypes].sort()},...n?.id!==void 0&&{responseId:n.id},...n?.model!==void 0&&{model:n.model},...n?.status!==void 0&&{finishReason:n.status}}}function UE(e){let t=[];return e.webSearchCalls>0&&t.push(`web_search`),e.webExtractorCalls>0&&t.push(`web_extractor`),t}function WE(e,t){let n=qE();for(let t of e)t.type===`web_search_call`?n.webSearchCalls+=1:t.type===`web_extractor_call`?n.webExtractorCalls+=1:JE(t.type)&&n.unsupportedToolTypes.add(t.type);return GE(n,t),n}function GE(e,t){let n=t?.x_tools;if(n!==void 0){e.webSearchCalls=Math.max(e.webSearchCalls,n.web_search?.count??0),e.webExtractorCalls=Math.max(e.webExtractorCalls,n.web_extractor?.count??0);for(let t of Object.keys(n))t!==`web_search`&&t!==`web_extractor`&&e.unsupportedToolTypes.add(t)}}function KE(e,t){e.webSearchCalls=Math.max(e.webSearchCalls,t.webSearchCalls),e.webExtractorCalls=Math.max(e.webExtractorCalls,t.webExtractorCalls);for(let n of t.unsupportedToolTypes)e.unsupportedToolTypes.add(n)}function qE(){return{webSearchCalls:0,webExtractorCalls:0,unsupportedToolTypes:new Set}}function JE(e){return e.endsWith(`_call`)&&e!==`function_call`}function YE(e){return e.filter(XE).map(e=>ZE(e))}function XE(e){return e.type===`function_call`&&`call_id`in e&&`name`in e&&`arguments`in e}function ZE(e){return{id:e.call_id,type:`function`,function:{name:e.name,arguments:e.arguments}}}function QE(e){return e.filter(e=>e.type===`message`).flatMap(e=>e.content).map(e=>e.text).join(``)}function $E(e){return e.message??e.error?.message??e.response?.error?.message??`unknown error`}async function eD(e){let t=e.chatOptions?.onTextDelta??e.onTextDelta;if(t)return nD({...e,chatOptions:{...e.chatOptions,onTextDelta:t}});if(!e.client)throw Error(`Qwen Responses client not available for built-in web tools.`);try{let t=rD(e);e.chatOptions?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`responses`,payloadKind:`request`,payload:t});let n=await e.client.responses.create(t,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`responses`,payloadKind:`response`,payload:n}),IE(n,{enabledBuiltInTools:EE(e.builtInWebTools)})}catch(e){let t=e.message||`Qwen Responses API request failed`;throw Error(`Qwen responses failed: ${t}`)}}async function*tD(e){let t=[],n=await nD({...e,chatOptions:{...e.chatOptions,onTextDelta:n=>{e.chatOptions?.onTextDelta?.(n),t.push(aD(n))}}});for(let e of t)yield e;yield{...n,content:``,metadata:{...n.metadata,isStreamChunk:!0,isComplete:!0}}}async function nD(e){if(!e.client)throw Error(`Qwen Responses client not available for built-in web tools.`);try{let t=iD(e);return e.chatOptions?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`responses`,payloadKind:`request`,payload:t}),LE({stream:eS(await e.client.responses.create(t,e.chatOptions?.signal?{signal:e.chatOptions.signal}:void 0),{provider:`qwen`,apiSurface:`responses`,onProviderNativeRawPayload:e.chatOptions?.onProviderNativeRawPayload}),enabledBuiltInTools:EE(e.builtInWebTools),onTextDelta:e.chatOptions?.onTextDelta,signal:e.chatOptions?.signal})}catch(e){let t=e.message||`Qwen Responses streaming request failed`;throw Error(`Qwen responses stream failed: ${t}`)}}function rD(e){let t=e.chatOptions?.model??e.defaultModel;if(!t)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);let n=kE(EE(e.builtInWebTools),e.chatOptions?.tools);return{model:t,input:OE(e.messages),...n!==void 0&&{tools:n},...n!==void 0&&e.chatOptions?.toolChoice!==void 0&&{tool_choice:iS(e.chatOptions.toolChoice)},...e.chatOptions?.temperature!==void 0&&{temperature:e.chatOptions.temperature},...e.chatOptions?.maxTokens!==void 0&&{max_output_tokens:e.chatOptions.maxTokens},...e.builtInWebTools?.enableThinking!==void 0&&{enable_thinking:e.builtInWebTools.enableThinking}}}function iD(e){return{...rD(e),stream:!0}}function aD(e){return{id:(0,d.randomUUID)(),role:`assistant`,content:e,state:`complete`,timestamp:new Date,metadata:{isStreamChunk:!0,isComplete:!1}}}var oD=class extends Fe{name=`qwen`;version=`1.0.0`;client;responsesClient;options;responseParser;onTextDelta;constructor(e){if(super(e.logger||Ae),this.options=e,e.executor&&(this.executor=e.executor),!this.executor)if(e.client)this.client=e.client,this.responsesClient=e.client;else if(e.apiKey)this.client=new E.default({apiKey:e.apiKey,baseURL:e.baseURL??yE,...e.timeout!==void 0&&{timeout:e.timeout}}),this.responsesClient=new E.default({apiKey:e.apiKey,baseURL:e.responsesBaseURL??bE,...e.timeout!==void 0&&{timeout:e.timeout}});else throw Error(`Either Qwen client, apiKey, or executor is required`);this.responseParser=new zx({logger:this.logger})}async chat(e,t){return this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor?this.chatViaExecutor(e,t):this.shouldUseResponsesApi()?this.chatViaResponsesApi(e,t,this.getResponsesClient()):this.chatViaChatCompletions(e,t,this.getClient())}async chatViaExecutor(e,t){try{return await this.executeViaExecutorOrDirect(e,t)}catch(e){throw this.logger.error(`Qwen Provider executor chat error:`,e instanceof Error?e.message:String(e)),e}}async chatViaResponsesApi(e,t,n){return this.validateTools(t?.tools),eD({client:n,messages:e,chatOptions:t,defaultModel:this.options.defaultModel,builtInWebTools:this.options.builtInWebTools,onTextDelta:this.onTextDelta})}async chatViaChatCompletions(e,t,n){try{let r=this.buildRequestParams(e,t),i=t?.onTextDelta??this.onTextDelta;if(i)return TE(n,{...r,stream:!0},{...t,onTextDelta:i});t?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`chat-completions`,payloadKind:`request`,payload:r});let a=await n.chat.completions.create(r);return t?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`chat-completions`,payloadKind:`response`,payload:a}),this.responseParser.parseResponse(a)}catch(e){let t=e.message||`Qwen API request failed`;throw Error(`Qwen chat failed: ${t}`)}}async*chatStream(e,t){if(this.validateMessages(e),this.validateNativeWebTools(t?.nativeWebTools),this.executor)try{yield*this.executeStreamViaExecutorOrDirect(e,t);return}catch(e){throw this.logger.error(`Qwen Provider executor stream error:`,e instanceof Error?e.message:String(e)),e}if(!this.client)throw Error(`Qwen client not available. Either provide a client/apiKey or use an executor.`);if(this.shouldUseResponsesApi()){this.validateTools(t?.tools),yield*tD({client:this.responsesClient,messages:e,chatOptions:t,defaultModel:this.options.defaultModel,builtInWebTools:this.options.builtInWebTools,onTextDelta:this.onTextDelta});return}try{let n=this.buildStreamingRequestParams(e,t);t?.onProviderNativeRawPayload?.({provider:`qwen`,apiSurface:`chat-completions`,payloadKind:`request`,payload:n});let r=eS(await this.client.chat.completions.create(n),{provider:`qwen`,apiSurface:`chat-completions`,onProviderNativeRawPayload:t?.onProviderNativeRawPayload});for await(let e of this.streamWithAbort(r,t?.signal)){let t=this.responseParser.parseStreamingChunk(e);t&&(yield t)}}catch(e){let t=e.message||`Qwen API request failed`;throw Error(`Qwen stream failed: ${t}`)}}supportsTools(){return!0}getCapabilities(){return wE(this.options)}validateConfig(){return!!this.client&&!!this.options&&(!this.shouldUseResponsesApi()||!!this.responsesClient)}async dispose(){}buildRequestParams(e,t){this.validateTools(t?.tools);let n=t?.model??this.options.defaultModel;if(!n)throw Error(`Model is required in chat options. Please specify a model in defaultModel configuration.`);return{model:n,messages:Px(e),...t?.temperature!==void 0&&{temperature:t.temperature},...t?.maxTokens!==void 0&&{max_tokens:t.maxTokens},...t?.tools&&{tools:Fx(t.tools),tool_choice:rS(t.toolChoice)}}}buildStreamingRequestParams(e,t){return{...this.buildRequestParams(e,t),stream:!0}}shouldUseResponsesApi(){return DE(this.options.builtInWebTools)}getClient(){if(!this.client)throw Error(`Qwen client not available. Either provide a client/apiKey or use an executor.`);return this.client}getResponsesClient(){if(!this.responsesClient)throw Error(`Qwen Responses client not available for built-in web tools.`);return this.responsesClient}};async function sD(e,t=dD){let n=await t(`${uD(e.baseURL??yE)}/models`,cD(e.apiKey));if(!n.ok)return{status:`unavailable`,sourceUrl:xE,message:`Qwen model refresh failed: HTTP ${n.status}`};let r=((await n.json()).data??[]).map(e=>e.id).filter(e=>typeof e==`string`&&e.length>0).map(lD);return{status:`live`,sourceUrl:xE,lastVerifiedAt:SE,entries:r,message:`Loaded ${r.length} models from Qwen API`}}function cD(e){if(e)return{headers:{Authorization:`Bearer ${e}`}}}function lD(e){return{id:e,displayName:e,lifecycle:`active`,sourceUrl:xE,lastVerifiedAt:SE}}function uD(e){return e.replace(/\/$/,``)}async function dD(e,t){let n=await fetch(e,{...t?.headers!==void 0&&{headers:t.headers}});return{ok:n.ok,status:n.status,json:()=>n.json()}}const fD=[{kind:`api-key`,label:`Alibaba Cloud Model Studio API keys`,url:`https://modelstudio.console.alibabacloud.com/?tab=api#/api-key`,sourceUrl:`https://www.alibabacloud.com/help/en/model-studio/get-api-key`,lastVerifiedAt:`2026-05-08`}],pD={status:`fallback`,sourceUrl:xE,lastVerifiedAt:SE,entries:[{id:_E,displayName:`Qwen Plus`,capabilities:[`tools`,`reasoning`,`native_web`,`streaming`],lifecycle:`active`,sourceUrl:xE,lastVerifiedAt:SE},{id:`qwen-max`,displayName:`Qwen Max`,capabilities:[`tools`,`reasoning`,`native_web`,`streaming`],lifecycle:`active`,sourceUrl:xE,lastVerifiedAt:SE},{id:`qwen-flash`,displayName:`Qwen Flash`,capabilities:[`tools`,`native_web`,`streaming`],lifecycle:`active`,sourceUrl:xE,lastVerifiedAt:SE}]};function mD(){return{type:`qwen`,displayName:`Qwen`,description:`Alibaba Cloud Qwen series. API key required.`,category:`cloud-paid`,defaults:{model:_E,apiKey:vE,baseURL:yE},modelCatalog:pD,refreshModelCatalog:({profile:e})=>sD(e),modelCatalogCacheTtlSeconds:86400,setupHelpLinks:fD,setupSteps:[{key:`baseURL`,title:`Qwen OpenAI-compatible base URL`,defaultValue:yE},{key:`model`,title:`Qwen model`,defaultValue:_E},{key:`apiKey`,title:`Qwen Model Studio API key`,defaultValue:vE,masked:!0}],requiresApiKey:!0,probeProfile:tS,createProvider:e=>{let t=gD(e.options);return new oD({apiKey:hD(e.apiKey),...e.baseURL!==void 0&&{baseURL:e.baseURL},...t.responsesBaseURL!==void 0&&{responsesBaseURL:t.responsesBaseURL},...e.timeout!==void 0&&{timeout:e.timeout},...t.builtInWebTools!==void 0&&{builtInWebTools:t.builtInWebTools},defaultModel:e.model})}}}function hD(e){if(!e)throw Error(`Provider qwen requires apiKey`);return e}function gD(e){let t=_D(vD(e?.builtInWebTools)),n=bD(e?.responsesBaseURL);return{...n!==void 0&&{responsesBaseURL:n},...t!==void 0&&{builtInWebTools:t}}}function _D(e){if(e!==void 0)return{...yD(e.webSearch)!==void 0&&{webSearch:yD(e.webSearch)},...yD(e.webFetch)!==void 0&&{webFetch:yD(e.webFetch)},...yD(e.enableThinking)!==void 0&&{enableThinking:yD(e.enableThinking)}}}function vD(e){if(!(e==null||e instanceof Date||Array.isArray(e)))return typeof e==`object`?e:void 0}function yD(e){return typeof e==`boolean`?e:void 0}function bD(e){return typeof e==`string`&&e.length>0?e:void 0}function xD(){return[jx(),TC(),Jw(),pE(),mD(),qC()]}const SD=`general-purpose`;function CD(e){let t=[],n=``,r,i=!1;for(let a of e){if(i){n+=a,i=!1;continue}if(r&&a===`\\`){i=!0;continue}if(r){a===r?r=void 0:n+=a;continue}if(a===`"`||a===`'`){r=a;continue}if(/\s/.test(a)){n.length>0&&(t.push(n),n=``);continue}n+=a}return n.length>0&&t.push(n),t}function wD(e){let t=[],n,r,i;for(let a=0;a<e.length;a+=1){let o=e[a];if(o!==`--background`){if(o===`--agent`||o===`--type`||o===`-a`){n=e[a+1],a+=1;continue}if(o===`--model`){r=e[a+1],a+=1;continue}if(o===`--isolation`){let t=e[a+1];(t===`none`||t===`worktree`)&&(i=t),a+=1;continue}o!==void 0&&t.push(o)}}return{positional:t,...n?{agentType:n}:{},...r?{model:r}:{},...i?{isolation:i}:{}}}function TD(e,t,n,r){return{agentType:t,label:n,mode:`background`,prompt:r,...e.model?{model:e.model}:{},...e.isolation?{isolation:e.isolation}:{}}}function ED(e,t){let n=wD(e),[r,...i]=n.positional,a=n.agentType??SD,o=n.positional;!n.agentType&&r&&t.has(r)&&(a=r,o=i);let s=o.join(` `).trim();if(s)return TD(n,a,a,s)}function DD(e,t){let n=wD(e);return n.positional.map(e=>OD(e,n,t)).filter(e=>e!==void 0)}function OD(e,t,n){let r=e.indexOf(`=`);if(r>0)return kD(e.slice(0,r),e.slice(r+1),t,n);let i=e.indexOf(`:`);if(i<=0||i===e.length-1)return;let a=e.slice(0,i),o=e.slice(i+1);return TD(t,t.agentType??(n.has(a)?a:SD),a,o)}function kD(e,t,n,r){let i=t.indexOf(`:`);if(i===-1)return TD(n,n.agentType??(r.has(e)?e:SD),e,t);if(!(i===0||i===t.length-1))return TD(n,t.slice(0,i),e,t.slice(i+1))}function AD(e){return e instanceof Error?e.message:String(e)}function jD(e){return new Set(e.listAgentDefinitions().map(e=>e.name))}function MD(e,t){let n=e.listAgentDefinitions();if(!n.some(e=>e.name===t))return{message:`Unknown agent type: ${t}\nAvailable agents: ${n.map(e=>e.name).join(`, `)}`,success:!1}}async function ND(e,t){let n=MD(e,t.agentType);if(n)return n;try{return{state:await e.spawnAgentJob(t)}}catch(e){return{message:AD(e),success:!1}}}function PD(){return{message:``,effects:[{type:`agent-switcher-requested`}],success:!0}}async function FD(e){let t=e.listAgentDefinitions(),n=e.listAgentJobs();return{message:[`Available agents:`,...t.map(e=>` ${e.name} - ${e.description}`),``,n.length===0?`No active agent jobs.`:`Agent jobs:`,...n.map(e=>` ${ID(e)}`)].join(`
|
|
234
|
+
`),success:!0,data:{agents:t.length,jobs:n.length}}}function ID(e){let t=[e.worktreePath?`worktree=${e.worktreePath}`:void 0,e.branchName?`branch=${e.branchName}`:void 0].filter(e=>e!==void 0),n=t.length>0?` ${t.join(` `)}`:``;return`${e.id} [${e.status}${n}] ${e.label} - ${e.promptPreview}`}async function LD(e,t){let n=ED(t,jD(e));if(!n)return{message:`Usage: agent run [AGENT_NAME] [--agent AGENT_NAME] PROMPT`,success:!1};let r=await ND(e,n);if(`success`in r)return r;let{state:i}=r;return{message:`Started agent job: ${i.id}`,success:!0,data:{agentId:i.id,status:i.status}}}async function RD(e,t){let n=t.includes(`--wait`)||!t.includes(`--detach`),r=DD(t.filter(e=>e!==`--wait`&&e!==`--detach`),jD(e));if(r.length===0)return{message:`Usage: agent parallel [--wait|--detach] LABEL:"PROMPT" [LABEL=AGENT_NAME:"PROMPT"]`,success:!1};let i=r.map(t=>MD(e,t.agentType)).find(e=>e!==void 0);if(i)return i;let a;try{a=await Promise.all(r.map(t=>e.spawnAgentJob(t)))}catch(e){return{message:AD(e),success:!1}}let o=e.createBackgroundJobGroup({waitPolicy:`wait_all`,taskIds:a.map(e=>e.id),label:`agent parallel`});if(n){let t=iu(await e.waitBackgroundJobGroup(o.id));return{message:GD(t),success:!0,data:{agentIds:a.map(e=>e.id),groupId:o.id,summary:t}}}return{message:[`Started agent jobs:`,...a.map(e=>`${e.label}: ${e.id}`)].join(`
|
|
235
|
+
`),success:!0,data:{agentIds:a.map(e=>e.id),groupId:o.id}}}async function zD(e,t){let[n]=t;if(!n)return{message:`Usage: agent wait GROUP_ID`,success:!1};let r=iu(await e.waitBackgroundJobGroup(n));return{message:GD(r),success:!0,data:{groupId:n,summary:r}}}async function BD(e,t){let[n,r]=t;if(!n)return{message:`Usage: agent read AGENT_ID [OFFSET]`,success:!1};let i=r?{offset:Number.parseInt(r,10)}:void 0,a=await e.readBackgroundTaskLog(n,i),o=a.nextCursor?`\nNext offset: ${a.nextCursor.offset}`:``;return{message:a.lines.length>0?`${a.lines.join(`
|
|
236
|
+
`)}${o}`:`No log lines: ${n}`,success:!0,data:{agentId:n,nextOffset:a.nextCursor?.offset}}}async function VD(e,t){let[n,...r]=t,i=r.join(` `).trim();return!n||!i?{message:`Usage: agent send AGENT_ID PROMPT`,success:!1}:(await e.sendAgentJob(n,i),{message:`Sent input to agent job: ${n}`,success:!0,data:{agentId:n}})}async function HD(e,t){let[n,...r]=t;return n?(await e.cancelAgentJob(n,r.join(` `)||void 0),{message:`Agent job stopped: ${n}`,success:!0,data:{agentId:n}}):{message:`Usage: agent stop AGENT_ID [REASON]`,success:!1}}async function UD(e,t){let[n]=t;return n?(await e.closeAgentJob(n),{message:`Agent job closed: ${n}`,success:!0,data:{agentId:n}}):{message:`Usage: agent close AGENT_ID`,success:!1}}async function WD(e,t){try{if(t.trim()===``)return PD();let[n=`list`,...r]=CD(t);return n===`list`&&r.length===0?FD(e):n===`run`?LD(e,r):n===`parallel`?RD(e,r):n===`wait`?zD(e,r):n===`read`||n===`open`?BD(e,r):n===`send`?VD(e,r):n===`stop`||n===`cancel`?HD(e,r):n===`close`?UD(e,r):LD(e,[n,...r])}catch(e){return{message:AD(e),success:!1}}}function GD(e){return[`Background job group ${e.groupId}: ${e.status} (${e.completed}/${e.total} completed, ${e.failed} failed, ${e.cancelled} cancelled, ${e.pending} pending)`,...e.lines].join(`
|
|
237
|
+
`)}function KD(e){let t=e.getAgentJobCapability?.();if(!t)throw Error(`Agent job capability is not available in this context.`);return t}function qD(){return[{name:`list`,description:`List available agents and active jobs`,source:`agent`},{name:`run`,description:`Start one background agent job`,source:`agent`},{name:`parallel`,description:`Run multiple agents in parallel`,source:`agent`},{name:`wait`,description:`Wait for a background agent group summary`,source:`agent`},{name:`read`,description:`Read an agent job log page`,source:`agent`},{name:`send`,description:`Send follow-up input to an agent job`,source:`agent`},{name:`stop`,description:`Cancel a running agent job`,source:`agent`},{name:`close`,description:`Dismiss a terminal agent job`,source:`agent`},{name:`open`,description:`Focus an agent job detail view when supported`,source:`agent`}]}function JD(){return{name:`agent`,displayName:`Agent Jobs`,description:[`Subagent jobs command.`,`Natural-language arguments start one background agent job.`,`When the user explicitly asks to create, run, spawn, delegate to, or use agents/subagents, start the requested agent command immediately and do not ask a follow-up question unless execution is impossible or unsafe.`,`If the target item is unspecified, include target selection inside the agent prompt instead of delaying execution.`,`The parallel form starts multiple background agent jobs as a wait_all group and returns a consolidated group summary unless --detach is present.`,`list, wait, read, send, stop, close, and open manage existing agent jobs.`].join(` `),source:`agent`,modelInvocable:!0,argumentHint:`PROMPT | AGENT_NAME PROMPT | list | parallel [--wait|--detach] LABEL:"PROMPT" [LABEL=AGENT_NAME:"PROMPT"] | wait GROUP_ID | read AGENT_ID [OFFSET] | send AGENT_ID PROMPT | stop AGENT_ID | close AGENT_ID`,safety:`background-agent`,subcommands:qD()}}function YD(){let e=JD();return{name:e.name,...e.displayName===void 0?{}:{displayName:e.displayName},description:e.description,requiresPermission:!1,execute:(e,t)=>WD(KD(e),t),...e.modelInvocable===void 0?{}:{modelInvocable:e.modelInvocable},...e.userInvocable===void 0?{}:{userInvocable:e.userInvocable},...e.argumentHint===void 0?{}:{argumentHint:e.argumentHint},...e.safety===void 0?{}:{safety:e.safety}}}var XD=class{name=`agent`;getCommands(){return[JD()]}};function ZD(){return{name:`agent-command-agent`,commandSources:[new XD],systemCommands:[YD()],sessionRequirements:[`agent-runtime`]}}function QD(e){return e.trim().split(/\s+/).filter(Boolean)}async function $D(e,t){let[n=`list`,r,...i]=QD(t);if(n===`list`){let t=l_(e);return{message:a_(t),success:!0,data:{count:t.length}}}if(!r)return{message:`Usage: background list | background read <task-id> [offset] | background cancel <task-id> | background close <task-id>`,success:!1};if(n===`read`||n===`log`||n===`open`){let t=await u_(e,r,o_(i[0])),n=t.nextCursor?`\nNext offset: ${t.nextCursor.offset}`:``;return{message:t.lines.length>0?`${t.lines.join(`
|
|
238
|
+
`)}${n}`:`No log lines: ${r}`,success:!0,data:{taskId:r,nextOffset:t.nextCursor?.offset}}}return n===`cancel`||n===`stop`?(await d_(e,r,i.join(` `)||void 0),{message:`Background task cancelled: ${r}`,success:!0,data:{taskId:r}}):n===`close`||n===`dismiss`?(await f_(e,r),{message:`Background task closed: ${r}`,success:!0,data:{taskId:r}}):{message:`Unknown background action: ${n}`,success:!1}}function eO(){return{name:`background`,displayName:`Background Tasks`,description:`List and control background tasks`,source:`background`,modelInvocable:!1,subcommands:r_()}}function tO(){let e=eO();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,subcommands:e.subcommands,execute:$D}}var nO=class{name=`background`;getCommands(){return[eO()]}};function rO(){return{name:`agent-command-background`,commandSources:[new nO],systemCommands:[tO()]}}function iO(e){let t=e.trim();return t.length>0?t:void 0}async function aO(e,t){let{before:n,after:r,beforeMessageCount:i,afterMessageCount:a}=await qg(e,iO(t)),o=i-a;return{message:[`Context compacted.`,` Removed messages: ${o} (${i>0?Math.round(o/i*100):0}% of total)`,` Context: ${Math.round(n.usedPercentage)}% → ${Math.round(r.usedPercentage)}%`].join(`
|
|
239
|
+
`),success:!0,data:{before:n,after:r,beforeMessageCount:i,afterMessageCount:a}}}function oO(){return{name:`compact`,displayName:`Compact Context`,description:`Compress context window`,source:`compact`,modelInvocable:!0,argumentHint:`[instructions]`,safety:`write`,example:`/compact Summarize the current context`}}function sO(){let e=oO();return{name:e.name,displayName:e.displayName,description:e.description,example:e.example,requiresPermission:!1,userInvocable:!0,modelInvocable:e.modelInvocable,argumentHint:e.argumentHint,safety:e.safety,lifecycle:`blocking`,execute:aO}}var cO=class{name=`compact`;getCommands(){return[oO()]}};function lO(){return{name:`agent-command-compact`,commandSources:[new cO],systemCommands:[sO()]}}const uO=[`Usage: /context [list] | add <path> | remove <path> | clear | auto on | off | <percent> | reset`,`Examples: /context list, /context add AGENTS.md, /context remove AGENTS.md, /context auto 85%`].join(`
|
|
240
|
+
`);function dO(e){return e===!1?`disabled`:`${Math.round(e*100)}%`}function fO(e,t){return e===!1?`Auto compact: disabled (${t})`:`Auto compact: ${dO(e)} (${t})`}function pO(e){return e?`settings`:`current session only`}async function mO(e,t){let n=t.trim().split(/\s+/).filter(e=>e.length>0);if(n.length>0)return hO(e,n);let r=Vg(e),i=Hg(e),a=Ug(e),o=OO(e.getSession().getFullHistory()),s=Jg(e);return{message:[`Context: ${r.usedTokens.toLocaleString()} / ${r.maxTokens.toLocaleString()} tokens (${Math.round(r.usedPercentage)}%)`,fO(i,a),SO(s),`History: ${o.turnCount} turn${o.turnCount===1?``:`s`}`].join(`
|
|
241
|
+
`),success:!0,data:{usedTokens:r.usedTokens,maxTokens:r.maxTokens,percentage:r.usedPercentage,autoCompactThreshold:i,autoCompactThresholdSource:a,references:s}}}async function hO(e,t){let[n,...r]=t;if(n===`list`)return r.length>0?{success:!1,message:uO}:AO(e);if(n===`add`)return _O(e,r);if(n===`remove`)return vO(e,r);if(n===`clear`){if(r.length>0)return{success:!1,message:uO};let t=Zg(e);return{success:!0,message:`Context references cleared: ${t.removed.length} removed.`,data:{removed:t.removed}}}return n===`auto`?gO(e,r):{success:!1,message:uO}}function gO(e,t){let[n,r]=t;if(r!==void 0)return{success:!1,message:uO};if(n===void 0){let t=Hg(e),n=Ug(e);return{success:!0,message:[fO(t,n),uO].join(`
|
|
242
|
+
`),data:{autoCompactThreshold:t,autoCompactThresholdSource:n}}}if(n===`on`)return yO(e,zg,`enabled`);if(n===`off`)return yO(e,!1,`disabled`);if(n===`reset`){let t=Kg(e);return Wg(e,zg,`default`),{success:!0,message:`Auto compact reset to default: ${dO(zg)} (${pO(t)}).`,data:{autoCompactThreshold:zg,autoCompactThresholdSource:`default`,persisted:t}}}let i=xO(n);return i.success?yO(e,i.threshold,`threshold set`):{success:!1,message:`${i.message}\n${uO}`}}async function _O(e,t){let n=t.join(` `).trim();if(!n)return{success:!1,message:uO};let r=await Yg(e,n);return r.reference?{success:!0,message:[`Context reference added: ${wO(r.reference)}.`,...r.evicted.length>0?[`Evicted ${r.evicted.length} older context reference(s).`]:[]].join(`
|
|
243
|
+
`),data:{reference:r.reference,evicted:r.evicted}}:{success:!1,message:r.diagnostics.join(`
|
|
244
|
+
`)||`Context reference not found: ${n}`,data:{diagnostics:r.diagnostics}}}function vO(e,t){let n=t.join(` `).trim();if(!n)return{success:!1,message:uO};let r=Xg(e,n);return r.removed?{success:!0,message:`Context reference removed: ${wO(r.removed)}.`,data:{removed:r.removed}}:{success:!1,message:`Context reference not found: ${n}`}}function yO(e,t,n){let r=Gg(e,t),i=r?`settings`:`session`;return Wg(e,t,i),{success:!0,message:bO(n,t,r),data:{autoCompactThreshold:t,autoCompactThresholdSource:i,persisted:r}}}function bO(e,t,n){let r=pO(n);return e===`disabled`?`Auto compact disabled (${r}).`:e===`enabled`?`Auto compact enabled at ${dO(t)} (${r}).`:`Auto compact threshold set to ${dO(t)} (${r}).`}function xO(e){if(e.endsWith(`%`)){let t=Number(e.slice(0,-1));return!Number.isFinite(t)||t<=0||t>100?{success:!1,message:`Auto compact percentage must be greater than 0% and at most 100%.`}:{success:!0,threshold:t/100}}if(e.includes(`.`)){let t=Number(e);return!Number.isFinite(t)||t<=0||t>1?{success:!1,message:`Auto compact fraction must be greater than 0 and at most 1.`}:{success:!0,threshold:t}}return{success:!1,message:`Use a percentage such as 85% or a fraction such as 0.85.`}}function SO(e){return`References: ${e.filter(e=>e.status===`active`).length} active, ${e.filter(e=>e.status===`observed`).length} observed`}function CO(e){return Math.ceil(e/4)}function wO(e){return[e.relativePath,`[${e.loadType}, ${e.status}]`,`~${CO(e.byteLength).toLocaleString()} tokens`].join(` `)}function TO(e){try{return JSON.parse(e)}catch{return null}}function EO(e){let t=TO(e);if(t===null)return``;let n=Object.values(t)[0],r=typeof n==`string`?n:JSON.stringify(n);return r.length>60?`${r.slice(0,60)}…`:r}function DO(e){let t=0,n=0,r=0,i=0,a=0,o=0,s=0;for(let c of e){let e=Math.ceil(JSON.stringify(c).length/4);c.role===`system`?t+=e:c.role===`user`?(n+=e,r++):c.role===`assistant`?(i+=e,a++):c.role===`tool`&&(o+=e,s++)}return{systemTokens:t,userTokens:n,userCount:r,assistantTokens:i,assistantCount:a,toolTokens:o,toolCallCount:s,totalTokens:t+n+i+o}}function OO(e){let t=new Map;for(let n of e){if(n.category!==`chat`||n.type!==`assistant`)continue;let e=n.data;for(let n of e.toolCalls??[])t.set(n.id,{name:n.function.name,firstArg:EO(n.function.arguments)})}let n=0,r=0,i=new Map;for(let a of e)if(a.category===`chat`){if(a.type===`user`)n++;else if(a.type===`tool`){let e=a.data,n=t.get(e.toolCallId??``),o=n?.name??`tool`,s=n?.firstArg??``;r++,i.set(`${o}:${s}`,{toolName:o,displayArg:s})}}return{turnCount:n,toolResults:[...i.values()],totalToolCallCount:r}}function kO(e,t,n){let r=`${e}${t>0?` — ~${t.toLocaleString()} tokens`:``}:`;return n.length===0?`${r}\n (none)`:[r,...n.map(e=>` ${e}`)].join(`
|
|
245
|
+
`)}function AO(e){let t=Vg(e),n=Hg(e),r=Ug(e),i=DO(e.getSession().getHistory()),a=OO(e.getSession().getFullHistory()),o=Jg(e),s=o.filter(e=>e.loadType===`system`),c=o.filter(e=>e.loadType===`manual`),l=o.filter(e=>e.loadType===`prompt-reference`),u=s.reduce((e,t)=>e+CO(t.byteLength),0),d=c.reduce((e,t)=>e+CO(t.byteLength),0),f=l.reduce((e,t)=>e+CO(t.byteLength),0),p=a.turnCount===0?`Conversation history — 0 turns`:`Conversation history — ${a.turnCount} turn${a.turnCount===1?``:`s`} | ~${i.totalTokens.toLocaleString()} tokens`,m=a.toolResults.map(e=>`${e.toolName}${e.displayArg?`: ${e.displayArg}`:``}`),h=a.toolResults.length,g=a.totalToolCallCount,_=g===0?`Tool results (0): (none)`:h<g?`Tool results (${h} unique / ${g} calls, ~${i.toolTokens.toLocaleString()} tokens):`:`Tool results (${h}, ~${i.toolTokens.toLocaleString()} tokens):`,v=a.turnCount===0?[]:[`User (${i.userCount}): ~${i.userTokens.toLocaleString()} tokens`,`Assistant (${i.assistantCount}): ~${i.assistantTokens.toLocaleString()} tokens`,...i.systemTokens>0?[`System messages: ~${i.systemTokens.toLocaleString()} tokens`]:[],g>0?[_,...m.map(e=>` ${e}`)].join(`
|
|
246
|
+
`):_],y=a.turnCount===0?`${p}:\n (none)`:[`${p}:`,...v.map(e=>` ${e}`)].join(`
|
|
247
|
+
`);return{success:!0,message:[`Context: ${t.usedTokens.toLocaleString()} / ${t.maxTokens.toLocaleString()} tokens (${Math.round(t.usedPercentage)}%)`,fO(n,r),``,kO(`System prompt (active every turn)`,u,s.map(wO)),``,y,``,kO(`Manually added`,d,c.map(wO)),``,kO(`Prompt references (@-syntax)`,f,l.map(wO))].join(`
|
|
248
|
+
`),data:{references:o,history:{turnCount:a.turnCount,toolResults:a.toolResults}}}}function jO(){return{name:`context`,displayName:`Context References`,description:`Context window info, reference inventory, and auto-compact controls`,source:`context`,modelInvocable:!1,argumentHint:`list | add <path> | remove <path> | clear | auto ...`,subcommands:[{name:`list`,description:`List loaded context references`,source:`context`},{name:`add`,description:`Add a file to active context references`,source:`context`},{name:`remove`,description:`Remove a context reference`,source:`context`},{name:`clear`,description:`Clear context references`,source:`context`},{name:`auto`,description:`Inspect or change auto-compact policy`,source:`context`}]}}function MO(){let e=jO();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,execute:mO}}var NO=class{name=`context`;getCommands(){return[jO()]}};function PO(){return{name:`agent-command-context`,commandSources:[new NO],systemCommands:[MO()]}}function FO(){let e=process.env.VISUAL?.trim(),t=process.env.EDITOR?.trim(),n=(e!==void 0&&e.length>0?e:t!==void 0&&t.length>0?t:`vi`).split(/\s+/).filter(e=>e.length>0);return{command:n[0]??`vi`,args:n.slice(1)}}function IO(e,t,n){return new Promise((r,i)=>{let a=(0,c.spawn)(e,[...t],{cwd:n,stdio:`inherit`,env:process.env});a.on(`error`,i),a.on(`exit`,(e,t)=>{if(e!==null){r(e);return}if(t){let e=m.constants.signals[t];r(128+(e??0));return}r(0)})})}async function LO(e,t){if(e.canHandoffTerminal?.()!==!0||e.runWithTerminal===void 0)return{message:`An editor is unavailable here (no interactive terminal).`,success:!1};let n=FO(),r=(0,h.mkdtempSync)((0,p.join)((0,m.tmpdir)(),`robota-editor-`)),i=(0,p.join)(r,`message.md`);(0,h.writeFileSync)(i,t??``,`utf8`);try{let t=await e.runWithTerminal(async()=>IO(n.command,[...n.args,i],e.getCwd()));if(t!==0)return{message:`Editor exited without saving (code ${t}).`,success:!1,data:{exitCode:t}};let r=(0,h.readFileSync)(i,`utf8`).replace(/\s+$/u,``);return r.length===0?{message:`Editor closed with empty content; nothing composed.`,success:!1}:{message:r,success:!0,data:{content:r}}}finally{(0,h.rmSync)(r,{recursive:!0,force:!0,maxRetries:3,retryDelay:20})}}function RO(){return{name:`editor`,displayName:`Editor`,description:"Compose a message in $EDITOR (optionally pre-filled with `/editor <text>`), then return it.",source:`editor`,modelInvocable:!1}}function zO(){let e=RO();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:LO}}var BO=class{name=`editor`;getCommands(){return[RO()]}};function VO(){return{name:`agent-command-editor`,commandSources:[new BO],systemCommands:[zO()]}}async function HO(e,t){let n=e.getUserInteraction?.();return n&&!ye(await n.ask(ge(`exit`,`Exit the session?`)))?{success:!0,message:`Exit cancelled.`}:{success:!0,message:`Exit requested.`,effects:[W_()]}}function UO(){return{name:`exit`,displayName:`Exit Session`,description:`Exit CLI`,source:`exit`,modelInvocable:!1}}function WO(){let e=UO();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!0,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:HO}}var GO=class{name=`exit`;getCommands(){return[UO()]}};function KO(){return{name:`agent-command-exit`,commandSources:[new GO],systemCommands:[WO()]}}function qO(e){let t=[`Goal: ${e.objective}`,`Status: ${e.status}${e.stopReason?` (${e.stopReason})`:``}`,`Iterations: ${e.iterations} / ${e.maxIterations}`],n=e.progress[e.progress.length-1];return n?.reason&&t.push(`Latest: ${n.reason}`),t.join(`
|
|
249
|
+
`)}async function JO(e,t){let n=t.trim(),r=n.split(/\s+/)[0]?.toLowerCase()??``;if(n.length===0||r===`help`)return{message:`Usage:
|
|
250
|
+
/goal <objective> assign a goal and pursue it autonomously
|
|
251
|
+
/goal status show the current goal and progress
|
|
252
|
+
/goal cancel stop the current goal`,success:!0};if(r===`status`){let t=e.getGoalState?.()??null;return t?{message:qO(t),success:!0,data:{status:t.status}}:{message:`No goal is set.`,success:!0}}if(r===`cancel`||r===`stop`){let t=e.cancelGoal?.()??null;return t?{message:`Goal cancelled: ${t.objective}`,success:!0}:{message:`No active goal to cancel.`,success:!1}}if(!e.setGoal)return{message:`Goal pursuit is not available in this session.`,success:!1};let i;try{i=await e.setGoal(n)}catch(e){return{message:e instanceof Error?e.message:String(e),success:!1}}return{message:`Goal set — pursuing autonomously (up to ${i.maxIterations} iterations):\n${i.objective}`,success:!0,data:{goalId:i.id}}}function YO(){return{name:`goal`,displayName:`Autonomous Goal`,description:`Assign an autonomous goal the agent pursues across turns until satisfied.`,source:`goal`,modelInvocable:!1}}function XO(){let e=YO();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:JO}}var ZO=class{name=`goal`;getCommands(){return[YO()]}};function QO(){return{name:`agent-command-goal`,commandSources:[new ZO],systemCommands:[XO()]}}function $O(e,t){return{success:!0,message:n_(e)}}function ek(){return{name:`help`,displayName:`Help`,description:`Show available commands`,source:`help`,modelInvocable:!1}}function tk(){let e=ek();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:$O}}var nk=class{name=`help`;getCommands(){return[ek()]}};function rk(){return{name:`agent-command-help`,commandSources:[new nk],systemCommands:[tk()]}}async function ik(e){let t=e.getUserInteraction?.();if(!t)return;let n=m_().map(e=>({value:e.name,label:e.name,description:e.description})),r=await t.ask(_e(`language`,`Select language`,n)),i=r.type===`answer`?r.values[0]:void 0;return i===void 0?void 0:h_(i)}async function ak(e,t){let n=h_(t);return n===void 0&&(n=await ik(e),n===void 0)?{message:g_(),success:!1}:{message:`Language set to "${n}".`,success:!0,data:{language:n},effects:[{type:`language-change-requested`,language:n}]}}function ok(){return{name:`language`,displayName:`Language`,description:`Set response language`,source:`language`,argumentHint:`<code>`,subcommands:m_(`language`),modelInvocable:!1}}function sk(){let e=ok();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,argumentHint:e.argumentHint,subcommands:e.subcommands,lifecycle:`inline`,execute:ak}}var ck=class{name=`language`;getCommands(){return[ok()]}};function lk(){return{name:`agent-command-language`,commandSources:[new ck],systemCommands:[sk()]}}function uk(){return{message:`Usage: memory list | memory show [topic] | memory add <user|feedback|project|reference> <topic> <text> | memory pending | memory approve <id> | memory reject <id> | memory used`,success:!1}}function dk(e){return{message:e instanceof Error?e.message:String(e),success:!1}}function fk(e){let t=e.list(),n=t.topics.length>0?t.topics.map(e=>`- ${e.name}: ${e.path}`).join(`
|
|
253
|
+
`):`(none)`;return{message:[`Memory index: ${t.indexPath}`,`Topics directory: ${t.topicsPath}`,`Topics:`,n].join(`
|
|
254
|
+
`),success:!0,data:{indexPath:t.indexPath,topicsPath:t.topicsPath,topicCount:t.topics.length}}}function pk(e,t){if(!t||t===`index`){let t=e.loadStartupMemory();return{message:t.content||`(empty memory index)`,success:!0,data:{path:t.path,lineCount:t.lineCount,truncated:t.truncated}}}return{message:e.readTopic(t)||`(empty memory topic: ${t})`,success:!0,data:{topic:t}}}function mk(e){let t=e[1],n=e[2],r=e.slice(3).join(` `).trim();if(!(!t||!lv(t)||!n||r.length===0))return{type:t,topic:n,text:r}}function hk(e){let t=e.list(`pending`);return{message:[`Pending memory candidates:`,...t.length>0?t.map(e=>`- ${e.id} ${e.type}/${e.topic} confidence=${e.confidence}: ${e.text}`):[`(no pending memory candidates)`]].join(`
|
|
255
|
+
`),success:!0,data:{count:t.length}}}function gk(e,t){fv(e,t)}function _k(e,t,n,r){if(!r)return uk();try{let i=t.mark(r,`approved`,`approved-by-user`),a=n.append(i),o=t.mark(r,`saved`,`approved-and-saved`);return gk(e,{type:`memory_candidate_approved`,candidateId:o.id,topic:o.topic,reason:`approved-by-user`}),gk(e,{type:`memory_candidate_saved`,candidateId:o.id,topic:o.topic,reason:a.deduplicated?`deduplicated`:`approved-and-saved`}),{message:a.deduplicated?`Saved memory candidate ${r} was already present in ${a.topicPath}`:`Saved memory candidate ${r} to ${a.topicPath}`,success:!0,data:{id:r,status:o.status,topic:a.topic,topicPath:a.topicPath,deduplicated:a.deduplicated}}}catch(e){return dk(e instanceof Error?e:String(e))}}function vk(e,t,n){if(!n)return uk();try{let r=t.mark(n,`rejected`,`rejected-by-user`);return gk(e,{type:`memory_candidate_rejected`,candidateId:r.id,topic:r.topic,reason:`rejected-by-user`}),{message:`Rejected memory candidate ${n}`,success:!0,data:{id:n,status:r.status}}}catch(e){return dk(e instanceof Error?e:String(e))}}function yk(e){let t=dv(e);return{message:[`Used memory references:`,...t.length>0?t.map(e=>{let t=e.truncated?` truncated=true`:``;return`- ${e.topic} score=${e.score}${t}: ${e.path}`}):[`(no memory used in current turn)`]].join(`
|
|
256
|
+
`),success:!0,data:{count:t.length,references:[...t]}}}function bk(e,t){let n=t.trim().split(/\s+/).filter(Boolean),r=n[0]??`list`,i=cv(e);if(r===`list`)return fk(i.project);if(r===`show`)return pk(i.project,n[1]);if(r===`pending`)return hk(i.pending);if(r===`approve`)return _k(e,i.pending,i.project,n[1]);if(r===`reject`)return vk(e,i.pending,n[1]);if(r===`used`)return yk(e);if(r===`add`){let e=mk(n);if(!e)return uk();if(uv(e.text))return{message:`Refusing to save sensitive memory content.`,success:!1};let t=i.project.append(e);return{message:t.deduplicated?`${e.type} memory already exists in ${t.topicPath}`:`Saved ${e.type} memory to ${t.topicPath}`,success:!0,data:{indexPath:t.indexPath,topicPath:t.topicPath,topic:t.topic,deduplicated:t.deduplicated}}}return uk()}function xk(){return{name:`memory`,displayName:`Memory`,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.`,source:`memory`,argumentHint:`list | show [topic] | add <user|feedback|project|reference> <topic> <text> | pending | approve <id> | reject <id> | used`,modelInvocable:!0,safety:`write`,subcommands:av()}}function Sk(){let e=xk();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!0,argumentHint:e.argumentHint,safety:e.safety,subcommands:e.subcommands,execute:bk}}var Ck=class{name=`memory`;getCommands(){return[xk()]}};function wk(){return{name:`agent-command-memory`,commandSources:[new Ck],systemCommands:[Sk()]}}async function Tk(e){let t=e.getUserInteraction?.();if(!t)return;let n=y_().map(e=>({value:e.name,label:e.name,description:e.description})),r=await t.ask(_e(`mode`,`Select interaction mode`,n));return r.type===`answer`?r.values[0]:void 0}async function Ek(e,t){let n=b_(t);if(n===void 0&&(n=await Tk(e),n===void 0)){let t=w_(e);return{message:`Current mode: ${t}`,success:!0,data:{mode:t}}}return x_(n)?(T_(e,n),{message:`Permission mode set to: ${n}`,success:!0,data:{mode:n}}):{message:S_(),success:!1}}function Dk(){return{name:`mode`,displayName:`Interaction Mode`,description:`Show/change permission mode`,source:`mode`,argumentHint:__,subcommands:y_(`mode`),modelInvocable:!1}}function Ok(){let e=Dk();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,argumentHint:e.argumentHint,subcommands:e.subcommands,lifecycle:`inline`,execute:Ek}}var kk=class{name=`mode`;getCommands(){return[Dk()]}};function Ak(){return{name:`agent-command-mode`,commandSources:[new kk],systemCommands:[Ok()]}}function jk(e,t){let n=b_(t);if(n!==void 0){if(!x_(n))return{message:S_(),success:!1};T_(e,n);let t=D_(e);return{message:`Permission mode set to: ${n}\n${O_(t)}`,success:!0,data:{mode:t.mode,sessionAllowed:t.sessionAllowed}}}let r=D_(e);return{message:O_(r),success:!0,data:{mode:r.mode,sessionAllowed:r.sessionAllowed}}}function Mk(){return{name:`permissions`,displayName:`Permissions`,description:`Show/change permission mode and permission rules`,source:`permissions`,argumentHint:__,subcommands:y_(`permissions`),modelInvocable:!1}}function Nk(){let e=Mk();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!0,userInvocable:!0,modelInvocable:!1,argumentHint:e.argumentHint,subcommands:e.subcommands,lifecycle:`inline`,execute:jk}}var Pk=class{name=`permissions`;getCommands(){return[Mk()]}};function Fk(){return{name:`agent-command-permissions`,commandSources:[new Pk],systemCommands:[Nk()]}}function Ik(e){let t=e.trim().split(/\s+/).filter(e=>e.length>0);return{subcommand:t[0]??``,subArgs:t.slice(1).join(` `).trim()}}function Lk(e){return{success:!1,message:e}}function Rk(e){return R_(e)}async function zk(e,t){let n=Rk(e);if(n===void 0)return{success:!1,message:`Plugin management is not available.`};try{return{success:!0,message:await t(n)}}catch(e){return{success:!1,message:`Plugin error: ${e instanceof Error?e.message:String(e)}`}}}async function Bk(e,t){let{subcommand:n,subArgs:r}=Ik(t);return n===`add`&&r.length>0?zk(e,async e=>{let t=await e.marketplaceAdd(r);return`Added marketplace: "${t}" (from ${r})\nInstall plugins with: /plugin install <name>@${t}`}):n===`remove`&&r.length>0?zk(e,async e=>(await e.marketplaceRemove(r),`Removed marketplace "${r}" and uninstalled its plugins.`)):n===`update`&&r.length>0?zk(e,async e=>(await e.marketplaceUpdate(r),`Updated marketplace "${r}".`)):n===`list`?zk(e,async e=>{let t=await e.marketplaceList();return t.length===0?`No marketplace sources configured.`:`Marketplace sources:\n${t.map(e=>` ${e.name} (${e.type})`).join(`
|
|
257
|
+
`)}`}):Lk(`Usage: /plugin marketplace add <source> | remove <name> | update <name> | list`)}function Vk(e,t,n,r){return t.length===0?Promise.resolve(Lk(n)):zk(e,e=>Promise.resolve(r(e,t)))}function Hk(){return{success:!0,message:`Opening plugin manager...`,effects:[I_()]}}function Uk(e,t){return Vk(e,t,`Usage: /plugin install <name>@<marketplace>`,async(e,t)=>(await e.install(t),`Installed plugin: ${t}`))}function Wk(e,t){return Vk(e,t,`Usage: /plugin uninstall <name>@<marketplace>`,async(e,t)=>(await e.uninstall(t),`Uninstalled plugin: ${t}`))}function Gk(e,t){return Vk(e,t,`Usage: /plugin enable <name>@<marketplace>`,async(e,t)=>(await e.enable(t),`Enabled plugin: ${t}`))}function Kk(e,t){return Vk(e,t,`Usage: /plugin disable <name>@<marketplace>`,async(e,t)=>(await e.disable(t),`Disabled plugin: ${t}`))}async function qk(e,t){let{subcommand:n,subArgs:r}=Ik(t);switch(n){case``:case`manage`:return Hk();case`install`:return Uk(e,r);case`uninstall`:return Wk(e,r);case`enable`:return Gk(e,r);case`disable`:return Kk(e,r);case`marketplace`:return Bk(e,r);default:return Lk(`Unknown plugin subcommand: ${n}`)}}async function Jk(e,t){return zk(e,async e=>{let t=await e.reloadPlugins();return`Reloaded ${t.loadedPluginCount===1?`1 plugin resource`:`${t.loadedPluginCount} plugin resources`}.`}).then(e=>e.success?{...e,effects:[L_()]}:e)}function Yk(){return{name:`plugin`,displayName:`Plugins`,description:`Manage plugins`,source:`plugin-manager`,modelInvocable:!1,argumentHint:`manage | install <name@marketplace> | uninstall <name@marketplace> | enable <name@marketplace> | disable <name@marketplace> | marketplace <action>`,subcommands:z_()}}function Xk(){return{name:`reload-plugins`,displayName:`Reload Plugins`,description:`Reload all plugin resources`,source:`plugin-manager`,modelInvocable:!1}}function Zk(){let e=Yk();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,argumentHint:e.argumentHint,lifecycle:`inline`,subcommands:e.subcommands,execute:qk}}function Qk(){let e=Xk();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Jk}}var $k=class{name=`plugin-manager`;getCommands(){return[Yk(),Xk()]}};function eA(){return{name:`agent-command-plugin`,commandSources:[new $k],systemCommands:[Zk(),Qk()]}}function tA(e){return e.getSession().getActivePresetId?.()??`default`}function nA(e){return[`Available presets:`,...Vb().map(t=>`${t.id===e?`* `:` `}${t.id} — ${t.title}: ${t.description}`)].join(`
|
|
258
|
+
`)}function rA(e){return`Unknown preset: ${e}. Available: ${Vb().map(e=>e.id).join(`, `)}`}function iA(e){let t=tA(e);return{message:nA(t),success:!0,data:{presets:Vb(),active:t}}}async function aA(e){let t=e.getUserInteraction?.();if(!t)return;let n=Vb().map(e=>({value:e.id,label:e.id,description:e.description})),r=await t.ask(_e(`preset`,`Select a preset`,n));return r.type===`answer`?r.values[0]:void 0}async function oA(e,t){let n=t.trim().split(/\s+/)[0];if(n===`list`||(n===void 0||n.length===0)&&(n=await aA(e),n===void 0))return iA(e);if(Hb(n)===void 0)return{message:rA(n),success:!1};let r=Kb(n);return await k_(e,n,r),{message:`Switched to preset: ${n}`,success:!0,data:{preset:n}}}function sA(e=`preset`){return Vb().map(t=>({name:t.id,description:t.description,source:e}))}function cA(){return{name:`preset`,displayName:`Agent Preset`,description:`List presets or switch the active preset`,source:`preset`,argumentHint:`list | <preset-id>`,subcommands:sA(`preset`),modelInvocable:!1}}function lA(){let e=cA();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,argumentHint:e.argumentHint,subcommands:e.subcommands,lifecycle:`inline`,execute:oA}}var uA=class{name=`preset`;getCommands(){return[cA()]}};function dA(){return{name:`agent-command-preset`,commandSources:[new uA],systemCommands:[lA()]}}function fA(e,t,n={}){let r=wA(e,t);return{type:e,steps:DA(TA(r),n.initialValues),setupHelpLinks:r.setupHelpLinks??[],stepIndex:0,values:{},existingProfileNames:n.existingProfileNames??[],...n.profileName===void 0?{}:{profileName:n.profileName},...n.setCurrent===void 0?{}:{setCurrent:n.setCurrent}}}function pA(e){return e.length===0?` No providers are available.`:[` Select provider:`,...e.map((e,t)=>` ${t+1}. ${bA(e)}`),` Provider [1-${e.length}] (default: 1): `].join(`
|
|
259
|
+
`)}function mA(e,t){let n=e.trim(),r=n.length>0?n:`1`,i=SA(r);if(i!==void 0){let e=t[i];if(e!==void 0)return e.type;throw Error(`Provider selection ${r} is out of range. Currently supported: ${pe(t)}`)}let a=M(t,r);if(a===void 0)throw Error(`Unknown provider: ${r}. Currently supported: ${pe(t)}`);return a.type}function hA(e){let t=e.steps[e.stepIndex];if(t===void 0)throw Error(`Provider setup step ${e.stepIndex} is out of range`);return t}function gA(e,t){let n=hA(e),r=t.trim()||n.defaultValue||``,i=CA(n,r);if(i!==void 0)return{status:`error`,state:e,message:i};let a={...e,stepIndex:e.stepIndex+1,values:{...e.values,[n.key]:r}};return a.stepIndex<e.steps.length?{status:`next`,state:a}:{status:`complete`,input:OA(a)}}async function _A(e,t,n,r={}){let i=fA(e,n,r),a=i.steps.length;for(;i.stepIndex<a;){let e=hA(i),n=await t(vA(e,i.setupHelpLinks),e.masked===!0),r=gA(i,n);if(r.status===`complete`)return r.input;if(r.status===`error`)throw Error(r.message);i=r.state}throw Error(`Provider setup flow ended without completion`)}function vA(e,t=[]){let n=e.defaultValue===void 0?``:` (default: ${e.defaultValue})`,r=xA(t);return`${r.length>0?`${r}\n`:``} ${e.title}${n}: `}const yA={"cloud-paid":`[Cloud/Paid]`,"cloud-free":`[Cloud/Free]`,"local-free":`[Local/Free]`};function bA(e){let t=`${e.category===void 0?``:`${yA[e.category]??``} `}${e.displayName===void 0?e.type:`${e.displayName} (${e.type})`}`;return e.description===void 0?t:`${t} — ${e.description}`}function xA(e=[]){return e.length===0?``:e.map(e=>` Setup help: ${EA(e.kind)}: ${e.label} - ${e.url}`).join(`
|
|
260
|
+
`)}function SA(e){if(/^\d+$/.test(e))return Number(e)-1}function CA(e,t){if(e.required===!0&&t.length===0)return`Required`}function wA(e,t){let n=M(t,e);if(n===void 0)throw Error(`Unknown provider: ${e}. Currently supported: ${pe(t)}`);return n}function TA(e){if(e.setupSteps!==void 0)return[...e.setupSteps];let t=[{key:`model`,title:`${e.type} model`,defaultValue:e.defaults?.model,required:e.defaults?.model===void 0}];return e.defaults?.baseURL!==void 0&&t.unshift({key:`baseURL`,title:`${e.type} base URL`,defaultValue:e.defaults.baseURL}),e.requiresApiKey===!0&&t.push({key:`apiKey`,title:`${e.type} API key`,defaultValue:e.defaults?.apiKey,required:e.defaults?.apiKey===void 0,masked:!0}),t}function EA(e){return e===`api-key`?`API key`:e===`console`?`Console`:`Official`}function DA(e,t){return t===void 0?[...e]:e.map(e=>{let n=t[e.key];return n===void 0?e:{...e,defaultValue:n,required:!1}})}function OA(e){let t=e.profileName??$g({type:e.type},{existingProfileNames:e.existingProfileNames}),n=e.values.apiKey;return{profile:t,type:e.type,model:e.values.model,...n!==void 0&&n.length>0&&{apiKey:n},...e.values.baseURL!==void 0&&{baseURL:e.values.baseURL},setCurrent:e.setCurrent??!0}}const kA={type:`session-restart-requested`,reason:`other`};function AA(e,t){return fA(e,t.providerDefinitions,{existingProfileNames:Object.keys(t.settings.readMergedSettings().providers??{})})}function jA(e,t){let n=hA(e),r=n.masked===!0&&n.defaultValue!==void 0?`(unchanged)`:n.defaultValue,i=xA(e.setupHelpLinks),a=[t,i.length>0?i:void 0].filter(e=>e!==void 0&&e.length>0).join(`
|
|
261
|
+
`)||void 0;return ve(`provider-setup-${n.key}`,n.title,{description:a,placeholder:r,allowEmpty:n.defaultValue!==void 0,masked:n.masked})}async function MA(e,t,n,r){let i=t,a;for(;;){let t=await e.ask(jA(i,a));if(t.type===`cancelled`)return{message:r,success:!0};let o=gA(i,t.text??``);if(o.status===`error`){a=o.message;continue}if(o.status===`complete`)return n(o.input);i=o.state,a=void 0}}function NA(e,t,n){return MA(e,t,e=>PA(e,n),`Provider setup cancelled.`)}function PA(e,t){let n=t.settings.readTargetSettings(),r=ng(e,{providerDefinitions:t.providerDefinitions});return t.settings.writeTargetSettings(ig(n,r)),{message:`Provider ${e.profile} configured. Restarting...`,success:!0,effects:[{...kA,message:`Provider setup restart`}]}}function FA(e,t,n){return`${e===n?`* `:``}${e}: ${t.type??`unknown`} ${t.model??`(no model)`}`}function IA(e,t,n){if(!t)return{message:`Usage: /provider switch <profile>`,success:!1};if(!e?.[t])return{message:`Provider profile "${t}" was not found.`,success:!1};let{orgPolicy:r}=n;if(r?.allowedProviders&&!r.allowedProviders.includes(t))return{message:Cv(`Provider "${t}" is not allowed by your organization policy. Allowed: ${r.allowedProviders.join(`, `)}.`,r.adminContact),success:!1};if(n.settings.readMergedSettings().currentProvider===t)return{message:`Already using provider "${t}".`,success:!0};let i=e[t],a=n.settings.readTargetSettings(),o=n.settings.readMergedSettings(),s=a.providers?.[t]!==void 0||o.providers?.[t]!==void 0?{...a,currentProvider:t}:$h(a,t);return n.settings.writeTargetSettings(s),{message:`Switched to ${t} (${i.model??`unknown model`}). History preserved.`,success:!0,effects:[{type:`provider-hot-swap-requested`,profileName:t}]}}async function LA(e,t,n){let r=n.settings.readMergedSettings().providers?.[t];if(!r)return{message:`Provider profile "${t}" was not found.`,success:!1};if(!r.type)return{message:`Provider profile "${t}" is missing type.`,success:!1};let i;try{i=fA(r.type,n.providerDefinitions,{profileName:t,setCurrent:!1,initialValues:RA(r)})}catch(e){return{message:e instanceof Error?e.message:String(e),success:!1}}return MA(e,i,e=>zA(e,t,n),`Provider edit cancelled.`)}function RA(e){return{...typeof e.model==`string`?{model:e.model}:{},...typeof e.apiKey==`string`?{apiKey:e.apiKey}:{},...typeof e.baseURL==`string`?{baseURL:e.baseURL}:{}}}function zA(e,t,n){let r=n.settings.readMergedSettings(),i=r.providers?.[t];if(!i)return{message:`Provider profile "${t}" was not found.`,success:!1};let{orgPolicy:a}=n;if(a?.requireApiKeyFromEnv&&wv(e.apiKey))return{message:Cv(`Your organization policy requires API keys to be stored as environment variable references ($ENV:VAR_NAME), not as plaintext.`,a.adminContact),success:!1};let o=n.settings.readTargetSettings(),s=ng(e,{providerDefinitions:n.providerDefinitions}).providers[t];if(!s)return{message:`Provider profile "${t}" was not updated.`,success:!1};n.settings.writeTargetSettings(Qh(o,t,{...i,...s}));let c=r.currentProvider===t;return{message:c?`Provider ${t} updated. Switching...`:`Provider ${t} updated.`,success:!0,...c?{effects:[{type:`provider-hot-swap-requested`,profileName:t}]}:{}}}const BA={type:`session-restart-requested`,reason:`other`};async function VA(e,t,n){let r=n.settings.readMergedSettings();if(!r.providers?.[t])return{message:`Provider profile "${t}" was not found.`,success:!1};let i=qA(t,Object.keys(r.providers)),a;for(;;){let r=await e.ask(ve(`provider-duplicate`,`Duplicate ${t} as`,{description:a,placeholder:i,allowEmpty:!0}));if(r.type===`cancelled`)return{message:`Provider duplicate cancelled.`,success:!0};let o=r.text??``,s=HA(o,i,n);if(s!==void 0){a=s;continue}return UA(t,o,i,n)}}function HA(e,t,n){let r=JA(e,t);if(r.length===0)return`Required`;if(n.settings.readMergedSettings().providers?.[r]!==void 0)return`Provider profile "${r}" already exists`}function UA(e,t,n,r){let i=r.settings.readMergedSettings().providers?.[e];if(!i)return{message:`Provider profile "${e}" was not found.`,success:!1};let a=JA(t,n),o=HA(a,n,r);return o===void 0?(r.settings.writeTargetSettings(Qh(r.settings.readTargetSettings(),a,{...i})),{message:`Provider profile duplicated: ${e} -> ${a}.`,success:!0}):{message:o,success:!1}}async function WA(e,t,n){let r=n.settings.readMergedSettings().providers??{};return r[t]?Object.keys(r).length<=1?{message:`Cannot delete the only provider profile.`,success:!1}:n.settings.readTargetSettings().providers?.[t]===void 0?{message:`Provider profile "${t}" is not stored in the active write target; edit its source settings file or override it before deleting.`,success:!1}:ye(await e.ask(ge(`provider-delete`,`Delete provider profile ${t}?`)))?GA(e,t,n):{message:`Provider delete cancelled.`,success:!0}:{message:`Provider profile "${t}" was not found.`,success:!1}}async function GA(e,t,n){let r=n.settings.readMergedSettings();if(r.currentProvider!==t)return n.settings.writeTargetSettings(eg(n.settings.readTargetSettings(),t)),{message:`Provider profile deleted: ${t}.`,success:!0};let i=Object.entries(r.providers??{}).filter(([e])=>e!==t).map(([e,t])=>({value:e,label:FA(e,t,r.currentProvider)})),a=await e.ask(_e(`provider-delete-replacement`,`Replacement provider for ${t}`,i,{maxVisible:8}));return a.type!==`answer`||a.values[0]===void 0?{message:`Provider delete cancelled.`,success:!0}:KA(t,a.values[0],n)}function KA(e,t,n){if(n.settings.readMergedSettings().providers?.[t]===void 0||t===e)return{message:`Provider profile "${t}" was not found.`,success:!1};let r=eg(n.settings.readTargetSettings(),e);return n.settings.writeTargetSettings({...r,currentProvider:t}),{message:`Provider profile deleted: ${e}. Restarting with ${t}...`,success:!0,effects:[{...BA,message:`Provider delete restart`}]}}function qA(e,t){let n=e_(`${e}-copy`)??`provider-copy`;if(!t.includes(n))return n;for(let e=2;e<1e3;e+=1){let r=`${n}-${e}`;if(!t.includes(r))return r}return`${n}-${Date.now()}`}function JA(e,t){return e_(e.trim()||t)??``}const YA=`switch`,XA=`edit`,ZA=`test`,QA=`duplicate`,$A=`delete`,ej=`cancel`;async function tj(e,t,n,r){let i=Object.entries(n??{}).map(([e,n])=>({value:e,label:FA(e,n,t)})),a=await e.ask(_e(`provider-profile`,`Select provider profile`,i,{maxVisible:8}));return a.type!==`answer`||a.values[0]===void 0?{message:`Provider profile selection cancelled.`,success:!0}:nj(e,a.values[0],r)}async function nj(e,t,n){if(!n.settings.readMergedSettings().providers?.[t])return{message:`Provider profile "${t}" was not found.`,success:!1};let r=await e.ask(_e(`provider-profile-action`,`Provider profile: ${t}`,[{value:YA,label:`Switch`},{value:XA,label:`Edit`},{value:ZA,label:`Test`},{value:QA,label:`Duplicate`},{value:$A,label:`Delete`},{value:ej,label:`Cancel`}]));return r.type!==`answer`||r.values[0]===void 0?{message:`Provider profile action cancelled.`,success:!0}:rj(e,t,r.values[0],n)}async function rj(e,t,n,r){let i=r.settings.readMergedSettings();switch(n){case YA:return IA(i.providers,t,r);case XA:return LA(e,t,r);case ZA:return ug(i.currentProvider,i.providers,t,r);case QA:return VA(e,t,r);case $A:return WA(e,t,r);case ej:return{message:`Provider profile action cancelled.`,success:!0};default:return{message:`Unknown provider profile action "${n}".`,success:!1}}}async function ij(e,t,n){let r=e.getUserInteraction?.(),i=n.settings.readMergedSettings(),a=t.trim();if(a.length===0)return aj(r,i.currentProvider,i.providers,n);let[o=`current`,s]=a.split(/\s+/);return o===`list`?aj(r,i.currentProvider,i.providers,n):o===`current`||o===``?{message:sj(i.currentProvider,i.providers),success:!0}:o===`switch`?IA(i.providers,s,n):o===`test`?ug(i.currentProvider,i.providers,s,n):o===`add`?cj(r,s,n):{message:`Usage: provider [current|list|switch <profile>|add <type>|test [profile]]`,success:!1}}function aj(e,t,n,r){return!e||Object.keys(n??{}).length===0?{message:oj(t,n),success:!0}:tj(e,t,n,r)}function oj(e,t){let n=Object.entries(t??{});return n.length===0?`No provider profiles configured.`:n.map(([t,n])=>`${t===e?`*`:`-`} ${t}: ${n.type??`unknown`} ${n.model??`(no model)`}`).join(`
|
|
262
|
+
`)}function sj(e,t){if(!e)return`No current provider configured.`;let n=t?.[e];return n?[`Current provider: ${e}`,`Type: ${n.type??`unknown`}`,`Model: ${n.model??`(no model)`}`,...n.baseURL?[`Base URL: ${n.baseURL}`]:[]].join(`
|
|
263
|
+
`):`Current provider "${e}" was not found in providers.`}function cj(e,t,n){return t===void 0||t.length===0?e?lj(e,n):{message:`Usage: provider add <type>. Supported: ${pe(n.providerDefinitions)}`,success:!1}:M(n.providerDefinitions,t)===void 0?{message:`Usage: provider add <type>. Supported: ${pe(n.providerDefinitions)}`,success:!1}:e?NA(e,AA(t,n),n):{message:`Provider setup for "${t}" requires an interactive session.`,success:!1}}async function lj(e,t){let n=t.providerDefinitions.map(e=>({value:e.type,label:bA(e)})),r=await e.ask(_e(`provider-type`,`Select provider`,n,{maxVisible:6}));if(r.type!==`answer`||r.values[0]===void 0)return{message:`Provider setup cancelled.`,success:!0};let i=r.values[0];return M(t.providerDefinitions,i)===void 0?{message:`Usage: provider add <type>. Supported: ${pe(t.providerDefinitions)}`,success:!1}:NA(e,AA(i,t),t)}function uj(){return[{name:`current`,description:`Show current provider`,source:`provider`},{name:`list`,description:`List provider profiles`,source:`provider`},{name:`switch`,description:`Hot-swap to another provider profile`,source:`provider`},{name:`add`,description:`Configure a provider profile`,source:`provider`},{name:`test`,description:`Test provider profile`,source:`provider`}]}function dj(){return{name:`provider`,displayName:`Provider Setup`,description:`Manage provider profiles`,source:`provider`,modelInvocable:!1,argumentHint:`current | list | switch <profile> | add [type] | test [profile]`,subcommands:uj(),example:`/provider switch production`}}var fj=class{name=`provider`;getCommands(){return[dj()]}};function pj(e){let t=dj();return{name:t.name,displayName:t.displayName,description:t.description,example:t.example,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,argumentHint:t.argumentHint,subcommands:t.subcommands,lifecycle:`inline`,execute:(t,n)=>ij(t,n,e)}}function mj(e){return{name:`agent-command-provider`,commandSources:[new fj],systemCommands:[pj(e)]}}async function hj(e,t){let n=(await e(`
|
|
264
|
+
Do you have an API key for an AI provider?
|
|
265
|
+
|
|
266
|
+
1. Yes, I have an API key
|
|
267
|
+
2. No — get a free key (Google Gemini, takes ~2 min)
|
|
268
|
+
3. No — use a local model (LM Studio, no API key needed)
|
|
269
|
+
|
|
270
|
+
Choose [1-3] (default: 1): `)).trim()||`1`;return n===`2`?(t.writeLine(`
|
|
271
|
+
── Get a free Gemini API key ────────────────────────────────────────────────
|
|
272
|
+
|
|
273
|
+
1. Open https://aistudio.google.com/apikey in your browser
|
|
274
|
+
2. Sign in with your Google account
|
|
275
|
+
3. Click "Create API key" (takes ~30 seconds)
|
|
276
|
+
4. Copy the key starting with "AIza..."
|
|
277
|
+
|
|
278
|
+
─────────────────────────────────────────────────────────────────────────────
|
|
279
|
+
`),await e(` Press Enter when you have your API key: `),{path:`free-key`,preselectedType:`gemini`}):n===`3`?(t.writeLine(`
|
|
280
|
+
── Set up a local model with LM Studio ──────────────────────────────────────
|
|
281
|
+
|
|
282
|
+
1. Download LM Studio from https://lmstudio.ai
|
|
283
|
+
2. Open LM Studio → search for a model (e.g. "llama" or "phi") → Download
|
|
284
|
+
3. Go to Developer tab → click Start Server
|
|
285
|
+
(default address: http://localhost:1234)
|
|
286
|
+
|
|
287
|
+
When the server is running, come back here and press Enter to continue.
|
|
288
|
+
|
|
289
|
+
─────────────────────────────────────────────────────────────────────────────
|
|
290
|
+
`),await e(` Press Enter when LM Studio server is running: `),{path:`local`,preselectedType:`gemma`}):{path:`has-key`}}async function gj(e,t,n,r,i){let a=await hj(n,r),o=Object.keys(Ng(e).providers??{}),s=Vp(e,t.settingsScope),c;c=a.preselectedType===void 0?mA(await n(pA(i)),i):a.preselectedType,Eg(s,await _A(c,n,i,{existingProfileNames:o}),{providerDefinitions:i});let l=await n(` Response language (ko/en/ja/zh, default: en): `);if(l){let e=Hp(s);e.language=l,Up(s,e)}r.writeLine(`\n Config saved to ${s}\n`)}async function _j(e,t,n,r,i,a){let o=Ng(e);if(fg(t.provider===void 0?o:{...o,currentProvider:t.provider},i)===`valid`||t.provider===void 0&&Pg(i,a.env)!==void 0)return;if(!(a.isInteractive??(()=>!1))())throw new Mg(a.formatError(i));await gj(e,vj(e,t),n,r,i);let s=Ng(e);if(fg(t.provider===void 0?s:{...s,currentProvider:t.provider},i)!==`valid`)throw new Mg(a.formatError(i))}function vj(e,t){if(t.settingsScope!==void 0||t.provider!==void 0)return t;let n=yj(Cg(e));if(n===void 0)return t;let r=(0,p.join)(e,`.robota`,`settings.json`),i=(0,p.join)(e,`.robota`,`settings.local.json`);return n===r||n===i?{...t,settingsScope:`project-local`}:t}function yj(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n!==void 0&&typeof Hp(n).currentProvider==`string`)return n}}function bj(e,t){return{success:!0,message:`Reset requested.`,data:{resetRequested:!0},effects:[{type:`settings-reset-requested`}]}}function xj(){return{name:`reset`,displayName:`Reset Settings`,description:`Delete settings`,source:`reset`,modelInvocable:!1}}function Sj(){let e=xj();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!0,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:bj}}var Cj=class{name=`reset`;getCommands(){return[xj()]}};function wj(){return{name:`agent-command-reset`,commandSources:[new Cj],systemCommands:[Sj()]}}function Tj(){return{message:`Usage: rewind [list] | rewind inspect <checkpoint-id> | rewind restore <checkpoint-id> | rewind code <checkpoint-id> | rewind rollback <checkpoint-id>`,success:!1}}function Ej(e){let t=e.replace(/\s+/g,` `).trim();return t.length<=120?t:`${t.slice(0,117)}...`}function Dj(e){return{message:[`Edit checkpoints:`,...e.length>0?e.map(e=>`- ${e.id} files=${e.fileCount} ${e.createdAt} ${Ej(e.prompt)}`):[`(no edit checkpoints)`]].join(`
|
|
291
|
+
`),success:!0,data:{count:e.length,checkpoints:[...e]}}}function Oj(e){return e.length>0?e.join(`, `):`(none)`}function kj(e){let t=e.capturedFiles.length>0?e.capturedFiles.map(e=>{let t=e.snapshotSizeBytes===void 0?``:` size=${e.snapshotSizeBytes}B`;return`- ${e.relativePath} action=${e.restoreAction} snapshot=${String(e.snapshotAvailable)}${t}`}):[`(no files captured)`];return{message:[`Checkpoint ${e.target.id}`,`Prompt: ${Ej(e.target.prompt)}`,`Captured files:`,...t,`Restore later checkpoints: files=${e.restoreToCheckpoint.fileCount} checkpoints=${Oj(e.restoreToCheckpoint.checkpointIds)}`,`Rollback through checkpoint: files=${e.rollbackThroughCheckpoint.fileCount} checkpoints=${Oj(e.rollbackThroughCheckpoint.checkpointIds)}`].join(`
|
|
292
|
+
`),success:!0,data:{inspection:e}}}function Aj(e){return{message:[`Restored code to ${e.target.id}.`,`Restored files: ${e.restoredFileCount}`,`Rolled back checkpoints: ${e.restoredCheckpointCount}`].join(`
|
|
293
|
+
`),success:!0,data:{target:e.target,restoredCheckpointCount:e.restoredCheckpointCount,restoredFileCount:e.restoredFileCount,removedCheckpointCount:e.removedCheckpointCount}}}function jj(e){return{message:[`Rolled back code through ${e.target.id}.`,`Restored files: ${e.restoredFileCount}`,`Removed checkpoints: ${e.removedCheckpointCount}`].join(`
|
|
294
|
+
`),success:!0,data:{target:e.target,restoredCheckpointCount:e.restoredCheckpointCount,restoredFileCount:e.restoredFileCount,removedCheckpointCount:e.removedCheckpointCount}}}function Mj(e){return{message:e instanceof Error?e.message:String(e),success:!1}}function Nj(e,t){if(!t)return Tj();try{return kj(Z_(e,t))}catch(e){return Mj(e instanceof Error?e:String(e))}}async function Pj(e,t){if(!t)return Tj();try{return Aj(await Q_(e,t))}catch(e){return Mj(e instanceof Error?e:String(e))}}async function Fj(e,t){if(!t)return Tj();try{return jj(await $_(e,t))}catch(e){return Mj(e instanceof Error?e:String(e))}}async function Ij(e,t){let n=t.trim().split(/\s+/).filter(Boolean),r=n[0]??`list`;return r===`list`?Dj(X_(e)):r===`inspect`?Nj(e,n[1]):r===`restore`||r===`code`?Pj(e,n[1]):r===`rollback`?Fj(e,n[1]):Tj()}function Lj(){return{name:`rewind`,displayName:`Rewind History`,description:`List, inspect, restore, or rollback edit checkpoints.`,source:`rewind`,argumentHint:`list | inspect CHECKPOINT_ID | restore CHECKPOINT_ID | code CHECKPOINT_ID | rollback CHECKPOINT_ID`,modelInvocable:!1,safety:`write`,subcommands:Y_()}}function Rj(){let e=Lj();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,argumentHint:e.argumentHint,userInvocable:!0,modelInvocable:!1,safety:`write`,subcommands:e.subcommands,execute:Ij}}var zj=class{name=`rewind`;getCommands(){return[Lj()]}};function Bj(){return{name:`agent-command-rewind`,commandSources:[new zj],systemCommands:[Rj()]}}const Vj={s:1e3,m:6e4,h:36e5,d:864e5},Hj=`Usage: /schedule in <N><s|m|h|d> <instruction> | /schedule cron "<expr>" <instruction>`;function Uj(e,t){let n=e.trim();if(n.length===0)return{ok:!1,error:Hj};if(n.startsWith(`in `)){let e=n.slice(3).trim(),r=e.indexOf(` `);if(r===-1)return{ok:!1,error:`Missing instruction. ${Hj}`};let i=e.slice(0,r),a=e.slice(r+1).trim(),o=/^(\d+)(s|m|h|d)$/.exec(i);if(!o)return{ok:!1,error:`Invalid duration "${i}". ${Hj}`};if(a.length===0)return{ok:!1,error:`Missing instruction. ${Hj}`};let s=parseInt(o[1],10)*Vj[o[2]];return{ok:!0,spec:{cronExpression:new Date(t+s).toISOString(),instruction:a,recurring:!1}}}if(n.startsWith(`cron `)){let e=n.slice(5).trim(),t=/^["']([^"']+)["']\s+(.+)$/.exec(e);if(!t)return{ok:!1,error:`cron form needs a quoted expression. ${Hj}`};let r=t[2].trim();return r.length===0?{ok:!1,error:`Missing instruction. ${Hj}`}:{ok:!0,spec:{cronExpression:t[1].trim(),instruction:r,recurring:!0}}}return{ok:!1,error:Hj}}function Wj(e,t){return`${e}: ${t.slice(0,48)}${t.length>48?`…`:``}`}async function Gj(e,t,n=Date.now()){let r=Uj(t,n);if(!r.ok)return{message:r.error,success:!1};let{cronExpression:i,instruction:a,recurring:o}=r.spec,s=await e.spawnScheduledWake({label:Wj(`Scheduled`,a),cronExpression:i,agentInstruction:a});return{message:`Scheduled wake (${o?`cron \`${i}\``:`once at ${i}`}): "${a}" — task ${s.id}.`,success:!0,data:{taskId:s.id,cronExpression:i,recurring:o}}}function Kj(e){let t=/^["']([^"']+)["']\s+["']([^"']+)["']\s+(.+)$/.exec(e.trim());if(!t)return null;let n=t[3].trim();return n.length===0?null:{command:t[1],matchPattern:t[2],instruction:n}}async function qj(e,t){let n=Kj(t);if(!n)return{message:`Usage: /monitor "<command>" "<pattern>" <instruction>`,success:!1};let r=await e.spawnMonitorWake({label:Wj(`Monitor`,n.instruction),command:n.command,matchPattern:n.matchPattern,agentInstruction:n.instruction});return{message:`Monitoring \`${n.command}\` for /${n.matchPattern}/ — task ${r.id}.`,success:!0,data:{taskId:r.id,matchPattern:n.matchPattern}}}function Jj(e){let t=e.getAgentJobCapability?.();if(!t)throw Error(`Scheduling requires an active agent runtime.`);return t}function Yj(){return{name:`schedule`,displayName:`Schedule Wake`,description:`Schedule the agent to wake and run an instruction on a timer (one-shot or cron).`,source:`schedule`,argumentHint:`in <N><s|m|h|d> <instruction> | cron "<expr>" <instruction>`,modelInvocable:!0}}function Xj(){return{name:`monitor`,displayName:`Monitor Process`,description:`Watch a process’s output and wake the agent when a line matches a pattern.`,source:`schedule`,argumentHint:`"<command>" "<pattern>" <instruction>`,modelInvocable:!0}}function Zj(){let e=Yj();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!0,argumentHint:e.argumentHint,lifecycle:`inline`,execute:(e,t)=>Gj(Jj(e),t)}}function Qj(){let e=Xj();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!0,argumentHint:e.argumentHint,lifecycle:`inline`,execute:(e,t)=>qj(Jj(e),t)}}var $j=class{name=`schedule`;getCommands(){return[Yj(),Xj()]}};function eM(){return{name:`agent-command-schedule`,commandSources:[new $j],systemCommands:[Zj(),Qj()],sessionRequirements:[`agent-runtime`]}}function tM(e,t,n){return Ii(e,t,n)}function nM(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}function rM(e){return e.toLocaleString(`en-US`)}async function iM(e,t){let n=e.getUserInteraction?.();return n&&!ye(await n.ask(ge(`clear`,`Clear conversation history?`)))?{success:!0,message:`Clear cancelled.`}:(B_(e),{success:!0,message:`Conversation cleared.`,effects:[{type:`conversation-history-cleared`}]})}function aM(e,t){let n=V_(t);return n===void 0?{success:!1,message:`Usage: rename <name>`}:{success:!0,message:`Session renamed to "${n}".`,data:{name:n},effects:[H_(n)]}}function oM(e,t){return{success:!0,message:`Opening session picker...`,data:{triggerResumePicker:!0},effects:[U_()]}}const sM=`.robota/budget.json`;function cM(e){let t=(0,p.join)(e,sM);if(!(0,h.existsSync)(t))return;let n;try{n=(0,h.readFileSync)(t,`utf-8`)}catch{return}try{return JSON.parse(n)}catch{return}}function lM(e,t){(0,h.mkdirSync)((0,p.join)(e,`.robota`),{recursive:!0}),(0,h.writeFileSync)((0,p.join)(e,sM),JSON.stringify(t,null,2))}function uM(e){let t=(0,p.join)(e,sM);(0,h.existsSync)(t)&&(0,h.writeFileSync)(t,`{}`)}function dM(e){let t=e.getSession(),n=G_(e),r=t.getSessionTokenUsage?.(),i=t.getModelId?.(),a=[`Session: ${n.sessionId}`,`Messages: ${n.messageCount}`],o={sessionId:n.sessionId,messageCount:n.messageCount};if(r){if(a.push(`Tokens: ${rM(r.inputTokens)} input / ${rM(r.outputTokens)} output`),o.inputTokens=r.inputTokens,o.outputTokens=r.outputTokens,i){let t=tM(i,r.inputTokens,r.outputTokens);if(t!==void 0){a.push(`Cost: ${nM(t)} (${i})`),o.estimatedCostUsd=t;let n=cM(e.getCwd());if(n?.monthly){let e=n.monthly-t,r=Math.min(100,Math.round(t/n.monthly*100));a.push(`Budget: ${nM(e)} remaining of ${nM(n.monthly)}/mo (${r}% used)`),o.budgetMonthly=n.monthly,o.budgetRemainingUsd=e}}}}else a.push(`Tokens: not yet available (no turns completed)`);return{lines:a,data:o}}function fM(e,t){let n=t.trim();if(n.startsWith(`budget`)){let t=n.slice(6).trim();if(t===`clear`)return uM(e.getCwd()),{success:!0,message:`Monthly budget cleared.`};if(t===``){let t=cM(e.getCwd());return t?.monthly?{success:!0,message:`Monthly budget: ${nM(t.monthly)}`}:{success:!0,message:`No budget set. Use: /cost budget <amount>`}}let r=parseFloat(t);return!Number.isFinite(r)||r<=0?{success:!1,message:`Usage: /cost budget <amount> (e.g. /cost budget 5.00)`}:(lM(e.getCwd(),{monthly:r}),{success:!0,message:`Monthly budget set to ${nM(r)}.`})}let{lines:r,data:i}=dM(e);return{success:!0,message:r.join(`
|
|
295
|
+
`),data:i}}function pM(e,t){let n=K_(e);return{success:n.validation.ok,message:q_(n),data:{logFile:n.logFile,entryCount:n.entryCount,issueCount:n.validation.issues.length,ok:n.validation.ok}}}function mM(){return{name:`clear`,displayName:`Clear History`,description:`Clear conversation history`,source:`session`,modelInvocable:!1}}function hM(){return{name:`rename`,displayName:`Rename Session`,description:`Rename the current session`,source:`session`,modelInvocable:!1}}function gM(){return{name:`resume`,displayName:`Resume Session`,description:`Resume a previous session`,source:`session`,modelInvocable:!1}}function _M(){return{name:`cost`,displayName:`Session Cost`,description:`Show session token usage and estimated cost. /cost budget <amount> sets a monthly budget.`,source:`session`,modelInvocable:!1}}function vM(){return{name:`validate-session`,displayName:`Validate Session`,description:`Validate current session replay log`,source:`session`,modelInvocable:!1}}function yM(){let e=mM();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:iM}}function bM(){let e=hM();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:aM}}function xM(){let e=gM();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:oM}}function SM(){let e=_M();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:fM}}function CM(){let e=vM();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:pM}}var wM=class{name=`session`;getCommands(){return[mM(),hM(),gM(),_M(),vM()]}};function TM(){return{name:`agent-command-session`,commandSources:[new wM],systemCommands:[yM(),bM(),xM(),SM(),CM()]}}function EM(){return{name:`settings`,displayName:`Settings`,description:`Open transport settings — enable/disable transports and configure options`,source:`settings`,modelInvocable:!1}}function DM(){let e=EM();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:async()=>({success:!0,message:`Opening settings...`,effects:[{type:`settings-tui-requested`}]})}}var OM=class{name=`settings`;getCommands(){return[EM()]}};function kM(){return{name:`agent-command-settings`,commandSources:[new OM],systemCommands:[DM()]}}function AM(){let e=qn();return{command:e.command,interactiveArgs:e.interactiveArgs,commandArgs:t=>e.commandArgs(t)}}async function jM(e,t){if(e.canHandoffTerminal?.()!==!0||e.runWithTerminal===void 0)return{message:`An interactive shell is unavailable here (no interactive terminal).`,success:!1};let n=AM(),r=e.getCwd(),i=t.trim(),a=await e.runWithTerminal(async()=>i.length>0?IO(n.command,n.commandArgs(i),r):IO(n.command,n.interactiveArgs,r));return{message:i.length>0?`Command exited (code ${a}).`:`Shell session ended (code ${a}).`,success:a===0,data:{exitCode:a}}}function MM(){return{name:`shell`,displayName:`Shell`,description:"Drop to an interactive shell (or run `/shell <command>` interactively), then return to the agent.",source:`shell`,modelInvocable:!1}}function NM(){let e=MM();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!0,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:jM}}var PM=class{name=`shell`;getCommands(){return[MM()]}};function FM(){return{name:`agent-command-shell`,commandSources:[new PM],systemCommands:[NM()]}}function IM(e){let t=[];return e.modelInvocable||t.push(`model-disabled`),e.userInvocable||t.push(`model-only`),e.context&&t.push(`context:${e.context}`),e.agent&&t.push(`agent:${e.agent}`),t.length>0?` [${t.join(`, `)}]`:``}function LM(e){let t=e.argumentHint?` ${e.argumentHint}`:``;return`- ${e.name}${t}: ${e.description}${IM(e)}`}function RM(e){return e.length===0?[`No skills are registered for this session.`,``,`Skills are metadata until activated. Do not invent or imitate a skill workflow when no matching registered skill exists.`].join(`
|
|
296
|
+
`):[`Registered skills:`,...e.map(LM),``,`Activation contract:`,`- Use /skills <skill-name> [args] to activate a matching skill.`,`- Treat /<skill-name> as a virtual alias for /skills <skill-name>.`,`- The system prompt Skills section is skill selection metadata.`,`- Treat descriptions as selection metadata only, not as loaded SKILL.md content.`,`- Do not answer by merely naming, recommending, or imitating a matching skill.`,`- If no listed skill matches the task, continue without claiming a skill was activated.`].join(`
|
|
297
|
+
`)}function zM(e){let t=e.trim();if(t.length===0||t===`list`)return{action:`list`,skillArgs:``};let[n=``,...r]=t.split(/\s+/);return n.length===0?{action:`list`,skillArgs:``}:{action:`activate`,skillName:n,skillArgs:r.join(` `)}}async function BM(e,t=``){let n=zM(t);if(n.action===`activate`&&n.skillName!==void 0){if(!e.executeSkillCommandByName)return{success:!1,message:`Skill activation is not available in this session.`};let t=`/${n.skillName}${n.skillArgs?` ${n.skillArgs}`:``}`;return await e.executeSkillCommandByName(n.skillName,n.skillArgs,{invocationSource:e.getCommandInvocationSource?.()??`user`,displayInput:t,rawInput:t})??{success:!1,message:`Unknown skill: ${n.skillName}`}}let r=e.listSkills?.()??[];return{success:!0,message:RM(r),data:{skills:r,activationContract:{activateWith:`/skills <skill-name> [args]`,activationRequiredBeforeWorkflow:!0,metadataIsNotSkillContent:!0}}}}function VM(){return{name:`skills`,displayName:`Skills`,description:`Skill command. Before following a matching registered skill from the system prompt Skills section, invoke the projected skills command tool with args "<skill-name> [args]". Without arguments, list registered skills. With a skill name, activate that skill. Slash syntax is a UI input/display concern; the SDK command identity is "skills".`,source:`skills`,modelInvocable:!0,userInvocable:!0,argumentHint:`[list | <skill-name> [args]]`,safety:`read-only`}}function HM(){let e=VM();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!0,argumentHint:e.argumentHint,safety:e.safety,lifecycle:`inline`,execute:BM}}var UM=class{name=`skills`;getCommands(){return[VM()]}};function WM(e){let t=[new UM];return t.push(new Rp(e.cwd)),{name:`agent-command-skills`,commandSources:t,systemCommands:[HM()]}}const GM=[`Usage: /statusline on | off | reset | git on | git off`,`Fields: model, context, permission mode, message count, session name, thinking state, git branch.`].join(`
|
|
298
|
+
`);function KM(e){let t=e.trim().toLowerCase().split(/\s+/).filter(e=>e.length>0),[n,r]=t;return n===`on`&&r===void 0?{success:!0,message:`Status line enabled.`,patch:{enabled:!0}}:n===`off`&&r===void 0?{success:!0,message:`Status line disabled.`,patch:{enabled:!1}}:n===`reset`&&r===void 0?{success:!0,message:`Status line settings reset.`,patch:{...A_}}:n===`git`&&r===`on`&&t.length===2?{success:!0,message:`Status line git branch shown.`,patch:{gitBranch:!0}}:n===`git`&&r===`off`&&t.length===2?{success:!0,message:`Status line git branch hidden.`,patch:{gitBranch:!1}}:{success:!1,message:GM}}function qM(e,t){let n=KM(t);return n.success?{success:!0,message:n.message,effects:[{type:`statusline-settings-patch`,patch:n.patch}]}:{success:!1,message:n.message}}function JM(){return{name:`statusline`,displayName:`Status Line`,description:`Configure TUI status-line visibility and fields such as model, context, tokens, session, and git branch.`,source:`statusline`,argumentHint:`on | off | reset | git on | git off`,subcommands:j_(`statusline`),modelInvocable:!1}}function YM(){let e=JM();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,argumentHint:e.argumentHint,subcommands:e.subcommands,lifecycle:`inline`,execute:qM}}var XM=class{name=`statusline`;getCommands(){return[JM()]}};function ZM(){return{name:`agent-command-statusline`,commandSources:[new XM],systemCommands:[YM()]}}const QM=`Usage: user-local storage list [--format json] | user-local memory set <category> <key> <value> --summary <summary> --source <source> | user-local memory list [--format json] | user-local memory inspect <category> <key> [--format json] | user-local memory disable <category> <key> | user-local memory delete <category> <key>`;function $M(e){return e.length===0?`No user-local memory items.`:e.map(e=>`- ${e.category}/${e.key} (${e.enabled?`enabled`:`disabled`})`).join(`
|
|
299
|
+
`)}function eN(e){if(e===void 0)throw Error(`User-local memory category is required.`);return e}async function tN(e,t){let n=await Cy({activeRepositoryRoot:e});return{message:t.format===`json`?JSON.stringify(n,null,2):$M(n.items),success:!0,data:{list:n}}}async function nN(e,t){let[n,r,i]=t.positional,a=await Sy({activeRepositoryRoot:e,category:eN(n),key:r??``,value:i??``,summary:t.summary??``,source:t.source??``});return{message:`Stored user-local memory item ${a.category}/${a.key} at ${a.storageLocation}`,success:!0,data:{item:a}}}async function rN(e,t){let[n,r]=t.positional,i=await wy({activeRepositoryRoot:e,category:eN(n),key:r??``});return{message:t.format===`json`?JSON.stringify(i,null,2):`${i.category}/${i.key}: ${i.summary}`,success:!0,data:{item:i}}}async function iN(e,t){let[n,r]=t.positional,i=await Ty({activeRepositoryRoot:e,category:eN(n),key:r??``});return{message:`Disabled user-local memory item ${i.category}/${i.key}`,success:!0,data:{item:i}}}async function aN(e,t){let[n,r]=t.positional,i=await Ey({activeRepositoryRoot:e,category:eN(n),key:r??``});return{message:`Deleted user-local memory item ${i.category}/${i.key}`,success:!0,data:{result:i}}}async function oN(e,t){return(t.action??`list`)===`list`?tN(e,t):t.action===`set`?nN(e,t):t.action===`inspect`?rN(e,t):t.action===`disable`?iN(e,t):t.action===`delete`?aN(e,t):{message:QM,success:!1}}function sN(e){if(e===void 0||e===`text`)return`text`;if(e===`json`)return`json`;throw Error(`Unsupported user-local output format: ${e}`)}function cN(e,t,n){return e===`--format`?{format:t[n+1],nextIndex:n+1}:e.startsWith(`--format=`)?{format:e.slice(9),nextIndex:n}:e===`--summary`?{summary:t[n+1],nextIndex:n+1}:e.startsWith(`--summary=`)?{summary:e.slice(10),nextIndex:n}:e===`--source`?{source:t[n+1],nextIndex:n+1}:e.startsWith(`--source=`)?{source:e.slice(9),nextIndex:n}:null}function lN(e,t={}){let n=t.format,r=t.summary,i=t.source,a=[];for(let t=0;t<e.length;t+=1){let o=e[t],s=cN(o,e,t);if(s!==null){n=s.format??n,r=s.summary??r,i=s.source??i,t=s.nextIndex;continue}a.push(o)}return{target:a[0],action:a[1],positional:a.slice(2),format:sN(n),summary:r,source:i}}function uN(e){return e.trim().split(/\s+/).filter(Boolean)}function dN(e,t){let n=t.map(e=>`- ${e.category}`);return[`User-local storage root: ${e}`,`Categories:`,...n].join(`
|
|
300
|
+
`)}async function fN(e,t){if((t.action??`list`)!==`list`)return{message:QM,success:!1};let n=await ry({activeRepositoryRoot:e});return{message:t.format===`json`?JSON.stringify(n,null,2):dN(n.root,n.categories),success:!0,data:{root:n.root,categories:n.categories,inspection:n}}}async function pN(e,t){return t.target===`storage`?fN(e,t):t.target===`memory`?oN(e,t):{message:QM,success:!1}}function mN(e){return e.includes(`ENOENT`)?`User-local memory item not found.`:e}async function hN(e){try{return await pN(e.cwd,lN(e.argv,{format:e.format,summary:e.summary,source:e.source}))}catch(e){return{message:mN(e instanceof Error?e.message:String(e)),success:!1}}}async function gN(e,t){try{return await pN(e.getCwd(),lN(uN(t)))}catch(e){return{message:mN(e instanceof Error?e.message:String(e)),success:!1}}}function _N(){return{name:`user-local`,displayName:`User Config`,description:`Inspect Robota user-local storage and memory state.`,source:`user-local`,argumentHint:`storage list [--format json] | memory set/list/inspect/disable/delete`,modelInvocable:!1,safety:`read-only`,subcommands:[{name:`storage`,description:`Inspect user-local storage categories`,source:`user-local`},{name:`memory`,description:`Inspect and manage user-local memory items`,source:`user-local`}]}}function vN(){let e=_N();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,argumentHint:e.argumentHint,safety:e.safety,subcommands:e.subcommands,execute:gN}}var yN=class{name=`user-local`;getCommands(){return[_N()]}};function bN(){return{name:`agent-command-user-local`,commandSources:[new yN],systemCommands:[vN()]}}function xN(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}function SN({cwd:e,providerDefinitions:t,providerSettingsAdapter:n,enabledCommandModules:r,disabledCommandModules:i}){return xN([WM({cwd:e}),rk(),ZD(),Fk(),Ak(),dA(),lk(),rO(),QO(),FM(),VO(),wk(),bN(),lO(),PO(),KO(),TM(),wj(),Bj(),eM(),ZM(),eA(),kM(),mj({providerDefinitions:t,settings:n})],r,i)}function CN(e){let t=(0,m.homedir)(),n=(0,p.join)(t,`.robota`,`plugins`),r=(0,p.join)(t,`.robota`,`settings.json`),i=(e,t)=>(0,c.execSync)(e,{timeout:t.timeout,stdio:t.stdio??`pipe`}),a=new Vv(r),o=new qv({pluginsDir:n,exec:i});return{cwd:e,marketplace:o,installer:new Hv({pluginsDir:n,settingsStore:a,marketplaceClient:o,exec:i}),loader:new Mh(n),settingsStore:a}}async function wN(e){let t=await e.loader.loadAll(),n=e.settingsStore.getEnabledPlugins();return t.map(e=>{let t=e.pluginDir.split(`/`),r=t.indexOf(`cache`),i=r>=0?t[r+1]??``:``,a=i?`${e.manifest.name}@${i}`:e.manifest.name;return{name:a,description:e.manifest.description,enabled:n[a]!==!1&&n[e.manifest.name]!==!1}})}async function TN(e,t){let n;try{n=e.marketplace.fetchManifest(t)}catch{return[]}let r=e.installer.getInstalledPlugins(),i=new Set(Object.values(r).map(e=>e.pluginName));return n.plugins.map(e=>({name:e.name,description:e.description,installed:i.has(e.name)}))}async function EN(e,t,n){let[r,i]=t.split(`@`);if(!r||!i)throw Error(`Plugin ID must be in format: name@marketplace`);if(n===`project`){await new Hv({pluginsDir:(0,p.join)(e.cwd,`.robota`,`plugins`),settingsStore:e.settingsStore,marketplaceClient:e.marketplace,exec:(e,t)=>(0,c.execSync)(e,{timeout:t.timeout,stdio:t.stdio??`pipe`})}).install(r,i);return}await e.installer.install(r,i)}async function DN(e,t){let n=e.installer.getPluginsByMarketplace(t);for(let t of n)await e.installer.uninstall(`${t.pluginName}@${t.marketplace}`);e.marketplace.removeMarketplace(t)}function ON(e){return e.marketplace.listMarketplaces().map(e=>({name:e.name,type:e.source.type}))}function kN(e){let t=CN(e);return{listInstalled:()=>wN(t),listAvailablePlugins:e=>TN(t,e),install:(e,n)=>EN(t,e,n),uninstall:async e=>t.installer.uninstall(e),enable:async e=>t.installer.enable(e),disable:async e=>t.installer.disable(e),marketplaceAdd:async e=>e.includes(`/`)&&!e.includes(`:`)?t.marketplace.addMarketplace({type:`github`,repo:e}):t.marketplace.addMarketplace({type:`git`,url:e}),marketplaceRemove:e=>DN(t,e),marketplaceUpdate:async e=>t.marketplace.updateMarketplace(e),marketplaceList:async()=>ON(t),reloadPlugins:async()=>({loadedPluginCount:(await t.loader.loadAll()).length})}}const AN=`plugin`;function jN(){return process.env.HOME??(0,m.homedir)()}function MN(e){let t=new Mh((0,p.join)(jN(),`.robota`,`plugins`));try{let n=t.loadPluginsSync();return n.length===0?(e.replaceSource(AN),0):(e.replaceSource(AN,new Lg(n)),n.length)}catch{return e.replaceSource(AN),0}}function NN(e){if(e===void 0||e===`user`||e===`project-local`)return e;throw Error(`Invalid --settings-scope "${e}". Valid: user | project-local`)}function PN(e,t,n,r=xD()){let i=Vp(e,NN(t.settingsScope));return t.configureProvider?(Eg(i,LN(t),{providerDefinitions:r}),n.writeLine(`Provider profile saved to ${i}`),!t.printMode&&t.positional.length===0):t.provider&&t.setCurrent?(Dg(t.settingsScope===void 0?wg(e):i,t.provider,{knownProviders:Ng(e).providers}),n.writeLine(`Current provider set to ${t.provider}`),!t.printMode&&t.positional.length===0):!1}async function FN(e,t,n,r,i=xD(),a){await _j(e,{provider:t.provider,settingsScope:NN(t.settingsScope)},n,r,i,{formatError:RN,isInteractive:a===void 0?()=>process.stdin.isTTY===!0&&process.stdout.isTTY===!0:()=>a})}async function IN(e,t,n,r,i=xD()){await gj(e,{settingsScope:NN(t.settingsScope)},n,r,i)}function LN(e){let t=e.providerType??e.configureProvider;if(!e.configureProvider||!t)throw Error(`--configure-provider requires a provider profile and --type`);return{profile:e.configureProvider,type:t,...e.model!==void 0&&{model:e.model},...e.apiKey!==void 0&&{apiKey:e.apiKey},...e.apiKeyEnv!==void 0&&{apiKeyEnv:e.apiKeyEnv},...e.baseURL!==void 0&&{baseURL:e.baseURL},setCurrent:e.setCurrent}}function RN(e=xD()){return[`No provider configuration found.`,"Run `robota --configure` in an interactive terminal, or configure a provider:",`Supported providers: ${pe(e)}`,...e.map(zN)].join(`
|
|
301
|
+
`)}function zN(e){return` ${[`robota --configure-provider ${e.type}`,`--type ${e.type}`,...e.defaults?.baseURL===void 0?[]:[`--base-url <url>`],`--model <model>`,...e.requiresApiKey===!0?[`--api-key-env <ENV_NAME>`]:[],`--set-current`].join(` `)}`}const BN={running:{symbol:`⟳`,color:`yellow`},success:{symbol:`✓`,color:`green`},error:{symbol:`✗`,color:`red`},denied:{symbol:`⊘`,color:`yellowBright`},waiting:{symbol:`◴`,color:`yellow`},cancelled:{symbol:`⊗`,color:`yellow`},idle:{symbol:`·`,color:`gray`}};function VN(e){return e.isRunning?`running`:e.result===`error`?`error`:e.result===`denied`?`denied`:`success`}const HN=[`active`,`queued`,`running`,`sleeping`];function UN(e,t){return t===`failed`||e===`failed`?`error`:t===`permission`||e===`waiting_permission`?`waiting`:e===`completed`?`success`:e===`cancelled`?`cancelled`:HN.includes(e)?`running`:`idle`}const WN=[`active`,`queued`,`running`,`waiting_permission`,`sleeping`],GN=/\s+/g;function KN(e){return(e?.entries??[]).filter(e=>e.kind===`background_task`&&e.visibility==="default")}function qN(e){return KN(e).filter(e=>WN.includes(e.status)).length}function JN(e,t={}){let n=e.id===t.selectedEntryId,r={id:e.id,radio:n?`●`:`○`,title:XN(e),subtitle:ZN(e),statusLabel:QN(e.status),preview:eP(e.preview??e.currentAction),color:$N(e),isSelected:n};return{...r,accessibleText:tP(r)}}function YN(e){let t=e.text.trim().replace(GN,` `);return t?t.length>160?`${t.slice(0,160)}...`:t:e.kind}function XN(e){return e.kind===`main_thread`?e.title:e.kind===`background_group`?`${e.title} group`:e.taskKind===`agent`?`${e.title} agent`:e.taskKind===`process`?e.title||`Process`:e.taskKind===`scheduled`?e.title||`Scheduled`:e.title}function ZN(e){return e.kind===`main_thread`?e.subtitle:[e.taskKind,e.subtitle,e.attention===`none`?void 0:e.attention].filter(e=>typeof e==`string`&&e.length>0).join(` · `)||void 0}function QN(e){return e.replace(/_/g,` `)}function $N(e){return BN[UN(e.status,e.attention)].color}function eP(e){return e?.trim().replace(GN,` `)||void 0}function tP(e){return[e.radio,e.title,e.statusLabel,e.subtitle,e.preview].filter(e=>typeof e==`string`&&e.length>0).join(` · `)}function nP(e,t={}){let n=JN(e),r=BN[UN(e.status,e.attention)].symbol,i=[n.statusLabel,n.subtitle].filter(e=>typeof e==`string`&&e.length>0);return{connector:t.isLast===!1?`├`:`└`,marker:r,color:n.color,label:n.title,segments:i,preview:n.preview,accessibleText:[`${t.isLast===!1?`├`:`└`} ${r} ${n.title}`,...i,n.preview].filter(e=>typeof e==`string`&&e.length>0).join(` · `)}}function rP({entries:e,focusedIndex:t=null}){return e.length===0?null:(0,A.jsxs)(O.Box,{flexDirection:`column`,marginBottom:1,children:[(0,A.jsxs)(O.Box,{children:[(0,A.jsx)(O.Text,{color:`cyan`,bold:!0,children:`Background work`}),(0,A.jsx)(O.Text,{dimColor:!0,children:t===null?` · ↓ select · Ctrl+B all`:` · ↑↓ select · Enter open · Esc back`})]}),e.map((n,r)=>{let i=nP(n,{isLast:r===e.length-1});return(0,A.jsxs)(O.Text,{wrap:`truncate-end`,inverse:r===t,children:[`${i.connector} `,(0,A.jsx)(O.Text,{color:i.color,children:i.marker}),` ${i.label}`,i.segments.map((e,t)=>(0,A.jsx)(O.Text,{dimColor:!0,children:` · ${e}`},`${e}-${t}`)),i.preview?(0,A.jsx)(O.Text,{dimColor:!0,children:` · ${i.preview}`}):null]},n.id)})]})}function iP({percentage:e}){return e>=90?(0,A.jsx)(O.Box,{borderStyle:`single`,borderColor:`red`,paddingX:1,children:(0,A.jsxs)(O.Text,{color:`red`,bold:!0,children:[`⚠ Context at `,Math.round(e),`% — window nearly full. Run /compact to summarize the conversation.`]})}):e>=70?(0,A.jsx)(O.Box,{paddingX:1,children:(0,A.jsxs)(O.Text,{color:`yellow`,children:[`Context at `,Math.round(e),`% — consider running /compact to free up space.`]})}):null}function aP({entry:e,page:t,loading:n,error:r}){let i=JN(e,{selectedEntryId:e.id}),a=t?.records.slice(-12)??[];return(0,A.jsxs)(O.Box,{flexDirection:`column`,marginBottom:1,children:[(0,A.jsx)(O.Text,{color:`cyan`,bold:!0,children:`Viewing ${i.title}`}),(0,A.jsxs)(O.Text,{dimColor:!0,children:[i.statusLabel,i.subtitle?` · ${i.subtitle}`:``,i.preview?` · ${i.preview}`:``]}),n?(0,A.jsx)(O.Text,{dimColor:!0,children:`Loading workspace detail...`}):null,r?(0,A.jsx)(O.Text,{color:`red`,children:r}):null,!n&&!r&&a.length===0?(0,A.jsx)(O.Text,{dimColor:!0,children:`No detail yet`}):null,!n&&!r&&a.map(e=>{let{symbol:t,color:n}=oP(e.kind);return(0,A.jsxs)(O.Text,{color:n,children:[t?`${t} `:``,YN(e)]},e.id)}),t?.nextCursor?(0,A.jsx)(O.Text,{dimColor:!0,children:`... more detail available`}):null]})}function oP(e){return e===`error`?{symbol:BN.error.symbol,color:BN.error.color}:e===`result`?{symbol:BN.success.symbol,color:BN.success.color}:e===`group_summary`?{symbol:`▸`,color:`cyan`}:e===`process_output`?{symbol:`·`,color:`white`}:{symbol:``,color:void 0}}function sP(){return{selectedIndex:0,scrollOffset:0,resolved:!1}}function cP(e){if(e.escape===!0)return`cancel`;if(e.upArrow===!0)return`previous`;if(e.downArrow===!0)return`next`;if(e.return===!0)return`select`}function lP(e){if(e.escape===!0)return`cancel`;if(e.leftArrow===!0||e.upArrow===!0)return`previous`;if(e.rightArrow===!0||e.downArrow===!0)return`next`;if(e.return===!0)return`select`}function uP(e,t,n){if(e.resolved)return{state:e,effect:{type:`none`}};if(t===`cancel`)return{state:{...e,resolved:!0},effect:{type:`cancel`}};if(n.enabled===!1||n.itemCount===0)return{state:e,effect:{type:`none`}};if(t===`select`){let t=mP(e.selectedIndex,n.itemCount);return{state:{...e,selectedIndex:t,resolved:!0},effect:{type:`select`,index:t}}}let r=fP(e.selectedIndex,t,n),i=pP(r,e.scrollOffset,n);return{state:{...e,selectedIndex:r,scrollOffset:i},effect:{type:`none`}}}function dP(e,t){if(t.itemCount===0)return{...e,selectedIndex:0,scrollOffset:0};let n=mP(e.selectedIndex,t.itemCount),r=pP(n,e.scrollOffset,t);return n===e.selectedIndex&&r===e.scrollOffset?e:{...e,selectedIndex:n,scrollOffset:r}}function fP(e,t,n){return t===`previous`?n.wrap===!0&&e===0?n.itemCount-1:Math.max(0,e-1):n.wrap===!0&&e===n.itemCount-1?0:Math.min(n.itemCount-1,e+1)}function pP(e,t,n){let r=n.maxVisible??n.itemCount;return r<=0?0:e<t?e:e>=t+r?e-r+1:Math.max(0,t)}function mP(e,t){return Math.min(Math.max(e,0),t-1)}function hP({snapshot:e,selectedEntryId:t,onSelect:n,onClose:r}){let{normalized:i,visibleEntries:a,applyAction:o}=gP({entries:[...e?.entries??[]],selectedEntryId:t,onSelect:n,onClose:r});return(0,O.useInput)((e,t)=>{let n=cP(t);n!==void 0&&o(n)}),(0,A.jsxs)(O.Box,{flexDirection:`column`,borderStyle:`round`,borderColor:`cyan`,paddingX:1,children:[(0,A.jsx)(O.Text,{color:`cyan`,bold:!0,children:`Execution workspace`}),(0,A.jsx)(O.Box,{flexDirection:`column`,marginTop:1,children:a.length===0?(0,A.jsx)(O.Text,{dimColor:!0,children:`No workspace entries`}):a.map((e,n)=>(0,A.jsx)(yP,{entry:e,isFocused:i.scrollOffset+n===i.selectedIndex,selectedEntryId:t},e.id))}),(0,A.jsx)(O.Text,{dimColor:!0,children:`Ctrl+B Close ↑↓ Navigate Enter Switch Esc Close`})]})}function gP({entries:e,selectedEntryId:t,onSelect:n,onClose:r}){let[i,a]=(0,k.useState)(()=>sP()),o=(0,k.useRef)(i);(0,k.useEffect)(()=>{let n=vP({selectedIndex:Math.max(0,e.findIndex(e=>e.id===t)),itemCount:e.length});o.current=n,a(n)},[e.length,t]);let s=vP({selectedIndex:i.selectedIndex,scrollOffset:i.scrollOffset,itemCount:e.length});return s!==i&&(o.current=s),{normalized:s,visibleEntries:e.slice(s.scrollOffset,s.scrollOffset+8),applyAction:_P({entries:e,stateRef:o,setState:a,onSelect:n,onClose:r})}}function _P({entries:e,stateRef:t,setState:n,onSelect:r,onClose:i}){return a=>{let o=uP(t.current,a,{itemCount:e.length,maxVisible:8}),s=o.effect.type===`select`||o.effect.type===`cancel`?{...o.state,resolved:!1}:o.state;if(t.current=s,n(s),o.effect.type===`cancel`)i();else if(o.effect.type===`select`){let t=e[o.effect.index];t&&r(t.id)}}}function vP(e){return dP({selectedIndex:e.selectedIndex,scrollOffset:e.scrollOffset??0,resolved:!1},{itemCount:e.itemCount,maxVisible:8})}function yP({entry:e,isFocused:t,selectedEntryId:n}){let r=JN(e,{selectedEntryId:n});return(0,A.jsxs)(O.Text,{children:[(0,A.jsx)(O.Text,{color:t?`cyan`:void 0,bold:t,children:t?`> `:` `}),(0,A.jsx)(O.Text,{color:r.color,children:r.radio}),(0,A.jsx)(O.Text,{color:t?`cyan`:void 0,bold:t,children:` ${r.title}`}),(0,A.jsx)(O.Text,{dimColor:!0,children:` · ${r.statusLabel}`}),r.subtitle?(0,A.jsx)(O.Text,{dimColor:!0,children:` · ${r.subtitle}`}):null,r.preview?(0,A.jsx)(O.Text,{dimColor:!0,children:` · ${r.preview}`}):null]})}function bP(e,t,n){return t<=0?{type:`exit`}:n.upArrow?{type:`move`,index:e>0?e-1:null}:n.downArrow?{type:`move`,index:e<t-1?e+1:e}:n.return?{type:`open`,index:Math.min(Math.max(e,0),t-1)}:n.escape?{type:`exit`}:{type:`none`}}function xP(){return{listInstalled:async()=>[],listAvailablePlugins:async()=>[],install:async()=>void 0,uninstall:async()=>void 0,enable:async()=>void 0,disable:async()=>void 0,marketplaceAdd:async()=>``,marketplaceRemove:async()=>void 0,marketplaceUpdate:async()=>void 0,marketplaceList:async()=>[],reloadPlugins:async()=>({loadedPluginCount:0})}}function SP(e){return(0,k.useMemo)(()=>xP(),[])}function CP(e,t){for(let n of e){if(n.type===`language-change-requested`)return wP(n.language,t),!0;if(n.type===`settings-reset-requested`)return TP(t),!0;if(n.type===`session-exit-requested`)return t.requestShutdown(n.reason??`prompt_input_exit`,n.message??`User requested exit`),!0;if(n.type===`session-restart-requested`)return t.requestShutdown(n.reason,n.message),!0;if(n.type===`plugin-tui-requested`)return t.openPluginTUI(),!0;if(n.type===`settings-tui-requested`)return t.openTransportTUI(),!0;if(n.type===`agent-switcher-requested`)return t.openAgentSwitcher(),!0;if(n.type===`session-picker-requested`)return t.openSessionPicker(),!0;if(n.type===`session-renamed`)return t.renameSession(n.name),!0;if(n.type===`statusline-settings-patch`&&M_(n.patch))return t.applyStatusLinePatch(n.patch)}return!1}function wP(e,t){let n=t.cliAdapter.getUserSettingsPath(),r=t.cliAdapter.readSettings(n);r.language=e,t.cliAdapter.writeSettings(n,r),t.addEntry(P(H(`Language set to "${e}". Restarting...`))),t.requestShutdown(`other`,`Language change restart`)}function TP(e){let t=e.cliAdapter.getUserSettingsPath();e.cliAdapter.deleteSettings(t)?e.addEntry(P(H(`Deleted ${t}. Exiting...`))):e.addEntry(P(H(`No user settings found.`))),e.requestShutdown(`other`,`Reset settings restart`)}const EP=(0,k.createContext)(null),DP=EP.Provider;function OP(){let e=(0,k.useContext)(EP);if(!e)throw Error(`TuiCliAdapterContext not provided`);return e}function kP({cwd:e,providerOverride:t,interactiveSession:n,commandEffectQueue:r,addEntry:i,baseHandleSubmit:a,setSessionName:o,setStatusLineSettings:s,showSessionPickerOnStart:c,openAgentSwitcher:l}){let{exit:u}=(0,O.useApp)(),d=OP(),[f,p]=(0,k.useState)(!1),[m,h]=(0,k.useState)(c??!1),[g,_]=(0,k.useState)(!1),v=(0,k.useCallback)((e,t)=>{i(P(H(`Shutting down...`))),setTimeout(()=>{n.shutdown({reason:e,message:t}).finally(()=>u())},500)},[n,i,u]),y=(0,k.useCallback)(e=>CP(e,{addEntry:i,requestShutdown:v,openPluginTUI:()=>p(!0),openSessionPicker:()=>h(!0),openTransportTUI:()=>_(!0),openAgentSwitcher:()=>l?.(),renameSession:e=>{n.setName(e),o(e)},applyStatusLinePatch:e=>(s(d.applyStatusLineSettings(d.getUserSettingsPath(),e)),!0),cliAdapter:d}),[i,d,n,v,o,s]),b=(0,k.useCallback)(()=>{let e=r.drain();return e===void 0?!1:y(e.effects)},[y,r]);return{handleSubmit:(0,k.useCallback)(async e=>{await a(e),b()},[a,b]),showPluginTUI:f,showSessionPicker:m,showTransportTUI:g,setShowPluginTUI:p,setShowSessionPicker:h,setShowTransportTUI:_}}function AP(e){let t={...A_},n=e.statusline;return jP(n)?{enabled:typeof n.enabled==`boolean`?n.enabled:t.enabled,gitBranch:typeof n.gitBranch==`boolean`?n.gitBranch:t.gitBranch}:t}function jP(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function MP(){let e=OP();return(0,k.useState)(()=>AP(e.readSettings(e.getUserSettingsPath())))}function NP(e){let[t,n]=(0,k.useState)(!1);return(0,k.useEffect)(()=>{if(e)return e.registerSuspendHooks({suspend:async()=>{n(!0),await new Promise(e=>setTimeout(e,50))},resume:()=>n(!1)})},[e]),t}function PP(e){let[,t]=(0,k.useState)(0);(0,k.useEffect)(()=>(e.onChange=()=>t(e=>e+1),()=>{e.onChange=null}),[e]);let n=e.stateManager,r=(0,k.useCallback)(t=>e.selectExecutionWorkspaceEntry(t),[e]),i=(0,k.useCallback)(t=>e.readExecutionWorkspaceDetail(t),[e]);return{interactiveSession:e.getSession(),registry:e.getRegistry(),commandEffectQueue:e.getCommandEffectQueue(),history:n.history,addEntry:e=>n.addEntry(e),streamingText:n.streamingText,activeTools:n.activeTools,isThinking:n.isThinking,isAborting:n.isAborting,lastErrorMessage:n.lastErrorMessage,isStalled:n.isStalled,isShuttingDown:e.isShuttingDown,pendingPrompt:n.pendingPrompt,executionWorkspaceSnapshot:n.executionWorkspaceSnapshot,selectedExecutionEntryId:n.selectedExecutionEntryId,permissionRequest:e.permissionRequest,pendingUserAction:e.pendingUserAction??null,contextState:n.contextState,handleSubmit:t=>e.handleInput(t),handleAbort:()=>e.abort(),handleCancelQueue:()=>e.cancelQueue(),handleShutdown:t=>e.shutdown({reason:t}),selectExecutionWorkspaceEntry:r,readExecutionWorkspaceDetail:i}}const FP=`[200~`,IP=`[201~`;function LP(e){return{value:e,cursor:e.length,isPasting:!1,pasteBuffer:``}}function RP(e,t,n){return t===e.value?e:{...e,value:t,cursor:n==null?t.length:Math.min(n,t.length)}}function zP(e,t,n,r){let i=VP(e,t,r);if(i!==void 0)return i;let a=HP(e,t,n,r);if(a!==void 0)return a;let o=UP(e,n,r);return o===void 0?$P(e,t):o}function BP(e,t,n){let r=t.replace(/\r\n?/g,`
|
|
302
|
+
`);return r.length===0?{state:e,effect:{type:`none`}}:r.includes(`
|
|
303
|
+
`)&&n.canPaste?{state:e,effect:{type:`paste`,text:r,cursor:e.cursor}}:$P(e,r)}function VP(e,t,n){if(t===FP||t.startsWith(FP))return JP(e,t);if(e.isPasting)return YP(e,t,n)}function HP(e,t,n,r){if(n.ctrl===!0&&t===`c`||n.tab===!0)return{state:e,effect:{type:`none`}};if(n.return===!0)return{state:e,effect:{type:`submit`,value:e.value}};if(t.length>1&&(t.includes(`
|
|
304
|
+
`)||t.includes(`\r`))&&r.canPaste)return{state:e,effect:{type:`paste`,text:t.replace(/\r\n?/g,`
|
|
305
|
+
`),cursor:e.cursor}}}function UP(e,t,n){if(t.upArrow===!0||t.downArrow===!0)return n.enableVerticalNavigation===!1?{state:e,effect:{type:`none`}}:XP(e,t.upArrow===!0?`up`:`down`,n.availableWidth);if(t.leftArrow===!0)return ZP(e,`left`);if(t.rightArrow===!0)return ZP(e,`right`);if(t.backspace===!0||t.delete===!0)return QP(e)}function WP(e){if(!e||e.length===0)return``;let t=``;for(let n of e){let e=n.charCodeAt(0);e>31&&e!==127&&(t+=n)}return t}function GP(e,t,n){return{value:e.slice(0,t)+n+e.slice(t),cursor:t+n.length}}function KP(e,t,n){let r=0;for(let i=0;i<t&&i<e.length;i++){let t=(0,ee.default)(e[i]),a=r%n;a+t>n&&(r+=n-a),r+=t}return r}function qP(e,t,n){let r=0;for(let i=0;i<e.length;i++){if(r>=t)return i;let a=(0,ee.default)(e[i]),o=r%n;o+a>n&&(r+=n-o),r+=a}return e.length}function JP(e,t){return{state:{...e,isPasting:!0,pasteBuffer:t.slice(5)},effect:{type:`none`}}}function YP(e,t,n){if(t!==IP&&!t.includes(IP))return{state:{...e,pasteBuffer:e.pasteBuffer+t},effect:{type:`none`}};let r=t.split(IP)[0]??``;return BP({...e,isPasting:!1,pasteBuffer:``},e.pasteBuffer+r,n)}function XP(e,t,n){if(!n||n<=0)return{state:e,effect:{type:`none`}};let r=[...e.value],i=KP(r,e.cursor,n),a=t===`up`?i-n:i+n;if(a<0)return{state:e,effect:{type:`none`}};let o=qP(r,a,n);return o===e.cursor?{state:e,effect:{type:`none`}}:{state:{...e,cursor:o},effect:{type:`render`}}}function ZP(e,t){return t===`left`&&e.cursor>0?{state:{...e,cursor:e.cursor-1},effect:{type:`render`}}:t===`right`&&e.cursor<e.value.length?{state:{...e,cursor:e.cursor+1},effect:{type:`render`}}:{state:e,effect:{type:`none`}}}function QP(e){if(e.cursor===0)return{state:e,effect:{type:`none`}};let t=e.value.slice(0,e.cursor-1)+e.value.slice(e.cursor);return{state:{...e,value:t,cursor:e.cursor-1},effect:{type:`change`,value:t}}}function $P(e,t){let n=WP(t);if(n.length===0)return{state:e,effect:{type:`none`}};let r=GP(e.value,e.cursor,n);return{state:{...e,value:r.value,cursor:r.cursor},effect:{type:`change`,value:r.value}}}function eF({value:e,onChange:t,onSubmit:n,onPaste:r,placeholder:i=``,focus:a=!0,showCursor:o=!0,availableWidth:s,cursorHint:c=null,enableVerticalNavigation:l=!0}){let u=(0,k.useRef)(LP(e)),[,d]=(0,k.useState)(0);return u.current=RP(u.current,e,c),tF({stateRef:u,onChange:t,onSubmit:n,onPaste:r,availableWidth:s,focus:a,enableVerticalNavigation:l,forceRender:d}),(0,A.jsx)(O.Text,{children:aF(u.current.value,u.current.cursor,i,o&&a)})}function tF(e){(0,O.usePaste)(t=>{rF(e,()=>BP(e.stateRef.current,t,nF(e)))},{isActive:e.focus}),(0,O.useInput)((t,n)=>{rF(e,()=>zP(e.stateRef.current,t,n,nF(e)))},{isActive:e.focus})}function nF(e){return{availableWidth:e.availableWidth,canPaste:e.onPaste!==void 0,enableVerticalNavigation:e.enableVerticalNavigation}}function rF(e,t){try{let n=t();e.stateRef.current=n.state,iF(n.effect,e.onChange,e.onSubmit,e.onPaste,e.forceRender)}catch{}}function iF(e,t,n,r,i){e.type===`change`?t(e.value):e.type===`submit`?n?.(e.value):e.type===`paste`?r?.(e.text,e.cursor):e.type===`render`&&i(e=>e+1)}function aF(e,t,n,r){if(!r)return e.length>0?e:n?j.default.gray(n):``;if(e.length===0)return n.length>0?j.default.inverse(n[0])+j.default.gray(n.slice(1)):j.default.inverse(` `);let i=[...e],a=``;for(let e=0;e<i.length;e++){let n=i[e]??``;a+=e===t?j.default.inverse(n):n}return t>=i.length&&(a+=j.default.inverse(` `)),a}function oF(e){if(e.upArrow===!0)return`previous`;if(e.downArrow===!0)return`next`;if(e.escape===!0)return`close`;if(e.tab===!0)return`complete`}function sF(e){if(e.backspace===!0||e.delete===!0)return`cancelQueue`}function cF(e){if(e.upArrow===!0)return`previous`;if(e.downArrow===!0)return`next`}function lF(){return{selectedIndex:null,draft:``}}function uF(e,t,n,r){if(t.length===0)return{value:e,cursorHint:e.length,state:n};if(r===`previous`){let r=n.selectedIndex===null?t.length-1:Math.max(0,n.selectedIndex-1),i=t[r]??e;return{value:i,cursorHint:i.length,state:{selectedIndex:r,draft:n.selectedIndex===null?e:n.draft}}}if(n.selectedIndex===null)return{value:e,cursorHint:e.length,state:n};if(n.selectedIndex<t.length-1){let r=n.selectedIndex+1,i=t[r]??e;return{value:i,cursorHint:i.length,state:{...n,selectedIndex:r}}}return{value:n.draft,cursorHint:n.draft.length,state:lF()}}function dF(e,t){let n=t.trim();return n.length===0||e[e.length-1]===n?[...e]:[...e,n]}function fF(e){let t=[];for(let n of e){if(n.category!==`chat`||n.type!==`user`)continue;let e=n.data;typeof e?.content==`string`&&(t=dF(t,e.content))}return t}function pF(e,t,n){return t===0?0:n===`previous`?e>0?e-1:t-1:e<t-1?e+1:0}function mF(e,t){if(Dy(e)&&e.slice(1).includes(` `)){let{name:n}=Oy(e);return{type:`insert`,value:`/${n} ${t.name} `}}return t.subcommands&&t.subcommands.length>0?{type:`insert`,value:`/${t.name} `,selectedIndex:0}:{type:`insert`,value:`/${t.name} `}}function hF(e,t){if(Dy(e)&&e.slice(1).includes(` `)){let{name:n}=Oy(e);return{type:`submit`,value:`/${n} ${t.name}`}}return t.subcommands&&t.subcommands.length>0?{type:`insert`,value:`/${t.name} `,selectedIndex:0}:{type:`submit`,value:`/${t.name}`}}function gF(e,t,n,r){let i=r.split(`
|
|
306
|
+
`).length,a=`[Pasted text #${n} +${i} lines]`;return{value:e.slice(0,t)+a+e.slice(t),cursorHint:t+a.length,label:a,lineCount:i}}function _F(e){return e.trim().length>0}function vF(e){if(!e.startsWith(`/`))return{isSlash:!1,parentCommand:``,filter:``};let t=e.slice(1),n=t.indexOf(` `);return n===-1?{isSlash:!0,parentCommand:``,filter:t}:{isSlash:!0,parentCommand:t.slice(0,n),filter:t.slice(n+1)}}function yF(e,t){let[n,r]=(0,k.useState)(0),[i,a]=(0,k.useState)(!1),o=k.default.useRef(e);o.current!==e&&(o.current=e,i&&a(!1));let s=vF(e),c=s.isSlash&&s.parentCommand.length>0,l=(0,k.useMemo)(()=>{if(!t||!s.isSlash||i)return[];if(c){let e=t.getSubcommands(s.parentCommand);if(e.length===0)return[];if(!s.filter)return e;let n=s.filter.toLowerCase();return e.filter(e=>e.name.toLowerCase().startsWith(n))}return t.getCommands(s.filter)},[t,s.isSlash,s.parentCommand,s.filter,i,c]),u=s.isSlash&&l.length>0&&!i;return n>=l.length&&l.length>0&&r(l.length-1),{showPopup:u,filteredCommands:l,selectedIndex:n,setSelectedIndex:r,isSubcommandMode:c,setShowPopup:e=>{a(typeof e==`function`?t=>!e(!t):!e)}}}function bF(){let{stdout:e}=(0,O.useStdout)(),t=()=>Math.max(40,(e.columns??80)-4),[n,r]=(0,k.useState)(t);return(0,k.useEffect)(()=>{let n=()=>r(t());return e.on(`resize`,n),()=>{e.off(`resize`,n)}},[e]),n}function xF(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e.padEnd(t)}function SF(e){let{cmd:t,isSelected:n,showSlash:r,rowWidth:i,nameColWidth:a}=e,o=n?`> `:` `,s=n?`cyan`:void 0,c=!n,l=xF(t.name,a);return(0,A.jsx)(O.Box,{width:i,children:(0,A.jsx)(O.Text,{color:s,dimColor:c,wrap:`truncate-end`,children:r?`${o}/${l} ${t.description??``}`:`${o}${l} ${t.description??``}`})})}function CF({commands:e,selectedIndex:t,visible:n,isSubcommandMode:r}){let i=bF();if(!n||e.length===0)return null;let a=wF(t,e.length),o=e.slice(a,a+8),s=Math.min(20,Math.max(...o.map(e=>e.name.length)));return(0,A.jsxs)(O.Box,{flexDirection:`column`,borderStyle:`round`,borderColor:`gray`,paddingX:1,children:[o.map((e,n)=>(0,A.jsx)(SF,{cmd:e,isSelected:a+n===t,showSlash:!r,rowWidth:i,nameColWidth:s},e.name)),(0,A.jsx)(O.Text,{dimColor:!0,children:` ↑↓ Navigate Tab Complete Enter Select Esc Close`})]})}function wF(e,t){if(t<=8||e<8)return 0;let n=t-8;return Math.min(e-8+1,n)}const TF=/\[Pasted text #(\d+)(?: \+\d+ lines)?\]/g;function EF(e,t){return e.replace(TF,(e,n)=>t.get(Number(n))??``)}function DF(){if(`NO_COLOR`in process.env)return!1;let e=process.env.FORCE_COLOR;return e===`0`?!1:e!==void 0&&e!==``?!0:!!process.stdout.isTTY}const OF=[`#666666`,`#888888`,`#aaaaaa`,`#888888`];function kF({text:e}){let t=DF(),[n,r]=(0,k.useState)(0);return(0,k.useEffect)(()=>{if(!t)return;let e=setInterval(()=>{r(e=>e+1)},400);return()=>clearInterval(e)},[t]),t?(0,A.jsx)(O.Text,{children:[...e].map((e,t)=>(0,A.jsx)(O.Text,{color:OF[(n+Math.floor(t/4))%OF.length],children:e},t))}):(0,A.jsx)(O.Text,{color:OF[2],children:e})}function AF({onSubmit:e,onCancelQueue:t,isDisabled:n,isAborting:r,pendingPrompt:i,registry:a,sessionName:o,history:s,onRequestFocusBackgroundList:c}){let[l,u]=(0,k.useState)(``),[d,f]=(0,k.useState)(null),[p,m]=(0,k.useState)(lF),[h,g]=(0,k.useState)([]),_=(0,k.useMemo)(()=>fF(s??[]),[s]),v=(0,k.useMemo)(()=>h.reduce((e,t)=>dF(e,t),_),[_,h]),y=(0,k.useRef)(new Map),{columns:b}=(0,O.useWindowSize)(),x=b>0?b:80,S=Math.max(1,x-3),C=(0,k.useRef)(0),{showPopup:w,filteredCommands:T,selectedIndex:E,setSelectedIndex:D,isSubcommandMode:j,setShowPopup:ee}=yF(l,a),te=(0,k.useCallback)((e,t)=>{C.current+=1;let n=C.current;y.current.set(n,e),u(r=>{let i=gF(r,t,n,e);return f(i.cursorHint),i.value})},[]),ne=(0,k.useCallback)(()=>{m(lF())},[]),re=(0,k.useCallback)(e=>{g(t=>dF(t,e))},[]),ie=(0,k.useCallback)(t=>{re(t),ne(),e(t)},[e,re,ne]),ae=(0,k.useCallback)(e=>{let t=mF(l,e);t.type===`insert`&&(u(t.value),t.selectedIndex!==void 0&&D(t.selectedIndex))},[l,D]),oe=(0,k.useCallback)(e=>{let t=hF(l,e);if(t.type===`insert`){u(t.value),t.selectedIndex!==void 0&&D(t.selectedIndex);return}t.type===`submit`&&(u(``),ie(t.value))},[l,ie,D]),se=(0,k.useCallback)(e=>{if(!_F(e))return;if(w&&T[E]){oe(T[E]);return}let t=EF(e.trim(),y.current);u(``),y.current.clear(),C.current=0,ie(t)},[w,T,E,oe,ie]);(0,O.useInput)((e,t)=>{if(!w)return;let n=oF(t);if(n===`previous`||n===`next`)D(e=>pF(e,T.length,n));else if(n===`close`)ee(!1);else if(n===`complete`){let e=T[E];e&&ae(e)}},{isActive:w&&!n}),(0,O.useInput)((e,t)=>{let n=cF(t);if(!n)return;if(n===`next`&&p.selectedIndex===null&&l.length===0){c?.();return}let r=uF(l,v,p,n);u(r.value),f(r.cursorHint),m(r.state)},{isActive:!w&&!n&&!i}),(0,O.useInput)((e,n)=>{sF(n)===`cancelQueue`&&i&&t?.()},{isActive:!!i});let ce=r?`yellow`:i?`cyan`:n?`gray`:`green`,le=Math.max(1,x-0),ue=(()=>{if(o){let e=` "${o}" `,t=Math.max(0,le-e.length-2);return{left:`─`.repeat(t),label:e,right:`─`.repeat(2)}}return{left:`─`.repeat(le),label:``,right:``}})();return(0,A.jsxs)(O.Box,{flexDirection:`column`,children:[w&&(0,A.jsx)(CF,{commands:T,selectedIndex:E,visible:w,isSubcommandMode:j}),(0,A.jsxs)(O.Text,{color:ce,children:[ue.left,ue.label?(0,A.jsx)(O.Text,{backgroundColor:ce,color:`black`,bold:!0,children:ue.label}):null,ue.right]}),(0,A.jsx)(O.Box,{borderStyle:`single`,borderTop:!1,borderLeft:!1,borderRight:!1,borderColor:ce,paddingLeft:1,children:r?(0,A.jsx)(O.Text,{color:`yellow`,children:` Interrupting...`}):i?(0,A.jsxs)(O.Text,{color:`cyan`,children:[` `,`Queued:`,` `,i.length>50?i.slice(0,47)+`...`:i,` `,(0,A.jsx)(O.Text,{dimColor:!0,children:`(Backspace to cancel)`})]}):n?(0,A.jsx)(kF,{text:` Waiting for response... (ESC to interrupt)`}):(0,A.jsxs)(O.Box,{children:[(0,A.jsx)(O.Text,{color:`green`,bold:!0,children:`> `}),(0,A.jsx)(eF,{value:l,onChange:e=>{u(e),ne(),f(null)},onSubmit:se,onPaste:te,placeholder:`Type a message or /help`,availableWidth:S,cursorHint:d,enableVerticalNavigation:!1})]})})]})}const jF=new Set([`Shell`,`Bash`,`BackgroundProcess`]);function MF(e){if(!jF.has(e.toolName)||!e.toolResultData)return;let t=NF(e.toolResultData),n=VF(t,`exitCode`),r=HF(t,`success`),i=LF(IF(PF(e.toolResultData,t))),a=i.slice(0,4),o=Math.max(0,i.length-a.length),s=e.result===`error`||r===!1||n!==void 0&&n!==0;return{status:s?`error`:`success`,statusLabel:FF(s,n),previewLines:a,omittedLineCount:o,transcriptHint:o>0?`... +${o} lines (full output in session transcript)`:void 0}}function NF(e){try{return JSON.parse(e)}catch{return e}}function PF(e,t){if(!zF(t))return e;let n=BF(t,`output`);if(n!==void 0)return n;let r=BF(t,`stdout`),i=BF(t,`stderr`),a=BF(t,`error`),o=[];return r&&o.push(r),i&&o.push(RF(i,`[stderr] `)),!r&&!i&&a&&o.push(a),o.join(`
|
|
307
|
+
`)}function FF(e,t){return t!==void 0&&t!==0?`exit ${t}`:e?`error`:`ok`}function IF(e){return e?e.replace(/\r\n/g,`
|
|
308
|
+
`).split(`
|
|
309
|
+
`):[]}function LF(e){let t=e.length;for(;t>0&&e[t-1].trim().length===0;)--t;return e.slice(0,t)}function RF(e,t){return IF(e).map(e=>`${t}${e}`).join(`
|
|
310
|
+
`)}function zF(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function BF(e,t){if(!zF(e))return;let n=e[t];return typeof n==`string`?n:void 0}function VF(e,t){if(!zF(e))return;let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function HF(e,t){if(!zF(e))return;let n=e[t];return typeof n==`boolean`?n:void 0}const UF=/_[0-9a-f]{8}$/;function WF(e){if(!e.startsWith(Yu))return e;let t=e.slice(15).replace(UF,``);return t.length>0?t:e}const GF={reset:`\x1B[0m`,dim:`\x1B[2m`,cyan:`\x1B[36m`,lightRed:`\x1B[38;5;210m`,lightGreen:`\x1B[38;5;120m`,darkRedBackground:`\x1B[48;5;52m`,darkGreenBackground:`\x1B[48;5;22m`},KF=` `,qF=ne.default;function JF(e){return e===void 0?DF():e}function YF(e){return e?.trim().toLowerCase()===`diff`}function XF(e,t,n){let r=`${KF}${e}`.padEnd(t);return n?e.startsWith(`+`)?`${GF.darkGreenBackground}${GF.lightGreen}${r}${GF.reset}`:e.startsWith(`-`)?`${GF.darkRedBackground}${GF.lightRed}${r}${GF.reset}`:r.trimEnd():r.trimEnd()}function ZF(e,t,n){if(e.startsWith(`+`)||e.startsWith(`-`))return XF(e,n,t);let r=`${KF}${e}`;return t?e.startsWith(`@@`)?`${GF.cyan}${r}${GF.reset}`:e.startsWith(`diff `)||e.startsWith(`index `)?`${GF.dim}${r}${GF.reset}`:r:r}function QF(e,t){let n=e.reduce((e,t)=>Math.max(e,4+t.length),0);return t===void 0?n:Math.max(n,t)}function $F(e,t,n){let r=e.split(`
|
|
311
|
+
`),i=QF(r,n);return`${r.map(e=>ZF(e,t,i)).join(`
|
|
312
|
+
`)}\n\n`}function eI(e,t){let n=new qF(void 0,{ignoreIllegals:!0}),r=n.code.bind(n);return n.code=(n,i,a)=>YF(i)?$F(n,e,t):r(n,i,a),n}function tI(e,t={}){let n=te.marked.parse(e,{renderer:eI(JF(t.color),t.codeBlockWidth)});return typeof n==`string`?n.trimEnd():e}function nI({tool:e}){let t=MF(e);if(!t||t.statusLabel===`ok`&&t.previewLines.length===0&&!t.transcriptHint)return null;let n=t.status===`error`?BN.error.color:`white`;return(0,A.jsxs)(O.Box,{flexDirection:`column`,marginLeft:4,children:[t.statusLabel!==`ok`&&(0,A.jsx)(O.Text,{color:n,dimColor:!0,children:t.statusLabel}),t.previewLines.map((e,t)=>(0,A.jsx)(O.Text,{color:n,dimColor:!0,children:e},`${e}-${t}`)),t.transcriptHint&&(0,A.jsx)(O.Text,{dimColor:!0,children:t.transcriptHint})]})}function rI(e){let t=e.lines.length>12?aI(e.lines):e.lines,n=Math.max(...t.map(e=>e.lineNumber),0).toString().length,r=t.map(e=>iI(e,n)),i=e.lines.length>12;return{file:e.file,markdown:["```diff",...r,"```"].join(`
|
|
313
|
+
`),truncated:i,remainingLineCount:i?e.lines.length-t.length:0}}function iI(e,t){if(e.type===`hunk`)return e.text;let n=e.lineNumber.toString().padStart(t,` `);return e.type===`remove`?`- ${n} | ${e.text}`:e.type===`add`?`+ ${n} | ${e.text}`:` ${n} | ${e.text}`}function aI(e){let t=oI(e),n=[];for(let e of t){if(n.length===0&&e.length>10)return e.slice(0,10);if(n.length+e.length>10)break;n.push(...e)}return n.length>0?n:e.slice(0,10)}function oI(e){let t=[],n=[];for(let r of e){if(r.type===`hunk`&&n.length>0){t.push(n),n=[r];continue}n.push(r)}return n.length>0&&t.push(n),t}function sI({file:e,lines:t}){let n=rI({file:e,lines:t});return(0,A.jsxs)(O.Box,{flexDirection:`column`,marginLeft:4,children:[n.file&&(0,A.jsxs)(O.Text,{color:`white`,dimColor:!0,children:[`│ `,n.file]}),(0,A.jsx)(O.Text,{children:tI(n.markdown)}),n.truncated&&(0,A.jsxs)(O.Text,{color:`white`,dimColor:!0,children:[`│ ... and `,n.remainingLineCount,` more lines`]})]})}function cI({entry:e}){let t=e.data;if(!t)return(0,A.jsx)(A.Fragment,{});let n=t.promptTokens===void 0?`?`:lI(t.promptTokens),r=t.completionTokens===void 0?`?`:lI(t.completionTokens),i=lI(t.totalTokens),a=`${Math.round(t.contextUsedPercentage)}% (${Jt(t.contextUsedTokens)}/${Jt(t.contextMaxTokens)})`,o=t.costStatus===`unknown`?`cost unknown`:`cost ${t.costStatus}`;return(0,A.jsx)(O.Box,{flexDirection:`column`,marginBottom:1,children:(0,A.jsxs)(O.Box,{children:[(0,A.jsxs)(O.Text,{color:`white`,bold:!0,children:[`Usage:`,` `]}),(0,A.jsxs)(O.Text,{dimColor:!0,children:[t.kind,` `,i,` tokens (in `,n,` / out `,r,`) · Context `,a,` ·`,` `,o]})]})})}function lI(e){return e<1e3?e.toLocaleString():Jt(e)}function uI(e){return MF(e)?.status===`error`?`✗`:e.isRunning?`⟳`:e.result===`error`?`✗`:e.result===`denied`?`⊘`:`✓`}function dI(e){return MF(e)?.status===`error`||e.result===`error`?`red`:e.isRunning||e.result===`denied`?`yellow`:`green`}function fI(e){return`${uI(e)} ${WF(e.toolName)}${e.firstArg?`(${e.firstArg})`:``}`}function pI({role:e}){switch(e){case`user`:return(0,A.jsxs)(O.Text,{color:`green`,bold:!0,children:[`You:`,` `]});case`assistant`:return(0,A.jsxs)(O.Text,{color:`cyan`,bold:!0,children:[`Robota:`,` `]});case`system`:return(0,A.jsxs)(O.Text,{color:`yellow`,bold:!0,children:[`System:`,` `]});case`tool`:return(0,A.jsxs)(O.Text,{color:`white`,bold:!0,children:[`Tool:`,` `]})}}function mI({message:e}){if(!ke(e))return(0,A.jsx)(A.Fragment,{});let t=e.name,n=e.content,r=null;try{let e=JSON.parse(n);Array.isArray(e)&&e.length>0&&typeof e[0].line==`string`&&(r=e)}catch{}if(r)return(0,A.jsxs)(O.Box,{flexDirection:`column`,marginBottom:1,children:[(0,A.jsxs)(O.Box,{children:[(0,A.jsxs)(O.Text,{color:`white`,bold:!0,children:[`Tool:`,` `]}),t&&(0,A.jsxs)(O.Text,{color:`white`,dimColor:!0,children:[`[`,WF(t),`]`]})]}),(0,A.jsx)(O.Text,{children:` `}),r.map((e,t)=>(0,A.jsxs)(O.Box,{flexDirection:`column`,children:[(0,A.jsxs)(O.Text,{color:`green`,children:[` `,`✓`,` `,e.line]}),e.diffLines&&e.diffLines.length>0&&(0,A.jsx)(sI,{file:e.diffFile,lines:e.diffLines})]},t))]});let i=n.split(`
|
|
314
|
+
`).filter(e=>e.trim());return(0,A.jsxs)(O.Box,{flexDirection:`column`,marginBottom:1,children:[(0,A.jsxs)(O.Box,{children:[(0,A.jsxs)(O.Text,{color:`white`,bold:!0,children:[`Tool:`,` `]}),t&&(0,A.jsxs)(O.Text,{color:`white`,dimColor:!0,children:[`[`,t,`]`]})]}),(0,A.jsx)(O.Text,{children:` `}),i.map((e,t)=>(0,A.jsxs)(O.Text,{color:`green`,children:[` `,`✓`,` `,e]},t))]})}function hI({message:e}){let t=(e.content??``).replace(/^Error:\s*/,``);return(0,A.jsxs)(O.Box,{flexDirection:`column`,marginBottom:1,children:[(0,A.jsx)(O.Box,{children:(0,A.jsxs)(O.Text,{color:`red`,bold:!0,children:[`✖ Error:`,` `]})}),(0,A.jsxs)(O.Box,{marginLeft:2,flexDirection:`column`,children:[(0,A.jsx)(O.Text,{color:`red`,wrap:`wrap`,children:t}),(0,A.jsx)(O.Text,{dimColor:!0,wrap:`wrap`,children:`The session is still alive — type your next prompt when ready.`})]})]})}const gI=k.default.memo(function({message:e}){if(ke(e))return(0,A.jsx)(mI,{message:e});if(e.role===`system`&&e.metadata?.kind===`error`)return(0,A.jsx)(hI,{message:e});let t=e.content??``,n=e.state===`interrupted`;return(0,A.jsxs)(O.Box,{flexDirection:`column`,marginBottom:1,children:[(0,A.jsx)(O.Box,{children:(0,A.jsx)(pI,{role:e.role})}),(0,A.jsx)(O.Text,{children:` `}),(0,A.jsx)(O.Box,{marginLeft:2,children:(0,A.jsx)(O.Text,{wrap:`wrap`,children:De(e)?tI(t+(n?`
|
|
315
|
+
|
|
316
|
+
_(interrupted)_`:``)):t})})]})});function _I({entry:e}){let t=e.data,n=t?.tools,r=t?.summary?.split(`
|
|
317
|
+
`)??[];return n&&n.length>0?(0,A.jsxs)(O.Box,{flexDirection:`column`,marginBottom:1,children:[(0,A.jsx)(O.Box,{children:(0,A.jsxs)(O.Text,{color:`white`,bold:!0,children:[`Tool:`,` `]})}),(0,A.jsx)(O.Text,{children:` `}),n.map((e,t)=>(0,A.jsxs)(O.Box,{flexDirection:`column`,children:[(0,A.jsxs)(O.Text,{color:dI(e),children:[` `,fI(e)]}),(0,A.jsx)(nI,{tool:e}),e.diffLines&&e.diffLines.length>0&&(0,A.jsx)(sI,{file:e.diffFile,lines:e.diffLines})]},t))]}):(0,A.jsxs)(O.Box,{flexDirection:`column`,marginBottom:1,children:[(0,A.jsx)(O.Box,{children:(0,A.jsxs)(O.Text,{color:`white`,bold:!0,children:[`Tool:`,` `]})}),(0,A.jsx)(O.Text,{children:` `}),r.map((e,t)=>(0,A.jsxs)(O.Text,{color:`green`,children:[` `,e]},t))]})}function vI({entry:e}){let t=e.data,n=typeof t?.message==`string`?t.message:typeof t?.content==`string`?t.content:e.type;return(0,A.jsxs)(O.Box,{flexDirection:`column`,marginBottom:1,children:[(0,A.jsx)(O.Box,{children:(0,A.jsxs)(O.Text,{color:`yellow`,bold:!0,children:[`System:`,` `]})}),(0,A.jsx)(O.Text,{children:` `}),(0,A.jsx)(O.Box,{marginLeft:2,children:(0,A.jsx)(O.Text,{wrap:`wrap`,children:n})})]})}function yI({entry:e}){if(e.category===`chat`){let t=e.data;return(0,A.jsx)(gI,{message:t})}return e.type===`tool-summary`?(0,A.jsx)(_I,{entry:e}):e.type===`usage-summary`?(0,A.jsx)(cI,{entry:e}):e.type===`tool-start`||e.type===`tool-end`?(0,A.jsx)(A.Fragment,{}):(0,A.jsx)(vI,{entry:e})}function bI({items:e,renderItem:t,onSelect:n,onCancel:r,maxVisible:i=3,footerHint:a=` ↑↓ Navigate Enter Select Esc Cancel`}){let[o,s]=(0,k.useState)(()=>sP()),c=(0,k.useRef)(o),l=(0,k.useCallback)(t=>{let a=uP(c.current,t,{itemCount:e.length,maxVisible:i});if(c.current=a.state,s(a.state),a.effect.type===`cancel`)r();else if(a.effect.type===`select`){let t=e[a.effect.index];t!==void 0&&n(t)}},[e,i,r,n]);if((0,O.useInput)((e,t)=>{let n=cP(t);n!==void 0&&l(n)}),e.length===0)return(0,A.jsx)(O.Box,{});let u=dP(o,{itemCount:e.length,maxVisible:i});u!==o&&(c.current=u);let{selectedIndex:d,scrollOffset:f}=u,p=e.slice(f,f+i),m=f+i<e.length;return(0,A.jsxs)(O.Box,{flexDirection:`column`,children:[f>0&&(0,A.jsxs)(O.Text,{dimColor:!0,children:[` ↑ `,f,` more above`]}),p.map((e,n)=>(0,A.jsx)(O.Box,{marginBottom:1,children:t(e,f+n===d)},f+n)),m&&(0,A.jsxs)(O.Text,{dimColor:!0,children:[` ↓ `,e.length-f-i,` more below`]}),a!==``&&(0,A.jsx)(O.Text,{dimColor:!0,children:a})]})}function xI({title:e,description:t,options:n,minSelect:r,maxSelect:i,defaultValues:a,onConfirm:o,onCancel:s}){let[c,l]=(0,k.useState)(0),[u,d]=(0,k.useState)(()=>new Set(a??[])),f=e=>{d(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.size<i&&n.add(e),n})};(0,O.useInput)((e,t)=>{if(t.upArrow)l(e=>e<=0?n.length-1:e-1);else if(t.downArrow)l(e=>e>=n.length-1?0:e+1);else if(e===` `){let e=n[c];e!==void 0&&f(e.value)}else t.return?u.size>=r&&o([...u]):t.escape&&s()});let p=u.size>=r;return(0,A.jsxs)(O.Box,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[(0,A.jsx)(O.Text,{color:`yellow`,bold:!0,children:e}),t!==void 0&&t.length>0&&(0,A.jsx)(O.Text,{dimColor:!0,children:t}),n.map((e,t)=>{let n=t===c,r=u.has(e.value);return(0,A.jsxs)(O.Text,{color:n?`cyan`:void 0,children:[n?`> `:` `,r?`[x] `:`[ ] `,e.label]},e.value)}),(0,A.jsxs)(O.Text,{dimColor:!0,children:[` ↑↓ Navigate Space Toggle Enter Confirm`,p?``:` (min ${r})`,` Esc Cancel`]})]})}function SI(){return{value:``,resolved:!1}}function CI(e,t){if(t.escape===!0)return{type:`cancel`};if(t.return===!0)return{type:`submit`};if(t.backspace===!0||t.delete===!0)return{type:`delete`};if(e&&t.ctrl!==!0&&t.meta!==!0)return{type:`insert`,value:e}}function wI(e,t,n){return e.resolved?{state:e,effect:{type:`none`}}:t.type===`cancel`?{state:{...e,resolved:!0},effect:{type:`cancel`}}:t.type===`delete`?{state:{...e,value:e.value.slice(0,-1),error:void 0},effect:{type:`none`}}:t.type===`insert`?{state:{...e,value:e.value+t.value,error:void 0},effect:{type:`none`}}:TI(e,n)}function TI(e,t){let n=e.value.trim();if(!n&&!t.allowEmpty){let r=t.validate?.(n);return{state:r?{...e,error:r}:e,effect:{type:`none`}}}let r=t.validate?.(n);return r===void 0?{state:{...e,resolved:!0},effect:{type:`submit`,value:n}}:{state:{...e,error:r},effect:{type:`none`}}}function EI({title:e,description:t,placeholder:n,onSubmit:r,onCancel:i,validate:a,allowEmpty:o=!1,masked:s=!1}){let[c,l]=(0,k.useState)(()=>SI()),u=(0,k.useRef)(c),d=(0,k.useCallback)(e=>{let t=wI(u.current,e,{allowEmpty:o,validate:a});u.current=t.state,l(t.state),t.effect.type===`cancel`?i():t.effect.type===`submit`&&r(t.effect.value)},[o,a,i,r]);return(0,O.useInput)((e,t)=>{let n=CI(e,t);n!==void 0&&d(n)}),(0,A.jsxs)(O.Box,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[(0,A.jsx)(O.Text,{color:`yellow`,bold:!0,children:e}),(0,A.jsx)(DI,{description:t}),(0,A.jsxs)(O.Box,{marginTop:1,children:[(0,A.jsx)(O.Text,{color:`cyan`,children:`> `}),c.value?(0,A.jsx)(O.Text,{children:s?`*`.repeat(c.value.length):c.value}):n?(0,A.jsx)(O.Text,{dimColor:!0,children:n}):null,(0,A.jsx)(O.Text,{color:`cyan`,children:`█`})]}),c.error&&(0,A.jsx)(O.Text,{color:`red`,children:c.error}),(0,A.jsx)(O.Text,{dimColor:!0,children:` Enter Submit Esc Cancel`})]})}function DI({description:e}){return e===void 0||e.length===0?null:(0,A.jsx)(O.Text,{dimColor:!0,children:e})}const OI={value:``,label:`Type a custom answer…`};function kI({request:e,onAnswer:t}){let[n,r]=(0,k.useState)(!1),i=e.options??[],a=i.length>0,o=e.maxSelect??1,s=()=>t({type:`cancelled`});if(!a||n)return(0,A.jsx)(EI,{title:e.title,description:e.description,placeholder:e.placeholder,allowEmpty:e.allowEmpty,masked:e.masked,onSubmit:e=>t({type:`answer`,values:[],text:e}),onCancel:n?()=>r(!1):s},`text:${e.id}`);if(o>1)return(0,A.jsx)(xI,{title:e.title,description:e.description,options:i,minSelect:e.minSelect??1,maxSelect:o,defaultValues:e.default?.values,onConfirm:e=>t({type:`answer`,values:e}),onCancel:s});let c=e.allowFreeText?[...i,OI]:[...i];return(0,A.jsxs)(O.Box,{flexDirection:`column`,children:[(0,A.jsx)(O.Text,{bold:!0,children:e.title}),e.description!==void 0&&e.description.length>0&&(0,A.jsx)(O.Text,{dimColor:!0,children:e.description}),(0,A.jsx)(bI,{items:c,maxVisible:e.maxVisible,renderItem:(e,t)=>(0,A.jsxs)(O.Text,{color:t?`cyan`:void 0,children:[t?`> `:` `,e.label]}),onSelect:e=>{e===OI?r(!0):t({type:`answer`,values:[e.value]})},onCancel:s})]})}const AI=[`Allow [y]`,`Allow always (this session) [s]`,`Allow always (this project) [p]`,`Deny [n]`];function jI(e,t){let n=lP({...t,escape:!1});if(n!==void 0)return n;if(e===`y`||e===`1`)return{type:`shortcut`,index:0};if(e===`s`||e===`a`||e===`2`)return{type:`shortcut`,index:1};if(e===`p`||e===`3`)return{type:`shortcut`,index:2};if(e===`n`||e===`d`||e===`4`)return{type:`shortcut`,index:3}}function MI(e,t){if(e.resolved)return{state:e,effect:{type:`none`}};if(typeof t!=`string`)return PI(e,t.index);let n=uP(e,t,{itemCount:AI.length});return n.effect.type===`select`?{state:n.state,effect:{type:`resolve`,decision:NI(n.effect.index)}}:{state:n.state,effect:{type:`none`}}}function NI(e){return e===0?!0:e===1?`allow-session`:e===2?`allow-project`:!1}function PI(e,t){return{state:{...e,selectedIndex:t,resolved:!0},effect:{type:`resolve`,decision:NI(t)}}}function FI(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(`, `)}function II({request:e}){let[t,n]=k.default.useState(()=>sP()),r=k.default.useRef(t),i=k.default.useRef(e);if(i.current!==e){i.current=e;let t=sP();r.current=t,n(t)}let a=k.default.useCallback(t=>{let i=MI(r.current,t);r.current=i.state,n(i.state),i.effect.type===`resolve`&&e.resolve(i.effect.decision)},[e]);return(0,O.useInput)((e,t)=>{let n=jI(e,t);n!==void 0&&a(n)}),(0,A.jsxs)(O.Box,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[(0,A.jsx)(O.Text,{color:`yellow`,bold:!0,children:`[Permission Required]`}),(0,A.jsxs)(O.Text,{children:[`Tool:`,` `,(0,A.jsx)(O.Text,{color:`cyan`,bold:!0,children:e.toolName})]}),(0,A.jsxs)(O.Text,{dimColor:!0,children:[` `,FI(e.toolArgs)]}),(0,A.jsx)(O.Box,{marginTop:1,children:AI.map((e,n)=>(0,A.jsx)(O.Box,{marginRight:2,children:(0,A.jsxs)(O.Text,{color:n===t.selectedIndex?`cyan`:void 0,bold:n===t.selectedIndex,children:[n===t.selectedIndex?`> `:` `,e]})},e))}),(0,A.jsx)(O.Text,{dimColor:!0,children:` left/right to select, Enter to confirm`})]})}function LI(e,t,n){let r=lP({...t,escape:!1});if(r!==void 0)return r;if(n===2&&e===`y`)return{type:`shortcut`,index:0};if(n===2&&e===`n`)return{type:`shortcut`,index:1}}function RI(e,t,n){return e.resolved?{state:e,effect:{type:`none`}}:typeof t==`string`?uP(e,t,{itemCount:n}):{state:{...e,selectedIndex:t.index,resolved:!0},effect:{type:`select`,index:t.index}}}function zI({message:e,options:t=[`Yes`,`No`],onSelect:n}){let[r,i]=(0,k.useState)(()=>sP()),a=(0,k.useRef)(r),o=(0,k.useCallback)(e=>{let r=RI(a.current,e,t.length);a.current=r.state,i(r.state),r.effect.type===`select`&&n(r.effect.index)},[n,t.length]);return(0,O.useInput)((e,n)=>{let r=LI(e,n,t.length);r!==void 0&&o(r)}),(0,A.jsxs)(O.Box,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[(0,A.jsx)(O.Text,{color:`yellow`,children:e}),(0,A.jsx)(O.Box,{marginTop:1,children:t.map((e,t)=>(0,A.jsx)(O.Box,{marginRight:2,children:(0,A.jsxs)(O.Text,{color:t===r.selectedIndex?`cyan`:void 0,bold:t===r.selectedIndex,children:[t===r.selectedIndex?`> `:` `,e]})},e))}),(0,A.jsx)(O.Text,{dimColor:!0,children:` arrow keys to select, Enter to confirm`})]})}function BI(e,t,n,r,i){let[a,o]=(0,k.useState)([]),[s,c]=(0,k.useState)(!1),[l,u]=(0,k.useState)();return(0,k.useEffect)(()=>{if(o([]),u(void 0),e===`marketplace-list`)c(!0),n.marketplaceList().then(e=>{let t=[{label:`Add Marketplace`,value:`__add__`}],n=e.map(e=>({label:e.name,value:e.name,hint:e.type}));o([...t,...n]),c(!1)}).catch(e=>{u(e instanceof Error?e.message:String(e)),c(!1)});else if(e===`marketplace-browse`){let e=t??``;c(!0),n.listAvailablePlugins(e).then(e=>{o(e.map(e=>({label:e.name,value:e.name,hint:e.installed?`installed`:e.description}))),c(!1)}).catch(e=>{u(e instanceof Error?e.message:String(e)),c(!1)})}else e===`installed-list`&&(c(!0),n.listInstalled().then(e=>{o(e.map(e=>({label:e.name,value:e.name,hint:e.description}))),c(!1)}).catch(e=>{u(e instanceof Error?e.message:String(e)),c(!1)}))},[i,e,t,n,r]),{items:a,loading:s,error:l}}function VI({title:e,items:t,onSelect:n,onBack:r,loading:i,error:a}){let[o,s]=(0,k.useState)(()=>sP()),c=(0,k.useRef)(o),l=!i&&!a,u=(0,k.useCallback)(e=>{let i=uP(c.current,e,{itemCount:t.length,enabled:l});if(c.current=i.state,s(i.state),i.effect.type===`cancel`)r();else if(i.effect.type===`select`){let e=t[i.effect.index];e!==void 0&&n(e.value)}},[l,t,r,n]);(0,O.useInput)((e,t)=>{let n=cP(t);n!==void 0&&u(n)});let d=dP(o,{itemCount:t.length});d!==o&&(c.current=d);let f=d.selectedIndex;return(0,A.jsxs)(O.Box,{flexDirection:`column`,borderStyle:`round`,borderColor:`yellow`,paddingX:1,children:[(0,A.jsx)(O.Text,{color:`yellow`,bold:!0,children:e}),i&&(0,A.jsx)(O.Box,{marginTop:1,children:(0,A.jsx)(O.Text,{dimColor:!0,children:`Loading...`})}),a&&(0,A.jsxs)(O.Box,{marginTop:1,flexDirection:`column`,children:[(0,A.jsx)(O.Text,{color:`red`,children:a}),(0,A.jsx)(O.Text,{dimColor:!0,children:`Press Esc to go back`})]}),!i&&!a&&(0,A.jsx)(O.Box,{flexDirection:`column`,marginTop:1,children:t.map((e,t)=>(0,A.jsxs)(O.Box,{children:[(0,A.jsxs)(O.Text,{color:t===f?`cyan`:void 0,bold:t===f,children:[t===f?`> `:` `,e.label]}),e.hint&&(0,A.jsxs)(O.Text,{dimColor:!0,children:[` `,e.hint]})]},e.value))}),(0,A.jsx)(O.Text,{dimColor:!0,children:i||a?``:` ↑↓ Navigate Enter Select Esc Back`})]})}function HI(e,t){e===`marketplace`?t.push({screen:`marketplace-list`}):e===`installed`&&t.push({screen:`installed-list`})}function UI(e,t){e===`__add__`?t.push({screen:`marketplace-add`}):t.push({screen:`marketplace-action`,context:{marketplace:e}})}function WI(e,t,n,r){e===`browse`?r.push({screen:`marketplace-browse`,context:{marketplace:t}}):e===`update`?n.marketplaceUpdate(t).then(()=>{r.notify(`Updated marketplace "${t}".`),r.pop()}).catch(e=>{r.notify(`Error: ${e instanceof Error?e.message:String(e)}`)}):e===`remove`&&r.setConfirm({message:`Remove marketplace "${t}" and all its plugins?`,onConfirm:()=>{r.setConfirm(void 0),n.marketplaceRemove(t).then(()=>{r.notify(`Removed marketplace "${t}".`),r.popN(2)}).catch(e=>{r.notify(`Error: ${e instanceof Error?e.message:String(e)}`)})},onCancel:()=>r.setConfirm(void 0)})}function GI(e,t,n,r){let i=`${e}@${t}`;n.find(t=>t.value===e)?.hint===`installed`?r.push({screen:`installed-action`,context:{pluginId:i}}):r.push({screen:`marketplace-install-scope`,context:{marketplace:t,pluginId:i}})}function KI(e,t,n,r){let i=e;n.install(t,i).then(()=>{r.notify(`Installed plugin "${t}" (${i} scope).`),r.popN(2)}).catch(e=>{r.notify(`Error: ${e instanceof Error?e.message:String(e)}`)})}function qI(e,t,n){n.setConfirm({message:`Uninstall plugin "${e}"?`,onConfirm:()=>{n.setConfirm(void 0),t.uninstall(e).then(()=>{n.notify(`Uninstalled plugin "${e}".`),n.refresh()}).catch(e=>{n.notify(`Error: ${e instanceof Error?e.message:String(e)}`)})},onCancel:()=>n.setConfirm(void 0)})}function JI(e,t,n,r){e===`uninstall`&&r.setConfirm({message:`Uninstall plugin "${t}"?`,onConfirm:()=>{r.setConfirm(void 0),n.uninstall(t).then(()=>{r.notify(`Uninstalled plugin "${t}".`),r.popN(2)}).catch(e=>{r.notify(`Error: ${e instanceof Error?e.message:String(e)}`)})},onCancel:()=>r.setConfirm(void 0)})}function YI({callbacks:e,onClose:t,addMessage:n}){let[r,i]=(0,k.useState)([{screen:`main`}]),[a,o]=(0,k.useState)(),[s,c]=(0,k.useState)(0),l=r[r.length-1]??{screen:`main`},u=(0,k.useCallback)(e=>{i(t=>[...t,e])},[]),d=(0,k.useCallback)(()=>{i(e=>e.length<=1?(t(),e):e.slice(0,-1))},[t]),f=(0,k.useCallback)(e=>{i(n=>{let r=n.slice(0,Math.max(1,n.length-e));return r.length===0?(t(),n):r})},[t]),p=(0,k.useCallback)(e=>{n?.({role:`system`,content:e})},[n]),m=(0,k.useCallback)(()=>{c(e=>e+1)},[]),h=(0,k.useCallback)(e=>o(e),[o]),g={push:(0,k.useCallback)(e=>u({screen:e.screen,context:e.context}),[u]),pop:d,popN:f,notify:p,setConfirm:h,refresh:m},{items:_,loading:v,error:y}=BI(l.screen,l.context?.marketplace,e,s,r.length),b=(0,k.useCallback)(t=>{let n=l.screen,r=l.context;n===`main`?HI(t,g):n===`marketplace-list`?UI(t,g):n===`marketplace-action`?WI(t,r?.marketplace??``,e,g):n===`marketplace-browse`?GI(t,r?.marketplace??``,_,g):n===`marketplace-install-scope`?KI(t,r?.pluginId??``,e,g):n===`installed-list`?qI(t,e,g):n===`installed-action`&&JI(t,r?.pluginId??``,e,g)},[l,_,e,u,d,f,p,o,m]),x=(0,k.useCallback)(t=>{l.screen===`marketplace-add`&&e.marketplaceAdd(t).then(e=>{p(`Added marketplace "${e}" from ${t}.`),d()}).catch(e=>{p(`Error: ${e instanceof Error?e.message:String(e)}`),d()})},[l.screen,e,p,d]);if(a)return(0,A.jsx)(zI,{message:a.message,onSelect:e=>{e===0?a.onConfirm():a.onCancel()}});let S=l.screen;return S===`marketplace-add`?(0,A.jsx)(EI,{title:`Add Marketplace Source`,placeholder:`owner/repo or git URL`,onSubmit:x,onCancel:d,validate:e=>e.includes(`/`)?void 0:`Must be owner/repo or a git URL`}):S===`marketplace-action`?(0,A.jsx)(VI,{title:`Marketplace: ${l.context?.marketplace??``}`,items:[{label:`Browse plugins`,value:`browse`},{label:`Update`,value:`update`},{label:`Remove`,value:`remove`}],onSelect:b,onBack:d},r.length):S===`marketplace-install-scope`?(0,A.jsx)(VI,{title:`Install scope for "${l.context?.pluginId??``}"`,items:[{label:`User scope`,value:`user`},{label:`Project scope`,value:`project`}],onSelect:b,onBack:d},r.length):S===`installed-action`?(0,A.jsx)(VI,{title:`Plugin: ${l.context?.pluginId??``}`,items:[{label:`Uninstall`,value:`uninstall`}],onSelect:b,onBack:d},r.length):(0,A.jsx)(VI,{title:{main:`Plugin Management`,"marketplace-list":`Marketplace`,"marketplace-browse":`Browse: ${l.context?.marketplace??``}`,"installed-list":`Installed Plugins`}[S]??`Plugin Management`,items:{main:[{label:`Marketplace`,value:`marketplace`},{label:`Installed Plugins`,value:`installed`}]}[S]??_,onSelect:b,onBack:d,loading:v,error:y},`${S}-${r.length}-${s}`)}function XI({sessions:e,onSelect:t,onCancel:n}){return(0,A.jsxs)(O.Box,{flexDirection:`column`,paddingX:1,marginBottom:1,children:[(0,A.jsx)(O.Text,{bold:!0,color:`cyan`,children:`Select a session to resume:`}),(0,A.jsx)(bI,{items:[...e],renderItem:(e,t)=>{let n=e.preview?e.preview.slice(0,60)+(e.preview.length>60?`...`:``):``;return(0,A.jsxs)(O.Text,{children:[t?`> `:` `,(0,A.jsx)(O.Text,{bold:!0,children:e.name??e.id.slice(0,8)}),` `,(0,A.jsx)(O.Text,{dimColor:!0,children:new Date(e.updatedAt).toLocaleString(void 0,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}),` `,(0,A.jsxs)(O.Text,{dimColor:!0,children:[`msgs: `,e.messageCount]}),n?(0,A.jsxs)(A.Fragment,{children:[`
|
|
318
|
+
`,(0,A.jsx)(O.Text,{color:`gray`,children:n})]}):null]})},onSelect:e=>t(e.id),onCancel:n})]})}function ZI(e){let t=QI(e),n=e.hasPendingPrompt&&t.kind!==`queued`?[`queued`]:[],r=[t.label,...n].join(` · `);return{...t,segments:n,text:r}}function QI(e){return e.activeToolCount>0?{kind:`tools`,label:`Tools (${e.activeToolCount})`,color:`cyan`}:e.isThinking?{kind:`thinking`,label:`Thinking`,color:`yellow`}:e.activeBackgroundTaskCount>0?{kind:`background`,label:`Background (${e.activeBackgroundTaskCount})`,color:`cyan`}:e.hasPendingPrompt?{kind:`queued`,label:`Queued`,color:`yellow`}:{kind:`idle`,label:`Idle`,color:`gray`}}function $I(e){return e>=90?`red`:e>=70?`yellow`:`green`}function eL({isThinking:e,activeToolCount:t,activeBackgroundTaskCount:n,hasPendingPrompt:r}){let i=ZI({isThinking:e,activeToolCount:t,activeBackgroundTaskCount:n,hasPendingPrompt:r});return(0,A.jsx)(O.Text,{color:i.color,bold:i.kind!==`idle`,children:i.text})}function tL({percentage:e,usedTokens:t,maxTokens:n}){return(0,A.jsxs)(O.Text,{color:$I(e),children:[`Context: `,Math.round(e),`% (`,Jt(t),`/`,Jt(n),` tokens)`]})}function nL({permissionMode:e}){return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(O.Text,{color:`cyan`,bold:!0,children:`Mode:`}),` `,(0,A.jsx)(O.Text,{children:e})]})}function rL(e){return e!=="default"}function iL({activePresetId:e}){return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(O.Text,{color:`cyan`,bold:!0,children:`Preset:`}),` `,(0,A.jsx)(O.Text,{children:e})]})}function aL(e){return e!==void 0&&e!=="default"}function oL({modelName:e,providerDisplayName:t}){return t===void 0?(0,A.jsx)(O.Text,{dimColor:!0,children:e}):(0,A.jsxs)(O.Text,{dimColor:!0,children:[t,` `,e]})}function sL(e){let t=e.showGitBranch&&e.gitBranch!==void 0&&e.gitBranch.length>0,n=rL(e.permissionMode),r=e.activePresetId,i=aL(r);return(0,A.jsxs)(O.Text,{children:[(0,A.jsx)(eL,{isThinking:e.isThinking,activeToolCount:e.activeToolCount,activeBackgroundTaskCount:e.activeBackgroundTaskCount,hasPendingPrompt:e.hasPendingPrompt}),n&&(0,A.jsxs)(A.Fragment,{children:[` | `,(0,A.jsx)(nL,{permissionMode:e.permissionMode})]}),i&&(0,A.jsxs)(A.Fragment,{children:[` | `,(0,A.jsx)(iL,{activePresetId:r})]}),e.sessionName&&(0,A.jsxs)(A.Fragment,{children:[` | `,(0,A.jsx)(O.Text,{color:`magenta`,children:e.sessionName})]}),t&&(0,A.jsxs)(A.Fragment,{children:[` | `,(0,A.jsxs)(O.Text,{dimColor:!0,children:[`git: `,e.gitBranch]})]}),` | `,(0,A.jsx)(oL,{modelName:e.modelName,providerDisplayName:e.providerDisplayName}),` | `,(0,A.jsx)(tL,{percentage:e.contextPercentage,usedTokens:e.contextUsedTokens,maxTokens:e.contextMaxTokens})]})}function cL({permissionMode:e,modelName:t,providerDisplayName:n,sessionId:r,isThinking:i,activeToolCount:a=0,activeBackgroundTaskCount:o=0,hasPendingPrompt:s=!1,contextPercentage:c,contextUsedTokens:l,contextMaxTokens:u,sessionName:d,gitBranch:f,showGitBranch:p=!0,activeAgentLabel:m,activePresetId:h}){return(0,A.jsxs)(O.Box,{paddingLeft:1,paddingRight:1,justifyContent:`space-between`,children:[(0,A.jsx)(sL,{permissionMode:e,modelName:t,providerDisplayName:n,isThinking:i,activeToolCount:a,activeBackgroundTaskCount:o,hasPendingPrompt:s,contextPercentage:c,contextUsedTokens:l,contextMaxTokens:u,sessionName:d,gitBranch:f,showGitBranch:p,activePresetId:h}),m!==void 0&&(0,A.jsxs)(O.Text,{color:`yellow`,bold:!0,children:[`[`,m,`]`]})]})}function lL({cwd:e,permissionMode:t,modelId:n,providerType:r,sessionId:i,isThinking:a,activeToolCount:o,activeBackgroundTaskCount:s,hasPendingPrompt:c,contextState:l,sessionName:u,settings:d,activeAgentLabel:f,activePresetId:p,gitRefreshToken:m}){let h=OP(),g=(0,k.useMemo)(()=>h.getGitBranch(e),[h,e,m]),_=(0,k.useMemo)(()=>r===void 0?void 0:h.getProviderDisplayName(r),[h,r]);return d.enabled?(0,A.jsx)(cL,{permissionMode:t,modelName:n??``,providerDisplayName:_,sessionId:i,isThinking:a,activeToolCount:o,activeBackgroundTaskCount:s,hasPendingPrompt:c,contextPercentage:l.percentage,contextUsedTokens:l.usedTokens,contextMaxTokens:l.maxTokens,sessionName:u,gitBranch:g,showGitBranch:d.gitBranch,activeAgentLabel:f,activePresetId:p}):null}function uL(e){let t=e.forceExit??(e=>process.exit(e));if(e.isShuttingDown){t(130);return}e.graceful()}function dL(e){let t=VN(e),{color:n,symbol:r}=BN[t];return{color:n,icon:r,strikethrough:t===`error`||t===`denied`}}function fL(e){return e?(0,A.jsx)(O.Box,{marginBottom:1,children:(0,A.jsx)(O.Text,{color:`yellow`,children:`Thinking...`})}):(0,A.jsx)(A.Fragment,{})}function pL(e){return(0,A.jsxs)(O.Box,{flexDirection:`column`,marginBottom:1,children:[(0,A.jsx)(O.Text,{color:`white`,bold:!0,children:`Tools:`}),(0,A.jsx)(O.Text,{children:` `}),e.map((e,t)=>{let{color:n,icon:r,strikethrough:i}=dL(e);return(0,A.jsxs)(O.Box,{flexDirection:`column`,children:[(0,A.jsxs)(O.Text,{color:n,strikethrough:i,children:[` `,r,` `,WF(e.toolName),`(`,e.firstArg,`)`]}),e.diffLines&&e.diffLines.length>0&&(0,A.jsx)(sI,{file:e.diffFile,lines:e.diffLines})]},`${e.toolName}-${t}`)})]})}function mL({text:e,activeTools:t,isThinking:n=!1}){let r=t.length>0,i=e.length>0;return!r&&!i?fL(n):(0,A.jsxs)(O.Box,{flexDirection:`column`,children:[r&&pL(t),i&&(0,A.jsxs)(O.Box,{flexDirection:`column`,marginBottom:1,children:[(0,A.jsx)(O.Text,{color:`cyan`,bold:!0,children:`Robota:`}),(0,A.jsx)(O.Text,{children:` `}),(0,A.jsx)(O.Box,{marginLeft:2,children:(0,A.jsx)(O.Text,{wrap:`wrap`,children:tI(e)})})]})]})}function hL({entry:e,selected:t}){let n=e.config.enabled,r=n?`●`:`○`,i=n?`[enabled] `:`[disabled]`,a=e.config.options?.port,o=typeof a==`number`?`port: ${a}`:``;return(0,A.jsx)(O.Box,{children:(0,A.jsx)(O.Text,{color:t?`cyan`:void 0,bold:t,children:`${r} ${e.transport.name.padEnd(18)} ${i} ${o}`})})}function gL(e,t,n,r,i,a,o,s){(0,O.useInput)((0,k.useCallback)((c,l)=>{if(!n){if(l.upArrow){i(e=>Math.max(0,e-1));return}if(l.downArrow){i(t=>Math.min(e.length-1,t+1));return}if(l.escape||l.return){o();return}if(c===` `){let n=e[t];if(!n)return;a(!0),r.setEnabled(n.transport.name,!n.config.enabled).then(()=>{s(),a(!1)}).catch(()=>a(!1))}}},[n,e,t,r,o,s,i,a]))}function _L({registry:e,onClose:t}){let[n,r]=(0,k.useState)(()=>e.getAll()),[i,a]=(0,k.useState)(0),[o,s]=(0,k.useState)(!1);return gL(n,i,o,e,a,s,t,(0,k.useCallback)(()=>{r(e.getAll())},[e])),(0,A.jsxs)(O.Box,{flexDirection:`column`,paddingX:2,paddingY:1,children:[(0,A.jsx)(O.Text,{bold:!0,children:`Settings › Transports`}),(0,A.jsx)(O.Box,{marginTop:1,flexDirection:`column`,children:n.map((e,t)=>(0,A.jsx)(hL,{entry:e,selected:t===i},e.transport.name))}),(0,A.jsx)(O.Box,{marginTop:1,children:(0,A.jsx)(O.Text,{dimColor:!0,children:`↑↓ select space toggle enter/esc close`})}),o&&(0,A.jsx)(O.Box,{marginTop:1,children:(0,A.jsx)(O.Text,{color:`yellow`,children:`Saving…`})})]})}function vL({message:e}){return(0,A.jsx)(O.Box,{paddingX:1,marginBottom:1,children:(0,A.jsx)(O.Text,{color:`yellow`,children:e})})}function yL(e){let[t,n]=(0,k.useState)(()=>({channel:e.createChannel(e.resumeSessionId),sessionId:e.resumeSessionId})),[r,i]=(0,k.useState)(e.showSessionPickerOnStart??!1);return(0,A.jsx)(DP,{value:e.cliAdapter,children:(0,A.jsx)(bL,{...e,channel:t.channel,showSessionPickerOnStart:r,resumeSessionId:t.sessionId,onSessionSwitch:r=>{i(!1),t.channel.stop(),n({channel:e.createChannel(r),sessionId:r})}},t.sessionId??`__new__`)})}function bL(e){let t=e.cwd,{channel:n}=e,r=NP(n.terminalHandoffController),{interactiveSession:i,registry:a,commandEffectQueue:o,history:s,addEntry:c,streamingText:l,activeTools:u,isThinking:d,lastErrorMessage:f,isStalled:p,isAborting:m,isShuttingDown:h,pendingPrompt:g,executionWorkspaceSnapshot:_,selectedExecutionEntryId:v,selectExecutionWorkspaceEntry:y,readExecutionWorkspaceDetail:b,permissionRequest:x,pendingUserAction:S,contextState:C,handleSubmit:w,handleAbort:T,handleCancelQueue:E,handleShutdown:D}=PP(n),[j,ee]=(0,k.useState)(n.sessionName),te=SP(t),ne=i?void 0:te,{exit:re}=(0,O.useApp)(),[ie,ae]=(0,k.useState)(),[oe,se]=(0,k.useState)(!1),[ce,le]=(0,k.useState)(null),[ue,de]=(0,k.useState)(),[fe,M]=(0,k.useState)(!1),[pe,me]=MP(),[he,ge]=(0,k.useState)(0),[_e,ve]=(0,k.useState)(null),ye=(0,k.useMemo)(()=>KN(_),[_]),be=_e!==null;(0,k.useEffect)(()=>{ve(e=>e===null||ye.length===0?null:Math.min(e,ye.length-1))},[ye.length]);let xe=qN(_),N=(0,k.useMemo)(()=>_?.entries.find(e=>e.id===v),[_,v]),{handleSubmit:Se,showPluginTUI:Ce,showSessionPicker:we,showTransportTUI:Te,setShowPluginTUI:Ee,setShowSessionPicker:De,setShowTransportTUI:Oe}=kP({cwd:t,providerOverride:e.providerOverride,interactiveSession:i,commandEffectQueue:o,addEntry:c,baseHandleSubmit:w,setSessionName:ee,setStatusLineSettings:me,showSessionPickerOnStart:e.showSessionPickerOnStart,openAgentSwitcher:()=>se(!0)});(0,k.useEffect)(()=>(n.start(),()=>{n.stop()}),[n]);let ke=!N||N.kind===`main_thread`||N.controls.includes(`send`),Ae=N&&N.kind!==`main_thread`?N.title:void 0,je=(0,k.useMemo)(()=>_?.entries.find(e=>e.kind===`main_thread`)?.id,[_]),Me=(0,k.useCallback)(async e=>{N&&N.kind!==`main_thread`&&N.controls.includes(`send`)?await i.sendAgentJob(N.sourceId,e):await Se(e)},[N,Se,i]),Ne=(0,k.useCallback)(async e=>{ge(e=>e+1),await Me(e)},[Me]),F=(0,k.useRef)(!1);(0,k.useEffect)(()=>{F.current&&!d&&ge(e=>e+1),F.current=d},[d]),(0,k.useEffect)(()=>{let e=i?.getName?.();e&&!j&&ee(e)},[i,j]),(0,k.useEffect)(()=>{let t=!0;return e.startupUpdateNotice?.then(e=>{t&&e!==void 0&&ae(e)}).catch(()=>{}),()=>{t=!1}},[e.startupUpdateNotice]),(0,k.useEffect)(()=>{let e=j?`Robota — ${j}`:`Robota`;process.stdout.write(`\x1b]0;${e}\x07`)},[j]),(0,O.useInput)((e,t)=>{!t.escape||!d||x||S||Ce||Te||we||oe||T()}),(0,O.useInput)((e,t)=>{!t.ctrl||e!==`b`||x||S||Ce||we||h||se(e=>!e)}),(0,O.useInput)((e,t)=>{!t.escape||d||x||S||Ce||Te||we||oe||N&&N.kind!==`main_thread`&&je!==void 0&&y(je)}),(0,O.useInput)((e,t)=>{if(_e===null)return;let n=ye,r=bP(_e,n.length,t);if(r.type===`move`)ve(r.index);else if(r.type===`open`){let e=n[r.index];e&&y(e.id),ve(null)}else r.type===`exit`&&ve(null)},{isActive:be&&!x&&!S&&!Ce&&!Te&&!we&&!oe}),(0,O.useInput)((e,t)=>{!t.ctrl||e!==`c`||uL({isShuttingDown:h,graceful:()=>void D(`prompt_input_exit`).finally(()=>re())})}),(0,k.useEffect)(()=>{let e=()=>{uL({isShuttingDown:h,graceful:()=>void D(`other`).finally(()=>re())})};return process.on(`SIGINT`,e),process.on(`SIGTERM`,e),()=>{process.off(`SIGINT`,e),process.off(`SIGTERM`,e)}},[D,re,h]),(0,k.useEffect)(()=>{if(!N||N.kind===`main_thread`){le(null),de(void 0),M(!1);return}let e=!0;return M(!0),de(void 0),b(N.id).then(t=>{e&&(le(t),M(!1))}).catch(t=>{e&&(de(t.message),M(!1))}),()=>{e=!1}},[_,b,N]);let Pe=e.permissionMode??`default`,I=``,Fe;try{let e=i.getSession();Pe=e.getPermissionMode(),Fe=e.getActivePresetId?.(),I=e.getSessionId()}catch{}return(0,A.jsxs)(O.Box,{flexDirection:`column`,children:[(0,A.jsx)(O.Static,{items:(0,k.useMemo)(()=>[{kind:`banner`,version:e.version??`0.0.0`},...s.map(e=>({kind:`entry`,entry:e}))],[s,e.version]),children:e=>e.kind===`banner`?(0,A.jsxs)(O.Box,{flexDirection:`column`,paddingX:1,marginBottom:1,children:[(0,A.jsx)(O.Text,{color:`cyan`,bold:!0,children:`
|
|
319
|
+
____ ___ ____ ___ _____ _
|
|
320
|
+
| _ \\ / _ \\| __ ) / _ \\_ _|/ \\
|
|
321
|
+
| |_) | | | | _ \\| | | || | / _ \\
|
|
322
|
+
| _ <| |_| | |_) | |_| || |/ ___ \\
|
|
323
|
+
|_| \\_\\\\___/|____/ \\___/ |_/_/ \\_\\
|
|
324
|
+
`}),(0,A.jsxs)(O.Text,{dimColor:!0,children:[` v`,e.version]})]},`logo`):(0,A.jsx)(yI,{entry:e.entry},e.entry.id)}),!r&&(0,A.jsxs)(A.Fragment,{children:[ie&&(0,A.jsx)(vL,{message:ie}),(0,A.jsxs)(O.Box,{flexDirection:`column`,paddingX:1,flexGrow:1,children:[N&&N.kind!==`main_thread`&&(0,A.jsx)(aP,{entry:N,page:ce,loading:fe,error:ue}),h&&(0,A.jsx)(O.Box,{marginBottom:1,children:(0,A.jsx)(O.Text,{color:`yellow`,children:`Shutting down...`})}),(d||u.length>0)&&(0,A.jsxs)(O.Box,{flexDirection:`column`,marginBottom:1,children:[(0,A.jsx)(mL,{text:l,activeTools:u,isThinking:d}),p&&(0,A.jsx)(O.Text,{color:`yellow`,children:`⚠ Still waiting on the provider — the network may be stalled. Esc to interrupt.`})]}),!d&&f&&(0,A.jsx)(O.Box,{marginBottom:1,children:(0,A.jsx)(O.Text,{color:`red`,children:`✖ Last turn failed — the session is alive; type your next prompt when ready.`})}),(0,A.jsx)(rP,{entries:ye,focusedIndex:_e})]}),oe&&(0,A.jsx)(hP,{snapshot:_,selectedEntryId:v,onSelect:y,onClose:()=>se(!1)}),x&&(0,A.jsx)(II,{request:x}),S&&(0,A.jsx)(kI,{request:S,onAnswer:e=>n.resolveUserAction(e)}),Ce&&(0,A.jsx)(YI,{callbacks:ne,onClose:()=>Ee(!1),addMessage:e=>c(P(H(e.content)))}),Te&&e.transportRegistry&&(0,A.jsx)(_L,{registry:e.transportRegistry,onClose:()=>Oe(!1)}),we&&(0,A.jsx)(XI,{sessions:kv(e.sessionStore,e.cwd),onSelect:t=>{De(!1),e.onSessionSwitch(t)},onCancel:()=>{De(!1),c(P(H(`Session resume cancelled.`)))}}),(0,A.jsx)(iP,{percentage:C.percentage}),(0,A.jsx)(AF,{onSubmit:Ne,onCancelQueue:E,isDisabled:!!x||!!S||Ce||Te||we||oe||h||d&&!!g||!ke||be,isAborting:m,pendingPrompt:g,registry:a,sessionName:j,history:s,onRequestFocusBackgroundList:()=>{ye.length>0&&ve(0)}}),(0,A.jsx)(lL,{cwd:t,permissionMode:Pe,modelId:e.modelId,providerType:e.providerType,sessionId:I,isThinking:d,activeToolCount:u.length,activeBackgroundTaskCount:xe,hasPendingPrompt:g!==null,contextState:C,sessionName:j,settings:pe,activeAgentLabel:Ae,activePresetId:Fe,gitRefreshToken:he})]})]})}var xL=class{hooks;instance;registerSuspendHooks(e){return this.hooks=e,()=>{this.hooks===e&&(this.hooks=void 0)}}setInkInstance(e){this.instance=e}get canHandoffTerminal(){return process.stdin.isTTY===!0&&process.stdout.isTTY===!0&&this.hooks!==void 0}async runWithTerminal(e){let t=this.hooks;if(!this.canHandoffTerminal||t===void 0)throw Error(`TUI terminal handoff unavailable: no interactive TTY, or the App is not mounted.`);await t.suspend(),this.instance?.clear();let n=process.stdin;n.isTTY&&typeof n.setRawMode==`function`&&n.setRawMode(!1),n.pause();try{return await e()}finally{t.resume()}}};function SL(e){return/not initialized/i.test(e.message)}function CL(e){let t=e.isBenignError??SL,n=null,r=0,i;function a(){n!==null&&(clearInterval(n),n=null)}function o(){r+=e.intervalMs;try{e.check()}catch(n){let o=n instanceof Error?n:Error(String(n));if(!t(o)){a(),e.onFailure({kind:`error`,error:o});return}i=o,r>=e.timeoutMs&&(a(),e.onFailure({kind:`timeout`,lastError:i}));return}a(),e.onReady()}return{start(){n===null&&(r=0,n=setInterval(o,e.intervalMs))},stop:a}}var wL=class{queue=[];enqueueEffects(e){e.length!==0&&this.queue.push({effects:[...e]})}drain(){return this.queue.shift()}clear(){this.queue.length=0}};function TL(e,t,n,r,i,a){let o=EL(e.effects,n,r,a);if(r.addEntry(P(H(e.message))),o.length>0&&i.enqueueEffects(o),t.isInitialized){let e=t.getContextState();r.setContextState({percentage:e.usedPercentage,usedTokens:e.usedTokens,maxTokens:e.maxTokens})}}function EL(e,t,n,r){if(e===void 0||e.length===0)return[];let i=[];for(let a of e){if(a.type===`conversation-history-cleared`){n.clearHistory();continue}if(a.type===`plugin-registry-reload-requested`){r?.(t);continue}i.push(a)}return i}function DL(e,t){let n=null;return{schedule(){n||=setTimeout(()=>{n=null,e()},t)},flush(){n&&=(clearTimeout(n),null)}}}var OL=class{history=[];streamingText=``;activeTools=[];isThinking=!1;isAborting=!1;pendingPrompt=null;contextState={percentage:0,usedTokens:0,maxTokens:0};executionWorkspaceSnapshot=null;selectedExecutionEntryId;lastErrorMessage=null;isStalled=!1;onChange=null;streamBuf=``;debouncedStreamNotify=DL(()=>this.notify(),300);stallTimer=null;armStallTimer(){this.clearStallTimer(),this.stallTimer=setTimeout(()=>{this.stallTimer=null,this.isStalled=!0,this.notify()},15e3)}clearStallTimer(){this.stallTimer&&=(clearTimeout(this.stallTimer),null),this.isStalled&&=!1}notify(){this.onChange?.()}onTextDelta=e=>{this.isThinking&&this.armStallTimer(),this.streamBuf+=e,this.streamingText=this.streamBuf,this.debouncedStreamNotify.schedule()};onToolStart=e=>{this.clearStallTimer(),this.activeTools=[...this.activeTools,e],this.notify()};onToolEnd=e=>{let t=this.activeTools.findLastIndex(t=>t.toolName===e.toolName&&t.isRunning);if(t!==-1){let n=[...this.activeTools];n[t]=e,this.activeTools=n}this.isThinking&&!this.activeTools.some(e=>e.isRunning)&&this.armStallTimer(),this.notify()};onThinking=e=>{this.isThinking=e,e?(this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.lastErrorMessage=null,this.armStallTimer()):(this.isAborting=!1,this.activeTools=[],this.clearStallTimer()),this.notify()};onComplete=e=>{this.clearStallTimer(),this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.contextState={percentage:e.contextState.usedPercentage,usedTokens:e.contextState.usedTokens,maxTokens:e.contextState.maxTokens},this.notify()};onInterrupted=()=>{this.clearStallTimer(),this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.notify()};onError=e=>{this.clearStallTimer(),this.lastErrorMessage=e?.message??`Unknown error`,this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.notify()};onContextUpdate=e=>{this.setContextState({percentage:e.usedPercentage,usedTokens:e.usedTokens,maxTokens:e.maxTokens})};syncHistory(e){e.length!==0&&(this.history=[...e],this.notify())}addEntry(e){this.history=[...this.history,e],this.notify()}clearHistory(){this.history=[],this.debouncedStreamNotify.flush(),this.streamBuf=``,this.streamingText=``,this.activeTools=[],this.notify()}setPendingPrompt(e){this.pendingPrompt=e,this.notify()}setAborting(e){this.isAborting=e,this.notify()}setContextState(e){this.contextState=e,this.notify()}syncExecutionWorkspaceSnapshot(e){let t=this.selectedExecutionEntryId,n=t!==void 0&&e.entries.some(e=>e.id===t)?t:e.selectedEntryId??e.entries[0]?.id;this.executionWorkspaceSnapshot={...e,...n?{selectedEntryId:n}:{}},this.selectedExecutionEntryId=n,this.notify()}selectExecutionWorkspaceEntry(e){this.executionWorkspaceSnapshot?.entries.some(t=>t.id===e)&&(this.selectedExecutionEntryId=e,this.executionWorkspaceSnapshot={...this.executionWorkspaceSnapshot,selectedEntryId:e},this.notify())}dispose(){this.clearStallTimer(),this.debouncedStreamNotify.flush(),this.onChange=null}};const kL=15e3,AL=5e3;var jL=class{stateManager;interactiveSession;registry;commandEffectQueue;opts;submitHandler=null;userActionQueue=[];processingUserAction=!1;permissionRequest=null;pendingUserAction=null;availableCommands=[];isShuttingDown=!1;sessionName;autoNameTriggered=!1;sessionStarted=!1;initPoller=null;get terminalHandoffController(){return this.opts.terminalHandoff}permissionQueue=[];processingPermission=!1;sessionEventBindings=[];stopped=!1;onChange=null;constructor(e){this.opts=e,this.sessionName=e.sessionName,this.stateManager=new OL,this.stateManager.onChange=()=>this.onChange?.(),this.interactiveSession=this.createSession(),this.registry=this.createRegistry(),this.commandEffectQueue=new wL}createSession(){let e=this.opts;return new Ev({cwd:e.cwd,provider:e.provider,permissionMode:e.permissionMode,maxTurns:e.maxTurns,permissionHandler:(e,t)=>this.handlePermissionRequest(e,t),askHandler:e=>this.askUser(e),sessionStore:e.sessionStore,resumeSessionId:e.resumeSessionId,forkSession:e.forkSession,sessionName:e.sessionName,backgroundTaskRunners:e.backgroundTaskRunners,subagentRunnerFactory:e.subagentRunnerFactory,commandModules:e.commandModules,commandHostAdapters:e.commandHostAdapters,shellExec:e.shellExec,language:e.language,agentName:e.agentName,activePresetId:e.activePresetId,persona:e.persona,systemPrompt:e.systemPrompt,appendSystemPrompt:e.appendSystemPrompt,allowedTools:e.allowedTools,deniedTools:e.deniedTools,enableParallelSubagents:e.enableParallelSubagents,selfVerification:e.selfVerification,terminalHandoff:e.terminalHandoff})}createRegistry(){let e=new Yh;for(let t of this.opts.commandModules??[])e.addModule(t);return this.opts.reloadPluginCommandSource?.(e),e}onSubmit(e){this.submitHandler=e}write(e){}setAvailableCommands(e){this.availableCommands=e,this.onChange?.()}setBusy(e){this.stateManager.onThinking(e)}async start(){this.sessionStarted||(this.sessionStarted=!0,this.wireSessionEvents(),this.syncRestoredHistory(),this.startInitCheck(),this.opts.transportRegistry&&await this.opts.transportRegistry.startAll(this.interactiveSession))}async stop(){this.stopped||(this.stopped=!0,this.sessionStarted=!1,this.unwireSessionEvents(),this.cancelAllPermissions(),this.cancelAllUserActions(),this.stopInitCheck(),this.onChange=null,this.stateManager.dispose(),this.opts.transportRegistry&&await this.opts.transportRegistry.stopAll(),this.isShuttingDown||await this.shutdownSessionBounded(`other`,`channel stopped`,AL))}getSession(){return this.interactiveSession}getRegistry(){return this.registry}getCommandEffectQueue(){return this.commandEffectQueue}abort(){this.stateManager.setAborting(!0),this.cancelAllUserActions(),this.cancelAllPermissions(),this.interactiveSession.abort()}cancelQueue(){this.interactiveSession.cancelQueue(),this.cancelAllUserActions(),this.cancelAllPermissions(),this.stateManager.setPendingPrompt(null)}async shutdown(e){this.isShuttingDown||(this.isShuttingDown=!0,this.cancelAllUserActions(),this.cancelAllPermissions(),this.stateManager.addEntry(P(H(`Shutting down...`))),this.onChange?.(),await this.shutdownSessionBounded(e?.reason??`prompt_input_exit`,`CLI shutdown`,e?.timeoutMs??AL))}async shutdownSessionBounded(e,t,n){let r,i=new Promise(e=>{r=setTimeout(e,n),r.unref?.()});await Promise.race([this.interactiveSession.shutdown({reason:e,message:t}).catch(()=>void 0),i]),r&&clearTimeout(r)}selectExecutionWorkspaceEntry(e){this.stateManager.selectExecutionWorkspaceEntry(e)}async readExecutionWorkspaceDetail(e){return this.interactiveSession.readExecutionWorkspaceDetail(e)}async sendAgentJob(e,t){await this.interactiveSession.sendAgentJob(e,t)}setSessionName(e){this.sessionName=e,this.interactiveSession.setName(e),this.onChange?.()}async askUser(e){return new Promise(t=>{this.userActionQueue.push({request:e,resolve:t}),this.processNextUserAction()})}resolveUserAction(e){let t=this.userActionQueue[0];t&&(this.userActionQueue.shift(),this.processingUserAction=!1,this.pendingUserAction=null,this.onChange?.(),t.resolve(e),this.processNextUserAction())}processNextUserAction(){if(this.processingUserAction)return;let e=this.userActionQueue[0];if(!e){this.pendingUserAction=null,this.onChange?.();return}this.processingUserAction=!0,this.pendingUserAction=e.request,this.onChange?.()}cancelAllUserActions(){let e=this.userActionQueue;this.userActionQueue=[],this.processingUserAction=!1,this.pendingUserAction=null;for(let t of e)t.resolve({type:`cancelled`});this.onChange?.()}async handleInput(e){if(!e.startsWith(`/`)){await this.interactiveSession.submit(e),this.stateManager.setPendingPrompt(this.interactiveSession.getPendingPrompt());return}await this.handleSlashCommand(e)}async handleSlashCommand(e){let t=e.slice(1).split(/\s+/),n=t[0]?.toLowerCase()??``,r=t.slice(1).join(` `),i=await this.interactiveSession.executeCommand(n,r);if(i){if(i.effects?.some(e=>e.type===`session-execution-started`)){this.stateManager.setPendingPrompt(this.interactiveSession.getPendingPrompt());return}TL(i,this.interactiveSession,this.registry,this.stateManager,this.commandEffectQueue,this.opts.reloadPluginCommandSource);return}this.stateManager.addEntry(P(H(`Unknown command "/${n}". Type /help for help.`)))}handlePermissionRequest(e,t){return new Promise(n=>{this.permissionQueue.push({toolName:e,toolArgs:t,resolve:n}),this.processNextPermission()})}processNextPermission(){if(this.processingPermission)return;let e=this.permissionQueue[0];if(!e){this.permissionRequest=null,this.onChange?.();return}this.processingPermission=!0,this.permissionRequest={toolName:e.toolName,toolArgs:e.toolArgs,resolve:t=>{this.permissionQueue.shift(),this.processingPermission=!1,this.permissionRequest=null,e.resolve(t),setTimeout(()=>this.processNextPermission(),0)}},this.onChange?.()}cancelAllPermissions(){let e=this.permissionQueue;this.permissionQueue=[],this.processingPermission=!1,this.permissionRequest=null;for(let t of e)t.resolve(!1);this.onChange?.()}wireSessionEvents(){let e=this.interactiveSession,t=this.stateManager;this.bindSession(`user_message`,e=>{this.handleAutoNaming(e),t.addEntry(P(rr(e)))}),this.bindSession(`text_delta`,t.onTextDelta),this.bindSession(`tool_start`,t.onToolStart),this.bindSession(`tool_end`,t.onToolEnd),this.bindSession(`thinking`,t.onThinking),this.bindSession(`complete`,n=>{t.onComplete(n),t.syncHistory(e.getFullHistory())}),this.bindSession(`interrupted`,t.onInterrupted),this.bindSession(`error`,n=>{t.onError(n),t.syncHistory(e.getFullHistory())}),this.bindSession(`context_update`,t.onContextUpdate),this.bindSession(`compact`,()=>{t.syncHistory(e.getFullHistory())}),this.bindSession(`skill_activation`,()=>{t.syncHistory(e.getFullHistory())}),this.bindSession(`memory_event`,()=>{t.syncHistory(e.getFullHistory())}),this.bindSession(`execution_workspace_event`,e=>{t.syncExecutionWorkspaceSnapshot(e.snapshot)})}bindSession(e,t){this.interactiveSession.on(e,t),this.sessionEventBindings.push({event:e,handler:t})}unwireSessionEvents(){for(let{event:e,handler:t}of this.sessionEventBindings)this.interactiveSession.off(e,t);this.sessionEventBindings=[]}handleAutoNaming(e){this.autoNameTriggered||this.opts.sessionName||this.interactiveSession.getName()||(this.autoNameTriggered=!0,Bv(this.opts.provider,e).then(e=>{this.interactiveSession.setName(e),this.sessionName=e,this.opts.onAutoNamed?.(e),this.onChange?.()}).catch(()=>{this.autoNameTriggered=!1}))}syncRestoredHistory(){if(this.stateManager.history.length===0){let e=this.interactiveSession.getFullHistory();e.length>0&&this.stateManager.syncHistory(e)}}startInitCheck(){this.initPoller=CL({check:()=>this.runInitCheck(),intervalMs:200,timeoutMs:kL,onReady:()=>void 0,onFailure:e=>this.onInitFailure(e)}),this.initPoller.start()}runInitCheck(){let e=this.interactiveSession.getContextState();this.stateManager.setContextState({percentage:e.usedPercentage,usedTokens:e.usedTokens,maxTokens:e.maxTokens});let t=this.interactiveSession.getFullHistory();t.length>0&&this.stateManager.syncHistory(t),this.syncExecutionWorkspace()}onInitFailure(e){let t=e.kind===`timeout`?`Session initialization timed out after ${kL/1e3}s${e.lastError?` (last error: ${e.lastError.message})`:``}`:`Session initialization failed: ${e.error.message}`;this.stateManager.onError(),this.stateManager.addEntry({id:`session-init-error-${Date.now()}`,timestamp:new Date,category:`event`,type:`session-init-error`,data:{message:t}})}stopInitCheck(){this.initPoller?.stop(),this.initPoller=null}syncExecutionWorkspace(){try{this.stateManager.syncExecutionWorkspaceSnapshot(this.interactiveSession.getExecutionWorkspaceSnapshot({selectedEntryId:this.stateManager.selectedExecutionEntryId}))}catch{}}};function ML(e,t){return{cwd:e.cwd,provider:e.provider,permissionMode:e.permissionMode,maxTurns:e.maxTurns,allowedTools:e.allowedTools,deniedTools:e.deniedTools,sessionStore:e.sessionStore,resumeSessionId:t,forkSession:e.forkSession,sessionName:e.sessionName,backgroundTaskRunners:e.backgroundTaskRunners,subagentRunnerFactory:e.subagentRunnerFactory,commandModules:e.commandModules,commandHostAdapters:e.commandHostAdapters,shellExec:e.shellExec,transportRegistry:e.transportRegistry,language:e.language,reloadPluginCommandSource:e.reloadPluginCommandSource,agentName:e.agentName,activePresetId:e.activePresetId,persona:e.persona,enableParallelSubagents:e.enableParallelSubagents,selfVerification:e.selfVerification}}async function NL(e){let t=new xL,n=(0,O.render)((0,A.jsx)(yL,{cwd:e.cwd,createChannel:n=>{let r=new jL({...ML(e,n),terminalHandoff:t});return e.onChannelReady?.(r),r},providerOverride:e.providerOverride,providerType:e.providerType,modelId:e.modelId,permissionMode:e.permissionMode,version:e.version,sessionStore:e.sessionStore,resumeSessionId:e.resumeSessionId,showSessionPickerOnStart:e.showSessionPickerOnStart,startupUpdateNotice:e.startupUpdateNotice,transportRegistry:e.transportRegistry,cliAdapter:e.cliAdapter}),{exitOnCtrlC:!1});t.setInkInstance(n),await n.waitUntilExit()}function PL({providerDefinitions:e,reloadPluginCommandSource:t}){return{getUserSettingsPath:()=>Bp(),readSettings:e=>Hp(e),writeSettings:(e,t)=>Up(e,t),deleteSettings:e=>Wp(e),applyStatusLineSettings:(e,t)=>P_(e,t),reloadPluginCommandSource:e=>{t(e)},applyActiveModelChange:(e,t,n)=>(Og(e,t,n),{applied:!0}),getGitBranch:e=>Ay(e),getProviderDisplayName:t=>M(e,t)?.displayName??t}}let FL=null,IL=!1;function LL(e){FL=e}function RL(e,t){try{if(FL){FL.getSession().reportBackgroundError(e,t);return}}catch{}process.stderr.write(`\n[robota] ${t}: ${e.message}\n`)}function zL(){IL||(IL=!0,process.on(`unhandledRejection`,e=>{RL(e instanceof Error?e:Error(String(e)),`unhandled rejection`)}),process.on(`uncaughtException`,e=>{RL(e instanceof Error?e:Error(String(e)),`uncaught exception`)}))}var BL=class{entries=new Map;settingsPath;constructor(e){this.settingsPath=e}register(e){this.entries.set(e.name,e)}getAll(){let e=this.readTransportSettings();return Array.from(this.entries.values()).map(t=>({transport:t,config:this.resolveConfig(t,e[t.name])}))}getEnabled(){return this.getAll().filter(e=>e.config.enabled).map(e=>e.transport)}async setEnabled(e,t){let n=Hp(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},enabled:t},n.transports=r,Up(this.settingsPath,n)}async setOptions(e,t){let n=Hp(this.settingsPath),r=n.transports??{};r[e]={...r[e]??{},options:t},n.transports=r,Up(this.settingsPath,n)}async startAll(e){let t=this.getEnabled();for(let n of t)n.attach(e),await n.start()}async stopAll(){let e=[];for(let t of this.entries.values())try{await t.stop()}catch(t){e.push(t instanceof Error?t:Error(String(t)))}return{errors:e}}resolveConfig(e,t){return{enabled:t?.enabled??e.defaultEnabled,options:t?.options??{}}}readTransportSettings(){let e=Hp(this.settingsPath).transports;return!e||typeof e!=`object`||Array.isArray(e)?{}:e}};function VL(e,t,n){if(n.type===`get-background-tasks`){t({type:`background_tasks`,tasks:e.listBackgroundTasks(n.filter)});return}if(n.type===`get-background-task`){UL(e,t,n);return}if(n.type===`get-background-job-groups`){t({type:`background_job_groups`,groups:e.listBackgroundJobGroups()});return}if(n.type===`get-background-job-group`){GL(e,t,n);return}if(n.type===`wait-background-job-group`){KL(e,t,n);return}WL(e,t,n)}function HL(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}if(n.type===`cancel-background-task`){JL(t,`cancel`,n.taskId,e.cancelBackgroundTask(n.taskId,n.reason));return}if(n.type===`close-background-task`){JL(t,`close`,n.taskId,e.closeBackgroundTask(n.taskId));return}qL(e,t,n)}function UL(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}t({type:`background_task`,taskId:n.taskId,task:e.getBackgroundTask(n.taskId)??null})}function WL(e,t,n){if(!n.taskId){t({type:`protocol_error`,message:`taskId is required`});return}e.readBackgroundTaskLog(n.taskId,n.cursor).then(e=>t({type:`background_task_log`,taskId:n.taskId,page:e}),e=>t({type:`protocol_error`,message:e.message}))}function GL(e,t,n){if(!n.groupId){t({type:`protocol_error`,message:`groupId is required`});return}t({type:`background_job_group`,groupId:n.groupId,group:e.getBackgroundJobGroup(n.groupId)??null})}function KL(e,t,n){if(!n.groupId){t({type:`protocol_error`,message:`groupId is required`});return}e.waitBackgroundJobGroup(n.groupId).then(e=>t({type:`background_job_group`,groupId:n.groupId,group:e}),e=>t({type:`protocol_error`,message:e.message}))}function qL(e,t,n){if(!n.input){t({type:`protocol_error`,message:`input is required`});return}JL(t,`send`,n.taskId,e.sendBackgroundTask(n.taskId,n.input))}function JL(e,t,n,r){r.then(()=>e({type:`background_task_control_result`,action:t,taskId:n,success:!0}),r=>e({type:`background_task_control_result`,action:t,taskId:n,success:!1,message:r.message}))}function YL(e){let t=XL(e.session,e.send);return{onMessage:ZL(e.session,e.send),cleanup:t}}function XL(e,t){let n=e=>t({type:`user_message`,content:e}),r=e=>t({type:`text_delta`,delta:e}),i=e=>t({type:`tool_start`,state:e}),a=e=>t({type:`tool_end`,state:e}),o=e=>t({type:`thinking`,isThinking:e}),s=e=>t({type:`complete`,result:e}),c=e=>t({type:`interrupted`,result:e}),l=e=>t({type:`error`,message:e.message}),u=e=>t({type:`background_task_event`,event:e}),d=e=>t({type:`background_job_group_event`,event:e}),f=e=>t({type:`execution_workspace_event`,snapshot:e.snapshot});return e.on(`user_message`,n),e.on(`text_delta`,r),e.on(`tool_start`,i),e.on(`tool_end`,a),e.on(`thinking`,o),e.on(`complete`,s),e.on(`interrupted`,c),e.on(`error`,l),e.on(`background_task_event`,u),e.on(`background_job_group_event`,d),e.on(`execution_workspace_event`,f),()=>{e.off(`user_message`,n),e.off(`text_delta`,r),e.off(`tool_start`,i),e.off(`tool_end`,a),e.off(`thinking`,o),e.off(`complete`,s),e.off(`interrupted`,c),e.off(`error`,l),e.off(`background_task_event`,u),e.off(`background_job_group_event`,d),e.off(`execution_workspace_event`,f)}}function ZL(e,t){return n=>{let r=QL(n,t);r&&$L(e,t,r)}}function QL(e,t){try{return JSON.parse(e)}catch{return t({type:`protocol_error`,message:`Invalid JSON`}),null}}function $L(e,t,n){if(tR(n)){aR(e,t,n);return}if(nR(n)){oR(e,t,n);return}if(rR(n)){VL(e,t,n);return}if(iR(n)){HL(e,t,n);return}t({type:`protocol_error`,message:`Unknown message type: ${eR(n)}`})}function eR(e){return e.type}function tR(e){return e.type===`submit`||e.type===`command`||e.type===`abort`||e.type===`cancel-queue`}function nR(e){return e.type===`get-messages`||e.type===`get-context`||e.type===`get-executing`||e.type===`get-pending`||e.type===`get-execution-workspace`}function rR(e){return e.type===`get-background-tasks`||e.type===`get-background-task`||e.type===`read-background-task-log`||e.type===`get-background-job-groups`||e.type===`get-background-job-group`||e.type===`wait-background-job-group`}function iR(e){return e.type===`cancel-background-task`||e.type===`close-background-task`||e.type===`send-background-task`}function aR(e,t,n){if(n.type===`submit`){if(!n.prompt){t({type:`protocol_error`,message:`prompt is required`});return}e.submit(n.prompt).catch(e=>{t({type:`protocol_error`,message:e.message})})}else if(n.type===`command`){if(!n.name){t({type:`protocol_error`,message:`name is required`});return}e.executeCommand(n.name,n.args??``).then(e=>{t({type:`command_result`,name:n.name,message:e?.message??`Unknown command: ${n.name}`,success:e?.success??!1,data:e?.data})},e=>{t({type:`protocol_error`,message:e.message})})}else n.type===`abort`?e.abort():e.cancelQueue()}function oR(e,t,n){n.type===`get-messages`?t({type:`messages`,messages:e.getMessages()}):n.type===`get-context`?t({type:`context`,state:e.getContextState()}):n.type===`get-executing`?t({type:`executing`,executing:e.isExecuting()}):n.type===`get-execution-workspace`?t({type:`execution_workspace_event`,snapshot:e.getExecutionWorkspaceSnapshot()}):t({type:`pending`,pending:e.getPendingPrompt()})}const sR=7070;var cR=class{name=`ws`;defaultEnabled=!0;optionsSchema={port:{type:`number`,description:`WebSocket server port`,default:sR},maxRetries:{type:`number`,description:`Port retry attempts when port is occupied`,default:20}};session=null;stopFn=null;port;maxRetries;constructor(e={}){this.port=e.port??sR,this.maxRetries=e.maxRetries??20}attach(e){this.session=e}async start(){if(!this.session)throw Error(`WsTransport: attach() must be called before start()`);let e=await this.bindWithRetry(this.session,this.port,this.maxRetries);this.stopFn=e.stop}async stop(){await this.stopFn?.(),this.stopFn=null}validateOptions(e){let{port:t,maxRetries:n}=e;return!(t!==void 0&&(typeof t!=`number`||t<1||t>65535)||n!==void 0&&(typeof n!=`number`||n<0))}bindWithRetry(e,t,n){return this.tryBind(e,t).catch(r=>{if(r.code===`EADDRINUSE`&&n>0)return this.bindWithRetry(e,t+1,n-1);throw r})}tryBind(e,t){return new Promise((n,r)=>{let i=(0,re.createServer)((e,t)=>{t.writeHead(400).end(`WebSocket endpoint`)});i.on(`error`,e=>{i.close(),r(e)}),i.listen(t,`127.0.0.1`,()=>{let t=new ie.WebSocketServer({server:i});t.on(`connection`,t=>{let n=e=>{t.readyState===ie.WebSocket.OPEN&&t.send(JSON.stringify(e))},{onMessage:r,cleanup:i}=YL({session:e,send:n});t.on(`message`,e=>r(String(e))),t.on(`close`,i),t.on(`error`,i),n({type:`messages`,messages:e.getMessages()}),n({type:`execution_workspace_event`,snapshot:e.getExecutionWorkspaceSnapshot()})}),n({stop:()=>new Promise(e=>{t.close(()=>i.close(()=>e()))})})})})}};function lR(e){return typeof e==`object`&&!!e}function uR(e,t){return typeof e[t]==`string`}function dR(e){if(e.usage===void 0)return!0;let t=e.usage;return lR(t)?typeof t.promptTokens==`number`&&typeof t.completionTokens==`number`&&typeof t.totalTokens==`number`:!1}function fR(e){if(!lR(e)||!uR(e,`type`))return!1;switch(e.type){case`ready`:return!0;case`text_delta`:return uR(e,`delta`);case`tool_start`:return uR(e,`toolName`);case`tool_end`:return uR(e,`toolName`)&&typeof e.success==`boolean`;case`result`:return uR(e,`output`)&&dR(e);case`error`:return uR(e,`message`);case`cancelled`:return e.reason===void 0||typeof e.reason==`string`;default:return!1}}const pR=process.platform!==`win32`;function mR(e,t){return new Promise(n=>{if(e.exitCode!==null||e.signalCode!==null){n();return}let r=setTimeout(()=>{e.removeListener(`exit`,i),n()},t);r.unref?.();let i=()=>{clearTimeout(r),n()};e.once(`exit`,i)})}function hR(e,t,n,r,i){switch(e.type){case`ready`:t();break;case`result`:n(e);break;case`error`:r(new U(`runner`,e.message));break;case`cancelled`:r(new U(`runner`,e.reason??`Subagent worker cancelled`));break;case`text_delta`:i?.({type:`background_task_text_delta`,delta:e.delta});break;case`tool_start`:i?.({type:`background_task_tool_start`,toolName:e.toolName,firstArg:gR(e.toolArgs)});break;case`tool_end`:i?.({type:`background_task_tool_end`,toolName:e.toolName,success:e.success});break;default:r(new U(`runner`,`Unhandled subagent worker message`))}}function gR(e){if(!e)return;let t=Object.values(e)[0];if(t!==void 0)return typeof t==`object`?JSON.stringify(t):String(t)}function _R(e,t){return new Promise((n,r)=>{if(!e.connected){r(new U(`crash`,`Subagent worker IPC channel is closed`));return}e.send(t,e=>{if(e){r(e);return}n()})})}async function vR(e,t){await Xi(e.child,{graceMs:e.killGraceMs,processGroup:pR,preKill:async()=>{e.child.connected&&(await _R(e.child,{type:`cancel`,reason:t}).catch(()=>void 0),await mR(e.child,e.killGraceMs))}})}function yR(e){return new Promise((t,n)=>{new bR(e,t,n).start()})}var bR=class{options;resolve;reject;settled=!1;started=!1;timeoutTimer;constructor(e,t,n){this.options=e,this.resolve=t,this.reject=n,this.timeoutTimer=SR(this.options.runtime,e=>this.rejectOnce(e))}start(){let{child:e}=this.options.runtime;e.on(`message`,this.onMessage),e.on(`error`,this.onError),e.on(`exit`,this.onExit),e.once(`spawn`,()=>{setImmediate(this.startWorker)})}startWorker=()=>{if(this.started)return;this.started=!0;let{child:e}=this.options.runtime;_R(e,{type:`start`,payload:this.options.payload}).catch(e=>{this.rejectOnce(e instanceof Error?e:Error(String(e)))})};onMessage=e=>{if(!fR(e)){this.rejectOnce(new U(`runner`,`Received malformed subagent worker message`));return}let{job:t}=this.options.runtime;hR(e,this.startWorker,this.resolveOnce,this.rejectOnce,t.emit)};onError=e=>{this.rejectOnce(new U(`crash`,e.message))};onExit=(e,t)=>{this.settled||this.rejectOnce(new U(`crash`,wR(e,t)))};resolveOnce=e=>{if(this.settled)return;this.settled=!0,this.clearTimers(),this.cleanup();let{runtime:t,resolveTranscriptPath:n}=this.options;this.resolve(CR(t.job,e,n))};rejectOnce=e=>{this.settled||(this.settled=!0,this.clearTimers(),this.cleanup(),this.reject(e))};clearTimers(){this.timeoutTimer&&clearTimeout(this.timeoutTimer)}cleanup(){let{child:e}=this.options.runtime;e.off(`message`,this.onMessage),e.off(`error`,this.onError),e.off(`exit`,this.onExit)}};function xR(e){let t=!1,n=()=>{};return{promise:new Promise((e,t)=>{n=t}),reject(r){t||(t=!0,n(new U(`runner`,r??`Subagent job cancelled: ${e}`)))}}}function SR(e,t){if(e.job.request.timeoutMs)return setTimeout(()=>{vR(e,`Subagent worker timed out`),t(new U(`timeout`,`Subagent worker timed out`))},e.job.request.timeoutMs)}function CR(e,t,n){let r=n(e);return{jobId:e.jobId,output:t.output,...r?{metadata:{transcriptPath:r,logPath:r}}:{},...t.usage?{usage:t.usage}:{}}}function wR(e,t){return`Subagent worker exited before result: ${t===null?`exit code ${e===null?`unknown`:e}`:`signal ${t}`}`}const TR=process.platform!==`win32`;function ER(e){return t=>{let n=new DR(t,e);return e.worktreeIsolation===!1?n:vo({runner:n,worktreeAdapter:e.worktreeAdapter??so(),hooks:t.config.hooks,hookTypeExecutors:t.hookTypeExecutors})}}var DR=class{deps;workerPath;execArgv;killGraceMs;providerConfig;env;logsDir;constructor(e,t){this.deps=e,this.workerPath=t.workerPath,this.execArgv=t.execArgv,this.killGraceMs=t.killGraceMs??2e3,this.providerConfig=t.providerConfig,this.env=t.env,this.logsDir=t.logsDir}start(e){let t=(0,c.fork)(this.workerPath,[],{cwd:e.request.cwd,env:{...process.env,...this.env??{}},execArgv:this.execArgv??jR(this.workerPath),stdio:[`ignore`,`ignore`,`ignore`,`ipc`],detached:TR}),n={job:e,child:t,killGraceMs:this.killGraceMs},r=yR({runtime:n,payload:this.createStartPayload(e),resolveTranscriptPath:e=>this.resolveTranscriptPath(e)}),i=xR(e.jobId);r.catch(()=>void 0);let a=Promise.race([r,i.promise]);a.catch(()=>void 0);let o=this.resolveTranscriptPath(e);return{jobId:e.jobId,...t.pid!==void 0&&{pid:t.pid},...o!==void 0&&{transcriptPath:o,logPath:o},result:a,cancel:async e=>{i.reject(e),await vR(n,e)},send:async e=>{await _R(t,{type:`send`,prompt:e})},...o!==void 0&&{readLog:async t=>MR(e.jobId,o,t)}}}createStartPayload(e){let t=OR(e.request.type,this.deps.customAgentRegistry);return{jobId:e.jobId,request:e.request,agentDefinition:kR(t,e),parentConfig:this.deps.config,parentContext:this.deps.context,providerProfile:AR(this.providerConfig,this.deps,e),permissionMode:this.deps.permissionMode,...this.logsDir?{logsDir:this.logsDir}:{}}}resolveTranscriptPath(e){if(this.logsDir)return(0,p.join)(this.logsDir,e.request.parentSessionId,`subagents`,`${e.jobId}.jsonl`)}};function OR(e,t){let n=t?.(e)??Gu(e);if(!n)throw new U(`validation`,`Unknown agent type: ${e}`);return n}function kR(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 AR(e,t,n){let r=e??t.config.provider;return{profileName:t.config.currentProvider,type:r.name,model:n.request.model??r.model,apiKey:r.apiKey,baseURL:r.baseURL,timeout:r.timeout,options:r.options}}function jR(e){return!e.endsWith(`.ts`)||process.execArgv.some(e=>e.includes(`tsx`))?process.execArgv:[...process.execArgv,`--import`,`tsx`]}function MR(e,t,n){return(0,h.existsSync)(t)?ka(e,(0,h.readFileSync)(t,`utf8`).split(/\r?\n/).filter(Boolean),n):{taskId:e,cursor:n,lines:[]}}function NR(){return(0,p.join)((0,p.dirname)((0,C.fileURLToPath)(require("url").pathToFileURL(__filename).href)),`child-process-subagent-worker.js`)}async function PR(e,t,n){if(e.positional[0]!==`user-local`)return!1;let r=await hN({cwd:t,argv:e.positional.slice(1),format:e.format,summary:e.summary,source:e.source}),i=r.message.trimEnd();if(!r.success)throw Error(i);return n.writeLine(i),!0}function FR(e,t){return new Date(t).getTime()-new Date(e).getTime()}function IR(e){return new Date(e).toISOString()}function LR(e,t,n,r,i,a){return{kind:e,fromType:t,toType:n,fromTimestamp:IR(r),toTimestamp:IR(i),durationMs:FR(r,i),turnIndex:a}}function RR(e){let t=[],n=0,r=0;for(;r<e.length;){let i=e[r];if(!i){r++;continue}if(i.category===`chat`&&i.type===`user`){n++;let a=i.timestamp,o=!1,s=null,c=r+1;for(;c<e.length;){let r=e[c];if(!r){c++;continue}if(r.category===`chat`&&r.type===`user`)break;if(r.category===`event`&&r.type===`tool-start`){o?s!==null&&t.push(LR(`llm_between_tools`,`tool-end`,`tool-start`,s,r.timestamp,n)):(t.push(LR(`user_to_first_tool`,`user`,`tool-start`,a,r.timestamp,n)),o=!0),s=null,c++;continue}if(r.category===`event`&&r.type===`tool-end`){let i=e[c-1];i&&i.category===`event`&&i.type===`tool-start`&&t.push(LR(`tool_exec`,`tool-start`,`tool-end`,i.timestamp,r.timestamp,n)),s=r.timestamp,c++;continue}if(r.category===`event`&&r.type===`tool-summary`){s!==null&&t.push(LR(`llm_final_response`,`tool-end`,`tool-summary`,s,r.timestamp,n)),c++;continue}if(r.category===`chat`&&r.type===`assistant`){o?s!==null&&t.push(LR(`llm_final_response`,`tool-end`,`assistant`,s,r.timestamp,n)):t.push(LR(`user_to_assistant`,`user`,`assistant`,a,r.timestamp,n)),c++;break}c++}r=c}else r++}return t}function zR(e){let t=e.filter(e=>e.kind===`user_to_first_tool`||e.kind===`user_to_assistant`||e.kind===`llm_between_tools`||e.kind===`llm_final_response`),n=e.filter(e=>e.kind===`tool_exec`),r=e.filter(e=>e.kind===`user_to_assistant`),i=e=>e.length?Math.round(e.reduce((e,t)=>e+t.durationMs,0)/e.length):0,a=e=>e.length?Math.max(...e.map(e=>e.durationMs)):0;return{llmWaitMs:{avg:i(t),max:a(t),total:t.reduce((e,t)=>e+t.durationMs,0),count:t.length},toolExecMs:{avg:i(n),max:a(n),median:(e=>{if(!e.length)return 0;let t=[...e].sort((e,t)=>e.durationMs-t.durationMs),n=Math.floor(t.length/2);return t.length%2==0?Math.round(((t[n-1]?.durationMs??0)+(t[n]?.durationMs??0))/2):t[n]?.durationMs??0})(n),count:n.length},userToAssistantMs:{avg:i(r),max:a(r),count:r.length}}}function BR(e){let t=RR(e.history??[]),n=t.filter(e=>e.durationMs>=1e4);return{sessionId:e.id,cwd:e.cwd,createdAt:e.createdAt,totalIntervals:t.length,intervals:t,slowIntervals:n,stats:zR(t)}}function VR(e){let t=e.flatMap(e=>e.intervals.filter(e=>e.kind===`user_to_first_tool`||e.kind===`user_to_assistant`||e.kind===`llm_between_tools`||e.kind===`llm_final_response`)),n=e.flatMap(e=>e.intervals.filter(e=>e.kind===`tool_exec`)),r=t.length?Math.round(t.reduce((e,t)=>e+t.durationMs,0)/t.length):0,i=n.length?Math.round(n.reduce((e,t)=>e+t.durationMs,0)/n.length):0,a=0,o=``,s=0,c=``;for(let t of e)for(let e of t.intervals)e.durationMs>a&&(a=e.durationMs,o=t.sessionId,s=e.turnIndex,c=e.kind);let l=e.map(e=>e.createdAt).sort();return{sessionCount:e.length,fromDate:l[0]??``,toDate:l[l.length-1]??``,avgLlmResponseMs:r,avgToolExecMs:i,maxSingleDelayMs:a,maxSingleDelaySession:o,maxSingleDelayTurn:s,maxSingleDelayKind:c}}function HR(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:`${e}`}function UR(e){let t=[];if(t.push(`Token usage — session ${e.sessionId}`),t.push(` total ${HR(e.totalTokens)} (prompt ${HR(e.promptTokens)} · completion ${HR(e.completionTokens)})`),e.bySource.length===0)return t.push(` (no usage recorded)`),t.join(`
|
|
325
|
+
`);t.push(` by source (most tokens first):`);for(let n of e.bySource)t.push(` ${n.label.padEnd(24)} ${String(n.percentage).padStart(5)}% ${HR(n.totalTokens).padStart(7)} (${n.turns} turn${n.turns===1?``:`s`})`);return e.topConsumer&&t.push(` top consumer: ${e.topConsumer.label} (${e.topConsumer.percentage}%)`),t.join(`
|
|
326
|
+
`)}function WR(e){return e>=1e3?`${(e/1e3).toFixed(1)}s`:`${e}ms`}function GR(e){return new Date(e).toLocaleString(`sv-SE`,{timeZoneName:`short`}).slice(0,16)}function KR(e){return{user_to_first_tool:`user → tool-start`,user_to_assistant:`user → assistant`,tool_exec:`tool-start → tool-end`,llm_between_tools:`tool-end → tool-start`,llm_final_response:`tool-end → assistant/summary`}[e.kind]??e.kind}function qR(e){let{stats:t}=e,n=t.llmWaitMs.total+t.toolExecMs.avg*t.toolExecMs.count;if(n===0)return`Verdict: No timing data available.`;let r=Math.round(t.llmWaitMs.total/n*100);return`Verdict: LLM API wait ${r}% | Code processing ${100-r}%`}function JR(e){let t=[],{stats:n}=e;if(t.push(`Session: ${e.sessionId}`),t.push(`Created: ${GR(e.createdAt)} | cwd: ${e.cwd}`),t.push(``),t.push(`Timing Summary:`),n.llmWaitMs.count>0&&t.push(` LLM API wait ${WR(n.llmWaitMs.avg).padStart(8)} avg | ${WR(n.llmWaitMs.max).padStart(8)} max`),n.toolExecMs.count>0&&t.push(` Tool execution ${WR(n.toolExecMs.avg).padStart(8)} avg | ${WR(n.toolExecMs.median).padStart(8)} median`),n.userToAssistantMs.count>0&&t.push(` user → assistant ${WR(n.userToAssistantMs.avg).padStart(8)} avg`),n.llmWaitMs.count===0&&n.toolExecMs.count===0&&t.push(` (no intervals computed — session may have no history)`),e.slowIntervals.length>0){t.push(``),t.push(`Slow intervals (>10s):`);for(let n of e.slowIntervals)t.push(` turn ${n.turnIndex} ${KR(n).padEnd(32)} ${WR(n.durationMs).padStart(8)}`)}return t.push(``),t.push(qR(e)),t.join(`
|
|
327
|
+
`)}function YR(e){let t=[];return t.push(`Analyzed ${e.sessionCount} sessions (${GR(e.fromDate)} ~ ${GR(e.toDate)})`),t.push(` Avg LLM response: ${WR(e.avgLlmResponseMs)}`),t.push(` Avg tool exec: ${WR(e.avgToolExecMs)}`),e.maxSingleDelayMs>0&&t.push(` Max single delay: ${WR(e.maxSingleDelayMs)} (${e.maxSingleDelaySession}, turn ${e.maxSingleDelayTurn}, ${e.maxSingleDelayKind})`),t.join(`
|
|
328
|
+
`)}const XR={scope:`main`,label:`main thread`};function ZR(e){return`${e.scope}:${e.id??``}`}function QR(e){return e.label??(e.id?`${e.scope} ${e.id}`:e.scope)}function $R(e){return e.type===`usage-summary`&&typeof e.data==`object`&&e.data!==null}function ez(e,t){return t<=0?0:Math.round(e/t*1e3)/10}function tz(e){let t=new Map,n=0,r=0,i=0;for(let a of e.history??[]){if(!$R(a))continue;let e=a.data,o=e.source??XR,s=ZR(o),c=e.promptTokens??0,l=e.completionTokens??0,u=e.totalTokens;n+=c,r+=l,i+=u;let d=t.get(s);d?(d.promptTokens+=c,d.completionTokens+=l,d.totalTokens+=u,d.turns+=1):t.set(s,{key:s,source:o,label:QR(o),promptTokens:c,completionTokens:l,totalTokens:u,turns:1,percentage:0})}let a=[...t.values()].map(e=>({...e,percentage:ez(e.totalTokens,i)})).sort((e,t)=>t.totalTokens-e.totalTokens);return{sessionId:e.id,totalTokens:i,promptTokens:n,completionTokens:r,bySource:a,...a[0]?{topConsumer:a[0]}:{}}}function nz(e){let t,n,r=!1;for(let i=0;i<e.length;i++)if(e[i]===`--last`&&e[i+1]){let n=parseInt(e[i+1],10);!isNaN(n)&&n>0&&(t=n),i++}else e[i]===`--session`&&e[i+1]?(n=e[i+1],i++):e[i]===`--usage`&&(r=!0);return{last:t,sessionId:n,usage:r}}function rz(e){let t=new Map;for(let e of Ov().list())t.set(e.id,e);for(let n of Dv(e).list())t.set(n.id,n);return[...t.values()].sort((e,t)=>e.id.localeCompare(t.id))}async function iz(e,t=process.cwd()){let n=nz(e),r=rz(t);if(r.length===0&&(process.stderr.write(`No session files found in ${sf(t).sessions} or ${cf().sessions}\n`),process.exit(1)),n.usage){let e=n.sessionId===void 0?r[r.length-1]:r.find(e=>e.id.includes(n.sessionId));e||(process.stderr.write(`Session not found${n.sessionId?`: ${n.sessionId}`:``}\n`),process.exit(1)),process.stdout.write(UR(tz(e))+`
|
|
329
|
+
`);return}if(n.sessionId!==void 0){let e=r.find(e=>e.id.includes(n.sessionId));e||(process.stderr.write(`Session not found: ${n.sessionId}\n`),process.exit(1)),process.stdout.write(JR(BR(e))+`
|
|
330
|
+
`);return}if(n.last!==void 0){let e=r.slice(-n.last).map(e=>BR(e));e.length===0&&(process.stderr.write(`No valid sessions found.
|
|
331
|
+
`),process.exit(1)),process.stdout.write(YR(VR(e))+`
|
|
332
|
+
`);return}let i=r[r.length-1];i||(process.stderr.write(`No sessions found.
|
|
333
|
+
`),process.exit(1)),process.stdout.write(JR(BR(i))+`
|
|
334
|
+
`)}const az=()=>By(require("url").pathToFileURL(__filename).href);async function oz(e){let t=(0,ae.createInterface)({input:process.stdin,output:process.stdout});try{let n=(await t.question(e)).trim().toLowerCase();return n===`y`||n===`yes`}finally{t.close()}}async function sz(e,t){let n=Bp();if(!(0,h.existsSync)(n))return e.writeLine(`No user settings found.`),0;if(!t.yes){if(!t.isTTY)return e.writeError(`--reset deletes ${n}. Refusing without confirmation in non-interactive mode — pass --yes to proceed.`),1;if(!await(t.confirm??oz)(`Delete ${n}? [y/N] `))return e.writeLine(`Reset cancelled.`),1}let r=ky();return r.deleted?e.writeLine(`Deleted ${r.path}`):e.writeLine(`No user settings found.`),0}const cz={anthropic:{host:`api.anthropic.com`,port:443},openai:{host:`api.openai.com`,port:443},gemini:{host:`generativelanguage.googleapis.com`,port:443},deepseek:{host:`api.deepseek.com`,port:443},qwen:{host:`dashscope.aliyuncs.com`,port:443}};function lz(){let[e]=process.versions.node.split(`.`).map(Number);return e!==void 0&&e>=22?{label:`Node.js version`,status:`ok`,message:`v${process.versions.node}`}:{label:`Node.js version`,status:`fail`,message:`v${process.versions.node} (requires >=22)\n nvm: nvm install 22 && nvm use 22\n Volta: volta install node@22`}}function uz(e){return{label:`robota version`,status:`ok`,message:e}}function dz(e,t,n){try{let r=Fg(e,{providerDefinitions:t,env:n}),i=r.source===`env-default`?`env-default via ${r.sourceEnvVar??`environment`}`:`settings profile`,a=r.model===void 0?``:` (${r.model})`;return{label:`API key`,status:`ok`,message:`${r.name}${a} — ${i}`}}catch(e){return{label:`API key`,status:`fail`,message:`${e instanceof Error?e.message:String(e)}\n Set ANTHROPIC_API_KEY or run: robota --configure\n Get key: https://console.anthropic.com/settings/keys`}}}function fz(e){try{return JSON.parse((0,h.readFileSync)(e,`utf-8`)),`ok`}catch{return`corrupt`}}function pz(e){let t=Cg(e).filter(e=>(0,h.existsSync)(e));return t.length===0?[{label:`Settings file`,status:`warn`,message:`Not found — run: robota --configure`}]:t.map(e=>fz(e)===`corrupt`?{label:`Settings file`,status:`fail`,message:`${e} — invalid JSON\n Fix or delete the file, or run: robota --configure`}:{label:`Settings file`,status:`ok`,message:e})}function mz(e){try{let t=JSON.parse((0,h.readFileSync)(e,`utf-8`));return typeof t.currentProvider==`string`?t.currentProvider:void 0}catch{return}}function hz(e){let t=(0,p.join)(e,`.robota`,`settings.json`),n=(0,p.join)(process.env.HOME??``,`.robota`,`settings.json`),r=(0,h.existsSync)(t)?t:(0,h.existsSync)(n)?n:void 0;if(r!==void 0){let e=(mz(r)??``).toLowerCase(),t=Object.entries(cz).find(([t])=>e.startsWith(t));if(t)return t[1]}return cz.anthropic}function gz(){let e=process.env.TERM_PROGRAM??`unknown`;return process.platform===`darwin`&&e===`Apple_Terminal`?{label:`Terminal`,status:`warn`,message:`macOS Terminal.app — CJK/IME input may be unstable
|
|
335
|
+
Recommendation: use iTerm2 (https://iterm2.com)`}:{label:`Terminal`,status:`ok`,message:e}}function _z(e){let t=`Network (${e.host})`;return new Promise(n=>{let r=Date.now(),i=(0,oe.createConnection)({host:e.host,port:e.port}),a=setTimeout(()=>{i.destroy(),n({label:t,status:`fail`,message:`timeout (3s)`})},3e3);i.on(`connect`,()=>{clearTimeout(a),i.destroy(),n({label:t,status:`ok`,message:`reachable (${Date.now()-r}ms)`})}),i.on(`error`,e=>{clearTimeout(a),n({label:t,status:`warn`,message:`${e.message}\n Check proxy settings or firewall`})})})}async function vz(e,t={checkNetwork:_z}){e.terminal.writeLine(`
|
|
56
336
|
robota diagnose
|
|
57
|
-
`);let n=
|
|
58
|
-
`);e.terminal.writeLine(` ${n} ${t.label}: ${r[0]}`);for(let t of r.slice(1))e.terminal.writeLine(` ${t}`);t.status===`fail`&&o++,t.status===`warn`&&
|
|
59
|
-
`,`utf8`),t.writeLine(``),t.writeLine(`Created: .robota/settings.json`),(0,h.writeFileSync)(
|
|
337
|
+
`);let n=hz(e.cwd),r=t.providerDefinitions??xD(),i=t.env??process.env,a=[lz(),uz(e.version),dz(e.cwd,r,i),...pz(e.cwd),gz(),await t.checkNetwork(n)],o=0,s=0;for(let t of a){let n=t.status===`ok`?`✓`:t.status===`warn`?`⚠`:`✗`,r=t.message.split(`
|
|
338
|
+
`);e.terminal.writeLine(` ${n} ${t.label}: ${r[0]}`);for(let t of r.slice(1))e.terminal.writeLine(` ${t}`);t.status===`fail`&&o++,t.status===`warn`&&s++}return e.terminal.writeLine(``),o===0&&s===0?e.terminal.writeLine(`✓ All checks passed. robota is ready to use.`):o>0?e.terminal.writeLine(`✗ ${o} issue(s) found. Fix the items above to use robota.`):e.terminal.writeLine(`⚠ ${s} warning(s). robota may work but check the items above.`),e.terminal.writeLine(``),o}const yz=`robota`,bz={permissions:{allow:[`Read(.robota/**)`,`Read(.claude/**)`,`Read(.agents/**)`],deny:[]}};function xz(e){let t=(0,p.join)(e,`settings.json`);if(!(0,h.existsSync)(t))return{};let n=(0,h.readFileSync)(t,`utf8`);try{return JSON.parse(n)}catch{return null}}var Sz=class extends Error{constructor(e){super(`Cannot ask "${e}" in a non-interactive shell. Re-run with --yes to accept the defaults.`),this.name=`InitPromptUnavailableError`}};async function Cz(e,t,n){if(n.yes||n.ci)return n.terminal.writeLine(`${e} → ${t?`Y`:`N`} (${n.yes?`--yes`:`CI`}: using default)`),t;if(!n.isTTY)throw new Sz(e);let r=await n.promptFn(`${e} [y/N] `);return r.toLowerCase()===`y`||r.toLowerCase()===`yes`}async function wz(e,t,n={}){t.writeLine(``),t.writeLine(`${yz} project initialization`),t.writeLine(`─`.repeat(40));let r={yes:n.yes===!0,ci:n.ci??process.env.CI===`true`,isTTY:n.isTTY??process.stdin.isTTY===!0,promptFn:n.promptFn??ob,terminal:t},i=sf(e).settings,a=(0,p.dirname)(i),o=(0,p.join)(e,`AGENTS.md`),s=(0,p.join)(e,`.claude`),c=(0,h.existsSync)(s),l=(0,h.existsSync)(i),u=(0,h.existsSync)(o);if(l&&u&&(t.writeLine(``),t.writeLine(`Both AGENTS.md and .robota/settings.json already exist.`),!await Cz(`Overwrite existing files?`,!1,r))){t.writeLine(`Init cancelled.`);return}let d={...bz};if(c&&(t.writeLine(``),t.writeLine(`Detected .claude/ directory (Claude Code configuration).`),await Cz(`Migrate Claude Code settings to .robota/?`,!1,r))){let e=xz(s);if(e===null)t.writeLine(`Warning: .claude/settings.json could not be parsed — skipping migration.`);else{let n=e.permissions;d={...e,permissions:{...typeof e.permissions==`object`&&e.permissions!==null?e.permissions:{},allow:[...bz.permissions.allow,...n?.allow??[]],deny:n?.deny??[]}},t.writeLine(`Settings imported from .claude/settings.json.`)}}(0,h.mkdirSync)(a,{recursive:!0}),(0,h.writeFileSync)(i,JSON.stringify(d,null,2)+`
|
|
339
|
+
`,`utf8`),t.writeLine(``),t.writeLine(`Created: .robota/settings.json`),(0,h.writeFileSync)(o,`# AGENTS.md — Project Agent Guidelines
|
|
60
340
|
|
|
61
341
|
This file guides the AI agent working in this project. Customize it for your project.
|
|
62
342
|
|
|
@@ -86,9 +366,9 @@ npm run build
|
|
|
86
366
|
## Important Notes
|
|
87
367
|
|
|
88
368
|
<!-- Anything the agent should know before making changes -->
|
|
89
|
-
`,`utf8`),t.writeLine(`Created: AGENTS.md`),t.writeLine(``),t.writeLine(`Initialization complete.`),t.writeLine(``),t.writeLine(`Next steps:`),t.writeLine(` 1. Edit AGENTS.md to describe your project conventions`),t.writeLine(` 2. Run \`${
|
|
369
|
+
`,`utf8`),t.writeLine(`Created: AGENTS.md`),t.writeLine(``),t.writeLine(`Initialization complete.`),t.writeLine(``),t.writeLine(`Next steps:`),t.writeLine(` 1. Edit AGENTS.md to describe your project conventions`),t.writeLine(` 2. Run \`${yz} --configure\` to set up your AI provider`),t.writeLine(` 3. Run \`${yz}\` to start the assistant`),t.writeLine(``),n.onProviderSetup!==void 0&&(r.isTTY||r.yes||r.ci)&&await Cz(`Would you like to set up a provider now?`,!1,r)&&await n.onProviderSetup()}function Tz(e=cf().onboarded){return!(0,h.existsSync)(e)}function Ez(e=cf().onboarded){(0,h.mkdirSync)((0,p.dirname)(e),{recursive:!0}),(0,h.writeFileSync)(e,new Date().toISOString())}const Dz=`
|
|
90
370
|
╭─────────────────────────────────────────────────────────────╮
|
|
91
|
-
│ Welcome to ${
|
|
371
|
+
│ Welcome to ${yz}! — AI coding assistant │
|
|
92
372
|
│ │
|
|
93
373
|
│ Try asking: │
|
|
94
374
|
│ "Explain this project structure" │
|
|
@@ -101,13 +381,23 @@ npm run build
|
|
|
101
381
|
│ /cost show token usage and estimated cost │
|
|
102
382
|
│ /clear clear conversation history │
|
|
103
383
|
│ │
|
|
104
|
-
│ ${
|
|
384
|
+
│ ${yz} diagnose — check your setup │
|
|
105
385
|
╰─────────────────────────────────────────────────────────────╯
|
|
106
|
-
`;function
|
|
386
|
+
`;function Oz(e){e.writeLine(Dz)}function kz(e){process.platform===`darwin`&&process.env.TERM_PROGRAM===`Apple_Terminal`&&e.writeError(`
|
|
107
387
|
⚠ macOS Terminal.app detected: CJK/IME input may be unstable.
|
|
108
388
|
Recommended: use iTerm2 (https://iterm2.com) for Korean/Japanese/Chinese input.
|
|
109
389
|
Or use headless mode: robota -p "your prompt"
|
|
110
|
-
`)}function ye(){try{return(0,t.createRequire)(require("url").pathToFileURL(__filename).href)(`@robota-sdk/agent-command-workflows`).createWorkflowsCommandModule()}catch{return}}function be(e,t,n,i,a={}){let o={settings:{read:()=>(0,r.readSettings)((0,r.getUserSettingsPath)()),write:e=>(0,r.writeSettings)((0,r.getUserSettingsPath)(),e)},plugin:(0,c.createDefaultPluginCommandAdapter)(e)},l=n.providerDefinitions??(0,s.createDefaultProviderDefinitions)(),u={readMergedSettings:()=>(0,r.readMergedProviderSettings)(e),readTargetSettings:()=>(0,r.readSettings)((0,r.resolveProviderSettingsWriteTargetPath)(e)),writeTargetSettings:t=>(0,r.writeSettings)((0,r.resolveProviderSettingsWriteTargetPath)(e),t)},d=ye();return{commandHostAdapters:o,providerDefinitions:l,commandModules:[...(0,c.createDefaultCommandModules)({cwd:e,providerDefinitions:l,providerSettingsAdapter:u,...a.enabledCommandModules===void 0?{}:{enabledCommandModules:a.enabledCommandModules},...a.disabledCommandModules===void 0?{}:{disabledCommandModules:a.disabledCommandModules}}),...d?[d]:[],...n.commandModules??[]],startupUpdateNoticePromise:(0,r.shouldRunStartupCliUpdateCheck)(t)?(0,r.getStartupCliUpdateNotice)({currentVersion:i}):void 0}}function xe(e,t){let n=(0,h.readFileSync)((0,v.resolve)(e,t),`utf8`).trim();if(n.length===0)throw Error(`Task file is empty: ${t}`);return`Task file (${t}):\n${n}`}function Se(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(xe(e,t.taskFile))}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}return t.jsonSchema&&n.push(`Respond with valid JSON only, matching this JSON schema:\n${t.jsonSchema}`),n.length>0?n.join(`
|
|
390
|
+
`)}function Az(e){let t=e.lastIndexOf(`[`);if(t<=0||!e.endsWith(`]`))return;let n=e.slice(0,t),r=e.slice(t+1,e.length-1);if(/^\d+$/.test(r))return{portKey:n,index:Number.parseInt(r,10)}}const J={CREATED:`created`,QUEUED:`queued`,RUNNING:`running`,SUCCESS:`success`,FAILED:`failed`,CANCELLED:`cancelled`},Y={CREATED:`created`,QUEUED:`queued`,RUNNING:`running`,SUCCESS:`success`,FAILED:`failed`,UPSTREAM_FAILED:`upstream_failed`,SKIPPED:`skipped`,CANCELLED:`cancelled`},jz={STARTED:`execution.started`,COMPLETED:`execution.completed`,FAILED:`execution.failed`},Mz={STARTED:`task.started`,COMPLETED:`task.completed`,FAILED:`task.failed`},Nz={[`${J.CREATED}:QUEUE`]:J.QUEUED,[`${J.CREATED}:CANCEL`]:J.CANCELLED,[`${J.QUEUED}:START`]:J.RUNNING,[`${J.QUEUED}:CANCEL`]:J.CANCELLED,[`${J.RUNNING}:COMPLETE_SUCCESS`]:J.SUCCESS,[`${J.RUNNING}:COMPLETE_FAILURE`]:J.FAILED,[`${J.RUNNING}:CANCEL`]:J.CANCELLED};function Pz(e,t){return{code:`DAG_STATE_TRANSITION_INVALID`,category:`state_transition`,message:`DagRun transition is not allowed: ${e} -> ${t}`,retryable:!1,context:{currentStatus:e,event:t}}}function Fz(e){return`run.${e}`}var Iz=class{static transition(e,t){let n=Nz[`${e}:${t}`];return n?{ok:!0,value:{nextStatus:n,domainEvents:[Fz(n)]}}:{ok:!1,error:Pz(e,t)}}};const Lz={[`${Y.CREATED}:QUEUE`]:Y.QUEUED,[`${Y.CREATED}:CANCEL`]:Y.CANCELLED,[`${Y.QUEUED}:START`]:Y.RUNNING,[`${Y.QUEUED}:UPSTREAM_FAIL`]:Y.UPSTREAM_FAILED,[`${Y.QUEUED}:SKIP`]:Y.SKIPPED,[`${Y.QUEUED}:CANCEL`]:Y.CANCELLED,[`${Y.RUNNING}:COMPLETE_SUCCESS`]:Y.SUCCESS,[`${Y.RUNNING}:COMPLETE_FAILURE`]:Y.FAILED,[`${Y.RUNNING}:CANCEL`]:Y.CANCELLED,[`${Y.FAILED}:RETRY`]:Y.QUEUED};function Rz(e,t){return{code:`DAG_STATE_TRANSITION_INVALID`,category:`state_transition`,message:`TaskRun transition is not allowed: ${e} -> ${t}`,retryable:!1,context:{currentStatus:e,event:t}}}function zz(e){return`task.${e}`}var Bz=class{static transition(e,t){let n=Lz[`${e}:${t}`];return n?{ok:!0,value:{nextStatus:n,domainEvents:[zz(n)]}}:{ok:!1,error:Rz(e,t)}}};function Vz(e,t,n,r,i,a,o){return{code:t,category:e,message:n,retryable:r,context:i,fix:a,agentHint:o}}function X(e,t,n,r,i){return Vz(`validation`,e,t,!1,n,r,i)}function Hz(e,t,n,r,i){return Vz(`dispatch`,e,t,!0,n,r,i)}function Uz(e,t,n,r,i,a){return Vz(`task_execution`,e,t,n,r,i,a)}function Wz(e){let t=Date.parse(e);return Number.isNaN(t)?{ok:!1,error:X(`DAG_VALIDATION_INVALID_LOGICAL_DATE`,`logicalDate must be a valid ISO-8601 datetime string`,{logicalDate:e})}:{ok:!0,value:new Date(t).toISOString()}}var Gz=class{clock;constructor(e){this.clock=e}resolve(e,t){let n=this.clock.nowIso();if(e===`scheduled`){if(!t)return{ok:!1,error:X(`DAG_VALIDATION_MISSING_LOGICAL_DATE`,`scheduled trigger requires logicalDate`,{trigger:e})};let r=Wz(t);return r.ok?{ok:!0,value:{trigger:e,logicalDate:r.value,requestedAt:n}}:r}if(!t)return{ok:!0,value:{trigger:e,logicalDate:n,requestedAt:n}};let r=Wz(t);return r.ok?{ok:!0,value:{trigger:e,logicalDate:r.value,requestedAt:n}}:r}},Kz=class{assertWithinBudget(e,t,n){if(t<0)return{ok:!1,error:X(`DAG_VALIDATION_NEGATIVE_ESTIMATED_CREDITS`,`estimatedCredits must be zero or positive`,{nextEstimatedCredits:t})};let r=e+t;return typeof n==`number`&&r>n?{ok:!1,error:X(`DAG_VALIDATION_CREDIT_LIMIT_EXCEEDED`,`Estimated run credits exceeds runCreditLimit`,{nextTotalCredits:r,runCreditLimit:n})}:{ok:!0,value:r}}},qz=class{lifecycleFactory;costPolicyEvaluator;constructor(e,t){this.lifecycleFactory=e,this.costPolicyEvaluator=t}async runNode(e){let t=this.lifecycleFactory.create(e.context.nodeDefinition.nodeType);if(!t.ok)return t;let n=await t.value.initialize(e.context);if(!n.ok)return n;let r=await t.value.validateInput(e.input,e.context);if(!r.ok)return await t.value.dispose(e.context),r;let i=await t.value.estimateCost(e.input,e.context);if(!i.ok)return await t.value.dispose(e.context),i;let a=this.costPolicyEvaluator.assertWithinBudget(e.context.currentTotalCredits,i.value.estimatedCredits,e.context.runCreditLimit);if(!a.ok)return await t.value.dispose(e.context),a;let o=await t.value.execute(e.input,e.context);if(!o.ok)return await t.value.dispose(e.context),o;let s=await t.value.validateOutput(o.value,e.context);return s.ok?(await t.value.dispose(e.context)).ok?{ok:!0,value:{output:o.value,estimatedCredits:i.value.estimatedCredits,totalCredits:a.value}}:{ok:!1,error:Uz(`DAG_TASK_EXECUTION_DISPOSE_FAILED`,`Node dispose step failed after execution`,!1,{nodeType:e.context.nodeDefinition.nodeType,taskRunId:e.context.taskRunId})}:(await t.value.dispose(e.context),s)}},Jz=class{create(e){return{ok:!1,error:X(`DAG_VALIDATION_NODE_LIFECYCLE_NOT_REGISTERED`,`Node lifecycle is not registered for nodeType`,{nodeType:e})}}},Yz=class{nodeManifestRegistry;lifecycleFactory;runner;constructor(e,t){this.nodeManifestRegistry=e,this.lifecycleFactory=t??new Jz,this.runner=new qz(this.lifecycleFactory,new Kz)}async execute(e){if(!e.nodeDefinition)return{ok:!1,error:X(`DAG_VALIDATION_NODE_DEFINITION_MISSING`,`Task execution requires nodeDefinition in execution input`,{nodeId:e.nodeId})};let t=this.nodeManifestRegistry.getManifest(e.nodeDefinition.nodeType);if(!t)return{ok:!1,error:X(`DAG_VALIDATION_NODE_MANIFEST_NOT_FOUND`,`Node manifest is not registered for nodeType`,{nodeType:e.nodeDefinition.nodeType})};let n=await this.runner.runNode({input:e.input,context:{dagId:e.dagId,dagRunId:e.dagRunId,taskRunId:e.taskRunId,nodeDefinition:e.nodeDefinition,nodeManifest:t,attempt:e.attempt,executionPath:e.executionPath,runCreditLimit:e.costPolicy?.runCreditLimit,currentTotalCredits:e.currentTotalCredits??0}});return n.ok?{ok:!0,output:n.value.output,estimatedCredits:n.value.estimatedCredits,totalCredits:n.value.totalCredits}:n}};const Xz={root:`.workflows`,workflowExt:`.json`};function Zz(e,t){return`${e}:${t}`}var Qz=class{definitions=new Map;latestPublishedVersionByDagId=new Map;dagRuns=new Map;taskRuns=new Map;async saveDefinition(e){let t=`${e.dagId}:${e.version}`;if(this.definitions.set(t,e),e.status===`published`){let t=this.latestPublishedVersionByDagId.get(e.dagId)??0;e.version>t&&this.latestPublishedVersionByDagId.set(e.dagId,e.version)}}async getDefinition(e,t){let n=`${e}:${t}`;return this.definitions.get(n)}async listDefinitions(){return[...this.definitions.values()].sort((e,t)=>e.dagId.localeCompare(t.dagId)||e.version-t.version)}async listDefinitionsByDagId(e){return[...this.definitions.values()].filter(t=>t.dagId===e).sort((e,t)=>e.version-t.version)}async getLatestPublishedDefinition(e){let t=this.latestPublishedVersionByDagId.get(e);if(t)return this.definitions.get(`${e}:${t}`)}async deleteDefinition(e,t){this.definitions.delete(`${e}:${t}`);let n=[...this.definitions.values()].filter(t=>t.dagId===e&&t.status===`published`).sort((e,t)=>e.version-t.version);if(n.length===0){this.latestPublishedVersionByDagId.delete(e);return}this.latestPublishedVersionByDagId.set(e,n[n.length-1].version)}async createDagRun(e){this.dagRuns.set(e.dagRunId,e)}async getDagRun(e){return this.dagRuns.get(e)}async listDagRuns(){return[...this.dagRuns.values()].sort((e,t)=>e.dagRunId.localeCompare(t.dagRunId))}async getDagRunByRunKey(e){for(let t of this.dagRuns.values())if(t.runKey===e)return t}async updateDagRunStatus(e,t,n){let r=this.dagRuns.get(e);if(!r)return;let i={...r,status:t,endedAt:n};this.dagRuns.set(e,i)}async deleteDagRun(e){this.dagRuns.delete(e)}async createTaskRun(e){let t=Zz(e.dagRunId,e.taskRunId);this.taskRuns.set(t,e)}async getTaskRun(e){for(let t of this.taskRuns.values())if(t.taskRunId===e)return t}async listTaskRunsByDagRunId(e){let t=[];for(let n of this.taskRuns.values())n.dagRunId===e&&t.push(n);return t}async deleteTaskRunsByDagRunId(e){for(let[t,n]of this.taskRuns.entries())n.dagRunId===e&&this.taskRuns.delete(t)}async updateTaskRunStatus(e,t,n){for(let[r,i]of this.taskRuns.entries()){if(i.taskRunId!==e)continue;let a={...i,status:t,errorCode:n?.code,errorMessage:n?.message};this.taskRuns.set(r,a);return}}async saveTaskRunSnapshots(e,t,n,r,i){for(let[a,o]of this.taskRuns.entries()){if(o.taskRunId!==e)continue;let s={...o,inputSnapshot:typeof t==`string`?t:o.inputSnapshot,outputSnapshot:typeof n==`string`?n:o.outputSnapshot,estimatedCredits:typeof r==`number`?r:o.estimatedCredits,totalCredits:typeof i==`number`?i:o.totalCredits};this.taskRuns.set(a,s);return}}async incrementTaskAttempt(e){for(let[t,n]of this.taskRuns.entries()){if(n.taskRunId!==e)continue;let r={...n,attempt:n.attempt+1};this.taskRuns.set(t,r);return}}},$z=class{pendingQueue=[];inFlight=new Map;waiters=[];async enqueue(e){this.pendingQueue.push(e),this.notifyNextWaiter()}async dequeue(e,t,n=0){let r=this.tryDequeue(e,t);return r||n<=0?r:(await this.waitForMessage(n),this.tryDequeue(e,t))}async ack(e){this.inFlight.delete(e)}async nack(e){let t=this.inFlight.get(e);t&&(this.inFlight.delete(e),this.pendingQueue.unshift(t.message),this.notifyNextWaiter())}tryDequeue(e,t){this.requeueExpiredMessages();let n=this.pendingQueue.shift();if(!n)return;let r=Date.now();return this.inFlight.set(n.messageId,{message:n,ownerId:e,visibleAtEpochMs:r+t}),n}requeueExpiredMessages(){let e=Date.now();for(let[t,n]of this.inFlight.entries())n.visibleAtEpochMs>e||(this.inFlight.delete(t),this.pendingQueue.push(n.message))}async waitForMessage(e){return new Promise(t=>{let n={resolve:()=>{clearTimeout(n.timeout),this.removeWaiter(n),t()},timeout:setTimeout(()=>{n.resolve()},e)};this.waiters.push(n)})}notifyNextWaiter(){this.waiters.shift()?.resolve()}removeWaiter(e){let t=this.waiters.indexOf(e);t>=0&&this.waiters.splice(t,1)}},eB=class{records=new Map;async acquire(e,t,n){let r=new Date().toISOString(),i=Date.now(),a=this.records.get(e);if(a&&Date.parse(a.leaseUntil)>i)return;let o={leaseKey:e,ownerId:t,acquiredAt:r,leaseUntil:new Date(i+n).toISOString()};return this.records.set(e,o),o}async renew(e,t,n){let r=this.records.get(e);if(!r||r.ownerId!==t)return;let i=Date.now(),a={leaseKey:e,ownerId:t,acquiredAt:r.acquiredAt,leaseUntil:new Date(i+n).toISOString()};return this.records.set(e,a),a}async release(e,t){let n=this.records.get(e);!n||n.ownerId!==t||this.records.delete(e)}async get(e){return this.records.get(e)}},tB=class{nowIso(){return new Date().toISOString()}nowEpochMs(){return Date.now()}};function nB(e,t,n){let r=n.issues[0];return X(`DAG_VALIDATION_NODE_CONFIG_SCHEMA_INVALID`,`Node config does not satisfy schema: ${r?.path.join(`.`)??`config`} ${r?.message??`Invalid config`}`,{nodeId:t.nodeDefinition.nodeId,nodeType:e,issueCount:n.issues.length})}var Z=class{defaultInputPort;defaultOutputPort;taskHandler;constructor(){this.taskHandler={initialize:async e=>{let t=this.parseNodeConfig(e);return t.ok?this.initializeWithConfig(e,t.value):t},validateInput:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.validateInputWithConfig(e,t,n.value):n},estimateCost:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.estimateCostWithConfig(e,t,n.value):n},execute:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.executeWithConfig(e,t,n.value):n},validateOutput:async(e,t)=>{let n=this.parseNodeConfig(t);return n.ok?this.validateOutputWithConfig(e,t,n.value):n},dispose:async e=>{let t=this.parseNodeConfig(e);return t.ok?this.disposeWithConfig(e,t.value):t}}}parseNodeConfig(e){let t=this.configSchemaDefinition.safeParse(e.nodeDefinition.config);return t.success?{ok:!0,value:t.data}:{ok:!1,error:nB(this.nodeType,e,t.error)}}async initializeWithConfig(e,t){return{ok:!0,value:void 0}}async validateInputWithConfig(e,t,n){return{ok:!0,value:void 0}}async validateOutputWithConfig(e,t,n){return{ok:!0,value:void 0}}async disposeWithConfig(e,t){return{ok:!0,value:void 0}}};const rB=`asset://`;var iB=class e{value;constructor(e){this.value=e}static fromAssetReference(t){return t.referenceType===`asset`?new e({referenceType:`asset`,assetId:t.assetId,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes}):new e({referenceType:`uri`,uri:t.uri,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}static fromBinary(t){if(typeof t.assetId==`string`&&t.assetId.trim().length>0)return{ok:!0,value:new e({referenceType:`asset`,assetId:t.assetId.trim(),mediaType:t.mimeType,sizeBytes:t.sizeBytes})};if(t.uri.startsWith(rB)){let n=t.uri.slice(8).trim();return n.length===0?{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_INVALID`,`Binary asset URI must include non-empty assetId`)}:{ok:!0,value:new e({referenceType:`asset`,assetId:n,mediaType:t.mimeType,sizeBytes:t.sizeBytes})}}return{ok:!0,value:new e({referenceType:`uri`,uri:t.uri,mediaType:t.mimeType,sizeBytes:t.sizeBytes})}}static fromCandidate(e,t){let n=typeof e.assetId==`string`&&(t?.allowEmptyAssetId===!0||e.assetId.trim().length>0),r=typeof e.uri==`string`&&(t?.allowEmptyUri===!0||e.uri.trim().length>0);return n===r?{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_XOR_REQUIRED`,`Exactly one of assetId or uri must be provided`)}:e.referenceType===`asset`&&!n?{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_TYPE_MISMATCH`,`referenceType asset requires assetId`)}:e.referenceType===`uri`&&!r?{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_TYPE_MISMATCH`,`referenceType uri requires uri`)}:this.buildFromValidatedCandidate(e,n)}static buildFromValidatedCandidate(t,n){return n&&typeof t.assetId==`string`?{ok:!0,value:new e({referenceType:`asset`,assetId:t.assetId.trim(),mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}:typeof t.uri==`string`?{ok:!0,value:new e({referenceType:`uri`,uri:t.uri,mediaType:t.mediaType,name:t.name,sizeBytes:t.sizeBytes})}:{ok:!1,error:X(`DAG_VALIDATION_MEDIA_REFERENCE_INVALID`,`uri must be a string when referenceType is uri`)}}isAsset(){return this.value.referenceType===`asset`}isUri(){return this.value.referenceType===`uri`}assetId(){return this.value.assetId}uri(){return this.value.uri}mediaType(){return this.value.mediaType}toAssetIdOrUri(){return this.value.referenceType===`asset`&&typeof this.value.assetId==`string`?{referenceType:`asset`,assetId:this.value.assetId}:{referenceType:`uri`,uri:this.value.uri??``}}toAssetContentUrl(e){if(!(!this.isAsset()||typeof this.value.assetId!=`string`))return`${e.replace(/\/$/,``)}/view?filename=${encodeURIComponent(this.value.assetId)}`}toBinary(e,t){let n=typeof this.value.mediaType==`string`&&this.value.mediaType.trim().length>0?this.value.mediaType:t;return this.value.referenceType===`asset`&&typeof this.value.assetId==`string`?{kind:e,mimeType:n,uri:`${rB}${this.value.assetId}`,referenceType:`asset`,assetId:this.value.assetId,sizeBytes:this.value.sizeBytes}:{kind:e,mimeType:n,uri:this.value.uri??``,referenceType:`uri`,sizeBytes:this.value.sizeBytes}}};function aB(e,t,n,r){if(typeof e!=`object`||!e||Array.isArray(e))return{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be binary payload object`,{nodeId:t,key:n,expectedType:`binary`})};let i=e;if(!(i.kind===`image`||i.kind===`video`||i.kind===`audio`||i.kind===`file`)||typeof i.mimeType!=`string`||typeof i.uri!=`string`)return{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be valid binary payload`,{nodeId:t,key:n,expectedType:`binary`})};let a=i.kind;return r&&a!==r?{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input binary kind does not match expected kind`,{nodeId:t,key:n,expectedKind:r,actualKind:a})}:{ok:!0,value:{kind:a,mimeType:i.mimeType,uri:i.uri,referenceType:i.referenceType===`asset`||i.referenceType===`uri`?i.referenceType:void 0,assetId:typeof i.assetId==`string`?i.assetId:void 0,sizeBytes:typeof i.sizeBytes==`number`?i.sizeBytes:void 0}}}var Q=class{input;nodeId;output={};constructor(e,t){this.input=e,this.nodeId=t}getInput(e){return this.input[e]}requireInput(e){let t=this.getInput(e);return t===void 0?{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_MISSING`,`Node input key is missing`,{nodeId:this.nodeId,key:e})}:{ok:!0,value:t}}requireInputString(e){let t=this.requireInput(e);return t.ok?typeof t.value==`string`?{ok:!0,value:t.value}:{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be string`,{nodeId:this.nodeId,key:e,expectedType:`string`})}:t}requireInputArray(e){let t=this.getInput(e);if(Array.isArray(t))return{ok:!0,value:t};let n=this.collectListHandleValues(e);return n?{ok:!0,value:n}:t===void 0?{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_MISSING`,`Node input key is missing`,{nodeId:this.nodeId,key:e})}:{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be array`,{nodeId:this.nodeId,key:e,expectedType:`array`})}}requireInputBinary(e,t){let n=this.requireInput(e);return n.ok?aB(n.value,this.nodeId,e,t):n}requireInputBinaryList(e,t,n){let r=this.requireInputArray(e);if(!r.ok)return r;let i=r.value;if(typeof n?.minItems==`number`&&i.length<n.minItems)return{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_MIN_ITEMS_NOT_SATISFIED`,`Node input list does not satisfy minItems`,{nodeId:this.nodeId,key:e,minItems:n.minItems,actualItems:i.length})};if(typeof n?.maxItems==`number`&&i.length>n.maxItems)return{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_MAX_ITEMS_EXCEEDED`,`Node input list exceeds maxItems`,{nodeId:this.nodeId,key:e,maxItems:n.maxItems,actualItems:i.length})};let a=[];for(let[n,r]of i.entries()){let i=aB(r,this.nodeId,`${e}[${n}]`,t);if(!i.ok)return i;a.push(i.value)}return{ok:!0,value:a}}requireInputMediaReference(e,t){let n=this.requireInput(e);return n.ok?this.parseMediaReferenceValue(n.value,e,t):n}requireInputBinaryReference(e,t){let n=this.requireInputBinary(e,t);if(!n.ok)return n;let r=iB.fromBinary(n.value);return r.ok?r:{ok:!1,error:X(r.error.code,r.error.message,{nodeId:this.nodeId,key:e,...r.error.context??{}})}}setOutput(e,t){this.output[e]=t}toOutput(){return{...this.output}}collectListHandleValues(e){let t=new Map;for(let[n,r]of Object.entries(this.input)){let i=Az(n);!i||i.portKey!==e||t.set(i.index,r)}if(t.size===0)return;let n=[...t.keys()].sort((e,t)=>e-t),r=n[n.length-1]+1;if(n.length!==r)return;let i=[];for(let e=0;e<r;e+=1){let n=t.get(e);if(n===void 0)return;i.push(n)}return i}parseMediaReferenceValue(e,t,n){if(typeof e==`string`){if(n?.allowStringAssetUri===!0&&e.startsWith(`asset://`))return this.wrapMediaReferenceError(iB.fromCandidate({referenceType:`asset`,assetId:e.slice(8)}),t);if(n?.allowStringUri===!0)return this.wrapMediaReferenceError(iB.fromCandidate({referenceType:`uri`,uri:e}),t)}return typeof e!=`object`||!e||Array.isArray(e)?{ok:!1,error:X(`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`,`Node input key must be media reference object`,{nodeId:this.nodeId,key:t,expectedType:`media-reference`})}:this.wrapMediaReferenceError(iB.fromCandidate(e),t)}wrapMediaReferenceError(e,t){return e.ok?e:{ok:!1,error:X(e.error.code,e.error.message,{nodeId:this.nodeId,key:t,...e.error.context??{}})}}};function oB(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.kind==`string`&&typeof t.mimeType==`string`&&typeof t.uri==`string`}function sB(e,t){if(e.isList)return Array.isArray(t)?t.every(t=>sB({...e,isList:!1},t)):!1;switch(e.type){case`string`:return typeof t==`string`;case`number`:return typeof t==`number`;case`boolean`:return typeof t==`boolean`;case`object`:return typeof t==`object`&&!!t&&!Array.isArray(t)&&!oB(t);case`array`:return Array.isArray(t);case`binary`:return!(!oB(t)||e.binaryKind&&t.kind!==e.binaryKind||e.mimeTypes&&e.mimeTypes.length>0&&!e.mimeTypes.includes(t.mimeType));default:return!1}}function cB(e,t,n,r){for(let i of t){let t=e[i.key];if(t===void 0){if(i.required)return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_REQUIRED_INPUT_MISSING`:`DAG_VALIDATION_NODE_REQUIRED_OUTPUT_MISSING`,n===`input`?`Required input port "${i.key}" (${i.type}) is missing on node "${r}"`:`Required output port "${i.key}" (${i.type}) was not set by node "${r}"`,{nodeId:r,key:i.key,type:i.type},n===`input`?{action:`connect_port`,suggestion:`Connect a "${i.type}" output to the "${i.key}" input of node "${r}"`}:void 0)};continue}if(i.isList){if(!Array.isArray(t))return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`:`DAG_VALIDATION_NODE_OUTPUT_TYPE_MISMATCH`,n===`input`?`List input port must receive array payload`:`List output port must emit array payload`,{nodeId:r,key:i.key,type:i.type})};if(typeof i.minItems==`number`&&t.length<i.minItems)return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_INPUT_MIN_ITEMS_NOT_SATISFIED`:`DAG_VALIDATION_NODE_OUTPUT_MIN_ITEMS_NOT_SATISFIED`,n===`input`?`List input port does not satisfy minItems`:`List output port does not satisfy minItems`,{nodeId:r,key:i.key,minItems:i.minItems,actualItems:t.length})};if(typeof i.maxItems==`number`&&t.length>i.maxItems)return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_INPUT_MAX_ITEMS_EXCEEDED`:`DAG_VALIDATION_NODE_OUTPUT_MAX_ITEMS_EXCEEDED`,n===`input`?`List input port exceeds maxItems`:`List output port exceeds maxItems`,{nodeId:r,key:i.key,maxItems:i.maxItems,actualItems:t.length})}}if(!sB(i,t))return{ok:!1,error:X(n===`input`?`DAG_VALIDATION_NODE_INPUT_TYPE_MISMATCH`:`DAG_VALIDATION_NODE_OUTPUT_TYPE_MISMATCH`,n===`input`?`Input port "${i.key}" on node "${r}" expects type "${i.type}" but received incompatible value`:`Output port "${i.key}" on node "${r}" emitted value incompatible with type "${i.type}"`,{nodeId:r,key:i.key,type:i.type},n===`input`?{action:`check_port_type`,suggestion:`Ensure the upstream output connected to "${i.key}" produces a "${i.type}" value`}:void 0)}}return{ok:!0,value:void 0}}var lB=class{handler;constructor(e){this.handler=e}async initialize(e){return this.handler.initialize?this.handler.initialize(e):{ok:!0,value:void 0}}async validateInput(e,t){let n=cB(e,t.nodeManifest.inputs,`input`,t.nodeDefinition.nodeId);return n.ok?this.handler.validateInput?this.handler.validateInput(e,t):{ok:!0,value:void 0}:n}async estimateCost(e,t){return this.handler.estimateCost?this.handler.estimateCost(e,t):{ok:!0,value:{estimatedCredits:0}}}async execute(e,t){return this.handler.execute(e,t)}async validateOutput(e,t){let n=cB(e,t.nodeManifest.outputs,`output`,t.nodeDefinition.nodeId);return n.ok?this.handler.validateOutput?this.handler.validateOutput(e,t):{ok:!0,value:void 0}:n}async dispose(e){return this.handler.dispose?this.handler.dispose(e):{ok:!0,value:void 0}}},uB=class{handlersByType;constructor(e){this.handlersByType=e}getHandler(e){return this.handlersByType[e]}listNodeTypes(){return Object.keys(this.handlersByType)}},dB=class{taskHandlerRegistry;constructor(e){this.taskHandlerRegistry=e}create(e){let t=this.taskHandlerRegistry.getHandler(e);return t?{ok:!0,value:new lB(t)}:{ok:!1,error:X(`DAG_VALIDATION_NODE_LIFECYCLE_NOT_REGISTERED`,`Node lifecycle is not registered for nodeType`,{nodeType:e})}}},fB=class{manifestByType=new Map;constructor(e){for(let t of e)this.manifestByType.set(t.nodeType,t)}getManifest(e){return this.manifestByType.get(e)}listManifests(){return[...this.manifestByType.values()]}};const pB=v.z.string().trim().min(1);v.z.enum([`asset`,`uri`]);const mB=v.z.object({referenceType:v.z.literal(`asset`),assetId:pB,mediaType:v.z.string().optional(),name:v.z.string().optional(),sizeBytes:v.z.number().int().nonnegative().optional()}),hB=v.z.object({referenceType:v.z.literal(`uri`),uri:pB,mediaType:v.z.string().optional(),name:v.z.string().optional(),sizeBytes:v.z.number().int().nonnegative().optional()}),gB=v.z.union([mB,hB]);function _B(){return v.z.object({asset:gB})}function vB(e){return typeof e!=`object`||!e?!1:e instanceof v.z.ZodType}function yB(e){return e==null?{ok:!0,value:{}}:vB(e)?{ok:!0,value:(0,se.zodToJsonSchema)(e,{target:`jsonSchema7`})}:{ok:!1,error:X(`DAG_VALIDATION_CONFIG_SCHEMA_INVALID`,`configSchemaDefinition must be a Zod schema instance.`)}}function bB(e){let t=[],n={};for(let r of e){let e=yB(r.configSchemaDefinition);if(!e.ok)return e;let i={nodeType:r.nodeType,displayName:r.displayName,category:r.category,inputs:r.inputs,outputs:r.outputs,configSchema:e.value,...r.defaultInputPort===void 0?{}:{defaultInputPort:r.defaultInputPort},...r.defaultOutputPort===void 0?{}:{defaultOutputPort:r.defaultOutputPort}};t.push(i),n[i.nodeType]=r.taskHandler}return{ok:!0,value:{manifests:t,handlersByType:n}}}const xB={IMAGE_PNG:{binaryKind:`image`,mimeTypes:[`image/png`]},IMAGE_COMMON:{binaryKind:`image`,mimeTypes:[`image/png`,`image/jpeg`,`image/webp`]},VIDEO_MP4:{binaryKind:`video`,mimeTypes:[`video/mp4`]},AUDIO_MPEG:{binaryKind:`audio`,mimeTypes:[`audio/mpeg`]},FILE_GENERIC:{binaryKind:`file`,mimeTypes:[]}};function SB(e){return{key:e.key,label:e.label,order:e.order,type:`binary`,required:e.required,description:e.description,binaryKind:e.preset.binaryKind,mimeTypes:[...e.preset.mimeTypes],isList:e.isList,minItems:e.minItems,maxItems:e.maxItems}}var CB=class{listeners=new Set;logger;constructor(e){this.logger=e}publish(e){let t=[];for(let n of[...this.listeners])try{n(e)}catch(n){t.push(n),this.logger&&this.logger.error(`RunProgressEventBus listener threw an error`,{eventType:e.eventType,error:n instanceof Error?n.message:String(n)})}if(t.length>0&&!this.logger)throw t[0]instanceof Error?t[0]:Error(String(t[0]))}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}};function wB(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t||Array.isArray(t)?{ok:!1,error:X(`DAG_VALIDATION_PAYLOAD_INVALID`,`Payload must be a JSON object`)}:{ok:!0,value:t}}catch{return{ok:!1,error:X(`DAG_VALIDATION_PAYLOAD_PARSE_FAILED`,`Failed to parse payload JSON`)}}}function TB(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t||Array.isArray(t)||!(`dagId`in t)||!(`version`in t)||!(`nodes`in t)||!(`edges`in t)||!(`status`in t)||typeof t.dagId!=`string`||typeof t.version!=`number`||!Array.isArray(t.nodes)||!Array.isArray(t.edges)||typeof t.status!=`string`?{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`Definition snapshot must be a valid DAG definition object`)}:{ok:!0,value:t}}catch{return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_PARSE_FAILED`,`Failed to parse definition snapshot JSON`)}}}async function EB(e,t,n,r,i){let{dagRunId:a,definition:o,input:s}=e,c=o.nodes.filter(e=>e.dependsOn.length===0);if(c.length===0)return{ok:!1,error:X(`DAG_VALIDATION_NO_ENTRY_NODE`,`DAG must include at least one entry node (dependsOn = [])`,{dagId:o.dagId,version:o.version})};let l=Iz.transition(`created`,`QUEUE`);if(!l.ok)return l;await t.updateDagRunStatus(a,l.value.nextStatus);let u=Iz.transition(`queued`,`START`);if(!u.ok)return u;await t.updateDagRunStatus(a,u.value.nextStatus),i?.publish({dagRunId:a,eventType:jz.STARTED,occurredAt:r.nowIso(),dagId:o.dagId,version:o.version});let d=[];for(let e of c){let c=`${a}:${e.nodeId}:attempt:1`;d.push(c),await t.createTaskRun({taskRunId:c,dagRunId:a,nodeId:e.nodeId,status:`queued`,attempt:1});let l={messageId:`${c}:message`,dagRunId:a,taskRunId:c,nodeId:e.nodeId,attempt:1,executionPath:[`dagId:${o.dagId}`,`dagRunId:${a}`,`nodeId:${e.nodeId}`,`taskRunId:${c}`,`attempt:1`],payload:s,createdAt:r.nowIso()};try{await n.enqueue(l)}catch(n){return DB(a,c,e.nodeId,d,n,t,r,i)}}return{ok:!0,value:{taskRunIds:d}}}async function DB(e,t,n,r,i,a,o,s){let c=Hz(`DAG_DISPATCH_ENQUEUE_FAILED`,`Failed to enqueue entry task`,{dagRunId:e,taskRunId:t,nodeId:n,errorMessage:i instanceof Error&&i.message.trim().length>0?i.message:`Unknown error`}),l=Bz.transition(`queued`,`CANCEL`);if(l.ok){await a.updateTaskRunStatus(t,l.value.nextStatus,c);for(let e of r)e!==t&&await a.updateTaskRunStatus(e,l.value.nextStatus,c)}let u=Iz.transition(`running`,`COMPLETE_FAILURE`);return u.ok&&(await a.updateDagRunStatus(e,u.value.nextStatus,o.nowIso()),s?.publish({dagRunId:e,eventType:jz.FAILED,occurredAt:o.nowIso(),error:c})),{ok:!1,error:c}}var OB=class{storage;queue;clock;runProgressEventReporter;timeSemanticsService;constructor(e,t,n,r){this.storage=e,this.queue=t,this.clock=n,this.runProgressEventReporter=r,this.timeSemanticsService=new Gz(n)}async createRun(e){let t=e.version?await this.storage.getDefinition(e.dagId,e.version):await this.storage.getLatestPublishedDefinition(e.dagId);if(!t)return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_NOT_FOUND`,`Published DAG definition was not found`,{dagId:e.dagId,hasVersion:!!e.version})};if(t.status!==`published`)return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_NOT_PUBLISHED`,`Only published definitions can be executed`,{dagId:t.dagId,version:t.version,status:t.status})};let n=this.timeSemanticsService.resolve(e.trigger,e.logicalDate);if(!n.ok)return n;let r=e.rerunKey?`${t.dagId}:${n.value.logicalDate}:rerun:${e.rerunKey}`:`${t.dagId}:${n.value.logicalDate}`,i=await this.storage.getDagRunByRunKey(r);if(i)return{ok:!0,value:{dagRunId:i.dagRunId,dagId:i.dagId,version:i.version,logicalDate:i.logicalDate,status:i.status}};let a=this.generateDagRunId(t.dagId,n.value.logicalDate,e.rerunKey);try{await this.storage.createDagRun({dagRunId:a,dagId:t.dagId,version:t.version,status:`created`,definitionSnapshot:JSON.stringify(t),inputSnapshot:JSON.stringify(e.input),runKey:r,logicalDate:n.value.logicalDate,trigger:e.trigger,startedAt:this.clock.nowIso()})}catch(e){return{ok:!1,error:Hz(`DAG_DISPATCH_DAG_RUN_CREATE_FAILED`,`Failed to create DagRun`,{dagId:t.dagId,version:t.version,runKey:r,errorMessage:this.resolveErrorMessage(e instanceof Error?e:void 0)})}}return{ok:!0,value:{dagRunId:a,dagId:t.dagId,version:t.version,logicalDate:n.value.logicalDate,status:`created`}}}async startCreatedRun(e){let t=await this.storage.getDagRun(e);if(!t)return{ok:!1,error:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})};if(t.status!==`created`){let n=await this.storage.listTaskRunsByDagRunId(e);return{ok:!0,value:{dagRunId:e,dagId:t.dagId,version:t.version,logicalDate:t.logicalDate,taskRunIds:n.map(e=>e.taskRunId)}}}if(typeof t.definitionSnapshot!=`string`||t.definitionSnapshot.trim().length===0)return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_MISSING`,`DagRun definition snapshot is missing`,{dagRunId:e})};let n=TB(t.definitionSnapshot);if(!n.ok)return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot is invalid`,{dagRunId:e})};let r=wB(t.inputSnapshot??`{}`);if(!r.ok)return{ok:!1,error:X(`DAG_VALIDATION_RUN_INPUT_SNAPSHOT_INVALID`,`DagRun input snapshot is invalid`,{dagRunId:e})};let i=await EB({dagRunId:e,definition:n.value,input:r.value},this.storage,this.queue,this.clock,this.runProgressEventReporter);return i.ok?{ok:!0,value:{dagRunId:e,dagId:t.dagId,version:t.version,logicalDate:t.logicalDate,taskRunIds:i.value.taskRunIds}}:i}async startRun(e){let t=await this.createRun(e);if(!t.ok)return t;if(t.value.status===`created`)return this.startCreatedRun(t.value.dagRunId);let n=await this.storage.listTaskRunsByDagRunId(t.value.dagRunId);return{ok:!0,value:{dagRunId:t.value.dagRunId,dagId:t.value.dagId,version:t.value.version,logicalDate:t.value.logicalDate,taskRunIds:n.map(e=>e.taskRunId)}}}generateDagRunId(e,t,n){let r=Date.parse(t);return n?`${e}:run:${r}:rerun:${n}`:`${e}:run:${r}`}resolveErrorMessage(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}},kB=class{storage;constructor(e){this.storage=e}async getRun(e){let t=await this.storage.getDagRun(e);return t?{ok:!0,value:{dagRun:t,taskRuns:await this.storage.listTaskRunsByDagRunId(e)}}:{ok:!1,error:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})}}},AB=class{storage;clock;constructor(e,t){this.storage=e,this.clock=t}async cancelRun(e){let t=await this.storage.getDagRun(e);if(!t)return{ok:!1,error:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun was not found`,{dagRunId:e})};let n=Iz.transition(t.status,`CANCEL`);return n.ok?(await this.storage.updateDagRunStatus(e,n.value.nextStatus,this.clock.nowIso()),{ok:!0,value:{dagRunId:e,status:`cancelled`}}):n}};function jB(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function MB(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function NB(e,t,n){let r=e.nodes.find(e=>e.nodeId===n);if(!r)return{ok:!1,error:X(`DAG_VALIDATION_DOWNSTREAM_NODE_NOT_FOUND`,`Downstream node was not found while building payload`,{downstreamNodeId:n})};let i=e.edges.filter(e=>e.to===n);if(i.length===0)return{ok:!0,value:{}};let a={};for(let e of i){let n=PB(a,e,r,t);if(!n.ok)return n}return zB(a,r.inputs??[]),{ok:!0,value:a}}function PB(e,t,n,r){if(!t.bindings||t.bindings.length===0)return{ok:!1,error:X(`DAG_VALIDATION_BINDING_REQUIRED`,`Incoming edge must define at least one binding`,{from:t.from,to:t.to})};let i=FB(t.from,t.to,r);if(!i.ok)return i;let a=i.value;for(let r of t.bindings){let i=IB(e,r,a,t,n);if(!i.ok)return i}return{ok:!0,value:void 0}}function FB(e,t,n){let r=n.find(t=>t.nodeId===e&&t.status===`success`);if(!r||!r.outputSnapshot)return{ok:!1,error:X(`DAG_VALIDATION_UPSTREAM_OUTPUT_MISSING`,`Upstream output snapshot is missing for binding dispatch`,{from:e,to:t})};try{let n=JSON.parse(r.outputSnapshot);return MB(n)?{ok:!0,value:n}:{ok:!1,error:X(`DAG_VALIDATION_UPSTREAM_OUTPUT_INVALID`,`Upstream output snapshot has invalid payload shape`,{from:e,to:t})}}catch(n){return{ok:!1,error:X(`DAG_VALIDATION_UPSTREAM_OUTPUT_PARSE_FAILED`,`Failed to parse upstream output snapshot`,{from:e,to:t,errorMessage:jB(n)})}}}function IB(e,t,n,r,i){let a=n[t.outputKey];if(a===void 0)return{ok:!1,error:X(`DAG_VALIDATION_BINDING_OUTPUT_KEY_MISSING`,`Binding outputKey was not found in upstream output`,{from:r.from,outputKey:t.outputKey})};if((i.inputs??[]).find(e=>e.key===t.inputKey)?.isList)return LB(e,t.inputKey,a,r.to);let o=Az(t.inputKey);return o?RB(e,o,a,t.inputKey,r.to,i):e[t.inputKey]===void 0?(e[t.inputKey]=a,{ok:!0,value:void 0}):{ok:!1,error:X(`DAG_VALIDATION_BINDING_INPUT_KEY_CONFLICT`,`Multiple bindings target the same input key`,{to:r.to,inputKey:t.inputKey})}}function LB(e,t,n,r){Array.isArray(e[t])||(e[t]=[]);let i=e[t];return Array.isArray(i)?(i.push(n),{ok:!0,value:void 0}):{ok:!1,error:X(`DAG_VALIDATION_BINDING_LIST_PAYLOAD_INVALID`,`List payload container is invalid`,{to:r,inputKey:t})}}function RB(e,t,n,r,i,a){if(!(a.inputs??[]).find(e=>e.key===t.portKey)?.isList)return{ok:!1,error:X(`DAG_VALIDATION_BINDING_INPUT_KEY_MISSING`,`Binding inputKey does not resolve to a valid list input port`,{to:i,inputKey:r})};let o=e[t.portKey],s=Array.isArray(o)?o:[];return s[t.index]=n,e[t.portKey]=s,{ok:!0,value:void 0}}function zB(e,t){for(let n of t){if(!n.isList)continue;let t=e[n.key];Array.isArray(t)&&(e[n.key]=t.filter(e=>e!==void 0))}}function BB(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}async function VB(e,t,n,r,i,a,o){let s=t.nodes.filter(e=>e.dependsOn.includes(n));if(s.length===0)return{ok:!0,value:void 0};let c=await i.listTaskRunsByDagRunId(e.dagRunId);for(let n of s){let r=await HB(e,t,n,c,i,a,o);if(!r.ok)return r}return{ok:!0,value:void 0}}async function HB(e,t,n,r,i,a,o){if(r.some(e=>e.nodeId===n.nodeId)||!n.dependsOn.every(e=>r.some(t=>t.nodeId===e&&t.status===`success`)))return{ok:!0,value:void 0};let s=`${e.dagRunId}:${n.nodeId}:attempt:1`;await i.createTaskRun({taskRunId:s,dagRunId:e.dagRunId,nodeId:n.nodeId,status:`queued`,attempt:1});let c=NB(t,r,n.nodeId);if(!c.ok)return c;let l=n.timeoutMs?{...c.value,timeoutMs:n.timeoutMs}:c.value,u={messageId:`${s}:message:1`,dagRunId:e.dagRunId,taskRunId:s,nodeId:n.nodeId,attempt:1,executionPath:[`dagId:${e.dagId}`,`dagRunId:${e.dagRunId}`,`nodeId:${n.nodeId}`,`taskRunId:${s}`,`attempt:1`],payload:l,createdAt:o.nowIso()};try{await a.enqueue(u)}catch(t){let r=Bz.transition(`queued`,`CANCEL`);return r.ok&&await i.updateTaskRunStatus(s,r.value.nextStatus),{ok:!1,error:Hz(`DAG_DISPATCH_ENQUEUE_DOWNSTREAM_FAILED`,`Failed to enqueue downstream task`,{dagRunId:e.dagRunId,nodeId:n.nodeId,errorMessage:BB(t)})}}return r.push({taskRunId:s,dagRunId:e.dagRunId,nodeId:n.nodeId,status:`queued`,attempt:1}),{ok:!0,value:void 0}}const UB=new Set([`created`,`queued`,`running`]),WB=new Set([`failed`]);async function GB(e,t,n,r){let i=await t.getDagRun(e);if(!i)return{ok:!1,error:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun not found while finalizing run status`,{dagRunId:e})};if(i.status!==`running`)return{ok:!0,value:void 0};let a=await t.listTaskRunsByDagRunId(e);if(a.some(e=>UB.has(e.status)))return{ok:!0,value:void 0};let o=a.some(e=>WB.has(e.status)),s=Iz.transition(i.status,o?`COMPLETE_FAILURE`:`COMPLETE_SUCCESS`);return s.ok?(await t.updateDagRunStatus(e,s.value.nextStatus,n.nowIso()),o?KB(e,a,n,r):r?.publish({dagRunId:e,eventType:jz.COMPLETED,occurredAt:n.nowIso()}),{ok:!0,value:void 0}):s}function KB(e,t,n,r){let i=t.find(e=>WB.has(e.status)),a=typeof i?.errorCode==`string`&&typeof i.errorMessage==`string`?Uz(i.errorCode,i.errorMessage,!1,{dagRunId:e,taskRunId:i.taskRunId,nodeId:i.nodeId}):Uz(`DAG_TASK_EXECUTION_FAILED`,`Run completed with failure.`,!1,{dagRunId:e});r?.publish({dagRunId:e,eventType:jz.FAILED,occurredAt:n.nowIso(),error:a})}function qB(e,t){return Uz(`DAG_TASK_EXECUTION_TIMEOUT`,`Task execution timed out after ${t}ms`,!0,{taskRunId:e,timeoutMs:t})}function JB(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function YB(e,t,n,r){return new Promise(i=>{let a=!1,o=setTimeout(()=>{a||(a=!0,i({ok:!1,error:qB(r,n)}))},n);e.execute(t).then(e=>{a||(a=!0,clearTimeout(o),i(e))}).catch(e=>{a||(a=!0,clearTimeout(o),i({ok:!1,error:Uz(`DAG_TASK_EXECUTION_EXCEPTION`,`Task executor threw an exception`,!0,{taskRunId:r,errorMessage:JB(e)})}))})})}function XB(e){let t=0;for(let n of e)typeof n.totalCredits==`number`&&n.totalCredits>t&&(t=n.totalCredits);return t}function ZB(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}function QB(e,t){if(typeof e.definitionSnapshot!=`string`||e.definitionSnapshot.trim().length===0)return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_MISSING`,`DagRun definition snapshot is missing`,{dagRunId:t})};try{let n=JSON.parse(e.definitionSnapshot);return $B(n)?{ok:!0,value:n}:{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_INVALID`,`DagRun definition snapshot has invalid shape`,{dagRunId:t})}}catch(e){return{ok:!1,error:X(`DAG_VALIDATION_DEFINITION_SNAPSHOT_PARSE_FAILED`,`Failed to parse DagRun definition snapshot`,{dagRunId:t,errorMessage:ZB(e)})}}}function $B(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&typeof e.dagId==`string`&&typeof e.version==`number`&&Array.isArray(e.nodes)&&Array.isArray(e.edges)&&typeof e.status==`string`}async function eV(e,t){let n=await e.getDagRun(t.dagRunId);if(!n)return{ok:!1,error:X(`DAG_VALIDATION_DAG_RUN_NOT_FOUND`,`DagRun not found for dequeued message`,{dagRunId:t.dagRunId})};let r=QB(n,t.dagRunId);if(!r.ok)return r;let i=r.value,a=i.nodes.find(e=>e.nodeId===t.nodeId);return a?{ok:!0,value:{dagRun:n,definition:i,nodeDefinition:a}}:{ok:!1,error:X(`DAG_VALIDATION_NODE_NOT_FOUND`,`Node definition not found for task execution`,{nodeId:t.nodeId,dagId:n.dagId,version:n.version})}}function tV(e,t){let n=e.map(e=>e.startsWith(`attempt:`)?`attempt:${t}`:e);return n.some(e=>e.startsWith(`attempt:`))||n.push(`attempt:${t}`),n}function nV(e){return e instanceof Error&&e.message.trim().length>0?e.message:`Unknown error`}async function rV(e,t,n,r,i,a,o,s){if(r.deadLetterEnabled){let t=await aV(e,n,r,o);if(!t.ok)return oV(a,e.messageId,t.error)}let c=await GB(e.dagRunId,i,o,s);return c.ok?sV(a,e.messageId,t,!1):oV(a,e.messageId,c.error)}async function iV(e,t,n,r,i){let a=Bz.transition(`failed`,`RETRY`);if(!a.ok)return oV(r,e.messageId,a.error);await n.incrementTaskAttempt(t),await n.updateTaskRunStatus(t,a.value.nextStatus);let o=e.attempt+1,s={...e,messageId:`${e.taskRunId}:message:${o}`,attempt:o,executionPath:tV(e.executionPath,o),createdAt:i.nowIso()};try{await r.enqueue(s)}catch(n){return oV(r,e.messageId,Hz(`DAG_DISPATCH_ENQUEUE_RETRY_FAILED`,`Failed to enqueue retry message`,{taskRunId:t,attempt:o,errorMessage:nV(n)}))}return sV(r,e.messageId,t,!0)}async function aV(e,t,n,r){if(!n.deadLetterQueue)return{ok:!1,error:X(`DAG_VALIDATION_DEAD_LETTER_QUEUE_NOT_CONFIGURED`,`deadLetterEnabled requires deadLetterQueue to be configured`,{taskRunId:e.taskRunId})};let i={...e,messageId:`${e.taskRunId}:dlq:${r.nowEpochMs()}`,payload:{...e.payload,dlqReasonCode:t.code,dlqReasonMessage:t.message,dlqSourceMessageId:e.messageId},createdAt:r.nowIso()};try{return await n.deadLetterQueue.enqueue(i),{ok:!0,value:void 0}}catch(t){return{ok:!1,error:Hz(`DAG_DISPATCH_DEAD_LETTER_ENQUEUE_FAILED`,`Failed to enqueue dead letter message`,{taskRunId:e.taskRunId,originalMessageId:e.messageId,errorMessage:nV(t)})}}}async function oV(e,t,n){return await e.ack(t),{ok:!1,error:n}}async function sV(e,t,n,r){return await e.ack(t),{ok:!0,value:{processed:!0,taskRunId:n,retried:r}}}var cV=class{storage;queue;lease;executor;clock;options;runProgressEventReporter;constructor(e,t,n,r,i,a,o){this.storage=e,this.queue=t,this.lease=n,this.executor=r,this.clock=i,this.options=a,this.runProgressEventReporter=o}async processOnce(){let e=await this.queue.dequeue(this.options.workerId,this.options.visibilityTimeoutMs,this.options.idleWaitMs);if(!e)return{ok:!0,value:{processed:!1}};let t=`taskRun:${e.taskRunId}`;if(!await this.lease.acquire(t,this.options.workerId,this.options.leaseDurationMs))return await this.queue.nack(e.messageId),{ok:!0,value:{processed:!1}};try{return this.processAcquiredMessage(e)}finally{await this.lease.release(t,this.options.workerId)}}async processAcquiredMessage(e){let t=await this.storage.getTaskRun(e.taskRunId);if(!t)return oV(this.queue,e.messageId,X(`DAG_VALIDATION_TASK_RUN_NOT_FOUND`,`TaskRun not found for dequeued message`,{taskRunId:e.taskRunId}));let n=await this.transitionToRunning(e,t);if(!n.ok)return oV(this.queue,e.messageId,n.error);let r=await eV(this.storage,e);if(!r.ok)return oV(this.queue,e.messageId,r.error);let{dagRun:i,definition:a,nodeDefinition:o}=r.value,s=await this.buildExecutionInput(e,i,a,o),c=this.resolveTimeoutMs(e),l=await YB(this.executor,s,c,e.taskRunId);return l.ok?this.handleSuccessPath(e,t.taskRunId,i,a,l.output,l.estimatedCredits,l.totalCredits):this.handleFailurePath(e,t.taskRunId,l.error)}async transitionToRunning(e,t){let n=Bz.transition(t.status,`START`);return n.ok?(await this.storage.updateTaskRunStatus(t.taskRunId,n.value.nextStatus),this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:Mz.STARTED,occurredAt:this.clock.nowIso(),taskRunId:t.taskRunId,nodeId:e.nodeId,input:e.payload}),await this.storage.saveTaskRunSnapshots(t.taskRunId,JSON.stringify(e.payload)),{ok:!0,value:void 0}):n}async buildExecutionInput(e,t,n,r){let i=XB(await this.storage.listTaskRunsByDagRunId(e.dagRunId));return{dagId:t.dagId,dagRunId:e.dagRunId,taskRunId:e.taskRunId,nodeId:e.nodeId,attempt:e.attempt,executionPath:e.executionPath,input:e.payload,nodeDefinition:r,costPolicy:n.costPolicy,currentTotalCredits:i}}async handleSuccessPath(e,t,n,r,i,a,o){let s=Bz.transition(`running`,`COMPLETE_SUCCESS`);if(!s.ok)return oV(this.queue,e.messageId,s.error);await this.completeTaskRun(e,t,s.value.nextStatus,i,a,o);let c=await VB(n,r,e.nodeId,i,this.storage,this.queue,this.clock);if(!c.ok)return oV(this.queue,e.messageId,c.error);let l=await GB(e.dagRunId,this.storage,this.clock,this.runProgressEventReporter);return l.ok?sV(this.queue,e.messageId,t,!1):oV(this.queue,e.messageId,l.error)}async handleFailurePath(e,t,n){let r=Bz.transition(`running`,`COMPLETE_FAILURE`);return r.ok?(await this.storage.updateTaskRunStatus(t,r.value.nextStatus,n),this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:Mz.FAILED,occurredAt:this.clock.nowIso(),taskRunId:t,nodeId:e.nodeId,input:e.payload,error:n}),this.options.retryEnabled&&n.retryable&&e.attempt<this.options.maxAttempts?iV(e,t,this.storage,this.queue,this.clock):rV(e,t,n,this.options,this.storage,this.queue,this.clock,this.runProgressEventReporter)):oV(this.queue,e.messageId,r.error)}async completeTaskRun(e,t,n,r,i,a){await this.storage.updateTaskRunStatus(t,n),await this.storage.saveTaskRunSnapshots(t,void 0,JSON.stringify(r),i,a),this.runProgressEventReporter?.publish({dagRunId:e.dagRunId,eventType:Mz.COMPLETED,occurredAt:this.clock.nowIso(),taskRunId:t,nodeId:e.nodeId,input:e.payload,output:r})}resolveTimeoutMs(e){let t=e.payload.timeoutMs;return typeof t==`number`&&t>0?t:this.options.defaultTimeoutMs}};function lV(e,t){let n={...t,retryEnabled:t.retryEnabled??!1,deadLetterEnabled:t.deadLetterEnabled??!1,deadLetterQueue:e.deadLetterQueue};return new cV(e.storage,e.queue,e.lease,e.executor,e.clock,n,e.runProgressEventReporter)}function uV(e){return`parallel`in e}function dV(e,t){return e.id??`${e.nodeType}-${t}`}function fV(e,t){return e.find(e=>e.nodeType===t)}function pV(e,t){let n=t.map(e=>e.nodeType),r={action:`replace_node_type`,suggestion:n[0],options:n};return X(`UNKNOWN_NODE_TYPE`,`Node type "${e}" is not registered`,{requestedType:e},r)}function mV(e,t){let n=[],r=[],i=[],a=[],o=0;for(let s of e.pipeline)if(uV(s)){let e=[];for(let c of s.parallel){let l=dV(c,o);o+=1;let u=fV(t,c.nodeType);if(!u)return{ok:!1,error:pV(c.nodeType,t),warnings:n};let d=a.map(e=>e.nodeId);r.push({nodeId:l,nodeType:c.nodeType,dependsOn:d,config:c.config??{}});for(let e of a){let t=c.toPort??u.defaultInputPort;if(!t){n.push({message:`Node "${l}" (${c.nodeType}) has no defaultInputPort; edge from "${e.nodeId}" requires explicit toPort`});continue}i.push({from:e.nodeId,to:l,bindings:[{outputKey:e.portKey,inputKey:t}]})}let f=s.fromPort??c.fromPort??u.defaultOutputPort;f?e.push({nodeId:l,portKey:f}):n.push({message:`Node "${l}" (${c.nodeType}) has no defaultOutputPort; downstream connections require explicit fromPort`})}a=e}else{let e=dV(s,o);o+=1;let c=fV(t,s.nodeType);if(!c)return{ok:!1,error:pV(s.nodeType,t),warnings:n};let l=a.map(e=>e.nodeId);r.push({nodeId:e,nodeType:s.nodeType,dependsOn:l,config:s.config??{}});for(let t of a){let r=s.toPort??c.defaultInputPort;if(!r){n.push({message:`Node "${e}" (${s.nodeType}) has no defaultInputPort; edge from "${t.nodeId}" requires explicit toPort`});continue}i.push({from:t.nodeId,to:e,bindings:[{outputKey:t.portKey,inputKey:r}]})}let u=s.fromPort??c.defaultOutputPort;a=u?[{nodeId:e,portKey:u}]:[]}return r.length===0?{ok:!1,error:X(`EMPTY_PIPELINE`,`pipeline must contain at least one node`,void 0,{action:`add_node`,suggestion:`Add at least one node spec to the pipeline array`}),warnings:n}:{ok:!0,definition:{dagId:e.dagId??`dag-build-result`,version:1,status:`draft`,nodes:r,edges:i},warnings:n,nodeCount:r.length,edgeCount:i.length}}const hV=`Robota`,gV=`robota_config`;function _V(e){return`${hV}${e.split(`-`).map(e=>e.length>0?e[0].toUpperCase()+e.slice(1):``).join(``)}`}function vV(e){return(e.startsWith(hV)?e.slice(6):e).replace(/([A-Z])/g,(e,t)=>`-${t.toLowerCase()}`).replace(/^-/,``)}function yV(e){let t=new Map;e.nodes.forEach((e,n)=>{t.set(e.nodeId,n+1)});let n=new Map,r=new Map;for(let t of e.edges)for(let e of t.bindings??[]){n.has(t.from)||n.set(t.from,new Map);let i=n.get(t.from);i.has(e.outputKey)||i.set(e.outputKey,i.size),r.has(t.to)||r.set(t.to,new Map);let a=r.get(t.to);a.has(e.inputKey)||a.set(e.inputKey,a.size)}let i=[],a=1,o=new Map,s=new Map;for(let n of e.nodes){let e=t.get(n.nodeId);o.set(e,[]),s.set(e,[])}for(let c of e.edges){let e=t.get(c.from),l=t.get(c.to);if(!(e===void 0||l===void 0))for(let t of c.bindings??[]){let u=a++,d=n.get(c.from)?.get(t.outputKey)??0,f=r.get(c.to)?.get(t.inputKey)??0,p=`STRING`;i.push([u,e,d,l,f,p]);let m=s.get(e),h=m.find(e=>e.name===t.outputKey);h||(h={name:t.outputKey,type:p,links:[]},m.push(h)),h.links.push(u);let g=o.get(l);g.find(e=>e.name===t.inputKey)||g.push({name:t.inputKey,type:p,link:u})}}let c=e.nodes.map(e=>{let n=t.get(e.nodeId),r=o.get(n),i=s.get(n),a={id:n,type:_V(e.nodeType),pos:[e.position?.x??0,e.position?.y??0],properties:{[gV]:e.config},widgets_values:Object.values(e.config)};return r.length>0&&(a.inputs=r),i.length>0&&(a.outputs=i),a}),l={last_node_id:e.nodes.length,last_link_id:a-1,nodes:c,links:i,version:.4},u={};for(let n of e.nodes){let e=t.get(n.nodeId),r={nodeId:n.nodeId};n.retryPolicy&&(r.retryPolicy=n.retryPolicy),n.timeoutMs!==void 0&&(r.timeoutMs=n.timeoutMs),n.costPolicy&&(r.costPolicy=n.costPolicy),u[String(e)]=r}let d={dagId:e.dagId,version:e.version,status:e.status,nodes:u};return e.costPolicy&&(d.costPolicy=e.costPolicy),e.inputSchema&&(d.inputSchema=e.inputSchema),e.outputSchema&&(d.outputSchema=e.outputSchema),{workflowFile:l,companion:d}}function bV(e,t){let n=new Map;for(let t of e.links)n.set(t[0],t);let r=t?.nodes??{},i=e.nodes.map(e=>{let t=r[String(e.id)],n={nodeId:t?.nodeId??`node-${e.id}`,nodeType:vV(e.type),dependsOn:[],config:e.properties?.[gV]??{},position:e.pos[0]!==0||e.pos[1]!==0?{x:e.pos[0],y:e.pos[1]}:void 0};return t?.retryPolicy&&(n.retryPolicy=t.retryPolicy),t?.timeoutMs!==void 0&&(n.timeoutMs=t.timeoutMs),t?.costPolicy&&(n.costPolicy=t.costPolicy),n}),a=new Map;e.nodes.forEach((e,t)=>{a.set(e.id,i[t])});let o=new Map,s=new Map;for(let t of e.links){let[,n,,r]=t,i=a.get(n),c=a.get(r);if(!i||!c)continue;let l=e.nodes.find(e=>e.id===n),u=e.nodes.find(e=>e.id===r),d=t[2],f=t[4],p=l?.outputs?.[d]?.name??`out${d}`,m=u?.inputs?.[f]?.name??`in${f}`,h=`${i.nodeId}:${c.nodeId}`;o.has(h)||o.set(h,[]),o.get(h).push({outputKey:p,inputKey:m}),s.has(c.nodeId)||s.set(c.nodeId,new Set),s.get(c.nodeId).add(i.nodeId)}for(let e of i){let t=s.get(e.nodeId);t&&(e.dependsOn=[...t])}let c=[];for(let[e,t]of o){let[n,r]=e.split(`:`);c.push({from:n,to:r,bindings:t})}return{dagId:t?.dagId??`unknown`,version:t?.version??1,status:t?.status??`active`,nodes:i,edges:c,...t?.costPolicy?{costPolicy:t.costPolicy}:{},...t?.inputSchema?{inputSchema:t.inputSchema}:{},...t?.outputSchema?{outputSchema:t.outputSchema}:{}}}function xV(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return Array.isArray(t.nodes)&&Array.isArray(t.links)&&typeof t.version==`number`&&!(`dagId`in t)}function SV(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.dagId==`string`&&Array.isArray(t.nodes)}const CV=v.z.object({text:v.z.string().default(``)});var wV=class extends Z{nodeType=`input`;displayName=`Input`;category=`Core`;defaultOutputPort=`text`;inputs=[];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=CV;async estimateCostWithConfig(e,t,n){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,`input`),i=typeof e.text==`string`?e.text:n.text;return r.setOutput(`text`,i),r.setOutput(`_agentSummary`,`Input: ${i.length} chars.`),{ok:!0,value:r.toOutput()}}};const TV=v.z.object({ports:v.z.array(v.z.string()).default([]),values:v.z.record(v.z.string()).default({})});var EV=class extends Z{nodeType=`multi-input`;displayName=`Multi-Input`;category=`Core`;inputs=[];outputs=[];configSchemaDefinition=TV;async estimateCostWithConfig(e,t,n){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,`multi-input`),i=n.ports.length>0?n.ports:Object.keys({...n.values,...e});for(let t of i){if(t===`_agentSummary`)continue;let i=typeof e[t]==`string`?e[t]:n.values[t]??``;r.setOutput(t,i)}return r.setOutput(`_agentSummary`,`Multi-input: emitted ${i.length} port(s): ${i.join(`, `)}.`),{ok:!0,value:r.toOutput()}}};const DV=v.z.object({prefix:v.z.string().default(``)});var OV=class extends Z{nodeType=`transform`;displayName=`Transform`;category=`Core`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!1},{key:`data`,label:`Data`,order:1,type:`object`,required:!1}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!1},{key:`data`,label:`Data`,order:1,type:`object`,required:!1}];configSchemaDefinition=DV;async validateInputWithConfig(e,t,n){return Object.keys(e).length===0?{ok:!1,error:X(`DAG_VALIDATION_TRANSFORM_INPUT_REQUIRED`,`Transform node requires at least one input value`,{nodeId:t.nodeDefinition.nodeId})}:{ok:!0,value:void 0}}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:1e-4}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.getInput(`text`);if(typeof i==`string`){let e=`${n.prefix}${i}`;r.setOutput(`text`,e),r.setOutput(`_agentSummary`,`Transformed input. Output length: ${e.length} chars.`)}else{for(let[t,n]of Object.entries(e))r.setOutput(t,n);r.setOutput(`_agentSummary`,`Passed through ${Object.keys(e).length} port(s).`)}return{ok:!0,value:r.toOutput()}}};const kV=`__ROBOTA_TEXT_TEMPLATE_ESCAPED_PERCENT_S__`,AV=v.z.object({template:v.z.string().default(`%s`).describe(`Template string. Supports two syntaxes: {{text}} (Handlebars-style) or %s (printf-style). Both replace input text. Use %%s for a literal %s.`)});var jV=class extends Z{nodeType=`text-template`;displayName=`Text Template`;category=`Core`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=AV;async validateInputWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId).requireInputString(`text`);return r.ok?{ok:!0,value:void 0}:r}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=i.value,o=n.template.split(`%%s`).join(kV).replaceAll(`{{text}}`,a).split(`%s`).join(a).split(kV).join(`%s`);return r.setOutput(`text`,o),r.setOutput(`_agentSummary`,`Template rendered. Output length: ${o.length} chars.`),{ok:!0,value:r.toOutput()}}};const MV=v.z.object({});var NV=class extends Z{nodeType=`text-output`;displayName=`Text Output`;category=`Core`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=MV;async estimateCostWithConfig(e,t,n){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,`text-output`),i=r.requireInputString(`text`);return i.ok?(r.setOutput(`text`,i.value),r.setOutput(`_agentSummary`,`Output: ${i.value.length} chars.`),{ok:!0,value:r.toOutput()}):i}};const PV=v.z.object({});var FV=class extends Z{nodeType=`image-loader`;displayName=`Image Loader`;category=`Media`;defaultInputPort=`asset`;defaultOutputPort=`image`;inputs=[{key:`asset`,label:`Media Reference`,order:0,type:`object`,required:!0}];outputs=[SB({key:`image`,label:`Image`,order:0,required:!0,preset:xB.IMAGE_COMMON})];configSchemaDefinition=PV;async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputMediaReference(`asset`);return i.ok?(r.setOutput(`image`,i.value.toBinary(`image`,`image/png`)),r.setOutput(`_agentSummary`,`Asset loaded as image binary.`),{ok:!0,value:r.toOutput()}):i}};const IV=_B().extend({mimeType:v.z.string().optional()});var LV=class extends Z{nodeType=`image-source`;displayName=`Image Source`;category=`Test`;defaultOutputPort=`image`;inputs=[];outputs=[SB({key:`image`,label:`Image`,order:0,required:!0,description:`Test image output`,preset:xB.IMAGE_COMMON})];configSchemaDefinition=IV;async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=iB.fromAssetReference(n.asset),i=typeof n.mimeType==`string`?n.mimeType:r.mediaType(),a=typeof i==`string`&&i.trim().length>0?i:`image/png`;return{ok:!0,value:{image:r.toBinary(`image`,a),_agentSummary:`Image source resolved. Type: ${a}.`}}}};function RV(e){let t=e.image;return typeof t!=`object`||!t||!(`kind`in t)||!(`mimeType`in t)||!(`uri`in t)?!1:t.kind===`image`&&typeof t.mimeType==`string`&&typeof t.uri==`string`}const zV=v.z.object({});var BV=class extends Z{nodeType=`ok-emitter`;displayName=`OK Emitter`;category=`Test`;defaultInputPort=`image`;inputs=[SB({key:`image`,label:`Image Input`,order:0,required:!0,description:`Binary image from upstream`,preset:xB.IMAGE_COMMON})];outputs=[{key:`status`,label:`Status`,order:0,type:`string`,required:!0,description:`Execution status`}];configSchemaDefinition=zV;async validateInputWithConfig(e,t,n){return RV(e)?{ok:!0,value:void 0}:{ok:!1,error:X(`DAG_VALIDATION_OK_EMITTER_IMAGE_REQUIRED`,`OK emitter node requires an image binary input`,{nodeId:t.nodeDefinition.nodeId})}}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,`ok-emitter`),i=r.requireInput(`image`);return i.ok?RV({image:i.value})?(r.setOutput(`status`,`ok`),r.setOutput(`_agentSummary`,`Image validated. Status: ok.`),{ok:!0,value:r.toOutput()}):{ok:!1,error:Uz(`DAG_TASK_EXECUTION_OK_EMITTER_IMAGE_INVALID`,`OK emitter execution requires image binary input`,!1)}:i}};const VV={read:e=>fs(e),write:e=>ys(e),edit:e=>Ss(e),shell:e=>rs(e),bash:e=>is(e),glob:()=>Ts,grep:()=>Ms,"web-fetch":()=>zs,"web-search":()=>Hs},HV=Object.freeze(Object.keys(VV)),UV=v.z.object({toolName:v.z.string().min(1),params:v.z.record(v.z.unknown()).default({}),cwd:v.z.string().optional(),baseCredits:v.z.number().nonnegative().default(0)}),WV=[{key:`params`,label:`Tool Parameters (JSON string)`,order:0,type:`string`,required:!1}],GV=[{key:`output`,label:`Output`,order:0,type:`string`,required:!0},{key:`isError`,label:`Is Error`,order:1,type:`boolean`,required:!0}];function KV(e){let t=typeof e==`string`?e:JSON.stringify(e??``);try{let e=JSON.parse(t);if(typeof e==`object`&&e&&typeof e.success==`boolean`){let t=e.success?e.output:e.error??e.output;return{output:typeof t==`string`?t:String(t??``),isError:!e.success}}}catch{}return{output:t,isError:!1}}function qV(e,t,n){return X(`DAG_VALIDATION_TOOL_INVALID_PARAMS`,t,{toolName:e},{action:`set_input`,suggestion:n})}function JV(e,t){if(typeof e==`string`&&e.trim()!==``){let n;try{n=JSON.parse(e)}catch{return{ok:!1,error:qV(t,"The `params` input port must be a JSON object string.",`Provide a valid JSON object as the params input`)}}return typeof n!=`object`||!n||Array.isArray(n)?{ok:!1,error:qV(t,"The `params` input port must decode to a JSON object.",`Provide a JSON object (not an array or primitive)`)}:{ok:!0,value:n}}return typeof e==`object`&&e&&!Array.isArray(e)?{ok:!0,value:e}:{ok:!0,value:{}}}async function YV(e,t,n,r){try{let{output:i,isError:a}=KV((await e.execute(t)).data),o=new Q({},r);return o.setOutput(`output`,i),o.setOutput(`isError`,a),o.setOutput(`_agentSummary`,`Tool "${n}" ran. ${a?`Reported an error.`:`Output: ${i.length} chars.`}`),{ok:!0,value:o.toOutput()}}catch(e){return{ok:!1,error:Uz(`DAG_TASK_EXECUTION_TOOL_CALL_FAILED`,`Tool "${n}" failed: ${e instanceof Error?e.message:String(e)}`,!0,{toolName:n})}}}var XV=class extends Z{nodeType=`tool`;displayName=`Tool`;category=`Integration`;inputs=WV;outputs=GV;configSchemaDefinition=UV;defaultInputPort=`params`;defaultOutputPort=`output`;constructor(){super()}async estimateCostWithConfig(e,t,n){return{ok:!0,value:{estimatedCredits:n.baseCredits}}}async executeWithConfig(e,t,n){let r=VV[n.toolName];if(!r)return{ok:!1,error:X(`DAG_VALIDATION_TOOL_UNKNOWN_TOOL`,`Unknown toolName "${n.toolName}". Choose one of the supported in-process builtins.`,{toolName:n.toolName},{action:`set_config`,suggestion:`Set toolName to a supported builtin`,options:[...HV]})};let i=JV(new Q(e,t.nodeDefinition.nodeId).getInput(`params`),n.toolName);if(!i.ok)return i;let a={...n.params,...i.value};return YV(r(n.cwd===void 0?{}:{cwd:n.cwd}),a,n.toolName,t.nodeDefinition.nodeId)}};const $={ok:!0,value:{estimatedCredits:0}},ZV=v.z.object({});var QV=class extends Z{nodeType=`string-to-number`;displayName=`String → Number`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`number`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`number`,label:`Number`,order:0,type:`string`,required:!0}];configSchemaDefinition=ZV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=Number(i.value);return isNaN(a)?{ok:!1,error:X(`DAG_VALIDATION_STRING_TO_NUMBER_INVALID`,`Cannot convert "${i.value}" to a number`,{nodeId:t.nodeDefinition.nodeId})}:(r.setOutput(`number`,String(a)),{ok:!0,value:r.toOutput()})}},$V=class extends Z{nodeType=`number-to-string`;displayName=`Number → String`;category=`Utility`;defaultInputPort=`number`;defaultOutputPort=`text`;inputs=[{key:`number`,label:`Number`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=ZV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`number`);return i.ok?(r.setOutput(`text`,i.value),{ok:!0,value:r.toOutput()}):i}};const eH=v.z.object({separator:v.z.string().default(`, `)});var tH=class extends Z{nodeType=`text-join`;displayName=`Text Join`;category=`Utility`;defaultInputPort=`items`;defaultOutputPort=`text`;inputs=[{key:`items`,label:`Items (newline-separated)`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=eH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`items`);if(!i.ok)return i;let a=i.value.split(`
|
|
391
|
+
`).filter(e=>e.trim()!==``);return r.setOutput(`text`,a.join(n.separator)),{ok:!0,value:r.toOutput()}}};const nH=v.z.object({separator:v.z.string().default(`
|
|
392
|
+
`),trim:v.z.boolean().default(!0)});var rH=class extends Z{nodeType=`text-split`;displayName=`Text Split`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`items`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`items`,label:`Items (newline-separated)`,order:0,type:`string`,required:!0}];configSchemaDefinition=nH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=i.value.split(n.separator),o=n.trim?a.map(e=>e.trim()).filter(e=>e!==``):a;return r.setOutput(`items`,o.join(`
|
|
393
|
+
`)),{ok:!0,value:r.toOutput()}}};const iH=v.z.object({search:v.z.string().default(``),replacement:v.z.string().default(``),useRegex:v.z.boolean().default(!1),flags:v.z.string().default(`g`)});var aH=class extends Z{nodeType=`text-replace`;displayName=`Text Replace`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=iH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a;if(n.useRegex)try{let e=new RegExp(n.search,n.flags);a=i.value.replace(e,n.replacement)}catch{return{ok:!1,error:X(`DAG_VALIDATION_TEXT_REPLACE_INVALID_REGEX`,`Invalid regex: "${n.search}"`,{nodeId:t.nodeDefinition.nodeId})}}else a=i.value.split(n.search).join(n.replacement);return r.setOutput(`text`,a),{ok:!0,value:r.toOutput()}}},oH=class extends Z{nodeType=`text-length`;displayName=`Text Length`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Length`,order:0,type:`string`,required:!0}];configSchemaDefinition=ZV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t){let n=new Q(e,t.nodeDefinition.nodeId),r=n.requireInputString(`text`);return r.ok?(n.setOutput(`text`,String(r.value.length)),{ok:!0,value:n.toOutput()}):r}},sH=class extends Z{nodeType=`text-upper`;displayName=`Text Uppercase`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=ZV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t){let n=new Q(e,t.nodeDefinition.nodeId),r=n.requireInputString(`text`);return r.ok?(n.setOutput(`text`,r.value.toUpperCase()),{ok:!0,value:n.toOutput()}):r}},cH=class extends Z{nodeType=`text-lower`;displayName=`Text Lowercase`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=ZV;async estimateCostWithConfig(){return $}async executeWithConfig(e,t){let n=new Q(e,t.nodeDefinition.nodeId),r=n.requireInputString(`text`);return r.ok?(n.setOutput(`text`,r.value.toLowerCase()),{ok:!0,value:n.toOutput()}):r}};const lH=v.z.object({mode:v.z.enum([`both`,`start`,`end`]).default(`both`)});var uH=class extends Z{nodeType=`text-trim`;displayName=`Text Trim`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=lH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=n.mode===`start`?i.value.trimStart():n.mode===`end`?i.value.trimEnd():i.value.trim();return r.setOutput(`text`,a),{ok:!0,value:r.toOutput()}}};const dH=v.z.object({path:v.z.string().default(``),fallback:v.z.string().default(``)});var fH=class extends Z{nodeType=`json-extract`;displayName=`JSON Extract`;category=`Utility`;defaultInputPort=`json`;defaultOutputPort=`text`;inputs=[{key:`json`,label:`JSON`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Value`,order:0,type:`string`,required:!0}];configSchemaDefinition=dH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`json`);if(!i.ok)return i;let a;try{a=JSON.parse(i.value)}catch{return{ok:!1,error:X(`DAG_VALIDATION_JSON_EXTRACT_INVALID_JSON`,`Input is not valid JSON`,{nodeId:t.nodeDefinition.nodeId})}}let o=n.path?n.path.split(`.`):[],s=a;for(let e of o){if(typeof s!=`object`||!s){s=void 0;break}s=s[e]}let c=s===void 0?n.fallback:String(s);return r.setOutput(`text`,c),{ok:!0,value:r.toOutput()}}};const pH=v.z.object({operator:v.z.enum([`non-empty`,`equals`,`contains`,`starts-with`,`ends-with`]).default(`non-empty`),operand:v.z.string().default(``)});var mH=class extends Z{nodeType=`conditional-text`;displayName=`Conditional Text`;category=`Utility`;defaultInputPort=`condition`;defaultOutputPort=`text`;inputs=[{key:`condition`,label:`Condition`,order:0,type:`string`,required:!0},{key:`text_true`,label:`If True`,order:1,type:`string`,required:!0},{key:`text_false`,label:`If False`,order:2,type:`string`,required:!1}];outputs=[{key:`text`,label:`Result`,order:0,type:`string`,required:!0}];configSchemaDefinition=pH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`condition`);if(!i.ok)return i;let a=r.requireInputString(`text_true`);if(!a.ok)return a;let o=r.getInput(`text_false`),s=i.value,c=n.operand,l;switch(n.operator){case`non-empty`:l=s.trim().length>0;break;case`equals`:l=s===c;break;case`contains`:l=s.includes(c);break;case`starts-with`:l=s.startsWith(c);break;case`ends-with`:l=s.endsWith(c);break}let u=l?a.value:typeof o==`string`?o:``;return r.setOutput(`text`,u),{ok:!0,value:r.toOutput()}}};const hH=v.z.object({skipEmpty:v.z.boolean().default(!1)});var gH=class extends Z{nodeType=`text-count-lines`;displayName=`Text Count Lines`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Line Count`,order:0,type:`string`,required:!0}];configSchemaDefinition=hH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=i.value.split(`
|
|
394
|
+
`),o=n.skipEmpty?a.filter(e=>e.trim()!==``).length:a.length;return r.setOutput(`text`,String(o)),{ok:!0,value:r.toOutput()}}};const _H=v.z.object({times:v.z.number().int().min(0).default(2),separator:v.z.string().default(``)});var vH=class extends Z{nodeType=`text-repeat`;displayName=`Text Repeat`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Repeated Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=_H;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);if(!i.ok)return i;let a=Array.from({length:n.times},()=>i.value);return r.setOutput(`text`,a.join(n.separator)),{ok:!0,value:r.toOutput()}}};const yH=v.z.object({start:v.z.number().int().default(0),end:v.z.number().int().optional()});var bH=class extends Z{nodeType=`text-slice`;displayName=`Text Slice`;category=`Utility`;defaultInputPort=`text`;defaultOutputPort=`text`;inputs=[{key:`text`,label:`Text`,order:0,type:`string`,required:!0}];outputs=[{key:`text`,label:`Sliced Text`,order:0,type:`string`,required:!0}];configSchemaDefinition=yH;async estimateCostWithConfig(){return $}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(`text`);return i.ok?(r.setOutput(`text`,i.value.slice(n.start,n.end)),{ok:!0,value:r.toOutput()}):i}};function xH(e,t){let n=new CB;return{runOrchestrator:new OB(e.storage,e.queue,e.clock,n),runQuery:new kB(e.storage),runCancel:new AB(e.storage,e.clock),workerLoop:lV({storage:e.storage,queue:e.queue,deadLetterQueue:e.deadLetterQueue,lease:e.lease,executor:e.executor,clock:e.clock,runProgressEventReporter:n},{...t.worker,retryEnabled:t.worker.retryEnabled??!1}),runProgressEventBus:n}}function SH(){return[new wV,new EV,new OV,new jV,new NV,new FV,new LV,new BV,new XV,new QV,new $V,new tH,new rH,new aH,new oH,new sH,new cH,new uH,new fH,new mH,new gH,new vH,new bH]}const CH=new Set([`success`,`failed`,`cancelled`]);function wH(e){return CH.has(e)}function TH(e){if(!e)return{};let t;try{t=JSON.parse(e)}catch{return{}}return typeof t==`object`&&t&&!Array.isArray(t)?t:{}}function EH(e){let t={};for(let n of e){let e=TH(n.outputSnapshot);for(let[r,i]of Object.entries(e))t[`${n.nodeId}.${r}`]=i}return t}function DH(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(!n||n.status!==`success`)continue;let r=TH(n.outputSnapshot);for(let e of Object.values(r))if(typeof e==`string`)return e}}function OH(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n&&n.status===`failed`&&n.errorMessage)return`${n.nodeId}: ${n.errorMessage}`}}const kH=1e4;function AH(e){return new Promise(t=>{setTimeout(t,e)})}var jH=class{options;providerId=`local`;displayName=`Local (in-process)`;constructor(e={}){this.options=e}async listNodes(){return this.buildNodeRegistry().map(NH)}async execute(e,t,n){let r=this.buildNodeRegistry(),i=bV(e,void 0),a=Date.now(),o=!1,s=()=>{o=!0};n?.signal?.addEventListener(`abort`,s);try{let e=await MH(i,r,t,n?.onProgress,()=>o),s=Date.now()-a,c=EH(e.taskRuns),l=e.dagRun.status===`success`,u=l?void 0:OH(e.taskRuns);return n?.onProgress?.({type:`dag_complete`,nodeId:``,durationMs:s,finalOutput:l?DH(e.taskRuns):void 0,error:l?void 0:u??`DAG run did not succeed`}),{ok:l,outputs:c,durationMs:s,...l?{}:{error:u??`DAG run did not succeed`}}}catch(e){let t=Date.now()-a,r=e instanceof Error?e.message:String(e);return n?.onProgress?.({type:`dag_complete`,nodeId:``,durationMs:t,error:r}),{ok:!1,outputs:{},durationMs:t,error:r}}finally{n?.signal?.removeEventListener(`abort`,s)}}buildNodeRegistry(){let e=this.options.nodeRegistry??SH(),t=this.options.instantNodes??[],n=this.options.extraNodes??[],r=new Set([...t.map(e=>e.nodeType),...n.map(e=>e.nodeType)]);return[...e.filter(e=>!r.has(e.nodeType)),...n,...t]}};async function MH(e,t,n,r,i){let a=bB(t);if(!a.ok)throw Error(`Node definition assembly failed: ${a.error.code}`);let o=a.value,s=new Yz(new fB(o.manifests),new dB(new uB(o.handlersByType))),c=new Qz,l=xH({storage:c,queue:new $z,deadLetterQueue:new $z,lease:new eB,executor:s,clock:new tB},{worker:{workerId:`local-dag-runtime-provider`,leaseDurationMs:6e4,visibilityTimeoutMs:6e4,maxAttempts:1,defaultTimeoutMs:3e5,retryEnabled:!1}}),u=new Map(e.nodes.map(e=>[e.nodeId,e.nodeType])),d=new Map,f=l.runProgressEventBus.subscribe(e=>{if(r){if(e.eventType===`task.started`)d.set(e.nodeId,Date.now()),r({type:`node_start`,nodeId:e.nodeId,nodeType:u.get(e.nodeId)});else if(e.eventType===`task.completed`){let t=d.get(e.nodeId);r({type:`node_complete`,nodeId:e.nodeId,nodeType:u.get(e.nodeId),durationMs:t===void 0?void 0:Date.now()-t})}else if(e.eventType===`task.failed`){let t=d.get(e.nodeId);r({type:`node_error`,nodeId:e.nodeId,nodeType:u.get(e.nodeId),durationMs:t===void 0?void 0:Date.now()-t,error:e.error.message??e.error.code})}}});try{let t={...e,status:`published`};await c.saveDefinition(t);let r=await l.runOrchestrator.startRun({dagId:e.dagId,version:e.version,trigger:`manual`,input:n});if(!r.ok)throw Error(`startRun failed: ${r.error.code}`);let{dagRunId:a}=r.value;for(let e=0;e<kH;e++){i()&&await l.runCancel.cancelRun(a);let e=await l.workerLoop.processOnce();if(!e.ok)throw Error(`Worker step failed: ${e.error.code}`);let t=await l.runQuery.getRun(a);if(!t.ok)throw Error(`Run query failed: ${t.error.code}`);let{dagRun:n,taskRuns:r}=t.value;if(wH(n.status))return{dagRun:n,taskRuns:r};e.value.processed||await AH(10)}throw Error(`Run ${a} did not reach terminal state after ${kH} iterations`)}finally{f()}}function NH(e){let t={},n={};for(let r of e.inputs??[]){let e=FH(r.type),i={},a=r;a.default!==void 0&&(i.default=a.default);let o=Object.keys(i).length>0?[e,i]:[e];r.required===!1?n[r.key]=o:t[r.key]=o}let r=e.outputs??[],i={nodeType:e.nodeType,input:{required:t},output:r.map(e=>FH(e.type)),output_name:r.map(e=>e.key),category:e.category??`robota`,source:`local`};return Object.keys(n).length>0&&(i.input.optional=n),i}const PH={string:`STRING`,object:`JSON`,binary:`IMAGE`,number:`FLOAT`,boolean:`BOOLEAN`,integer:`INT`};function FH(e){return PH[e]??e.toUpperCase()}function IH(e){let t=e.meta;if(typeof t!=`object`||!t||Array.isArray(t))return{};let n=t;return{description:typeof n.description==`string`?n.description:void 0,displayName:typeof n.displayName==`string`?n.displayName:void 0,tags:Array.isArray(n.tags)?n.tags.filter(e=>typeof e==`string`):void 0}}function LH(e){return Array.isArray(e.nodes)||typeof e.dagId==`string`}async function RH(e,t=Xz){let n;try{n=await(0,g.readdir)(e)}catch{return[]}let r=t.workflowExt,i=[];for(let t of n){if(t.endsWith(`.node.json`)||!t.endsWith(r))continue;let n=(0,p.join)(e,t),a;try{let e=JSON.parse(await(0,g.readFile)(n,`utf8`));if(typeof e!=`object`||!e||Array.isArray(e))continue;a=e}catch{continue}LH(a)&&i.push({id:t.slice(0,-r.length),filePath:n,definition:a,meta:IH(a)})}return i.sort((e,t)=>e.id.localeCompare(t.id))}var zH=class extends Hw{name=`google`;constructor(e){super(e)}};const BH=[`anthropic`,`openai`,`gemini`,`deepseek`,`qwen`];function VH(e){return typeof e==`string`&&BH.includes(e)}const HH=v.z.object({model:v.z.string().optional()}),UH={anthropic:{model:`claude-sonnet-4-6`,envVar:`ANTHROPIC_API_KEY`},openai:{model:`gpt-4o-mini`,envVar:`OPENAI_API_KEY`},gemini:{model:`gemini-2.0-flash`,envVar:`GEMINI_API_KEY`},deepseek:{model:`deepseek-chat`,envVar:`DEEPSEEK_API_KEY`},qwen:{model:`qwen-turbo`,envVar:`DASHSCOPE_API_KEY`}};function WH(e,t){return Object.entries(t).reduce((e,[t,n])=>e.replaceAll(`{{${t}}}`,n),e)}function GH(e,t){let n=UH[e],r=process.env[n.envVar];if(typeof r!=`string`||r.trim().length===0){let t=Object.entries(UH).filter(([t])=>t!==e&&process.env[UH[t].envVar]).map(([e])=>e);return{error:X(`DAG_VALIDATION_INSTANT_NODE_API_KEY_REQUIRED`,`${n.envVar} is required for instant node provider "${e}" but is not set`,{provider:e,envVar:n.envVar},{action:`add_api_key`,suggestion:`Set ${n.envVar} in your environment or .env file`,options:t.length>0?t.map(e=>`Use provider "${e}" instead (API key already set)`):[`Set ${n.envVar}=<your-api-key> in your environment`]})}}let i=`InstantNode_${e}`,a;switch(e){case`anthropic`:a=new Ci({name:i,aiProviders:[new yx({apiKey:r.trim()})],defaultModel:{provider:`anthropic`,model:t}});break;case`openai`:a=new Ci({name:i,aiProviders:[new fC({apiKey:r.trim()})],defaultModel:{provider:`openai`,model:t}});break;case`gemini`:a=new Ci({name:i,aiProviders:[new zH({apiKey:r.trim()})],defaultModel:{provider:`google`,model:t}});break;case`deepseek`:a=new Ci({name:i,aiProviders:[new PC({apiKey:r.trim()})],defaultModel:{provider:`deepseek`,model:t}});break;case`qwen`:a=new Ci({name:i,aiProviders:[new oD({apiKey:r.trim()})],defaultModel:{provider:`qwen`,model:t}});break}return{agent:a}}var KH=class extends Z{nodeType;displayName;category=`Instant`;inputs;outputs;defaultInputPort;defaultOutputPort;configSchemaDefinition=HH;spec;constructor(e){super(),this.spec=e,this.nodeType=e.nodeType,this.displayName=e.displayName,this.inputs=e.inputPorts.map((e,t)=>({key:e.key,label:e.key,order:t,type:`string`,required:!0,description:e.description})),this.outputs=[{key:e.outputPort.key,label:e.outputPort.key,order:0,type:`string`,required:!0,description:e.outputPort.description}],this.defaultInputPort=e.inputPorts[0]?.key,this.defaultOutputPort=e.outputPort.key}toPersisted(){return{kind:`prompt`,nodeType:this.spec.nodeType,displayName:this.spec.displayName,systemPromptTemplate:this.spec.systemPromptTemplate,inputPorts:this.spec.inputPorts,outputPort:this.spec.outputPort,...this.spec.provider===void 0?{}:{provider:this.spec.provider},...this.spec.model===void 0?{}:{model:this.spec.model}}}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i={};for(let e of this.spec.inputPorts){let t=r.requireInputString(e.key);if(!t.ok)return t;i[e.key]=t.value}let a=this.spec.provider??`anthropic`,o=UH[a],s=n.model??this.spec.model??o.model,c=GH(a,s);if(`error`in c)return{ok:!1,error:c.error};let l=WH(this.spec.systemPromptTemplate,i);try{let e=await c.agent.run(l);r.setOutput(this.spec.outputPort.key,e);let t=typeof e==`string`?e.split(` `).length:0;return r.setOutput(`_agentSummary`,`Generated ${t} words. Model: ${s}.`),{ok:!0,value:r.toOutput()}}catch(e){return{ok:!1,error:Uz(`DAG_TASK_EXECUTION_LLM_GENERATION_FAILED`,e instanceof Error?e.message:`LLM generation failed`,!0,{provider:a,model:s,nodeType:this.nodeType})}}}};function qH(e){return new KH(e)}var JH=class extends Z{nodeType;displayName;category=`Instant`;inputs;outputs;defaultInputPort;defaultOutputPort;configSchemaDefinition=HH;spec;constructor(e){if(super(),(e.maxDepth??0)>=3)throw Error(`Composite node nesting limit (3) exceeded for "${e.nodeType}"`);this.spec=e,this.nodeType=e.nodeType,this.displayName=e.displayName,this.inputs=[{key:e.exposedInputPort.key,label:e.exposedInputPort.key,order:0,type:`string`,required:!0,description:e.exposedInputPort.description}],this.outputs=e.exposedOutputPorts.map((e,t)=>({key:e.key,label:e.key,order:t,type:`string`,required:!0,description:e.description})),this.defaultInputPort=e.exposedInputPort.key,this.defaultOutputPort=e.exposedOutputPorts[0]?.key??`output`}toPersisted(){return{kind:`composite`,nodeType:this.spec.nodeType,displayName:this.spec.displayName,innerDag:this.spec.innerDag,exposedInputPort:this.spec.exposedInputPort,exposedOutputPorts:this.spec.exposedOutputPorts,...this.spec.maxDepth===void 0?{}:{maxDepth:this.spec.maxDepth}}}async estimateCostWithConfig(){return{ok:!0,value:{estimatedCredits:0}}}async executeWithConfig(e,t,n){let r=new Q(e,t.nodeDefinition.nodeId),i=r.requireInputString(this.spec.exposedInputPort.key);if(!i.ok)return i;let a={[this.spec.exposedInputPort.mapsTo.nodeId]:{[this.spec.exposedInputPort.mapsTo.portKey]:i.value}};try{let e=await this.spec.runner.run(this.spec.innerDag,a);if(!e.ok)return{ok:!1,error:Uz(`DAG_TASK_EXECUTION_COMPOSITE_FAILED`,e.error??`Composite sub-DAG execution failed`,!0,{nodeType:this.nodeType})};for(let t of this.spec.exposedOutputPorts){let n=e.outputs[t.mapsTo.nodeId]?.[t.mapsTo.portKey];n!==void 0&&r.setOutput(t.key,n)}return r.setOutput(`_agentSummary`,`Composite sub-DAG completed: ${this.spec.innerDag.nodes.length} nodes.`),{ok:!0,value:r.toOutput()}}catch(e){return{ok:!1,error:Uz(`DAG_TASK_EXECUTION_COMPOSITE_FAILED`,e instanceof Error?e.message:`Composite sub-DAG execution failed`,!0,{nodeType:this.nodeType})}}}};function YH(e){return new JH(e)}function XH(e){return typeof e==`object`&&!!e&&typeof e.toPersisted==`function`}function ZH(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function QH(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){let e=ZH(n);if(!e||typeof e.key!=`string`)return null;t.push(typeof e.description==`string`?{key:e.key,description:e.description}:{key:e.key})}return t.length>0?t:null}function $H(e){let t=ZH(e);if(!t||typeof t.nodeType!=`string`)return null;let n=t.nodeType,r=typeof t.displayName==`string`?t.displayName:n;if(t.kind===`composite`){let e=ZH(t.innerDag),i=ZH(t.exposedInputPort);return!e||!i||typeof i.key!=`string`||!Array.isArray(t.exposedOutputPorts)||t.exposedOutputPorts.length===0?null:{kind:`composite`,nodeType:n,displayName:r,innerDag:e,exposedInputPort:i,exposedOutputPorts:t.exposedOutputPorts,...typeof t.maxDepth==`number`?{maxDepth:t.maxDepth}:{}}}if(typeof t.systemPromptTemplate!=`string`)return null;let i=QH(t.inputPorts),a=ZH(t.outputPort);return!i||!a||typeof a.key!=`string`?null:{kind:`prompt`,nodeType:n,displayName:r,systemPromptTemplate:t.systemPromptTemplate,inputPorts:i,outputPort:typeof a.description==`string`?{key:a.key,description:a.description}:{key:a.key},...VH(t.provider)?{provider:t.provider}:{},...typeof t.model==`string`?{model:t.model}:{}}}function eU(e,t={}){if(e.kind===`composite`){if(!t.compositeRunner)throw Error(`rehydrateInstantNode: composite node "${e.nodeType}" requires a compositeRunner (its runner is not serialized).`);return YH({nodeType:e.nodeType,displayName:e.displayName,innerDag:e.innerDag,exposedInputPort:e.exposedInputPort,exposedOutputPorts:e.exposedOutputPorts,runner:t.compositeRunner,...e.maxDepth===void 0?{}:{maxDepth:e.maxDepth}})}return qH({nodeType:e.nodeType,displayName:e.displayName,systemPromptTemplate:e.systemPromptTemplate,inputPorts:e.inputPorts,outputPort:e.outputPort,...e.provider===void 0?{}:{provider:e.provider},...e.model===void 0?{}:{model:e.model}})}async function tU(e,t=Xz){let n=t.root,r=t.workflowExt,i=await RH((0,p.resolve)(e,n),t);if(i.length===0)return{success:!0,message:`No workflow files (*${r}) in ${n}.`};let a=i.map(e=>{let t=e.definition,n=t.nodes?.length??0,i=t.edges?.length??t.links?.length??0;return` ${e.id}${r} — ${n} node(s), ${i} link(s)`});return{success:!0,message:`Workflows in ${n} (${i.length}):\n${a.join(`
|
|
395
|
+
`)}`}}async function nU(){let e=await new jH().listNodes(),t=[...e].sort((e,t)=>e.nodeType.localeCompare(t.nodeType)).map(e=>` ${e.nodeType}${e.description?` — ${e.description}`:``}`);return{success:!0,message:`Available workflow nodes (${e.length}):\n${t.join(`
|
|
396
|
+
`)}`}}async function rU(e,t=Xz){let n=(0,p.resolve)(e,(0,p.join)(t.root,`nodes`)),r;try{r=await(0,g.readdir)(n)}catch{return[]}let i=[];for(let e of r.filter(e=>e.endsWith(`.node.json`))){let t;try{t=$H(JSON.parse(await(0,g.readFile)((0,p.join)(n,e),`utf-8`)))}catch{continue}if(t){if(t.kind===`composite`){process.stderr.write(`[instant-node-loader] skipping composite node "${t.nodeType}" — composite reload is not supported in this workspace\n`);continue}i.push(eU(t))}}return i}async function iU(e){let t=await(0,g.readFile)(e,`utf-8`),n=JSON.parse(t);return SV(n)?yV(n).workflowFile:n}async function aU(e,t,n=Xz){if(!e)return{success:!1,message:`Usage: /workflows run <file.json>`};let r=await iU((0,p.resolve)(t,e)).catch(t=>{let n=t instanceof Error?t.message:String(t);return Error(`Failed to read DAG file "${e}": ${n}`)});if(r instanceof Error)return{success:!1,message:r.message};let i=await rU(t,n),a=await new jH({workspace:n,projectDir:t,...i.length>0?{instantNodes:i}:{}}).execute(r,{});return a.ok?{success:!0,message:`Workflow completed in ${a.durationMs}ms.\nOutputs: ${JSON.stringify(a.outputs,null,2)}`}:{success:!1,message:`Workflow failed (${a.durationMs}ms): ${a.error??`unknown error`}`}}async function oU(e,t){if(!e)return{success:!1,message:`Usage: /workflows validate <file.dag.json>`};let n=await(0,g.readFile)((0,p.resolve)(t,e),`utf-8`).then(e=>JSON.parse(e)).catch(t=>{let n=t instanceof Error?t.message:String(t);return Error(`Failed to read DAG file "${e}": ${n}`)});if(n instanceof Error)return{success:!1,message:n.message};let r;if(xV(n))r=bV(n);else if(SV(n))r=n;else return{success:!1,message:`"${e}" is not a recognized DAG workflow file (expected a .dag.json node-graph or a DAG definition).`};let i=await new jH().listNodes(),a=new Set(i.map(e=>e.nodeType)),o=new Set(r.nodes.map(e=>e.nodeId)),s=[];r.nodes.length===0&&s.push(`workflow has no nodes`);for(let e of r.nodes)a.has(e.nodeType)||s.push(`node "${e.nodeId}": unknown node type "${e.nodeType}"`);for(let e of r.edges)o.has(e.from)||s.push(`edge references unknown source node "${e.from}"`),o.has(e.to)||s.push(`edge references unknown target node "${e.to}"`);if(s.length>0){let t=s.length===1?``:`s`;return{success:!1,message:`Invalid workflow "${e}" (${s.length} issue${t}):\n${s.map(e=>` - ${e}`).join(`
|
|
397
|
+
`)}`}}return{success:!0,message:`Valid workflow "${e}": ${r.nodes.length} node(s), ${r.edges.length} edge(s).`}}function sU(e){let t=bB(e);return t.ok?{ok:!0,manifests:t.value.manifests}:{ok:!1,error:`failed to build node registry: ${t.error.message}`}}function cU(e){return e.length===0?`—`:e.map(e=>e.key).join(`, `)}function lU(e){return[...e].sort((e,t)=>e.nodeType.localeCompare(t.nodeType)).map(e=>{let t=e.defaultInputPort??cU(e.inputs),n=e.defaultOutputPort??cU(e.outputs);return`- ${e.nodeType} (in: ${t}; out: ${n})`}).join(`
|
|
398
|
+
`)}function uU(e){return[`You are a workflow author. Given a natural-language request, design a linear DAG workflow and`,`return ONLY a JSON object (no prose, no code fences) matching this shape:`,`{`,` "name": "kebab-or-snake identifier (letters, digits, - and _ only)",`,` "description": "one short line",`,` "pipeline": [ { "nodeType": "<type>", "config": { ... optional } }, ... ],`,` "newNodes": [ { "nodeType", "displayName", "systemPromptTemplate", "inputPorts":[{"key"}], "outputPort":{"key"} } ],`,` "sampleInput": { "text": "an example input to run with" }`,`}`,``,`Rules:`,`- The pipeline is executed left-to-right; adjacent nodes are auto-wired by their default ports.`,`- Start from an "input" node and end with a "text-output" node unless the request says otherwise.`,`- Prefer the existing nodes below. Only define a "newNodes" prompt-backed node when NO existing`,` node fits; reference it by its nodeType in the pipeline. Omit "newNodes" entirely if unused.`,`- "systemPromptTemplate" may reference an input port with {{key}}.`,``,`Available nodes:`,e].join(`
|
|
399
|
+
`)}async function dU(e,t,n,r){let i;try{i=await e.chat([H(uU(n)),rr(t)],{maxTokens:2048,responseFormat:{type:`json_object`},...r?{model:r}:{}})}catch(e){return{ok:!1,error:`provider call failed: ${e instanceof Error?e.message:String(e)}`}}let a=typeof i.content==`string`?i.content.trim():``;return a===``?{ok:!1,error:`provider returned an empty response`}:{ok:!0,raw:a}}const fU=/^[a-zA-Z0-9_-]+$/;function pU(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function mU(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){let e=pU(n);if(!e||typeof e.key!=`string`)return null;t.push(typeof e.description==`string`?{key:e.key,description:e.description}:{key:e.key})}return t}function hU(e){let t=pU(e);if(!t)return{error:`newNodes entry is not an object`};if(typeof t.nodeType!=`string`||!fU.test(t.nodeType))return{error:`newNodes entry has an invalid nodeType: ${JSON.stringify(t.nodeType)}`};if(typeof t.systemPromptTemplate!=`string`||t.systemPromptTemplate.trim()===``)return{error:`newNodes "${t.nodeType}" is missing systemPromptTemplate`};let n=mU(t.inputPorts);if(!n||n.length===0)return{error:`newNodes "${t.nodeType}" has no valid inputPorts`};let r=pU(t.outputPort);return!r||typeof r.key!=`string`?{error:`newNodes "${t.nodeType}" has no valid outputPort`}:{nodeType:t.nodeType,...typeof t.displayName==`string`?{displayName:t.displayName}:{},systemPromptTemplate:t.systemPromptTemplate,inputPorts:n,outputPort:typeof r.description==`string`?{key:r.key,description:r.description}:{key:r.key},...typeof t.provider==`string`?{provider:t.provider}:{},...typeof t.model==`string`?{model:t.model}:{}}}function gU(e){let t=pU(e);if(!t)return;let n={};for(let[e,r]of Object.entries(t))typeof r==`string`&&(n[e]=r);return Object.keys(n).length>0?n:void 0}function _U(e){let t=e.trim();return t.startsWith("```")?t.replace(/^```[a-zA-Z0-9]*\s*\n?/,``).replace(/\n?```\s*$/,``).trim():t}function vU(e){let t;try{t=JSON.parse(_U(e))}catch(e){return{ok:!1,error:`provider did not return valid JSON: ${e instanceof Error?e.message:String(e)}`}}let n=pU(t);if(!n)return{ok:!1,error:`authoring spec is not a JSON object`};if(typeof n.name!=`string`||!fU.test(n.name))return{ok:!1,error:`authoring spec "name" must match ${fU.source}; got ${JSON.stringify(n.name)}`};let r=n.name;if(!Array.isArray(n.pipeline)||n.pipeline.length===0)return{ok:!1,error:`authoring spec "pipeline" must be a non-empty array`};let i=[];for(let e of n.pipeline){let t=pU(e);if(!t||typeof t.nodeType!=`string`)return{ok:!1,error:`each pipeline stage must be an object with a string nodeType`};let n=pU(t.config);i.push(n?{nodeType:t.nodeType,config:n}:{nodeType:t.nodeType})}let a;if(n.newNodes!==void 0){if(!Array.isArray(n.newNodes))return{ok:!1,error:`authoring spec "newNodes" must be an array when present`};a=[];for(let e of n.newNodes){let t=hU(e);if(`error`in t)return{ok:!1,error:t.error};a.push(t)}}let o=gU(n.sampleInput);return{ok:!0,spec:{name:r,...typeof n.description==`string`?{description:n.description}:{},pipeline:i,...a&&a.length>0?{newNodes:a}:{},...o?{sampleInput:o}:{}}}}function yU(e,t){let n=e.pipeline.map(e=>e.config?{nodeType:e.nodeType,config:e.config}:{nodeType:e.nodeType}),r=mV({dagId:e.name,pipeline:n},t);return r.ok?{ok:!0,definition:r.definition}:{ok:!1,error:r.error.message}}async function bU(e,t,n,r,i){let a=new jH({workspace:n,projectDir:t,...r.length>0?{instantNodes:r}:{}}),{workflowFile:o}=yV(e),s=await a.execute(o,i);return{ok:s.ok,outputs:s.outputs,durationMs:s.durationMs,...s.ok?{}:{error:s.error??`unknown error`}}}async function xU(e,t,n,r=Xz){let i=(0,p.resolve)(e,r.root);await(0,g.mkdir)(i,{recursive:!0});let a=(0,p.join)(i,`${t}${r.workflowExt}`);return await(0,g.writeFile)(a,`${JSON.stringify(n,null,2)}\n`,`utf-8`),a}async function SU(e,t,n,r=Xz){if(!XH(t))return null;let i={...t.toPersisted(),createdAt:n};if(i.kind===`composite`)return null;let a=(0,p.resolve)(e,(0,p.join)(r.root,`nodes`));await(0,g.mkdir)(a,{recursive:!0});let o=(0,p.join)(a,`${t.nodeType}.node.json`);return await(0,g.writeFile)(o,`${JSON.stringify(i,null,2)}\n`,`utf-8`),o}function CU(e){let t=[],n=``,r=!1,i=null;for(let a of e)i===null?a===`"`||a===`'`?(i=a,r=!0):/\s/.test(a)?r&&=(t.push(n),n=``,!1):(n+=a,r=!0):a===i?i=null:n+=a;return r&&t.push(n),t}function wU(e){let t=CU(e.trim()),n=[],r={},i,a=0;for(;a<t.length&&!t[a].startsWith(`--`);)n.push(t[a]),a+=1;for(;a<t.length;){let e=t[a];if(e===`--input`){let e=t[a+1];if(e===void 0||e.startsWith(`--`))return{ok:!1,error:`--input requires a key=value argument.`};let n=e.indexOf(`=`);if(n<=0)return{ok:!1,error:`--input must be key=value, got "${e}".`};r[e.slice(0,n)]=e.slice(n+1),a+=2}else if(e===`--name`){let e=t[a+1];if(e===void 0||e.startsWith(`--`))return{ok:!1,error:`--name requires a value.`};i=e,a+=2}else return{ok:!1,error:`create received unexpected flag: ${e}`}}let o=n.join(` `).trim();return o===``?{ok:!1,error:`A natural-language description is required.`}:{ok:!0,value:{description:o,...i?{nameOverride:i}:{},inputs:r}}}function TU(e,t){let n=VH(e.provider)?e.provider:t;return qH({nodeType:e.nodeType,displayName:e.displayName??e.nodeType,systemPromptTemplate:e.systemPromptTemplate,inputPorts:e.inputPorts,outputPort:e.outputPort,...n?{provider:n}:{},...e.model?{model:e.model}:{}})}function EU(e){return JSON.stringify(e,null,2)}function DU(e,t){if(Object.keys(t).length===0)return e;let n=!1,r=e.nodes.map(e=>n||e.nodeType!==`input`?e:(n=!0,{...e,config:{...e.config,...t}}));return{...e,nodes:r}}async function OU(e,t,n={}){let r=n.workspace??Xz,i=n.now??(()=>new Date().toISOString()),a=wU(e);if(!a.ok)return{success:!1,message:`${a.error}\nUsage: /workflows create "<description>" [--input key=value] [--name <name>]`};let{description:o,nameOverride:s,inputs:c}=a.value,l=n.providerDefinitions??[],u,d=n.model,f;try{if(n.resolveProvider)u=n.resolveProvider(t);else{u=Ig(t,void 0,{providerDefinitions:l});let e=Fg(t,{providerDefinitions:l});d??=e.model,f=VH(e.name)?e.name:void 0}}catch(e){return{success:!1,message:`No active LLM provider is configured. Configure one (e.g. \`/provider\` or set the provider API key) and retry.\nDetail: ${e instanceof Mg||e instanceof Error?e.message:String(e)}`}}let p=await rU(t,r),m=[...SH(),...p],h=sU(m);if(!h.ok)return{success:!1,message:`Failed to build node catalog: ${h.error}`};let g=await dU(u,o,lU(h.manifests),d);if(!g.ok)return{success:!1,message:`Authoring failed: ${g.error}`};let _=vU(g.raw);if(!_.ok)return{success:!1,message:`Authoring produced an invalid spec: ${_.error}`};let v=_.spec,y=s??v.name,b=[],x=new Set(m.map(e=>e.nodeType));for(let e of v.newNodes??[])x.has(e.nodeType)||(b.push(TU(e,f)),x.add(e.nodeType));let S=sU([...m,...b]);if(!S.ok)return{success:!1,message:`Failed to build node catalog: ${S.error}`};let C=S.manifests,w=yU({...v,name:y},C);if(!w.ok)return{success:!1,message:`Could not assemble workflow: ${w.error}`};let T=Object.keys(c).length>0?c:v.sampleInput??{},E=DU(w.definition,T),D=i(),O=[];for(let e of b){let n=await SU(t,e,D,r);n&&O.push(n)}let k=await xU(t,y,E,r),A=await bU(E,t,r,[...p,...b],T),j=O.length>0?`\nNew nodes: ${O.join(`, `)}`:``;return A.ok?{success:!0,message:`Created and ran "${y}".\nSaved: ${k}${j}\nCompleted in ${A.durationMs}ms.\nOutputs: ${EU(A.outputs)}\nRe-run: /workflows run ${k}`}:{success:!1,message:`Saved ${k}${j}\nBut the run failed (${A.durationMs}ms): ${A.error}\nInspect or edit the saved artifact and re-run with: /workflows run ${k}`}}const kU=[{name:`create`,description:`Author a workflow from a natural-language description and run it immediately`,source:`workflows`,argumentHint:`"<description>" [--input key=value] [--name <name>]`,modelInvocable:!0},{name:`list`,description:`List available workflow nodes`,source:`workflows`,modelInvocable:!1},{name:`catalog`,description:`List workflow files in the local .workflows catalog`,source:`workflows`,modelInvocable:!1},{name:`validate`,description:`Validate a workflow file against the node catalog`,source:`workflows`,argumentHint:`<file.json>`,modelInvocable:!1},{name:`run`,description:`Run a workflow file`,source:`workflows`,argumentHint:`<file.json>`,modelInvocable:!1}],AU=[`Usage: /workflows <create|list|catalog|validate|run>`,` create "<desc>" Author a workflow from natural language and run it`,` list List available workflow nodes`,` catalog List workflow files in .workflows`,` validate <file> Validate a workflow file`,` run <file> Run a workflow file`].join(`
|
|
400
|
+
`);function jU(e){let t=e.trim();if(t===``)return{sub:``,rest:``};let n=t.indexOf(` `);return n===-1?{sub:t,rest:``}:{sub:t.slice(0,n),rest:t.slice(n+1).trim()}}async function MU(e,t,n,r){let{sub:i,rest:a}=jU(t),o=e.getCwd();switch(i){case``:return{success:!0,message:AU};case`create`:return OU(a,o,{workspace:n,providerDefinitions:r});case`list`:return nU();case`catalog`:return tU(o,n);case`validate`:return oU(a,o);case`run`:return aU(a,o,n);default:return{success:!1,message:`Unknown subcommand "${i}".\n${AU}`}}}function NU(){return{name:`workflows`,displayName:`Workflows`,description:`Author (from natural language), list, validate, and run DAG workflows on the in-process runtime`,source:`workflows`,argumentHint:`<create|list|catalog|validate|run> [args]`,subcommands:kU,modelInvocable:!0}}function PU(e,t){let n=NU();return{name:n.name,displayName:n.displayName,description:n.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!0,argumentHint:n.argumentHint,subcommands:n.subcommands,lifecycle:`inline`,execute:(n,r)=>MU(n,r,e,t)}}var FU=class{name=`workflows`;getCommands(){return[NU()]}};function IU(e={}){let t=e.workspace??Xz,n=e.providerDefinitions??[];return{name:`agent-command-workflows`,commandSources:[new FU],systemCommands:[PU(t,n)]}}function LU(e){return IU({providerDefinitions:e})}function RU(e,t,n,r,i={}){let a={settings:{read:()=>Hp(Bp()),write:e=>Up(Bp(),e)},plugin:kN(e)},o=n.providerDefinitions??xD(),s={readMergedSettings:()=>Ng(e),readTargetSettings:()=>Hp(wg(e)),writeTargetSettings:t=>Up(wg(e),t)},c=LU(o);return{commandHostAdapters:a,providerDefinitions:o,commandModules:[...SN({cwd:e,providerDefinitions:o,providerSettingsAdapter:s,...i.enabledCommandModules===void 0?{}:{enabledCommandModules:i.enabledCommandModules},...i.disabledCommandModules===void 0?{}:{disabledCommandModules:i.disabledCommandModules}}),c,...n.commandModules??[]],startupUpdateNoticePromise:Jy(t)?qy({currentVersion:r}):void 0}}function zU(e,t){let n=(0,h.readFileSync)((0,p.resolve)(e,t),`utf8`).trim();if(n.length===0)throw Error(`Task file is empty: ${t}`);return`Task file (${t}):\n${n}`}function BU(e,t){let n=[];if(t.appendSystemPrompt&&n.push(t.appendSystemPrompt),t.taskFile)try{n.push(zU(e,t.taskFile))}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}return t.jsonSchema&&n.push(`Respond with valid JSON only, matching this JSON schema:\n${t.jsonSchema}`),n.length>0?n.join(`
|
|
111
401
|
|
|
112
|
-
`):void 0}async function
|
|
113
|
-
`),process.exit(1));let
|
|
402
|
+
`):void 0}async function VU(e,t,n,r,i,a,o,s,c={},l={}){let u=t.goal?.trim(),d=t.positional.join(` `).trim();if(!u&&!d&&!process.stdin.isTTY){let e=[];for await(let t of process.stdin)e.push(t);d=Buffer.concat(e).toString(`utf-8`).trim()}!u&&!d&&(process.stderr.write(`Print mode (-p) requires a prompt argument (or --goal <objective>).
|
|
403
|
+
`),process.exit(1));let f=BU(e,t),p=new bb({cwd:e,provider:n,outputFormat:t.outputFormat??`text`,permissionMode:t.permissionMode??l.permissionMode??`bypassPermissions`,maxTurns:t.maxTurns,sessionStore:t.noSessionPersistence?void 0:r,resumeSessionId:c.resumeSessionId,forkSession:c.forkSession,sessionName:t.sessionName,bare:t.bare||void 0,allowedTools:wb(t.allowedTools),deniedTools:wb(t.deniedTools),appendSystemPrompt:f,...l.persona===void 0?{}:{persona:l.persona},...l.agentName===void 0?{}:{agentName:l.agentName},...l.activePresetId===void 0?{}:{activePresetId:l.activePresetId},...l.enableParallelSubagents===void 0?{}:{enableParallelSubagents:l.enableParallelSubagents},...l.selfVerification===void 0?{}:{selfVerification:l.selfVerification},...t.systemPrompt?{systemPrompt:t.systemPrompt}:{},backgroundTaskRunners:i,subagentRunnerFactory:a,commandModules:o,commandHostAdapters:s});u?await p.runGoal(u,t.goalMaxIterations?{maxIterations:t.goalMaxIterations}:{}):await p.run(d),process.exit(p.getExitCode())}function HU(e){let t;try{t=(0,l.createRequire)(require("url").pathToFileURL(__filename).href)(`@robota-sdk/agent-provider-replay`)}catch{throw Error(`--session-log replay requires @robota-sdk/agent-provider-replay, a dev-only package that is not bundled in the published CLI.`)}return t.createReplayProviderFromLogFile(e)}function UU(){let e=new BL(Bp());return e.register(new cR),e}async function WU(e={}){if(process.argv[2]===`session`&&process.argv[3]===`analyze`){await iz(process.argv.slice(4),process.cwd());return}let t;try{t=Ab()}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let n=az();if(t.help){process.stdout.write(Cb());return}if(t.version){process.stdout.write(`robota ${n}\n`);return}if(t.checkUpdate){let e=await Wy({currentVersion:n,force:!0}),t=Xy(e);e.status===`error`&&(process.stderr.write(`${t}\n`),process.exit(1)),process.stdout.write(`${t}\n`);return}let r=process.cwd(),i=new ab;if(t.reset){process.exitCode=await sz(i,{yes:t.yes,isTTY:process.stdin.isTTY===!0});return}if(t.positional[0]===`diagnose`){let e=await vz({version:n,terminal:i,cwd:r});process.exitCode=+(e>0);return}if(t.positional[0]===`session`&&t.positional[1]===`analyze`){await iz(process.argv.slice(4),r);return}try{if(await PR(t,r,i))return}catch(e){i.writeError(e instanceof Error?e.message:String(e)),process.exit(1)}let a=Hp(Bp()),o=typeof a.preset==`string`?a.preset:void 0,s=sx();for(let{file:e,error:t}of s.errors)i.writeError(`Skipped external preset "${e}": ${t}`);let l;try{l=ux(t,o)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(1)}let u=cx(t,o),{commandHostAdapters:d,providerDefinitions:f,commandModules:p,startupUpdateNoticePromise:m}=RU(r,t,e,n,{...l.enabledCommandModules===void 0?{}:{enabledCommandModules:l.enabledCommandModules},...l.disabledCommandModules===void 0?{}:{disabledCommandModules:l.disabledCommandModules}});if(t.positional[0]===`init`){try{await wz(r,i,{yes:t.yes,onProviderSetup:async()=>{await IN(r,t,ob,i,f)}})}catch(e){i.writeError(e instanceof Error?e.message:String(e)),process.exit(1)}return}if(t.configure){await IN(r,t,ob,i,f);return}if(PN(r,t,i,f))return;try{await FN(r,t,ob,i,f)}catch(e){process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exit(e instanceof Mg&&t.printMode?3:1)}let h=t.provider?{providerOverride:t.provider,providerDefinitions:f}:{providerDefinitions:f},g=Fg(r,h),_=l.model??g.model;if(g.source===`env-default`&&g.sourceEnvVar!==void 0){let e=`Using ${g.name} (${_}) via ${g.sourceEnvVar} — run \`robota --configure\` to persist a profile.\n`;t.printMode?process.stderr.write(e):i.writeLine(e.trimEnd())}let v=t.sessionLog?HU(t.sessionLog):Ig(r,l.model,h),y=Xa(),b=sf(r),x=ER({workerPath:NR(),providerConfig:{...g,model:_},logsDir:b.logs}),S=Dv(r),C,w=!1;if(t.continueMode?C=Av(S,r):t.resumeId!==void 0&&(t.resumeId===``?w=!0:(C=jv(S,t.resumeId),C===void 0&&(process.stderr.write(`Session not found: ${t.resumeId}\n`),process.exit(1)))),t.printMode||t.goal){await VU(r,t,v,S,y,x,p,d,{resumeSessionId:C,forkSession:t.forkSession},{agentName:l.agentName??Ib,activePresetId:u,persona:l.persona,...l.permissionMode===void 0?{}:{permissionMode:l.permissionMode},...l.enableParallelSubagents===void 0?{}:{enableParallelSubagents:l.enableParallelSubagents},...l.selfVerification===void 0?{}:{selfVerification:l.selfVerification}});return}kz(i),zL(),Tz()&&(Oz(i),Ez()),await NL({onChannelReady:e=>LL(e),cwd:r,provider:v,providerOverride:t.provider,providerType:g.name,modelId:_,language:t.language,permissionMode:t.permissionMode??l.permissionMode,maxTurns:t.maxTurns,allowedTools:wb(t.allowedTools),deniedTools:wb(t.deniedTools),version:n,sessionStore:t.noSessionPersistence?void 0:S,resumeSessionId:C,showSessionPickerOnStart:w,forkSession:t.forkSession,sessionName:t.sessionName,backgroundTaskRunners:y,subagentRunnerFactory:x,commandModules:p,commandHostAdapters:d,shellExec:e=>(0,c.execSync)(e,{timeout:5e3,encoding:`utf-8`,stdio:`pipe`}).trimEnd(),startupUpdateNotice:m?m.then(e=>e?Yy(e):void 0):void 0,transportRegistry:UU(),cliAdapter:PL({providerDefinitions:f,reloadPluginCommandSource:MN}),reloadPluginCommandSource:MN,agentName:l.agentName??Ib,activePresetId:u,persona:l.persona,...l.enableParallelSubagents===void 0?{}:{enableParallelSubagents:l.enableParallelSubagents},...l.selfVerification===void 0?{}:{selfVerification:l.selfVerification}}),process.exit(0)}exports.startCli=WU;
|