@elizaos/plugin-commands 2.0.0-alpha.4 → 2.0.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +26 -16
- package/dist/cjs/index.cjs.map +10 -10
- package/dist/index.js +27 -17
- package/dist/index.js.map +10 -10
- package/package.json +1 -1
package/dist/cjs/index.cjs
CHANGED
|
@@ -151,7 +151,9 @@ var DEFAULT_COMMANDS = [
|
|
|
151
151
|
scope: "both",
|
|
152
152
|
category: "session",
|
|
153
153
|
acceptsArgs: true,
|
|
154
|
-
args: [
|
|
154
|
+
args: [
|
|
155
|
+
{ name: "instructions", description: "Optional compaction instructions" }
|
|
156
|
+
]
|
|
155
157
|
},
|
|
156
158
|
{
|
|
157
159
|
key: "think",
|
|
@@ -161,7 +163,9 @@ var DEFAULT_COMMANDS = [
|
|
|
161
163
|
scope: "both",
|
|
162
164
|
category: "options",
|
|
163
165
|
acceptsArgs: true,
|
|
164
|
-
args: [
|
|
166
|
+
args: [
|
|
167
|
+
{ name: "level", description: "off, minimal, low, medium, high, xhigh" }
|
|
168
|
+
]
|
|
165
169
|
},
|
|
166
170
|
{
|
|
167
171
|
key: "verbose",
|
|
@@ -413,7 +417,7 @@ function startsWithCommand(text) {
|
|
|
413
417
|
if (normalized === alias) {
|
|
414
418
|
return command;
|
|
415
419
|
}
|
|
416
|
-
if (normalized.startsWith(
|
|
420
|
+
if (normalized.startsWith(alias + " ") || normalized.startsWith(alias + ":")) {
|
|
417
421
|
return command;
|
|
418
422
|
}
|
|
419
423
|
}
|
|
@@ -457,7 +461,7 @@ function parseCommand(text, definition) {
|
|
|
457
461
|
matchedAlias = alias;
|
|
458
462
|
break;
|
|
459
463
|
}
|
|
460
|
-
if (trimmed.toLowerCase().startsWith(
|
|
464
|
+
if (trimmed.toLowerCase().startsWith(normalized + " ") || trimmed.toLowerCase().startsWith(normalized + ":")) {
|
|
461
465
|
matchedAlias = alias;
|
|
462
466
|
break;
|
|
463
467
|
}
|
|
@@ -568,12 +572,12 @@ var commandsListAction = {
|
|
|
568
572
|
name: "COMMANDS_LIST",
|
|
569
573
|
description: "List all available commands with their aliases. Only activates for /commands or /cmds slash commands.",
|
|
570
574
|
similes: ["/commands", "/cmds"],
|
|
571
|
-
async validate(
|
|
575
|
+
async validate(runtime, message) {
|
|
572
576
|
const text = message.content?.text ?? "";
|
|
573
577
|
const detection = detectCommand(text);
|
|
574
578
|
return detection.isCommand && detection.command?.key === "commands";
|
|
575
579
|
},
|
|
576
|
-
async handler(
|
|
580
|
+
async handler(runtime, message, state, options, callback) {
|
|
577
581
|
const commands = getEnabledCommands();
|
|
578
582
|
const lines = [`**Commands (${commands.length}):**
|
|
579
583
|
`];
|
|
@@ -647,12 +651,12 @@ var helpAction = {
|
|
|
647
651
|
name: "HELP_COMMAND",
|
|
648
652
|
description: "Show available commands and their descriptions. Only activates for /help, /h, or /? slash commands.",
|
|
649
653
|
similes: ["/help", "/h", "/?"],
|
|
650
|
-
async validate(
|
|
654
|
+
async validate(runtime, message) {
|
|
651
655
|
const text = message.content?.text ?? "";
|
|
652
656
|
const detection = detectCommand(text);
|
|
653
657
|
return detection.isCommand && detection.command?.key === "help";
|
|
654
658
|
},
|
|
655
|
-
async handler(
|
|
659
|
+
async handler(runtime, message, state, options, callback) {
|
|
656
660
|
const commands = getEnabledCommands();
|
|
657
661
|
const helpText = formatCommandList(commands);
|
|
658
662
|
await callback?.({ text: helpText });
|
|
@@ -716,12 +720,12 @@ var modelsAction = {
|
|
|
716
720
|
name: "MODELS_COMMAND",
|
|
717
721
|
description: "List available AI models and providers. Only activates for /models slash command.",
|
|
718
722
|
similes: ["/models"],
|
|
719
|
-
async validate(
|
|
723
|
+
async validate(runtime, message) {
|
|
720
724
|
const text = message.content?.text ?? "";
|
|
721
725
|
const detection = detectCommand(text);
|
|
722
726
|
return detection.isCommand && detection.command?.key === "models";
|
|
723
727
|
},
|
|
724
|
-
async handler(runtime,
|
|
728
|
+
async handler(runtime, message, state, options, callback) {
|
|
725
729
|
const lines = [`**Available Models:**
|
|
726
730
|
`];
|
|
727
731
|
try {
|
|
@@ -822,12 +826,12 @@ var statusAction = {
|
|
|
822
826
|
name: "STATUS_COMMAND",
|
|
823
827
|
description: "Show session directive settings via /status slash command. Only activates for /status or /s prefix.",
|
|
824
828
|
similes: ["/status", "/s"],
|
|
825
|
-
async validate(
|
|
829
|
+
async validate(runtime, message) {
|
|
826
830
|
const text = message.content?.text ?? "";
|
|
827
831
|
const detection = detectCommand(text);
|
|
828
832
|
return detection.isCommand && detection.command?.key === "status";
|
|
829
833
|
},
|
|
830
|
-
async handler(runtime, message,
|
|
834
|
+
async handler(runtime, message, state, options, callback) {
|
|
831
835
|
const statusText = await buildStatusReport(runtime, message.roomId);
|
|
832
836
|
await callback?.({ text: statusText });
|
|
833
837
|
return {
|
|
@@ -860,12 +864,12 @@ var stopAction = {
|
|
|
860
864
|
name: "STOP_COMMAND",
|
|
861
865
|
description: "Stop current operation or abort running tasks. Triggered by /stop, /abort, or /cancel slash commands only.",
|
|
862
866
|
similes: ["/stop", "/abort", "/cancel"],
|
|
863
|
-
async validate(
|
|
867
|
+
async validate(runtime, message) {
|
|
864
868
|
const text = message.content?.text ?? "";
|
|
865
869
|
const detection = detectCommand(text);
|
|
866
870
|
return detection.isCommand && ["stop", "abort", "cancel"].includes(detection.command?.key ?? "");
|
|
867
871
|
},
|
|
868
|
-
async handler(runtime, message,
|
|
872
|
+
async handler(runtime, message, state, options, callback) {
|
|
869
873
|
try {
|
|
870
874
|
await runtime.emitEvent(import_core2.EventType.HOOK_COMMAND_STOP, {
|
|
871
875
|
runtime,
|
|
@@ -973,7 +977,13 @@ var commandsPlugin = {
|
|
|
973
977
|
name: "commands",
|
|
974
978
|
description: "Chat command system with /help, /status, /reset, etc.",
|
|
975
979
|
providers: [commandRegistryProvider],
|
|
976
|
-
actions: [
|
|
980
|
+
actions: [
|
|
981
|
+
helpAction,
|
|
982
|
+
statusAction,
|
|
983
|
+
stopAction,
|
|
984
|
+
modelsAction,
|
|
985
|
+
commandsListAction
|
|
986
|
+
],
|
|
977
987
|
config: {
|
|
978
988
|
COMMANDS_ENABLED: "true",
|
|
979
989
|
COMMANDS_CONFIG_ENABLED: "false",
|
|
@@ -1144,4 +1154,4 @@ var commandsPlugin = {
|
|
|
1144
1154
|
};
|
|
1145
1155
|
var src_default = commandsPlugin;
|
|
1146
1156
|
|
|
1147
|
-
//# debugId=
|
|
1157
|
+
//# debugId=C959FE7FE395530C64756E2164756E21
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts", "../../src/registry.ts", "../../src/parser.ts", "../../src/actions/commands-list.ts", "../../src/actions/help.ts", "../../src/actions/models.ts", "../../src/actions/status.ts", "../../src/actions/stop.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Plugin Commands - Chat command system for Eliza agents\n *\n * Provides a slash-command system with:\n * - /help, /status, /commands for information\n * - /stop, /reset, /compact for session control\n * - /think, /verbose, /model for options\n * - /allowlist, /approve for management\n * - /tts for media\n * - /bash for tools (elevated)\n *\n * INTEGRATION NOTES:\n * - Commands are registered as Actions with strict validate() that only\n * matches slash-prefixed messages (e.g. /help, !stop). This prevents\n * conflicts with bootstrap actions (STATUS, IGNORE) and messaging plugins.\n * - Similes use ONLY slash-command forms (no natural language) so the LLM\n * won't accidentally route \"I need help\" to HELP_COMMAND instead of REPLY.\n * - The registry is scoped per runtime to prevent cross-agent state leaks.\n * - The COMMAND_REGISTRY provider includes the command list in the LLM context\n * ONLY when the message is a command, reducing prompt noise for normal messages.\n */\n\nimport {\n type IAgentRuntime,\n logger,\n type Memory,\n type Plugin,\n type Provider,\n type ProviderResult,\n type State,\n} from \"@elizaos/core\";\n// Import actions\nimport { commandsListAction } from \"./actions/commands-list\";\nimport { helpAction } from \"./actions/help\";\nimport { modelsAction } from \"./actions/models\";\nimport { statusAction } from \"./actions/status\";\nimport { stopAction } from \"./actions/stop\";\nimport { detectCommand, hasCommand, normalizeCommandBody } from \"./parser\";\nimport {\n findCommandByAlias,\n findCommandByKey,\n getCommandsByCategory,\n getEnabledCommands,\n initForRuntime,\n registerCommand,\n unregisterCommand,\n useRuntime,\n} from \"./registry\";\nimport type { CommandContext, CommandDefinition, CommandResult } from \"./types\";\n\nexport * from \"./parser\";\nexport * from \"./registry\";\n// Re-export everything\nexport * from \"./types\";\n\n/**\n * Provider that exposes available commands to the LLM context.\n *\n * Only injects the full command list when the message looks like a command.\n * For normal messages, returns a minimal hint so the LLM knows commands\n * exist but doesn't get a wall of command documentation in its context.\n */\nexport const commandRegistryProvider: Provider = {\n name: \"COMMAND_REGISTRY\",\n description: \"Available chat commands and their descriptions\",\n dynamic: true,\n\n async get(runtime: IAgentRuntime, message: Memory, _state: State): Promise<ProviderResult> {\n // Scope to the correct runtime's command store\n useRuntime(runtime.agentId);\n\n const text = message.content?.text ?? \"\";\n const isCommand = hasCommand(text);\n const commands = getEnabledCommands();\n\n if (isCommand) {\n // Full command context for command messages — helps the LLM select\n // the right action\n const commandList = commands.map((cmd) => {\n const auth = cmd.requiresAuth ? \" (requires auth)\" : \"\";\n return `- ${cmd.textAliases[0]}: ${cmd.description}${auth}`;\n });\n\n return {\n text: `The user sent a slash command. Available commands:\\n${commandList.join(\"\\n\")}\\n\\nIMPORTANT: This is a slash command — respond by executing the matching command action, not with conversational text.`,\n values: {\n commandCount: commands.length,\n isCommand: true,\n hasElevatedCommands: commands.some((c) => c.requiresElevated),\n },\n data: { commands, isCommand: true },\n };\n }\n\n // Minimal context for non-command messages — don't pollute the prompt\n return {\n text: \"\",\n values: {\n commandCount: commands.length,\n isCommand: false,\n },\n data: { isCommand: false },\n };\n },\n};\n\n/**\n * Format command result for display\n */\nexport function formatCommandResult(result: CommandResult): string {\n if (result.error) {\n return `Error: ${result.error}`;\n }\n return result.reply ?? \"Command executed\";\n}\n\n/**\n * Check if a sender is authorized\n */\nexport function isAuthorized(context: CommandContext, command: CommandDefinition): boolean {\n if (!command.requiresAuth) {\n return true;\n }\n return context.isAuthorized;\n}\n\n/**\n * Check if a sender has elevated permissions\n */\nexport function isElevated(context: CommandContext, command: CommandDefinition): boolean {\n if (!command.requiresElevated) {\n return true;\n }\n return context.isElevated;\n}\n\n/**\n * Plugin Commands\n *\n * Provides chat commands as Eliza actions. Commands are detected\n * by their text aliases (e.g., /help, /status) and executed as actions.\n *\n * Design decisions for messaging integration:\n * 1. Actions use strict validate() — only true for slash-prefixed messages\n * 2. Similes are slash-only — no natural language to prevent LLM misrouting\n * 3. Provider is context-aware — full docs for commands, empty for normal msgs\n * 4. Registry is scoped per agentId — no cross-agent contamination\n * 5. Events use proper EventType enums — not raw strings\n */\nexport const commandsPlugin: Plugin = {\n name: \"commands\",\n description: \"Chat command system with /help, /status, /reset, etc.\",\n\n providers: [commandRegistryProvider],\n\n actions: [helpAction, statusAction, stopAction, modelsAction, commandsListAction],\n\n config: {\n COMMANDS_ENABLED: \"true\",\n COMMANDS_CONFIG_ENABLED: \"false\",\n COMMANDS_DEBUG_ENABLED: \"false\",\n COMMANDS_BASH_ENABLED: \"false\",\n COMMANDS_RESTART_ENABLED: \"true\",\n },\n\n tests: [\n {\n name: \"command-detection\",\n tests: [\n {\n name: \"Detect command prefix\",\n fn: async (_runtime: IAgentRuntime) => {\n if (!hasCommand(\"/help\")) {\n throw new Error(\"Should detect /help command\");\n }\n if (!hasCommand(\"/status test\")) {\n throw new Error(\"Should detect /status with args\");\n }\n if (hasCommand(\"hello world\")) {\n throw new Error(\"Should not detect plain text as command\");\n }\n logger.success(\"Command prefix detection works correctly\");\n },\n },\n {\n name: \"Parse command with args\",\n fn: async (_runtime: IAgentRuntime) => {\n const detection = detectCommand(\"/think:high\");\n if (!detection.isCommand) {\n throw new Error(\"Should detect think command\");\n }\n if (detection.command?.key !== \"think\") {\n throw new Error(`Expected key 'think', got '${detection.command?.key}'`);\n }\n if (detection.command?.args[0] !== \"high\") {\n throw new Error(`Expected arg 'high', got '${detection.command?.args[0]}'`);\n }\n logger.success(\"Command argument parsing works correctly\");\n },\n },\n {\n name: \"Normalize command body\",\n fn: async (_runtime: IAgentRuntime) => {\n const normalized1 = normalizeCommandBody(\"/status: test\");\n if (normalized1 !== \"/status test\") {\n throw new Error(`Expected '/status test', got '${normalized1}'`);\n }\n\n const normalized2 = normalizeCommandBody(\"@bot /help\", \"bot\");\n if (normalized2 !== \"/help\") {\n throw new Error(`Expected '/help', got '${normalized2}'`);\n }\n\n logger.success(\"Command normalization works correctly\");\n },\n },\n {\n name: \"Find command by alias\",\n fn: async (_runtime: IAgentRuntime) => {\n const cmd = findCommandByAlias(\"/h\");\n if (!cmd) {\n throw new Error(\"Should find help command by /h alias\");\n }\n if (cmd.key !== \"help\") {\n throw new Error(`Expected key 'help', got '${cmd.key}'`);\n }\n logger.success(\"Command alias lookup works correctly\");\n },\n },\n {\n name: \"Find command by key\",\n fn: async (_runtime: IAgentRuntime) => {\n const cmd = findCommandByKey(\"status\");\n if (!cmd) {\n throw new Error(\"Should find status command by key\");\n }\n if (cmd.key !== \"status\") {\n throw new Error(`Expected key 'status', got '${cmd.key}'`);\n }\n logger.success(\"Command key lookup works correctly\");\n },\n },\n ],\n },\n {\n name: \"command-registry\",\n tests: [\n {\n name: \"Get enabled commands\",\n fn: async (_runtime: IAgentRuntime) => {\n const commands = getEnabledCommands();\n if (commands.length === 0) {\n throw new Error(\"Should have enabled commands\");\n }\n // Check some expected commands exist\n const cmdHelp = commands.some((c) => c.key === \"help\");\n const cmdStatus = commands.some((c) => c.key === \"status\");\n if (!cmdHelp || !cmdStatus) {\n throw new Error(\"Should have help and status commands\");\n }\n logger.success(\"Command registry works correctly\");\n },\n },\n {\n name: \"Register custom command\",\n fn: async (_runtime: IAgentRuntime) => {\n const customCmd: CommandDefinition = {\n key: \"test-custom\",\n description: \"Test custom command\",\n textAliases: [\"/test-custom\", \"/tc\"],\n scope: \"text\",\n };\n\n registerCommand(customCmd);\n const found = findCommandByKey(\"test-custom\");\n if (!found) {\n throw new Error(\"Should find registered custom command\");\n }\n\n unregisterCommand(\"test-custom\");\n const notFound = findCommandByKey(\"test-custom\");\n if (notFound) {\n throw new Error(\"Should not find unregistered command\");\n }\n\n logger.success(\"Custom command registration works correctly\");\n },\n },\n {\n name: \"Get commands by category\",\n fn: async (_runtime: IAgentRuntime) => {\n const statusCommands = getCommandsByCategory(\"status\");\n if (statusCommands.length === 0) {\n throw new Error(\"Should have status category commands\");\n }\n const allStatus = statusCommands.every((c) => c.category === \"status\");\n if (!allStatus) {\n throw new Error(\"All returned commands should be in status category\");\n }\n logger.success(\"Command categorization works correctly\");\n },\n },\n ],\n },\n ],\n\n async init(config, runtime) {\n logger.log(\"[plugin-commands] Initializing command system\");\n\n // Initialize an isolated command store for this runtime\n // This prevents cross-agent contamination in multi-agent deployments\n initForRuntime(runtime.agentId);\n\n // Configure command enablement from config\n const configEnabled = config.COMMANDS_CONFIG_ENABLED === \"true\";\n const debugEnabled = config.COMMANDS_DEBUG_ENABLED === \"true\";\n const bashEnabled = config.COMMANDS_BASH_ENABLED === \"true\";\n const restartEnabled = config.COMMANDS_RESTART_ENABLED !== \"false\";\n\n // Update command enabled states (now on the isolated copy)\n const configCmd = findCommandByKey(\"config\");\n if (configCmd) {\n configCmd.enabled = configEnabled;\n }\n\n const debugCmd = findCommandByKey(\"debug\");\n if (debugCmd) {\n debugCmd.enabled = debugEnabled;\n }\n\n const bashCmd = findCommandByKey(\"bash\");\n if (bashCmd) {\n bashCmd.enabled = bashEnabled;\n }\n\n const restartCmd = findCommandByKey(\"restart\");\n if (restartCmd) {\n restartCmd.enabled = restartEnabled;\n }\n\n const enabledCount = getEnabledCommands().length;\n logger.log(`[plugin-commands] ${enabledCount} commands enabled for agent ${runtime.agentId}`);\n },\n};\n\nexport default commandsPlugin;\n",
|
|
6
|
-
"/**\n * Command registry - defines all available chat commands\n *\n * IMPORTANT: The registry uses module-level state for convenience, but\n * provides `cloneCommands()` and `resetCommands()` so that `init()` can\n * work on isolated copies per runtime. The `init()` function in the main\n * plugin file should clone before mutating to avoid cross-agent contamination.\n */\n\nimport type { CommandDefinition } from \"./types\";\n\n// Default command definitions (frozen reference — never mutate these directly)\nconst DEFAULT_COMMANDS: ReadonlyArray<CommandDefinition> = [\n // Status commands\n {\n key: \"help\",\n nativeName: \"help\",\n description: \"Show available commands\",\n textAliases: [\"/help\", \"/h\", \"/?\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"commands\",\n nativeName: \"commands\",\n description: \"List all commands\",\n textAliases: [\"/commands\", \"/cmds\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"status\",\n nativeName: \"status\",\n description: \"Show current session status\",\n textAliases: [\"/status\", \"/s\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"context\",\n nativeName: \"context\",\n description: \"Show current context information\",\n textAliases: [\"/context\", \"/ctx\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: true,\n args: [{ name: \"mode\", description: \"Output mode (list, detail, json)\" }],\n },\n {\n key: \"whoami\",\n nativeName: \"whoami\",\n description: \"Show your identity information\",\n textAliases: [\"/whoami\", \"/who\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n\n // Session commands\n {\n key: \"stop\",\n nativeName: \"stop\",\n description: \"Stop current operation\",\n textAliases: [\"/stop\", \"/abort\", \"/cancel\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n },\n {\n key: \"restart\",\n nativeName: \"restart\",\n description: \"Restart the session\",\n textAliases: [\"/restart\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n requiresAuth: true,\n },\n {\n key: \"reset\",\n nativeName: \"reset\",\n description: \"Reset session state\",\n textAliases: [\"/reset\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n requiresAuth: true,\n },\n {\n key: \"new\",\n nativeName: \"new\",\n description: \"Start a new conversation\",\n textAliases: [\"/new\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n },\n {\n key: \"compact\",\n nativeName: \"compact\",\n description: \"Compact conversation history\",\n textAliases: [\"/compact\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: true,\n args: [{ name: \"instructions\", description: \"Optional compaction instructions\" }],\n },\n\n // Options commands\n {\n key: \"think\",\n nativeName: \"think\",\n description: \"Set thinking level\",\n textAliases: [\"/think\", \"/thinking\", \"/t\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, minimal, low, medium, high, xhigh\" }],\n },\n {\n key: \"verbose\",\n nativeName: \"verbose\",\n description: \"Set verbose output level\",\n textAliases: [\"/verbose\", \"/v\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, full\" }],\n },\n {\n key: \"reasoning\",\n nativeName: \"reasoning\",\n description: \"Set reasoning visibility\",\n textAliases: [\"/reasoning\", \"/reason\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, stream\" }],\n },\n {\n key: \"elevated\",\n nativeName: \"elevated\",\n description: \"Set elevated permission mode\",\n textAliases: [\"/elevated\", \"/elev\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, ask, full\" }],\n requiresAuth: true,\n },\n {\n key: \"model\",\n nativeName: \"model\",\n description: \"Set or show current model\",\n textAliases: [\"/model\", \"/m\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"model\", description: \"provider/model or alias\" }],\n },\n {\n key: \"models\",\n nativeName: \"models\",\n description: \"List available models\",\n textAliases: [\"/models\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: false,\n },\n {\n key: \"usage\",\n nativeName: \"usage\",\n description: \"Show token usage\",\n textAliases: [\"/usage\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: false,\n },\n {\n key: \"queue\",\n nativeName: \"queue\",\n description: \"Set queue mode\",\n textAliases: [\"/queue\", \"/q\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [\n {\n name: \"mode\",\n description: \"steer, followup, collect, interrupt, or options\",\n },\n ],\n },\n\n // Management commands\n {\n key: \"allowlist\",\n nativeName: \"allowlist\",\n description: \"Manage sender allowlist\",\n textAliases: [\"/allowlist\", \"/allow\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"action\", description: \"list, add, remove\" },\n { name: \"value\", description: \"sender to add/remove\" },\n ],\n requiresAuth: true,\n },\n {\n key: \"approve\",\n nativeName: \"approve\",\n description: \"Approve or deny a pending action\",\n textAliases: [\"/approve\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"id\", description: \"Approval ID\", required: true },\n { name: \"action\", description: \"allow-once, allow-always, deny\" },\n ],\n requiresAuth: true,\n },\n {\n key: \"subagents\",\n nativeName: \"subagents\",\n description: \"Manage subagents\",\n textAliases: [\"/subagents\", \"/sub\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [{ name: \"action\", description: \"list, stop, log, info, send\" }],\n requiresAuth: true,\n },\n {\n key: \"config\",\n nativeName: \"config\",\n description: \"View or set configuration\",\n textAliases: [\"/config\", \"/cfg\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"key\", description: \"Configuration key\" },\n { name: \"value\", description: \"Value to set\" },\n ],\n requiresAuth: true,\n enabled: false, // Disabled by default\n },\n {\n key: \"debug\",\n nativeName: \"debug\",\n description: \"Debug information\",\n textAliases: [\"/debug\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n requiresAuth: true,\n enabled: false, // Disabled by default\n },\n\n // Media commands\n {\n key: \"tts\",\n nativeName: \"tts\",\n description: \"Text-to-speech settings\",\n textAliases: [\"/tts\", \"/voice\"],\n scope: \"both\",\n category: \"media\",\n acceptsArgs: true,\n args: [\n {\n name: \"action\",\n description: \"on, off, status, provider, limit, audio\",\n },\n ],\n },\n\n // Tools commands\n {\n key: \"bash\",\n nativeName: \"bash\",\n description: \"Execute shell command\",\n textAliases: [\"/bash\", \"/sh\", \"/!\"],\n scope: \"text\",\n category: \"tools\",\n acceptsArgs: true,\n args: [\n {\n name: \"command\",\n description: \"Shell command to execute\",\n captureRemaining: true,\n },\n ],\n requiresAuth: true,\n requiresElevated: true,\n },\n];\n\n// ── Per-runtime command storage ──────────────────────────────────────────\n// Each agent runtime gets its own isolated command set via `initForRuntime()`.\n// The module-level state is used as a fallback for convenience (tests, etc.).\n//\n// Why a WeakMap? Agent runtimes may be created/destroyed; we don't want to\n// leak memory by holding strong references to disposed runtimes.\n\ninterface CommandStore {\n commands: CommandDefinition[];\n aliasMap: Map<string, CommandDefinition> | null;\n}\n\n/** Per-runtime stores keyed by agentId */\nconst runtimeStores = new Map<string, CommandStore>();\n/** Fallback store for when no runtime context is set */\nconst fallbackStore: CommandStore = {\n commands: DEFAULT_COMMANDS.map((c) => ({ ...c })),\n aliasMap: null,\n};\n/** Currently active store (set during init, reset on test teardown) */\nlet activeStore: CommandStore = fallbackStore;\n\n/**\n * Initialize an isolated command store for a specific runtime.\n * Called from plugin init() to prevent cross-agent contamination.\n */\nexport function initForRuntime(agentId: string): void {\n const store: CommandStore = {\n commands: DEFAULT_COMMANDS.map((c) => ({ ...c })),\n aliasMap: null,\n };\n runtimeStores.set(agentId, store);\n activeStore = store;\n}\n\n/**\n * Set the active command store for a given runtime.\n * Providers and actions should call this before accessing commands.\n */\nexport function useRuntime(agentId: string): void {\n const store = runtimeStores.get(agentId);\n if (store) {\n activeStore = store;\n }\n}\n\n/**\n * Get all registered commands\n */\nexport function getCommands(): CommandDefinition[] {\n return [...activeStore.commands];\n}\n\n/**\n * Get enabled commands\n */\nexport function getEnabledCommands(): CommandDefinition[] {\n return activeStore.commands.filter((cmd) => cmd.enabled !== false);\n}\n\n/**\n * Get commands by category\n */\nexport function getCommandsByCategory(category: string): CommandDefinition[] {\n return activeStore.commands.filter((cmd) => cmd.category === category && cmd.enabled !== false);\n}\n\n/**\n * Register a custom command\n */\nexport function registerCommand(command: CommandDefinition): void {\n // Remove existing command with same key\n activeStore.commands = activeStore.commands.filter((c) => c.key !== command.key);\n activeStore.commands.push(command);\n activeStore.aliasMap = null; // Invalidate cache\n}\n\n/**\n * Register multiple commands\n */\nexport function registerCommands(newCommands: CommandDefinition[]): void {\n for (const command of newCommands) {\n registerCommand(command);\n }\n}\n\n/**\n * Unregister a command\n */\nexport function unregisterCommand(key: string): void {\n activeStore.commands = activeStore.commands.filter((c) => c.key !== key);\n activeStore.aliasMap = null;\n}\n\n/**\n * Reset to default commands (for the active store)\n */\nexport function resetCommands(): void {\n activeStore.commands = DEFAULT_COMMANDS.map((c) => ({ ...c }));\n activeStore.aliasMap = null;\n}\n\n/**\n * Build and cache alias map for the active store\n */\nfunction getAliasMap(): Map<string, CommandDefinition> {\n if (activeStore.aliasMap) return activeStore.aliasMap;\n\n activeStore.aliasMap = new Map();\n for (const command of activeStore.commands) {\n if (command.enabled === false) continue;\n\n for (const alias of command.textAliases) {\n const normalized = alias.toLowerCase().trim();\n if (!activeStore.aliasMap.has(normalized)) {\n activeStore.aliasMap.set(normalized, command);\n }\n }\n }\n return activeStore.aliasMap;\n}\n\n/**\n * Find command by alias\n */\nexport function findCommandByAlias(alias: string): CommandDefinition | undefined {\n const map = getAliasMap();\n return map.get(alias.toLowerCase().trim());\n}\n\n/**\n * Find command by key\n */\nexport function findCommandByKey(key: string): CommandDefinition | undefined {\n return activeStore.commands.find((c) => c.key === key);\n}\n\n/**\n * Check if text starts with any command alias\n */\nexport function startsWithCommand(text: string): CommandDefinition | undefined {\n const map = getAliasMap();\n const normalized = text.toLowerCase().trim();\n\n // Check exact match first\n for (const [alias, command] of map) {\n if (normalized === alias) {\n return command;\n }\n if (normalized.startsWith(`${alias} `) || normalized.startsWith(`${alias}:`)) {\n return command;\n }\n }\n\n return undefined;\n}\n",
|
|
7
|
-
"/**\n * Command parser - detects and parses commands from message text\n */\n\nimport {
|
|
8
|
-
"/**\n * Commands list action\n */\n\nimport type {
|
|
9
|
-
"/**\n * Help command action\n */\n\nimport type {
|
|
10
|
-
"/**\n * Models command action\n *\n * Queries the runtime for actually registered model handlers instead of\n * using a hardcoded list. Falls back to listing registered model types\n * when detailed model info is not available.\n */\n\nimport type {
|
|
11
|
-
"/**\n * Status command action\n *\n * This is the SLASH COMMAND version (/status, /s). It is distinct from the\n * bootstrap STATUS action which handles natural language like \"what's your status?\".\n *\n * Key differences:\n * - This action ONLY activates for /status or /s slash commands (validate checks prefix)\n * - Bootstrap STATUS handles conversational requests about agent state\n * - This action shows directive/session settings; bootstrap STATUS shows tasks/room info\n * - No natural language similes to prevent conflict with bootstrap STATUS\n */\n\nimport type {
|
|
12
|
-
"/**\n * Stop command action\n *\n * Uses EventType.HOOK_COMMAND_STOP from @elizaos/core for proper integration\n * with the messaging pipeline and hook system.\n */\n\nimport type {
|
|
5
|
+
"/**\n * Plugin Commands - Chat command system for Eliza agents\n *\n * Provides a slash-command system with:\n * - /help, /status, /commands for information\n * - /stop, /reset, /compact for session control\n * - /think, /verbose, /model for options\n * - /allowlist, /approve for management\n * - /tts for media\n * - /bash for tools (elevated)\n *\n * INTEGRATION NOTES:\n * - Commands are registered as Actions with strict validate() that only\n * matches slash-prefixed messages (e.g. /help, !stop). This prevents\n * conflicts with bootstrap actions (STATUS, IGNORE) and messaging plugins.\n * - Similes use ONLY slash-command forms (no natural language) so the LLM\n * won't accidentally route \"I need help\" to HELP_COMMAND instead of REPLY.\n * - The registry is scoped per runtime to prevent cross-agent state leaks.\n * - The COMMAND_REGISTRY provider includes the command list in the LLM context\n * ONLY when the message is a command, reducing prompt noise for normal messages.\n */\n\nimport {\n type IAgentRuntime,\n type Plugin,\n type Provider,\n type ProviderResult,\n type State,\n type Memory,\n logger,\n} from \"@elizaos/core\";\n\nimport {\n detectCommand,\n hasCommand,\n normalizeCommandBody,\n parseCommand,\n} from \"./parser\";\nimport {\n findCommandByAlias,\n findCommandByKey,\n getCommands,\n getCommandsByCategory,\n getEnabledCommands,\n initForRuntime,\n registerCommand,\n registerCommands,\n resetCommands,\n startsWithCommand,\n unregisterCommand,\n useRuntime,\n} from \"./registry\";\nimport type {\n CommandContext,\n CommandDefinition,\n CommandDetectionResult,\n CommandResult,\n ParsedCommand,\n ResolvedCommand,\n} from \"./types\";\n\n// Import actions\nimport { commandsListAction } from \"./actions/commands-list\";\nimport { helpAction } from \"./actions/help\";\nimport { modelsAction } from \"./actions/models\";\nimport { statusAction } from \"./actions/status\";\nimport { stopAction } from \"./actions/stop\";\n\n// Re-export everything\nexport * from \"./types\";\nexport * from \"./registry\";\nexport * from \"./parser\";\n\n/**\n * Provider that exposes available commands to the LLM context.\n *\n * Only injects the full command list when the message looks like a command.\n * For normal messages, returns a minimal hint so the LLM knows commands\n * exist but doesn't get a wall of command documentation in its context.\n */\nexport const commandRegistryProvider: Provider = {\n name: \"COMMAND_REGISTRY\",\n description: \"Available chat commands and their descriptions\",\n dynamic: true,\n\n async get(\n runtime: IAgentRuntime,\n message: Memory,\n _state: State,\n ): Promise<ProviderResult> {\n // Scope to the correct runtime's command store\n useRuntime(runtime.agentId);\n\n const text = message.content?.text ?? \"\";\n const isCommand = hasCommand(text);\n const commands = getEnabledCommands();\n\n if (isCommand) {\n // Full command context for command messages — helps the LLM select\n // the right action\n const commandList = commands.map((cmd) => {\n const auth = cmd.requiresAuth ? \" (requires auth)\" : \"\";\n return `- ${cmd.textAliases[0]}: ${cmd.description}${auth}`;\n });\n\n return {\n text: `The user sent a slash command. Available commands:\\n${commandList.join(\"\\n\")}\\n\\nIMPORTANT: This is a slash command — respond by executing the matching command action, not with conversational text.`,\n values: {\n commandCount: commands.length,\n isCommand: true,\n hasElevatedCommands: commands.some((c) => c.requiresElevated),\n },\n data: { commands, isCommand: true },\n };\n }\n\n // Minimal context for non-command messages — don't pollute the prompt\n return {\n text: \"\",\n values: {\n commandCount: commands.length,\n isCommand: false,\n },\n data: { isCommand: false },\n };\n },\n};\n\n/**\n * Format command result for display\n */\nexport function formatCommandResult(result: CommandResult): string {\n if (result.error) {\n return `Error: ${result.error}`;\n }\n return result.reply ?? \"Command executed\";\n}\n\n/**\n * Check if a sender is authorized\n */\nexport function isAuthorized(\n context: CommandContext,\n command: CommandDefinition,\n): boolean {\n if (!command.requiresAuth) {\n return true;\n }\n return context.isAuthorized;\n}\n\n/**\n * Check if a sender has elevated permissions\n */\nexport function isElevated(\n context: CommandContext,\n command: CommandDefinition,\n): boolean {\n if (!command.requiresElevated) {\n return true;\n }\n return context.isElevated;\n}\n\n/**\n * Plugin Commands\n *\n * Provides chat commands as Eliza actions. Commands are detected\n * by their text aliases (e.g., /help, /status) and executed as actions.\n *\n * Design decisions for messaging integration:\n * 1. Actions use strict validate() — only true for slash-prefixed messages\n * 2. Similes are slash-only — no natural language to prevent LLM misrouting\n * 3. Provider is context-aware — full docs for commands, empty for normal msgs\n * 4. Registry is scoped per agentId — no cross-agent contamination\n * 5. Events use proper EventType enums — not raw strings\n */\nexport const commandsPlugin: Plugin = {\n name: \"commands\",\n description: \"Chat command system with /help, /status, /reset, etc.\",\n\n providers: [commandRegistryProvider],\n\n actions: [\n helpAction,\n statusAction,\n stopAction,\n modelsAction,\n commandsListAction,\n ],\n\n config: {\n COMMANDS_ENABLED: \"true\",\n COMMANDS_CONFIG_ENABLED: \"false\",\n COMMANDS_DEBUG_ENABLED: \"false\",\n COMMANDS_BASH_ENABLED: \"false\",\n COMMANDS_RESTART_ENABLED: \"true\",\n },\n\n tests: [\n {\n name: \"command-detection\",\n tests: [\n {\n name: \"Detect command prefix\",\n fn: async (_runtime: IAgentRuntime) => {\n if (!hasCommand(\"/help\")) {\n throw new Error(\"Should detect /help command\");\n }\n if (!hasCommand(\"/status test\")) {\n throw new Error(\"Should detect /status with args\");\n }\n if (hasCommand(\"hello world\")) {\n throw new Error(\"Should not detect plain text as command\");\n }\n logger.success(\"Command prefix detection works correctly\");\n },\n },\n {\n name: \"Parse command with args\",\n fn: async (_runtime: IAgentRuntime) => {\n const detection = detectCommand(\"/think:high\");\n if (!detection.isCommand) {\n throw new Error(\"Should detect think command\");\n }\n if (detection.command?.key !== \"think\") {\n throw new Error(\n `Expected key 'think', got '${detection.command?.key}'`,\n );\n }\n if (detection.command?.args[0] !== \"high\") {\n throw new Error(\n `Expected arg 'high', got '${detection.command?.args[0]}'`,\n );\n }\n logger.success(\"Command argument parsing works correctly\");\n },\n },\n {\n name: \"Normalize command body\",\n fn: async (_runtime: IAgentRuntime) => {\n const normalized1 = normalizeCommandBody(\"/status: test\");\n if (normalized1 !== \"/status test\") {\n throw new Error(`Expected '/status test', got '${normalized1}'`);\n }\n\n const normalized2 = normalizeCommandBody(\"@bot /help\", \"bot\");\n if (normalized2 !== \"/help\") {\n throw new Error(`Expected '/help', got '${normalized2}'`);\n }\n\n logger.success(\"Command normalization works correctly\");\n },\n },\n {\n name: \"Find command by alias\",\n fn: async (_runtime: IAgentRuntime) => {\n const cmd = findCommandByAlias(\"/h\");\n if (!cmd) {\n throw new Error(\"Should find help command by /h alias\");\n }\n if (cmd.key !== \"help\") {\n throw new Error(`Expected key 'help', got '${cmd.key}'`);\n }\n logger.success(\"Command alias lookup works correctly\");\n },\n },\n {\n name: \"Find command by key\",\n fn: async (_runtime: IAgentRuntime) => {\n const cmd = findCommandByKey(\"status\");\n if (!cmd) {\n throw new Error(\"Should find status command by key\");\n }\n if (cmd.key !== \"status\") {\n throw new Error(`Expected key 'status', got '${cmd.key}'`);\n }\n logger.success(\"Command key lookup works correctly\");\n },\n },\n ],\n },\n {\n name: \"command-registry\",\n tests: [\n {\n name: \"Get enabled commands\",\n fn: async (_runtime: IAgentRuntime) => {\n const commands = getEnabledCommands();\n if (commands.length === 0) {\n throw new Error(\"Should have enabled commands\");\n }\n // Check some expected commands exist\n const cmdHelp = commands.some((c) => c.key === \"help\");\n const cmdStatus = commands.some((c) => c.key === \"status\");\n if (!cmdHelp || !cmdStatus) {\n throw new Error(\"Should have help and status commands\");\n }\n logger.success(\"Command registry works correctly\");\n },\n },\n {\n name: \"Register custom command\",\n fn: async (_runtime: IAgentRuntime) => {\n const customCmd: CommandDefinition = {\n key: \"test-custom\",\n description: \"Test custom command\",\n textAliases: [\"/test-custom\", \"/tc\"],\n scope: \"text\",\n };\n\n registerCommand(customCmd);\n const found = findCommandByKey(\"test-custom\");\n if (!found) {\n throw new Error(\"Should find registered custom command\");\n }\n\n unregisterCommand(\"test-custom\");\n const notFound = findCommandByKey(\"test-custom\");\n if (notFound) {\n throw new Error(\"Should not find unregistered command\");\n }\n\n logger.success(\"Custom command registration works correctly\");\n },\n },\n {\n name: \"Get commands by category\",\n fn: async (_runtime: IAgentRuntime) => {\n const statusCommands = getCommandsByCategory(\"status\");\n if (statusCommands.length === 0) {\n throw new Error(\"Should have status category commands\");\n }\n const allStatus = statusCommands.every(\n (c) => c.category === \"status\",\n );\n if (!allStatus) {\n throw new Error(\n \"All returned commands should be in status category\",\n );\n }\n logger.success(\"Command categorization works correctly\");\n },\n },\n ],\n },\n ],\n\n async init(config, runtime) {\n logger.log(\"[plugin-commands] Initializing command system\");\n\n // Initialize an isolated command store for this runtime\n // This prevents cross-agent contamination in multi-agent deployments\n initForRuntime(runtime.agentId);\n\n // Configure command enablement from config\n const configEnabled = config.COMMANDS_CONFIG_ENABLED === \"true\";\n const debugEnabled = config.COMMANDS_DEBUG_ENABLED === \"true\";\n const bashEnabled = config.COMMANDS_BASH_ENABLED === \"true\";\n const restartEnabled = config.COMMANDS_RESTART_ENABLED !== \"false\";\n\n // Update command enabled states (now on the isolated copy)\n const configCmd = findCommandByKey(\"config\");\n if (configCmd) {\n configCmd.enabled = configEnabled;\n }\n\n const debugCmd = findCommandByKey(\"debug\");\n if (debugCmd) {\n debugCmd.enabled = debugEnabled;\n }\n\n const bashCmd = findCommandByKey(\"bash\");\n if (bashCmd) {\n bashCmd.enabled = bashEnabled;\n }\n\n const restartCmd = findCommandByKey(\"restart\");\n if (restartCmd) {\n restartCmd.enabled = restartEnabled;\n }\n\n const enabledCount = getEnabledCommands().length;\n logger.log(\n `[plugin-commands] ${enabledCount} commands enabled for agent ${runtime.agentId}`,\n );\n },\n};\n\nexport default commandsPlugin;\n",
|
|
6
|
+
"/**\n * Command registry - defines all available chat commands\n *\n * IMPORTANT: The registry uses module-level state for convenience, but\n * provides `cloneCommands()` and `resetCommands()` so that `init()` can\n * work on isolated copies per runtime. The `init()` function in the main\n * plugin file should clone before mutating to avoid cross-agent contamination.\n */\n\nimport type { CommandDefinition } from \"./types\";\n\n// Default command definitions (frozen reference — never mutate these directly)\nconst DEFAULT_COMMANDS: ReadonlyArray<CommandDefinition> = [\n // Status commands\n {\n key: \"help\",\n nativeName: \"help\",\n description: \"Show available commands\",\n textAliases: [\"/help\", \"/h\", \"/?\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"commands\",\n nativeName: \"commands\",\n description: \"List all commands\",\n textAliases: [\"/commands\", \"/cmds\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"status\",\n nativeName: \"status\",\n description: \"Show current session status\",\n textAliases: [\"/status\", \"/s\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"context\",\n nativeName: \"context\",\n description: \"Show current context information\",\n textAliases: [\"/context\", \"/ctx\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: true,\n args: [{ name: \"mode\", description: \"Output mode (list, detail, json)\" }],\n },\n {\n key: \"whoami\",\n nativeName: \"whoami\",\n description: \"Show your identity information\",\n textAliases: [\"/whoami\", \"/who\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n\n // Session commands\n {\n key: \"stop\",\n nativeName: \"stop\",\n description: \"Stop current operation\",\n textAliases: [\"/stop\", \"/abort\", \"/cancel\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n },\n {\n key: \"restart\",\n nativeName: \"restart\",\n description: \"Restart the session\",\n textAliases: [\"/restart\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n requiresAuth: true,\n },\n {\n key: \"reset\",\n nativeName: \"reset\",\n description: \"Reset session state\",\n textAliases: [\"/reset\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n requiresAuth: true,\n },\n {\n key: \"new\",\n nativeName: \"new\",\n description: \"Start a new conversation\",\n textAliases: [\"/new\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n },\n {\n key: \"compact\",\n nativeName: \"compact\",\n description: \"Compact conversation history\",\n textAliases: [\"/compact\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: true,\n args: [\n { name: \"instructions\", description: \"Optional compaction instructions\" },\n ],\n },\n\n // Options commands\n {\n key: \"think\",\n nativeName: \"think\",\n description: \"Set thinking level\",\n textAliases: [\"/think\", \"/thinking\", \"/t\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [\n { name: \"level\", description: \"off, minimal, low, medium, high, xhigh\" },\n ],\n },\n {\n key: \"verbose\",\n nativeName: \"verbose\",\n description: \"Set verbose output level\",\n textAliases: [\"/verbose\", \"/v\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, full\" }],\n },\n {\n key: \"reasoning\",\n nativeName: \"reasoning\",\n description: \"Set reasoning visibility\",\n textAliases: [\"/reasoning\", \"/reason\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, stream\" }],\n },\n {\n key: \"elevated\",\n nativeName: \"elevated\",\n description: \"Set elevated permission mode\",\n textAliases: [\"/elevated\", \"/elev\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, ask, full\" }],\n requiresAuth: true,\n },\n {\n key: \"model\",\n nativeName: \"model\",\n description: \"Set or show current model\",\n textAliases: [\"/model\", \"/m\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"model\", description: \"provider/model or alias\" }],\n },\n {\n key: \"models\",\n nativeName: \"models\",\n description: \"List available models\",\n textAliases: [\"/models\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: false,\n },\n {\n key: \"usage\",\n nativeName: \"usage\",\n description: \"Show token usage\",\n textAliases: [\"/usage\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: false,\n },\n {\n key: \"queue\",\n nativeName: \"queue\",\n description: \"Set queue mode\",\n textAliases: [\"/queue\", \"/q\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [\n {\n name: \"mode\",\n description: \"steer, followup, collect, interrupt, or options\",\n },\n ],\n },\n\n // Management commands\n {\n key: \"allowlist\",\n nativeName: \"allowlist\",\n description: \"Manage sender allowlist\",\n textAliases: [\"/allowlist\", \"/allow\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"action\", description: \"list, add, remove\" },\n { name: \"value\", description: \"sender to add/remove\" },\n ],\n requiresAuth: true,\n },\n {\n key: \"approve\",\n nativeName: \"approve\",\n description: \"Approve or deny a pending action\",\n textAliases: [\"/approve\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"id\", description: \"Approval ID\", required: true },\n { name: \"action\", description: \"allow-once, allow-always, deny\" },\n ],\n requiresAuth: true,\n },\n {\n key: \"subagents\",\n nativeName: \"subagents\",\n description: \"Manage subagents\",\n textAliases: [\"/subagents\", \"/sub\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [{ name: \"action\", description: \"list, stop, log, info, send\" }],\n requiresAuth: true,\n },\n {\n key: \"config\",\n nativeName: \"config\",\n description: \"View or set configuration\",\n textAliases: [\"/config\", \"/cfg\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"key\", description: \"Configuration key\" },\n { name: \"value\", description: \"Value to set\" },\n ],\n requiresAuth: true,\n enabled: false, // Disabled by default\n },\n {\n key: \"debug\",\n nativeName: \"debug\",\n description: \"Debug information\",\n textAliases: [\"/debug\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n requiresAuth: true,\n enabled: false, // Disabled by default\n },\n\n // Media commands\n {\n key: \"tts\",\n nativeName: \"tts\",\n description: \"Text-to-speech settings\",\n textAliases: [\"/tts\", \"/voice\"],\n scope: \"both\",\n category: \"media\",\n acceptsArgs: true,\n args: [\n {\n name: \"action\",\n description: \"on, off, status, provider, limit, audio\",\n },\n ],\n },\n\n // Tools commands\n {\n key: \"bash\",\n nativeName: \"bash\",\n description: \"Execute shell command\",\n textAliases: [\"/bash\", \"/sh\", \"/!\"],\n scope: \"text\",\n category: \"tools\",\n acceptsArgs: true,\n args: [\n {\n name: \"command\",\n description: \"Shell command to execute\",\n captureRemaining: true,\n },\n ],\n requiresAuth: true,\n requiresElevated: true,\n },\n];\n\n// ── Per-runtime command storage ──────────────────────────────────────────\n// Each agent runtime gets its own isolated command set via `initForRuntime()`.\n// The module-level state is used as a fallback for convenience (tests, etc.).\n//\n// Why a WeakMap? Agent runtimes may be created/destroyed; we don't want to\n// leak memory by holding strong references to disposed runtimes.\n\ninterface CommandStore {\n commands: CommandDefinition[];\n aliasMap: Map<string, CommandDefinition> | null;\n}\n\n/** Per-runtime stores keyed by agentId */\nconst runtimeStores = new Map<string, CommandStore>();\n/** Fallback store for when no runtime context is set */\nlet fallbackStore: CommandStore = {\n commands: DEFAULT_COMMANDS.map((c) => ({ ...c })),\n aliasMap: null,\n};\n/** Currently active store (set during init, reset on test teardown) */\nlet activeStore: CommandStore = fallbackStore;\n\n/**\n * Initialize an isolated command store for a specific runtime.\n * Called from plugin init() to prevent cross-agent contamination.\n */\nexport function initForRuntime(agentId: string): void {\n const store: CommandStore = {\n commands: DEFAULT_COMMANDS.map((c) => ({ ...c })),\n aliasMap: null,\n };\n runtimeStores.set(agentId, store);\n activeStore = store;\n}\n\n/**\n * Set the active command store for a given runtime.\n * Providers and actions should call this before accessing commands.\n */\nexport function useRuntime(agentId: string): void {\n const store = runtimeStores.get(agentId);\n if (store) {\n activeStore = store;\n }\n}\n\n/**\n * Get all registered commands\n */\nexport function getCommands(): CommandDefinition[] {\n return [...activeStore.commands];\n}\n\n/**\n * Get enabled commands\n */\nexport function getEnabledCommands(): CommandDefinition[] {\n return activeStore.commands.filter((cmd) => cmd.enabled !== false);\n}\n\n/**\n * Get commands by category\n */\nexport function getCommandsByCategory(category: string): CommandDefinition[] {\n return activeStore.commands.filter(\n (cmd) => cmd.category === category && cmd.enabled !== false,\n );\n}\n\n/**\n * Register a custom command\n */\nexport function registerCommand(command: CommandDefinition): void {\n // Remove existing command with same key\n activeStore.commands = activeStore.commands.filter(\n (c) => c.key !== command.key,\n );\n activeStore.commands.push(command);\n activeStore.aliasMap = null; // Invalidate cache\n}\n\n/**\n * Register multiple commands\n */\nexport function registerCommands(newCommands: CommandDefinition[]): void {\n for (const command of newCommands) {\n registerCommand(command);\n }\n}\n\n/**\n * Unregister a command\n */\nexport function unregisterCommand(key: string): void {\n activeStore.commands = activeStore.commands.filter((c) => c.key !== key);\n activeStore.aliasMap = null;\n}\n\n/**\n * Reset to default commands (for the active store)\n */\nexport function resetCommands(): void {\n activeStore.commands = DEFAULT_COMMANDS.map((c) => ({ ...c }));\n activeStore.aliasMap = null;\n}\n\n/**\n * Build and cache alias map for the active store\n */\nfunction getAliasMap(): Map<string, CommandDefinition> {\n if (activeStore.aliasMap) return activeStore.aliasMap;\n\n activeStore.aliasMap = new Map();\n for (const command of activeStore.commands) {\n if (command.enabled === false) continue;\n\n for (const alias of command.textAliases) {\n const normalized = alias.toLowerCase().trim();\n if (!activeStore.aliasMap.has(normalized)) {\n activeStore.aliasMap.set(normalized, command);\n }\n }\n }\n return activeStore.aliasMap;\n}\n\n/**\n * Find command by alias\n */\nexport function findCommandByAlias(\n alias: string,\n): CommandDefinition | undefined {\n const map = getAliasMap();\n return map.get(alias.toLowerCase().trim());\n}\n\n/**\n * Find command by key\n */\nexport function findCommandByKey(key: string): CommandDefinition | undefined {\n return activeStore.commands.find((c) => c.key === key);\n}\n\n/**\n * Check if text starts with any command alias\n */\nexport function startsWithCommand(text: string): CommandDefinition | undefined {\n const map = getAliasMap();\n const normalized = text.toLowerCase().trim();\n\n // Check exact match first\n for (const [alias, command] of map) {\n if (normalized === alias) {\n return command;\n }\n if (\n normalized.startsWith(alias + \" \") ||\n normalized.startsWith(alias + \":\")\n ) {\n return command;\n }\n }\n\n return undefined;\n}\n",
|
|
7
|
+
"/**\n * Command parser - detects and parses commands from message text\n */\n\nimport type {\n CommandDefinition,\n CommandDetectionResult,\n ParsedCommand,\n} from \"./types\";\nimport { findCommandByAlias, startsWithCommand } from \"./registry\";\n\nconst escapeRegExp = (value: string) =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * Check if text contains a command\n */\nexport function hasCommand(text: string): boolean {\n if (!text) return false;\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"/\") && !trimmed.startsWith(\"!\")) return false;\n return Boolean(startsWithCommand(trimmed));\n}\n\n/**\n * Detect command in text\n */\nexport function detectCommand(text: string): CommandDetectionResult {\n if (!text) {\n return { isCommand: false };\n }\n\n const trimmed = text.trim();\n\n // Quick check for command prefix\n if (!trimmed.startsWith(\"/\") && !trimmed.startsWith(\"!\")) {\n return { isCommand: false };\n }\n\n const command = startsWithCommand(trimmed);\n if (!command) {\n return { isCommand: false };\n }\n\n const parsed = parseCommand(trimmed, command);\n if (!parsed) {\n return { isCommand: false };\n }\n\n return { isCommand: true, command: parsed };\n}\n\n/**\n * Parse a command from text\n */\nexport function parseCommand(\n text: string,\n definition: CommandDefinition,\n): ParsedCommand | null {\n const trimmed = text.trim();\n\n // Find the matching alias\n let matchedAlias: string | null = null;\n for (const alias of definition.textAliases) {\n const normalized = alias.toLowerCase();\n if (trimmed.toLowerCase() === normalized) {\n matchedAlias = alias;\n break;\n }\n if (\n trimmed.toLowerCase().startsWith(normalized + \" \") ||\n trimmed.toLowerCase().startsWith(normalized + \":\")\n ) {\n matchedAlias = alias;\n break;\n }\n }\n\n if (!matchedAlias) {\n return null;\n }\n\n // Extract arguments\n let rawArgs = trimmed.slice(matchedAlias.length).trim();\n\n // Handle colon separator (e.g., /think:high)\n if (rawArgs.startsWith(\":\")) {\n rawArgs = rawArgs.slice(1).trim();\n }\n\n // Parse arguments\n const args = parseArgs(rawArgs, definition);\n\n return {\n key: definition.key,\n canonical: definition.textAliases[0] ?? `/${definition.key}`,\n args,\n rawArgs: rawArgs || undefined,\n };\n}\n\n/**\n * Parse arguments based on command definition\n */\nfunction parseArgs(rawArgs: string, definition: CommandDefinition): string[] {\n if (!rawArgs || !definition.acceptsArgs) {\n return [];\n }\n\n const parsing = definition.argsParsing ?? \"positional\";\n\n if (parsing === \"none\") {\n // Return entire string as single argument\n return rawArgs ? [rawArgs] : [];\n }\n\n // Positional parsing\n const args: string[] = [];\n const argDefs = definition.args ?? [];\n\n // Split by whitespace, respecting quotes\n const tokens = tokenize(rawArgs);\n\n for (let i = 0; i < tokens.length; i++) {\n const argDef = argDefs[i];\n\n // If this arg captures remaining, join all remaining tokens\n if (argDef?.captureRemaining) {\n args.push(tokens.slice(i).join(\" \"));\n break;\n }\n\n args.push(tokens[i]);\n }\n\n return args;\n}\n\n/**\n * Tokenize argument string, respecting quotes\n */\nfunction tokenize(input: string): string[] {\n const tokens: string[] = [];\n let current = \"\";\n let inQuote = false;\n let quoteChar = \"\";\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n\n if (inQuote) {\n if (char === quoteChar) {\n inQuote = false;\n if (current) {\n tokens.push(current);\n current = \"\";\n }\n } else {\n current += char;\n }\n } else if (char === '\"' || char === \"'\") {\n inQuote = true;\n quoteChar = char;\n } else if (/\\s/.test(char)) {\n if (current) {\n tokens.push(current);\n current = \"\";\n }\n } else {\n current += char;\n }\n }\n\n if (current) {\n tokens.push(current);\n }\n\n return tokens;\n}\n\n/**\n * Normalize command body (handle bot mentions, colon syntax, etc.)\n */\nexport function normalizeCommandBody(\n text: string,\n botMention?: string,\n): string {\n let normalized = text.trim();\n\n // Remove bot mention prefix (e.g., \"@bot /status\" -> \"/status\")\n if (botMention) {\n const mentionPattern = new RegExp(`^@${escapeRegExp(botMention)}\\\\s*`, \"i\");\n normalized = normalized.replace(mentionPattern, \"\");\n }\n\n // Handle colon in command (e.g., \"/command: args\" -> \"/command args\")\n normalized = normalized.replace(/^(\\/\\w+):\\s*/, \"$1 \");\n\n return normalized.trim();\n}\n\n/**\n * Check if text is a command-only message (no other content)\n */\nexport function isCommandOnly(text: string): boolean {\n const detection = detectCommand(text);\n if (!detection.isCommand || !detection.command) {\n return false;\n }\n\n // If there's no rawArgs, it's command-only\n if (!detection.command.rawArgs) {\n return true;\n }\n\n // Check if rawArgs is just whitespace\n return detection.command.rawArgs.trim().length === 0;\n}\n\n/**\n * Get command and remaining text\n */\nexport function extractCommand(\n text: string,\n): { command: ParsedCommand; remainingText: string } | null {\n const detection = detectCommand(text);\n if (!detection.isCommand || !detection.command) {\n return null;\n }\n\n const { command } = detection;\n\n // For commands that don't accept args, remaining text is everything after the command\n if (!command.rawArgs) {\n return { command, remainingText: \"\" };\n }\n\n return { command, remainingText: command.rawArgs };\n}\n",
|
|
8
|
+
"/**\n * Commands list action\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { getEnabledCommands } from \"../registry\";\nimport { detectCommand } from \"../parser\";\n\nexport const commandsListAction: Action = {\n name: \"COMMANDS_LIST\",\n description:\n \"List all available commands with their aliases. Only activates for /commands or /cmds slash commands.\",\n // Only slash-command similes to avoid matching natural language\n similes: [\"/commands\", \"/cmds\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n // Strict: only activate for slash commands, never natural language\n const detection = detectCommand(text);\n return detection.isCommand && detection.command?.key === \"commands\";\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n const commands = getEnabledCommands();\n const lines: string[] = [`**Commands (${commands.length}):**\\n`];\n\n for (const cmd of commands) {\n const aliases = cmd.textAliases.join(\", \");\n const authNote = cmd.requiresAuth ? \" [auth]\" : \"\";\n const elevatedNote = cmd.requiresElevated ? \" [elevated]\" : \"\";\n lines.push(`• **${cmd.key}**: ${aliases}${authNote}${elevatedNote}`);\n }\n\n const replyText = lines.join(\"\\n\");\n await callback?.({ text: replyText });\n\n return {\n success: true,\n text: replyText,\n data: { commandCount: commands.length },\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/commands\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Commands (15):**\\n\\n• **help**: /help, /h, /?\\n• **status**: /status, /s...\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
9
|
+
"/**\n * Help command action\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { getCommandsByCategory, getEnabledCommands } from \"../registry\";\nimport { detectCommand } from \"../parser\";\n\n/**\n * Format command list for help display\n */\nfunction formatCommandList(\n commands: ReturnType<typeof getEnabledCommands>,\n): string {\n const lines: string[] = [\"**Available Commands:**\\n\"];\n\n const categories = [\n { key: \"status\", name: \"Status\" },\n { key: \"session\", name: \"Session\" },\n { key: \"options\", name: \"Options\" },\n { key: \"management\", name: \"Management\" },\n { key: \"media\", name: \"Media\" },\n { key: \"tools\", name: \"Tools\" },\n ];\n\n for (const cat of categories) {\n const catCommands = commands.filter((c) => c.category === cat.key);\n if (catCommands.length === 0) continue;\n\n lines.push(`\\n**${cat.name}:**`);\n for (const cmd of catCommands) {\n const aliases = cmd.textAliases.slice(0, 2).join(\", \");\n lines.push(`• ${aliases} - ${cmd.description}`);\n }\n }\n\n // Add uncategorized commands\n const uncategorized = commands.filter((c) => !c.category);\n if (uncategorized.length > 0) {\n lines.push(\"\\n**Other:**\");\n for (const cmd of uncategorized) {\n const aliases = cmd.textAliases.slice(0, 2).join(\", \");\n lines.push(`• ${aliases} - ${cmd.description}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nexport const helpAction: Action = {\n name: \"HELP_COMMAND\",\n description:\n \"Show available commands and their descriptions. Only activates for /help, /h, or /? slash commands.\",\n // Only slash-command similes — \"help\" or \"show help\" as natural language\n // should be handled by the LLM's normal response, not this action\n similes: [\"/help\", \"/h\", \"/?\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n // Strict: only activate for slash commands, never natural language\n const detection = detectCommand(text);\n return detection.isCommand && detection.command?.key === \"help\";\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n const commands = getEnabledCommands();\n const helpText = formatCommandList(commands);\n\n await callback?.({ text: helpText });\n\n return {\n success: true,\n text: helpText,\n data: { commandCount: commands.length },\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/help\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Available Commands:**\\n\\n**Status:**\\n• /help - Show available commands...\",\n },\n },\n ],\n [\n { user: \"user\", content: { text: \"/?\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Available Commands:**\\n\\n**Status:**\\n• /help - Show available commands...\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
10
|
+
"/**\n * Models command action\n *\n * Queries the runtime for actually registered model handlers instead of\n * using a hardcoded list. Falls back to listing registered model types\n * when detailed model info is not available.\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { ModelType, logger } from \"@elizaos/core\";\nimport { detectCommand } from \"../parser\";\n\n/**\n * Describe a ModelType value in a user-friendly way\n */\nfunction describeModelType(modelType: string): string {\n const descriptions: Record<string, string> = {\n [ModelType.TEXT_SMALL]: \"Text (Small)\",\n [ModelType.TEXT_LARGE]: \"Text (Large)\",\n [ModelType.TEXT_REASONING_SMALL]: \"Reasoning (Small)\",\n [ModelType.TEXT_REASONING_LARGE]: \"Reasoning (Large)\",\n [ModelType.TEXT_COMPLETION]: \"Text Completion\",\n [ModelType.TEXT_EMBEDDING]: \"Embedding\",\n [ModelType.IMAGE]: \"Image Generation\",\n [ModelType.IMAGE_DESCRIPTION]: \"Image Description\",\n [ModelType.TRANSCRIPTION]: \"Transcription\",\n [ModelType.TEXT_TO_SPEECH]: \"Text-to-Speech\",\n [ModelType.AUDIO]: \"Audio\",\n [ModelType.VIDEO]: \"Video\",\n [ModelType.OBJECT_SMALL]: \"Object (Small)\",\n [ModelType.OBJECT_LARGE]: \"Object (Large)\",\n [ModelType.RESEARCH]: \"Research\",\n };\n return descriptions[modelType] ?? modelType;\n}\n\nexport const modelsAction: Action = {\n name: \"MODELS_COMMAND\",\n description:\n \"List available AI models and providers. Only activates for /models slash command.\",\n // Only slash-command similes to avoid matching natural language\n similes: [\"/models\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n // Strict: only activate for slash commands, never natural language\n const detection = detectCommand(text);\n return detection.isCommand && detection.command?.key === \"models\";\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n const lines: string[] = [\"**Available Models:**\\n\"];\n\n // Query runtime for registered model handlers\n try {\n const registeredTypes: string[] = [];\n const seen = new Set<string>();\n\n // Check each ModelType to see if a handler is registered.\n // Deduplicate since ModelType has legacy aliases (SMALL, MEDIUM, LARGE)\n // that map to the same underlying values.\n for (const modelType of Object.values(ModelType)) {\n if (seen.has(modelType)) continue;\n seen.add(modelType);\n try {\n // runtime.getModel() returns the handler or undefined\n const handler = runtime.getModel(modelType);\n if (handler) {\n registeredTypes.push(modelType);\n }\n } catch {\n // Model type not registered\n }\n }\n\n if (registeredTypes.length > 0) {\n lines.push(\"**Registered Model Types:**\");\n for (const modelType of registeredTypes) {\n lines.push(`• ${describeModelType(modelType)} (\\`${modelType}\\`)`);\n }\n } else {\n lines.push(\"No model handlers are currently registered.\");\n }\n\n // Show current model settings if available\n const modelProvider = runtime.getSetting(\"MODEL_PROVIDER\");\n const modelName = runtime.getSetting(\"MODEL_NAME\");\n if (modelProvider || modelName) {\n lines.push(\"\\n**Current Configuration:**\");\n if (modelProvider) lines.push(`• Provider: ${modelProvider}`);\n if (modelName) lines.push(`• Model: ${modelName}`);\n }\n } catch (err) {\n logger.warn(\n { src: \"plugin-commands\", err },\n \"Error querying runtime models\",\n );\n lines.push(\"Unable to query available models.\");\n }\n\n lines.push(\"\\n\\n_Use /model <provider/model> to switch models._\");\n\n const replyText = lines.join(\"\\n\");\n await callback?.({ text: replyText });\n\n return {\n success: true,\n text: replyText,\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/models\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Available Models:**\\n\\n**Registered Model Types:**\\n• Text (Large) (`text_large`)\\n• Text (Small) (`text_small`)...\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
11
|
+
"/**\n * Status command action\n *\n * This is the SLASH COMMAND version (/status, /s). It is distinct from the\n * bootstrap STATUS action which handles natural language like \"what's your status?\".\n *\n * Key differences:\n * - This action ONLY activates for /status or /s slash commands (validate checks prefix)\n * - Bootstrap STATUS handles conversational requests about agent state\n * - This action shows directive/session settings; bootstrap STATUS shows tasks/room info\n * - No natural language similes to prevent conflict with bootstrap STATUS\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { detectCommand } from \"../parser\";\n\ninterface DirectiveModelState {\n provider?: string;\n model?: string;\n}\n\ninterface DirectiveSessionState {\n thinking: string | boolean;\n verbose: boolean | string;\n reasoning: boolean | string;\n elevated: boolean | string;\n model?: DirectiveModelState;\n}\n\ninterface DirectiveParserService {\n getSessionState?: (roomId: string) => DirectiveSessionState | undefined;\n}\n\n/**\n * Build status report including directive state\n */\nasync function buildStatusReport(\n runtime: IAgentRuntime,\n roomId: string,\n): Promise<string> {\n const lines: string[] = [\"**Session Status:**\\n\"];\n\n // Agent info\n lines.push(`**Agent:** ${runtime.character.name ?? runtime.agentId}`);\n lines.push(`**Room:** ${roomId}`);\n\n // Try to get directive state from plugin-directives if available\n try {\n const directiveService =\n runtime.getService<DirectiveParserService>(\"directive-parser\");\n if (directiveService) {\n const state = directiveService.getSessionState?.(roomId);\n if (state) {\n lines.push(`\\n**Directives:**`);\n lines.push(`• Thinking: ${state.thinking}`);\n lines.push(`• Verbose: ${state.verbose}`);\n lines.push(`• Reasoning: ${state.reasoning}`);\n lines.push(`• Elevated: ${state.elevated}`);\n if (state.model?.provider || state.model?.model) {\n const modelStr = state.model.provider\n ? `${state.model.provider}/${state.model.model}`\n : state.model.model;\n lines.push(`• Model: ${modelStr}`);\n }\n }\n }\n } catch {\n // Directive plugin not available\n }\n\n // Get pending tasks count for context\n try {\n const tasks = await runtime.getTasks({ roomId });\n if (tasks.length > 0) {\n lines.push(`\\n**Tasks:** ${tasks.length} pending`);\n }\n } catch {\n // Task retrieval may not be available\n }\n\n return lines.join(\"\\n\");\n}\n\nexport const statusAction: Action = {\n // Deliberately distinct from bootstrap's \"STATUS\" action name\n // Normalized: \"statuscommand\" vs \"status\" — no exact match collision\n name: \"STATUS_COMMAND\",\n description:\n \"Show session directive settings via /status slash command. Only activates for /status or /s prefix.\",\n // Only slash-command similes — no natural language to avoid stealing\n // from bootstrap STATUS which handles \"what's your status?\" etc.\n similes: [\"/status\", \"/s\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n // Strict: only activate for slash commands, never natural language\n const detection = detectCommand(text);\n return detection.isCommand && detection.command?.key === \"status\";\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n const statusText = await buildStatusReport(runtime, message.roomId);\n\n await callback?.({ text: statusText });\n\n return {\n success: true,\n text: statusText,\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/status\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Session Status:**\\n\\n**Agent:** Eliza\\n**Room:** room-456\\n\\n**Directives:**\\n• Thinking: low...\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
12
|
+
"/**\n * Stop command action\n *\n * Uses EventType.HOOK_COMMAND_STOP from @elizaos/core for proper integration\n * with the messaging pipeline and hook system.\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { EventType, logger } from \"@elizaos/core\";\nimport { detectCommand } from \"../parser\";\n\nexport const stopAction: Action = {\n name: \"STOP_COMMAND\",\n description:\n \"Stop current operation or abort running tasks. Triggered by /stop, /abort, or /cancel slash commands only.\",\n // Only use slash-command similes to avoid matching natural language\n // like \"stop talking\" or \"cancel that\" which should go to bootstrap IGNORE\n similes: [\"/stop\", \"/abort\", \"/cancel\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n const detection = detectCommand(text);\n return (\n detection.isCommand &&\n [\"stop\", \"abort\", \"cancel\"].includes(detection.command?.key ?? \"\")\n );\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n // Emit the proper hook event for the stop command.\n // HookCommandPayload extends HookEventPayload which requires sessionKey,\n // messages, timestamp, context. The runtime injects itself automatically.\n try {\n await runtime.emitEvent(EventType.HOOK_COMMAND_STOP, {\n runtime,\n sessionKey: message.roomId,\n messages: [],\n timestamp: new Date(),\n context: {\n entityId: message.entityId,\n source: message.content?.source,\n },\n command: \"stop\" as const,\n senderId: message.entityId,\n commandSource: message.content?.source,\n });\n } catch (err) {\n logger.warn(\n { src: \"plugin-commands\", err },\n \"Failed to emit HOOK_COMMAND_STOP event\",\n );\n }\n\n const replyText = \"✓ Stop requested. Current operations will be cancelled.\";\n await callback?.({ text: replyText });\n\n return {\n success: true,\n text: replyText,\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/stop\" } },\n {\n user: \"assistant\",\n content: {\n text: \"✓ Stop requested. Current operations will be cancelled.\",\n },\n },\n ],\n [\n { user: \"user\", content: { text: \"/abort\" } },\n {\n user: \"assistant\",\n content: {\n text: \"✓ Stop requested. Current operations will be cancelled.\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n"
|
|
13
13
|
],
|
|
14
|
-
"mappings": "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",
|
|
15
|
-
"debugId": "
|
|
14
|
+
"mappings": "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",
|
|
15
|
+
"debugId": "C959FE7FE395530C64756E2164756E21",
|
|
16
16
|
"names": []
|
|
17
17
|
}
|
package/dist/index.js
CHANGED
|
@@ -97,7 +97,9 @@ var DEFAULT_COMMANDS = [
|
|
|
97
97
|
scope: "both",
|
|
98
98
|
category: "session",
|
|
99
99
|
acceptsArgs: true,
|
|
100
|
-
args: [
|
|
100
|
+
args: [
|
|
101
|
+
{ name: "instructions", description: "Optional compaction instructions" }
|
|
102
|
+
]
|
|
101
103
|
},
|
|
102
104
|
{
|
|
103
105
|
key: "think",
|
|
@@ -107,7 +109,9 @@ var DEFAULT_COMMANDS = [
|
|
|
107
109
|
scope: "both",
|
|
108
110
|
category: "options",
|
|
109
111
|
acceptsArgs: true,
|
|
110
|
-
args: [
|
|
112
|
+
args: [
|
|
113
|
+
{ name: "level", description: "off, minimal, low, medium, high, xhigh" }
|
|
114
|
+
]
|
|
111
115
|
},
|
|
112
116
|
{
|
|
113
117
|
key: "verbose",
|
|
@@ -359,7 +363,7 @@ function startsWithCommand(text) {
|
|
|
359
363
|
if (normalized === alias) {
|
|
360
364
|
return command;
|
|
361
365
|
}
|
|
362
|
-
if (normalized.startsWith(
|
|
366
|
+
if (normalized.startsWith(alias + " ") || normalized.startsWith(alias + ":")) {
|
|
363
367
|
return command;
|
|
364
368
|
}
|
|
365
369
|
}
|
|
@@ -403,7 +407,7 @@ function parseCommand(text, definition) {
|
|
|
403
407
|
matchedAlias = alias;
|
|
404
408
|
break;
|
|
405
409
|
}
|
|
406
|
-
if (trimmed.toLowerCase().startsWith(
|
|
410
|
+
if (trimmed.toLowerCase().startsWith(normalized + " ") || trimmed.toLowerCase().startsWith(normalized + ":")) {
|
|
407
411
|
matchedAlias = alias;
|
|
408
412
|
break;
|
|
409
413
|
}
|
|
@@ -514,12 +518,12 @@ var commandsListAction = {
|
|
|
514
518
|
name: "COMMANDS_LIST",
|
|
515
519
|
description: "List all available commands with their aliases. Only activates for /commands or /cmds slash commands.",
|
|
516
520
|
similes: ["/commands", "/cmds"],
|
|
517
|
-
async validate(
|
|
521
|
+
async validate(runtime, message) {
|
|
518
522
|
const text = message.content?.text ?? "";
|
|
519
523
|
const detection = detectCommand(text);
|
|
520
524
|
return detection.isCommand && detection.command?.key === "commands";
|
|
521
525
|
},
|
|
522
|
-
async handler(
|
|
526
|
+
async handler(runtime, message, state, options, callback) {
|
|
523
527
|
const commands = getEnabledCommands();
|
|
524
528
|
const lines = [`**Commands (${commands.length}):**
|
|
525
529
|
`];
|
|
@@ -593,12 +597,12 @@ var helpAction = {
|
|
|
593
597
|
name: "HELP_COMMAND",
|
|
594
598
|
description: "Show available commands and their descriptions. Only activates for /help, /h, or /? slash commands.",
|
|
595
599
|
similes: ["/help", "/h", "/?"],
|
|
596
|
-
async validate(
|
|
600
|
+
async validate(runtime, message) {
|
|
597
601
|
const text = message.content?.text ?? "";
|
|
598
602
|
const detection = detectCommand(text);
|
|
599
603
|
return detection.isCommand && detection.command?.key === "help";
|
|
600
604
|
},
|
|
601
|
-
async handler(
|
|
605
|
+
async handler(runtime, message, state, options, callback) {
|
|
602
606
|
const commands = getEnabledCommands();
|
|
603
607
|
const helpText = formatCommandList(commands);
|
|
604
608
|
await callback?.({ text: helpText });
|
|
@@ -637,7 +641,7 @@ var helpAction = {
|
|
|
637
641
|
};
|
|
638
642
|
|
|
639
643
|
// src/actions/models.ts
|
|
640
|
-
import {
|
|
644
|
+
import { ModelType, logger } from "@elizaos/core";
|
|
641
645
|
function describeModelType(modelType) {
|
|
642
646
|
const descriptions = {
|
|
643
647
|
[ModelType.TEXT_SMALL]: "Text (Small)",
|
|
@@ -662,12 +666,12 @@ var modelsAction = {
|
|
|
662
666
|
name: "MODELS_COMMAND",
|
|
663
667
|
description: "List available AI models and providers. Only activates for /models slash command.",
|
|
664
668
|
similes: ["/models"],
|
|
665
|
-
async validate(
|
|
669
|
+
async validate(runtime, message) {
|
|
666
670
|
const text = message.content?.text ?? "";
|
|
667
671
|
const detection = detectCommand(text);
|
|
668
672
|
return detection.isCommand && detection.command?.key === "models";
|
|
669
673
|
},
|
|
670
|
-
async handler(runtime,
|
|
674
|
+
async handler(runtime, message, state, options, callback) {
|
|
671
675
|
const lines = [`**Available Models:**
|
|
672
676
|
`];
|
|
673
677
|
try {
|
|
@@ -768,12 +772,12 @@ var statusAction = {
|
|
|
768
772
|
name: "STATUS_COMMAND",
|
|
769
773
|
description: "Show session directive settings via /status slash command. Only activates for /status or /s prefix.",
|
|
770
774
|
similes: ["/status", "/s"],
|
|
771
|
-
async validate(
|
|
775
|
+
async validate(runtime, message) {
|
|
772
776
|
const text = message.content?.text ?? "";
|
|
773
777
|
const detection = detectCommand(text);
|
|
774
778
|
return detection.isCommand && detection.command?.key === "status";
|
|
775
779
|
},
|
|
776
|
-
async handler(runtime, message,
|
|
780
|
+
async handler(runtime, message, state, options, callback) {
|
|
777
781
|
const statusText = await buildStatusReport(runtime, message.roomId);
|
|
778
782
|
await callback?.({ text: statusText });
|
|
779
783
|
return {
|
|
@@ -806,12 +810,12 @@ var stopAction = {
|
|
|
806
810
|
name: "STOP_COMMAND",
|
|
807
811
|
description: "Stop current operation or abort running tasks. Triggered by /stop, /abort, or /cancel slash commands only.",
|
|
808
812
|
similes: ["/stop", "/abort", "/cancel"],
|
|
809
|
-
async validate(
|
|
813
|
+
async validate(runtime, message) {
|
|
810
814
|
const text = message.content?.text ?? "";
|
|
811
815
|
const detection = detectCommand(text);
|
|
812
816
|
return detection.isCommand && ["stop", "abort", "cancel"].includes(detection.command?.key ?? "");
|
|
813
817
|
},
|
|
814
|
-
async handler(runtime, message,
|
|
818
|
+
async handler(runtime, message, state, options, callback) {
|
|
815
819
|
try {
|
|
816
820
|
await runtime.emitEvent(EventType.HOOK_COMMAND_STOP, {
|
|
817
821
|
runtime,
|
|
@@ -919,7 +923,13 @@ var commandsPlugin = {
|
|
|
919
923
|
name: "commands",
|
|
920
924
|
description: "Chat command system with /help, /status, /reset, etc.",
|
|
921
925
|
providers: [commandRegistryProvider],
|
|
922
|
-
actions: [
|
|
926
|
+
actions: [
|
|
927
|
+
helpAction,
|
|
928
|
+
statusAction,
|
|
929
|
+
stopAction,
|
|
930
|
+
modelsAction,
|
|
931
|
+
commandsListAction
|
|
932
|
+
],
|
|
923
933
|
config: {
|
|
924
934
|
COMMANDS_ENABLED: "true",
|
|
925
935
|
COMMANDS_CONFIG_ENABLED: "false",
|
|
@@ -1116,4 +1126,4 @@ export {
|
|
|
1116
1126
|
commandRegistryProvider
|
|
1117
1127
|
};
|
|
1118
1128
|
|
|
1119
|
-
//# debugId=
|
|
1129
|
+
//# debugId=C6086C11EDA7A75E64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/registry.ts", "../src/parser.ts", "../src/actions/commands-list.ts", "../src/actions/help.ts", "../src/actions/models.ts", "../src/actions/status.ts", "../src/actions/stop.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Plugin Commands - Chat command system for Eliza agents\n *\n * Provides a slash-command system with:\n * - /help, /status, /commands for information\n * - /stop, /reset, /compact for session control\n * - /think, /verbose, /model for options\n * - /allowlist, /approve for management\n * - /tts for media\n * - /bash for tools (elevated)\n *\n * INTEGRATION NOTES:\n * - Commands are registered as Actions with strict validate() that only\n * matches slash-prefixed messages (e.g. /help, !stop). This prevents\n * conflicts with bootstrap actions (STATUS, IGNORE) and messaging plugins.\n * - Similes use ONLY slash-command forms (no natural language) so the LLM\n * won't accidentally route \"I need help\" to HELP_COMMAND instead of REPLY.\n * - The registry is scoped per runtime to prevent cross-agent state leaks.\n * - The COMMAND_REGISTRY provider includes the command list in the LLM context\n * ONLY when the message is a command, reducing prompt noise for normal messages.\n */\n\nimport {\n type IAgentRuntime,\n logger,\n type Memory,\n type Plugin,\n type Provider,\n type ProviderResult,\n type State,\n} from \"@elizaos/core\";\n// Import actions\nimport { commandsListAction } from \"./actions/commands-list\";\nimport { helpAction } from \"./actions/help\";\nimport { modelsAction } from \"./actions/models\";\nimport { statusAction } from \"./actions/status\";\nimport { stopAction } from \"./actions/stop\";\nimport { detectCommand, hasCommand, normalizeCommandBody } from \"./parser\";\nimport {\n findCommandByAlias,\n findCommandByKey,\n getCommandsByCategory,\n getEnabledCommands,\n initForRuntime,\n registerCommand,\n unregisterCommand,\n useRuntime,\n} from \"./registry\";\nimport type { CommandContext, CommandDefinition, CommandResult } from \"./types\";\n\nexport * from \"./parser\";\nexport * from \"./registry\";\n// Re-export everything\nexport * from \"./types\";\n\n/**\n * Provider that exposes available commands to the LLM context.\n *\n * Only injects the full command list when the message looks like a command.\n * For normal messages, returns a minimal hint so the LLM knows commands\n * exist but doesn't get a wall of command documentation in its context.\n */\nexport const commandRegistryProvider: Provider = {\n name: \"COMMAND_REGISTRY\",\n description: \"Available chat commands and their descriptions\",\n dynamic: true,\n\n async get(runtime: IAgentRuntime, message: Memory, _state: State): Promise<ProviderResult> {\n // Scope to the correct runtime's command store\n useRuntime(runtime.agentId);\n\n const text = message.content?.text ?? \"\";\n const isCommand = hasCommand(text);\n const commands = getEnabledCommands();\n\n if (isCommand) {\n // Full command context for command messages — helps the LLM select\n // the right action\n const commandList = commands.map((cmd) => {\n const auth = cmd.requiresAuth ? \" (requires auth)\" : \"\";\n return `- ${cmd.textAliases[0]}: ${cmd.description}${auth}`;\n });\n\n return {\n text: `The user sent a slash command. Available commands:\\n${commandList.join(\"\\n\")}\\n\\nIMPORTANT: This is a slash command — respond by executing the matching command action, not with conversational text.`,\n values: {\n commandCount: commands.length,\n isCommand: true,\n hasElevatedCommands: commands.some((c) => c.requiresElevated),\n },\n data: { commands, isCommand: true },\n };\n }\n\n // Minimal context for non-command messages — don't pollute the prompt\n return {\n text: \"\",\n values: {\n commandCount: commands.length,\n isCommand: false,\n },\n data: { isCommand: false },\n };\n },\n};\n\n/**\n * Format command result for display\n */\nexport function formatCommandResult(result: CommandResult): string {\n if (result.error) {\n return `Error: ${result.error}`;\n }\n return result.reply ?? \"Command executed\";\n}\n\n/**\n * Check if a sender is authorized\n */\nexport function isAuthorized(context: CommandContext, command: CommandDefinition): boolean {\n if (!command.requiresAuth) {\n return true;\n }\n return context.isAuthorized;\n}\n\n/**\n * Check if a sender has elevated permissions\n */\nexport function isElevated(context: CommandContext, command: CommandDefinition): boolean {\n if (!command.requiresElevated) {\n return true;\n }\n return context.isElevated;\n}\n\n/**\n * Plugin Commands\n *\n * Provides chat commands as Eliza actions. Commands are detected\n * by their text aliases (e.g., /help, /status) and executed as actions.\n *\n * Design decisions for messaging integration:\n * 1. Actions use strict validate() — only true for slash-prefixed messages\n * 2. Similes are slash-only — no natural language to prevent LLM misrouting\n * 3. Provider is context-aware — full docs for commands, empty for normal msgs\n * 4. Registry is scoped per agentId — no cross-agent contamination\n * 5. Events use proper EventType enums — not raw strings\n */\nexport const commandsPlugin: Plugin = {\n name: \"commands\",\n description: \"Chat command system with /help, /status, /reset, etc.\",\n\n providers: [commandRegistryProvider],\n\n actions: [helpAction, statusAction, stopAction, modelsAction, commandsListAction],\n\n config: {\n COMMANDS_ENABLED: \"true\",\n COMMANDS_CONFIG_ENABLED: \"false\",\n COMMANDS_DEBUG_ENABLED: \"false\",\n COMMANDS_BASH_ENABLED: \"false\",\n COMMANDS_RESTART_ENABLED: \"true\",\n },\n\n tests: [\n {\n name: \"command-detection\",\n tests: [\n {\n name: \"Detect command prefix\",\n fn: async (_runtime: IAgentRuntime) => {\n if (!hasCommand(\"/help\")) {\n throw new Error(\"Should detect /help command\");\n }\n if (!hasCommand(\"/status test\")) {\n throw new Error(\"Should detect /status with args\");\n }\n if (hasCommand(\"hello world\")) {\n throw new Error(\"Should not detect plain text as command\");\n }\n logger.success(\"Command prefix detection works correctly\");\n },\n },\n {\n name: \"Parse command with args\",\n fn: async (_runtime: IAgentRuntime) => {\n const detection = detectCommand(\"/think:high\");\n if (!detection.isCommand) {\n throw new Error(\"Should detect think command\");\n }\n if (detection.command?.key !== \"think\") {\n throw new Error(`Expected key 'think', got '${detection.command?.key}'`);\n }\n if (detection.command?.args[0] !== \"high\") {\n throw new Error(`Expected arg 'high', got '${detection.command?.args[0]}'`);\n }\n logger.success(\"Command argument parsing works correctly\");\n },\n },\n {\n name: \"Normalize command body\",\n fn: async (_runtime: IAgentRuntime) => {\n const normalized1 = normalizeCommandBody(\"/status: test\");\n if (normalized1 !== \"/status test\") {\n throw new Error(`Expected '/status test', got '${normalized1}'`);\n }\n\n const normalized2 = normalizeCommandBody(\"@bot /help\", \"bot\");\n if (normalized2 !== \"/help\") {\n throw new Error(`Expected '/help', got '${normalized2}'`);\n }\n\n logger.success(\"Command normalization works correctly\");\n },\n },\n {\n name: \"Find command by alias\",\n fn: async (_runtime: IAgentRuntime) => {\n const cmd = findCommandByAlias(\"/h\");\n if (!cmd) {\n throw new Error(\"Should find help command by /h alias\");\n }\n if (cmd.key !== \"help\") {\n throw new Error(`Expected key 'help', got '${cmd.key}'`);\n }\n logger.success(\"Command alias lookup works correctly\");\n },\n },\n {\n name: \"Find command by key\",\n fn: async (_runtime: IAgentRuntime) => {\n const cmd = findCommandByKey(\"status\");\n if (!cmd) {\n throw new Error(\"Should find status command by key\");\n }\n if (cmd.key !== \"status\") {\n throw new Error(`Expected key 'status', got '${cmd.key}'`);\n }\n logger.success(\"Command key lookup works correctly\");\n },\n },\n ],\n },\n {\n name: \"command-registry\",\n tests: [\n {\n name: \"Get enabled commands\",\n fn: async (_runtime: IAgentRuntime) => {\n const commands = getEnabledCommands();\n if (commands.length === 0) {\n throw new Error(\"Should have enabled commands\");\n }\n // Check some expected commands exist\n const cmdHelp = commands.some((c) => c.key === \"help\");\n const cmdStatus = commands.some((c) => c.key === \"status\");\n if (!cmdHelp || !cmdStatus) {\n throw new Error(\"Should have help and status commands\");\n }\n logger.success(\"Command registry works correctly\");\n },\n },\n {\n name: \"Register custom command\",\n fn: async (_runtime: IAgentRuntime) => {\n const customCmd: CommandDefinition = {\n key: \"test-custom\",\n description: \"Test custom command\",\n textAliases: [\"/test-custom\", \"/tc\"],\n scope: \"text\",\n };\n\n registerCommand(customCmd);\n const found = findCommandByKey(\"test-custom\");\n if (!found) {\n throw new Error(\"Should find registered custom command\");\n }\n\n unregisterCommand(\"test-custom\");\n const notFound = findCommandByKey(\"test-custom\");\n if (notFound) {\n throw new Error(\"Should not find unregistered command\");\n }\n\n logger.success(\"Custom command registration works correctly\");\n },\n },\n {\n name: \"Get commands by category\",\n fn: async (_runtime: IAgentRuntime) => {\n const statusCommands = getCommandsByCategory(\"status\");\n if (statusCommands.length === 0) {\n throw new Error(\"Should have status category commands\");\n }\n const allStatus = statusCommands.every((c) => c.category === \"status\");\n if (!allStatus) {\n throw new Error(\"All returned commands should be in status category\");\n }\n logger.success(\"Command categorization works correctly\");\n },\n },\n ],\n },\n ],\n\n async init(config, runtime) {\n logger.log(\"[plugin-commands] Initializing command system\");\n\n // Initialize an isolated command store for this runtime\n // This prevents cross-agent contamination in multi-agent deployments\n initForRuntime(runtime.agentId);\n\n // Configure command enablement from config\n const configEnabled = config.COMMANDS_CONFIG_ENABLED === \"true\";\n const debugEnabled = config.COMMANDS_DEBUG_ENABLED === \"true\";\n const bashEnabled = config.COMMANDS_BASH_ENABLED === \"true\";\n const restartEnabled = config.COMMANDS_RESTART_ENABLED !== \"false\";\n\n // Update command enabled states (now on the isolated copy)\n const configCmd = findCommandByKey(\"config\");\n if (configCmd) {\n configCmd.enabled = configEnabled;\n }\n\n const debugCmd = findCommandByKey(\"debug\");\n if (debugCmd) {\n debugCmd.enabled = debugEnabled;\n }\n\n const bashCmd = findCommandByKey(\"bash\");\n if (bashCmd) {\n bashCmd.enabled = bashEnabled;\n }\n\n const restartCmd = findCommandByKey(\"restart\");\n if (restartCmd) {\n restartCmd.enabled = restartEnabled;\n }\n\n const enabledCount = getEnabledCommands().length;\n logger.log(`[plugin-commands] ${enabledCount} commands enabled for agent ${runtime.agentId}`);\n },\n};\n\nexport default commandsPlugin;\n",
|
|
6
|
-
"/**\n * Command registry - defines all available chat commands\n *\n * IMPORTANT: The registry uses module-level state for convenience, but\n * provides `cloneCommands()` and `resetCommands()` so that `init()` can\n * work on isolated copies per runtime. The `init()` function in the main\n * plugin file should clone before mutating to avoid cross-agent contamination.\n */\n\nimport type { CommandDefinition } from \"./types\";\n\n// Default command definitions (frozen reference — never mutate these directly)\nconst DEFAULT_COMMANDS: ReadonlyArray<CommandDefinition> = [\n // Status commands\n {\n key: \"help\",\n nativeName: \"help\",\n description: \"Show available commands\",\n textAliases: [\"/help\", \"/h\", \"/?\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"commands\",\n nativeName: \"commands\",\n description: \"List all commands\",\n textAliases: [\"/commands\", \"/cmds\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"status\",\n nativeName: \"status\",\n description: \"Show current session status\",\n textAliases: [\"/status\", \"/s\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"context\",\n nativeName: \"context\",\n description: \"Show current context information\",\n textAliases: [\"/context\", \"/ctx\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: true,\n args: [{ name: \"mode\", description: \"Output mode (list, detail, json)\" }],\n },\n {\n key: \"whoami\",\n nativeName: \"whoami\",\n description: \"Show your identity information\",\n textAliases: [\"/whoami\", \"/who\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n\n // Session commands\n {\n key: \"stop\",\n nativeName: \"stop\",\n description: \"Stop current operation\",\n textAliases: [\"/stop\", \"/abort\", \"/cancel\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n },\n {\n key: \"restart\",\n nativeName: \"restart\",\n description: \"Restart the session\",\n textAliases: [\"/restart\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n requiresAuth: true,\n },\n {\n key: \"reset\",\n nativeName: \"reset\",\n description: \"Reset session state\",\n textAliases: [\"/reset\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n requiresAuth: true,\n },\n {\n key: \"new\",\n nativeName: \"new\",\n description: \"Start a new conversation\",\n textAliases: [\"/new\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n },\n {\n key: \"compact\",\n nativeName: \"compact\",\n description: \"Compact conversation history\",\n textAliases: [\"/compact\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: true,\n args: [{ name: \"instructions\", description: \"Optional compaction instructions\" }],\n },\n\n // Options commands\n {\n key: \"think\",\n nativeName: \"think\",\n description: \"Set thinking level\",\n textAliases: [\"/think\", \"/thinking\", \"/t\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, minimal, low, medium, high, xhigh\" }],\n },\n {\n key: \"verbose\",\n nativeName: \"verbose\",\n description: \"Set verbose output level\",\n textAliases: [\"/verbose\", \"/v\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, full\" }],\n },\n {\n key: \"reasoning\",\n nativeName: \"reasoning\",\n description: \"Set reasoning visibility\",\n textAliases: [\"/reasoning\", \"/reason\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, stream\" }],\n },\n {\n key: \"elevated\",\n nativeName: \"elevated\",\n description: \"Set elevated permission mode\",\n textAliases: [\"/elevated\", \"/elev\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, ask, full\" }],\n requiresAuth: true,\n },\n {\n key: \"model\",\n nativeName: \"model\",\n description: \"Set or show current model\",\n textAliases: [\"/model\", \"/m\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"model\", description: \"provider/model or alias\" }],\n },\n {\n key: \"models\",\n nativeName: \"models\",\n description: \"List available models\",\n textAliases: [\"/models\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: false,\n },\n {\n key: \"usage\",\n nativeName: \"usage\",\n description: \"Show token usage\",\n textAliases: [\"/usage\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: false,\n },\n {\n key: \"queue\",\n nativeName: \"queue\",\n description: \"Set queue mode\",\n textAliases: [\"/queue\", \"/q\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [\n {\n name: \"mode\",\n description: \"steer, followup, collect, interrupt, or options\",\n },\n ],\n },\n\n // Management commands\n {\n key: \"allowlist\",\n nativeName: \"allowlist\",\n description: \"Manage sender allowlist\",\n textAliases: [\"/allowlist\", \"/allow\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"action\", description: \"list, add, remove\" },\n { name: \"value\", description: \"sender to add/remove\" },\n ],\n requiresAuth: true,\n },\n {\n key: \"approve\",\n nativeName: \"approve\",\n description: \"Approve or deny a pending action\",\n textAliases: [\"/approve\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"id\", description: \"Approval ID\", required: true },\n { name: \"action\", description: \"allow-once, allow-always, deny\" },\n ],\n requiresAuth: true,\n },\n {\n key: \"subagents\",\n nativeName: \"subagents\",\n description: \"Manage subagents\",\n textAliases: [\"/subagents\", \"/sub\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [{ name: \"action\", description: \"list, stop, log, info, send\" }],\n requiresAuth: true,\n },\n {\n key: \"config\",\n nativeName: \"config\",\n description: \"View or set configuration\",\n textAliases: [\"/config\", \"/cfg\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"key\", description: \"Configuration key\" },\n { name: \"value\", description: \"Value to set\" },\n ],\n requiresAuth: true,\n enabled: false, // Disabled by default\n },\n {\n key: \"debug\",\n nativeName: \"debug\",\n description: \"Debug information\",\n textAliases: [\"/debug\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n requiresAuth: true,\n enabled: false, // Disabled by default\n },\n\n // Media commands\n {\n key: \"tts\",\n nativeName: \"tts\",\n description: \"Text-to-speech settings\",\n textAliases: [\"/tts\", \"/voice\"],\n scope: \"both\",\n category: \"media\",\n acceptsArgs: true,\n args: [\n {\n name: \"action\",\n description: \"on, off, status, provider, limit, audio\",\n },\n ],\n },\n\n // Tools commands\n {\n key: \"bash\",\n nativeName: \"bash\",\n description: \"Execute shell command\",\n textAliases: [\"/bash\", \"/sh\", \"/!\"],\n scope: \"text\",\n category: \"tools\",\n acceptsArgs: true,\n args: [\n {\n name: \"command\",\n description: \"Shell command to execute\",\n captureRemaining: true,\n },\n ],\n requiresAuth: true,\n requiresElevated: true,\n },\n];\n\n// ── Per-runtime command storage ──────────────────────────────────────────\n// Each agent runtime gets its own isolated command set via `initForRuntime()`.\n// The module-level state is used as a fallback for convenience (tests, etc.).\n//\n// Why a WeakMap? Agent runtimes may be created/destroyed; we don't want to\n// leak memory by holding strong references to disposed runtimes.\n\ninterface CommandStore {\n commands: CommandDefinition[];\n aliasMap: Map<string, CommandDefinition> | null;\n}\n\n/** Per-runtime stores keyed by agentId */\nconst runtimeStores = new Map<string, CommandStore>();\n/** Fallback store for when no runtime context is set */\nconst fallbackStore: CommandStore = {\n commands: DEFAULT_COMMANDS.map((c) => ({ ...c })),\n aliasMap: null,\n};\n/** Currently active store (set during init, reset on test teardown) */\nlet activeStore: CommandStore = fallbackStore;\n\n/**\n * Initialize an isolated command store for a specific runtime.\n * Called from plugin init() to prevent cross-agent contamination.\n */\nexport function initForRuntime(agentId: string): void {\n const store: CommandStore = {\n commands: DEFAULT_COMMANDS.map((c) => ({ ...c })),\n aliasMap: null,\n };\n runtimeStores.set(agentId, store);\n activeStore = store;\n}\n\n/**\n * Set the active command store for a given runtime.\n * Providers and actions should call this before accessing commands.\n */\nexport function useRuntime(agentId: string): void {\n const store = runtimeStores.get(agentId);\n if (store) {\n activeStore = store;\n }\n}\n\n/**\n * Get all registered commands\n */\nexport function getCommands(): CommandDefinition[] {\n return [...activeStore.commands];\n}\n\n/**\n * Get enabled commands\n */\nexport function getEnabledCommands(): CommandDefinition[] {\n return activeStore.commands.filter((cmd) => cmd.enabled !== false);\n}\n\n/**\n * Get commands by category\n */\nexport function getCommandsByCategory(category: string): CommandDefinition[] {\n return activeStore.commands.filter((cmd) => cmd.category === category && cmd.enabled !== false);\n}\n\n/**\n * Register a custom command\n */\nexport function registerCommand(command: CommandDefinition): void {\n // Remove existing command with same key\n activeStore.commands = activeStore.commands.filter((c) => c.key !== command.key);\n activeStore.commands.push(command);\n activeStore.aliasMap = null; // Invalidate cache\n}\n\n/**\n * Register multiple commands\n */\nexport function registerCommands(newCommands: CommandDefinition[]): void {\n for (const command of newCommands) {\n registerCommand(command);\n }\n}\n\n/**\n * Unregister a command\n */\nexport function unregisterCommand(key: string): void {\n activeStore.commands = activeStore.commands.filter((c) => c.key !== key);\n activeStore.aliasMap = null;\n}\n\n/**\n * Reset to default commands (for the active store)\n */\nexport function resetCommands(): void {\n activeStore.commands = DEFAULT_COMMANDS.map((c) => ({ ...c }));\n activeStore.aliasMap = null;\n}\n\n/**\n * Build and cache alias map for the active store\n */\nfunction getAliasMap(): Map<string, CommandDefinition> {\n if (activeStore.aliasMap) return activeStore.aliasMap;\n\n activeStore.aliasMap = new Map();\n for (const command of activeStore.commands) {\n if (command.enabled === false) continue;\n\n for (const alias of command.textAliases) {\n const normalized = alias.toLowerCase().trim();\n if (!activeStore.aliasMap.has(normalized)) {\n activeStore.aliasMap.set(normalized, command);\n }\n }\n }\n return activeStore.aliasMap;\n}\n\n/**\n * Find command by alias\n */\nexport function findCommandByAlias(alias: string): CommandDefinition | undefined {\n const map = getAliasMap();\n return map.get(alias.toLowerCase().trim());\n}\n\n/**\n * Find command by key\n */\nexport function findCommandByKey(key: string): CommandDefinition | undefined {\n return activeStore.commands.find((c) => c.key === key);\n}\n\n/**\n * Check if text starts with any command alias\n */\nexport function startsWithCommand(text: string): CommandDefinition | undefined {\n const map = getAliasMap();\n const normalized = text.toLowerCase().trim();\n\n // Check exact match first\n for (const [alias, command] of map) {\n if (normalized === alias) {\n return command;\n }\n if (normalized.startsWith(`${alias} `) || normalized.startsWith(`${alias}:`)) {\n return command;\n }\n }\n\n return undefined;\n}\n",
|
|
7
|
-
"/**\n * Command parser - detects and parses commands from message text\n */\n\nimport {
|
|
8
|
-
"/**\n * Commands list action\n */\n\nimport type {
|
|
9
|
-
"/**\n * Help command action\n */\n\nimport type {
|
|
10
|
-
"/**\n * Models command action\n *\n * Queries the runtime for actually registered model handlers instead of\n * using a hardcoded list. Falls back to listing registered model types\n * when detailed model info is not available.\n */\n\nimport type {
|
|
11
|
-
"/**\n * Status command action\n *\n * This is the SLASH COMMAND version (/status, /s). It is distinct from the\n * bootstrap STATUS action which handles natural language like \"what's your status?\".\n *\n * Key differences:\n * - This action ONLY activates for /status or /s slash commands (validate checks prefix)\n * - Bootstrap STATUS handles conversational requests about agent state\n * - This action shows directive/session settings; bootstrap STATUS shows tasks/room info\n * - No natural language similes to prevent conflict with bootstrap STATUS\n */\n\nimport type {
|
|
12
|
-
"/**\n * Stop command action\n *\n * Uses EventType.HOOK_COMMAND_STOP from @elizaos/core for proper integration\n * with the messaging pipeline and hook system.\n */\n\nimport type {
|
|
5
|
+
"/**\n * Plugin Commands - Chat command system for Eliza agents\n *\n * Provides a slash-command system with:\n * - /help, /status, /commands for information\n * - /stop, /reset, /compact for session control\n * - /think, /verbose, /model for options\n * - /allowlist, /approve for management\n * - /tts for media\n * - /bash for tools (elevated)\n *\n * INTEGRATION NOTES:\n * - Commands are registered as Actions with strict validate() that only\n * matches slash-prefixed messages (e.g. /help, !stop). This prevents\n * conflicts with bootstrap actions (STATUS, IGNORE) and messaging plugins.\n * - Similes use ONLY slash-command forms (no natural language) so the LLM\n * won't accidentally route \"I need help\" to HELP_COMMAND instead of REPLY.\n * - The registry is scoped per runtime to prevent cross-agent state leaks.\n * - The COMMAND_REGISTRY provider includes the command list in the LLM context\n * ONLY when the message is a command, reducing prompt noise for normal messages.\n */\n\nimport {\n type IAgentRuntime,\n type Plugin,\n type Provider,\n type ProviderResult,\n type State,\n type Memory,\n logger,\n} from \"@elizaos/core\";\n\nimport {\n detectCommand,\n hasCommand,\n normalizeCommandBody,\n parseCommand,\n} from \"./parser\";\nimport {\n findCommandByAlias,\n findCommandByKey,\n getCommands,\n getCommandsByCategory,\n getEnabledCommands,\n initForRuntime,\n registerCommand,\n registerCommands,\n resetCommands,\n startsWithCommand,\n unregisterCommand,\n useRuntime,\n} from \"./registry\";\nimport type {\n CommandContext,\n CommandDefinition,\n CommandDetectionResult,\n CommandResult,\n ParsedCommand,\n ResolvedCommand,\n} from \"./types\";\n\n// Import actions\nimport { commandsListAction } from \"./actions/commands-list\";\nimport { helpAction } from \"./actions/help\";\nimport { modelsAction } from \"./actions/models\";\nimport { statusAction } from \"./actions/status\";\nimport { stopAction } from \"./actions/stop\";\n\n// Re-export everything\nexport * from \"./types\";\nexport * from \"./registry\";\nexport * from \"./parser\";\n\n/**\n * Provider that exposes available commands to the LLM context.\n *\n * Only injects the full command list when the message looks like a command.\n * For normal messages, returns a minimal hint so the LLM knows commands\n * exist but doesn't get a wall of command documentation in its context.\n */\nexport const commandRegistryProvider: Provider = {\n name: \"COMMAND_REGISTRY\",\n description: \"Available chat commands and their descriptions\",\n dynamic: true,\n\n async get(\n runtime: IAgentRuntime,\n message: Memory,\n _state: State,\n ): Promise<ProviderResult> {\n // Scope to the correct runtime's command store\n useRuntime(runtime.agentId);\n\n const text = message.content?.text ?? \"\";\n const isCommand = hasCommand(text);\n const commands = getEnabledCommands();\n\n if (isCommand) {\n // Full command context for command messages — helps the LLM select\n // the right action\n const commandList = commands.map((cmd) => {\n const auth = cmd.requiresAuth ? \" (requires auth)\" : \"\";\n return `- ${cmd.textAliases[0]}: ${cmd.description}${auth}`;\n });\n\n return {\n text: `The user sent a slash command. Available commands:\\n${commandList.join(\"\\n\")}\\n\\nIMPORTANT: This is a slash command — respond by executing the matching command action, not with conversational text.`,\n values: {\n commandCount: commands.length,\n isCommand: true,\n hasElevatedCommands: commands.some((c) => c.requiresElevated),\n },\n data: { commands, isCommand: true },\n };\n }\n\n // Minimal context for non-command messages — don't pollute the prompt\n return {\n text: \"\",\n values: {\n commandCount: commands.length,\n isCommand: false,\n },\n data: { isCommand: false },\n };\n },\n};\n\n/**\n * Format command result for display\n */\nexport function formatCommandResult(result: CommandResult): string {\n if (result.error) {\n return `Error: ${result.error}`;\n }\n return result.reply ?? \"Command executed\";\n}\n\n/**\n * Check if a sender is authorized\n */\nexport function isAuthorized(\n context: CommandContext,\n command: CommandDefinition,\n): boolean {\n if (!command.requiresAuth) {\n return true;\n }\n return context.isAuthorized;\n}\n\n/**\n * Check if a sender has elevated permissions\n */\nexport function isElevated(\n context: CommandContext,\n command: CommandDefinition,\n): boolean {\n if (!command.requiresElevated) {\n return true;\n }\n return context.isElevated;\n}\n\n/**\n * Plugin Commands\n *\n * Provides chat commands as Eliza actions. Commands are detected\n * by their text aliases (e.g., /help, /status) and executed as actions.\n *\n * Design decisions for messaging integration:\n * 1. Actions use strict validate() — only true for slash-prefixed messages\n * 2. Similes are slash-only — no natural language to prevent LLM misrouting\n * 3. Provider is context-aware — full docs for commands, empty for normal msgs\n * 4. Registry is scoped per agentId — no cross-agent contamination\n * 5. Events use proper EventType enums — not raw strings\n */\nexport const commandsPlugin: Plugin = {\n name: \"commands\",\n description: \"Chat command system with /help, /status, /reset, etc.\",\n\n providers: [commandRegistryProvider],\n\n actions: [\n helpAction,\n statusAction,\n stopAction,\n modelsAction,\n commandsListAction,\n ],\n\n config: {\n COMMANDS_ENABLED: \"true\",\n COMMANDS_CONFIG_ENABLED: \"false\",\n COMMANDS_DEBUG_ENABLED: \"false\",\n COMMANDS_BASH_ENABLED: \"false\",\n COMMANDS_RESTART_ENABLED: \"true\",\n },\n\n tests: [\n {\n name: \"command-detection\",\n tests: [\n {\n name: \"Detect command prefix\",\n fn: async (_runtime: IAgentRuntime) => {\n if (!hasCommand(\"/help\")) {\n throw new Error(\"Should detect /help command\");\n }\n if (!hasCommand(\"/status test\")) {\n throw new Error(\"Should detect /status with args\");\n }\n if (hasCommand(\"hello world\")) {\n throw new Error(\"Should not detect plain text as command\");\n }\n logger.success(\"Command prefix detection works correctly\");\n },\n },\n {\n name: \"Parse command with args\",\n fn: async (_runtime: IAgentRuntime) => {\n const detection = detectCommand(\"/think:high\");\n if (!detection.isCommand) {\n throw new Error(\"Should detect think command\");\n }\n if (detection.command?.key !== \"think\") {\n throw new Error(\n `Expected key 'think', got '${detection.command?.key}'`,\n );\n }\n if (detection.command?.args[0] !== \"high\") {\n throw new Error(\n `Expected arg 'high', got '${detection.command?.args[0]}'`,\n );\n }\n logger.success(\"Command argument parsing works correctly\");\n },\n },\n {\n name: \"Normalize command body\",\n fn: async (_runtime: IAgentRuntime) => {\n const normalized1 = normalizeCommandBody(\"/status: test\");\n if (normalized1 !== \"/status test\") {\n throw new Error(`Expected '/status test', got '${normalized1}'`);\n }\n\n const normalized2 = normalizeCommandBody(\"@bot /help\", \"bot\");\n if (normalized2 !== \"/help\") {\n throw new Error(`Expected '/help', got '${normalized2}'`);\n }\n\n logger.success(\"Command normalization works correctly\");\n },\n },\n {\n name: \"Find command by alias\",\n fn: async (_runtime: IAgentRuntime) => {\n const cmd = findCommandByAlias(\"/h\");\n if (!cmd) {\n throw new Error(\"Should find help command by /h alias\");\n }\n if (cmd.key !== \"help\") {\n throw new Error(`Expected key 'help', got '${cmd.key}'`);\n }\n logger.success(\"Command alias lookup works correctly\");\n },\n },\n {\n name: \"Find command by key\",\n fn: async (_runtime: IAgentRuntime) => {\n const cmd = findCommandByKey(\"status\");\n if (!cmd) {\n throw new Error(\"Should find status command by key\");\n }\n if (cmd.key !== \"status\") {\n throw new Error(`Expected key 'status', got '${cmd.key}'`);\n }\n logger.success(\"Command key lookup works correctly\");\n },\n },\n ],\n },\n {\n name: \"command-registry\",\n tests: [\n {\n name: \"Get enabled commands\",\n fn: async (_runtime: IAgentRuntime) => {\n const commands = getEnabledCommands();\n if (commands.length === 0) {\n throw new Error(\"Should have enabled commands\");\n }\n // Check some expected commands exist\n const cmdHelp = commands.some((c) => c.key === \"help\");\n const cmdStatus = commands.some((c) => c.key === \"status\");\n if (!cmdHelp || !cmdStatus) {\n throw new Error(\"Should have help and status commands\");\n }\n logger.success(\"Command registry works correctly\");\n },\n },\n {\n name: \"Register custom command\",\n fn: async (_runtime: IAgentRuntime) => {\n const customCmd: CommandDefinition = {\n key: \"test-custom\",\n description: \"Test custom command\",\n textAliases: [\"/test-custom\", \"/tc\"],\n scope: \"text\",\n };\n\n registerCommand(customCmd);\n const found = findCommandByKey(\"test-custom\");\n if (!found) {\n throw new Error(\"Should find registered custom command\");\n }\n\n unregisterCommand(\"test-custom\");\n const notFound = findCommandByKey(\"test-custom\");\n if (notFound) {\n throw new Error(\"Should not find unregistered command\");\n }\n\n logger.success(\"Custom command registration works correctly\");\n },\n },\n {\n name: \"Get commands by category\",\n fn: async (_runtime: IAgentRuntime) => {\n const statusCommands = getCommandsByCategory(\"status\");\n if (statusCommands.length === 0) {\n throw new Error(\"Should have status category commands\");\n }\n const allStatus = statusCommands.every(\n (c) => c.category === \"status\",\n );\n if (!allStatus) {\n throw new Error(\n \"All returned commands should be in status category\",\n );\n }\n logger.success(\"Command categorization works correctly\");\n },\n },\n ],\n },\n ],\n\n async init(config, runtime) {\n logger.log(\"[plugin-commands] Initializing command system\");\n\n // Initialize an isolated command store for this runtime\n // This prevents cross-agent contamination in multi-agent deployments\n initForRuntime(runtime.agentId);\n\n // Configure command enablement from config\n const configEnabled = config.COMMANDS_CONFIG_ENABLED === \"true\";\n const debugEnabled = config.COMMANDS_DEBUG_ENABLED === \"true\";\n const bashEnabled = config.COMMANDS_BASH_ENABLED === \"true\";\n const restartEnabled = config.COMMANDS_RESTART_ENABLED !== \"false\";\n\n // Update command enabled states (now on the isolated copy)\n const configCmd = findCommandByKey(\"config\");\n if (configCmd) {\n configCmd.enabled = configEnabled;\n }\n\n const debugCmd = findCommandByKey(\"debug\");\n if (debugCmd) {\n debugCmd.enabled = debugEnabled;\n }\n\n const bashCmd = findCommandByKey(\"bash\");\n if (bashCmd) {\n bashCmd.enabled = bashEnabled;\n }\n\n const restartCmd = findCommandByKey(\"restart\");\n if (restartCmd) {\n restartCmd.enabled = restartEnabled;\n }\n\n const enabledCount = getEnabledCommands().length;\n logger.log(\n `[plugin-commands] ${enabledCount} commands enabled for agent ${runtime.agentId}`,\n );\n },\n};\n\nexport default commandsPlugin;\n",
|
|
6
|
+
"/**\n * Command registry - defines all available chat commands\n *\n * IMPORTANT: The registry uses module-level state for convenience, but\n * provides `cloneCommands()` and `resetCommands()` so that `init()` can\n * work on isolated copies per runtime. The `init()` function in the main\n * plugin file should clone before mutating to avoid cross-agent contamination.\n */\n\nimport type { CommandDefinition } from \"./types\";\n\n// Default command definitions (frozen reference — never mutate these directly)\nconst DEFAULT_COMMANDS: ReadonlyArray<CommandDefinition> = [\n // Status commands\n {\n key: \"help\",\n nativeName: \"help\",\n description: \"Show available commands\",\n textAliases: [\"/help\", \"/h\", \"/?\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"commands\",\n nativeName: \"commands\",\n description: \"List all commands\",\n textAliases: [\"/commands\", \"/cmds\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"status\",\n nativeName: \"status\",\n description: \"Show current session status\",\n textAliases: [\"/status\", \"/s\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n {\n key: \"context\",\n nativeName: \"context\",\n description: \"Show current context information\",\n textAliases: [\"/context\", \"/ctx\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: true,\n args: [{ name: \"mode\", description: \"Output mode (list, detail, json)\" }],\n },\n {\n key: \"whoami\",\n nativeName: \"whoami\",\n description: \"Show your identity information\",\n textAliases: [\"/whoami\", \"/who\"],\n scope: \"both\",\n category: \"status\",\n acceptsArgs: false,\n },\n\n // Session commands\n {\n key: \"stop\",\n nativeName: \"stop\",\n description: \"Stop current operation\",\n textAliases: [\"/stop\", \"/abort\", \"/cancel\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n },\n {\n key: \"restart\",\n nativeName: \"restart\",\n description: \"Restart the session\",\n textAliases: [\"/restart\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n requiresAuth: true,\n },\n {\n key: \"reset\",\n nativeName: \"reset\",\n description: \"Reset session state\",\n textAliases: [\"/reset\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n requiresAuth: true,\n },\n {\n key: \"new\",\n nativeName: \"new\",\n description: \"Start a new conversation\",\n textAliases: [\"/new\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: false,\n },\n {\n key: \"compact\",\n nativeName: \"compact\",\n description: \"Compact conversation history\",\n textAliases: [\"/compact\"],\n scope: \"both\",\n category: \"session\",\n acceptsArgs: true,\n args: [\n { name: \"instructions\", description: \"Optional compaction instructions\" },\n ],\n },\n\n // Options commands\n {\n key: \"think\",\n nativeName: \"think\",\n description: \"Set thinking level\",\n textAliases: [\"/think\", \"/thinking\", \"/t\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [\n { name: \"level\", description: \"off, minimal, low, medium, high, xhigh\" },\n ],\n },\n {\n key: \"verbose\",\n nativeName: \"verbose\",\n description: \"Set verbose output level\",\n textAliases: [\"/verbose\", \"/v\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, full\" }],\n },\n {\n key: \"reasoning\",\n nativeName: \"reasoning\",\n description: \"Set reasoning visibility\",\n textAliases: [\"/reasoning\", \"/reason\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, stream\" }],\n },\n {\n key: \"elevated\",\n nativeName: \"elevated\",\n description: \"Set elevated permission mode\",\n textAliases: [\"/elevated\", \"/elev\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"level\", description: \"off, on, ask, full\" }],\n requiresAuth: true,\n },\n {\n key: \"model\",\n nativeName: \"model\",\n description: \"Set or show current model\",\n textAliases: [\"/model\", \"/m\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [{ name: \"model\", description: \"provider/model or alias\" }],\n },\n {\n key: \"models\",\n nativeName: \"models\",\n description: \"List available models\",\n textAliases: [\"/models\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: false,\n },\n {\n key: \"usage\",\n nativeName: \"usage\",\n description: \"Show token usage\",\n textAliases: [\"/usage\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: false,\n },\n {\n key: \"queue\",\n nativeName: \"queue\",\n description: \"Set queue mode\",\n textAliases: [\"/queue\", \"/q\"],\n scope: \"both\",\n category: \"options\",\n acceptsArgs: true,\n args: [\n {\n name: \"mode\",\n description: \"steer, followup, collect, interrupt, or options\",\n },\n ],\n },\n\n // Management commands\n {\n key: \"allowlist\",\n nativeName: \"allowlist\",\n description: \"Manage sender allowlist\",\n textAliases: [\"/allowlist\", \"/allow\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"action\", description: \"list, add, remove\" },\n { name: \"value\", description: \"sender to add/remove\" },\n ],\n requiresAuth: true,\n },\n {\n key: \"approve\",\n nativeName: \"approve\",\n description: \"Approve or deny a pending action\",\n textAliases: [\"/approve\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"id\", description: \"Approval ID\", required: true },\n { name: \"action\", description: \"allow-once, allow-always, deny\" },\n ],\n requiresAuth: true,\n },\n {\n key: \"subagents\",\n nativeName: \"subagents\",\n description: \"Manage subagents\",\n textAliases: [\"/subagents\", \"/sub\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [{ name: \"action\", description: \"list, stop, log, info, send\" }],\n requiresAuth: true,\n },\n {\n key: \"config\",\n nativeName: \"config\",\n description: \"View or set configuration\",\n textAliases: [\"/config\", \"/cfg\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n args: [\n { name: \"key\", description: \"Configuration key\" },\n { name: \"value\", description: \"Value to set\" },\n ],\n requiresAuth: true,\n enabled: false, // Disabled by default\n },\n {\n key: \"debug\",\n nativeName: \"debug\",\n description: \"Debug information\",\n textAliases: [\"/debug\"],\n scope: \"both\",\n category: \"management\",\n acceptsArgs: true,\n requiresAuth: true,\n enabled: false, // Disabled by default\n },\n\n // Media commands\n {\n key: \"tts\",\n nativeName: \"tts\",\n description: \"Text-to-speech settings\",\n textAliases: [\"/tts\", \"/voice\"],\n scope: \"both\",\n category: \"media\",\n acceptsArgs: true,\n args: [\n {\n name: \"action\",\n description: \"on, off, status, provider, limit, audio\",\n },\n ],\n },\n\n // Tools commands\n {\n key: \"bash\",\n nativeName: \"bash\",\n description: \"Execute shell command\",\n textAliases: [\"/bash\", \"/sh\", \"/!\"],\n scope: \"text\",\n category: \"tools\",\n acceptsArgs: true,\n args: [\n {\n name: \"command\",\n description: \"Shell command to execute\",\n captureRemaining: true,\n },\n ],\n requiresAuth: true,\n requiresElevated: true,\n },\n];\n\n// ── Per-runtime command storage ──────────────────────────────────────────\n// Each agent runtime gets its own isolated command set via `initForRuntime()`.\n// The module-level state is used as a fallback for convenience (tests, etc.).\n//\n// Why a WeakMap? Agent runtimes may be created/destroyed; we don't want to\n// leak memory by holding strong references to disposed runtimes.\n\ninterface CommandStore {\n commands: CommandDefinition[];\n aliasMap: Map<string, CommandDefinition> | null;\n}\n\n/** Per-runtime stores keyed by agentId */\nconst runtimeStores = new Map<string, CommandStore>();\n/** Fallback store for when no runtime context is set */\nlet fallbackStore: CommandStore = {\n commands: DEFAULT_COMMANDS.map((c) => ({ ...c })),\n aliasMap: null,\n};\n/** Currently active store (set during init, reset on test teardown) */\nlet activeStore: CommandStore = fallbackStore;\n\n/**\n * Initialize an isolated command store for a specific runtime.\n * Called from plugin init() to prevent cross-agent contamination.\n */\nexport function initForRuntime(agentId: string): void {\n const store: CommandStore = {\n commands: DEFAULT_COMMANDS.map((c) => ({ ...c })),\n aliasMap: null,\n };\n runtimeStores.set(agentId, store);\n activeStore = store;\n}\n\n/**\n * Set the active command store for a given runtime.\n * Providers and actions should call this before accessing commands.\n */\nexport function useRuntime(agentId: string): void {\n const store = runtimeStores.get(agentId);\n if (store) {\n activeStore = store;\n }\n}\n\n/**\n * Get all registered commands\n */\nexport function getCommands(): CommandDefinition[] {\n return [...activeStore.commands];\n}\n\n/**\n * Get enabled commands\n */\nexport function getEnabledCommands(): CommandDefinition[] {\n return activeStore.commands.filter((cmd) => cmd.enabled !== false);\n}\n\n/**\n * Get commands by category\n */\nexport function getCommandsByCategory(category: string): CommandDefinition[] {\n return activeStore.commands.filter(\n (cmd) => cmd.category === category && cmd.enabled !== false,\n );\n}\n\n/**\n * Register a custom command\n */\nexport function registerCommand(command: CommandDefinition): void {\n // Remove existing command with same key\n activeStore.commands = activeStore.commands.filter(\n (c) => c.key !== command.key,\n );\n activeStore.commands.push(command);\n activeStore.aliasMap = null; // Invalidate cache\n}\n\n/**\n * Register multiple commands\n */\nexport function registerCommands(newCommands: CommandDefinition[]): void {\n for (const command of newCommands) {\n registerCommand(command);\n }\n}\n\n/**\n * Unregister a command\n */\nexport function unregisterCommand(key: string): void {\n activeStore.commands = activeStore.commands.filter((c) => c.key !== key);\n activeStore.aliasMap = null;\n}\n\n/**\n * Reset to default commands (for the active store)\n */\nexport function resetCommands(): void {\n activeStore.commands = DEFAULT_COMMANDS.map((c) => ({ ...c }));\n activeStore.aliasMap = null;\n}\n\n/**\n * Build and cache alias map for the active store\n */\nfunction getAliasMap(): Map<string, CommandDefinition> {\n if (activeStore.aliasMap) return activeStore.aliasMap;\n\n activeStore.aliasMap = new Map();\n for (const command of activeStore.commands) {\n if (command.enabled === false) continue;\n\n for (const alias of command.textAliases) {\n const normalized = alias.toLowerCase().trim();\n if (!activeStore.aliasMap.has(normalized)) {\n activeStore.aliasMap.set(normalized, command);\n }\n }\n }\n return activeStore.aliasMap;\n}\n\n/**\n * Find command by alias\n */\nexport function findCommandByAlias(\n alias: string,\n): CommandDefinition | undefined {\n const map = getAliasMap();\n return map.get(alias.toLowerCase().trim());\n}\n\n/**\n * Find command by key\n */\nexport function findCommandByKey(key: string): CommandDefinition | undefined {\n return activeStore.commands.find((c) => c.key === key);\n}\n\n/**\n * Check if text starts with any command alias\n */\nexport function startsWithCommand(text: string): CommandDefinition | undefined {\n const map = getAliasMap();\n const normalized = text.toLowerCase().trim();\n\n // Check exact match first\n for (const [alias, command] of map) {\n if (normalized === alias) {\n return command;\n }\n if (\n normalized.startsWith(alias + \" \") ||\n normalized.startsWith(alias + \":\")\n ) {\n return command;\n }\n }\n\n return undefined;\n}\n",
|
|
7
|
+
"/**\n * Command parser - detects and parses commands from message text\n */\n\nimport type {\n CommandDefinition,\n CommandDetectionResult,\n ParsedCommand,\n} from \"./types\";\nimport { findCommandByAlias, startsWithCommand } from \"./registry\";\n\nconst escapeRegExp = (value: string) =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * Check if text contains a command\n */\nexport function hasCommand(text: string): boolean {\n if (!text) return false;\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"/\") && !trimmed.startsWith(\"!\")) return false;\n return Boolean(startsWithCommand(trimmed));\n}\n\n/**\n * Detect command in text\n */\nexport function detectCommand(text: string): CommandDetectionResult {\n if (!text) {\n return { isCommand: false };\n }\n\n const trimmed = text.trim();\n\n // Quick check for command prefix\n if (!trimmed.startsWith(\"/\") && !trimmed.startsWith(\"!\")) {\n return { isCommand: false };\n }\n\n const command = startsWithCommand(trimmed);\n if (!command) {\n return { isCommand: false };\n }\n\n const parsed = parseCommand(trimmed, command);\n if (!parsed) {\n return { isCommand: false };\n }\n\n return { isCommand: true, command: parsed };\n}\n\n/**\n * Parse a command from text\n */\nexport function parseCommand(\n text: string,\n definition: CommandDefinition,\n): ParsedCommand | null {\n const trimmed = text.trim();\n\n // Find the matching alias\n let matchedAlias: string | null = null;\n for (const alias of definition.textAliases) {\n const normalized = alias.toLowerCase();\n if (trimmed.toLowerCase() === normalized) {\n matchedAlias = alias;\n break;\n }\n if (\n trimmed.toLowerCase().startsWith(normalized + \" \") ||\n trimmed.toLowerCase().startsWith(normalized + \":\")\n ) {\n matchedAlias = alias;\n break;\n }\n }\n\n if (!matchedAlias) {\n return null;\n }\n\n // Extract arguments\n let rawArgs = trimmed.slice(matchedAlias.length).trim();\n\n // Handle colon separator (e.g., /think:high)\n if (rawArgs.startsWith(\":\")) {\n rawArgs = rawArgs.slice(1).trim();\n }\n\n // Parse arguments\n const args = parseArgs(rawArgs, definition);\n\n return {\n key: definition.key,\n canonical: definition.textAliases[0] ?? `/${definition.key}`,\n args,\n rawArgs: rawArgs || undefined,\n };\n}\n\n/**\n * Parse arguments based on command definition\n */\nfunction parseArgs(rawArgs: string, definition: CommandDefinition): string[] {\n if (!rawArgs || !definition.acceptsArgs) {\n return [];\n }\n\n const parsing = definition.argsParsing ?? \"positional\";\n\n if (parsing === \"none\") {\n // Return entire string as single argument\n return rawArgs ? [rawArgs] : [];\n }\n\n // Positional parsing\n const args: string[] = [];\n const argDefs = definition.args ?? [];\n\n // Split by whitespace, respecting quotes\n const tokens = tokenize(rawArgs);\n\n for (let i = 0; i < tokens.length; i++) {\n const argDef = argDefs[i];\n\n // If this arg captures remaining, join all remaining tokens\n if (argDef?.captureRemaining) {\n args.push(tokens.slice(i).join(\" \"));\n break;\n }\n\n args.push(tokens[i]);\n }\n\n return args;\n}\n\n/**\n * Tokenize argument string, respecting quotes\n */\nfunction tokenize(input: string): string[] {\n const tokens: string[] = [];\n let current = \"\";\n let inQuote = false;\n let quoteChar = \"\";\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n\n if (inQuote) {\n if (char === quoteChar) {\n inQuote = false;\n if (current) {\n tokens.push(current);\n current = \"\";\n }\n } else {\n current += char;\n }\n } else if (char === '\"' || char === \"'\") {\n inQuote = true;\n quoteChar = char;\n } else if (/\\s/.test(char)) {\n if (current) {\n tokens.push(current);\n current = \"\";\n }\n } else {\n current += char;\n }\n }\n\n if (current) {\n tokens.push(current);\n }\n\n return tokens;\n}\n\n/**\n * Normalize command body (handle bot mentions, colon syntax, etc.)\n */\nexport function normalizeCommandBody(\n text: string,\n botMention?: string,\n): string {\n let normalized = text.trim();\n\n // Remove bot mention prefix (e.g., \"@bot /status\" -> \"/status\")\n if (botMention) {\n const mentionPattern = new RegExp(`^@${escapeRegExp(botMention)}\\\\s*`, \"i\");\n normalized = normalized.replace(mentionPattern, \"\");\n }\n\n // Handle colon in command (e.g., \"/command: args\" -> \"/command args\")\n normalized = normalized.replace(/^(\\/\\w+):\\s*/, \"$1 \");\n\n return normalized.trim();\n}\n\n/**\n * Check if text is a command-only message (no other content)\n */\nexport function isCommandOnly(text: string): boolean {\n const detection = detectCommand(text);\n if (!detection.isCommand || !detection.command) {\n return false;\n }\n\n // If there's no rawArgs, it's command-only\n if (!detection.command.rawArgs) {\n return true;\n }\n\n // Check if rawArgs is just whitespace\n return detection.command.rawArgs.trim().length === 0;\n}\n\n/**\n * Get command and remaining text\n */\nexport function extractCommand(\n text: string,\n): { command: ParsedCommand; remainingText: string } | null {\n const detection = detectCommand(text);\n if (!detection.isCommand || !detection.command) {\n return null;\n }\n\n const { command } = detection;\n\n // For commands that don't accept args, remaining text is everything after the command\n if (!command.rawArgs) {\n return { command, remainingText: \"\" };\n }\n\n return { command, remainingText: command.rawArgs };\n}\n",
|
|
8
|
+
"/**\n * Commands list action\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { getEnabledCommands } from \"../registry\";\nimport { detectCommand } from \"../parser\";\n\nexport const commandsListAction: Action = {\n name: \"COMMANDS_LIST\",\n description:\n \"List all available commands with their aliases. Only activates for /commands or /cmds slash commands.\",\n // Only slash-command similes to avoid matching natural language\n similes: [\"/commands\", \"/cmds\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n // Strict: only activate for slash commands, never natural language\n const detection = detectCommand(text);\n return detection.isCommand && detection.command?.key === \"commands\";\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n const commands = getEnabledCommands();\n const lines: string[] = [`**Commands (${commands.length}):**\\n`];\n\n for (const cmd of commands) {\n const aliases = cmd.textAliases.join(\", \");\n const authNote = cmd.requiresAuth ? \" [auth]\" : \"\";\n const elevatedNote = cmd.requiresElevated ? \" [elevated]\" : \"\";\n lines.push(`• **${cmd.key}**: ${aliases}${authNote}${elevatedNote}`);\n }\n\n const replyText = lines.join(\"\\n\");\n await callback?.({ text: replyText });\n\n return {\n success: true,\n text: replyText,\n data: { commandCount: commands.length },\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/commands\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Commands (15):**\\n\\n• **help**: /help, /h, /?\\n• **status**: /status, /s...\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
9
|
+
"/**\n * Help command action\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { getCommandsByCategory, getEnabledCommands } from \"../registry\";\nimport { detectCommand } from \"../parser\";\n\n/**\n * Format command list for help display\n */\nfunction formatCommandList(\n commands: ReturnType<typeof getEnabledCommands>,\n): string {\n const lines: string[] = [\"**Available Commands:**\\n\"];\n\n const categories = [\n { key: \"status\", name: \"Status\" },\n { key: \"session\", name: \"Session\" },\n { key: \"options\", name: \"Options\" },\n { key: \"management\", name: \"Management\" },\n { key: \"media\", name: \"Media\" },\n { key: \"tools\", name: \"Tools\" },\n ];\n\n for (const cat of categories) {\n const catCommands = commands.filter((c) => c.category === cat.key);\n if (catCommands.length === 0) continue;\n\n lines.push(`\\n**${cat.name}:**`);\n for (const cmd of catCommands) {\n const aliases = cmd.textAliases.slice(0, 2).join(\", \");\n lines.push(`• ${aliases} - ${cmd.description}`);\n }\n }\n\n // Add uncategorized commands\n const uncategorized = commands.filter((c) => !c.category);\n if (uncategorized.length > 0) {\n lines.push(\"\\n**Other:**\");\n for (const cmd of uncategorized) {\n const aliases = cmd.textAliases.slice(0, 2).join(\", \");\n lines.push(`• ${aliases} - ${cmd.description}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nexport const helpAction: Action = {\n name: \"HELP_COMMAND\",\n description:\n \"Show available commands and their descriptions. Only activates for /help, /h, or /? slash commands.\",\n // Only slash-command similes — \"help\" or \"show help\" as natural language\n // should be handled by the LLM's normal response, not this action\n similes: [\"/help\", \"/h\", \"/?\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n // Strict: only activate for slash commands, never natural language\n const detection = detectCommand(text);\n return detection.isCommand && detection.command?.key === \"help\";\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n const commands = getEnabledCommands();\n const helpText = formatCommandList(commands);\n\n await callback?.({ text: helpText });\n\n return {\n success: true,\n text: helpText,\n data: { commandCount: commands.length },\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/help\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Available Commands:**\\n\\n**Status:**\\n• /help - Show available commands...\",\n },\n },\n ],\n [\n { user: \"user\", content: { text: \"/?\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Available Commands:**\\n\\n**Status:**\\n• /help - Show available commands...\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
10
|
+
"/**\n * Models command action\n *\n * Queries the runtime for actually registered model handlers instead of\n * using a hardcoded list. Falls back to listing registered model types\n * when detailed model info is not available.\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { ModelType, logger } from \"@elizaos/core\";\nimport { detectCommand } from \"../parser\";\n\n/**\n * Describe a ModelType value in a user-friendly way\n */\nfunction describeModelType(modelType: string): string {\n const descriptions: Record<string, string> = {\n [ModelType.TEXT_SMALL]: \"Text (Small)\",\n [ModelType.TEXT_LARGE]: \"Text (Large)\",\n [ModelType.TEXT_REASONING_SMALL]: \"Reasoning (Small)\",\n [ModelType.TEXT_REASONING_LARGE]: \"Reasoning (Large)\",\n [ModelType.TEXT_COMPLETION]: \"Text Completion\",\n [ModelType.TEXT_EMBEDDING]: \"Embedding\",\n [ModelType.IMAGE]: \"Image Generation\",\n [ModelType.IMAGE_DESCRIPTION]: \"Image Description\",\n [ModelType.TRANSCRIPTION]: \"Transcription\",\n [ModelType.TEXT_TO_SPEECH]: \"Text-to-Speech\",\n [ModelType.AUDIO]: \"Audio\",\n [ModelType.VIDEO]: \"Video\",\n [ModelType.OBJECT_SMALL]: \"Object (Small)\",\n [ModelType.OBJECT_LARGE]: \"Object (Large)\",\n [ModelType.RESEARCH]: \"Research\",\n };\n return descriptions[modelType] ?? modelType;\n}\n\nexport const modelsAction: Action = {\n name: \"MODELS_COMMAND\",\n description:\n \"List available AI models and providers. Only activates for /models slash command.\",\n // Only slash-command similes to avoid matching natural language\n similes: [\"/models\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n // Strict: only activate for slash commands, never natural language\n const detection = detectCommand(text);\n return detection.isCommand && detection.command?.key === \"models\";\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n const lines: string[] = [\"**Available Models:**\\n\"];\n\n // Query runtime for registered model handlers\n try {\n const registeredTypes: string[] = [];\n const seen = new Set<string>();\n\n // Check each ModelType to see if a handler is registered.\n // Deduplicate since ModelType has legacy aliases (SMALL, MEDIUM, LARGE)\n // that map to the same underlying values.\n for (const modelType of Object.values(ModelType)) {\n if (seen.has(modelType)) continue;\n seen.add(modelType);\n try {\n // runtime.getModel() returns the handler or undefined\n const handler = runtime.getModel(modelType);\n if (handler) {\n registeredTypes.push(modelType);\n }\n } catch {\n // Model type not registered\n }\n }\n\n if (registeredTypes.length > 0) {\n lines.push(\"**Registered Model Types:**\");\n for (const modelType of registeredTypes) {\n lines.push(`• ${describeModelType(modelType)} (\\`${modelType}\\`)`);\n }\n } else {\n lines.push(\"No model handlers are currently registered.\");\n }\n\n // Show current model settings if available\n const modelProvider = runtime.getSetting(\"MODEL_PROVIDER\");\n const modelName = runtime.getSetting(\"MODEL_NAME\");\n if (modelProvider || modelName) {\n lines.push(\"\\n**Current Configuration:**\");\n if (modelProvider) lines.push(`• Provider: ${modelProvider}`);\n if (modelName) lines.push(`• Model: ${modelName}`);\n }\n } catch (err) {\n logger.warn(\n { src: \"plugin-commands\", err },\n \"Error querying runtime models\",\n );\n lines.push(\"Unable to query available models.\");\n }\n\n lines.push(\"\\n\\n_Use /model <provider/model> to switch models._\");\n\n const replyText = lines.join(\"\\n\");\n await callback?.({ text: replyText });\n\n return {\n success: true,\n text: replyText,\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/models\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Available Models:**\\n\\n**Registered Model Types:**\\n• Text (Large) (`text_large`)\\n• Text (Small) (`text_small`)...\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
11
|
+
"/**\n * Status command action\n *\n * This is the SLASH COMMAND version (/status, /s). It is distinct from the\n * bootstrap STATUS action which handles natural language like \"what's your status?\".\n *\n * Key differences:\n * - This action ONLY activates for /status or /s slash commands (validate checks prefix)\n * - Bootstrap STATUS handles conversational requests about agent state\n * - This action shows directive/session settings; bootstrap STATUS shows tasks/room info\n * - No natural language similes to prevent conflict with bootstrap STATUS\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { detectCommand } from \"../parser\";\n\ninterface DirectiveModelState {\n provider?: string;\n model?: string;\n}\n\ninterface DirectiveSessionState {\n thinking: string | boolean;\n verbose: boolean | string;\n reasoning: boolean | string;\n elevated: boolean | string;\n model?: DirectiveModelState;\n}\n\ninterface DirectiveParserService {\n getSessionState?: (roomId: string) => DirectiveSessionState | undefined;\n}\n\n/**\n * Build status report including directive state\n */\nasync function buildStatusReport(\n runtime: IAgentRuntime,\n roomId: string,\n): Promise<string> {\n const lines: string[] = [\"**Session Status:**\\n\"];\n\n // Agent info\n lines.push(`**Agent:** ${runtime.character.name ?? runtime.agentId}`);\n lines.push(`**Room:** ${roomId}`);\n\n // Try to get directive state from plugin-directives if available\n try {\n const directiveService =\n runtime.getService<DirectiveParserService>(\"directive-parser\");\n if (directiveService) {\n const state = directiveService.getSessionState?.(roomId);\n if (state) {\n lines.push(`\\n**Directives:**`);\n lines.push(`• Thinking: ${state.thinking}`);\n lines.push(`• Verbose: ${state.verbose}`);\n lines.push(`• Reasoning: ${state.reasoning}`);\n lines.push(`• Elevated: ${state.elevated}`);\n if (state.model?.provider || state.model?.model) {\n const modelStr = state.model.provider\n ? `${state.model.provider}/${state.model.model}`\n : state.model.model;\n lines.push(`• Model: ${modelStr}`);\n }\n }\n }\n } catch {\n // Directive plugin not available\n }\n\n // Get pending tasks count for context\n try {\n const tasks = await runtime.getTasks({ roomId });\n if (tasks.length > 0) {\n lines.push(`\\n**Tasks:** ${tasks.length} pending`);\n }\n } catch {\n // Task retrieval may not be available\n }\n\n return lines.join(\"\\n\");\n}\n\nexport const statusAction: Action = {\n // Deliberately distinct from bootstrap's \"STATUS\" action name\n // Normalized: \"statuscommand\" vs \"status\" — no exact match collision\n name: \"STATUS_COMMAND\",\n description:\n \"Show session directive settings via /status slash command. Only activates for /status or /s prefix.\",\n // Only slash-command similes — no natural language to avoid stealing\n // from bootstrap STATUS which handles \"what's your status?\" etc.\n similes: [\"/status\", \"/s\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n // Strict: only activate for slash commands, never natural language\n const detection = detectCommand(text);\n return detection.isCommand && detection.command?.key === \"status\";\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n const statusText = await buildStatusReport(runtime, message.roomId);\n\n await callback?.({ text: statusText });\n\n return {\n success: true,\n text: statusText,\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/status\" } },\n {\n user: \"assistant\",\n content: {\n text: \"**Session Status:**\\n\\n**Agent:** Eliza\\n**Room:** room-456\\n\\n**Directives:**\\n• Thinking: low...\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
12
|
+
"/**\n * Stop command action\n *\n * Uses EventType.HOOK_COMMAND_STOP from @elizaos/core for proper integration\n * with the messaging pipeline and hook system.\n */\n\nimport type {\n Action,\n ActionExample,\n IAgentRuntime,\n Memory,\n} from \"@elizaos/core\";\nimport { EventType, logger } from \"@elizaos/core\";\nimport { detectCommand } from \"../parser\";\n\nexport const stopAction: Action = {\n name: \"STOP_COMMAND\",\n description:\n \"Stop current operation or abort running tasks. Triggered by /stop, /abort, or /cancel slash commands only.\",\n // Only use slash-command similes to avoid matching natural language\n // like \"stop talking\" or \"cancel that\" which should go to bootstrap IGNORE\n similes: [\"/stop\", \"/abort\", \"/cancel\"],\n\n async validate(runtime: IAgentRuntime, message: Memory): Promise<boolean> {\n const text = message.content?.text ?? \"\";\n const detection = detectCommand(text);\n return (\n detection.isCommand &&\n [\"stop\", \"abort\", \"cancel\"].includes(detection.command?.key ?? \"\")\n );\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n state,\n options,\n callback,\n ) {\n // Emit the proper hook event for the stop command.\n // HookCommandPayload extends HookEventPayload which requires sessionKey,\n // messages, timestamp, context. The runtime injects itself automatically.\n try {\n await runtime.emitEvent(EventType.HOOK_COMMAND_STOP, {\n runtime,\n sessionKey: message.roomId,\n messages: [],\n timestamp: new Date(),\n context: {\n entityId: message.entityId,\n source: message.content?.source,\n },\n command: \"stop\" as const,\n senderId: message.entityId,\n commandSource: message.content?.source,\n });\n } catch (err) {\n logger.warn(\n { src: \"plugin-commands\", err },\n \"Failed to emit HOOK_COMMAND_STOP event\",\n );\n }\n\n const replyText = \"✓ Stop requested. Current operations will be cancelled.\";\n await callback?.({ text: replyText });\n\n return {\n success: true,\n text: replyText,\n };\n },\n\n examples: [\n [\n { user: \"user\", content: { text: \"/stop\" } },\n {\n user: \"assistant\",\n content: {\n text: \"✓ Stop requested. Current operations will be cancelled.\",\n },\n },\n ],\n [\n { user: \"user\", content: { text: \"/abort\" } },\n {\n user: \"assistant\",\n content: {\n text: \"✓ Stop requested. Current operations will be cancelled.\",\n },\n },\n ],\n ] as ActionExample[][],\n};\n"
|
|
13
13
|
],
|
|
14
|
-
"mappings": "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",
|
|
15
|
-
"debugId": "
|
|
14
|
+
"mappings": "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",
|
|
15
|
+
"debugId": "C6086C11EDA7A75E64756E2164756E21",
|
|
16
16
|
"names": []
|
|
17
17
|
}
|