@robota-sdk/agent-command 3.0.0-beta.67 → 3.0.0-beta.69

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