@elizaos/plugin-directives 2.0.0-alpha.3 → 2.0.0-alpha.4
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 +7 -25
- package/dist/cjs/index.cjs.map +4 -4
- package/dist/index.js +7 -25
- package/dist/index.js.map +4 -4
- package/package.json +8 -6
package/dist/cjs/index.cjs
CHANGED
|
@@ -123,15 +123,7 @@ function normalizeThinkLevel(raw) {
|
|
|
123
123
|
return "low";
|
|
124
124
|
if (["mid", "med", "medium", "thinkharder", "think-harder", "harder"].includes(key))
|
|
125
125
|
return "medium";
|
|
126
|
-
if ([
|
|
127
|
-
"high",
|
|
128
|
-
"ultra",
|
|
129
|
-
"ultrathink",
|
|
130
|
-
"think-hard",
|
|
131
|
-
"thinkhardest",
|
|
132
|
-
"highest",
|
|
133
|
-
"max"
|
|
134
|
-
].includes(key))
|
|
126
|
+
if (["high", "ultra", "ultrathink", "think-hard", "thinkhardest", "highest", "max"].includes(key))
|
|
135
127
|
return "high";
|
|
136
128
|
if (["xhigh", "x-high", "x_high"].includes(key))
|
|
137
129
|
return "xhigh";
|
|
@@ -155,16 +147,7 @@ function normalizeReasoningLevel(raw) {
|
|
|
155
147
|
if (!raw)
|
|
156
148
|
return;
|
|
157
149
|
const key = raw.toLowerCase();
|
|
158
|
-
if ([
|
|
159
|
-
"off",
|
|
160
|
-
"false",
|
|
161
|
-
"no",
|
|
162
|
-
"0",
|
|
163
|
-
"hide",
|
|
164
|
-
"hidden",
|
|
165
|
-
"disable",
|
|
166
|
-
"disabled"
|
|
167
|
-
].includes(key))
|
|
150
|
+
if (["off", "false", "no", "0", "hide", "hidden", "disable", "disabled"].includes(key))
|
|
168
151
|
return "off";
|
|
169
152
|
if (["on", "true", "yes", "1", "show", "visible", "enable", "enabled"].includes(key))
|
|
170
153
|
return "on";
|
|
@@ -312,7 +295,7 @@ function extractExecDirective(body) {
|
|
|
312
295
|
hasDirective: false
|
|
313
296
|
};
|
|
314
297
|
}
|
|
315
|
-
const execMatch = body.match(/(?:^|\s)\/exec(?:\s+([
|
|
298
|
+
const execMatch = body.match(/(?:^|\s)\/exec(?:\s+([^/\n]+))?(?=$|\s|\/)/i);
|
|
316
299
|
if (!execMatch) {
|
|
317
300
|
return {
|
|
318
301
|
cleaned: body.trim(),
|
|
@@ -331,8 +314,7 @@ function extractExecDirective(body) {
|
|
|
331
314
|
let rawExecAsk;
|
|
332
315
|
let rawExecNode;
|
|
333
316
|
const kvPattern = /(\w+)\s*=\s*([^\s]+)/g;
|
|
334
|
-
let match;
|
|
335
|
-
while ((match = kvPattern.exec(args)) !== null) {
|
|
317
|
+
for (let match = kvPattern.exec(args);match !== null; match = kvPattern.exec(args)) {
|
|
336
318
|
const key = match[1].toLowerCase();
|
|
337
319
|
const value = match[2];
|
|
338
320
|
if (key === "host")
|
|
@@ -560,7 +542,7 @@ function formatDirectiveAcknowledgment(directives) {
|
|
|
560
542
|
var directiveStateProvider = {
|
|
561
543
|
name: "DIRECTIVE_STATE",
|
|
562
544
|
description: "Current directive levels (thinking, verbose, model, etc.)",
|
|
563
|
-
async get(
|
|
545
|
+
async get(_runtime, message, _state) {
|
|
564
546
|
const roomId = message.roomId;
|
|
565
547
|
const directives = getDirectiveState(roomId);
|
|
566
548
|
return {
|
|
@@ -687,10 +669,10 @@ var directivesPlugin = {
|
|
|
687
669
|
]
|
|
688
670
|
}
|
|
689
671
|
],
|
|
690
|
-
async init(_config,
|
|
672
|
+
async init(_config, _runtime) {
|
|
691
673
|
import_core.logger.log("[plugin-directives] Initializing directive parser");
|
|
692
674
|
}
|
|
693
675
|
};
|
|
694
676
|
var src_default = directivesPlugin;
|
|
695
677
|
|
|
696
|
-
//# debugId=
|
|
678
|
+
//# debugId=1C7C3FEC0CEF3B9F64756E2164756E21
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts", "../../src/parsers.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Plugin Directives - Inline directive parsing for Eliza agents\n *\n * Parses and applies inline directives from message text:\n * - /think or /t - Thinking level control\n * - /verbose or /v - Verbose output control\n * - /reasoning - Reasoning visibility\n * - /elevated - Elevated permissions\n * - /exec - Execution environment settings\n * - /model - Model selection\n * - /status - Status request\n */\n\nimport {\n type IAgentRuntime,\n type Plugin,\n type Provider,\n type ProviderResult,\n logger,\n} from \"@elizaos/core\";\n\nimport {\n extractElevatedDirective,\n extractExecDirective,\n extractModelDirective,\n extractReasoningDirective,\n extractStatusDirective,\n extractThinkDirective,\n extractVerboseDirective,\n normalizeElevatedLevel,\n normalizeReasoningLevel,\n normalizeThinkLevel,\n normalizeVerboseLevel,\n} from \"./parsers\";\n\nimport type {\n DirectiveState,\n ElevatedLevel,\n ParsedDirectives,\n ParseOptions,\n ReasoningLevel,\n ThinkLevel,\n VerboseLevel,\n} from \"./types\";\n\n// Re-export types\nexport * from \"./types\";\nexport * from \"./parsers\";\n\n// ============================================================================\n// Session State Management\n// ============================================================================\n\nconst sessionStates = new Map<string, DirectiveState>();\n\nfunction getDefaultState(): DirectiveState {\n return {\n thinking: \"low\",\n verbose: \"off\",\n reasoning: \"off\",\n elevated: \"off\",\n exec: {},\n model: {},\n };\n}\n\n/**\n * Get directive state for a room\n */\nexport function getDirectiveState(roomId: string): DirectiveState {\n return sessionStates.get(roomId) ?? getDefaultState();\n}\n\n/**\n * Set directive state for a room\n */\nexport function setDirectiveState(roomId: string, state: DirectiveState): void {\n sessionStates.set(roomId, state);\n}\n\n/**\n * Clear directive state for a room\n */\nexport function clearDirectiveState(roomId: string): void {\n sessionStates.delete(roomId);\n}\n\n// ============================================================================\n// Main Parse Function\n// ============================================================================\n\n/**\n * Parse all inline directives from message text\n */\nexport function parseDirectives(\n body: string,\n options?: ParseOptions,\n): ParsedDirectives {\n const {\n cleaned: thinkCleaned,\n thinkLevel,\n rawLevel: rawThinkLevel,\n hasDirective: hasThinkDirective,\n } = extractThinkDirective(body);\n\n const {\n cleaned: verboseCleaned,\n verboseLevel,\n rawLevel: rawVerboseLevel,\n hasDirective: hasVerboseDirective,\n } = extractVerboseDirective(thinkCleaned);\n\n const {\n cleaned: reasoningCleaned,\n reasoningLevel,\n rawLevel: rawReasoningLevel,\n hasDirective: hasReasoningDirective,\n } = extractReasoningDirective(verboseCleaned);\n\n const {\n cleaned: elevatedCleaned,\n elevatedLevel,\n rawLevel: rawElevatedLevel,\n hasDirective: hasElevatedDirective,\n } = options?.disableElevated\n ? {\n cleaned: reasoningCleaned,\n elevatedLevel: undefined,\n rawLevel: undefined,\n hasDirective: false,\n }\n : extractElevatedDirective(reasoningCleaned);\n\n const {\n cleaned: execCleaned,\n execHost,\n execSecurity,\n execAsk,\n execNode,\n rawExecHost,\n rawExecSecurity,\n rawExecAsk,\n rawExecNode,\n hasExecOptions,\n invalidHost: invalidExecHost,\n invalidSecurity: invalidExecSecurity,\n invalidAsk: invalidExecAsk,\n invalidNode: invalidExecNode,\n hasDirective: hasExecDirective,\n } = extractExecDirective(elevatedCleaned);\n\n const allowStatusDirective = options?.allowStatusDirective !== false;\n const { cleaned: statusCleaned, hasDirective: hasStatusDirective } =\n allowStatusDirective\n ? extractStatusDirective(execCleaned)\n : { cleaned: execCleaned, hasDirective: false };\n\n const {\n cleaned: modelCleaned,\n rawModel,\n rawProfile,\n hasDirective: hasModelDirective,\n } = extractModelDirective(statusCleaned, {\n aliases: options?.modelAliases,\n });\n\n // Determine if message contains only directives\n const hasAnyDirective =\n hasThinkDirective ||\n hasVerboseDirective ||\n hasReasoningDirective ||\n hasElevatedDirective ||\n hasExecDirective ||\n hasModelDirective;\n const directivesOnly = hasAnyDirective && modelCleaned.trim().length === 0;\n\n return {\n cleanedText: modelCleaned,\n directivesOnly,\n hasThinkDirective,\n thinkLevel,\n rawThinkLevel,\n hasVerboseDirective,\n verboseLevel,\n rawVerboseLevel,\n hasReasoningDirective,\n reasoningLevel,\n rawReasoningLevel,\n hasElevatedDirective,\n elevatedLevel,\n rawElevatedLevel,\n hasExecDirective,\n execHost,\n execSecurity,\n execAsk,\n execNode,\n rawExecHost,\n rawExecSecurity,\n rawExecAsk,\n rawExecNode,\n hasExecOptions,\n invalidExecHost,\n invalidExecSecurity,\n invalidExecAsk,\n invalidExecNode,\n hasStatusDirective,\n hasModelDirective,\n rawModelDirective: rawModel,\n rawModelProfile: rawProfile,\n };\n}\n\n/**\n * Apply parsed directives to session state\n */\nexport function applyDirectives(\n roomId: string,\n directives: ParsedDirectives,\n persist = true,\n): DirectiveState {\n const current = getDirectiveState(roomId);\n const updated = { ...current };\n\n if (directives.hasThinkDirective && directives.thinkLevel) {\n updated.thinking = directives.thinkLevel;\n }\n if (directives.hasVerboseDirective && directives.verboseLevel) {\n updated.verbose = directives.verboseLevel;\n }\n if (directives.hasReasoningDirective && directives.reasoningLevel) {\n updated.reasoning = directives.reasoningLevel;\n }\n if (directives.hasElevatedDirective && directives.elevatedLevel) {\n updated.elevated = directives.elevatedLevel;\n }\n if (directives.hasExecDirective) {\n updated.exec = {\n ...updated.exec,\n ...(directives.execHost && { host: directives.execHost }),\n ...(directives.execSecurity && { security: directives.execSecurity }),\n ...(directives.execAsk && { ask: directives.execAsk }),\n ...(directives.execNode && { node: directives.execNode }),\n };\n }\n if (directives.hasModelDirective && directives.rawModelDirective) {\n const parts = directives.rawModelDirective.split(\"/\");\n if (parts.length === 2) {\n updated.model = {\n provider: parts[0],\n model: parts[1],\n authProfile: directives.rawModelProfile,\n };\n } else {\n updated.model = {\n model: directives.rawModelDirective,\n authProfile: directives.rawModelProfile,\n };\n }\n }\n\n if (persist) {\n setDirectiveState(roomId, updated);\n }\n\n return updated;\n}\n\n/**\n * Format directive state for display\n */\nexport function formatDirectiveState(state: DirectiveState): string {\n const lines: string[] = [];\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(\n `Model: ${modelStr}${state.model.authProfile ? ` @${state.model.authProfile}` : \"\"}`,\n );\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Format acknowledgment for directive-only messages\n */\nexport function formatDirectiveAcknowledgment(\n directives: ParsedDirectives,\n): string {\n const changes: string[] = [];\n\n if (directives.hasThinkDirective) {\n changes.push(`Thinking: ${directives.thinkLevel ?? \"status\"}`);\n }\n if (directives.hasVerboseDirective) {\n changes.push(`Verbose: ${directives.verboseLevel ?? \"status\"}`);\n }\n if (directives.hasReasoningDirective) {\n changes.push(`Reasoning: ${directives.reasoningLevel ?? \"status\"}`);\n }\n if (directives.hasElevatedDirective) {\n changes.push(`Elevated: ${directives.elevatedLevel ?? \"status\"}`);\n }\n if (directives.hasModelDirective) {\n changes.push(`Model: ${directives.rawModelDirective ?? \"status\"}`);\n }\n\n return changes.length > 0 ? `✓ ${changes.join(\", \")}` : \"No changes applied\";\n}\n\n// ============================================================================\n// Provider\n// ============================================================================\n\n/**\n * Provider that exposes current directive state to the agent\n */\nexport const directiveStateProvider: Provider = {\n name: \"DIRECTIVE_STATE\",\n description: \"Current directive levels (thinking, verbose, model, etc.)\",\n\n async get(runtime, message, _state): Promise<ProviderResult> {\n const roomId = message.roomId;\n const directives = getDirectiveState(roomId);\n\n return {\n text: formatDirectiveState(directives),\n values: {\n thinkingLevel: directives.thinking,\n verboseLevel: directives.verbose,\n reasoningLevel: directives.reasoning,\n elevatedLevel: directives.elevated,\n modelProvider: directives.model.provider ?? \"\",\n modelName: directives.model.model ?? \"\",\n isElevated: directives.elevated !== \"off\",\n },\n data: { directives },\n };\n },\n};\n\n// ============================================================================\n// Plugin Export\n// ============================================================================\n\n/**\n * Plugin Directives\n *\n * Provides inline directive parsing for Eliza agents, allowing users to\n * control thinking levels, verbosity, model selection, and more through\n * inline commands in their messages.\n */\nexport const directivesPlugin: Plugin = {\n name: \"directives\",\n description:\n \"Inline directive parsing (@think, @model, @verbose, etc.) for controlling agent behavior\",\n\n providers: [directiveStateProvider],\n\n config: {\n DEFAULT_THINKING: \"low\",\n DEFAULT_VERBOSE: \"off\",\n ALLOW_ELEVATED: \"true\",\n ALLOW_EXEC: \"false\",\n },\n\n tests: [\n {\n name: \"directive-parsing\",\n tests: [\n {\n name: \"Parse think directive\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/think:high hello world\");\n if (!result.hasThinkDirective) {\n throw new Error(\"Should detect think directive\");\n }\n if (result.thinkLevel !== \"high\") {\n throw new Error(`Expected 'high', got '${result.thinkLevel}'`);\n }\n if (result.cleanedText !== \"hello world\") {\n throw new Error(\n `Expected 'hello world', got '${result.cleanedText}'`,\n );\n }\n logger.success(\"Think directive parsed correctly\");\n },\n },\n {\n name: \"Parse verbose directive\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/v on test message\");\n if (!result.hasVerboseDirective) {\n throw new Error(\"Should detect verbose directive\");\n }\n if (result.verboseLevel !== \"on\") {\n throw new Error(`Expected 'on', got '${result.verboseLevel}'`);\n }\n logger.success(\"Verbose directive parsed correctly\");\n },\n },\n {\n name: \"Parse model directive\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\n \"/model anthropic/claude-3-opus what is 2+2\",\n );\n if (!result.hasModelDirective) {\n throw new Error(\"Should detect model directive\");\n }\n if (result.rawModelDirective !== \"anthropic/claude-3-opus\") {\n throw new Error(\n `Expected 'anthropic/claude-3-opus', got '${result.rawModelDirective}'`,\n );\n }\n logger.success(\"Model directive parsed correctly\");\n },\n },\n {\n name: \"Detect directive-only message\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/think:high /verbose on\");\n if (!result.directivesOnly) {\n throw new Error(\"Should detect directive-only message\");\n }\n logger.success(\"Directive-only detection works correctly\");\n },\n },\n {\n name: \"Parse multiple directives\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\n \"/think:medium /v full /elevated on hello\",\n );\n if (\n !result.hasThinkDirective ||\n !result.hasVerboseDirective ||\n !result.hasElevatedDirective\n ) {\n throw new Error(\"Should detect all directives\");\n }\n if (result.thinkLevel !== \"medium\") {\n throw new Error(`Expected 'medium', got '${result.thinkLevel}'`);\n }\n if (result.verboseLevel !== \"full\") {\n throw new Error(`Expected 'full', got '${result.verboseLevel}'`);\n }\n if (result.elevatedLevel !== \"on\") {\n throw new Error(`Expected 'on', got '${result.elevatedLevel}'`);\n }\n if (result.cleanedText !== \"hello\") {\n throw new Error(`Expected 'hello', got '${result.cleanedText}'`);\n }\n logger.success(\"Multiple directives parsed correctly\");\n },\n },\n {\n name: \"Session state management\",\n fn: async (_runtime: IAgentRuntime) => {\n const roomId = \"test-room-123\";\n clearDirectiveState(roomId);\n\n const directives = parseDirectives(\"/think:high /verbose on\");\n applyDirectives(roomId, directives);\n\n const state = getDirectiveState(roomId);\n if (state.thinking !== \"high\") {\n throw new Error(\n `Expected thinking 'high', got '${state.thinking}'`,\n );\n }\n if (state.verbose !== \"on\") {\n throw new Error(`Expected verbose 'on', got '${state.verbose}'`);\n }\n\n clearDirectiveState(roomId);\n logger.success(\"Session state management works correctly\");\n },\n },\n ],\n },\n ],\n\n async init(_config, runtime) {\n logger.log(\"[plugin-directives] Initializing directive parser\");\n },\n};\n\nexport default directivesPlugin;\n",
|
|
6
|
-
"/**\n * Directive parsers for extracting inline directives from message text\n */\n\nimport type {\n DirectiveExtractResult,\n ElevatedLevel,\n ExecAsk,\n ExecHost,\n ExecSecurity,\n ReasoningLevel,\n ThinkLevel,\n VerboseLevel,\n} from \"./types\";\n\nconst escapeRegExp = (value: string) =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * Match a level-based directive (e.g., /think:high)\n */\nfunction matchLevelDirective(\n body: string,\n names: string[],\n): { start: number; end: number; rawLevel?: string } | null {\n const namePattern = names.map(escapeRegExp).join(\"|\");\n const match = body.match(\n new RegExp(`(?:^|\\\\s)\\\\/(?:${namePattern})(?=$|\\\\s|:)`, \"i\"),\n );\n if (!match || match.index === undefined) {\n return null;\n }\n const start = match.index;\n let end = match.index + match[0].length;\n let i = end;\n while (i < body.length && /\\s/.test(body[i])) {\n i += 1;\n }\n if (body[i] === \":\") {\n i += 1;\n while (i < body.length && /\\s/.test(body[i])) {\n i += 1;\n }\n }\n const argStart = i;\n while (i < body.length && /[A-Za-z0-9-]/.test(body[i])) {\n i += 1;\n }\n const rawLevel = i > argStart ? body.slice(argStart, i) : undefined;\n end = i;\n return { start, end, rawLevel };\n}\n\n/**\n * Extract a level-based directive from text\n */\nfunction extractLevelDirective<T>(\n body: string,\n names: string[],\n normalize: (raw?: string) => T | undefined,\n): DirectiveExtractResult<T> {\n const match = matchLevelDirective(body, names);\n if (!match) {\n return { cleaned: body.trim(), hasDirective: false };\n }\n const rawLevel = match.rawLevel;\n const level = normalize(rawLevel);\n const cleaned = body\n .slice(0, match.start)\n .concat(\" \")\n .concat(body.slice(match.end))\n .replace(/\\s+/g, \" \")\n .trim();\n return {\n cleaned,\n level,\n rawLevel,\n hasDirective: true,\n };\n}\n\n/**\n * Extract a simple directive (no value)\n */\nfunction extractSimpleDirective(\n body: string,\n names: string[],\n): { cleaned: string; hasDirective: boolean } {\n const namePattern = names.map(escapeRegExp).join(\"|\");\n const match = body.match(\n new RegExp(`(?:^|\\\\s)\\\\/(?:${namePattern})(?=$|\\\\s|:)(?:\\\\s*:\\\\s*)?`, \"i\"),\n );\n const cleaned = match\n ? body.replace(match[0], \" \").replace(/\\s+/g, \" \").trim()\n : body.trim();\n return {\n cleaned,\n hasDirective: Boolean(match),\n };\n}\n\n// ============================================================================\n// Normalizers\n// ============================================================================\n\nexport function normalizeThinkLevel(\n raw?: string | null,\n): ThinkLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\"].includes(key)) return \"off\";\n if ([\"on\", \"enable\", \"enabled\"].includes(key)) return \"low\";\n if ([\"min\", \"minimal\"].includes(key)) return \"minimal\";\n if ([\"low\", \"thinkhard\", \"think-hard\", \"think_hard\"].includes(key))\n return \"low\";\n if (\n [\"mid\", \"med\", \"medium\", \"thinkharder\", \"think-harder\", \"harder\"].includes(\n key,\n )\n )\n return \"medium\";\n if (\n [\n \"high\",\n \"ultra\",\n \"ultrathink\",\n \"think-hard\",\n \"thinkhardest\",\n \"highest\",\n \"max\",\n ].includes(key)\n )\n return \"high\";\n if ([\"xhigh\", \"x-high\", \"x_high\"].includes(key)) return \"xhigh\";\n if ([\"think\"].includes(key)) return \"minimal\";\n return undefined;\n}\n\nexport function normalizeVerboseLevel(\n raw?: string | null,\n): VerboseLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"false\", \"no\", \"0\"].includes(key)) return \"off\";\n if ([\"full\", \"all\", \"everything\"].includes(key)) return \"full\";\n if ([\"on\", \"minimal\", \"true\", \"yes\", \"1\"].includes(key)) return \"on\";\n return undefined;\n}\n\nexport function normalizeReasoningLevel(\n raw?: string | null,\n): ReasoningLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if (\n [\n \"off\",\n \"false\",\n \"no\",\n \"0\",\n \"hide\",\n \"hidden\",\n \"disable\",\n \"disabled\",\n ].includes(key)\n )\n return \"off\";\n if (\n [\"on\", \"true\", \"yes\", \"1\", \"show\", \"visible\", \"enable\", \"enabled\"].includes(\n key,\n )\n )\n return \"on\";\n if ([\"stream\", \"streaming\", \"draft\", \"live\"].includes(key)) return \"stream\";\n return undefined;\n}\n\nexport function normalizeElevatedLevel(\n raw?: string | null,\n): ElevatedLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"false\", \"no\", \"0\"].includes(key)) return \"off\";\n if ([\"full\", \"auto\", \"auto-approve\", \"autoapprove\"].includes(key))\n return \"full\";\n if ([\"ask\", \"prompt\", \"approval\", \"approve\"].includes(key)) return \"ask\";\n if ([\"on\", \"true\", \"yes\", \"1\"].includes(key)) return \"on\";\n return undefined;\n}\n\nexport function normalizeExecHost(raw?: string | null): ExecHost | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"sandbox\", \"sb\"].includes(key)) return \"sandbox\";\n if ([\"gateway\", \"gw\", \"local\"].includes(key)) return \"gateway\";\n if ([\"node\", \"remote\"].includes(key)) return \"node\";\n return undefined;\n}\n\nexport function normalizeExecSecurity(\n raw?: string | null,\n): ExecSecurity | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"deny\", \"none\", \"off\"].includes(key)) return \"deny\";\n if ([\"allowlist\", \"allow\", \"list\"].includes(key)) return \"allowlist\";\n if ([\"full\", \"all\", \"any\"].includes(key)) return \"full\";\n return undefined;\n}\n\nexport function normalizeExecAsk(raw?: string | null): ExecAsk | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"never\", \"no\"].includes(key)) return \"off\";\n if ([\"on-miss\", \"miss\", \"fallback\"].includes(key)) return \"on-miss\";\n if ([\"always\", \"on\", \"yes\"].includes(key)) return \"always\";\n return undefined;\n}\n\n// ============================================================================\n// Directive Extractors\n// ============================================================================\n\nexport function extractThinkDirective(body?: string): {\n cleaned: string;\n thinkLevel?: ThinkLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(\n body,\n [\"thinking\", \"think\", \"t\"],\n normalizeThinkLevel,\n );\n return {\n cleaned: extracted.cleaned,\n thinkLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractVerboseDirective(body?: string): {\n cleaned: string;\n verboseLevel?: VerboseLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(\n body,\n [\"verbose\", \"v\"],\n normalizeVerboseLevel,\n );\n return {\n cleaned: extracted.cleaned,\n verboseLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractReasoningDirective(body?: string): {\n cleaned: string;\n reasoningLevel?: ReasoningLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(\n body,\n [\"reasoning\", \"reason\"],\n normalizeReasoningLevel,\n );\n return {\n cleaned: extracted.cleaned,\n reasoningLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractElevatedDirective(body?: string): {\n cleaned: string;\n elevatedLevel?: ElevatedLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(\n body,\n [\"elevated\", \"elev\"],\n normalizeElevatedLevel,\n );\n return {\n cleaned: extracted.cleaned,\n elevatedLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractStatusDirective(body?: string): {\n cleaned: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n return extractSimpleDirective(body, [\"status\"]);\n}\n\nexport function extractModelDirective(\n body: string,\n options?: { aliases?: string[] },\n): {\n cleaned: string;\n rawModel?: string;\n rawProfile?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n\n // Match /model:provider/model@profile or /model provider/model@profile\n const modelMatch = body.match(\n /(?:^|\\s)\\/model(?:\\s*:\\s*|\\s+)([a-zA-Z0-9_-]+(?:\\/[a-zA-Z0-9._-]+)?(?:@[a-zA-Z0-9_-]+)?)/i,\n );\n\n if (modelMatch) {\n const fullMatch = modelMatch[1];\n const atIndex = fullMatch.indexOf(\"@\");\n const rawModel = atIndex >= 0 ? fullMatch.slice(0, atIndex) : fullMatch;\n const rawProfile = atIndex >= 0 ? fullMatch.slice(atIndex + 1) : undefined;\n const cleaned = body\n .replace(modelMatch[0], \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n return { cleaned, rawModel, rawProfile, hasDirective: true };\n }\n\n // Check for simple /model directive without value\n const simpleMatch = body.match(/(?:^|\\s)\\/model(?=$|\\s|:)/i);\n if (simpleMatch) {\n const cleaned = body\n .replace(simpleMatch[0], \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n return { cleaned, hasDirective: true };\n }\n\n // Check for model aliases\n if (options?.aliases?.length) {\n for (const alias of options.aliases) {\n const aliasPattern = new RegExp(\n `(?:^|\\\\s)/${escapeRegExp(alias)}(?=$|\\\\s)`,\n \"i\",\n );\n const aliasMatch = body.match(aliasPattern);\n if (aliasMatch) {\n const cleaned = body\n .replace(aliasMatch[0], \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n return { cleaned, rawModel: alias, hasDirective: true };\n }\n }\n }\n\n return { cleaned: body.trim(), hasDirective: false };\n}\n\nexport function extractExecDirective(body?: string): {\n cleaned: string;\n execHost?: ExecHost;\n execSecurity?: ExecSecurity;\n execAsk?: ExecAsk;\n execNode?: string;\n rawExecHost?: string;\n rawExecSecurity?: string;\n rawExecAsk?: string;\n rawExecNode?: string;\n hasExecOptions: boolean;\n invalidHost: boolean;\n invalidSecurity: boolean;\n invalidAsk: boolean;\n invalidNode: boolean;\n hasDirective: boolean;\n} {\n if (!body) {\n return {\n cleaned: \"\",\n hasExecOptions: false,\n invalidHost: false,\n invalidSecurity: false,\n invalidAsk: false,\n invalidNode: false,\n hasDirective: false,\n };\n }\n\n // Match /exec with optional key=value pairs\n const execMatch = body.match(/(?:^|\\s)\\/exec(?:\\s+([^\\/\\n]+))?(?=$|\\s|\\/)/i);\n if (!execMatch) {\n return {\n cleaned: body.trim(),\n hasExecOptions: false,\n invalidHost: false,\n invalidSecurity: false,\n invalidAsk: false,\n invalidNode: false,\n hasDirective: false,\n };\n }\n\n const args = execMatch[1]?.trim() ?? \"\";\n const cleaned = body.replace(execMatch[0], \" \").replace(/\\s+/g, \" \").trim();\n\n let rawExecHost: string | undefined;\n let rawExecSecurity: string | undefined;\n let rawExecAsk: string | undefined;\n let rawExecNode: string | undefined;\n\n // Parse key=value pairs\n const kvPattern = /(\\w+)\\s*=\\s*([^\\s]+)/g;\n let match;\n while ((match = kvPattern.exec(args)) !== null) {\n const key = match[1].toLowerCase();\n const value = match[2];\n if (key === \"host\") rawExecHost = value;\n else if (key === \"security\") rawExecSecurity = value;\n else if (key === \"ask\") rawExecAsk = value;\n else if (key === \"node\") rawExecNode = value;\n }\n\n const execHost = normalizeExecHost(rawExecHost);\n const execSecurity = normalizeExecSecurity(rawExecSecurity);\n const execAsk = normalizeExecAsk(rawExecAsk);\n\n return {\n cleaned,\n execHost,\n execSecurity,\n execAsk,\n execNode: rawExecNode,\n rawExecHost,\n rawExecSecurity,\n rawExecAsk,\n rawExecNode,\n hasExecOptions: Boolean(\n rawExecHost || rawExecSecurity || rawExecAsk || rawExecNode,\n ),\n invalidHost: Boolean(rawExecHost && !execHost),\n invalidSecurity: Boolean(rawExecSecurity && !execSecurity),\n invalidAsk: Boolean(rawExecAsk && !execAsk),\n invalidNode: false, // Node validation is context-dependent\n hasDirective: true,\n };\n}\n\n"
|
|
5
|
+
"/**\n * Plugin Directives - Inline directive parsing for Eliza agents\n *\n * Parses and applies inline directives from message text:\n * - /think or /t - Thinking level control\n * - /verbose or /v - Verbose output control\n * - /reasoning - Reasoning visibility\n * - /elevated - Elevated permissions\n * - /exec - Execution environment settings\n * - /model - Model selection\n * - /status - Status request\n */\n\nimport {\n type IAgentRuntime,\n logger,\n type Plugin,\n type Provider,\n type ProviderResult,\n} from \"@elizaos/core\";\n\nimport {\n extractElevatedDirective,\n extractExecDirective,\n extractModelDirective,\n extractReasoningDirective,\n extractStatusDirective,\n extractThinkDirective,\n extractVerboseDirective,\n} from \"./parsers\";\n\nimport type { DirectiveState, ParsedDirectives, ParseOptions } from \"./types\";\n\nexport * from \"./parsers\";\n// Re-export types\nexport * from \"./types\";\n\n// ============================================================================\n// Session State Management\n// ============================================================================\n\nconst sessionStates = new Map<string, DirectiveState>();\n\nfunction getDefaultState(): DirectiveState {\n return {\n thinking: \"low\",\n verbose: \"off\",\n reasoning: \"off\",\n elevated: \"off\",\n exec: {},\n model: {},\n };\n}\n\n/**\n * Get directive state for a room\n */\nexport function getDirectiveState(roomId: string): DirectiveState {\n return sessionStates.get(roomId) ?? getDefaultState();\n}\n\n/**\n * Set directive state for a room\n */\nexport function setDirectiveState(roomId: string, state: DirectiveState): void {\n sessionStates.set(roomId, state);\n}\n\n/**\n * Clear directive state for a room\n */\nexport function clearDirectiveState(roomId: string): void {\n sessionStates.delete(roomId);\n}\n\n// ============================================================================\n// Main Parse Function\n// ============================================================================\n\n/**\n * Parse all inline directives from message text\n */\nexport function parseDirectives(body: string, options?: ParseOptions): ParsedDirectives {\n const {\n cleaned: thinkCleaned,\n thinkLevel,\n rawLevel: rawThinkLevel,\n hasDirective: hasThinkDirective,\n } = extractThinkDirective(body);\n\n const {\n cleaned: verboseCleaned,\n verboseLevel,\n rawLevel: rawVerboseLevel,\n hasDirective: hasVerboseDirective,\n } = extractVerboseDirective(thinkCleaned);\n\n const {\n cleaned: reasoningCleaned,\n reasoningLevel,\n rawLevel: rawReasoningLevel,\n hasDirective: hasReasoningDirective,\n } = extractReasoningDirective(verboseCleaned);\n\n const {\n cleaned: elevatedCleaned,\n elevatedLevel,\n rawLevel: rawElevatedLevel,\n hasDirective: hasElevatedDirective,\n } = options?.disableElevated\n ? {\n cleaned: reasoningCleaned,\n elevatedLevel: undefined,\n rawLevel: undefined,\n hasDirective: false,\n }\n : extractElevatedDirective(reasoningCleaned);\n\n const {\n cleaned: execCleaned,\n execHost,\n execSecurity,\n execAsk,\n execNode,\n rawExecHost,\n rawExecSecurity,\n rawExecAsk,\n rawExecNode,\n hasExecOptions,\n invalidHost: invalidExecHost,\n invalidSecurity: invalidExecSecurity,\n invalidAsk: invalidExecAsk,\n invalidNode: invalidExecNode,\n hasDirective: hasExecDirective,\n } = extractExecDirective(elevatedCleaned);\n\n const allowStatusDirective = options?.allowStatusDirective !== false;\n const { cleaned: statusCleaned, hasDirective: hasStatusDirective } = allowStatusDirective\n ? extractStatusDirective(execCleaned)\n : { cleaned: execCleaned, hasDirective: false };\n\n const {\n cleaned: modelCleaned,\n rawModel,\n rawProfile,\n hasDirective: hasModelDirective,\n } = extractModelDirective(statusCleaned, {\n aliases: options?.modelAliases,\n });\n\n // Determine if message contains only directives\n const hasAnyDirective =\n hasThinkDirective ||\n hasVerboseDirective ||\n hasReasoningDirective ||\n hasElevatedDirective ||\n hasExecDirective ||\n hasModelDirective;\n const directivesOnly = hasAnyDirective && modelCleaned.trim().length === 0;\n\n return {\n cleanedText: modelCleaned,\n directivesOnly,\n hasThinkDirective,\n thinkLevel,\n rawThinkLevel,\n hasVerboseDirective,\n verboseLevel,\n rawVerboseLevel,\n hasReasoningDirective,\n reasoningLevel,\n rawReasoningLevel,\n hasElevatedDirective,\n elevatedLevel,\n rawElevatedLevel,\n hasExecDirective,\n execHost,\n execSecurity,\n execAsk,\n execNode,\n rawExecHost,\n rawExecSecurity,\n rawExecAsk,\n rawExecNode,\n hasExecOptions,\n invalidExecHost,\n invalidExecSecurity,\n invalidExecAsk,\n invalidExecNode,\n hasStatusDirective,\n hasModelDirective,\n rawModelDirective: rawModel,\n rawModelProfile: rawProfile,\n };\n}\n\n/**\n * Apply parsed directives to session state\n */\nexport function applyDirectives(\n roomId: string,\n directives: ParsedDirectives,\n persist = true\n): DirectiveState {\n const current = getDirectiveState(roomId);\n const updated = { ...current };\n\n if (directives.hasThinkDirective && directives.thinkLevel) {\n updated.thinking = directives.thinkLevel;\n }\n if (directives.hasVerboseDirective && directives.verboseLevel) {\n updated.verbose = directives.verboseLevel;\n }\n if (directives.hasReasoningDirective && directives.reasoningLevel) {\n updated.reasoning = directives.reasoningLevel;\n }\n if (directives.hasElevatedDirective && directives.elevatedLevel) {\n updated.elevated = directives.elevatedLevel;\n }\n if (directives.hasExecDirective) {\n updated.exec = {\n ...updated.exec,\n ...(directives.execHost && { host: directives.execHost }),\n ...(directives.execSecurity && { security: directives.execSecurity }),\n ...(directives.execAsk && { ask: directives.execAsk }),\n ...(directives.execNode && { node: directives.execNode }),\n };\n }\n if (directives.hasModelDirective && directives.rawModelDirective) {\n const parts = directives.rawModelDirective.split(\"/\");\n if (parts.length === 2) {\n updated.model = {\n provider: parts[0],\n model: parts[1],\n authProfile: directives.rawModelProfile,\n };\n } else {\n updated.model = {\n model: directives.rawModelDirective,\n authProfile: directives.rawModelProfile,\n };\n }\n }\n\n if (persist) {\n setDirectiveState(roomId, updated);\n }\n\n return updated;\n}\n\n/**\n * Format directive state for display\n */\nexport function formatDirectiveState(state: DirectiveState): string {\n const lines: string[] = [];\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(\n `Model: ${modelStr}${state.model.authProfile ? ` @${state.model.authProfile}` : \"\"}`\n );\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Format acknowledgment for directive-only messages\n */\nexport function formatDirectiveAcknowledgment(directives: ParsedDirectives): string {\n const changes: string[] = [];\n\n if (directives.hasThinkDirective) {\n changes.push(`Thinking: ${directives.thinkLevel ?? \"status\"}`);\n }\n if (directives.hasVerboseDirective) {\n changes.push(`Verbose: ${directives.verboseLevel ?? \"status\"}`);\n }\n if (directives.hasReasoningDirective) {\n changes.push(`Reasoning: ${directives.reasoningLevel ?? \"status\"}`);\n }\n if (directives.hasElevatedDirective) {\n changes.push(`Elevated: ${directives.elevatedLevel ?? \"status\"}`);\n }\n if (directives.hasModelDirective) {\n changes.push(`Model: ${directives.rawModelDirective ?? \"status\"}`);\n }\n\n return changes.length > 0 ? `✓ ${changes.join(\", \")}` : \"No changes applied\";\n}\n\n// ============================================================================\n// Provider\n// ============================================================================\n\n/**\n * Provider that exposes current directive state to the agent\n */\nexport const directiveStateProvider: Provider = {\n name: \"DIRECTIVE_STATE\",\n description: \"Current directive levels (thinking, verbose, model, etc.)\",\n\n async get(_runtime, message, _state): Promise<ProviderResult> {\n const roomId = message.roomId;\n const directives = getDirectiveState(roomId);\n\n return {\n text: formatDirectiveState(directives),\n values: {\n thinkingLevel: directives.thinking,\n verboseLevel: directives.verbose,\n reasoningLevel: directives.reasoning,\n elevatedLevel: directives.elevated,\n modelProvider: directives.model.provider ?? \"\",\n modelName: directives.model.model ?? \"\",\n isElevated: directives.elevated !== \"off\",\n },\n data: { directives },\n };\n },\n};\n\n// ============================================================================\n// Plugin Export\n// ============================================================================\n\n/**\n * Plugin Directives\n *\n * Provides inline directive parsing for Eliza agents, allowing users to\n * control thinking levels, verbosity, model selection, and more through\n * inline commands in their messages.\n */\nexport const directivesPlugin: Plugin = {\n name: \"directives\",\n description:\n \"Inline directive parsing (@think, @model, @verbose, etc.) for controlling agent behavior\",\n\n providers: [directiveStateProvider],\n\n config: {\n DEFAULT_THINKING: \"low\",\n DEFAULT_VERBOSE: \"off\",\n ALLOW_ELEVATED: \"true\",\n ALLOW_EXEC: \"false\",\n },\n\n tests: [\n {\n name: \"directive-parsing\",\n tests: [\n {\n name: \"Parse think directive\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/think:high hello world\");\n if (!result.hasThinkDirective) {\n throw new Error(\"Should detect think directive\");\n }\n if (result.thinkLevel !== \"high\") {\n throw new Error(`Expected 'high', got '${result.thinkLevel}'`);\n }\n if (result.cleanedText !== \"hello world\") {\n throw new Error(`Expected 'hello world', got '${result.cleanedText}'`);\n }\n logger.success(\"Think directive parsed correctly\");\n },\n },\n {\n name: \"Parse verbose directive\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/v on test message\");\n if (!result.hasVerboseDirective) {\n throw new Error(\"Should detect verbose directive\");\n }\n if (result.verboseLevel !== \"on\") {\n throw new Error(`Expected 'on', got '${result.verboseLevel}'`);\n }\n logger.success(\"Verbose directive parsed correctly\");\n },\n },\n {\n name: \"Parse model directive\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/model anthropic/claude-3-opus what is 2+2\");\n if (!result.hasModelDirective) {\n throw new Error(\"Should detect model directive\");\n }\n if (result.rawModelDirective !== \"anthropic/claude-3-opus\") {\n throw new Error(\n `Expected 'anthropic/claude-3-opus', got '${result.rawModelDirective}'`\n );\n }\n logger.success(\"Model directive parsed correctly\");\n },\n },\n {\n name: \"Detect directive-only message\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/think:high /verbose on\");\n if (!result.directivesOnly) {\n throw new Error(\"Should detect directive-only message\");\n }\n logger.success(\"Directive-only detection works correctly\");\n },\n },\n {\n name: \"Parse multiple directives\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/think:medium /v full /elevated on hello\");\n if (\n !result.hasThinkDirective ||\n !result.hasVerboseDirective ||\n !result.hasElevatedDirective\n ) {\n throw new Error(\"Should detect all directives\");\n }\n if (result.thinkLevel !== \"medium\") {\n throw new Error(`Expected 'medium', got '${result.thinkLevel}'`);\n }\n if (result.verboseLevel !== \"full\") {\n throw new Error(`Expected 'full', got '${result.verboseLevel}'`);\n }\n if (result.elevatedLevel !== \"on\") {\n throw new Error(`Expected 'on', got '${result.elevatedLevel}'`);\n }\n if (result.cleanedText !== \"hello\") {\n throw new Error(`Expected 'hello', got '${result.cleanedText}'`);\n }\n logger.success(\"Multiple directives parsed correctly\");\n },\n },\n {\n name: \"Session state management\",\n fn: async (_runtime: IAgentRuntime) => {\n const roomId = \"test-room-123\";\n clearDirectiveState(roomId);\n\n const directives = parseDirectives(\"/think:high /verbose on\");\n applyDirectives(roomId, directives);\n\n const state = getDirectiveState(roomId);\n if (state.thinking !== \"high\") {\n throw new Error(`Expected thinking 'high', got '${state.thinking}'`);\n }\n if (state.verbose !== \"on\") {\n throw new Error(`Expected verbose 'on', got '${state.verbose}'`);\n }\n\n clearDirectiveState(roomId);\n logger.success(\"Session state management works correctly\");\n },\n },\n ],\n },\n ],\n\n async init(_config, _runtime) {\n logger.log(\"[plugin-directives] Initializing directive parser\");\n },\n};\n\nexport default directivesPlugin;\n",
|
|
6
|
+
"/**\n * Directive parsers for extracting inline directives from message text\n */\n\nimport type {\n DirectiveExtractResult,\n ElevatedLevel,\n ExecAsk,\n ExecHost,\n ExecSecurity,\n ReasoningLevel,\n ThinkLevel,\n VerboseLevel,\n} from \"./types\";\n\nconst escapeRegExp = (value: string) => value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * Match a level-based directive (e.g., /think:high)\n */\nfunction matchLevelDirective(\n body: string,\n names: string[]\n): { start: number; end: number; rawLevel?: string } | null {\n const namePattern = names.map(escapeRegExp).join(\"|\");\n const match = body.match(new RegExp(`(?:^|\\\\s)\\\\/(?:${namePattern})(?=$|\\\\s|:)`, \"i\"));\n if (!match || match.index === undefined) {\n return null;\n }\n const start = match.index;\n let end = match.index + match[0].length;\n let i = end;\n while (i < body.length && /\\s/.test(body[i])) {\n i += 1;\n }\n if (body[i] === \":\") {\n i += 1;\n while (i < body.length && /\\s/.test(body[i])) {\n i += 1;\n }\n }\n const argStart = i;\n while (i < body.length && /[A-Za-z0-9-]/.test(body[i])) {\n i += 1;\n }\n const rawLevel = i > argStart ? body.slice(argStart, i) : undefined;\n end = i;\n return { start, end, rawLevel };\n}\n\n/**\n * Extract a level-based directive from text\n */\nfunction extractLevelDirective<T>(\n body: string,\n names: string[],\n normalize: (raw?: string) => T | undefined\n): DirectiveExtractResult<T> {\n const match = matchLevelDirective(body, names);\n if (!match) {\n return { cleaned: body.trim(), hasDirective: false };\n }\n const rawLevel = match.rawLevel;\n const level = normalize(rawLevel);\n const cleaned = body\n .slice(0, match.start)\n .concat(\" \")\n .concat(body.slice(match.end))\n .replace(/\\s+/g, \" \")\n .trim();\n return {\n cleaned,\n level,\n rawLevel,\n hasDirective: true,\n };\n}\n\n/**\n * Extract a simple directive (no value)\n */\nfunction extractSimpleDirective(\n body: string,\n names: string[]\n): { cleaned: string; hasDirective: boolean } {\n const namePattern = names.map(escapeRegExp).join(\"|\");\n const match = body.match(\n new RegExp(`(?:^|\\\\s)\\\\/(?:${namePattern})(?=$|\\\\s|:)(?:\\\\s*:\\\\s*)?`, \"i\")\n );\n const cleaned = match ? body.replace(match[0], \" \").replace(/\\s+/g, \" \").trim() : body.trim();\n return {\n cleaned,\n hasDirective: Boolean(match),\n };\n}\n\n// ============================================================================\n// Normalizers\n// ============================================================================\n\nexport function normalizeThinkLevel(raw?: string | null): ThinkLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\"].includes(key)) return \"off\";\n if ([\"on\", \"enable\", \"enabled\"].includes(key)) return \"low\";\n if ([\"min\", \"minimal\"].includes(key)) return \"minimal\";\n if ([\"low\", \"thinkhard\", \"think-hard\", \"think_hard\"].includes(key)) return \"low\";\n if ([\"mid\", \"med\", \"medium\", \"thinkharder\", \"think-harder\", \"harder\"].includes(key))\n return \"medium\";\n if ([\"high\", \"ultra\", \"ultrathink\", \"think-hard\", \"thinkhardest\", \"highest\", \"max\"].includes(key))\n return \"high\";\n if ([\"xhigh\", \"x-high\", \"x_high\"].includes(key)) return \"xhigh\";\n if ([\"think\"].includes(key)) return \"minimal\";\n return undefined;\n}\n\nexport function normalizeVerboseLevel(raw?: string | null): VerboseLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"false\", \"no\", \"0\"].includes(key)) return \"off\";\n if ([\"full\", \"all\", \"everything\"].includes(key)) return \"full\";\n if ([\"on\", \"minimal\", \"true\", \"yes\", \"1\"].includes(key)) return \"on\";\n return undefined;\n}\n\nexport function normalizeReasoningLevel(raw?: string | null): ReasoningLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"false\", \"no\", \"0\", \"hide\", \"hidden\", \"disable\", \"disabled\"].includes(key))\n return \"off\";\n if ([\"on\", \"true\", \"yes\", \"1\", \"show\", \"visible\", \"enable\", \"enabled\"].includes(key)) return \"on\";\n if ([\"stream\", \"streaming\", \"draft\", \"live\"].includes(key)) return \"stream\";\n return undefined;\n}\n\nexport function normalizeElevatedLevel(raw?: string | null): ElevatedLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"false\", \"no\", \"0\"].includes(key)) return \"off\";\n if ([\"full\", \"auto\", \"auto-approve\", \"autoapprove\"].includes(key)) return \"full\";\n if ([\"ask\", \"prompt\", \"approval\", \"approve\"].includes(key)) return \"ask\";\n if ([\"on\", \"true\", \"yes\", \"1\"].includes(key)) return \"on\";\n return undefined;\n}\n\nexport function normalizeExecHost(raw?: string | null): ExecHost | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"sandbox\", \"sb\"].includes(key)) return \"sandbox\";\n if ([\"gateway\", \"gw\", \"local\"].includes(key)) return \"gateway\";\n if ([\"node\", \"remote\"].includes(key)) return \"node\";\n return undefined;\n}\n\nexport function normalizeExecSecurity(raw?: string | null): ExecSecurity | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"deny\", \"none\", \"off\"].includes(key)) return \"deny\";\n if ([\"allowlist\", \"allow\", \"list\"].includes(key)) return \"allowlist\";\n if ([\"full\", \"all\", \"any\"].includes(key)) return \"full\";\n return undefined;\n}\n\nexport function normalizeExecAsk(raw?: string | null): ExecAsk | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"never\", \"no\"].includes(key)) return \"off\";\n if ([\"on-miss\", \"miss\", \"fallback\"].includes(key)) return \"on-miss\";\n if ([\"always\", \"on\", \"yes\"].includes(key)) return \"always\";\n return undefined;\n}\n\n// ============================================================================\n// Directive Extractors\n// ============================================================================\n\nexport function extractThinkDirective(body?: string): {\n cleaned: string;\n thinkLevel?: ThinkLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(body, [\"thinking\", \"think\", \"t\"], normalizeThinkLevel);\n return {\n cleaned: extracted.cleaned,\n thinkLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractVerboseDirective(body?: string): {\n cleaned: string;\n verboseLevel?: VerboseLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(body, [\"verbose\", \"v\"], normalizeVerboseLevel);\n return {\n cleaned: extracted.cleaned,\n verboseLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractReasoningDirective(body?: string): {\n cleaned: string;\n reasoningLevel?: ReasoningLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(body, [\"reasoning\", \"reason\"], normalizeReasoningLevel);\n return {\n cleaned: extracted.cleaned,\n reasoningLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractElevatedDirective(body?: string): {\n cleaned: string;\n elevatedLevel?: ElevatedLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(body, [\"elevated\", \"elev\"], normalizeElevatedLevel);\n return {\n cleaned: extracted.cleaned,\n elevatedLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractStatusDirective(body?: string): {\n cleaned: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n return extractSimpleDirective(body, [\"status\"]);\n}\n\nexport function extractModelDirective(\n body: string,\n options?: { aliases?: string[] }\n): {\n cleaned: string;\n rawModel?: string;\n rawProfile?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n\n // Match /model:provider/model@profile or /model provider/model@profile\n const modelMatch = body.match(\n /(?:^|\\s)\\/model(?:\\s*:\\s*|\\s+)([a-zA-Z0-9_-]+(?:\\/[a-zA-Z0-9._-]+)?(?:@[a-zA-Z0-9_-]+)?)/i\n );\n\n if (modelMatch) {\n const fullMatch = modelMatch[1];\n const atIndex = fullMatch.indexOf(\"@\");\n const rawModel = atIndex >= 0 ? fullMatch.slice(0, atIndex) : fullMatch;\n const rawProfile = atIndex >= 0 ? fullMatch.slice(atIndex + 1) : undefined;\n const cleaned = body.replace(modelMatch[0], \" \").replace(/\\s+/g, \" \").trim();\n return { cleaned, rawModel, rawProfile, hasDirective: true };\n }\n\n // Check for simple /model directive without value\n const simpleMatch = body.match(/(?:^|\\s)\\/model(?=$|\\s|:)/i);\n if (simpleMatch) {\n const cleaned = body.replace(simpleMatch[0], \" \").replace(/\\s+/g, \" \").trim();\n return { cleaned, hasDirective: true };\n }\n\n // Check for model aliases\n if (options?.aliases?.length) {\n for (const alias of options.aliases) {\n const aliasPattern = new RegExp(`(?:^|\\\\s)/${escapeRegExp(alias)}(?=$|\\\\s)`, \"i\");\n const aliasMatch = body.match(aliasPattern);\n if (aliasMatch) {\n const cleaned = body.replace(aliasMatch[0], \" \").replace(/\\s+/g, \" \").trim();\n return { cleaned, rawModel: alias, hasDirective: true };\n }\n }\n }\n\n return { cleaned: body.trim(), hasDirective: false };\n}\n\nexport function extractExecDirective(body?: string): {\n cleaned: string;\n execHost?: ExecHost;\n execSecurity?: ExecSecurity;\n execAsk?: ExecAsk;\n execNode?: string;\n rawExecHost?: string;\n rawExecSecurity?: string;\n rawExecAsk?: string;\n rawExecNode?: string;\n hasExecOptions: boolean;\n invalidHost: boolean;\n invalidSecurity: boolean;\n invalidAsk: boolean;\n invalidNode: boolean;\n hasDirective: boolean;\n} {\n if (!body) {\n return {\n cleaned: \"\",\n hasExecOptions: false,\n invalidHost: false,\n invalidSecurity: false,\n invalidAsk: false,\n invalidNode: false,\n hasDirective: false,\n };\n }\n\n // Match /exec with optional key=value pairs\n const execMatch = body.match(/(?:^|\\s)\\/exec(?:\\s+([^/\\n]+))?(?=$|\\s|\\/)/i);\n if (!execMatch) {\n return {\n cleaned: body.trim(),\n hasExecOptions: false,\n invalidHost: false,\n invalidSecurity: false,\n invalidAsk: false,\n invalidNode: false,\n hasDirective: false,\n };\n }\n\n const args = execMatch[1]?.trim() ?? \"\";\n const cleaned = body.replace(execMatch[0], \" \").replace(/\\s+/g, \" \").trim();\n\n let rawExecHost: string | undefined;\n let rawExecSecurity: string | undefined;\n let rawExecAsk: string | undefined;\n let rawExecNode: string | undefined;\n\n // Parse key=value pairs\n const kvPattern = /(\\w+)\\s*=\\s*([^\\s]+)/g;\n for (let match = kvPattern.exec(args); match !== null; match = kvPattern.exec(args)) {\n const key = match[1].toLowerCase();\n const value = match[2];\n if (key === \"host\") rawExecHost = value;\n else if (key === \"security\") rawExecSecurity = value;\n else if (key === \"ask\") rawExecAsk = value;\n else if (key === \"node\") rawExecNode = value;\n }\n\n const execHost = normalizeExecHost(rawExecHost);\n const execSecurity = normalizeExecSecurity(rawExecSecurity);\n const execAsk = normalizeExecAsk(rawExecAsk);\n\n return {\n cleaned,\n execHost,\n execSecurity,\n execAsk,\n execNode: rawExecNode,\n rawExecHost,\n rawExecSecurity,\n rawExecAsk,\n rawExecNode,\n hasExecOptions: Boolean(rawExecHost || rawExecSecurity || rawExecAsk || rawExecNode),\n invalidHost: Boolean(rawExecHost && !execHost),\n invalidSecurity: Boolean(rawExecSecurity && !execSecurity),\n invalidAsk: Boolean(rawExecAsk && !execAsk),\n invalidNode: false, // Node validation is context-dependent\n hasDirective: true,\n };\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "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",
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "1C7C3FEC0CEF3B9F64756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
package/dist/index.js
CHANGED
|
@@ -69,15 +69,7 @@ function normalizeThinkLevel(raw) {
|
|
|
69
69
|
return "low";
|
|
70
70
|
if (["mid", "med", "medium", "thinkharder", "think-harder", "harder"].includes(key))
|
|
71
71
|
return "medium";
|
|
72
|
-
if ([
|
|
73
|
-
"high",
|
|
74
|
-
"ultra",
|
|
75
|
-
"ultrathink",
|
|
76
|
-
"think-hard",
|
|
77
|
-
"thinkhardest",
|
|
78
|
-
"highest",
|
|
79
|
-
"max"
|
|
80
|
-
].includes(key))
|
|
72
|
+
if (["high", "ultra", "ultrathink", "think-hard", "thinkhardest", "highest", "max"].includes(key))
|
|
81
73
|
return "high";
|
|
82
74
|
if (["xhigh", "x-high", "x_high"].includes(key))
|
|
83
75
|
return "xhigh";
|
|
@@ -101,16 +93,7 @@ function normalizeReasoningLevel(raw) {
|
|
|
101
93
|
if (!raw)
|
|
102
94
|
return;
|
|
103
95
|
const key = raw.toLowerCase();
|
|
104
|
-
if ([
|
|
105
|
-
"off",
|
|
106
|
-
"false",
|
|
107
|
-
"no",
|
|
108
|
-
"0",
|
|
109
|
-
"hide",
|
|
110
|
-
"hidden",
|
|
111
|
-
"disable",
|
|
112
|
-
"disabled"
|
|
113
|
-
].includes(key))
|
|
96
|
+
if (["off", "false", "no", "0", "hide", "hidden", "disable", "disabled"].includes(key))
|
|
114
97
|
return "off";
|
|
115
98
|
if (["on", "true", "yes", "1", "show", "visible", "enable", "enabled"].includes(key))
|
|
116
99
|
return "on";
|
|
@@ -258,7 +241,7 @@ function extractExecDirective(body) {
|
|
|
258
241
|
hasDirective: false
|
|
259
242
|
};
|
|
260
243
|
}
|
|
261
|
-
const execMatch = body.match(/(?:^|\s)\/exec(?:\s+([
|
|
244
|
+
const execMatch = body.match(/(?:^|\s)\/exec(?:\s+([^/\n]+))?(?=$|\s|\/)/i);
|
|
262
245
|
if (!execMatch) {
|
|
263
246
|
return {
|
|
264
247
|
cleaned: body.trim(),
|
|
@@ -277,8 +260,7 @@ function extractExecDirective(body) {
|
|
|
277
260
|
let rawExecAsk;
|
|
278
261
|
let rawExecNode;
|
|
279
262
|
const kvPattern = /(\w+)\s*=\s*([^\s]+)/g;
|
|
280
|
-
let match;
|
|
281
|
-
while ((match = kvPattern.exec(args)) !== null) {
|
|
263
|
+
for (let match = kvPattern.exec(args);match !== null; match = kvPattern.exec(args)) {
|
|
282
264
|
const key = match[1].toLowerCase();
|
|
283
265
|
const value = match[2];
|
|
284
266
|
if (key === "host")
|
|
@@ -506,7 +488,7 @@ function formatDirectiveAcknowledgment(directives) {
|
|
|
506
488
|
var directiveStateProvider = {
|
|
507
489
|
name: "DIRECTIVE_STATE",
|
|
508
490
|
description: "Current directive levels (thinking, verbose, model, etc.)",
|
|
509
|
-
async get(
|
|
491
|
+
async get(_runtime, message, _state) {
|
|
510
492
|
const roomId = message.roomId;
|
|
511
493
|
const directives = getDirectiveState(roomId);
|
|
512
494
|
return {
|
|
@@ -633,7 +615,7 @@ var directivesPlugin = {
|
|
|
633
615
|
]
|
|
634
616
|
}
|
|
635
617
|
],
|
|
636
|
-
async init(_config,
|
|
618
|
+
async init(_config, _runtime) {
|
|
637
619
|
logger.log("[plugin-directives] Initializing directive parser");
|
|
638
620
|
}
|
|
639
621
|
};
|
|
@@ -665,4 +647,4 @@ export {
|
|
|
665
647
|
applyDirectives
|
|
666
648
|
};
|
|
667
649
|
|
|
668
|
-
//# debugId=
|
|
650
|
+
//# debugId=2A050D6E0792F42D64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/parsers.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Plugin Directives - Inline directive parsing for Eliza agents\n *\n * Parses and applies inline directives from message text:\n * - /think or /t - Thinking level control\n * - /verbose or /v - Verbose output control\n * - /reasoning - Reasoning visibility\n * - /elevated - Elevated permissions\n * - /exec - Execution environment settings\n * - /model - Model selection\n * - /status - Status request\n */\n\nimport {\n type IAgentRuntime,\n type Plugin,\n type Provider,\n type ProviderResult,\n logger,\n} from \"@elizaos/core\";\n\nimport {\n extractElevatedDirective,\n extractExecDirective,\n extractModelDirective,\n extractReasoningDirective,\n extractStatusDirective,\n extractThinkDirective,\n extractVerboseDirective,\n normalizeElevatedLevel,\n normalizeReasoningLevel,\n normalizeThinkLevel,\n normalizeVerboseLevel,\n} from \"./parsers\";\n\nimport type {\n DirectiveState,\n ElevatedLevel,\n ParsedDirectives,\n ParseOptions,\n ReasoningLevel,\n ThinkLevel,\n VerboseLevel,\n} from \"./types\";\n\n// Re-export types\nexport * from \"./types\";\nexport * from \"./parsers\";\n\n// ============================================================================\n// Session State Management\n// ============================================================================\n\nconst sessionStates = new Map<string, DirectiveState>();\n\nfunction getDefaultState(): DirectiveState {\n return {\n thinking: \"low\",\n verbose: \"off\",\n reasoning: \"off\",\n elevated: \"off\",\n exec: {},\n model: {},\n };\n}\n\n/**\n * Get directive state for a room\n */\nexport function getDirectiveState(roomId: string): DirectiveState {\n return sessionStates.get(roomId) ?? getDefaultState();\n}\n\n/**\n * Set directive state for a room\n */\nexport function setDirectiveState(roomId: string, state: DirectiveState): void {\n sessionStates.set(roomId, state);\n}\n\n/**\n * Clear directive state for a room\n */\nexport function clearDirectiveState(roomId: string): void {\n sessionStates.delete(roomId);\n}\n\n// ============================================================================\n// Main Parse Function\n// ============================================================================\n\n/**\n * Parse all inline directives from message text\n */\nexport function parseDirectives(\n body: string,\n options?: ParseOptions,\n): ParsedDirectives {\n const {\n cleaned: thinkCleaned,\n thinkLevel,\n rawLevel: rawThinkLevel,\n hasDirective: hasThinkDirective,\n } = extractThinkDirective(body);\n\n const {\n cleaned: verboseCleaned,\n verboseLevel,\n rawLevel: rawVerboseLevel,\n hasDirective: hasVerboseDirective,\n } = extractVerboseDirective(thinkCleaned);\n\n const {\n cleaned: reasoningCleaned,\n reasoningLevel,\n rawLevel: rawReasoningLevel,\n hasDirective: hasReasoningDirective,\n } = extractReasoningDirective(verboseCleaned);\n\n const {\n cleaned: elevatedCleaned,\n elevatedLevel,\n rawLevel: rawElevatedLevel,\n hasDirective: hasElevatedDirective,\n } = options?.disableElevated\n ? {\n cleaned: reasoningCleaned,\n elevatedLevel: undefined,\n rawLevel: undefined,\n hasDirective: false,\n }\n : extractElevatedDirective(reasoningCleaned);\n\n const {\n cleaned: execCleaned,\n execHost,\n execSecurity,\n execAsk,\n execNode,\n rawExecHost,\n rawExecSecurity,\n rawExecAsk,\n rawExecNode,\n hasExecOptions,\n invalidHost: invalidExecHost,\n invalidSecurity: invalidExecSecurity,\n invalidAsk: invalidExecAsk,\n invalidNode: invalidExecNode,\n hasDirective: hasExecDirective,\n } = extractExecDirective(elevatedCleaned);\n\n const allowStatusDirective = options?.allowStatusDirective !== false;\n const { cleaned: statusCleaned, hasDirective: hasStatusDirective } =\n allowStatusDirective\n ? extractStatusDirective(execCleaned)\n : { cleaned: execCleaned, hasDirective: false };\n\n const {\n cleaned: modelCleaned,\n rawModel,\n rawProfile,\n hasDirective: hasModelDirective,\n } = extractModelDirective(statusCleaned, {\n aliases: options?.modelAliases,\n });\n\n // Determine if message contains only directives\n const hasAnyDirective =\n hasThinkDirective ||\n hasVerboseDirective ||\n hasReasoningDirective ||\n hasElevatedDirective ||\n hasExecDirective ||\n hasModelDirective;\n const directivesOnly = hasAnyDirective && modelCleaned.trim().length === 0;\n\n return {\n cleanedText: modelCleaned,\n directivesOnly,\n hasThinkDirective,\n thinkLevel,\n rawThinkLevel,\n hasVerboseDirective,\n verboseLevel,\n rawVerboseLevel,\n hasReasoningDirective,\n reasoningLevel,\n rawReasoningLevel,\n hasElevatedDirective,\n elevatedLevel,\n rawElevatedLevel,\n hasExecDirective,\n execHost,\n execSecurity,\n execAsk,\n execNode,\n rawExecHost,\n rawExecSecurity,\n rawExecAsk,\n rawExecNode,\n hasExecOptions,\n invalidExecHost,\n invalidExecSecurity,\n invalidExecAsk,\n invalidExecNode,\n hasStatusDirective,\n hasModelDirective,\n rawModelDirective: rawModel,\n rawModelProfile: rawProfile,\n };\n}\n\n/**\n * Apply parsed directives to session state\n */\nexport function applyDirectives(\n roomId: string,\n directives: ParsedDirectives,\n persist = true,\n): DirectiveState {\n const current = getDirectiveState(roomId);\n const updated = { ...current };\n\n if (directives.hasThinkDirective && directives.thinkLevel) {\n updated.thinking = directives.thinkLevel;\n }\n if (directives.hasVerboseDirective && directives.verboseLevel) {\n updated.verbose = directives.verboseLevel;\n }\n if (directives.hasReasoningDirective && directives.reasoningLevel) {\n updated.reasoning = directives.reasoningLevel;\n }\n if (directives.hasElevatedDirective && directives.elevatedLevel) {\n updated.elevated = directives.elevatedLevel;\n }\n if (directives.hasExecDirective) {\n updated.exec = {\n ...updated.exec,\n ...(directives.execHost && { host: directives.execHost }),\n ...(directives.execSecurity && { security: directives.execSecurity }),\n ...(directives.execAsk && { ask: directives.execAsk }),\n ...(directives.execNode && { node: directives.execNode }),\n };\n }\n if (directives.hasModelDirective && directives.rawModelDirective) {\n const parts = directives.rawModelDirective.split(\"/\");\n if (parts.length === 2) {\n updated.model = {\n provider: parts[0],\n model: parts[1],\n authProfile: directives.rawModelProfile,\n };\n } else {\n updated.model = {\n model: directives.rawModelDirective,\n authProfile: directives.rawModelProfile,\n };\n }\n }\n\n if (persist) {\n setDirectiveState(roomId, updated);\n }\n\n return updated;\n}\n\n/**\n * Format directive state for display\n */\nexport function formatDirectiveState(state: DirectiveState): string {\n const lines: string[] = [];\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(\n `Model: ${modelStr}${state.model.authProfile ? ` @${state.model.authProfile}` : \"\"}`,\n );\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Format acknowledgment for directive-only messages\n */\nexport function formatDirectiveAcknowledgment(\n directives: ParsedDirectives,\n): string {\n const changes: string[] = [];\n\n if (directives.hasThinkDirective) {\n changes.push(`Thinking: ${directives.thinkLevel ?? \"status\"}`);\n }\n if (directives.hasVerboseDirective) {\n changes.push(`Verbose: ${directives.verboseLevel ?? \"status\"}`);\n }\n if (directives.hasReasoningDirective) {\n changes.push(`Reasoning: ${directives.reasoningLevel ?? \"status\"}`);\n }\n if (directives.hasElevatedDirective) {\n changes.push(`Elevated: ${directives.elevatedLevel ?? \"status\"}`);\n }\n if (directives.hasModelDirective) {\n changes.push(`Model: ${directives.rawModelDirective ?? \"status\"}`);\n }\n\n return changes.length > 0 ? `✓ ${changes.join(\", \")}` : \"No changes applied\";\n}\n\n// ============================================================================\n// Provider\n// ============================================================================\n\n/**\n * Provider that exposes current directive state to the agent\n */\nexport const directiveStateProvider: Provider = {\n name: \"DIRECTIVE_STATE\",\n description: \"Current directive levels (thinking, verbose, model, etc.)\",\n\n async get(runtime, message, _state): Promise<ProviderResult> {\n const roomId = message.roomId;\n const directives = getDirectiveState(roomId);\n\n return {\n text: formatDirectiveState(directives),\n values: {\n thinkingLevel: directives.thinking,\n verboseLevel: directives.verbose,\n reasoningLevel: directives.reasoning,\n elevatedLevel: directives.elevated,\n modelProvider: directives.model.provider ?? \"\",\n modelName: directives.model.model ?? \"\",\n isElevated: directives.elevated !== \"off\",\n },\n data: { directives },\n };\n },\n};\n\n// ============================================================================\n// Plugin Export\n// ============================================================================\n\n/**\n * Plugin Directives\n *\n * Provides inline directive parsing for Eliza agents, allowing users to\n * control thinking levels, verbosity, model selection, and more through\n * inline commands in their messages.\n */\nexport const directivesPlugin: Plugin = {\n name: \"directives\",\n description:\n \"Inline directive parsing (@think, @model, @verbose, etc.) for controlling agent behavior\",\n\n providers: [directiveStateProvider],\n\n config: {\n DEFAULT_THINKING: \"low\",\n DEFAULT_VERBOSE: \"off\",\n ALLOW_ELEVATED: \"true\",\n ALLOW_EXEC: \"false\",\n },\n\n tests: [\n {\n name: \"directive-parsing\",\n tests: [\n {\n name: \"Parse think directive\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/think:high hello world\");\n if (!result.hasThinkDirective) {\n throw new Error(\"Should detect think directive\");\n }\n if (result.thinkLevel !== \"high\") {\n throw new Error(`Expected 'high', got '${result.thinkLevel}'`);\n }\n if (result.cleanedText !== \"hello world\") {\n throw new Error(\n `Expected 'hello world', got '${result.cleanedText}'`,\n );\n }\n logger.success(\"Think directive parsed correctly\");\n },\n },\n {\n name: \"Parse verbose directive\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/v on test message\");\n if (!result.hasVerboseDirective) {\n throw new Error(\"Should detect verbose directive\");\n }\n if (result.verboseLevel !== \"on\") {\n throw new Error(`Expected 'on', got '${result.verboseLevel}'`);\n }\n logger.success(\"Verbose directive parsed correctly\");\n },\n },\n {\n name: \"Parse model directive\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\n \"/model anthropic/claude-3-opus what is 2+2\",\n );\n if (!result.hasModelDirective) {\n throw new Error(\"Should detect model directive\");\n }\n if (result.rawModelDirective !== \"anthropic/claude-3-opus\") {\n throw new Error(\n `Expected 'anthropic/claude-3-opus', got '${result.rawModelDirective}'`,\n );\n }\n logger.success(\"Model directive parsed correctly\");\n },\n },\n {\n name: \"Detect directive-only message\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/think:high /verbose on\");\n if (!result.directivesOnly) {\n throw new Error(\"Should detect directive-only message\");\n }\n logger.success(\"Directive-only detection works correctly\");\n },\n },\n {\n name: \"Parse multiple directives\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\n \"/think:medium /v full /elevated on hello\",\n );\n if (\n !result.hasThinkDirective ||\n !result.hasVerboseDirective ||\n !result.hasElevatedDirective\n ) {\n throw new Error(\"Should detect all directives\");\n }\n if (result.thinkLevel !== \"medium\") {\n throw new Error(`Expected 'medium', got '${result.thinkLevel}'`);\n }\n if (result.verboseLevel !== \"full\") {\n throw new Error(`Expected 'full', got '${result.verboseLevel}'`);\n }\n if (result.elevatedLevel !== \"on\") {\n throw new Error(`Expected 'on', got '${result.elevatedLevel}'`);\n }\n if (result.cleanedText !== \"hello\") {\n throw new Error(`Expected 'hello', got '${result.cleanedText}'`);\n }\n logger.success(\"Multiple directives parsed correctly\");\n },\n },\n {\n name: \"Session state management\",\n fn: async (_runtime: IAgentRuntime) => {\n const roomId = \"test-room-123\";\n clearDirectiveState(roomId);\n\n const directives = parseDirectives(\"/think:high /verbose on\");\n applyDirectives(roomId, directives);\n\n const state = getDirectiveState(roomId);\n if (state.thinking !== \"high\") {\n throw new Error(\n `Expected thinking 'high', got '${state.thinking}'`,\n );\n }\n if (state.verbose !== \"on\") {\n throw new Error(`Expected verbose 'on', got '${state.verbose}'`);\n }\n\n clearDirectiveState(roomId);\n logger.success(\"Session state management works correctly\");\n },\n },\n ],\n },\n ],\n\n async init(_config, runtime) {\n logger.log(\"[plugin-directives] Initializing directive parser\");\n },\n};\n\nexport default directivesPlugin;\n",
|
|
6
|
-
"/**\n * Directive parsers for extracting inline directives from message text\n */\n\nimport type {\n DirectiveExtractResult,\n ElevatedLevel,\n ExecAsk,\n ExecHost,\n ExecSecurity,\n ReasoningLevel,\n ThinkLevel,\n VerboseLevel,\n} from \"./types\";\n\nconst escapeRegExp = (value: string) =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * Match a level-based directive (e.g., /think:high)\n */\nfunction matchLevelDirective(\n body: string,\n names: string[],\n): { start: number; end: number; rawLevel?: string } | null {\n const namePattern = names.map(escapeRegExp).join(\"|\");\n const match = body.match(\n new RegExp(`(?:^|\\\\s)\\\\/(?:${namePattern})(?=$|\\\\s|:)`, \"i\"),\n );\n if (!match || match.index === undefined) {\n return null;\n }\n const start = match.index;\n let end = match.index + match[0].length;\n let i = end;\n while (i < body.length && /\\s/.test(body[i])) {\n i += 1;\n }\n if (body[i] === \":\") {\n i += 1;\n while (i < body.length && /\\s/.test(body[i])) {\n i += 1;\n }\n }\n const argStart = i;\n while (i < body.length && /[A-Za-z0-9-]/.test(body[i])) {\n i += 1;\n }\n const rawLevel = i > argStart ? body.slice(argStart, i) : undefined;\n end = i;\n return { start, end, rawLevel };\n}\n\n/**\n * Extract a level-based directive from text\n */\nfunction extractLevelDirective<T>(\n body: string,\n names: string[],\n normalize: (raw?: string) => T | undefined,\n): DirectiveExtractResult<T> {\n const match = matchLevelDirective(body, names);\n if (!match) {\n return { cleaned: body.trim(), hasDirective: false };\n }\n const rawLevel = match.rawLevel;\n const level = normalize(rawLevel);\n const cleaned = body\n .slice(0, match.start)\n .concat(\" \")\n .concat(body.slice(match.end))\n .replace(/\\s+/g, \" \")\n .trim();\n return {\n cleaned,\n level,\n rawLevel,\n hasDirective: true,\n };\n}\n\n/**\n * Extract a simple directive (no value)\n */\nfunction extractSimpleDirective(\n body: string,\n names: string[],\n): { cleaned: string; hasDirective: boolean } {\n const namePattern = names.map(escapeRegExp).join(\"|\");\n const match = body.match(\n new RegExp(`(?:^|\\\\s)\\\\/(?:${namePattern})(?=$|\\\\s|:)(?:\\\\s*:\\\\s*)?`, \"i\"),\n );\n const cleaned = match\n ? body.replace(match[0], \" \").replace(/\\s+/g, \" \").trim()\n : body.trim();\n return {\n cleaned,\n hasDirective: Boolean(match),\n };\n}\n\n// ============================================================================\n// Normalizers\n// ============================================================================\n\nexport function normalizeThinkLevel(\n raw?: string | null,\n): ThinkLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\"].includes(key)) return \"off\";\n if ([\"on\", \"enable\", \"enabled\"].includes(key)) return \"low\";\n if ([\"min\", \"minimal\"].includes(key)) return \"minimal\";\n if ([\"low\", \"thinkhard\", \"think-hard\", \"think_hard\"].includes(key))\n return \"low\";\n if (\n [\"mid\", \"med\", \"medium\", \"thinkharder\", \"think-harder\", \"harder\"].includes(\n key,\n )\n )\n return \"medium\";\n if (\n [\n \"high\",\n \"ultra\",\n \"ultrathink\",\n \"think-hard\",\n \"thinkhardest\",\n \"highest\",\n \"max\",\n ].includes(key)\n )\n return \"high\";\n if ([\"xhigh\", \"x-high\", \"x_high\"].includes(key)) return \"xhigh\";\n if ([\"think\"].includes(key)) return \"minimal\";\n return undefined;\n}\n\nexport function normalizeVerboseLevel(\n raw?: string | null,\n): VerboseLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"false\", \"no\", \"0\"].includes(key)) return \"off\";\n if ([\"full\", \"all\", \"everything\"].includes(key)) return \"full\";\n if ([\"on\", \"minimal\", \"true\", \"yes\", \"1\"].includes(key)) return \"on\";\n return undefined;\n}\n\nexport function normalizeReasoningLevel(\n raw?: string | null,\n): ReasoningLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if (\n [\n \"off\",\n \"false\",\n \"no\",\n \"0\",\n \"hide\",\n \"hidden\",\n \"disable\",\n \"disabled\",\n ].includes(key)\n )\n return \"off\";\n if (\n [\"on\", \"true\", \"yes\", \"1\", \"show\", \"visible\", \"enable\", \"enabled\"].includes(\n key,\n )\n )\n return \"on\";\n if ([\"stream\", \"streaming\", \"draft\", \"live\"].includes(key)) return \"stream\";\n return undefined;\n}\n\nexport function normalizeElevatedLevel(\n raw?: string | null,\n): ElevatedLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"false\", \"no\", \"0\"].includes(key)) return \"off\";\n if ([\"full\", \"auto\", \"auto-approve\", \"autoapprove\"].includes(key))\n return \"full\";\n if ([\"ask\", \"prompt\", \"approval\", \"approve\"].includes(key)) return \"ask\";\n if ([\"on\", \"true\", \"yes\", \"1\"].includes(key)) return \"on\";\n return undefined;\n}\n\nexport function normalizeExecHost(raw?: string | null): ExecHost | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"sandbox\", \"sb\"].includes(key)) return \"sandbox\";\n if ([\"gateway\", \"gw\", \"local\"].includes(key)) return \"gateway\";\n if ([\"node\", \"remote\"].includes(key)) return \"node\";\n return undefined;\n}\n\nexport function normalizeExecSecurity(\n raw?: string | null,\n): ExecSecurity | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"deny\", \"none\", \"off\"].includes(key)) return \"deny\";\n if ([\"allowlist\", \"allow\", \"list\"].includes(key)) return \"allowlist\";\n if ([\"full\", \"all\", \"any\"].includes(key)) return \"full\";\n return undefined;\n}\n\nexport function normalizeExecAsk(raw?: string | null): ExecAsk | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"never\", \"no\"].includes(key)) return \"off\";\n if ([\"on-miss\", \"miss\", \"fallback\"].includes(key)) return \"on-miss\";\n if ([\"always\", \"on\", \"yes\"].includes(key)) return \"always\";\n return undefined;\n}\n\n// ============================================================================\n// Directive Extractors\n// ============================================================================\n\nexport function extractThinkDirective(body?: string): {\n cleaned: string;\n thinkLevel?: ThinkLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(\n body,\n [\"thinking\", \"think\", \"t\"],\n normalizeThinkLevel,\n );\n return {\n cleaned: extracted.cleaned,\n thinkLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractVerboseDirective(body?: string): {\n cleaned: string;\n verboseLevel?: VerboseLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(\n body,\n [\"verbose\", \"v\"],\n normalizeVerboseLevel,\n );\n return {\n cleaned: extracted.cleaned,\n verboseLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractReasoningDirective(body?: string): {\n cleaned: string;\n reasoningLevel?: ReasoningLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(\n body,\n [\"reasoning\", \"reason\"],\n normalizeReasoningLevel,\n );\n return {\n cleaned: extracted.cleaned,\n reasoningLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractElevatedDirective(body?: string): {\n cleaned: string;\n elevatedLevel?: ElevatedLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(\n body,\n [\"elevated\", \"elev\"],\n normalizeElevatedLevel,\n );\n return {\n cleaned: extracted.cleaned,\n elevatedLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractStatusDirective(body?: string): {\n cleaned: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n return extractSimpleDirective(body, [\"status\"]);\n}\n\nexport function extractModelDirective(\n body: string,\n options?: { aliases?: string[] },\n): {\n cleaned: string;\n rawModel?: string;\n rawProfile?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n\n // Match /model:provider/model@profile or /model provider/model@profile\n const modelMatch = body.match(\n /(?:^|\\s)\\/model(?:\\s*:\\s*|\\s+)([a-zA-Z0-9_-]+(?:\\/[a-zA-Z0-9._-]+)?(?:@[a-zA-Z0-9_-]+)?)/i,\n );\n\n if (modelMatch) {\n const fullMatch = modelMatch[1];\n const atIndex = fullMatch.indexOf(\"@\");\n const rawModel = atIndex >= 0 ? fullMatch.slice(0, atIndex) : fullMatch;\n const rawProfile = atIndex >= 0 ? fullMatch.slice(atIndex + 1) : undefined;\n const cleaned = body\n .replace(modelMatch[0], \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n return { cleaned, rawModel, rawProfile, hasDirective: true };\n }\n\n // Check for simple /model directive without value\n const simpleMatch = body.match(/(?:^|\\s)\\/model(?=$|\\s|:)/i);\n if (simpleMatch) {\n const cleaned = body\n .replace(simpleMatch[0], \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n return { cleaned, hasDirective: true };\n }\n\n // Check for model aliases\n if (options?.aliases?.length) {\n for (const alias of options.aliases) {\n const aliasPattern = new RegExp(\n `(?:^|\\\\s)/${escapeRegExp(alias)}(?=$|\\\\s)`,\n \"i\",\n );\n const aliasMatch = body.match(aliasPattern);\n if (aliasMatch) {\n const cleaned = body\n .replace(aliasMatch[0], \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n return { cleaned, rawModel: alias, hasDirective: true };\n }\n }\n }\n\n return { cleaned: body.trim(), hasDirective: false };\n}\n\nexport function extractExecDirective(body?: string): {\n cleaned: string;\n execHost?: ExecHost;\n execSecurity?: ExecSecurity;\n execAsk?: ExecAsk;\n execNode?: string;\n rawExecHost?: string;\n rawExecSecurity?: string;\n rawExecAsk?: string;\n rawExecNode?: string;\n hasExecOptions: boolean;\n invalidHost: boolean;\n invalidSecurity: boolean;\n invalidAsk: boolean;\n invalidNode: boolean;\n hasDirective: boolean;\n} {\n if (!body) {\n return {\n cleaned: \"\",\n hasExecOptions: false,\n invalidHost: false,\n invalidSecurity: false,\n invalidAsk: false,\n invalidNode: false,\n hasDirective: false,\n };\n }\n\n // Match /exec with optional key=value pairs\n const execMatch = body.match(/(?:^|\\s)\\/exec(?:\\s+([^\\/\\n]+))?(?=$|\\s|\\/)/i);\n if (!execMatch) {\n return {\n cleaned: body.trim(),\n hasExecOptions: false,\n invalidHost: false,\n invalidSecurity: false,\n invalidAsk: false,\n invalidNode: false,\n hasDirective: false,\n };\n }\n\n const args = execMatch[1]?.trim() ?? \"\";\n const cleaned = body.replace(execMatch[0], \" \").replace(/\\s+/g, \" \").trim();\n\n let rawExecHost: string | undefined;\n let rawExecSecurity: string | undefined;\n let rawExecAsk: string | undefined;\n let rawExecNode: string | undefined;\n\n // Parse key=value pairs\n const kvPattern = /(\\w+)\\s*=\\s*([^\\s]+)/g;\n let match;\n while ((match = kvPattern.exec(args)) !== null) {\n const key = match[1].toLowerCase();\n const value = match[2];\n if (key === \"host\") rawExecHost = value;\n else if (key === \"security\") rawExecSecurity = value;\n else if (key === \"ask\") rawExecAsk = value;\n else if (key === \"node\") rawExecNode = value;\n }\n\n const execHost = normalizeExecHost(rawExecHost);\n const execSecurity = normalizeExecSecurity(rawExecSecurity);\n const execAsk = normalizeExecAsk(rawExecAsk);\n\n return {\n cleaned,\n execHost,\n execSecurity,\n execAsk,\n execNode: rawExecNode,\n rawExecHost,\n rawExecSecurity,\n rawExecAsk,\n rawExecNode,\n hasExecOptions: Boolean(\n rawExecHost || rawExecSecurity || rawExecAsk || rawExecNode,\n ),\n invalidHost: Boolean(rawExecHost && !execHost),\n invalidSecurity: Boolean(rawExecSecurity && !execSecurity),\n invalidAsk: Boolean(rawExecAsk && !execAsk),\n invalidNode: false, // Node validation is context-dependent\n hasDirective: true,\n };\n}\n\n"
|
|
5
|
+
"/**\n * Plugin Directives - Inline directive parsing for Eliza agents\n *\n * Parses and applies inline directives from message text:\n * - /think or /t - Thinking level control\n * - /verbose or /v - Verbose output control\n * - /reasoning - Reasoning visibility\n * - /elevated - Elevated permissions\n * - /exec - Execution environment settings\n * - /model - Model selection\n * - /status - Status request\n */\n\nimport {\n type IAgentRuntime,\n logger,\n type Plugin,\n type Provider,\n type ProviderResult,\n} from \"@elizaos/core\";\n\nimport {\n extractElevatedDirective,\n extractExecDirective,\n extractModelDirective,\n extractReasoningDirective,\n extractStatusDirective,\n extractThinkDirective,\n extractVerboseDirective,\n} from \"./parsers\";\n\nimport type { DirectiveState, ParsedDirectives, ParseOptions } from \"./types\";\n\nexport * from \"./parsers\";\n// Re-export types\nexport * from \"./types\";\n\n// ============================================================================\n// Session State Management\n// ============================================================================\n\nconst sessionStates = new Map<string, DirectiveState>();\n\nfunction getDefaultState(): DirectiveState {\n return {\n thinking: \"low\",\n verbose: \"off\",\n reasoning: \"off\",\n elevated: \"off\",\n exec: {},\n model: {},\n };\n}\n\n/**\n * Get directive state for a room\n */\nexport function getDirectiveState(roomId: string): DirectiveState {\n return sessionStates.get(roomId) ?? getDefaultState();\n}\n\n/**\n * Set directive state for a room\n */\nexport function setDirectiveState(roomId: string, state: DirectiveState): void {\n sessionStates.set(roomId, state);\n}\n\n/**\n * Clear directive state for a room\n */\nexport function clearDirectiveState(roomId: string): void {\n sessionStates.delete(roomId);\n}\n\n// ============================================================================\n// Main Parse Function\n// ============================================================================\n\n/**\n * Parse all inline directives from message text\n */\nexport function parseDirectives(body: string, options?: ParseOptions): ParsedDirectives {\n const {\n cleaned: thinkCleaned,\n thinkLevel,\n rawLevel: rawThinkLevel,\n hasDirective: hasThinkDirective,\n } = extractThinkDirective(body);\n\n const {\n cleaned: verboseCleaned,\n verboseLevel,\n rawLevel: rawVerboseLevel,\n hasDirective: hasVerboseDirective,\n } = extractVerboseDirective(thinkCleaned);\n\n const {\n cleaned: reasoningCleaned,\n reasoningLevel,\n rawLevel: rawReasoningLevel,\n hasDirective: hasReasoningDirective,\n } = extractReasoningDirective(verboseCleaned);\n\n const {\n cleaned: elevatedCleaned,\n elevatedLevel,\n rawLevel: rawElevatedLevel,\n hasDirective: hasElevatedDirective,\n } = options?.disableElevated\n ? {\n cleaned: reasoningCleaned,\n elevatedLevel: undefined,\n rawLevel: undefined,\n hasDirective: false,\n }\n : extractElevatedDirective(reasoningCleaned);\n\n const {\n cleaned: execCleaned,\n execHost,\n execSecurity,\n execAsk,\n execNode,\n rawExecHost,\n rawExecSecurity,\n rawExecAsk,\n rawExecNode,\n hasExecOptions,\n invalidHost: invalidExecHost,\n invalidSecurity: invalidExecSecurity,\n invalidAsk: invalidExecAsk,\n invalidNode: invalidExecNode,\n hasDirective: hasExecDirective,\n } = extractExecDirective(elevatedCleaned);\n\n const allowStatusDirective = options?.allowStatusDirective !== false;\n const { cleaned: statusCleaned, hasDirective: hasStatusDirective } = allowStatusDirective\n ? extractStatusDirective(execCleaned)\n : { cleaned: execCleaned, hasDirective: false };\n\n const {\n cleaned: modelCleaned,\n rawModel,\n rawProfile,\n hasDirective: hasModelDirective,\n } = extractModelDirective(statusCleaned, {\n aliases: options?.modelAliases,\n });\n\n // Determine if message contains only directives\n const hasAnyDirective =\n hasThinkDirective ||\n hasVerboseDirective ||\n hasReasoningDirective ||\n hasElevatedDirective ||\n hasExecDirective ||\n hasModelDirective;\n const directivesOnly = hasAnyDirective && modelCleaned.trim().length === 0;\n\n return {\n cleanedText: modelCleaned,\n directivesOnly,\n hasThinkDirective,\n thinkLevel,\n rawThinkLevel,\n hasVerboseDirective,\n verboseLevel,\n rawVerboseLevel,\n hasReasoningDirective,\n reasoningLevel,\n rawReasoningLevel,\n hasElevatedDirective,\n elevatedLevel,\n rawElevatedLevel,\n hasExecDirective,\n execHost,\n execSecurity,\n execAsk,\n execNode,\n rawExecHost,\n rawExecSecurity,\n rawExecAsk,\n rawExecNode,\n hasExecOptions,\n invalidExecHost,\n invalidExecSecurity,\n invalidExecAsk,\n invalidExecNode,\n hasStatusDirective,\n hasModelDirective,\n rawModelDirective: rawModel,\n rawModelProfile: rawProfile,\n };\n}\n\n/**\n * Apply parsed directives to session state\n */\nexport function applyDirectives(\n roomId: string,\n directives: ParsedDirectives,\n persist = true\n): DirectiveState {\n const current = getDirectiveState(roomId);\n const updated = { ...current };\n\n if (directives.hasThinkDirective && directives.thinkLevel) {\n updated.thinking = directives.thinkLevel;\n }\n if (directives.hasVerboseDirective && directives.verboseLevel) {\n updated.verbose = directives.verboseLevel;\n }\n if (directives.hasReasoningDirective && directives.reasoningLevel) {\n updated.reasoning = directives.reasoningLevel;\n }\n if (directives.hasElevatedDirective && directives.elevatedLevel) {\n updated.elevated = directives.elevatedLevel;\n }\n if (directives.hasExecDirective) {\n updated.exec = {\n ...updated.exec,\n ...(directives.execHost && { host: directives.execHost }),\n ...(directives.execSecurity && { security: directives.execSecurity }),\n ...(directives.execAsk && { ask: directives.execAsk }),\n ...(directives.execNode && { node: directives.execNode }),\n };\n }\n if (directives.hasModelDirective && directives.rawModelDirective) {\n const parts = directives.rawModelDirective.split(\"/\");\n if (parts.length === 2) {\n updated.model = {\n provider: parts[0],\n model: parts[1],\n authProfile: directives.rawModelProfile,\n };\n } else {\n updated.model = {\n model: directives.rawModelDirective,\n authProfile: directives.rawModelProfile,\n };\n }\n }\n\n if (persist) {\n setDirectiveState(roomId, updated);\n }\n\n return updated;\n}\n\n/**\n * Format directive state for display\n */\nexport function formatDirectiveState(state: DirectiveState): string {\n const lines: string[] = [];\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(\n `Model: ${modelStr}${state.model.authProfile ? ` @${state.model.authProfile}` : \"\"}`\n );\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Format acknowledgment for directive-only messages\n */\nexport function formatDirectiveAcknowledgment(directives: ParsedDirectives): string {\n const changes: string[] = [];\n\n if (directives.hasThinkDirective) {\n changes.push(`Thinking: ${directives.thinkLevel ?? \"status\"}`);\n }\n if (directives.hasVerboseDirective) {\n changes.push(`Verbose: ${directives.verboseLevel ?? \"status\"}`);\n }\n if (directives.hasReasoningDirective) {\n changes.push(`Reasoning: ${directives.reasoningLevel ?? \"status\"}`);\n }\n if (directives.hasElevatedDirective) {\n changes.push(`Elevated: ${directives.elevatedLevel ?? \"status\"}`);\n }\n if (directives.hasModelDirective) {\n changes.push(`Model: ${directives.rawModelDirective ?? \"status\"}`);\n }\n\n return changes.length > 0 ? `✓ ${changes.join(\", \")}` : \"No changes applied\";\n}\n\n// ============================================================================\n// Provider\n// ============================================================================\n\n/**\n * Provider that exposes current directive state to the agent\n */\nexport const directiveStateProvider: Provider = {\n name: \"DIRECTIVE_STATE\",\n description: \"Current directive levels (thinking, verbose, model, etc.)\",\n\n async get(_runtime, message, _state): Promise<ProviderResult> {\n const roomId = message.roomId;\n const directives = getDirectiveState(roomId);\n\n return {\n text: formatDirectiveState(directives),\n values: {\n thinkingLevel: directives.thinking,\n verboseLevel: directives.verbose,\n reasoningLevel: directives.reasoning,\n elevatedLevel: directives.elevated,\n modelProvider: directives.model.provider ?? \"\",\n modelName: directives.model.model ?? \"\",\n isElevated: directives.elevated !== \"off\",\n },\n data: { directives },\n };\n },\n};\n\n// ============================================================================\n// Plugin Export\n// ============================================================================\n\n/**\n * Plugin Directives\n *\n * Provides inline directive parsing for Eliza agents, allowing users to\n * control thinking levels, verbosity, model selection, and more through\n * inline commands in their messages.\n */\nexport const directivesPlugin: Plugin = {\n name: \"directives\",\n description:\n \"Inline directive parsing (@think, @model, @verbose, etc.) for controlling agent behavior\",\n\n providers: [directiveStateProvider],\n\n config: {\n DEFAULT_THINKING: \"low\",\n DEFAULT_VERBOSE: \"off\",\n ALLOW_ELEVATED: \"true\",\n ALLOW_EXEC: \"false\",\n },\n\n tests: [\n {\n name: \"directive-parsing\",\n tests: [\n {\n name: \"Parse think directive\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/think:high hello world\");\n if (!result.hasThinkDirective) {\n throw new Error(\"Should detect think directive\");\n }\n if (result.thinkLevel !== \"high\") {\n throw new Error(`Expected 'high', got '${result.thinkLevel}'`);\n }\n if (result.cleanedText !== \"hello world\") {\n throw new Error(`Expected 'hello world', got '${result.cleanedText}'`);\n }\n logger.success(\"Think directive parsed correctly\");\n },\n },\n {\n name: \"Parse verbose directive\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/v on test message\");\n if (!result.hasVerboseDirective) {\n throw new Error(\"Should detect verbose directive\");\n }\n if (result.verboseLevel !== \"on\") {\n throw new Error(`Expected 'on', got '${result.verboseLevel}'`);\n }\n logger.success(\"Verbose directive parsed correctly\");\n },\n },\n {\n name: \"Parse model directive\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/model anthropic/claude-3-opus what is 2+2\");\n if (!result.hasModelDirective) {\n throw new Error(\"Should detect model directive\");\n }\n if (result.rawModelDirective !== \"anthropic/claude-3-opus\") {\n throw new Error(\n `Expected 'anthropic/claude-3-opus', got '${result.rawModelDirective}'`\n );\n }\n logger.success(\"Model directive parsed correctly\");\n },\n },\n {\n name: \"Detect directive-only message\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/think:high /verbose on\");\n if (!result.directivesOnly) {\n throw new Error(\"Should detect directive-only message\");\n }\n logger.success(\"Directive-only detection works correctly\");\n },\n },\n {\n name: \"Parse multiple directives\",\n fn: async (_runtime: IAgentRuntime) => {\n const result = parseDirectives(\"/think:medium /v full /elevated on hello\");\n if (\n !result.hasThinkDirective ||\n !result.hasVerboseDirective ||\n !result.hasElevatedDirective\n ) {\n throw new Error(\"Should detect all directives\");\n }\n if (result.thinkLevel !== \"medium\") {\n throw new Error(`Expected 'medium', got '${result.thinkLevel}'`);\n }\n if (result.verboseLevel !== \"full\") {\n throw new Error(`Expected 'full', got '${result.verboseLevel}'`);\n }\n if (result.elevatedLevel !== \"on\") {\n throw new Error(`Expected 'on', got '${result.elevatedLevel}'`);\n }\n if (result.cleanedText !== \"hello\") {\n throw new Error(`Expected 'hello', got '${result.cleanedText}'`);\n }\n logger.success(\"Multiple directives parsed correctly\");\n },\n },\n {\n name: \"Session state management\",\n fn: async (_runtime: IAgentRuntime) => {\n const roomId = \"test-room-123\";\n clearDirectiveState(roomId);\n\n const directives = parseDirectives(\"/think:high /verbose on\");\n applyDirectives(roomId, directives);\n\n const state = getDirectiveState(roomId);\n if (state.thinking !== \"high\") {\n throw new Error(`Expected thinking 'high', got '${state.thinking}'`);\n }\n if (state.verbose !== \"on\") {\n throw new Error(`Expected verbose 'on', got '${state.verbose}'`);\n }\n\n clearDirectiveState(roomId);\n logger.success(\"Session state management works correctly\");\n },\n },\n ],\n },\n ],\n\n async init(_config, _runtime) {\n logger.log(\"[plugin-directives] Initializing directive parser\");\n },\n};\n\nexport default directivesPlugin;\n",
|
|
6
|
+
"/**\n * Directive parsers for extracting inline directives from message text\n */\n\nimport type {\n DirectiveExtractResult,\n ElevatedLevel,\n ExecAsk,\n ExecHost,\n ExecSecurity,\n ReasoningLevel,\n ThinkLevel,\n VerboseLevel,\n} from \"./types\";\n\nconst escapeRegExp = (value: string) => value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * Match a level-based directive (e.g., /think:high)\n */\nfunction matchLevelDirective(\n body: string,\n names: string[]\n): { start: number; end: number; rawLevel?: string } | null {\n const namePattern = names.map(escapeRegExp).join(\"|\");\n const match = body.match(new RegExp(`(?:^|\\\\s)\\\\/(?:${namePattern})(?=$|\\\\s|:)`, \"i\"));\n if (!match || match.index === undefined) {\n return null;\n }\n const start = match.index;\n let end = match.index + match[0].length;\n let i = end;\n while (i < body.length && /\\s/.test(body[i])) {\n i += 1;\n }\n if (body[i] === \":\") {\n i += 1;\n while (i < body.length && /\\s/.test(body[i])) {\n i += 1;\n }\n }\n const argStart = i;\n while (i < body.length && /[A-Za-z0-9-]/.test(body[i])) {\n i += 1;\n }\n const rawLevel = i > argStart ? body.slice(argStart, i) : undefined;\n end = i;\n return { start, end, rawLevel };\n}\n\n/**\n * Extract a level-based directive from text\n */\nfunction extractLevelDirective<T>(\n body: string,\n names: string[],\n normalize: (raw?: string) => T | undefined\n): DirectiveExtractResult<T> {\n const match = matchLevelDirective(body, names);\n if (!match) {\n return { cleaned: body.trim(), hasDirective: false };\n }\n const rawLevel = match.rawLevel;\n const level = normalize(rawLevel);\n const cleaned = body\n .slice(0, match.start)\n .concat(\" \")\n .concat(body.slice(match.end))\n .replace(/\\s+/g, \" \")\n .trim();\n return {\n cleaned,\n level,\n rawLevel,\n hasDirective: true,\n };\n}\n\n/**\n * Extract a simple directive (no value)\n */\nfunction extractSimpleDirective(\n body: string,\n names: string[]\n): { cleaned: string; hasDirective: boolean } {\n const namePattern = names.map(escapeRegExp).join(\"|\");\n const match = body.match(\n new RegExp(`(?:^|\\\\s)\\\\/(?:${namePattern})(?=$|\\\\s|:)(?:\\\\s*:\\\\s*)?`, \"i\")\n );\n const cleaned = match ? body.replace(match[0], \" \").replace(/\\s+/g, \" \").trim() : body.trim();\n return {\n cleaned,\n hasDirective: Boolean(match),\n };\n}\n\n// ============================================================================\n// Normalizers\n// ============================================================================\n\nexport function normalizeThinkLevel(raw?: string | null): ThinkLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\"].includes(key)) return \"off\";\n if ([\"on\", \"enable\", \"enabled\"].includes(key)) return \"low\";\n if ([\"min\", \"minimal\"].includes(key)) return \"minimal\";\n if ([\"low\", \"thinkhard\", \"think-hard\", \"think_hard\"].includes(key)) return \"low\";\n if ([\"mid\", \"med\", \"medium\", \"thinkharder\", \"think-harder\", \"harder\"].includes(key))\n return \"medium\";\n if ([\"high\", \"ultra\", \"ultrathink\", \"think-hard\", \"thinkhardest\", \"highest\", \"max\"].includes(key))\n return \"high\";\n if ([\"xhigh\", \"x-high\", \"x_high\"].includes(key)) return \"xhigh\";\n if ([\"think\"].includes(key)) return \"minimal\";\n return undefined;\n}\n\nexport function normalizeVerboseLevel(raw?: string | null): VerboseLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"false\", \"no\", \"0\"].includes(key)) return \"off\";\n if ([\"full\", \"all\", \"everything\"].includes(key)) return \"full\";\n if ([\"on\", \"minimal\", \"true\", \"yes\", \"1\"].includes(key)) return \"on\";\n return undefined;\n}\n\nexport function normalizeReasoningLevel(raw?: string | null): ReasoningLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"false\", \"no\", \"0\", \"hide\", \"hidden\", \"disable\", \"disabled\"].includes(key))\n return \"off\";\n if ([\"on\", \"true\", \"yes\", \"1\", \"show\", \"visible\", \"enable\", \"enabled\"].includes(key)) return \"on\";\n if ([\"stream\", \"streaming\", \"draft\", \"live\"].includes(key)) return \"stream\";\n return undefined;\n}\n\nexport function normalizeElevatedLevel(raw?: string | null): ElevatedLevel | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"false\", \"no\", \"0\"].includes(key)) return \"off\";\n if ([\"full\", \"auto\", \"auto-approve\", \"autoapprove\"].includes(key)) return \"full\";\n if ([\"ask\", \"prompt\", \"approval\", \"approve\"].includes(key)) return \"ask\";\n if ([\"on\", \"true\", \"yes\", \"1\"].includes(key)) return \"on\";\n return undefined;\n}\n\nexport function normalizeExecHost(raw?: string | null): ExecHost | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"sandbox\", \"sb\"].includes(key)) return \"sandbox\";\n if ([\"gateway\", \"gw\", \"local\"].includes(key)) return \"gateway\";\n if ([\"node\", \"remote\"].includes(key)) return \"node\";\n return undefined;\n}\n\nexport function normalizeExecSecurity(raw?: string | null): ExecSecurity | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"deny\", \"none\", \"off\"].includes(key)) return \"deny\";\n if ([\"allowlist\", \"allow\", \"list\"].includes(key)) return \"allowlist\";\n if ([\"full\", \"all\", \"any\"].includes(key)) return \"full\";\n return undefined;\n}\n\nexport function normalizeExecAsk(raw?: string | null): ExecAsk | undefined {\n if (!raw) return undefined;\n const key = raw.toLowerCase();\n if ([\"off\", \"never\", \"no\"].includes(key)) return \"off\";\n if ([\"on-miss\", \"miss\", \"fallback\"].includes(key)) return \"on-miss\";\n if ([\"always\", \"on\", \"yes\"].includes(key)) return \"always\";\n return undefined;\n}\n\n// ============================================================================\n// Directive Extractors\n// ============================================================================\n\nexport function extractThinkDirective(body?: string): {\n cleaned: string;\n thinkLevel?: ThinkLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(body, [\"thinking\", \"think\", \"t\"], normalizeThinkLevel);\n return {\n cleaned: extracted.cleaned,\n thinkLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractVerboseDirective(body?: string): {\n cleaned: string;\n verboseLevel?: VerboseLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(body, [\"verbose\", \"v\"], normalizeVerboseLevel);\n return {\n cleaned: extracted.cleaned,\n verboseLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractReasoningDirective(body?: string): {\n cleaned: string;\n reasoningLevel?: ReasoningLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(body, [\"reasoning\", \"reason\"], normalizeReasoningLevel);\n return {\n cleaned: extracted.cleaned,\n reasoningLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractElevatedDirective(body?: string): {\n cleaned: string;\n elevatedLevel?: ElevatedLevel;\n rawLevel?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n const extracted = extractLevelDirective(body, [\"elevated\", \"elev\"], normalizeElevatedLevel);\n return {\n cleaned: extracted.cleaned,\n elevatedLevel: extracted.level,\n rawLevel: extracted.rawLevel,\n hasDirective: extracted.hasDirective,\n };\n}\n\nexport function extractStatusDirective(body?: string): {\n cleaned: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n return extractSimpleDirective(body, [\"status\"]);\n}\n\nexport function extractModelDirective(\n body: string,\n options?: { aliases?: string[] }\n): {\n cleaned: string;\n rawModel?: string;\n rawProfile?: string;\n hasDirective: boolean;\n} {\n if (!body) return { cleaned: \"\", hasDirective: false };\n\n // Match /model:provider/model@profile or /model provider/model@profile\n const modelMatch = body.match(\n /(?:^|\\s)\\/model(?:\\s*:\\s*|\\s+)([a-zA-Z0-9_-]+(?:\\/[a-zA-Z0-9._-]+)?(?:@[a-zA-Z0-9_-]+)?)/i\n );\n\n if (modelMatch) {\n const fullMatch = modelMatch[1];\n const atIndex = fullMatch.indexOf(\"@\");\n const rawModel = atIndex >= 0 ? fullMatch.slice(0, atIndex) : fullMatch;\n const rawProfile = atIndex >= 0 ? fullMatch.slice(atIndex + 1) : undefined;\n const cleaned = body.replace(modelMatch[0], \" \").replace(/\\s+/g, \" \").trim();\n return { cleaned, rawModel, rawProfile, hasDirective: true };\n }\n\n // Check for simple /model directive without value\n const simpleMatch = body.match(/(?:^|\\s)\\/model(?=$|\\s|:)/i);\n if (simpleMatch) {\n const cleaned = body.replace(simpleMatch[0], \" \").replace(/\\s+/g, \" \").trim();\n return { cleaned, hasDirective: true };\n }\n\n // Check for model aliases\n if (options?.aliases?.length) {\n for (const alias of options.aliases) {\n const aliasPattern = new RegExp(`(?:^|\\\\s)/${escapeRegExp(alias)}(?=$|\\\\s)`, \"i\");\n const aliasMatch = body.match(aliasPattern);\n if (aliasMatch) {\n const cleaned = body.replace(aliasMatch[0], \" \").replace(/\\s+/g, \" \").trim();\n return { cleaned, rawModel: alias, hasDirective: true };\n }\n }\n }\n\n return { cleaned: body.trim(), hasDirective: false };\n}\n\nexport function extractExecDirective(body?: string): {\n cleaned: string;\n execHost?: ExecHost;\n execSecurity?: ExecSecurity;\n execAsk?: ExecAsk;\n execNode?: string;\n rawExecHost?: string;\n rawExecSecurity?: string;\n rawExecAsk?: string;\n rawExecNode?: string;\n hasExecOptions: boolean;\n invalidHost: boolean;\n invalidSecurity: boolean;\n invalidAsk: boolean;\n invalidNode: boolean;\n hasDirective: boolean;\n} {\n if (!body) {\n return {\n cleaned: \"\",\n hasExecOptions: false,\n invalidHost: false,\n invalidSecurity: false,\n invalidAsk: false,\n invalidNode: false,\n hasDirective: false,\n };\n }\n\n // Match /exec with optional key=value pairs\n const execMatch = body.match(/(?:^|\\s)\\/exec(?:\\s+([^/\\n]+))?(?=$|\\s|\\/)/i);\n if (!execMatch) {\n return {\n cleaned: body.trim(),\n hasExecOptions: false,\n invalidHost: false,\n invalidSecurity: false,\n invalidAsk: false,\n invalidNode: false,\n hasDirective: false,\n };\n }\n\n const args = execMatch[1]?.trim() ?? \"\";\n const cleaned = body.replace(execMatch[0], \" \").replace(/\\s+/g, \" \").trim();\n\n let rawExecHost: string | undefined;\n let rawExecSecurity: string | undefined;\n let rawExecAsk: string | undefined;\n let rawExecNode: string | undefined;\n\n // Parse key=value pairs\n const kvPattern = /(\\w+)\\s*=\\s*([^\\s]+)/g;\n for (let match = kvPattern.exec(args); match !== null; match = kvPattern.exec(args)) {\n const key = match[1].toLowerCase();\n const value = match[2];\n if (key === \"host\") rawExecHost = value;\n else if (key === \"security\") rawExecSecurity = value;\n else if (key === \"ask\") rawExecAsk = value;\n else if (key === \"node\") rawExecNode = value;\n }\n\n const execHost = normalizeExecHost(rawExecHost);\n const execSecurity = normalizeExecSecurity(rawExecSecurity);\n const execAsk = normalizeExecAsk(rawExecAsk);\n\n return {\n cleaned,\n execHost,\n execSecurity,\n execAsk,\n execNode: rawExecNode,\n rawExecHost,\n rawExecSecurity,\n rawExecAsk,\n rawExecNode,\n hasExecOptions: Boolean(rawExecHost || rawExecSecurity || rawExecAsk || rawExecNode),\n invalidHost: Boolean(rawExecHost && !execHost),\n invalidSecurity: Boolean(rawExecSecurity && !execSecurity),\n invalidAsk: Boolean(rawExecAsk && !execAsk),\n invalidNode: false, // Node validation is context-dependent\n hasDirective: true,\n };\n}\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "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",
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "2A050D6E0792F42D64756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-directives",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/cjs/index.cjs",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -29,17 +29,19 @@
|
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/bun": "^1.2.22",
|
|
31
31
|
"@types/node": "^24.5.2",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
32
|
+
"typescript": "^5.9.2",
|
|
33
|
+
"@biomejs/biome": "^2.3.11"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
36
|
"build": "bun run build.ts",
|
|
37
37
|
"dev": "bun --hot build.ts",
|
|
38
38
|
"test": "elizaos test",
|
|
39
39
|
"clean": "rm -rf dist .turbo node_modules .turbo-tsconfig.json tsconfig.tsbuildinfo",
|
|
40
|
-
"format": "
|
|
41
|
-
"format:check": "
|
|
42
|
-
"lint": "
|
|
40
|
+
"format": "bunx @biomejs/biome format --write .",
|
|
41
|
+
"format:check": "bunx @biomejs/biome format .",
|
|
42
|
+
"lint": "bunx @biomejs/biome check --write --unsafe .",
|
|
43
|
+
"lint:check": "bunx @biomejs/biome check .",
|
|
44
|
+
"typecheck": "tsc --noEmit"
|
|
43
45
|
},
|
|
44
46
|
"publishConfig": {
|
|
45
47
|
"access": "public"
|