@robota-sdk/agent-command 3.0.0-beta.70 → 3.0.0-beta.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,28 +1,28 @@
1
- import{BACKGROUND_COMMAND_DESCRIPTION as e,BACKGROUND_COMMAND_USAGE as t,BundlePluginInstaller as n,BundlePluginLoader as r,CLEAR_COMMAND_DESCRIPTION as i,COST_COMMAND_DESCRIPTION as a,DEFAULT_AUTO_COMPACT_THRESHOLD as o,DEFAULT_STATUS_LINE_COMMAND_SETTINGS as s,EXIT_COMMAND_DESCRIPTION as c,HELP_COMMAND_DESCRIPTION as l,LANGUAGE_COMMAND_ARGUMENT_HINT as ee,LANGUAGE_COMMAND_DESCRIPTION as te,MEMORY_COMMAND_ARGUMENT_HINT as u,MEMORY_COMMAND_DESCRIPTION as ne,MEMORY_COMMAND_USAGE as re,MarketplaceClient as ie,PERMISSIONS_COMMAND_DESCRIPTION as ae,PERMISSION_MODE_ARGUMENT_HINT as oe,PERMISSION_MODE_COMMAND_DESCRIPTION as se,PLUGIN_COMMAND_ARGUMENT_HINT as ce,PLUGIN_COMMAND_DESCRIPTION as le,PluginCommandSource as ue,PluginSettingsStore as de,RELOAD_PLUGINS_COMMAND_DESCRIPTION as fe,RENAME_COMMAND_DESCRIPTION as pe,RENAME_COMMAND_USAGE as me,RESUME_COMMAND_DESCRIPTION as he,REWIND_COMMAND_ARGUMENT_HINT as ge,REWIND_COMMAND_DESCRIPTION as _e,STATUSLINE_COMMAND_ARGUMENT_HINT as ve,STATUSLINE_COMMAND_DESCRIPTION as ye,SkillCommandSource as be,VALIDATE_SESSION_COMMAND_DESCRIPTION as xe,addCommandContextReference as Se,applyProviderConfiguration as Ce,buildBackgroundCommandSubcommands as we,buildLanguageCommandSubcommands as Te,buildMemoryCommandSubcommands as Ee,buildPermissionModeSubcommands as d,buildPluginCommandSubcommands as De,buildProviderSetupPatch as Oe,buildRewindCommandSubcommands as ke,buildStatusLineCommandSubcommands as Ae,cancelCommandBackgroundTask as je,checkSettingsDocument as Me,clearCommandContextReferences as Ne,clearConversationHistory as Pe,closeCommandBackgroundTask as Fe,compactCommandContext as Ie,createCommandMemoryStores as Le,createPluginRegistryReloadRequestedEffect as Re,createPluginTuiRequestedEffect as ze,createSessionExitRequestedEffect as Be,createSessionPickerRequestedEffect as Ve,createSessionRenamedEffect as He,deleteProviderProfile as Ue,deleteUserLocalMemoryItem as We,disableUserLocalMemoryItem as Ge,formatCommandBackgroundTaskList as Ke,formatCommandHelpMessage as qe,formatCommandPermissionsMessage as Je,formatCommandSessionReplayValidationReport as Ye,formatInvalidPermissionModeMessage as Xe,formatLanguageUsageMessage as Ze,formatOrgPolicyViolationMessage as Qe,getProviderSettingsPaths as $e,hasSensitiveCommandMemoryContent as et,inspectCommandEditCheckpoint as tt,inspectUserLocalMemoryItem as nt,inspectUserLocalStorage as rt,isApiKeyPlaintext as it,isCommandMemoryType as at,isPermissionMode as ot,listCommandBackgroundTasks as st,listCommandContextReferences as ct,listCommandEditCheckpoints as lt,listCommandUsedMemoryReferences as ut,listUserLocalMemoryItems as dt,mergeProviderPatch as ft,parseCommandBackgroundLogCursor as pt,parseLanguageArgument as mt,parsePermissionModeArgument as ht,parseSessionNameArgument as gt,readAutoCompactThreshold as _t,readAutoCompactThresholdSource as f,readCommandBackgroundTaskLog as vt,readCommandContextState as yt,readCommandPermissionMode as bt,readCommandPermissionsState as xt,readCommandSessionInfo as St,readMergedProviderSettings as p,readSettings as Ct,recordCommandMemoryEvent as wt,removeCommandContextReference as Tt,resetAutoCompactThresholdSetting as Et,resolvePluginCommandAdapter as Dt,resolveSettingsPathForScope as Ot,restoreCommandEditCheckpoint as kt,rollbackCommandEditCheckpoint as At,sanitizeProviderProfileName as jt,setCommandAutoCompactThreshold as Mt,setCurrentProvider as Nt,setUserLocalMemoryItem as Pt,suggestProviderProfileName as Ft,summarizeBackgroundJobGroup as It,testProviderProfileCommand as Lt,upsertProviderProfile as Rt,validateCommandSessionReplayLog as zt,writeAutoCompactThresholdSetting as Bt,writeCommandPermissionMode as Vt,writeSettings as Ht}from"@robota-sdk/agent-framework";import{findProviderDefinition as m,formatSupportedProviderTypes as h}from"@robota-sdk/agent-core";import{join as g}from"node:path";import{existsSync as Ut,mkdirSync as Wt,readFileSync as Gt,writeFileSync as Kt}from"node:fs";import{execSync as qt}from"node:child_process";import{homedir as Jt}from"node:os";function Yt(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 Xt(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 _(e,t,n,r){return{agentType:t,label:n,mode:`background`,prompt:r,...e.model?{model:e.model}:{},...e.isolation?{isolation:e.isolation}:{}}}function Zt(e,t){let n=Xt(e),[r,...i]=n.positional,a=n.agentType??`general-purpose`,o=n.positional;!n.agentType&&r&&t.has(r)&&(a=r,o=i);let s=o.join(` `).trim();if(s)return _(n,a,a,s)}function Qt(e,t){let n=Xt(e);return n.positional.map(e=>$t(e,n,t)).filter(e=>e!==void 0)}function $t(e,t,n){let r=e.indexOf(`=`);if(r>0)return en(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 _(t,t.agentType??(n.has(a)?a:`general-purpose`),a,o)}function en(e,t,n,r){let i=t.indexOf(`:`);if(i===-1)return _(n,n.agentType??(r.has(e)?e:`general-purpose`),e,t);if(!(i===0||i===t.length-1))return _(n,t.slice(0,i),e,t.slice(i+1))}function v(e){return e instanceof Error?e.message:String(e)}function tn(e){return new Set(e.listAgentDefinitions().map(e=>e.name))}function nn(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 rn(e,t){let n=nn(e,t.agentType);if(n)return n;try{return{state:await e.spawnAgentJob(t)}}catch(e){return{message:v(e),success:!1}}}function an(){return{message:``,effects:[{type:`agent-switcher-requested`}],success:!0}}async function on(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=>` ${sn(e)}`)].join(`
2
- `),success:!0,data:{agents:t.length,jobs:n.length}}}function sn(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 cn(e,t){let n=Zt(t,tn(e));if(!n)return{message:`Usage: agent run [AGENT_NAME] [--agent AGENT_NAME] PROMPT`,success:!1};let r=await rn(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 ln(e,t){let n=t.includes(`--wait`)||!t.includes(`--detach`),r=Qt(t.filter(e=>e!==`--wait`&&e!==`--detach`),tn(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=>nn(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:v(e),success:!1}}let o=e.createBackgroundJobGroup({waitPolicy:`wait_all`,taskIds:a.map(e=>e.id),label:`agent parallel`});if(n){let t=It(await e.waitBackgroundJobGroup(o.id));return{message:gn(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(`
3
- `),success:!0,data:{agentIds:a.map(e=>e.id),groupId:o.id}}}async function un(e,t){let[n]=t;if(!n)return{message:`Usage: agent wait GROUP_ID`,success:!1};let r=It(await e.waitBackgroundJobGroup(n));return{message:gn(r),success:!0,data:{groupId:n,summary:r}}}async function dn(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(`
4
- `)}${o}`:`No log lines: ${n}`,success:!0,data:{agentId:n,nextOffset:a.nextCursor?.offset}}}async function fn(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 pn(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 mn(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 hn(e,t){try{if(t.trim()===``)return an();let[n=`list`,...r]=Yt(t);return n===`list`&&r.length===0?on(e):n===`run`?cn(e,r):n===`parallel`?ln(e,r):n===`wait`?un(e,r):n===`read`||n===`open`?dn(e,r):n===`send`?fn(e,r):n===`stop`||n===`cancel`?pn(e,r):n===`close`?mn(e,r):cn(e,[n,...r])}catch(e){return{message:v(e),success:!1}}}function gn(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(`
5
- `)}function _n(e){let t=e.getAgentJobCapability?.();if(!t)throw Error(`Agent job capability is not available in this context.`);return t}function vn(){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 y(){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:vn()}}function yn(){let e=y();return{name:e.name,...e.displayName===void 0?{}:{displayName:e.displayName},description:e.description,requiresPermission:!1,execute:(e,t)=>hn(_n(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 bn=class{name=`agent`;getCommands(){return[y()]}};function xn(){return{name:`agent-command-agent`,commandSources:[new bn],systemCommands:[yn()],sessionRequirements:[`agent-runtime`]}}function Sn(e){return e.trim().split(/\s+/).filter(Boolean)}async function Cn(e,n){let[r=`list`,i,...a]=Sn(n);if(r===`list`){let t=st(e);return{message:Ke(t),success:!0,data:{count:t.length}}}if(!i)return{message:t,success:!1};if(r===`read`||r===`log`||r===`open`){let t=await vt(e,i,pt(a[0])),n=t.nextCursor?`\nNext offset: ${t.nextCursor.offset}`:``;return{message:t.lines.length>0?`${t.lines.join(`
6
- `)}${n}`:`No log lines: ${i}`,success:!0,data:{taskId:i,nextOffset:t.nextCursor?.offset}}}return r===`cancel`||r===`stop`?(await je(e,i,a.join(` `)||void 0),{message:`Background task cancelled: ${i}`,success:!0,data:{taskId:i}}):r===`close`||r===`dismiss`?(await Fe(e,i),{message:`Background task closed: ${i}`,success:!0,data:{taskId:i}}):{message:`Unknown background action: ${r}`,success:!1}}function b(){return{name:`background`,displayName:`Background Tasks`,description:e,source:`background`,modelInvocable:!1,subcommands:we()}}function wn(){let e=b();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,subcommands:e.subcommands,execute:Cn}}var Tn=class{name=`background`;getCommands(){return[b()]}};function En(){return{name:`agent-command-background`,commandSources:[new Tn],systemCommands:[wn()]}}function Dn(e){let t=e.trim();return t.length>0?t:void 0}async function On(e,t){let{before:n,after:r,beforeMessageCount:i,afterMessageCount:a}=await Ie(e,Dn(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(`
7
- `),success:!0,data:{before:n,after:r,beforeMessageCount:i,afterMessageCount:a}}}function x(){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 kn(){let e=x();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:On}}var An=class{name=`compact`;getCommands(){return[x()]}};function jn(){return{name:`agent-command-compact`,commandSources:[new An],systemCommands:[kn()]}}const S=[`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(`
8
- `);function C(e){return e===!1?`disabled`:`${Math.round(e*100)}%`}function w(e,t){return e===!1?`Auto compact: disabled (${t})`:`Auto compact: ${C(e)} (${t})`}function Mn(e){return e?`settings`:`current session only`}async function Nn(e,t){let n=t.trim().split(/\s+/).filter(e=>e.length>0);if(n.length>0)return Pn(e,n);let r=yt(e),i=_t(e),a=f(e),o=Un(e.getSession().getFullHistory()),s=ct(e);return{message:[`Context: ${r.usedTokens.toLocaleString()} / ${r.maxTokens.toLocaleString()} tokens (${Math.round(r.usedPercentage)}%)`,w(i,a),Bn(s),`History: ${o.turnCount} turn${o.turnCount===1?``:`s`}`].join(`
9
- `),success:!0,data:{usedTokens:r.usedTokens,maxTokens:r.maxTokens,percentage:r.usedPercentage,autoCompactThreshold:i,autoCompactThresholdSource:a,references:s}}}async function Pn(e,t){let[n,...r]=t;if(n===`list`)return r.length>0?{success:!1,message:S}:Gn(e);if(n===`add`)return In(e,r);if(n===`remove`)return Ln(e,r);if(n===`clear`){if(r.length>0)return{success:!1,message:S};let t=Ne(e);return{success:!0,message:`Context references cleared: ${t.removed.length} removed.`,data:{removed:t.removed}}}return n===`auto`?Fn(e,r):{success:!1,message:S}}function Fn(e,t){let[n,r]=t;if(r!==void 0)return{success:!1,message:S};if(n===void 0){let t=_t(e),n=f(e);return{success:!0,message:[w(t,n),S].join(`
10
- `),data:{autoCompactThreshold:t,autoCompactThresholdSource:n}}}if(n===`on`)return T(e,o,`enabled`);if(n===`off`)return T(e,!1,`disabled`);if(n===`reset`){let t=Et(e);return Mt(e,o,`default`),{success:!0,message:`Auto compact reset to default: ${C(o)} (${Mn(t)}).`,data:{autoCompactThreshold:o,autoCompactThresholdSource:`default`,persisted:t}}}let i=zn(n);return i.success?T(e,i.threshold,`threshold set`):{success:!1,message:`${i.message}\n${S}`}}async function In(e,t){let n=t.join(` `).trim();if(!n)return{success:!1,message:S};let r=await Se(e,n);return r.reference?{success:!0,message:[`Context reference added: ${D(r.reference)}.`,...r.evicted.length>0?[`Evicted ${r.evicted.length} older context reference(s).`]:[]].join(`
1
+ import{BACKGROUND_COMMAND_DESCRIPTION as e,BACKGROUND_COMMAND_USAGE as t,BundlePluginInstaller as n,BundlePluginLoader as r,CLEAR_COMMAND_DESCRIPTION as i,COST_COMMAND_DESCRIPTION as a,DEFAULT_AUTO_COMPACT_THRESHOLD as o,DEFAULT_STATUS_LINE_COMMAND_SETTINGS as s,EXIT_COMMAND_DESCRIPTION as c,HELP_COMMAND_DESCRIPTION as l,LANGUAGE_COMMAND_ARGUMENT_HINT as ee,LANGUAGE_COMMAND_DESCRIPTION as te,MEMORY_COMMAND_ARGUMENT_HINT as ne,MEMORY_COMMAND_DESCRIPTION as re,MEMORY_COMMAND_USAGE as ie,MarketplaceClient as u,PERMISSIONS_COMMAND_DESCRIPTION as d,PERMISSION_MODE_ARGUMENT_HINT as f,PERMISSION_MODE_COMMAND_DESCRIPTION as ae,PLUGIN_COMMAND_ARGUMENT_HINT as oe,PLUGIN_COMMAND_DESCRIPTION as se,PluginCommandSource as ce,PluginSettingsStore as le,RELOAD_PLUGINS_COMMAND_DESCRIPTION as ue,RENAME_COMMAND_DESCRIPTION as de,RENAME_COMMAND_USAGE as fe,RESUME_COMMAND_DESCRIPTION as pe,REWIND_COMMAND_ARGUMENT_HINT as me,REWIND_COMMAND_DESCRIPTION as he,STATUSLINE_COMMAND_ARGUMENT_HINT as ge,STATUSLINE_COMMAND_DESCRIPTION as _e,SkillCommandSource as ve,VALIDATE_SESSION_COMMAND_DESCRIPTION as ye,addCommandContextReference as be,applyProviderConfiguration as xe,buildBackgroundCommandSubcommands as Se,buildLanguageCommandSubcommands as Ce,buildMemoryCommandSubcommands as we,buildPermissionModeSubcommands as p,buildPluginCommandSubcommands as Te,buildProviderSetupPatch as Ee,buildRewindCommandSubcommands as De,buildStatusLineCommandSubcommands as Oe,cancelCommandBackgroundTask as ke,checkSettingsDocument as Ae,clearCommandContextReferences as je,clearConversationHistory as Me,closeCommandBackgroundTask as Ne,compactCommandContext as Pe,createCommandMemoryStores as Fe,createPluginRegistryReloadRequestedEffect as Ie,createPluginTuiRequestedEffect as Le,createSessionExitRequestedEffect as Re,createSessionPickerRequestedEffect as ze,createSessionRenamedEffect as Be,deleteProviderProfile as Ve,deleteUserLocalMemoryItem as He,disableUserLocalMemoryItem as Ue,formatCommandBackgroundTaskList as We,formatCommandHelpMessage as Ge,formatCommandPermissionsMessage as Ke,formatCommandSessionReplayValidationReport as qe,formatInvalidPermissionModeMessage as Je,formatLanguageUsageMessage as Ye,formatOrgPolicyViolationMessage as Xe,getProviderSettingsPaths as Ze,hasSensitiveCommandMemoryContent as Qe,inspectCommandEditCheckpoint as $e,inspectUserLocalMemoryItem as et,inspectUserLocalStorage as tt,isApiKeyPlaintext as nt,isCommandMemoryType as rt,isPermissionMode as it,listCommandBackgroundTasks as at,listCommandContextReferences as ot,listCommandEditCheckpoints as st,listCommandUsedMemoryReferences as ct,listUserLocalMemoryItems as lt,mergeProviderPatch as ut,parseCommandBackgroundLogCursor as dt,parseLanguageArgument as ft,parsePermissionModeArgument as pt,parseSessionNameArgument as mt,readAutoCompactThreshold as m,readAutoCompactThresholdSource as h,readCommandBackgroundTaskLog as ht,readCommandContextState as gt,readCommandPermissionMode as _t,readCommandPermissionsState as vt,readCommandSessionInfo as yt,readMergedProviderSettings as bt,readSettings as xt,recordCommandMemoryEvent as St,removeCommandContextReference as Ct,resetAutoCompactThresholdSetting as wt,resolvePluginCommandAdapter as Tt,resolveSettingsPathForScope as Et,restoreCommandEditCheckpoint as Dt,rollbackCommandEditCheckpoint as Ot,sanitizeProviderProfileName as kt,setCommandAutoCompactThreshold as At,setCurrentProvider as jt,setUserLocalMemoryItem as Mt,suggestProviderProfileName as Nt,summarizeBackgroundJobGroup as Pt,testProviderProfileCommand as Ft,upsertProviderProfile as It,validateCommandSessionReplayLog as Lt,writeAutoCompactThresholdSetting as Rt,writeCommandPermissionMode as zt,writeSettings as Bt}from"@robota-sdk/agent-framework";import{findProviderDefinition as Vt,formatSupportedProviderTypes as g}from"@robota-sdk/agent-core";import{join as _}from"node:path";import{existsSync as Ht,mkdirSync as Ut,readFileSync as Wt,writeFileSync as Gt}from"node:fs";import{execSync as Kt}from"node:child_process";import{homedir as qt}from"node:os";function Jt(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 Yt(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 v(e,t,n,r){return{agentType:t,label:n,mode:`background`,prompt:r,...e.model?{model:e.model}:{},...e.isolation?{isolation:e.isolation}:{}}}function Xt(e,t){let n=Yt(e),[r,...i]=n.positional,a=n.agentType??`general-purpose`,o=n.positional;!n.agentType&&r&&t.has(r)&&(a=r,o=i);let s=o.join(` `).trim();if(s)return v(n,a,a,s)}function Zt(e,t){let n=Yt(e);return n.positional.map(e=>Qt(e,n,t)).filter(e=>e!==void 0)}function Qt(e,t,n){let r=e.indexOf(`=`);if(r>0)return $t(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 v(t,t.agentType??(n.has(a)?a:`general-purpose`),a,o)}function $t(e,t,n,r){let i=t.indexOf(`:`);if(i===-1)return v(n,n.agentType??(r.has(e)?e:`general-purpose`),e,t);if(!(i===0||i===t.length-1))return v(n,t.slice(0,i),e,t.slice(i+1))}function y(e){return e instanceof Error?e.message:String(e)}function en(e){return new Set(e.listAgentDefinitions().map(e=>e.name))}function tn(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 nn(e,t){let n=tn(e,t.agentType);if(n)return n;try{return{state:await e.spawnAgentJob(t)}}catch(e){return{message:y(e),success:!1}}}function rn(){return{message:``,effects:[{type:`agent-switcher-requested`}],success:!0}}async function an(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=>` ${on(e)}`)].join(`
2
+ `),success:!0,data:{agents:t.length,jobs:n.length}}}function on(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 sn(e,t){let n=Xt(t,en(e));if(!n)return{message:`Usage: agent run [AGENT_NAME] [--agent AGENT_NAME] PROMPT`,success:!1};let r=await nn(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 cn(e,t){let n=t.includes(`--wait`)||!t.includes(`--detach`),r=Zt(t.filter(e=>e!==`--wait`&&e!==`--detach`),en(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=>tn(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:y(e),success:!1}}let o=e.createBackgroundJobGroup({waitPolicy:`wait_all`,taskIds:a.map(e=>e.id),label:`agent parallel`});if(n){let t=Pt(await e.waitBackgroundJobGroup(o.id));return{message:hn(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(`
3
+ `),success:!0,data:{agentIds:a.map(e=>e.id),groupId:o.id}}}async function ln(e,t){let[n]=t;if(!n)return{message:`Usage: agent wait GROUP_ID`,success:!1};let r=Pt(await e.waitBackgroundJobGroup(n));return{message:hn(r),success:!0,data:{groupId:n,summary:r}}}async function un(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(`
4
+ `)}${o}`:`No log lines: ${n}`,success:!0,data:{agentId:n,nextOffset:a.nextCursor?.offset}}}async function dn(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 fn(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 pn(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 mn(e,t){try{if(t.trim()===``)return rn();let[n=`list`,...r]=Jt(t);return n===`list`&&r.length===0?an(e):n===`run`?sn(e,r):n===`parallel`?cn(e,r):n===`wait`?ln(e,r):n===`read`||n===`open`?un(e,r):n===`send`?dn(e,r):n===`stop`||n===`cancel`?fn(e,r):n===`close`?pn(e,r):sn(e,[n,...r])}catch(e){return{message:y(e),success:!1}}}function hn(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(`
5
+ `)}function gn(e){let t=e.getAgentJobCapability?.();if(!t)throw Error(`Agent job capability is not available in this context.`);return t}function _n(){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 b(){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:_n()}}function vn(){let e=b();return{name:e.name,...e.displayName===void 0?{}:{displayName:e.displayName},description:e.description,requiresPermission:!1,execute:(e,t)=>mn(gn(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 yn=class{name=`agent`;getCommands(){return[b()]}};function bn(){return{name:`agent-command-agent`,commandSources:[new yn],systemCommands:[vn()],sessionRequirements:[`agent-runtime`]}}function xn(e){return e.trim().split(/\s+/).filter(Boolean)}async function Sn(e,n){let[r=`list`,i,...a]=xn(n);if(r===`list`){let t=at(e);return{message:We(t),success:!0,data:{count:t.length}}}if(!i)return{message:t,success:!1};if(r===`read`||r===`log`||r===`open`){let t=await ht(e,i,dt(a[0])),n=t.nextCursor?`\nNext offset: ${t.nextCursor.offset}`:``;return{message:t.lines.length>0?`${t.lines.join(`
6
+ `)}${n}`:`No log lines: ${i}`,success:!0,data:{taskId:i,nextOffset:t.nextCursor?.offset}}}return r===`cancel`||r===`stop`?(await ke(e,i,a.join(` `)||void 0),{message:`Background task cancelled: ${i}`,success:!0,data:{taskId:i}}):r===`close`||r===`dismiss`?(await Ne(e,i),{message:`Background task closed: ${i}`,success:!0,data:{taskId:i}}):{message:`Unknown background action: ${r}`,success:!1}}function x(){return{name:`background`,displayName:`Background Tasks`,description:e,source:`background`,modelInvocable:!1,subcommands:Se()}}function Cn(){let e=x();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,subcommands:e.subcommands,execute:Sn}}var wn=class{name=`background`;getCommands(){return[x()]}};function Tn(){return{name:`agent-command-background`,commandSources:[new wn],systemCommands:[Cn()]}}function En(e){let t=e.trim();return t.length>0?t:void 0}async function Dn(e,t){let{before:n,after:r,beforeMessageCount:i,afterMessageCount:a}=await Pe(e,En(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(`
7
+ `),success:!0,data:{before:n,after:r,beforeMessageCount:i,afterMessageCount:a}}}function S(){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 On(){let e=S();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:Dn}}var kn=class{name=`compact`;getCommands(){return[S()]}};function An(){return{name:`agent-command-compact`,commandSources:[new kn],systemCommands:[On()]}}const C=[`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(`
8
+ `);function w(e){return e===!1?`disabled`:`${Math.round(e*100)}%`}function jn(e,t){return e===!1?`Auto compact: disabled (${t})`:`Auto compact: ${w(e)} (${t})`}function Mn(e){return e?`settings`:`current session only`}async function Nn(e,t){let n=t.trim().split(/\s+/).filter(e=>e.length>0);if(n.length>0)return Pn(e,n);let r=gt(e),i=m(e),a=h(e),o=Gn(e.getSession().getFullHistory()),s=ot(e);return{message:[`Context: ${r.usedTokens.toLocaleString()} / ${r.maxTokens.toLocaleString()} tokens (${Math.round(r.usedPercentage)}%)`,jn(i,a),Vn(s),`History: ${o.turnCount} turn${o.turnCount===1?``:`s`}`].join(`
9
+ `),success:!0,data:{usedTokens:r.usedTokens,maxTokens:r.maxTokens,percentage:r.usedPercentage,autoCompactThreshold:i,autoCompactThresholdSource:a,references:s}}}async function Pn(e,t){let[n,...r]=t;if(n===`list`)return r.length>0?{success:!1,message:C}:qn(e);if(n===`add`)return In(e,r);if(n===`remove`)return Ln(e,r);if(n===`clear`){if(r.length>0)return{success:!1,message:C};let t=je(e);return{success:!0,message:`Context references cleared: ${t.removed.length} removed.`,data:{removed:t.removed}}}return n===`auto`?Fn(e,r):{success:!1,message:C}}function Fn(e,t){let[n,r]=t;if(r!==void 0)return{success:!1,message:C};if(n===void 0){let t=m(e),n=h(e);return{success:!0,message:[jn(t,n),C].join(`
10
+ `),data:{autoCompactThreshold:t,autoCompactThresholdSource:n}}}if(n===`on`)return Rn(e,o,`enabled`);if(n===`off`)return Rn(e,!1,`disabled`);if(n===`reset`){let t=wt(e);return At(e,o,`default`),{success:!0,message:`Auto compact reset to default: ${w(o)} (${Mn(t)}).`,data:{autoCompactThreshold:o,autoCompactThresholdSource:`default`,persisted:t}}}let i=Bn(n);return i.success?Rn(e,i.threshold,`threshold set`):{success:!1,message:`${i.message}\n${C}`}}async function In(e,t){let n=t.join(` `).trim();if(!n)return{success:!1,message:C};let r=await be(e,n);return r.reference?{success:!0,message:[`Context reference added: ${E(r.reference)}.`,...r.evicted.length>0?[`Evicted ${r.evicted.length} older context reference(s).`]:[]].join(`
11
11
  `),data:{reference:r.reference,evicted:r.evicted}}:{success:!1,message:r.diagnostics.join(`
12
- `)||`Context reference not found: ${n}`,data:{diagnostics:r.diagnostics}}}function Ln(e,t){let n=t.join(` `).trim();if(!n)return{success:!1,message:S};let r=Tt(e,n);return r.removed?{success:!0,message:`Context reference removed: ${D(r.removed)}.`,data:{removed:r.removed}}:{success:!1,message:`Context reference not found: ${n}`}}function T(e,t,n){let r=Bt(e,t),i=r?`settings`:`session`;return Mt(e,t,i),{success:!0,message:Rn(n,t,r),data:{autoCompactThreshold:t,autoCompactThresholdSource:i,persisted:r}}}function Rn(e,t,n){let r=Mn(n);return e===`disabled`?`Auto compact disabled (${r}).`:e===`enabled`?`Auto compact enabled at ${C(t)} (${r}).`:`Auto compact threshold set to ${C(t)} (${r}).`}function zn(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 Bn(e){return`References: ${e.filter(e=>e.status===`active`).length} active, ${e.filter(e=>e.status===`observed`).length} observed`}function E(e){return Math.ceil(e/4)}function D(e){return[e.relativePath,`[${e.loadType}, ${e.status}]`,`~${E(e.byteLength).toLocaleString()} tokens`].join(` `)}function Vn(e){try{return JSON.parse(e)}catch{return null}}function Hn(e){let t=Vn(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 Un(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:Hn(n.function.arguments)})}let n=0,r=0,i=0,a=0,o=new Map;for(let s of e)if(s.category===`chat`){if(s.type===`user`){let e=s.data;n++,r+=E((e.content??``).length)}else if(s.type===`assistant`){let e=s.data;i++,a+=E((e.content??``).length+(e.toolCalls?JSON.stringify(e.toolCalls).length:0))}else if(s.type===`tool`){let e=s.data,n=t.get(e.toolCallId??``),r=n?.name??`tool`,i=n?.firstArg??``,a=E((e.content??``).length);o.set(`${r}:${i}`,{toolName:r,displayArg:i,tokens:a})}}let s=[...o.values()],c=s.reduce((e,t)=>e+t.tokens,0);return{turnCount:n,userCount:n,userTokens:r,assistantCount:i,assistantTokens:a,toolResults:s,totalTokens:r+a+c}}function Wn(e,t,n){let r=`${e}${t>0?` — ~${t.toLocaleString()} tokens`:``}:`;return n.length===0?`${r}\n (none)`:[r,...n.map(e=>` ${e}`)].join(`
13
- `)}function Gn(e){let t=yt(e),n=_t(e),r=f(e),i=Un(e.getSession().getFullHistory()),a=ct(e),o=a.filter(e=>e.loadType===`system`),s=a.filter(e=>e.loadType===`manual`),c=a.filter(e=>e.loadType===`prompt-reference`),l=o.reduce((e,t)=>e+E(t.byteLength),0),ee=s.reduce((e,t)=>e+E(t.byteLength),0),te=c.reduce((e,t)=>e+E(t.byteLength),0),u=i.turnCount===0?`Conversation history — 0 turns`:`Conversation history — ${i.turnCount} turn${i.turnCount===1?``:`s`} | ~${i.totalTokens.toLocaleString()} tokens`,ne=i.toolResults.map(e=>`${e.toolName}${e.displayArg?`: ${e.displayArg}`:``} — ~${e.tokens.toLocaleString()} tokens`),re=i.turnCount===0?[]:[`User (${i.userCount}): ~${i.userTokens.toLocaleString()} tokens`,`Assistant (${i.assistantCount}): ~${i.assistantTokens.toLocaleString()} tokens`,i.toolResults.length>0?[`Tool results (${i.toolResults.length}):`,...ne.map(e=>` ${e}`)].join(`
14
- `):`Tool results (0): (none)`],ie=i.turnCount===0?`${u}:\n (none)`:[`${u}:`,...re.map(e=>` ${e}`)].join(`
15
- `);return{success:!0,message:[`Context: ${t.usedTokens.toLocaleString()} / ${t.maxTokens.toLocaleString()} tokens (${Math.round(t.usedPercentage)}%)`,w(n,r),``,Wn(`System prompt (active every turn)`,l,o.map(D)),``,ie,``,Wn(`Manually added`,ee,s.map(D)),``,Wn(`Prompt references (@-syntax)`,te,c.map(D))].join(`
16
- `),data:{references:a,history:{turnCount:i.turnCount,toolResults:i.toolResults}}}}function Kn(){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 qn(){let e=Kn();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,execute:Nn}}var Jn=class{name=`context`;getCommands(){return[Kn()]}};function Yn(){return{name:`agent-command-context`,commandSources:[new Jn],systemCommands:[qn()]}}function Xn(e,t){return{success:!0,message:`Exit requested.`,effects:[Be()]}}function Zn(){return{name:`exit`,displayName:`Exit Session`,description:c,source:`exit`,modelInvocable:!1}}function Qn(){let e=Zn();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!0,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Xn}}var $n=class{name=`exit`;getCommands(){return[Zn()]}};const er={exit:{type:`confirm`,message:`Exit the session?`}};function tr(){return{name:`agent-command-exit`,commandSources:[new $n],systemCommands:[Qn()],interactionHints:er}}function nr(e,t){return{success:!0,message:qe(e)}}function O(){return{name:`help`,displayName:`Help`,description:l,source:`help`,modelInvocable:!1}}function rr(){let e=O();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:nr}}var ir=class{name=`help`;getCommands(){return[O()]}};function ar(){return{name:`agent-command-help`,commandSources:[new ir],systemCommands:[rr()]}}function or(e,t){let n=mt(t);return n===void 0?{message:Ze(),success:!1}:{message:`Language set to "${n}".`,success:!0,data:{language:n},effects:[{type:`language-change-requested`,language:n}]}}function k(){return{name:`language`,displayName:`Language`,description:te,source:`language`,argumentHint:ee,subcommands:Te(`language`),modelInvocable:!1}}function sr(){let e=k();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:or}}var cr=class{name=`language`;getCommands(){return[k()]}};const lr={language:{type:`pick`,getItems:()=>Te().map(e=>({label:`${e.name} ${e.description??``}`.trimEnd(),value:e.name,description:e.description}))}};function ur(){return{name:`agent-command-language`,commandSources:[new cr],systemCommands:[sr()],interactionHints:lr}}function A(){return{message:re,success:!1}}function dr(e){return{message:e instanceof Error?e.message:String(e),success:!1}}function fr(e){let t=e.list(),n=t.topics.length>0?t.topics.map(e=>`- ${e.name}: ${e.path}`).join(`
12
+ `)||`Context reference not found: ${n}`,data:{diagnostics:r.diagnostics}}}function Ln(e,t){let n=t.join(` `).trim();if(!n)return{success:!1,message:C};let r=Ct(e,n);return r.removed?{success:!0,message:`Context reference removed: ${E(r.removed)}.`,data:{removed:r.removed}}:{success:!1,message:`Context reference not found: ${n}`}}function Rn(e,t,n){let r=Rt(e,t),i=r?`settings`:`session`;return At(e,t,i),{success:!0,message:zn(n,t,r),data:{autoCompactThreshold:t,autoCompactThresholdSource:i,persisted:r}}}function zn(e,t,n){let r=Mn(n);return e===`disabled`?`Auto compact disabled (${r}).`:e===`enabled`?`Auto compact enabled at ${w(t)} (${r}).`:`Auto compact threshold set to ${w(t)} (${r}).`}function Bn(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 Vn(e){return`References: ${e.filter(e=>e.status===`active`).length} active, ${e.filter(e=>e.status===`observed`).length} observed`}function T(e){return Math.ceil(e/4)}function E(e){return[e.relativePath,`[${e.loadType}, ${e.status}]`,`~${T(e.byteLength).toLocaleString()} tokens`].join(` `)}function Hn(e){try{return JSON.parse(e)}catch{return null}}function Un(e){let t=Hn(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 Wn(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 Gn(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:Un(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 Kn(e,t,n){let r=`${e}${t>0?` — ~${t.toLocaleString()} tokens`:``}:`;return n.length===0?`${r}\n (none)`:[r,...n.map(e=>` ${e}`)].join(`
13
+ `)}function qn(e){let t=gt(e),n=m(e),r=h(e),i=Wn(e.getSession().getHistory()),a=Gn(e.getSession().getFullHistory()),o=ot(e),s=o.filter(e=>e.loadType===`system`),c=o.filter(e=>e.loadType===`manual`),l=o.filter(e=>e.loadType===`prompt-reference`),ee=s.reduce((e,t)=>e+T(t.byteLength),0),te=c.reduce((e,t)=>e+T(t.byteLength),0),ne=l.reduce((e,t)=>e+T(t.byteLength),0),re=a.turnCount===0?`Conversation history — 0 turns`:`Conversation history — ${a.turnCount} turn${a.turnCount===1?``:`s`} | ~${i.totalTokens.toLocaleString()} tokens`,ie=a.toolResults.map(e=>`${e.toolName}${e.displayArg?`: ${e.displayArg}`:``}`),u=a.toolResults.length,d=a.totalToolCallCount,f=d===0?`Tool results (0): (none)`:u<d?`Tool results (${u} unique / ${d} calls, ~${i.toolTokens.toLocaleString()} tokens):`:`Tool results (${u}, ~${i.toolTokens.toLocaleString()} tokens):`,ae=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`]:[],d>0?[f,...ie.map(e=>` ${e}`)].join(`
14
+ `):f],oe=a.turnCount===0?`${re}:\n (none)`:[`${re}:`,...ae.map(e=>` ${e}`)].join(`
15
+ `);return{success:!0,message:[`Context: ${t.usedTokens.toLocaleString()} / ${t.maxTokens.toLocaleString()} tokens (${Math.round(t.usedPercentage)}%)`,jn(n,r),``,Kn(`System prompt (active every turn)`,ee,s.map(E)),``,oe,``,Kn(`Manually added`,te,c.map(E)),``,Kn(`Prompt references (@-syntax)`,ne,l.map(E))].join(`
16
+ `),data:{references:o,history:{turnCount:a.turnCount,toolResults:a.toolResults}}}}function Jn(){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 Yn(){let e=Jn();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,execute:Nn}}var Xn=class{name=`context`;getCommands(){return[Jn()]}};function Zn(){return{name:`agent-command-context`,commandSources:[new Xn],systemCommands:[Yn()]}}function Qn(e,t){return{success:!0,message:`Exit requested.`,effects:[Re()]}}function D(){return{name:`exit`,displayName:`Exit Session`,description:c,source:`exit`,modelInvocable:!1}}function $n(){let e=D();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!0,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Qn}}var er=class{name=`exit`;getCommands(){return[D()]}};const tr={exit:{type:`confirm`,message:`Exit the session?`}};function nr(){return{name:`agent-command-exit`,commandSources:[new er],systemCommands:[$n()],interactionHints:tr}}function rr(e,t){return{success:!0,message:Ge(e)}}function O(){return{name:`help`,displayName:`Help`,description:l,source:`help`,modelInvocable:!1}}function ir(){let e=O();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:rr}}var ar=class{name=`help`;getCommands(){return[O()]}};function or(){return{name:`agent-command-help`,commandSources:[new ar],systemCommands:[ir()]}}function sr(e,t){let n=ft(t);return n===void 0?{message:Ye(),success:!1}:{message:`Language set to "${n}".`,success:!0,data:{language:n},effects:[{type:`language-change-requested`,language:n}]}}function k(){return{name:`language`,displayName:`Language`,description:te,source:`language`,argumentHint:ee,subcommands:Ce(`language`),modelInvocable:!1}}function cr(){let e=k();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:sr}}var lr=class{name=`language`;getCommands(){return[k()]}};const ur={language:{type:`pick`,getItems:()=>Ce().map(e=>({label:`${e.name} ${e.description??``}`.trimEnd(),value:e.name,description:e.description}))}};function dr(){return{name:`agent-command-language`,commandSources:[new lr],systemCommands:[cr()],interactionHints:ur}}function A(){return{message:ie,success:!1}}function fr(e){return{message:e instanceof Error?e.message:String(e),success:!1}}function pr(e){let t=e.list(),n=t.topics.length>0?t.topics.map(e=>`- ${e.name}: ${e.path}`).join(`
17
17
  `):`(none)`;return{message:[`Memory index: ${t.indexPath}`,`Topics directory: ${t.topicsPath}`,`Topics:`,n].join(`
18
- `),success:!0,data:{indexPath:t.indexPath,topicsPath:t.topicsPath,topicCount:t.topics.length}}}function pr(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 mr(e){let t=e[1],n=e[2],r=e.slice(3).join(` `).trim();if(!(!t||!at(t)||!n||r.length===0))return{type:t,topic:n,text:r}}function hr(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(`
19
- `),success:!0,data:{count:t.length}}}function j(e,t){wt(e,t)}function gr(e,t,n,r){if(!r)return A();try{let i=t.mark(r,`approved`,`approved-by-user`),a=n.append(i),o=t.mark(r,`saved`,`approved-and-saved`);return j(e,{type:`memory_candidate_approved`,candidateId:o.id,topic:o.topic,reason:`approved-by-user`}),j(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 dr(e instanceof Error?e:String(e))}}function _r(e,t,n){if(!n)return A();try{let r=t.mark(n,`rejected`,`rejected-by-user`);return j(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 dr(e instanceof Error?e:String(e))}}function vr(e){let t=ut(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(`
20
- `),success:!0,data:{count:t.length,references:[...t]}}}function yr(e,t){let n=t.trim().split(/\s+/).filter(Boolean),r=n[0]??`list`,i=Le(e);if(r===`list`)return fr(i.project);if(r===`show`)return pr(i.project,n[1]);if(r===`pending`)return hr(i.pending);if(r===`approve`)return gr(e,i.pending,i.project,n[1]);if(r===`reject`)return _r(e,i.pending,n[1]);if(r===`used`)return vr(e);if(r===`add`){let e=mr(n);if(!e)return A();if(et(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 A()}function M(){return{name:`memory`,displayName:`Memory`,description:ne,source:`memory`,argumentHint:u,modelInvocable:!0,safety:`write`,subcommands:Ee()}}function br(){let e=M();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:yr}}var xr=class{name=`memory`;getCommands(){return[M()]}};function Sr(){return{name:`agent-command-memory`,commandSources:[new xr],systemCommands:[br()]}}function Cr(e,t){let n=ht(t);if(n===void 0){let t=bt(e);return{message:`Current mode: ${t}`,success:!0,data:{mode:t}}}return ot(n)?(Vt(e,n),{message:`Permission mode set to: ${n}`,success:!0,data:{mode:n}}):{message:Xe(),success:!1}}function N(){return{name:`mode`,displayName:`Interaction Mode`,description:se,source:`mode`,argumentHint:oe,subcommands:d(`mode`),modelInvocable:!1}}function wr(){let e=N();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:Cr}}var Tr=class{name=`mode`;getCommands(){return[N()]}};const Er={mode:{type:`pick`,getItems:()=>d().map(e=>({label:e.name,value:e.name,description:e.description}))}};function Dr(){return{name:`agent-command-mode`,commandSources:[new Tr],systemCommands:[wr()],interactionHints:Er}}function Or(e,t){let n=ht(t);if(n!==void 0){if(!ot(n))return{message:Xe(),success:!1};Vt(e,n);let t=xt(e);return{message:`Permission mode set to: ${n}\n${Je(t)}`,success:!0,data:{mode:t.mode,sessionAllowed:t.sessionAllowed}}}let r=xt(e);return{message:Je(r),success:!0,data:{mode:r.mode,sessionAllowed:r.sessionAllowed}}}function P(){return{name:`permissions`,displayName:`Permissions`,description:ae,source:`permissions`,argumentHint:oe,subcommands:d(`permissions`),modelInvocable:!1}}function kr(){let e=P();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:Or}}var Ar=class{name=`permissions`;getCommands(){return[P()]}};function jr(){return{name:`agent-command-permissions`,commandSources:[new Ar],systemCommands:[kr()]}}function Mr(e){let t=e.trim().split(/\s+/).filter(e=>e.length>0);return{subcommand:t[0]??``,subArgs:t.slice(1).join(` `).trim()}}function F(e){return{success:!1,message:e}}function Nr(e){return Dt(e)}async function I(e,t){let n=Nr(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 Pr(e,t){let{subcommand:n,subArgs:r}=Mr(t);return n===`add`&&r.length>0?I(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?I(e,async e=>(await e.marketplaceRemove(r),`Removed marketplace "${r}" and uninstalled its plugins.`)):n===`update`&&r.length>0?I(e,async e=>(await e.marketplaceUpdate(r),`Updated marketplace "${r}".`)):n===`list`?I(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(`
21
- `)}`}):F(`Usage: /plugin marketplace add <source> | remove <name> | update <name> | list`)}function L(e,t,n,r){return t.length===0?Promise.resolve(F(n)):I(e,e=>Promise.resolve(r(e,t)))}function Fr(){return{success:!0,message:`Opening plugin manager...`,effects:[ze()]}}function Ir(e,t){return L(e,t,`Usage: /plugin install <name>@<marketplace>`,async(e,t)=>(await e.install(t),`Installed plugin: ${t}`))}function Lr(e,t){return L(e,t,`Usage: /plugin uninstall <name>@<marketplace>`,async(e,t)=>(await e.uninstall(t),`Uninstalled plugin: ${t}`))}function Rr(e,t){return L(e,t,`Usage: /plugin enable <name>@<marketplace>`,async(e,t)=>(await e.enable(t),`Enabled plugin: ${t}`))}function zr(e,t){return L(e,t,`Usage: /plugin disable <name>@<marketplace>`,async(e,t)=>(await e.disable(t),`Disabled plugin: ${t}`))}async function Br(e,t){let{subcommand:n,subArgs:r}=Mr(t);switch(n){case``:case`manage`:return Fr();case`install`:return Ir(e,r);case`uninstall`:return Lr(e,r);case`enable`:return Rr(e,r);case`disable`:return zr(e,r);case`marketplace`:return Pr(e,r);default:return F(`Unknown plugin subcommand: ${n}`)}}async function Vr(e,t){return I(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:[Re()]}:e)}function R(){return{name:`plugin`,displayName:`Plugins`,description:le,source:`plugin-manager`,modelInvocable:!1,argumentHint:ce,subcommands:De()}}function z(){return{name:`reload-plugins`,displayName:`Reload Plugins`,description:fe,source:`plugin-manager`,modelInvocable:!1}}function Hr(){let e=R();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:Br}}function Ur(){let e=z();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Vr}}var Wr=class{name=`plugin-manager`;getCommands(){return[R(),z()]}};function Gr(){return{name:`agent-command-plugin`,commandSources:[new Wr],systemCommands:[Hr(),Ur()]}}function B(e,t,n={}){let r=$r(e,t);return{type:e,steps:ni(ei(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 Kr(e){return e.length===0?` No providers are available.`:[` Select provider:`,...e.map((e,t)=>` ${t+1}. ${U(e)}`),` Provider [1-${e.length}] (default: 1): `].join(`
22
- `)}function qr(e,t){let n=e.trim(),r=n.length>0?n:`1`,i=Zr(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: ${h(t)}`)}let a=m(t,r);if(a===void 0)throw Error(`Unknown provider: ${r}. Currently supported: ${h(t)}`);return a.type}function V(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 H(e,t){let n=V(e),r=t.trim()||n.defaultValue||``,i=Qr(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:ri(a)}}async function Jr(e,t,n,r={}){let i=B(e,n,r),a=i.steps.length;for(;i.stepIndex<a;){let e=V(i),n=await t(Yr(e,i.setupHelpLinks),e.masked===!0),r=H(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 Yr(e,t=[]){let n=e.defaultValue===void 0?``:` (default: ${e.defaultValue})`,r=W(t);return`${r.length>0?`${r}\n`:``} ${e.title}${n}: `}const Xr={"cloud-paid":`[Cloud/Paid]`,"cloud-free":`[Cloud/Free]`,"local-free":`[Local/Free]`};function U(e){let t=`${e.category===void 0?``:`${Xr[e.category]??``} `}${e.displayName===void 0?e.type:`${e.displayName} (${e.type})`}`;return e.description===void 0?t:`${t} — ${e.description}`}function W(e=[]){return e.length===0?``:e.map(e=>` Setup help: ${ti(e.kind)}: ${e.label} - ${e.url}`).join(`
23
- `)}function Zr(e){if(/^\d+$/.test(e))return Number(e)-1}function Qr(e,t){if(e.required===!0&&t.length===0)return`Required`}function $r(e,t){let n=m(t,e);if(n===void 0)throw Error(`Unknown provider: ${e}. Currently supported: ${h(t)}`);return n}function ei(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 ti(e){return e===`api-key`?`API key`:e===`console`?`Console`:`Official`}function ni(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 ri(e){let t=e.profileName??Ft({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 ii={type:`session-restart-requested`,reason:`other`};function ai(e,t){return B(e,t.providerDefinitions,{existingProfileNames:Object.keys(t.settings.readMergedSettings().providers??{})})}function G(e,t){return{prompt:oi(e),submit:n=>ci(e,n,t),cancel:()=>({message:`Provider setup cancelled.`,success:!0})}}function oi(e){let t=V(e),n=t.masked===!0&&t.defaultValue!==void 0?`(unchanged)`:t.defaultValue;return{kind:`text`,title:t.title,...si(e),...n===void 0?{}:{placeholder:n},...t.defaultValue===void 0?{}:{allowEmpty:!0},...t.masked===void 0?{}:{masked:t.masked},validate:e=>Qr(t,e)}}function si(e){let t=W(e.setupHelpLinks);return t.length>0?{description:t}:{}}function ci(e,t,n){let r=H(e,t);return r.status===`error`?{message:r.message,success:!1,interaction:G(e,n)}:r.status===`complete`?li(r.input,n):{message:``,success:!0,interaction:G(r.state,n)}}function li(e,t){let n=t.settings.readTargetSettings(),r=Oe(e,{providerDefinitions:t.providerDefinitions});return t.settings.writeTargetSettings(ft(n,r)),{message:`Provider ${e.profile} configured. Restarting...`,success:!0,effects:[{...ii,message:`Provider setup restart`}]}}function ui(e,t,n){return`${e===n?`* `:``}${e}: ${t.type??`unknown`} ${t.model??`(no model)`}`}function di(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:Qe(`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}:Nt(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}]}}function fi(e,t){let n=t.settings.readMergedSettings().providers?.[e];if(!n)return{message:`Provider profile "${e}" was not found.`,success:!1};if(!n.type)return{message:`Provider profile "${e}" is missing type.`,success:!1};try{let r=B(n.type,t.providerDefinitions,{profileName:e,setCurrent:!1,initialValues:pi(n)});return{message:`Provider edit requested: ${e}`,success:!0,interaction:K(r,e,t)}}catch(e){return{message:e instanceof Error?e.message:String(e),success:!1}}}function pi(e){return{...typeof e.model==`string`?{model:e.model}:{},...typeof e.apiKey==`string`?{apiKey:e.apiKey}:{},...typeof e.baseURL==`string`?{baseURL:e.baseURL}:{}}}function K(e,t,n){return{prompt:oi(e),submit:r=>mi(e,t,r,n),cancel:()=>({message:`Provider edit cancelled.`,success:!0})}}function mi(e,t,n,r){let i=H(e,n);return i.status===`error`?{message:i.message,success:!1,interaction:K(e,t,r)}:i.status===`complete`?hi(i.input,t,r):{message:``,success:!0,interaction:K(i.state,t,r)}}function hi(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&&it(e.apiKey))return{message:Qe(`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=Oe(e,{providerDefinitions:n.providerDefinitions}).providers[t];if(!s)return{message:`Provider profile "${t}" was not updated.`,success:!1};n.settings.writeTargetSettings(Rt(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 gi={type:`session-restart-requested`,reason:`other`};function _i(e,t){let n=t.settings.readMergedSettings();if(!n.providers?.[e])return{message:`Provider profile "${e}" was not found.`,success:!1};let r=Ti(e,Object.keys(n.providers));return{message:`Provider duplicate requested: ${e}`,success:!0,interaction:vi(e,r,t)}}function vi(e,t,n){return{prompt:{kind:`text`,title:`Duplicate ${e} as`,placeholder:t,allowEmpty:!0,validate:e=>yi(e,t,n)},submit:r=>bi(e,r,t,n),cancel:()=>({message:`Provider duplicate cancelled.`,success:!0})}}function yi(e,t,n){let r=Ei(e,t);if(r.length===0)return`Required`;if(n.settings.readMergedSettings().providers?.[r]!==void 0)return`Provider profile "${r}" already exists`}function bi(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=Ei(t,n),o=yi(a,n,r);return o===void 0?(r.settings.writeTargetSettings(Rt(r.settings.readTargetSettings(),a,{...i})),{message:`Provider profile duplicated: ${e} -> ${a}.`,success:!0}):{message:o,success:!1}}function xi(e,t){let n=t.settings.readMergedSettings().providers??{};return n[e]?Object.keys(n).length<=1?{message:`Cannot delete the only provider profile.`,success:!1}:t.settings.readTargetSettings().providers?.[e]===void 0?{message:`Provider profile "${e}" is not stored in the active write target; edit its source settings file or override it before deleting.`,success:!1}:{message:`Provider delete requested: ${e}`,success:!0,interaction:Si(e,t)}:{message:`Provider profile "${e}" was not found.`,success:!1}}function Si(e,t){return{prompt:{kind:`choice`,title:`Delete provider profile ${e}?`,options:[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}]},submit:n=>n===`yes`?Ci(e,t):{message:`Provider delete cancelled.`,success:!0},cancel:()=>({message:`Provider delete cancelled.`,success:!0})}}function Ci(e,t){let n=t.settings.readMergedSettings();if(n.currentProvider!==e)return t.settings.writeTargetSettings(Ue(t.settings.readTargetSettings(),e)),{message:`Provider profile deleted: ${e}.`,success:!0};let r=Object.entries(n.providers??{}).filter(([t])=>t!==e).map(([e,t])=>({value:e,label:ui(e,t,n.currentProvider)}));return{message:`Select a replacement provider before deleting ${e}.`,success:!0,interaction:{prompt:{kind:`choice`,title:`Replacement provider for ${e}`,options:r,maxVisible:8},submit:n=>wi(e,n,t),cancel:()=>({message:`Provider delete cancelled.`,success:!0})}}}function wi(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=Ue(n.settings.readTargetSettings(),e);return n.settings.writeTargetSettings({...r,currentProvider:t}),{message:`Provider profile deleted: ${e}. Restarting with ${t}...`,success:!0,effects:[{...gi,message:`Provider delete restart`}]}}function Ti(e,t){let n=jt(`${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 Ei(e,t){return jt(e.trim()||t)??``}const Di=`switch`,Oi=`edit`,ki=`test`,Ai=`duplicate`,ji=`delete`,Mi=`cancel`;function Ni(e,t,n){return{prompt:{kind:`choice`,title:`Select provider profile`,options:Object.entries(t??{}).map(([t,n])=>({value:t,label:ui(t,n,e)})),maxVisible:8},submit:e=>Pi(e,n),cancel:()=>({message:`Provider profile selection cancelled.`,success:!0})}}function Pi(e,t){return t.settings.readMergedSettings().providers?.[e]?{message:`Provider profile selected: ${e}`,success:!0,interaction:Fi(e,t)}:{message:`Provider profile "${e}" was not found.`,success:!1}}function Fi(e,t){return{prompt:{kind:`choice`,title:`Provider profile: ${e}`,options:[{value:Di,label:`Switch`},{value:Oi,label:`Edit`},{value:ki,label:`Test`},{value:Ai,label:`Duplicate`},{value:ji,label:`Delete`},{value:Mi,label:`Cancel`}]},submit:n=>Ii(e,n,t),cancel:()=>({message:`Provider profile action cancelled.`,success:!0})}}async function Ii(e,t,n){let r=n.settings.readMergedSettings();switch(t){case Di:return di(r.providers,e,n);case Oi:return fi(e,n);case ki:return await Lt(r.currentProvider,r.providers,e,n);case Ai:return _i(e,n);case ji:return xi(e,n);case Mi:return{message:`Provider profile action cancelled.`,success:!0};default:return{message:`Unknown provider profile action "${t}".`,success:!1}}}async function Li(e,t){let n=t.settings.readMergedSettings(),r=e.trim();if(r.length===0)return Ri(n.currentProvider,n.providers,t);let[i=`current`,a]=r.split(/\s+/);return i===`list`?Ri(n.currentProvider,n.providers,t):i===`current`||i===``?{message:Bi(n.currentProvider,n.providers),success:!0}:i===`switch`?di(n.providers,a,t):i===`test`?await Lt(n.currentProvider,n.providers,a,t):i===`add`?Vi(a,t):{message:`Usage: provider [current|list|switch <profile>|add <type>|test [profile]]`,success:!1}}function Ri(e,t,n){let r=zi(e,t);return Object.keys(t??{}).length===0?{message:r,success:!0}:{message:r,success:!0,interaction:Ni(e,t,n)}}function zi(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(`
18
+ `),success:!0,data:{indexPath:t.indexPath,topicsPath:t.topicsPath,topicCount:t.topics.length}}}function mr(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 hr(e){let t=e[1],n=e[2],r=e.slice(3).join(` `).trim();if(!(!t||!rt(t)||!n||r.length===0))return{type:t,topic:n,text:r}}function gr(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(`
19
+ `),success:!0,data:{count:t.length}}}function j(e,t){St(e,t)}function _r(e,t,n,r){if(!r)return A();try{let i=t.mark(r,`approved`,`approved-by-user`),a=n.append(i),o=t.mark(r,`saved`,`approved-and-saved`);return j(e,{type:`memory_candidate_approved`,candidateId:o.id,topic:o.topic,reason:`approved-by-user`}),j(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 fr(e instanceof Error?e:String(e))}}function vr(e,t,n){if(!n)return A();try{let r=t.mark(n,`rejected`,`rejected-by-user`);return j(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 fr(e instanceof Error?e:String(e))}}function yr(e){let t=ct(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(`
20
+ `),success:!0,data:{count:t.length,references:[...t]}}}function br(e,t){let n=t.trim().split(/\s+/).filter(Boolean),r=n[0]??`list`,i=Fe(e);if(r===`list`)return pr(i.project);if(r===`show`)return mr(i.project,n[1]);if(r===`pending`)return gr(i.pending);if(r===`approve`)return _r(e,i.pending,i.project,n[1]);if(r===`reject`)return vr(e,i.pending,n[1]);if(r===`used`)return yr(e);if(r===`add`){let e=hr(n);if(!e)return A();if(Qe(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 A()}function M(){return{name:`memory`,displayName:`Memory`,description:re,source:`memory`,argumentHint:ne,modelInvocable:!0,safety:`write`,subcommands:we()}}function xr(){let e=M();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:br}}var Sr=class{name=`memory`;getCommands(){return[M()]}};function Cr(){return{name:`agent-command-memory`,commandSources:[new Sr],systemCommands:[xr()]}}function wr(e,t){let n=pt(t);if(n===void 0){let t=_t(e);return{message:`Current mode: ${t}`,success:!0,data:{mode:t}}}return it(n)?(zt(e,n),{message:`Permission mode set to: ${n}`,success:!0,data:{mode:n}}):{message:Je(),success:!1}}function N(){return{name:`mode`,displayName:`Interaction Mode`,description:ae,source:`mode`,argumentHint:f,subcommands:p(`mode`),modelInvocable:!1}}function Tr(){let e=N();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:wr}}var Er=class{name=`mode`;getCommands(){return[N()]}};const Dr={mode:{type:`pick`,getItems:()=>p().map(e=>({label:e.name,value:e.name,description:e.description}))}};function Or(){return{name:`agent-command-mode`,commandSources:[new Er],systemCommands:[Tr()],interactionHints:Dr}}function kr(e,t){let n=pt(t);if(n!==void 0){if(!it(n))return{message:Je(),success:!1};zt(e,n);let t=vt(e);return{message:`Permission mode set to: ${n}\n${Ke(t)}`,success:!0,data:{mode:t.mode,sessionAllowed:t.sessionAllowed}}}let r=vt(e);return{message:Ke(r),success:!0,data:{mode:r.mode,sessionAllowed:r.sessionAllowed}}}function P(){return{name:`permissions`,displayName:`Permissions`,description:d,source:`permissions`,argumentHint:f,subcommands:p(`permissions`),modelInvocable:!1}}function Ar(){let e=P();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:kr}}var jr=class{name=`permissions`;getCommands(){return[P()]}};function Mr(){return{name:`agent-command-permissions`,commandSources:[new jr],systemCommands:[Ar()]}}function Nr(e){let t=e.trim().split(/\s+/).filter(e=>e.length>0);return{subcommand:t[0]??``,subArgs:t.slice(1).join(` `).trim()}}function F(e){return{success:!1,message:e}}function Pr(e){return Tt(e)}async function I(e,t){let n=Pr(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 Fr(e,t){let{subcommand:n,subArgs:r}=Nr(t);return n===`add`&&r.length>0?I(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?I(e,async e=>(await e.marketplaceRemove(r),`Removed marketplace "${r}" and uninstalled its plugins.`)):n===`update`&&r.length>0?I(e,async e=>(await e.marketplaceUpdate(r),`Updated marketplace "${r}".`)):n===`list`?I(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(`
21
+ `)}`}):F(`Usage: /plugin marketplace add <source> | remove <name> | update <name> | list`)}function L(e,t,n,r){return t.length===0?Promise.resolve(F(n)):I(e,e=>Promise.resolve(r(e,t)))}function Ir(){return{success:!0,message:`Opening plugin manager...`,effects:[Le()]}}function Lr(e,t){return L(e,t,`Usage: /plugin install <name>@<marketplace>`,async(e,t)=>(await e.install(t),`Installed plugin: ${t}`))}function Rr(e,t){return L(e,t,`Usage: /plugin uninstall <name>@<marketplace>`,async(e,t)=>(await e.uninstall(t),`Uninstalled plugin: ${t}`))}function zr(e,t){return L(e,t,`Usage: /plugin enable <name>@<marketplace>`,async(e,t)=>(await e.enable(t),`Enabled plugin: ${t}`))}function Br(e,t){return L(e,t,`Usage: /plugin disable <name>@<marketplace>`,async(e,t)=>(await e.disable(t),`Disabled plugin: ${t}`))}async function Vr(e,t){let{subcommand:n,subArgs:r}=Nr(t);switch(n){case``:case`manage`:return Ir();case`install`:return Lr(e,r);case`uninstall`:return Rr(e,r);case`enable`:return zr(e,r);case`disable`:return Br(e,r);case`marketplace`:return Fr(e,r);default:return F(`Unknown plugin subcommand: ${n}`)}}async function Hr(e,t){return I(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:[Ie()]}:e)}function R(){return{name:`plugin`,displayName:`Plugins`,description:se,source:`plugin-manager`,modelInvocable:!1,argumentHint:oe,subcommands:Te()}}function z(){return{name:`reload-plugins`,displayName:`Reload Plugins`,description:ue,source:`plugin-manager`,modelInvocable:!1}}function Ur(){let e=R();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:Vr}}function Wr(){let e=z();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Hr}}var Gr=class{name=`plugin-manager`;getCommands(){return[R(),z()]}};function Kr(){return{name:`agent-command-plugin`,commandSources:[new Gr],systemCommands:[Ur(),Wr()]}}function B(e,t,n={}){let r=$r(e,t);return{type:e,steps:ni(ei(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 qr(e){return e.length===0?` No providers are available.`:[` Select provider:`,...e.map((e,t)=>` ${t+1}. ${U(e)}`),` Provider [1-${e.length}] (default: 1): `].join(`
22
+ `)}function Jr(e,t){let n=e.trim(),r=n.length>0?n:`1`,i=Qr(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: ${g(t)}`)}let a=Vt(t,r);if(a===void 0)throw Error(`Unknown provider: ${r}. Currently supported: ${g(t)}`);return a.type}function V(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 H(e,t){let n=V(e),r=t.trim()||n.defaultValue||``,i=G(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:ri(a)}}async function Yr(e,t,n,r={}){let i=B(e,n,r),a=i.steps.length;for(;i.stepIndex<a;){let e=V(i),n=await t(Xr(e,i.setupHelpLinks),e.masked===!0),r=H(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 Xr(e,t=[]){let n=e.defaultValue===void 0?``:` (default: ${e.defaultValue})`,r=W(t);return`${r.length>0?`${r}\n`:``} ${e.title}${n}: `}const Zr={"cloud-paid":`[Cloud/Paid]`,"cloud-free":`[Cloud/Free]`,"local-free":`[Local/Free]`};function U(e){let t=`${e.category===void 0?``:`${Zr[e.category]??``} `}${e.displayName===void 0?e.type:`${e.displayName} (${e.type})`}`;return e.description===void 0?t:`${t} — ${e.description}`}function W(e=[]){return e.length===0?``:e.map(e=>` Setup help: ${ti(e.kind)}: ${e.label} - ${e.url}`).join(`
23
+ `)}function Qr(e){if(/^\d+$/.test(e))return Number(e)-1}function G(e,t){if(e.required===!0&&t.length===0)return`Required`}function $r(e,t){let n=Vt(t,e);if(n===void 0)throw Error(`Unknown provider: ${e}. Currently supported: ${g(t)}`);return n}function ei(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 ti(e){return e===`api-key`?`API key`:e===`console`?`Console`:`Official`}function ni(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 ri(e){let t=e.profileName??Nt({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 ii={type:`session-restart-requested`,reason:`other`};function ai(e,t){return B(e,t.providerDefinitions,{existingProfileNames:Object.keys(t.settings.readMergedSettings().providers??{})})}function K(e,t){return{prompt:oi(e),submit:n=>ci(e,n,t),cancel:()=>({message:`Provider setup cancelled.`,success:!0})}}function oi(e){let t=V(e),n=t.masked===!0&&t.defaultValue!==void 0?`(unchanged)`:t.defaultValue;return{kind:`text`,title:t.title,...si(e),...n===void 0?{}:{placeholder:n},...t.defaultValue===void 0?{}:{allowEmpty:!0},...t.masked===void 0?{}:{masked:t.masked},validate:e=>G(t,e)}}function si(e){let t=W(e.setupHelpLinks);return t.length>0?{description:t}:{}}function ci(e,t,n){let r=H(e,t);return r.status===`error`?{message:r.message,success:!1,interaction:K(e,n)}:r.status===`complete`?li(r.input,n):{message:``,success:!0,interaction:K(r.state,n)}}function li(e,t){let n=t.settings.readTargetSettings(),r=Ee(e,{providerDefinitions:t.providerDefinitions});return t.settings.writeTargetSettings(ut(n,r)),{message:`Provider ${e.profile} configured. Restarting...`,success:!0,effects:[{...ii,message:`Provider setup restart`}]}}function ui(e,t,n){return`${e===n?`* `:``}${e}: ${t.type??`unknown`} ${t.model??`(no model)`}`}function di(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:Xe(`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}:jt(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}]}}function fi(e,t){let n=t.settings.readMergedSettings().providers?.[e];if(!n)return{message:`Provider profile "${e}" was not found.`,success:!1};if(!n.type)return{message:`Provider profile "${e}" is missing type.`,success:!1};try{let r=B(n.type,t.providerDefinitions,{profileName:e,setCurrent:!1,initialValues:pi(n)});return{message:`Provider edit requested: ${e}`,success:!0,interaction:q(r,e,t)}}catch(e){return{message:e instanceof Error?e.message:String(e),success:!1}}}function pi(e){return{...typeof e.model==`string`?{model:e.model}:{},...typeof e.apiKey==`string`?{apiKey:e.apiKey}:{},...typeof e.baseURL==`string`?{baseURL:e.baseURL}:{}}}function q(e,t,n){return{prompt:oi(e),submit:r=>mi(e,t,r,n),cancel:()=>({message:`Provider edit cancelled.`,success:!0})}}function mi(e,t,n,r){let i=H(e,n);return i.status===`error`?{message:i.message,success:!1,interaction:q(e,t,r)}:i.status===`complete`?hi(i.input,t,r):{message:``,success:!0,interaction:q(i.state,t,r)}}function hi(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&&nt(e.apiKey))return{message:Xe(`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=Ee(e,{providerDefinitions:n.providerDefinitions}).providers[t];if(!s)return{message:`Provider profile "${t}" was not updated.`,success:!1};n.settings.writeTargetSettings(It(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 gi={type:`session-restart-requested`,reason:`other`};function _i(e,t){let n=t.settings.readMergedSettings();if(!n.providers?.[e])return{message:`Provider profile "${e}" was not found.`,success:!1};let r=Ti(e,Object.keys(n.providers));return{message:`Provider duplicate requested: ${e}`,success:!0,interaction:vi(e,r,t)}}function vi(e,t,n){return{prompt:{kind:`text`,title:`Duplicate ${e} as`,placeholder:t,allowEmpty:!0,validate:e=>yi(e,t,n)},submit:r=>bi(e,r,t,n),cancel:()=>({message:`Provider duplicate cancelled.`,success:!0})}}function yi(e,t,n){let r=Ei(e,t);if(r.length===0)return`Required`;if(n.settings.readMergedSettings().providers?.[r]!==void 0)return`Provider profile "${r}" already exists`}function bi(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=Ei(t,n),o=yi(a,n,r);return o===void 0?(r.settings.writeTargetSettings(It(r.settings.readTargetSettings(),a,{...i})),{message:`Provider profile duplicated: ${e} -> ${a}.`,success:!0}):{message:o,success:!1}}function xi(e,t){let n=t.settings.readMergedSettings().providers??{};return n[e]?Object.keys(n).length<=1?{message:`Cannot delete the only provider profile.`,success:!1}:t.settings.readTargetSettings().providers?.[e]===void 0?{message:`Provider profile "${e}" is not stored in the active write target; edit its source settings file or override it before deleting.`,success:!1}:{message:`Provider delete requested: ${e}`,success:!0,interaction:Si(e,t)}:{message:`Provider profile "${e}" was not found.`,success:!1}}function Si(e,t){return{prompt:{kind:`choice`,title:`Delete provider profile ${e}?`,options:[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}]},submit:n=>n===`yes`?Ci(e,t):{message:`Provider delete cancelled.`,success:!0},cancel:()=>({message:`Provider delete cancelled.`,success:!0})}}function Ci(e,t){let n=t.settings.readMergedSettings();if(n.currentProvider!==e)return t.settings.writeTargetSettings(Ve(t.settings.readTargetSettings(),e)),{message:`Provider profile deleted: ${e}.`,success:!0};let r=Object.entries(n.providers??{}).filter(([t])=>t!==e).map(([e,t])=>({value:e,label:ui(e,t,n.currentProvider)}));return{message:`Select a replacement provider before deleting ${e}.`,success:!0,interaction:{prompt:{kind:`choice`,title:`Replacement provider for ${e}`,options:r,maxVisible:8},submit:n=>wi(e,n,t),cancel:()=>({message:`Provider delete cancelled.`,success:!0})}}}function wi(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=Ve(n.settings.readTargetSettings(),e);return n.settings.writeTargetSettings({...r,currentProvider:t}),{message:`Provider profile deleted: ${e}. Restarting with ${t}...`,success:!0,effects:[{...gi,message:`Provider delete restart`}]}}function Ti(e,t){let n=kt(`${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 Ei(e,t){return kt(e.trim()||t)??``}const Di=`switch`,Oi=`edit`,ki=`test`,Ai=`duplicate`,ji=`delete`,Mi=`cancel`;function Ni(e,t,n){return{prompt:{kind:`choice`,title:`Select provider profile`,options:Object.entries(t??{}).map(([t,n])=>({value:t,label:ui(t,n,e)})),maxVisible:8},submit:e=>Pi(e,n),cancel:()=>({message:`Provider profile selection cancelled.`,success:!0})}}function Pi(e,t){return t.settings.readMergedSettings().providers?.[e]?{message:`Provider profile selected: ${e}`,success:!0,interaction:Fi(e,t)}:{message:`Provider profile "${e}" was not found.`,success:!1}}function Fi(e,t){return{prompt:{kind:`choice`,title:`Provider profile: ${e}`,options:[{value:Di,label:`Switch`},{value:Oi,label:`Edit`},{value:ki,label:`Test`},{value:Ai,label:`Duplicate`},{value:ji,label:`Delete`},{value:Mi,label:`Cancel`}]},submit:n=>Ii(e,n,t),cancel:()=>({message:`Provider profile action cancelled.`,success:!0})}}async function Ii(e,t,n){let r=n.settings.readMergedSettings();switch(t){case Di:return di(r.providers,e,n);case Oi:return fi(e,n);case ki:return await Ft(r.currentProvider,r.providers,e,n);case Ai:return _i(e,n);case ji:return xi(e,n);case Mi:return{message:`Provider profile action cancelled.`,success:!0};default:return{message:`Unknown provider profile action "${t}".`,success:!1}}}async function Li(e,t){let n=t.settings.readMergedSettings(),r=e.trim();if(r.length===0)return Ri(n.currentProvider,n.providers,t);let[i=`current`,a]=r.split(/\s+/);return i===`list`?Ri(n.currentProvider,n.providers,t):i===`current`||i===``?{message:Bi(n.currentProvider,n.providers),success:!0}:i===`switch`?di(n.providers,a,t):i===`test`?await Ft(n.currentProvider,n.providers,a,t):i===`add`?Vi(a,t):{message:`Usage: provider [current|list|switch <profile>|add <type>|test [profile]]`,success:!1}}function Ri(e,t,n){let r=zi(e,t);return Object.keys(t??{}).length===0?{message:r,success:!0}:{message:r,success:!0,interaction:Ni(e,t,n)}}function zi(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(`
24
24
  `)}function Bi(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(`
25
- `):`Current provider "${e}" was not found in providers.`}function Vi(e,t){return e===void 0||e.length===0?{message:`Provider setup requested. Select a provider to continue.`,success:!0,interaction:Hi(t)}:m(t.providerDefinitions,e)===void 0?{message:`Usage: provider add <type>. Supported: ${h(t.providerDefinitions)}`,success:!1}:{message:`Provider setup requested: ${e}`,success:!0,interaction:G(ai(e,t),t)}}function Hi(e){return{prompt:{kind:`choice`,title:`Select provider`,options:e.providerDefinitions.map(e=>({value:e.type,label:U(e)})),maxVisible:6},submit:t=>{let n=ai(t,e);return{message:`Provider setup requested: ${t}`,success:!0,interaction:G(n,e)}},cancel:()=>({message:`Provider setup cancelled.`,success:!0})}}function Ui(){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 q(){return{name:`provider`,displayName:`Provider Setup`,description:`Manage provider profiles`,source:`provider`,modelInvocable:!1,argumentHint:`current | list | switch <profile> | add [type] | test [profile]`,subcommands:Ui(),example:`/provider switch production`}}var Wi=class{name=`provider`;getCommands(){return[q()]}};function Gi(e){let t=q();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,execute:async(t,n)=>Li(n,e)}}const Ki={provider:{type:`pick`,getItems:()=>Ui().map(e=>({label:e.name,value:e.name,description:e.description}))}};function qi(e){return{name:`agent-command-provider`,commandSources:[new Wi],systemCommands:[Gi(e)],interactionHints:Ki}}async function Ji(e,t){let n=(await e(`
25
+ `):`Current provider "${e}" was not found in providers.`}function Vi(e,t){return e===void 0||e.length===0?{message:`Provider setup requested. Select a provider to continue.`,success:!0,interaction:Hi(t)}:Vt(t.providerDefinitions,e)===void 0?{message:`Usage: provider add <type>. Supported: ${g(t.providerDefinitions)}`,success:!1}:{message:`Provider setup requested: ${e}`,success:!0,interaction:K(ai(e,t),t)}}function Hi(e){return{prompt:{kind:`choice`,title:`Select provider`,options:e.providerDefinitions.map(e=>({value:e.type,label:U(e)})),maxVisible:6},submit:t=>{let n=ai(t,e);return{message:`Provider setup requested: ${t}`,success:!0,interaction:K(n,e)}},cancel:()=>({message:`Provider setup cancelled.`,success:!0})}}function Ui(){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 J(){return{name:`provider`,displayName:`Provider Setup`,description:`Manage provider profiles`,source:`provider`,modelInvocable:!1,argumentHint:`current | list | switch <profile> | add [type] | test [profile]`,subcommands:Ui(),example:`/provider switch production`}}var Wi=class{name=`provider`;getCommands(){return[J()]}};function Gi(e){let t=J();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,execute:async(t,n)=>Li(n,e)}}const Ki={provider:{type:`pick`,getItems:()=>Ui().map(e=>({label:e.name,value:e.name,description:e.description}))}};function qi(e){return{name:`agent-command-provider`,commandSources:[new Wi],systemCommands:[Gi(e)],interactionHints:Ki}}async function Ji(e,t){let n=(await e(`
26
26
  Do you have an API key for an AI provider?
27
27
 
28
28
  1. Yes, I have an API key
@@ -49,15 +49,15 @@ import{BACKGROUND_COMMAND_DESCRIPTION as e,BACKGROUND_COMMAND_USAGE as t,BundleP
49
49
  When the server is running, come back here and press Enter to continue.
50
50
 
51
51
  ─────────────────────────────────────────────────────────────────────────────
52
- `),await e(` Press Enter when LM Studio server is running: `),{path:`local`,preselectedType:`gemma`}):{path:`has-key`}}async function Yi(e,t,n,r,i){let a=await Ji(n,r),o=Object.keys(p(e).providers??{}),s=Ot(e,t.settingsScope),c;c=a.preselectedType===void 0?qr(await n(Kr(i)),i):a.preselectedType,Ce(s,await Jr(c,n,i,{existingProfileNames:o}),{providerDefinitions:i});let l=await n(` Response language (ko/en/ja/zh, default: en): `);if(l){let e=Ct(s);e.language=l,Ht(s,e)}r.writeLine(`\n Config saved to ${s}\n`)}async function Xi(e,t,n,r,i,a){let o=p(e);if(Me(t.provider===void 0?o:{...o,currentProvider:t.provider},i)===`valid`)return;if(!(a.isInteractive??(()=>!1))())throw Error(a.formatError(i));await Yi(e,Zi(e,t),n,r,i);let s=p(e);if(Me(t.provider===void 0?s:{...s,currentProvider:t.provider},i)!==`valid`)throw Error(a.formatError(i))}function Zi(e,t){if(t.settingsScope!==void 0||t.provider!==void 0)return t;let n=Qi($e(e));if(n===void 0)return t;let r=g(e,`.robota`,`settings.json`),i=g(e,`.robota`,`settings.local.json`);return n===r||n===i?{...t,settingsScope:`project-local`}:t}function Qi(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n!==void 0&&typeof Ct(n).currentProvider==`string`)return n}}function $i(e,t){return{success:!0,message:`Reset requested.`,data:{resetRequested:!0},effects:[{type:`settings-reset-requested`}]}}function J(){return{name:`reset`,displayName:`Reset Settings`,description:`Delete settings`,source:`reset`,modelInvocable:!1}}function ea(){let e=J();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!0,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:$i}}var ta=class{name=`reset`;getCommands(){return[J()]}};function na(){return{name:`agent-command-reset`,commandSources:[new ta],systemCommands:[ea()]}}function Y(){return{message:`Usage: rewind [list] | rewind inspect <checkpoint-id> | rewind restore <checkpoint-id> | rewind code <checkpoint-id> | rewind rollback <checkpoint-id>`,success:!1}}function ra(e){let t=e.replace(/\s+/g,` `).trim();return t.length<=120?t:`${t.slice(0,117)}...`}function ia(e){return{message:[`Edit checkpoints:`,...e.length>0?e.map(e=>`- ${e.id} files=${e.fileCount} ${e.createdAt} ${ra(e.prompt)}`):[`(no edit checkpoints)`]].join(`
53
- `),success:!0,data:{count:e.length,checkpoints:[...e]}}}function aa(e){return e.length>0?e.join(`, `):`(none)`}function oa(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: ${ra(e.target.prompt)}`,`Captured files:`,...t,`Restore later checkpoints: files=${e.restoreToCheckpoint.fileCount} checkpoints=${aa(e.restoreToCheckpoint.checkpointIds)}`,`Rollback through checkpoint: files=${e.rollbackThroughCheckpoint.fileCount} checkpoints=${aa(e.rollbackThroughCheckpoint.checkpointIds)}`].join(`
54
- `),success:!0,data:{inspection:e}}}function sa(e){return{message:[`Restored code to ${e.target.id}.`,`Restored files: ${e.restoredFileCount}`,`Rolled back checkpoints: ${e.restoredCheckpointCount}`].join(`
55
- `),success:!0,data:{target:e.target,restoredCheckpointCount:e.restoredCheckpointCount,restoredFileCount:e.restoredFileCount,removedCheckpointCount:e.removedCheckpointCount}}}function ca(e){return{message:[`Rolled back code through ${e.target.id}.`,`Restored files: ${e.restoredFileCount}`,`Removed checkpoints: ${e.removedCheckpointCount}`].join(`
56
- `),success:!0,data:{target:e.target,restoredCheckpointCount:e.restoredCheckpointCount,restoredFileCount:e.restoredFileCount,removedCheckpointCount:e.removedCheckpointCount}}}function la(e){return{message:e instanceof Error?e.message:String(e),success:!1}}function ua(e,t){if(!t)return Y();try{return oa(tt(e,t))}catch(e){return la(e instanceof Error?e:String(e))}}async function da(e,t){if(!t)return Y();try{return sa(await kt(e,t))}catch(e){return la(e instanceof Error?e:String(e))}}async function fa(e,t){if(!t)return Y();try{return ca(await At(e,t))}catch(e){return la(e instanceof Error?e:String(e))}}async function pa(e,t){let n=t.trim().split(/\s+/).filter(Boolean),r=n[0]??`list`;return r===`list`?ia(lt(e)):r===`inspect`?ua(e,n[1]):r===`restore`||r===`code`?da(e,n[1]):r===`rollback`?fa(e,n[1]):Y()}function ma(){return{name:`rewind`,displayName:`Rewind History`,description:_e,source:`rewind`,argumentHint:ge,modelInvocable:!1,safety:`write`,subcommands:ke()}}function ha(){let e=ma();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:pa}}var ga=class{name=`rewind`;getCommands(){return[ma()]}};function _a(){return{name:`agent-command-rewind`,commandSources:[new ga],systemCommands:[ha()]}}const va={"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}},ya=[{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 ba(e){let t=va[e];if(t)return t;for(let{pattern:t,price:n}of ya)if(t.test(e))return n}function xa(e,t,n){let r=ba(e);if(r)return t/1e6*r.inputPerMillion+n/1e6*r.outputPerMillion}function X(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}function Sa(e){return e.toLocaleString(`en-US`)}const Ca=`Conversation cleared.`;function wa(e,t){return Pe(e),{success:!0,message:Ca,effects:[{type:`conversation-history-cleared`}]}}function Ta(e,t){let n=gt(t);return n===void 0?{success:!1,message:me}:{success:!0,message:`Session renamed to "${n}".`,data:{name:n},effects:[He(n)]}}function Ea(e,t){return{success:!0,message:`Opening session picker...`,data:{triggerResumePicker:!0},effects:[Ve()]}}const Da=`.robota/budget.json`;function Oa(e){let t=g(e,Da);if(!Ut(t))return;let n;try{n=Gt(t,`utf-8`)}catch{return}try{return JSON.parse(n)}catch{return}}function ka(e,t){Wt(g(e,`.robota`),{recursive:!0}),Kt(g(e,Da),JSON.stringify(t,null,2))}function Aa(e){let t=g(e,Da);Ut(t)&&Kt(t,`{}`)}function ja(e){let t=e.getSession(),n=St(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: ${Sa(r.inputTokens)} input / ${Sa(r.outputTokens)} output`),o.inputTokens=r.inputTokens,o.outputTokens=r.outputTokens,i){let t=xa(i,r.inputTokens,r.outputTokens);if(t!==void 0){a.push(`Cost: ${X(t)} (${i})`),o.estimatedCostUsd=t;let n=Oa(e.getCwd());if(n?.monthly){let e=n.monthly-t,r=Math.min(100,Math.round(t/n.monthly*100));a.push(`Budget: ${X(e)} remaining of ${X(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 Ma(e,t){let n=t.trim();if(n.startsWith(`budget`)){let t=n.slice(6).trim();if(t===`clear`)return Aa(e.getCwd()),{success:!0,message:`Monthly budget cleared.`};if(t===``){let t=Oa(e.getCwd());return t?.monthly?{success:!0,message:`Monthly budget: ${X(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)`}:(ka(e.getCwd(),{monthly:r}),{success:!0,message:`Monthly budget set to ${X(r)}.`})}let{lines:r,data:i}=ja(e);return{success:!0,message:r.join(`
57
- `),data:i}}function Na(e,t){let n=zt(e);return{success:n.validation.ok,message:Ye(n),data:{logFile:n.logFile,entryCount:n.entryCount,issueCount:n.validation.issues.length,ok:n.validation.ok}}}function Z(){return{name:`clear`,displayName:`Clear History`,description:i,source:`session`,modelInvocable:!1}}function Pa(){return{name:`rename`,displayName:`Rename Session`,description:pe,source:`session`,modelInvocable:!1}}function Fa(){return{name:`resume`,displayName:`Resume Session`,description:he,source:`session`,modelInvocable:!1}}function Ia(){return{name:`cost`,displayName:`Session Cost`,description:a,source:`session`,modelInvocable:!1}}function La(){return{name:`validate-session`,displayName:`Validate Session`,description:xe,source:`session`,modelInvocable:!1}}function Ra(){let e=Z();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:wa}}function za(){let e=Pa();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Ta}}function Ba(){let e=Fa();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Ea}}function Va(){let e=Ia();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Ma}}function Ha(){let e=La();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Na}}var Ua=class{name=`session`;getCommands(){return[Z(),Pa(),Fa(),Ia(),La()]}};const Wa={clear:{type:`confirm`,message:`Clear conversation history?`}};function Ga(){return{name:`agent-command-session`,commandSources:[new Ua],systemCommands:[Ra(),za(),Ba(),Va(),Ha()],interactionHints:Wa}}function Ka(){return{name:`settings`,displayName:`Settings`,description:`Open transport settings — enable/disable transports and configure options`,source:`settings`,modelInvocable:!1}}function qa(){let e=Ka();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 Ja=class{name=`settings`;getCommands(){return[Ka()]}};function Ya(){return{name:`agent-command-settings`,commandSources:[new Ja],systemCommands:[qa()]}}const Xa=`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".`;function Za(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 Qa(e){let t=e.argumentHint?` ${e.argumentHint}`:``;return`- ${e.name}${t}: ${e.description}${Za(e)}`}function $a(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(`
58
- `):[`Registered skills:`,...e.map(Qa),``,`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(`
59
- `)}function eo(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 to(e,t=``){let n=eo(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:$a(r),data:{skills:r,activationContract:{activateWith:`/skills <skill-name> [args]`,activationRequiredBeforeWorkflow:!0,metadataIsNotSkillContent:!0}}}}function no(){return{name:`skills`,displayName:`Skills`,description:Xa,source:`skills`,modelInvocable:!0,userInvocable:!0,argumentHint:`[list | <skill-name> [args]]`,safety:`read-only`}}function ro(){let e=no();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:to}}var io=class{name=`skills`;getCommands(){return[no()]}};function ao(e){let t=[new io];return t.push(new be(e.cwd)),{name:`agent-command-skills`,commandSources:t,systemCommands:[ro()]}}const oo=[`Usage: /statusline on | off | reset | git on | git off`,`Fields: model, context, permission mode, message count, session name, thinking state, git branch.`].join(`
60
- `);function so(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:{...s}}: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:oo}}function co(e,t){let n=so(t);return n.success?{success:!0,message:n.message,effects:[{type:`statusline-settings-patch`,patch:n.patch}]}:{success:!1,message:n.message}}function lo(){return{name:`statusline`,displayName:`Status Line`,description:ye,source:`statusline`,argumentHint:ve,subcommands:Ae(`statusline`),modelInvocable:!1}}function uo(){let e=lo();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:co}}var fo=class{name=`statusline`;getCommands(){return[lo()]}};function po(){return{name:`agent-command-statusline`,commandSources:[new fo],systemCommands:[uo()]}}const mo=`Inspect Robota user-local storage and memory state.`,ho=`storage list [--format json] | memory set/list/inspect/disable/delete`,Q=`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 go(e){return e.length===0?`No user-local memory items.`:e.map(e=>`- ${e.category}/${e.key} (${e.enabled?`enabled`:`disabled`})`).join(`
61
- `)}function $(e){if(e===void 0)throw Error(`User-local memory category is required.`);return e}async function _o(e,t){let n=await dt({activeRepositoryRoot:e});return{message:t.format===`json`?JSON.stringify(n,null,2):go(n.items),success:!0,data:{list:n}}}async function vo(e,t){let[n,r,i]=t.positional,a=await Pt({activeRepositoryRoot:e,category:$(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 yo(e,t){let[n,r]=t.positional,i=await nt({activeRepositoryRoot:e,category:$(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 bo(e,t){let[n,r]=t.positional,i=await Ge({activeRepositoryRoot:e,category:$(n),key:r??``});return{message:`Disabled user-local memory item ${i.category}/${i.key}`,success:!0,data:{item:i}}}async function xo(e,t){let[n,r]=t.positional,i=await We({activeRepositoryRoot:e,category:$(n),key:r??``});return{message:`Deleted user-local memory item ${i.category}/${i.key}`,success:!0,data:{result:i}}}async function So(e,t){return(t.action??`list`)===`list`?_o(e,t):t.action===`set`?vo(e,t):t.action===`inspect`?yo(e,t):t.action===`disable`?bo(e,t):t.action===`delete`?xo(e,t):{message:Q,success:!1}}function Co(e){if(e===void 0||e===`text`)return`text`;if(e===`json`)return`json`;throw Error(`Unsupported user-local output format: ${e}`)}function wo(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 To(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=wo(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:Co(n),summary:r,source:i}}function Eo(e){return e.trim().split(/\s+/).filter(Boolean)}function Do(e,t){let n=t.map(e=>`- ${e.category}`);return[`User-local storage root: ${e}`,`Categories:`,...n].join(`
62
- `)}async function Oo(e,t){if((t.action??`list`)!==`list`)return{message:Q,success:!1};let n=await rt({activeRepositoryRoot:e});return{message:t.format===`json`?JSON.stringify(n,null,2):Do(n.root,n.categories),success:!0,data:{root:n.root,categories:n.categories,inspection:n}}}async function ko(e,t){return t.target===`storage`?Oo(e,t):t.target===`memory`?So(e,t):{message:Q,success:!1}}function Ao(e){return e.includes(`ENOENT`)?`User-local memory item not found.`:e}async function jo(e){try{return await ko(e.cwd,To(e.argv,{format:e.format,summary:e.summary,source:e.source}))}catch(e){return{message:Ao(e instanceof Error?e.message:String(e)),success:!1}}}async function Mo(e,t){try{return await ko(e.getCwd(),To(Eo(t)))}catch(e){return{message:Ao(e instanceof Error?e.message:String(e)),success:!1}}}function No(){return{name:`user-local`,displayName:`User Config`,description:mo,source:`user-local`,argumentHint:ho,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 Po(){let e=No();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:Mo}}var Fo=class{name=`user-local`;getCommands(){return[No()]}};function Io(){return{name:`agent-command-user-local`,commandSources:[new Fo],systemCommands:[Po()]}}function Lo({cwd:e,providerDefinitions:t,providerSettingsAdapter:n}){return[ao({cwd:e}),ar(),xn(),jr(),Dr(),ur(),En(),Sr(),Io(),jn(),Yn(),tr(),Ga(),na(),_a(),po(),Gr(),Ya(),qi({providerDefinitions:t,settings:n})]}function Ro(e){let t=Jt(),i=g(t,`.robota`,`plugins`),a=g(t,`.robota`,`settings.json`),o=(e,t)=>qt(e,{timeout:t.timeout,stdio:t.stdio??`pipe`}),s=new de(a),c=new ie({pluginsDir:i,exec:o});return{cwd:e,marketplace:c,installer:new n({pluginsDir:i,settingsStore:s,marketplaceClient:c,exec:o}),loader:new r(i),settingsStore:s}}async function zo(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 Bo(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 Vo(e,t,r){let[i,a]=t.split(`@`);if(!i||!a)throw Error(`Plugin ID must be in format: name@marketplace`);if(r===`project`){await new n({pluginsDir:g(e.cwd,`.robota`,`plugins`),settingsStore:e.settingsStore,marketplaceClient:e.marketplace,exec:(e,t)=>qt(e,{timeout:t.timeout,stdio:t.stdio??`pipe`})}).install(i,a);return}await e.installer.install(i,a)}async function Ho(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 Uo(e){return e.marketplace.listMarketplaces().map(e=>({name:e.name,type:e.source.type}))}function Wo(e){let t=Ro(e);return{listInstalled:()=>zo(t),listAvailablePlugins:e=>Bo(t,e),install:(e,n)=>Vo(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=>Ho(t,e),marketplaceUpdate:async e=>t.marketplace.updateMarketplace(e),marketplaceList:async()=>Uo(t),reloadPlugins:async()=>({loadedPluginCount:(await t.loader.loadAll()).length})}}const Go=`plugin`;function Ko(){return process.env.HOME??Jt()}function qo(e){let t=new r(g(Ko(),`.robota`,`plugins`));try{let n=t.loadPluginsSync();return n.length===0?(e.replaceSource(Go),0):(e.replaceSource(Go,new ue(n)),n.length)}catch{return e.replaceSource(Go),0}}export{bn as AgentCommandSource,Tn as BackgroundCommandSource,Ca as CLEAR_COMMAND_MESSAGE,An as CompactCommandSource,Jn as ContextCommandSource,$n as ExitCommandSource,ir as HelpCommandSource,cr as LanguageCommandSource,xr as MemoryCommandSource,Tr as ModeCommandSource,Ar as PermissionsCommandSource,Wr as PluginManagerCommandSource,Wi as ProviderCommandSource,ga as RewindCommandSource,Xa as SKILLS_COMMAND_DESCRIPTION,oo as STATUSLINE_USAGE,Ua as SessionCommandSource,Ja as SettingsCommandSource,io as SkillsCommandSource,fo as StatusLineCommandSource,ho as USER_LOCAL_COMMAND_ARGUMENT_HINT,mo as USER_LOCAL_COMMAND_DESCRIPTION,Q as USER_LOCAL_COMMAND_USAGE,Fo as UserLocalCommandSource,y as createAgentCommandEntry,xn as createAgentCommandModule,yn as createAgentSystemCommand,b as createBackgroundCommandEntry,En as createBackgroundCommandModule,Z as createClearCommandEntry,x as createCompactCommandEntry,jn as createCompactCommandModule,Kn as createContextCommandEntry,Yn as createContextCommandModule,Ia as createCostCommandEntry,Lo as createDefaultCommandModules,Wo as createDefaultPluginCommandAdapter,Zn as createExitCommandEntry,tr as createExitCommandModule,O as createHelpCommandEntry,ar as createHelpCommandModule,k as createLanguageCommandEntry,ur as createLanguageCommandModule,M as createMemoryCommandEntry,Sr as createMemoryCommandModule,N as createModeCommandEntry,Dr as createModeCommandModule,P as createPermissionsCommandEntry,jr as createPermissionsCommandModule,R as createPluginCommandEntry,Gr as createPluginCommandModule,q as createProviderCommandEntry,qi as createProviderCommandModule,B as createProviderSetupFlow,z as createReloadPluginsCommandEntry,Pa as createRenameCommandEntry,J as createResetCommandEntry,na as createResetCommandModule,Fa as createResumeCommandEntry,_a as createRewindCommandModule,Ga as createSessionCommandModule,Ka as createSettingsCommandEntry,Ya as createSettingsCommandModule,no as createSkillsCommandEntry,ao as createSkillsCommandModule,lo as createStatusLineCommandEntry,po as createStatusLineCommandModule,No as createUserLocalCommandEntry,Io as createUserLocalCommandModule,La as createValidateSessionCommandEntry,Xi as ensureProviderConfig,hn as executeAgentCommand,Cn as executeBackgroundCommand,wa as executeClearCommand,On as executeCompactCommand,Nn as executeContextCommand,Ma as executeCostCommand,Xn as executeExitCommand,nr as executeHelpCommand,or as executeLanguageCommand,yr as executeMemoryCommand,Cr as executeModeCommand,Or as executePermissionsCommand,Br as executePluginCommand,Li as executeProviderCommand,Vr as executeReloadPluginsCommand,Ta as executeRenameCommand,$i as executeResetCommand,Ea as executeResumeCommand,pa as executeRewindCommand,to as executeSkillsCommand,co as executeStatusLineCommand,Mo as executeUserLocalCommand,jo as executeUserLocalDirectCommand,Na as executeValidateSessionCommand,U as formatProviderSetupChoiceLabel,W as formatProviderSetupHelpLinks,Yr as formatProviderSetupPromptLabel,Kr as formatProviderSetupSelectionPrompt,V as getProviderSetupStep,qo as reloadPluginCommandSource,qr as resolveProviderSetupSelection,Jr as runProviderSetupPromptFlow,Yi as runProviderStartupSetup,H as submitProviderSetupValue,Qr as validateProviderSetupValue};
52
+ `),await e(` Press Enter when LM Studio server is running: `),{path:`local`,preselectedType:`gemma`}):{path:`has-key`}}async function Yi(e,t,n,r,i){let a=await Ji(n,r),o=Object.keys(bt(e).providers??{}),s=Et(e,t.settingsScope),c;c=a.preselectedType===void 0?Jr(await n(qr(i)),i):a.preselectedType,xe(s,await Yr(c,n,i,{existingProfileNames:o}),{providerDefinitions:i});let l=await n(` Response language (ko/en/ja/zh, default: en): `);if(l){let e=xt(s);e.language=l,Bt(s,e)}r.writeLine(`\n Config saved to ${s}\n`)}async function Xi(e,t,n,r,i,a){let o=bt(e);if(Ae(t.provider===void 0?o:{...o,currentProvider:t.provider},i)===`valid`)return;if(!(a.isInteractive??(()=>!1))())throw Error(a.formatError(i));await Yi(e,Zi(e,t),n,r,i);let s=bt(e);if(Ae(t.provider===void 0?s:{...s,currentProvider:t.provider},i)!==`valid`)throw Error(a.formatError(i))}function Zi(e,t){if(t.settingsScope!==void 0||t.provider!==void 0)return t;let n=Qi(Ze(e));if(n===void 0)return t;let r=_(e,`.robota`,`settings.json`),i=_(e,`.robota`,`settings.local.json`);return n===r||n===i?{...t,settingsScope:`project-local`}:t}function Qi(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n!==void 0&&typeof xt(n).currentProvider==`string`)return n}}function $i(e,t){return{success:!0,message:`Reset requested.`,data:{resetRequested:!0},effects:[{type:`settings-reset-requested`}]}}function ea(){return{name:`reset`,displayName:`Reset Settings`,description:`Delete settings`,source:`reset`,modelInvocable:!1}}function ta(){let e=ea();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!0,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:$i}}var na=class{name=`reset`;getCommands(){return[ea()]}};function ra(){return{name:`agent-command-reset`,commandSources:[new na],systemCommands:[ta()]}}function Y(){return{message:`Usage: rewind [list] | rewind inspect <checkpoint-id> | rewind restore <checkpoint-id> | rewind code <checkpoint-id> | rewind rollback <checkpoint-id>`,success:!1}}function ia(e){let t=e.replace(/\s+/g,` `).trim();return t.length<=120?t:`${t.slice(0,117)}...`}function aa(e){return{message:[`Edit checkpoints:`,...e.length>0?e.map(e=>`- ${e.id} files=${e.fileCount} ${e.createdAt} ${ia(e.prompt)}`):[`(no edit checkpoints)`]].join(`
53
+ `),success:!0,data:{count:e.length,checkpoints:[...e]}}}function oa(e){return e.length>0?e.join(`, `):`(none)`}function sa(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: ${ia(e.target.prompt)}`,`Captured files:`,...t,`Restore later checkpoints: files=${e.restoreToCheckpoint.fileCount} checkpoints=${oa(e.restoreToCheckpoint.checkpointIds)}`,`Rollback through checkpoint: files=${e.rollbackThroughCheckpoint.fileCount} checkpoints=${oa(e.rollbackThroughCheckpoint.checkpointIds)}`].join(`
54
+ `),success:!0,data:{inspection:e}}}function ca(e){return{message:[`Restored code to ${e.target.id}.`,`Restored files: ${e.restoredFileCount}`,`Rolled back checkpoints: ${e.restoredCheckpointCount}`].join(`
55
+ `),success:!0,data:{target:e.target,restoredCheckpointCount:e.restoredCheckpointCount,restoredFileCount:e.restoredFileCount,removedCheckpointCount:e.removedCheckpointCount}}}function la(e){return{message:[`Rolled back code through ${e.target.id}.`,`Restored files: ${e.restoredFileCount}`,`Removed checkpoints: ${e.removedCheckpointCount}`].join(`
56
+ `),success:!0,data:{target:e.target,restoredCheckpointCount:e.restoredCheckpointCount,restoredFileCount:e.restoredFileCount,removedCheckpointCount:e.removedCheckpointCount}}}function ua(e){return{message:e instanceof Error?e.message:String(e),success:!1}}function da(e,t){if(!t)return Y();try{return sa($e(e,t))}catch(e){return ua(e instanceof Error?e:String(e))}}async function fa(e,t){if(!t)return Y();try{return ca(await Dt(e,t))}catch(e){return ua(e instanceof Error?e:String(e))}}async function pa(e,t){if(!t)return Y();try{return la(await Ot(e,t))}catch(e){return ua(e instanceof Error?e:String(e))}}async function ma(e,t){let n=t.trim().split(/\s+/).filter(Boolean),r=n[0]??`list`;return r===`list`?aa(st(e)):r===`inspect`?da(e,n[1]):r===`restore`||r===`code`?fa(e,n[1]):r===`rollback`?pa(e,n[1]):Y()}function ha(){return{name:`rewind`,displayName:`Rewind History`,description:he,source:`rewind`,argumentHint:me,modelInvocable:!1,safety:`write`,subcommands:De()}}function ga(){let e=ha();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:ma}}var _a=class{name=`rewind`;getCommands(){return[ha()]}};function va(){return{name:`agent-command-rewind`,commandSources:[new _a],systemCommands:[ga()]}}const ya={"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}},ba=[{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 xa(e){let t=ya[e];if(t)return t;for(let{pattern:t,price:n}of ba)if(t.test(e))return n}function Sa(e,t,n){let r=xa(e);if(r)return t/1e6*r.inputPerMillion+n/1e6*r.outputPerMillion}function X(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}function Ca(e){return e.toLocaleString(`en-US`)}const wa=`Conversation cleared.`;function Ta(e,t){return Me(e),{success:!0,message:wa,effects:[{type:`conversation-history-cleared`}]}}function Ea(e,t){let n=mt(t);return n===void 0?{success:!1,message:fe}:{success:!0,message:`Session renamed to "${n}".`,data:{name:n},effects:[Be(n)]}}function Da(e,t){return{success:!0,message:`Opening session picker...`,data:{triggerResumePicker:!0},effects:[ze()]}}const Oa=`.robota/budget.json`;function ka(e){let t=_(e,Oa);if(!Ht(t))return;let n;try{n=Wt(t,`utf-8`)}catch{return}try{return JSON.parse(n)}catch{return}}function Aa(e,t){Ut(_(e,`.robota`),{recursive:!0}),Gt(_(e,Oa),JSON.stringify(t,null,2))}function ja(e){let t=_(e,Oa);Ht(t)&&Gt(t,`{}`)}function Ma(e){let t=e.getSession(),n=yt(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: ${Ca(r.inputTokens)} input / ${Ca(r.outputTokens)} output`),o.inputTokens=r.inputTokens,o.outputTokens=r.outputTokens,i){let t=Sa(i,r.inputTokens,r.outputTokens);if(t!==void 0){a.push(`Cost: ${X(t)} (${i})`),o.estimatedCostUsd=t;let n=ka(e.getCwd());if(n?.monthly){let e=n.monthly-t,r=Math.min(100,Math.round(t/n.monthly*100));a.push(`Budget: ${X(e)} remaining of ${X(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 Na(e,t){let n=t.trim();if(n.startsWith(`budget`)){let t=n.slice(6).trim();if(t===`clear`)return ja(e.getCwd()),{success:!0,message:`Monthly budget cleared.`};if(t===``){let t=ka(e.getCwd());return t?.monthly?{success:!0,message:`Monthly budget: ${X(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)`}:(Aa(e.getCwd(),{monthly:r}),{success:!0,message:`Monthly budget set to ${X(r)}.`})}let{lines:r,data:i}=Ma(e);return{success:!0,message:r.join(`
57
+ `),data:i}}function Pa(e,t){let n=Lt(e);return{success:n.validation.ok,message:qe(n),data:{logFile:n.logFile,entryCount:n.entryCount,issueCount:n.validation.issues.length,ok:n.validation.ok}}}function Fa(){return{name:`clear`,displayName:`Clear History`,description:i,source:`session`,modelInvocable:!1}}function Ia(){return{name:`rename`,displayName:`Rename Session`,description:de,source:`session`,modelInvocable:!1}}function La(){return{name:`resume`,displayName:`Resume Session`,description:pe,source:`session`,modelInvocable:!1}}function Ra(){return{name:`cost`,displayName:`Session Cost`,description:a,source:`session`,modelInvocable:!1}}function za(){return{name:`validate-session`,displayName:`Validate Session`,description:ye,source:`session`,modelInvocable:!1}}function Ba(){let e=Fa();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Ta}}function Va(){let e=Ia();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Ea}}function Ha(){let e=La();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Da}}function Ua(){let e=Ra();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Na}}function Wa(){let e=za();return{name:e.name,displayName:e.displayName,description:e.description,requiresPermission:!1,userInvocable:!0,modelInvocable:!1,lifecycle:`inline`,execute:Pa}}var Ga=class{name=`session`;getCommands(){return[Fa(),Ia(),La(),Ra(),za()]}};const Ka={clear:{type:`confirm`,message:`Clear conversation history?`}};function qa(){return{name:`agent-command-session`,commandSources:[new Ga],systemCommands:[Ba(),Va(),Ha(),Ua(),Wa()],interactionHints:Ka}}function Ja(){return{name:`settings`,displayName:`Settings`,description:`Open transport settings — enable/disable transports and configure options`,source:`settings`,modelInvocable:!1}}function Ya(){let e=Ja();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 Xa=class{name=`settings`;getCommands(){return[Ja()]}};function Za(){return{name:`agent-command-settings`,commandSources:[new Xa],systemCommands:[Ya()]}}const Qa=`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".`;function $a(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 eo(e){let t=e.argumentHint?` ${e.argumentHint}`:``;return`- ${e.name}${t}: ${e.description}${$a(e)}`}function to(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(`
58
+ `):[`Registered skills:`,...e.map(eo),``,`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(`
59
+ `)}function no(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 ro(e,t=``){let n=no(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:to(r),data:{skills:r,activationContract:{activateWith:`/skills <skill-name> [args]`,activationRequiredBeforeWorkflow:!0,metadataIsNotSkillContent:!0}}}}function io(){return{name:`skills`,displayName:`Skills`,description:Qa,source:`skills`,modelInvocable:!0,userInvocable:!0,argumentHint:`[list | <skill-name> [args]]`,safety:`read-only`}}function ao(){let e=io();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:ro}}var oo=class{name=`skills`;getCommands(){return[io()]}};function so(e){let t=[new oo];return t.push(new ve(e.cwd)),{name:`agent-command-skills`,commandSources:t,systemCommands:[ao()]}}const co=[`Usage: /statusline on | off | reset | git on | git off`,`Fields: model, context, permission mode, message count, session name, thinking state, git branch.`].join(`
60
+ `);function lo(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:{...s}}: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:co}}function uo(e,t){let n=lo(t);return n.success?{success:!0,message:n.message,effects:[{type:`statusline-settings-patch`,patch:n.patch}]}:{success:!1,message:n.message}}function Z(){return{name:`statusline`,displayName:`Status Line`,description:_e,source:`statusline`,argumentHint:ge,subcommands:Oe(`statusline`),modelInvocable:!1}}function fo(){let e=Z();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:uo}}var po=class{name=`statusline`;getCommands(){return[Z()]}};function mo(){return{name:`agent-command-statusline`,commandSources:[new po],systemCommands:[fo()]}}const ho=`Inspect Robota user-local storage and memory state.`,go=`storage list [--format json] | memory set/list/inspect/disable/delete`,Q=`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 _o(e){return e.length===0?`No user-local memory items.`:e.map(e=>`- ${e.category}/${e.key} (${e.enabled?`enabled`:`disabled`})`).join(`
61
+ `)}function $(e){if(e===void 0)throw Error(`User-local memory category is required.`);return e}async function vo(e,t){let n=await lt({activeRepositoryRoot:e});return{message:t.format===`json`?JSON.stringify(n,null,2):_o(n.items),success:!0,data:{list:n}}}async function yo(e,t){let[n,r,i]=t.positional,a=await Mt({activeRepositoryRoot:e,category:$(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 bo(e,t){let[n,r]=t.positional,i=await et({activeRepositoryRoot:e,category:$(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 xo(e,t){let[n,r]=t.positional,i=await Ue({activeRepositoryRoot:e,category:$(n),key:r??``});return{message:`Disabled user-local memory item ${i.category}/${i.key}`,success:!0,data:{item:i}}}async function So(e,t){let[n,r]=t.positional,i=await He({activeRepositoryRoot:e,category:$(n),key:r??``});return{message:`Deleted user-local memory item ${i.category}/${i.key}`,success:!0,data:{result:i}}}async function Co(e,t){return(t.action??`list`)===`list`?vo(e,t):t.action===`set`?yo(e,t):t.action===`inspect`?bo(e,t):t.action===`disable`?xo(e,t):t.action===`delete`?So(e,t):{message:Q,success:!1}}function wo(e){if(e===void 0||e===`text`)return`text`;if(e===`json`)return`json`;throw Error(`Unsupported user-local output format: ${e}`)}function To(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 Eo(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=To(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:wo(n),summary:r,source:i}}function Do(e){return e.trim().split(/\s+/).filter(Boolean)}function Oo(e,t){let n=t.map(e=>`- ${e.category}`);return[`User-local storage root: ${e}`,`Categories:`,...n].join(`
62
+ `)}async function ko(e,t){if((t.action??`list`)!==`list`)return{message:Q,success:!1};let n=await tt({activeRepositoryRoot:e});return{message:t.format===`json`?JSON.stringify(n,null,2):Oo(n.root,n.categories),success:!0,data:{root:n.root,categories:n.categories,inspection:n}}}async function Ao(e,t){return t.target===`storage`?ko(e,t):t.target===`memory`?Co(e,t):{message:Q,success:!1}}function jo(e){return e.includes(`ENOENT`)?`User-local memory item not found.`:e}async function Mo(e){try{return await Ao(e.cwd,Eo(e.argv,{format:e.format,summary:e.summary,source:e.source}))}catch(e){return{message:jo(e instanceof Error?e.message:String(e)),success:!1}}}async function No(e,t){try{return await Ao(e.getCwd(),Eo(Do(t)))}catch(e){return{message:jo(e instanceof Error?e.message:String(e)),success:!1}}}function Po(){return{name:`user-local`,displayName:`User Config`,description:ho,source:`user-local`,argumentHint:go,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 Fo(){let e=Po();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:No}}var Io=class{name=`user-local`;getCommands(){return[Po()]}};function Lo(){return{name:`agent-command-user-local`,commandSources:[new Io],systemCommands:[Fo()]}}function Ro({cwd:e,providerDefinitions:t,providerSettingsAdapter:n}){return[so({cwd:e}),or(),bn(),Mr(),Or(),dr(),Tn(),Cr(),Lo(),An(),Zn(),nr(),qa(),ra(),va(),mo(),Kr(),Za(),qi({providerDefinitions:t,settings:n})]}function zo(e){let t=qt(),i=_(t,`.robota`,`plugins`),a=_(t,`.robota`,`settings.json`),o=(e,t)=>Kt(e,{timeout:t.timeout,stdio:t.stdio??`pipe`}),s=new le(a),c=new u({pluginsDir:i,exec:o});return{cwd:e,marketplace:c,installer:new n({pluginsDir:i,settingsStore:s,marketplaceClient:c,exec:o}),loader:new r(i),settingsStore:s}}async function Bo(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 Vo(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 Ho(e,t,r){let[i,a]=t.split(`@`);if(!i||!a)throw Error(`Plugin ID must be in format: name@marketplace`);if(r===`project`){await new n({pluginsDir:_(e.cwd,`.robota`,`plugins`),settingsStore:e.settingsStore,marketplaceClient:e.marketplace,exec:(e,t)=>Kt(e,{timeout:t.timeout,stdio:t.stdio??`pipe`})}).install(i,a);return}await e.installer.install(i,a)}async function Uo(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 Wo(e){return e.marketplace.listMarketplaces().map(e=>({name:e.name,type:e.source.type}))}function Go(e){let t=zo(e);return{listInstalled:()=>Bo(t),listAvailablePlugins:e=>Vo(t,e),install:(e,n)=>Ho(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=>Uo(t,e),marketplaceUpdate:async e=>t.marketplace.updateMarketplace(e),marketplaceList:async()=>Wo(t),reloadPlugins:async()=>({loadedPluginCount:(await t.loader.loadAll()).length})}}const Ko=`plugin`;function qo(){return process.env.HOME??qt()}function Jo(e){let t=new r(_(qo(),`.robota`,`plugins`));try{let n=t.loadPluginsSync();return n.length===0?(e.replaceSource(Ko),0):(e.replaceSource(Ko,new ce(n)),n.length)}catch{return e.replaceSource(Ko),0}}export{yn as AgentCommandSource,wn as BackgroundCommandSource,wa as CLEAR_COMMAND_MESSAGE,kn as CompactCommandSource,Xn as ContextCommandSource,er as ExitCommandSource,ar as HelpCommandSource,lr as LanguageCommandSource,Sr as MemoryCommandSource,Er as ModeCommandSource,jr as PermissionsCommandSource,Gr as PluginManagerCommandSource,Wi as ProviderCommandSource,_a as RewindCommandSource,Qa as SKILLS_COMMAND_DESCRIPTION,co as STATUSLINE_USAGE,Ga as SessionCommandSource,Xa as SettingsCommandSource,oo as SkillsCommandSource,po as StatusLineCommandSource,go as USER_LOCAL_COMMAND_ARGUMENT_HINT,ho as USER_LOCAL_COMMAND_DESCRIPTION,Q as USER_LOCAL_COMMAND_USAGE,Io as UserLocalCommandSource,b as createAgentCommandEntry,bn as createAgentCommandModule,vn as createAgentSystemCommand,x as createBackgroundCommandEntry,Tn as createBackgroundCommandModule,Fa as createClearCommandEntry,S as createCompactCommandEntry,An as createCompactCommandModule,Jn as createContextCommandEntry,Zn as createContextCommandModule,Ra as createCostCommandEntry,Ro as createDefaultCommandModules,Go as createDefaultPluginCommandAdapter,D as createExitCommandEntry,nr as createExitCommandModule,O as createHelpCommandEntry,or as createHelpCommandModule,k as createLanguageCommandEntry,dr as createLanguageCommandModule,M as createMemoryCommandEntry,Cr as createMemoryCommandModule,N as createModeCommandEntry,Or as createModeCommandModule,P as createPermissionsCommandEntry,Mr as createPermissionsCommandModule,R as createPluginCommandEntry,Kr as createPluginCommandModule,J as createProviderCommandEntry,qi as createProviderCommandModule,B as createProviderSetupFlow,z as createReloadPluginsCommandEntry,Ia as createRenameCommandEntry,ea as createResetCommandEntry,ra as createResetCommandModule,La as createResumeCommandEntry,va as createRewindCommandModule,qa as createSessionCommandModule,Ja as createSettingsCommandEntry,Za as createSettingsCommandModule,io as createSkillsCommandEntry,so as createSkillsCommandModule,Z as createStatusLineCommandEntry,mo as createStatusLineCommandModule,Po as createUserLocalCommandEntry,Lo as createUserLocalCommandModule,za as createValidateSessionCommandEntry,Xi as ensureProviderConfig,mn as executeAgentCommand,Sn as executeBackgroundCommand,Ta as executeClearCommand,Dn as executeCompactCommand,Nn as executeContextCommand,Na as executeCostCommand,Qn as executeExitCommand,rr as executeHelpCommand,sr as executeLanguageCommand,br as executeMemoryCommand,wr as executeModeCommand,kr as executePermissionsCommand,Vr as executePluginCommand,Li as executeProviderCommand,Hr as executeReloadPluginsCommand,Ea as executeRenameCommand,$i as executeResetCommand,Da as executeResumeCommand,ma as executeRewindCommand,ro as executeSkillsCommand,uo as executeStatusLineCommand,No as executeUserLocalCommand,Mo as executeUserLocalDirectCommand,Pa as executeValidateSessionCommand,U as formatProviderSetupChoiceLabel,W as formatProviderSetupHelpLinks,Xr as formatProviderSetupPromptLabel,qr as formatProviderSetupSelectionPrompt,V as getProviderSetupStep,Jo as reloadPluginCommandSource,Jr as resolveProviderSetupSelection,Yr as runProviderSetupPromptFlow,Yi as runProviderStartupSetup,H as submitProviderSetupValue,G as validateProviderSetupValue};
63
63
  //# sourceMappingURL=index.js.map