@elizaos/plugin-code 2.0.0-alpha.5 → 2.0.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js.map +17 -17
  2. package/package.json +96 -68
package/dist/index.js.map CHANGED
@@ -2,24 +2,24 @@
2
2
  "version": 3,
3
3
  "sources": ["../generated/specs/specs.ts", "../generated/specs/spec-helpers.ts", "../actions/changeDirectory.ts", "../actions/editFile.ts", "../actions/executeShell.ts", "../actions/git.ts", "../actions/listFiles.ts", "../actions/readFile.ts", "../actions/searchFiles.ts", "../actions/writeFile.ts", "../providers/coderStatusProvider.ts", "../services/coderService.ts", "../utils/config.ts", "../utils/pathUtils.ts", "../configureCodingTools.ts", "../index.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Auto-generated canonical action/provider/evaluator docs for plugin-code.\n * DO NOT EDIT - Generated from prompts/specs/**.\n */\n\nexport type ActionDoc = {\n name: string;\n description: string;\n similes?: readonly string[];\n parameters?: readonly unknown[];\n examples?: readonly (readonly unknown[])[];\n};\n\nexport type ProviderDoc = {\n name: string;\n description: string;\n position?: number;\n dynamic?: boolean;\n};\n\nexport type EvaluatorDoc = {\n name: string;\n description: string;\n similes?: readonly string[];\n alwaysRun?: boolean;\n examples?: readonly unknown[];\n};\n\nexport const coreActionsSpec = {\n version: \"1.0.0\",\n actions: [\n {\n name: \"CHANGE_DIRECTORY\",\n description:\n \"Change the working directory (restricted to allowed directory).\",\n similes: [\"CD\", \"CWD\"],\n parameters: [],\n },\n {\n name: \"EDIT_FILE\",\n description: \"Replace a substring in a file (single replacement).\",\n similes: [\"REPLACE_IN_FILE\", \"PATCH_FILE\", \"MODIFY_FILE\"],\n parameters: [],\n },\n {\n name: \"EXECUTE_SHELL\",\n description:\n \"Execute a shell command in the current working directory (restricted).\",\n similes: [\"SHELL\", \"RUN_COMMAND\", \"EXEC\", \"TERMINAL\"],\n parameters: [],\n },\n {\n name: \"GIT\",\n description: \"Run a git command (restricted).\",\n similes: [\"GIT_COMMAND\", \"GIT_RUN\"],\n parameters: [],\n },\n {\n name: \"LIST_FILES\",\n description: \"List files in a directory.\",\n similes: [\"LS\", \"LIST_DIR\", \"LIST_DIRECTORY\", \"DIR\"],\n parameters: [],\n },\n {\n name: \"READ_FILE\",\n description: \"Read and return a file\",\n similes: [\"VIEW_FILE\", \"OPEN_FILE\", \"CAT_FILE\", \"SHOW_FILE\", \"GET_FILE\"],\n parameters: [],\n },\n {\n name: \"SEARCH_FILES\",\n description: \"Search for text across files under a directory.\",\n similes: [\"GREP\", \"RG\", \"FIND_IN_FILES\", \"SEARCH\"],\n parameters: [],\n },\n {\n name: \"WRITE_FILE\",\n description: \"Create or overwrite a file with given content.\",\n similes: [\"CREATE_FILE\", \"SAVE_FILE\", \"OUTPUT_FILE\"],\n parameters: [],\n },\n ],\n} as const;\nexport const allActionsSpec = {\n version: \"1.0.0\",\n actions: [\n {\n name: \"CHANGE_DIRECTORY\",\n description:\n \"Change the working directory (restricted to allowed directory).\",\n similes: [\"CD\", \"CWD\"],\n parameters: [],\n },\n {\n name: \"EDIT_FILE\",\n description: \"Replace a substring in a file (single replacement).\",\n similes: [\"REPLACE_IN_FILE\", \"PATCH_FILE\", \"MODIFY_FILE\"],\n parameters: [],\n },\n {\n name: \"EXECUTE_SHELL\",\n description:\n \"Execute a shell command in the current working directory (restricted).\",\n similes: [\"SHELL\", \"RUN_COMMAND\", \"EXEC\", \"TERMINAL\"],\n parameters: [],\n },\n {\n name: \"GIT\",\n description: \"Run a git command (restricted).\",\n similes: [\"GIT_COMMAND\", \"GIT_RUN\"],\n parameters: [],\n },\n {\n name: \"LIST_FILES\",\n description: \"List files in a directory.\",\n similes: [\"LS\", \"LIST_DIR\", \"LIST_DIRECTORY\", \"DIR\"],\n parameters: [],\n },\n {\n name: \"READ_FILE\",\n description: \"Read and return a file\",\n similes: [\"VIEW_FILE\", \"OPEN_FILE\", \"CAT_FILE\", \"SHOW_FILE\", \"GET_FILE\"],\n parameters: [],\n },\n {\n name: \"SEARCH_FILES\",\n description: \"Search for text across files under a directory.\",\n similes: [\"GREP\", \"RG\", \"FIND_IN_FILES\", \"SEARCH\"],\n parameters: [],\n },\n {\n name: \"WRITE_FILE\",\n description: \"Create or overwrite a file with given content.\",\n similes: [\"CREATE_FILE\", \"SAVE_FILE\", \"OUTPUT_FILE\"],\n parameters: [],\n },\n ],\n} as const;\nexport const coreProvidersSpec = {\n version: \"1.0.0\",\n providers: [\n {\n name: \"CODER_STATUS\",\n description:\n \"Provides current working directory, allowed directory, and recent shell/file operations\",\n dynamic: true,\n },\n ],\n} as const;\nexport const allProvidersSpec = {\n version: \"1.0.0\",\n providers: [\n {\n name: \"CODER_STATUS\",\n description:\n \"Provides current working directory, allowed directory, and recent shell/file operations\",\n dynamic: true,\n },\n ],\n} as const;\nexport const coreEvaluatorsSpec = {\n version: \"1.0.0\",\n evaluators: [],\n} as const;\nexport const allEvaluatorsSpec = {\n version: \"1.0.0\",\n evaluators: [],\n} as const;\n\nexport const coreActionDocs: readonly ActionDoc[] = coreActionsSpec.actions;\nexport const allActionDocs: readonly ActionDoc[] = allActionsSpec.actions;\nexport const coreProviderDocs: readonly ProviderDoc[] =\n coreProvidersSpec.providers;\nexport const allProviderDocs: readonly ProviderDoc[] =\n allProvidersSpec.providers;\nexport const coreEvaluatorDocs: readonly EvaluatorDoc[] =\n coreEvaluatorsSpec.evaluators;\nexport const allEvaluatorDocs: readonly EvaluatorDoc[] =\n allEvaluatorsSpec.evaluators;\n",
6
- "/**\n * Helper functions to lookup action/provider/evaluator specs by name.\n * These allow language-specific implementations to import their text content\n * (description, similes, examples) from the centralized specs.\n *\n * DO NOT EDIT the spec data - update prompts/actions.json, prompts/providers.json, prompts/evaluators.json and regenerate.\n */\n\nimport {\n type ActionDoc,\n allActionDocs,\n allEvaluatorDocs,\n allProviderDocs,\n coreActionDocs,\n coreEvaluatorDocs,\n coreProviderDocs,\n type EvaluatorDoc,\n type ProviderDoc,\n} from \"./specs\";\n\n// Build lookup maps for O(1) access\nconst coreActionMap = new Map<string, ActionDoc>(\n coreActionDocs.map((doc) => [doc.name, doc]),\n);\nconst allActionMap = new Map<string, ActionDoc>(\n allActionDocs.map((doc) => [doc.name, doc]),\n);\nconst coreProviderMap = new Map<string, ProviderDoc>(\n coreProviderDocs.map((doc) => [doc.name, doc]),\n);\nconst allProviderMap = new Map<string, ProviderDoc>(\n allProviderDocs.map((doc) => [doc.name, doc]),\n);\nconst coreEvaluatorMap = new Map<string, EvaluatorDoc>(\n coreEvaluatorDocs.map((doc) => [doc.name, doc]),\n);\nconst allEvaluatorMap = new Map<string, EvaluatorDoc>(\n allEvaluatorDocs.map((doc) => [doc.name, doc]),\n);\n\n/**\n * Get an action spec by name from the core specs.\n * @param name - The action name\n * @returns The action spec or undefined if not found\n */\nexport function getActionSpec(name: string): ActionDoc | undefined {\n return coreActionMap.get(name) ?? allActionMap.get(name);\n}\n\n/**\n * Get an action spec by name, throwing if not found.\n * @param name - The action name\n * @returns The action spec\n * @throws Error if the action is not found\n */\nexport function requireActionSpec(name: string): ActionDoc {\n const spec = getActionSpec(name);\n if (!spec) {\n throw new Error(`Action spec not found: ${name}`);\n }\n return spec;\n}\n\n/**\n * Get a provider spec by name from the core specs.\n * @param name - The provider name\n * @returns The provider spec or undefined if not found\n */\nexport function getProviderSpec(name: string): ProviderDoc | undefined {\n return coreProviderMap.get(name) ?? allProviderMap.get(name);\n}\n\n/**\n * Get a provider spec by name, throwing if not found.\n * @param name - The provider name\n * @returns The provider spec\n * @throws Error if the provider is not found\n */\nexport function requireProviderSpec(name: string): ProviderDoc {\n const spec = getProviderSpec(name);\n if (!spec) {\n throw new Error(`Provider spec not found: ${name}`);\n }\n return spec;\n}\n\n/**\n * Get an evaluator spec by name from the core specs.\n * @param name - The evaluator name\n * @returns The evaluator spec or undefined if not found\n */\nexport function getEvaluatorSpec(name: string): EvaluatorDoc | undefined {\n return coreEvaluatorMap.get(name) ?? allEvaluatorMap.get(name);\n}\n\n/**\n * Get an evaluator spec by name, throwing if not found.\n * @param name - The evaluator name\n * @returns The evaluator spec\n * @throws Error if the evaluator is not found\n */\nexport function requireEvaluatorSpec(name: string): EvaluatorDoc {\n const spec = getEvaluatorSpec(name);\n if (!spec) {\n throw new Error(`Evaluator spec not found: ${name}`);\n }\n return spec;\n}\n\n// Re-export types for convenience\nexport type { ActionDoc, ProviderDoc, EvaluatorDoc };\n",
7
- "import type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getTarget(options: HandlerOptions | undefined): string {\n const opt = options as { path?: string } | undefined;\n return opt?.path?.trim() ?? \"\";\n}\n\nconst spec = requireActionSpec(\"CHANGE_DIRECTORY\");\n\nexport const changeDirectory: Action = {\n name: spec.name,\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n validate: async (runtime: IAgentRuntime): Promise<boolean> =>\n runtime.getService<CoderService>(\"coder\") !== null,\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state: State | undefined,\n options: HandlerOptions | undefined,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = runtime.getService<CoderService>(\"coder\");\n if (!svc) {\n const msg = \"Coder service is not available.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const target = getTarget(options);\n if (!target) {\n const msg = \"Missing path.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const conv = message.roomId ?? message.agentId ?? runtime.agentId;\n const result = await svc.changeDirectory(conv, target);\n const out = result.success ? result.stdout : result.stderr;\n if (callback) await callback({ content: { text: out } });\n return { success: result.success, text: out };\n },\n};\n",
8
- "import type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getInputs(\n options: HandlerOptions | undefined,\n message: Memory,\n): { filepath: string; oldStr: string; newStr: string } {\n const opt = options as\n | { filepath?: string; old_str?: string; new_str?: string }\n | undefined;\n const filepath = opt?.filepath?.trim() ?? \"\";\n const oldStr = opt?.old_str ?? \"\";\n const newStr = opt?.new_str ?? \"\";\n if (filepath) return { filepath, oldStr, newStr };\n\n const text = message.content.text ?? \"\";\n const m = text.match(/[\"'`]([^\"'`]+)[\"'`]/);\n const inferred = m?.[1]?.trim() ?? \"\";\n return { filepath: inferred, oldStr, newStr };\n}\n\nconst spec = requireActionSpec(\"EDIT_FILE\");\n\nexport const editFile: Action = {\n name: spec.name,\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n validate: async (runtime: IAgentRuntime): Promise<boolean> =>\n runtime.getService<CoderService>(\"coder\") !== null,\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state: State | undefined,\n options: HandlerOptions | undefined,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = runtime.getService<CoderService>(\"coder\");\n if (!svc) {\n const msg = \"Coder service is not available.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const { filepath, oldStr, newStr } = getInputs(options, message);\n if (!filepath || oldStr.length === 0) {\n const msg = \"Missing filepath or old_str.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const conv = message.roomId ?? message.agentId ?? runtime.agentId;\n const result = await svc.editFile(conv, filepath, oldStr, newStr);\n if (!result.ok) {\n if (callback) await callback({ content: { text: result.error } });\n return { success: false, text: result.error };\n }\n\n const msg = `Edited ${filepath}`;\n if (callback) await callback({ content: { text: msg } });\n return { success: true, text: msg };\n },\n};\n",
9
- "import type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getCommand(options: HandlerOptions | undefined): string {\n const opt = options as { command?: string } | undefined;\n return opt?.command?.trim() ?? \"\";\n}\n\nconst spec = requireActionSpec(\"EXECUTE_SHELL\");\n\nexport const executeShell: Action = {\n name: spec.name,\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n validate: async (runtime: IAgentRuntime): Promise<boolean> =>\n runtime.getService<CoderService>(\"coder\") !== null,\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state: State | undefined,\n options: HandlerOptions | undefined,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = runtime.getService<CoderService>(\"coder\");\n if (!svc) {\n const msg = \"Coder service is not available.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const cmd = getCommand(options);\n if (!cmd) {\n const msg = \"Missing command.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const conv = message.roomId ?? message.agentId ?? runtime.agentId;\n const result = await svc.executeShell(cmd, conv);\n const out = result.success ? result.stdout : result.stderr;\n if (callback) await callback({ content: { text: out } });\n return { success: result.success, text: out };\n },\n};\n",
10
- "import type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getArgs(options: HandlerOptions | undefined): string {\n const opt = options as { args?: string } | undefined;\n return opt?.args?.trim() ?? \"\";\n}\n\nconst spec = requireActionSpec(\"GIT\");\n\nexport const git: Action = {\n name: spec.name,\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n validate: async (runtime: IAgentRuntime): Promise<boolean> =>\n runtime.getService<CoderService>(\"coder\") !== null,\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state: State | undefined,\n options: HandlerOptions | undefined,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = runtime.getService<CoderService>(\"coder\");\n if (!svc) {\n const msg = \"Coder service is not available.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const args = getArgs(options);\n if (!args) {\n const msg = 'Missing args (provide options.args, e.g. \"status\").';\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const conv = message.roomId ?? message.agentId ?? runtime.agentId;\n const result = await svc.git(args, conv);\n const out = result.success ? result.stdout : result.stderr;\n if (callback) await callback({ content: { text: out } });\n return { success: result.success, text: out };\n },\n};\n",
11
- "import type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getDir(options: HandlerOptions | undefined): string {\n const opt = options as { path?: string } | undefined;\n return opt?.path?.trim() ?? \".\";\n}\n\nconst spec = requireActionSpec(\"LIST_FILES\");\n\nexport const listFiles: Action = {\n name: spec.name,\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n validate: async (runtime: IAgentRuntime): Promise<boolean> =>\n runtime.getService<CoderService>(\"coder\") !== null,\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state: State | undefined,\n options: HandlerOptions | undefined,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = runtime.getService<CoderService>(\"coder\");\n if (!svc) {\n const msg = \"Coder service is not available.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const conv = message.roomId ?? message.agentId ?? runtime.agentId;\n const dir = getDir(options);\n const result = await svc.listFiles(conv, dir);\n if (!result.ok) {\n if (callback) await callback({ content: { text: result.error } });\n return { success: false, text: result.error };\n }\n\n const out = result.items.length > 0 ? result.items.join(\"\\n\") : \"(empty)\";\n if (callback) await callback({ content: { text: out } });\n return { success: true, text: out };\n },\n};\n",
12
- "import * as path from \"node:path\";\nimport type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction extToLang(ext: string): string {\n const e = ext.toLowerCase();\n if (e === \".ts\" || e === \".tsx\") return \"ts\";\n if (e === \".js\" || e === \".jsx\") return \"js\";\n if (e === \".json\") return \"json\";\n if (e === \".md\") return \"md\";\n if (e === \".py\") return \"py\";\n if (e === \".rs\") return \"rs\";\n if (e === \".go\") return \"go\";\n if (e === \".toml\") return \"toml\";\n if (e === \".yml\" || e === \".yaml\") return \"yaml\";\n if (e === \".sh\" || e === \".bash\" || e === \".zsh\") return \"bash\";\n return \"\";\n}\n\nfunction getFilepath(\n options: HandlerOptions | undefined,\n message: Memory,\n): string {\n const opt = options as { filepath?: string } | undefined;\n if (opt?.filepath && opt.filepath.trim().length > 0)\n return opt.filepath.trim();\n const text = message.content.text ?? \"\";\n const m = text.match(/[\"'`]([^\"'`]+)[\"'`]/);\n if (m?.[1]) return m[1].trim();\n const loose = text.match(/(?:\\.\\/|\\/)?[\\w\\-./]+\\.[a-zA-Z0-9]+/);\n return loose?.[0]?.trim() ?? \"\";\n}\n\nconst spec = requireActionSpec(\"READ_FILE\");\n\nexport const readFile: Action = {\n name: spec.name,\n similes: spec.similes ? [...spec.similes] : [],\n description: `${spec.description} Reads a file's contents.`,\n validate: async (\n runtime: IAgentRuntime,\n _message: Memory,\n ): Promise<boolean> => runtime.getService<CoderService>(\"coder\") !== null,\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state: State | undefined,\n options: HandlerOptions | undefined,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = runtime.getService<CoderService>(\"coder\");\n if (!svc) {\n const msg = \"Coder service is not available.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const filepath = getFilepath(options, message);\n if (!filepath) {\n const msg = \"Missing filepath.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const conv = message.roomId ?? message.agentId ?? runtime.agentId;\n const result = await svc.readFile(conv, filepath);\n if (!result.ok) {\n if (callback) await callback({ content: { text: result.error } });\n return { success: false, text: result.error };\n }\n\n const lang = extToLang(path.extname(filepath));\n const fenced = `\\`\\`\\`${lang}\\n${result.content}\\n\\`\\`\\``;\n if (callback) await callback({ content: { text: fenced } });\n return { success: true, text: fenced };\n },\n};\n",
13
- "import type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getInputs(options: HandlerOptions | undefined): {\n pattern: string;\n path: string;\n maxMatches: number;\n} {\n const opt = options as\n | {\n pattern?: string;\n path?: string;\n max_matches?: string;\n maxMatches?: number;\n }\n | undefined;\n const pattern = (opt?.pattern ?? \"\").trim();\n const p = (opt?.path ?? \".\").trim() || \".\";\n const mm =\n typeof opt?.maxMatches === \"number\"\n ? opt.maxMatches\n : Number.parseInt((opt?.max_matches ?? \"\").trim(), 10);\n const maxMatches = Number.isFinite(mm) && mm > 0 ? mm : 50;\n return { pattern, path: p, maxMatches };\n}\n\nconst spec = requireActionSpec(\"SEARCH_FILES\");\n\nexport const searchFiles: Action = {\n name: spec.name,\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n validate: async (runtime: IAgentRuntime): Promise<boolean> =>\n runtime.getService<CoderService>(\"coder\") !== null,\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state: State | undefined,\n options: HandlerOptions | undefined,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = runtime.getService<CoderService>(\"coder\");\n if (!svc) {\n const msg = \"Coder service is not available.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const conv = message.roomId ?? message.agentId ?? runtime.agentId;\n const { pattern, path, maxMatches } = getInputs(options);\n if (!pattern) {\n const msg = \"Missing pattern.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const result = await svc.searchFiles(conv, pattern, path, maxMatches);\n if (!result.ok) {\n if (callback) await callback({ content: { text: result.error } });\n return { success: false, text: result.error };\n }\n\n const out =\n result.matches.length === 0\n ? `No matches for \"${pattern}\".`\n : result.matches\n .map((m) => `${m.file}:L${m.line}: ${m.content}`)\n .join(\"\\n\");\n if (callback) await callback({ content: { text: out } });\n return { success: true, text: out };\n },\n};\n",
14
- "import type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getInputs(\n options: HandlerOptions | undefined,\n message: Memory,\n): { filepath: string; content: string } {\n const opt = options as { filepath?: string; content?: string } | undefined;\n const filepath = opt?.filepath?.trim() ?? \"\";\n const content = opt?.content ?? \"\";\n\n if (filepath) return { filepath, content };\n\n const text = message.content.text ?? \"\";\n const m = text.match(/[\"'`]([^\"'`]+)[\"'`]/);\n const inferred = m?.[1]?.trim() ?? \"\";\n return { filepath: inferred, content };\n}\n\nconst spec = requireActionSpec(\"WRITE_FILE\");\n\nexport const writeFile: Action = {\n name: spec.name,\n similes: spec.similes ? [...spec.similes] : [],\n description: spec.description,\n validate: async (runtime: IAgentRuntime): Promise<boolean> =>\n runtime.getService<CoderService>(\"coder\") !== null,\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state: State | undefined,\n options: HandlerOptions | undefined,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = runtime.getService<CoderService>(\"coder\");\n if (!svc) {\n const msg = \"Coder service is not available.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const { filepath, content } = getInputs(options, message);\n if (!filepath) {\n const msg = \"Missing filepath.\";\n if (callback) await callback({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const conv = message.roomId ?? message.agentId ?? runtime.agentId;\n const result = await svc.writeFile(conv, filepath, content);\n if (!result.ok) {\n if (callback) await callback({ content: { text: result.error } });\n return { success: false, text: result.error };\n }\n\n const msg = `Wrote ${filepath} (${content.length} chars)`;\n if (callback) await callback({ content: { text: msg } });\n return { success: true, text: msg };\n },\n};\n",
15
- "import {\n addHeader,\n type IAgentRuntime,\n logger,\n type Memory,\n type Provider,\n type State,\n} from \"@elizaos/core\";\nimport { requireProviderSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\nimport type { CommandHistoryEntry, FileOperation } from \"../types\";\n\nconst MAX_OUTPUT_LENGTH = 8000;\nconst TRUNCATE_SEGMENT_LENGTH = 4000;\n\nconst spec = requireProviderSpec(\"CODER_STATUS\");\n\nexport const coderStatusProvider: Provider = {\n name: spec.name,\n description:\n \"Provides current working directory, allowed directory, and recent shell/file operations\",\n position: 99,\n get: async (runtime: IAgentRuntime, message: Memory, _state: State) => {\n const svc = runtime.getService<CoderService>(\"coder\");\n\n if (!svc) {\n logger.warn(\"[coderStatusProvider] Coder service not found\");\n return {\n values: {\n coderStatus: \"Coder service is not available\",\n currentWorkingDirectory: \"N/A\",\n allowedDirectory: \"N/A\",\n },\n text: addHeader(\"# Coder Status\", \"Coder service is not available\"),\n data: { historyCount: 0, cwd: \"N/A\", allowedDir: \"N/A\" },\n };\n }\n\n const conversationId = message.roomId ?? message.agentId ?? runtime.agentId;\n const history = svc.getCommandHistory(conversationId, 10);\n const cwd = svc.getCurrentDirectory(conversationId);\n const allowedDir = svc.getAllowedDirectory();\n\n let historyText = \"No commands in history.\";\n if (history.length > 0) {\n historyText = history\n .map((entry: CommandHistoryEntry) => {\n let entryStr = `[${new Date(entry.timestamp).toISOString()}] ${entry.workingDirectory}> ${entry.command}`;\n if (entry.stdout) {\n if (entry.stdout.length > MAX_OUTPUT_LENGTH) {\n entryStr += `\\n Output: ${entry.stdout.substring(0, TRUNCATE_SEGMENT_LENGTH)}\\n ... [TRUNCATED] ...\\n ${entry.stdout.substring(entry.stdout.length - TRUNCATE_SEGMENT_LENGTH)}`;\n } else {\n entryStr += `\\n Output: ${entry.stdout}`;\n }\n }\n if (entry.stderr) {\n if (entry.stderr.length > MAX_OUTPUT_LENGTH) {\n entryStr += `\\n Error: ${entry.stderr.substring(0, TRUNCATE_SEGMENT_LENGTH)}\\n ... [TRUNCATED] ...\\n ${entry.stderr.substring(entry.stderr.length - TRUNCATE_SEGMENT_LENGTH)}`;\n } else {\n entryStr += `\\n Error: ${entry.stderr}`;\n }\n }\n entryStr += `\\n Exit Code: ${entry.exitCode}`;\n\n if (entry.fileOperations && entry.fileOperations.length > 0) {\n entryStr += \"\\n File Operations:\";\n entry.fileOperations.forEach((op: FileOperation) => {\n entryStr += `\\n - ${op.type}: ${op.target}`;\n });\n }\n\n return entryStr;\n })\n .join(\"\\n\\n\");\n }\n\n const recentFileOps = history\n .filter((h) => (h.fileOperations?.length ?? 0) > 0)\n .flatMap((h) => h.fileOperations ?? [])\n .slice(-8);\n\n const fileOpsText =\n recentFileOps.length > 0\n ? `\\n\\n${addHeader(\n \"# Recent File Operations\",\n recentFileOps.map((op) => `- ${op.type}: ${op.target}`).join(\"\\n\"),\n )}`\n : \"\";\n\n const text = `Current Directory: ${cwd}\nAllowed Directory: ${allowedDir}\n\n${addHeader(\"# Recent Commands (Last 10)\", historyText)}${fileOpsText}`;\n\n return {\n values: {\n coderStatus: historyText,\n currentWorkingDirectory: cwd,\n allowedDirectory: allowedDir,\n },\n text,\n data: {\n historyCount: history.length,\n cwd,\n allowedDir,\n },\n };\n },\n};\n",
16
- "import { execSync } from \"node:child_process\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport type {\n CoderConfig,\n CommandHistoryEntry,\n CommandResult,\n FileOperation,\n ShellService,\n} from \"../types\";\nimport {\n isForbiddenCommand,\n isSafeCommand,\n loadCoderConfig,\n validatePath,\n} from \"../utils\";\n\nexport class CoderService extends Service {\n public static serviceType = \"coder\";\n private coderConfig: CoderConfig;\n private currentDirectoryByConversation = new Map<string, string>();\n private commandHistoryByConversation = new Map<\n string,\n CommandHistoryEntry[]\n >();\n private maxHistoryPerConversation = 100;\n\n constructor(runtime?: IAgentRuntime) {\n super(runtime);\n this.coderConfig = loadCoderConfig();\n }\n\n static async start(runtime: IAgentRuntime): Promise<CoderService> {\n const instance = new CoderService(runtime);\n logger.info(\"Coder service initialized\");\n return instance;\n }\n\n async stop(): Promise<void> {\n logger.info(\"Coder service stopped\");\n }\n\n get capabilityDescription(): string {\n return \"Filesystem + shell + git tools within a restricted directory\";\n }\n\n getAllowedDirectory(): string {\n return this.coderConfig.allowedDirectory;\n }\n\n getCurrentDirectory(conversationId: string): string {\n return (\n this.currentDirectoryByConversation.get(conversationId) ??\n this.coderConfig.allowedDirectory\n );\n }\n\n setCurrentDirectory(conversationId: string, dir: string): void {\n this.currentDirectoryByConversation.set(conversationId, dir);\n }\n\n getCommandHistory(\n conversationId: string,\n limit: number,\n ): CommandHistoryEntry[] {\n const all = this.commandHistoryByConversation.get(conversationId) ?? [];\n if (limit <= 0) return [];\n return all.slice(-limit);\n }\n\n private addToHistory(\n conversationId: string | undefined,\n command: string,\n result: CommandResult,\n fileOperations?: FileOperation[],\n ): void {\n if (!conversationId) return;\n const list = this.commandHistoryByConversation.get(conversationId) ?? [];\n list.push({\n timestamp: Date.now(),\n workingDirectory: result.executedIn,\n command,\n stdout: result.stdout,\n stderr: result.stderr,\n exitCode: result.exitCode,\n fileOperations,\n });\n const trimmed =\n list.length > this.maxHistoryPerConversation\n ? list.slice(-this.maxHistoryPerConversation)\n : list;\n this.commandHistoryByConversation.set(conversationId, trimmed);\n }\n\n private ensureEnabled(): string | null {\n if (this.coderConfig.enabled) return null;\n return \"Coder plugin is disabled. Set CODER_ENABLED=true to enable.\";\n }\n\n private resolveWithin(\n conversationId: string,\n targetPath: string,\n ): { fullPath: string; relPath: string } | { error: string } {\n const cwd = this.getCurrentDirectory(conversationId);\n const validated = validatePath(\n targetPath,\n this.coderConfig.allowedDirectory,\n cwd,\n );\n if (!validated)\n return { error: \"Cannot access path outside allowed directory\" };\n const rel = path.relative(this.coderConfig.allowedDirectory, validated);\n return { fullPath: validated, relPath: rel.length === 0 ? \".\" : rel };\n }\n\n async changeDirectory(\n conversationId: string,\n targetPath: string,\n ): Promise<CommandResult> {\n const disabled = this.ensureEnabled();\n if (disabled) {\n return {\n success: false,\n stdout: \"\",\n stderr: disabled,\n exitCode: 1,\n error: \"Coder disabled\",\n executedIn: this.getCurrentDirectory(conversationId),\n };\n }\n\n const resolved = this.resolveWithin(conversationId, targetPath);\n if (\"error\" in resolved) {\n return {\n success: false,\n stdout: \"\",\n stderr: resolved.error,\n exitCode: 1,\n error: \"Permission denied\",\n executedIn: this.getCurrentDirectory(conversationId),\n };\n }\n\n try {\n const stat = await fs.stat(resolved.fullPath);\n if (!stat.isDirectory()) {\n return {\n success: false,\n stdout: \"\",\n stderr: \"Not a directory\",\n exitCode: 1,\n error: \"Not a directory\",\n executedIn: this.getCurrentDirectory(conversationId),\n };\n }\n this.setCurrentDirectory(conversationId, resolved.fullPath);\n return {\n success: true,\n stdout: `Changed directory to: ${resolved.fullPath}`,\n stderr: \"\",\n exitCode: 0,\n executedIn: resolved.fullPath,\n };\n } catch (err) {\n const e = err as NodeJS.ErrnoException;\n return {\n success: false,\n stdout: \"\",\n stderr: e.message,\n exitCode: 1,\n error: \"Failed to change directory\",\n executedIn: this.getCurrentDirectory(conversationId),\n };\n }\n }\n\n async readFile(\n conversationId: string,\n filepath: string,\n ): Promise<{ ok: true; content: string } | { ok: false; error: string }> {\n const disabled = this.ensureEnabled();\n if (disabled) return { ok: false, error: disabled };\n const resolved = this.resolveWithin(conversationId, filepath);\n if (\"error\" in resolved) return { ok: false, error: resolved.error };\n try {\n const stat = await fs.stat(resolved.fullPath);\n if (stat.isDirectory())\n return { ok: false, error: \"Path is a directory\" };\n const content = await fs.readFile(resolved.fullPath, \"utf-8\");\n return { ok: true, content };\n } catch (err) {\n const e = err as NodeJS.ErrnoException;\n return {\n ok: false,\n error: e.code === \"ENOENT\" ? \"File not found\" : e.message,\n };\n }\n }\n\n async writeFile(\n conversationId: string,\n filepath: string,\n content: string,\n ): Promise<{ ok: true } | { ok: false; error: string }> {\n const disabled = this.ensureEnabled();\n if (disabled) return { ok: false, error: disabled };\n const resolved = this.resolveWithin(conversationId, filepath);\n if (\"error\" in resolved) return { ok: false, error: resolved.error };\n try {\n await fs.mkdir(path.dirname(resolved.fullPath), { recursive: true });\n await fs.writeFile(resolved.fullPath, content, \"utf-8\");\n return { ok: true };\n } catch (err) {\n const e = err as NodeJS.ErrnoException;\n return { ok: false, error: e.message };\n }\n }\n\n async editFile(\n conversationId: string,\n filepath: string,\n oldStr: string,\n newStr: string,\n ): Promise<{ ok: true } | { ok: false; error: string }> {\n const disabled = this.ensureEnabled();\n if (disabled) return { ok: false, error: disabled };\n const resolved = this.resolveWithin(conversationId, filepath);\n if (\"error\" in resolved) return { ok: false, error: resolved.error };\n try {\n const content = await fs.readFile(resolved.fullPath, \"utf-8\");\n if (!content.includes(oldStr))\n return { ok: false, error: \"Could not find old_str in file\" };\n const next = content.replace(oldStr, newStr);\n await fs.writeFile(resolved.fullPath, next, \"utf-8\");\n return { ok: true };\n } catch (err) {\n const e = err as NodeJS.ErrnoException;\n return {\n ok: false,\n error: e.code === \"ENOENT\" ? \"File not found\" : e.message,\n };\n }\n }\n\n async listFiles(\n conversationId: string,\n dirPath: string,\n ): Promise<{ ok: true; items: string[] } | { ok: false; error: string }> {\n const disabled = this.ensureEnabled();\n if (disabled) return { ok: false, error: disabled };\n const resolved = this.resolveWithin(conversationId, dirPath);\n if (\"error\" in resolved) return { ok: false, error: resolved.error };\n try {\n const entries = await fs.readdir(resolved.fullPath, {\n withFileTypes: true,\n });\n const items = entries\n .filter((e) => !e.name.startsWith(\".\"))\n .map((e) => `${e.name}${e.isDirectory() ? \"/\" : \"\"}`)\n .sort((a, b) => a.localeCompare(b));\n return { ok: true, items };\n } catch (err) {\n const e = err as NodeJS.ErrnoException;\n return {\n ok: false,\n error: e.code === \"ENOENT\" ? \"Directory not found\" : e.message,\n };\n }\n }\n\n async searchFiles(\n conversationId: string,\n pattern: string,\n dirPath: string,\n maxMatches: number,\n ): Promise<\n | {\n ok: true;\n matches: Array<{ file: string; line: number; content: string }>;\n }\n | { ok: false; error: string }\n > {\n const disabled = this.ensureEnabled();\n if (disabled) return { ok: false, error: disabled };\n const resolved = this.resolveWithin(conversationId, dirPath);\n if (\"error\" in resolved) return { ok: false, error: resolved.error };\n const needle = pattern.trim();\n if (!needle) return { ok: false, error: \"Missing pattern\" };\n const limit =\n Number.isFinite(maxMatches) && maxMatches > 0\n ? Math.min(500, Math.floor(maxMatches))\n : 50;\n const matches: Array<{ file: string; line: number; content: string }> = [];\n await this.searchInDirectory(\n resolved.fullPath,\n needle.toLowerCase(),\n matches,\n limit,\n );\n return { ok: true, matches };\n }\n\n private async searchInDirectory(\n dir: string,\n needleLower: string,\n matches: Array<{ file: string; line: number; content: string }>,\n maxMatches: number,\n ): Promise<void> {\n if (matches.length >= maxMatches) return;\n const entries = await fs.readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (matches.length >= maxMatches) break;\n if (entry.name.startsWith(\".\")) continue;\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (\n entry.name === \"node_modules\" ||\n entry.name === \"dist\" ||\n entry.name === \"build\" ||\n entry.name === \"coverage\" ||\n entry.name === \".git\"\n ) {\n continue;\n }\n await this.searchInDirectory(full, needleLower, matches, maxMatches);\n continue;\n }\n if (!entry.isFile()) continue;\n const content = await fs.readFile(full, \"utf-8\");\n const lines = content.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n if (matches.length >= maxMatches) break;\n const line = lines[i] ?? \"\";\n if (!line.toLowerCase().includes(needleLower)) continue;\n matches.push({\n file: path.relative(this.coderConfig.allowedDirectory, full),\n line: i + 1,\n content: line.trim().slice(0, 240),\n });\n }\n }\n }\n\n async executeShell(\n command: string,\n conversationId: string,\n ): Promise<CommandResult> {\n const disabled = this.ensureEnabled();\n if (disabled) {\n return {\n success: false,\n stdout: \"\",\n stderr: disabled,\n exitCode: 1,\n error: \"Coder disabled\",\n executedIn: this.getCurrentDirectory(conversationId),\n };\n }\n\n const trimmed = command.trim();\n if (!trimmed) {\n return {\n success: false,\n stdout: \"\",\n stderr: \"Invalid command\",\n exitCode: 1,\n error: \"Empty command\",\n executedIn: this.getCurrentDirectory(conversationId),\n };\n }\n\n const cwd = this.getCurrentDirectory(conversationId);\n\n // Use ShellService for execution if available\n const shellService =\n typeof this.runtime?.getService === \"function\"\n ? this.runtime.getService<ShellService>(\"shell\")\n : null;\n if (shellService) {\n const execResult = await shellService.exec(trimmed, {\n workdir: cwd,\n timeout: Math.floor(this.coderConfig.timeoutMs / 1000),\n conversationId,\n });\n\n if (execResult.status === \"running\") {\n // Command is still running (backgrounded)\n const result: CommandResult = {\n success: true,\n stdout: `Command running in background (session: ${execResult.sessionId})`,\n stderr: \"\",\n exitCode: 0,\n executedIn: cwd,\n };\n this.addToHistory(conversationId, trimmed, result);\n return result;\n }\n\n const success =\n execResult.status === \"completed\" && execResult.exitCode === 0;\n const result: CommandResult = {\n success,\n stdout: execResult.aggregated ?? \"\",\n stderr: execResult.reason ?? \"\",\n exitCode: execResult.exitCode ?? (success ? 0 : 1),\n error: success ? undefined : \"Command failed\",\n executedIn: cwd,\n };\n this.addToHistory(conversationId, trimmed, result);\n return result;\n }\n\n // Fallback: Use execSync when ShellService is not available\n // This maintains backward compatibility for standalone use\n if (!isSafeCommand(trimmed)) {\n return {\n success: false,\n stdout: \"\",\n stderr: \"Command contains forbidden patterns\",\n exitCode: 1,\n error: \"Security policy violation\",\n executedIn: cwd,\n };\n }\n\n if (isForbiddenCommand(trimmed, this.coderConfig.forbiddenCommands)) {\n return {\n success: false,\n stdout: \"\",\n stderr: \"Command is forbidden by security policy\",\n exitCode: 1,\n error: \"Forbidden command\",\n executedIn: cwd,\n };\n }\n\n try {\n const stdout = execSync(trimmed, {\n cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n encoding: \"utf-8\",\n timeout: this.coderConfig.timeoutMs,\n maxBuffer: 10 * 1024 * 1024,\n }).toString();\n const result: CommandResult = {\n success: true,\n stdout,\n stderr: \"\",\n exitCode: 0,\n executedIn: cwd,\n };\n this.addToHistory(conversationId, trimmed, result);\n return result;\n } catch (err) {\n const e = err as Error & {\n stdout?: string;\n stderr?: string;\n status?: number;\n };\n const stderr = (e.stderr ?? e.message).toString();\n const stdout = (e.stdout ?? \"\").toString();\n const exitCode = typeof e.status === \"number\" ? e.status : 1;\n const result: CommandResult = {\n success: false,\n stdout,\n stderr,\n exitCode,\n error: \"Command failed\",\n executedIn: cwd,\n };\n this.addToHistory(conversationId, trimmed, result);\n return result;\n }\n }\n\n async git(args: string, conversationId: string): Promise<CommandResult> {\n // Route through executeShell but prefix with `git`.\n return this.executeShell(`git ${args}`, conversationId);\n }\n}\n",
17
- "import * as path from \"node:path\";\nimport type { CoderConfig } from \"../types\";\n\nfunction parseBool(value: string | undefined): boolean {\n const v = (value ?? \"\").trim().toLowerCase();\n return v === \"1\" || v === \"true\" || v === \"yes\" || v === \"on\";\n}\n\nfunction parseIntMs(value: string | undefined, fallback: number): number {\n const parsed = Number.parseInt((value ?? \"\").trim(), 10);\n if (!Number.isFinite(parsed) || parsed <= 0) return fallback;\n return parsed;\n}\n\nexport function loadCoderConfig(): CoderConfig {\n const enabled = parseBool(process.env.CODER_ENABLED);\n const allowedDirectoryRaw = (\n process.env.CODER_ALLOWED_DIRECTORY ?? \"\"\n ).trim();\n const allowedDirectory = allowedDirectoryRaw\n ? path.resolve(allowedDirectoryRaw)\n : process.cwd();\n\n const timeoutMs = parseIntMs(process.env.CODER_TIMEOUT, 30_000);\n\n const forbiddenCommands = (process.env.CODER_FORBIDDEN_COMMANDS ?? \"\")\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n\n return { enabled, allowedDirectory, timeoutMs, forbiddenCommands };\n}\n",
18
- "import * as path from \"node:path\";\n\nexport const DEFAULT_FORBIDDEN_COMMANDS: string[] = [\n \"rm -rf /\",\n \"rm -rf ~\",\n \"sudo rm\",\n \"mkfs\",\n \"dd if=/dev\",\n];\n\nexport function extractBaseCommand(command: string): string {\n const trimmed = command.trim();\n if (!trimmed) return \"\";\n const first = trimmed.split(/\\s+/)[0];\n return first ?? \"\";\n}\n\n/**\n * Very conservative “safe command” filter. Blocks shell control operators and\n * common escape patterns. (This is aligned with other plugins’ patterns.)\n */\nexport function isSafeCommand(command: string): boolean {\n const c = command.trim();\n if (!c) return false;\n if (c.includes(\"&&\") || c.includes(\"||\") || c.includes(\";\")) return false;\n if (c.includes(\"$(\") || c.includes(\"`\")) return false;\n return true;\n}\n\nexport function isForbiddenCommand(\n command: string,\n additionalForbidden: string[],\n): boolean {\n const c = command.toLowerCase();\n for (const f of DEFAULT_FORBIDDEN_COMMANDS) {\n if (c.includes(f.toLowerCase())) return true;\n }\n for (const f of additionalForbidden) {\n if (f.trim().length === 0) continue;\n if (c.includes(f.toLowerCase())) return true;\n }\n return false;\n}\n\n/**\n * Resolve a target path against the current directory while enforcing that\n * the result stays inside allowedDirectory.\n */\nexport function validatePath(\n targetPath: string,\n allowedDirectory: string,\n currentDirectory: string,\n): string | null {\n const base =\n currentDirectory && currentDirectory.length > 0\n ? currentDirectory\n : allowedDirectory;\n const resolved = path.resolve(base, targetPath);\n const allowed = path.resolve(allowedDirectory);\n\n const rel = path.relative(allowed, resolved);\n if (rel === \"\") return resolved;\n if (rel.startsWith(\"..\") || path.isAbsolute(rel)) return null;\n return resolved;\n}\n",
19
- "/**\n * Configure coding tools - creates CodingAction instances for coding operations.\n *\n * This provides Claude Code-style actions:\n * - exec: Execute shell commands (via ShellService)\n * - process: Manage background processes (via ShellService)\n * - read_file: Read file contents\n * - write_file: Write file contents\n * - edit_file: Edit file contents (find & replace)\n * - list_files: List directory contents\n * - search_files: Search for patterns in files\n * - git: Execute git commands\n */\n\nimport type { IAgentRuntime } from \"@elizaos/core\";\nimport type { CoderService } from \"./services/coderService\";\nimport type {\n CodingAction,\n CodingActionContext,\n CodingActionResult,\n CodingToolsOptions,\n ProcessSession,\n ShellService,\n} from \"./types\";\n\n/**\n * Create configured coding actions using the provided services.\n *\n * @param runtime - The Eliza agent runtime\n * @param options - Configuration options for the tools\n * @returns Array of CodingAction instances\n */\nexport function configureCodingTools(\n runtime: IAgentRuntime,\n options?: CodingToolsOptions,\n): CodingAction[] {\n const shellService = runtime.getService<ShellService>(\"shell\");\n const coderService = runtime.getService<CoderService>(\"coder\");\n\n const defaultCwd = options?.cwd ?? process.cwd();\n const scopeKey = options?.scopeKey;\n const sessionKey = options?.sessionKey;\n const notifyOnExit = options?.notifyOnExit ?? false;\n const defaultBackgroundMs = options?.backgroundMs ?? 10000;\n const defaultTimeoutSec = options?.timeoutSec ?? 1800;\n const conversationId = options?.conversationId ?? \"default\";\n\n const actions: CodingAction[] = [];\n\n // ============================================================================\n // exec - Execute shell commands\n // ============================================================================\n if (shellService) {\n const execAction: CodingAction = {\n name: \"exec\",\n label: \"exec\",\n description:\n \"Execute a shell command. Returns output when complete or session info if backgrounded.\",\n parameters: {\n type: \"object\",\n properties: {\n command: { type: \"string\", description: \"Shell command to execute\" },\n workdir: {\n type: \"string\",\n description: \"Working directory (optional)\",\n },\n env: {\n type: \"object\",\n additionalProperties: { type: \"string\" },\n description: \"Environment variables (optional)\",\n },\n yieldMs: {\n type: \"number\",\n description:\n \"Milliseconds to wait before backgrounding (default 10000)\",\n },\n background: {\n type: \"boolean\",\n description: \"Run in background immediately\",\n },\n timeout: { type: \"number\", description: \"Timeout in seconds\" },\n pty: {\n type: \"boolean\",\n description: \"Use PTY for interactive commands\",\n },\n },\n required: [\"command\"],\n },\n execute: async (\n context: CodingActionContext,\n ): Promise<CodingActionResult> => {\n const params = context.args as {\n command: string;\n workdir?: string;\n env?: Record<string, string>;\n yieldMs?: number;\n background?: boolean;\n timeout?: number;\n pty?: boolean;\n };\n\n if (!params.command) {\n throw new Error(\"Provide a command to execute.\");\n }\n\n const result = await shellService.exec(params.command, {\n workdir: params.workdir?.trim() || defaultCwd,\n env: params.env,\n yieldMs: params.yieldMs ?? defaultBackgroundMs,\n background: params.background,\n timeout: params.timeout ?? defaultTimeoutSec,\n pty: params.pty,\n scopeKey,\n sessionKey,\n notifyOnExit,\n conversationId: context.conversationId ?? conversationId,\n onUpdate: context.onUpdate\n ? (session: ProcessSession) => {\n context.onUpdate?.({\n content: [\n {\n type: \"text\",\n text: session.tail || session.aggregated || \"\",\n },\n ],\n details: {\n status: \"running\",\n sessionId: session.id,\n pid: session.pid ?? undefined,\n startedAt: session.startedAt,\n cwd: session.cwd,\n tail: session.tail,\n },\n });\n }\n : undefined,\n });\n\n if (result.status === \"running\") {\n return {\n content: [\n {\n type: \"text\",\n text: `Command still running (session ${result.sessionId}, pid ${\n result.pid ?? \"n/a\"\n }). Use process action (list/poll/log/write/kill) for follow-up.`,\n },\n ],\n details: {\n status: \"running\",\n sessionId: result.sessionId,\n pid: result.pid ?? undefined,\n startedAt: result.startedAt,\n cwd: result.cwd,\n tail: result.tail,\n },\n };\n }\n\n if (result.status === \"failed\") {\n return {\n content: [\n {\n type: \"text\",\n text: result.aggregated || result.reason || \"Command failed.\",\n },\n ],\n details: {\n status: \"failed\",\n exitCode: result.exitCode ?? 1,\n durationMs: result.durationMs,\n reason: result.reason,\n },\n };\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: result.aggregated || \"(no output)\",\n },\n ],\n details: {\n status: \"completed\",\n exitCode: result.exitCode ?? 0,\n durationMs: result.durationMs,\n aggregated: result.aggregated,\n cwd: result.cwd,\n },\n };\n },\n };\n actions.push(execAction);\n\n // ============================================================================\n // process - Manage background processes\n // ============================================================================\n const processAction: CodingAction = {\n name: \"process\",\n label: \"process\",\n description:\n \"Manage running exec sessions: list, poll, log, write, send-keys, submit, paste, kill.\",\n parameters: {\n type: \"object\",\n properties: {\n action: {\n type: \"string\",\n description:\n \"Process action (list, poll, log, write, send-keys, submit, paste, kill, clear, remove)\",\n },\n sessionId: {\n type: \"string\",\n description: \"Session id for actions other than list\",\n },\n data: {\n type: \"string\",\n description: \"Data to write for write action\",\n },\n keys: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Key tokens to send for send-keys\",\n },\n hex: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Hex bytes to send for send-keys\",\n },\n literal: {\n type: \"string\",\n description: \"Literal string for send-keys\",\n },\n text: {\n type: \"string\",\n description: \"Text to paste for paste action\",\n },\n bracketed: {\n type: \"boolean\",\n description: \"Wrap paste in bracketed mode\",\n },\n eof: { type: \"boolean\", description: \"Close stdin after write\" },\n offset: { type: \"number\", description: \"Log offset\" },\n limit: { type: \"number\", description: \"Log length\" },\n },\n required: [\"action\"],\n },\n execute: async (\n context: CodingActionContext,\n ): Promise<CodingActionResult> => {\n const params = context.args as {\n action: string;\n sessionId?: string;\n data?: string;\n keys?: string[];\n hex?: string[];\n literal?: string;\n text?: string;\n bracketed?: boolean;\n eof?: boolean;\n offset?: number;\n limit?: number;\n };\n\n const result = await shellService.processAction({\n action: params.action as\n | \"list\"\n | \"poll\"\n | \"log\"\n | \"write\"\n | \"send-keys\"\n | \"submit\"\n | \"paste\"\n | \"kill\"\n | \"clear\"\n | \"remove\",\n sessionId: params.sessionId,\n data: params.data,\n keys: params.keys,\n hex: params.hex,\n literal: params.literal,\n text: params.text,\n bracketed: params.bracketed,\n eof: params.eof,\n offset: params.offset,\n limit: params.limit,\n });\n\n return {\n content: [\n {\n type: \"text\",\n text: result.message as string | undefined,\n },\n ],\n details: result.data as Record<string, unknown> | undefined,\n };\n },\n };\n actions.push(processAction);\n }\n\n // ============================================================================\n // File operations (via CoderService)\n // ============================================================================\n if (coderService) {\n // read_file\n const readFileAction: CodingAction = {\n name: \"read_file\",\n label: \"read_file\",\n description: \"Read the contents of a file.\",\n parameters: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Path to the file to read\" },\n },\n required: [\"path\"],\n },\n execute: async (\n context: CodingActionContext,\n ): Promise<CodingActionResult> => {\n const params = context.args as { path: string };\n const convId = context.conversationId ?? conversationId;\n const result = await coderService.readFile(convId, params.path);\n\n if (!result.ok) {\n return {\n content: [{ type: \"text\", text: `Error: ${result.error}` }],\n details: { success: false, error: result.error },\n };\n }\n\n return {\n content: [{ type: \"text\", text: result.content }],\n details: { success: true },\n };\n },\n };\n actions.push(readFileAction);\n\n // write_file\n const writeFileAction: CodingAction = {\n name: \"write_file\",\n label: \"write_file\",\n description:\n \"Write content to a file. Creates the file if it doesn't exist.\",\n parameters: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Path to the file to write\" },\n content: {\n type: \"string\",\n description: \"Content to write to the file\",\n },\n },\n required: [\"path\", \"content\"],\n },\n execute: async (\n context: CodingActionContext,\n ): Promise<CodingActionResult> => {\n const params = context.args as { path: string; content: string };\n const convId = context.conversationId ?? conversationId;\n const result = await coderService.writeFile(\n convId,\n params.path,\n params.content,\n );\n\n if (!result.ok) {\n return {\n content: [{ type: \"text\", text: `Error: ${result.error}` }],\n details: { success: false, error: result.error },\n };\n }\n\n return {\n content: [{ type: \"text\", text: `File written: ${params.path}` }],\n details: { success: true },\n };\n },\n };\n actions.push(writeFileAction);\n\n // edit_file\n const editFileAction: CodingAction = {\n name: \"edit_file\",\n label: \"edit_file\",\n description:\n \"Edit a file by replacing text. Finds old_str and replaces with new_str.\",\n parameters: {\n type: \"object\",\n properties: {\n path: { type: \"string\", description: \"Path to the file to edit\" },\n old_str: { type: \"string\", description: \"Text to find and replace\" },\n new_str: { type: \"string\", description: \"Text to replace with\" },\n },\n required: [\"path\", \"old_str\", \"new_str\"],\n },\n execute: async (\n context: CodingActionContext,\n ): Promise<CodingActionResult> => {\n const params = context.args as {\n path: string;\n old_str: string;\n new_str: string;\n };\n const convId = context.conversationId ?? conversationId;\n const result = await coderService.editFile(\n convId,\n params.path,\n params.old_str,\n params.new_str,\n );\n\n if (!result.ok) {\n return {\n content: [{ type: \"text\", text: `Error: ${result.error}` }],\n details: { success: false, error: result.error },\n };\n }\n\n return {\n content: [{ type: \"text\", text: `File edited: ${params.path}` }],\n details: { success: true },\n };\n },\n };\n actions.push(editFileAction);\n\n // list_files\n const listFilesAction: CodingAction = {\n name: \"list_files\",\n label: \"list_files\",\n description: \"List files and directories in a path.\",\n parameters: {\n type: \"object\",\n properties: {\n path: {\n type: \"string\",\n description:\n \"Directory path to list (defaults to current directory)\",\n },\n },\n required: [],\n },\n execute: async (\n context: CodingActionContext,\n ): Promise<CodingActionResult> => {\n const params = context.args as { path?: string };\n const convId = context.conversationId ?? conversationId;\n const result = await coderService.listFiles(convId, params.path ?? \".\");\n\n if (!result.ok) {\n return {\n content: [{ type: \"text\", text: `Error: ${result.error}` }],\n details: { success: false, error: result.error },\n };\n }\n\n return {\n content: [{ type: \"text\", text: result.items.join(\"\\n\") }],\n details: { success: true, items: result.items },\n };\n },\n };\n actions.push(listFilesAction);\n\n // search_files\n const searchFilesAction: CodingAction = {\n name: \"search_files\",\n label: \"search_files\",\n description: \"Search for a pattern in files within a directory.\",\n parameters: {\n type: \"object\",\n properties: {\n pattern: { type: \"string\", description: \"Pattern to search for\" },\n path: {\n type: \"string\",\n description:\n \"Directory path to search in (defaults to current directory)\",\n },\n max_matches: {\n type: \"number\",\n description: \"Maximum matches to return (default 50)\",\n },\n },\n required: [\"pattern\"],\n },\n execute: async (\n context: CodingActionContext,\n ): Promise<CodingActionResult> => {\n const params = context.args as {\n pattern: string;\n path?: string;\n max_matches?: number;\n };\n const convId = context.conversationId ?? conversationId;\n const result = await coderService.searchFiles(\n convId,\n params.pattern,\n params.path ?? \".\",\n params.max_matches ?? 50,\n );\n\n if (!result.ok) {\n return {\n content: [{ type: \"text\", text: `Error: ${result.error}` }],\n details: { success: false, error: result.error },\n };\n }\n\n const formatted = result.matches\n .map((m) => `${m.file}:${m.line}: ${m.content}`)\n .join(\"\\n\");\n\n return {\n content: [{ type: \"text\", text: formatted || \"No matches found\" }],\n details: { success: true, matches: result.matches },\n };\n },\n };\n actions.push(searchFilesAction);\n\n // git\n const gitAction: CodingAction = {\n name: \"git\",\n label: \"git\",\n description: \"Execute a git command.\",\n parameters: {\n type: \"object\",\n properties: {\n args: {\n type: \"string\",\n description:\n \"Git command arguments (e.g., 'status', 'diff', 'log --oneline -5')\",\n },\n },\n required: [\"args\"],\n },\n execute: async (\n context: CodingActionContext,\n ): Promise<CodingActionResult> => {\n const params = context.args as { args: string };\n const convId = context.conversationId ?? conversationId;\n const result = await coderService.git(params.args, convId);\n\n return {\n content: [\n {\n type: \"text\",\n text: result.success ? result.stdout : result.stderr,\n },\n ],\n details: {\n success: result.success,\n exitCode: result.exitCode,\n stdout: result.stdout,\n stderr: result.stderr,\n },\n };\n },\n };\n actions.push(gitAction);\n }\n\n return actions;\n}\n\nexport default configureCodingTools;\n",
20
- "import type { Plugin } from \"@elizaos/core\";\nimport {\n changeDirectory,\n editFile,\n executeShell,\n git,\n listFiles,\n readFile,\n searchFiles,\n writeFile,\n} from \"./actions\";\nimport { coderStatusProvider } from \"./providers\";\nimport { CoderService } from \"./services/coderService\";\n\nexport const coderPlugin: Plugin = {\n name: \"eliza-coder\",\n description: \"Coder tools: filesystem, shell, and git (restricted)\",\n services: [CoderService],\n actions: [\n readFile,\n listFiles,\n searchFiles,\n writeFile,\n editFile,\n changeDirectory,\n executeShell,\n git,\n ],\n providers: [coderStatusProvider],\n};\n\nexport default coderPlugin;\n\n// Actions (Eliza Action interface)\nexport * from \"./actions\";\n// CodingAction system - Claude Code-style function-calling actions\nexport { configureCodingTools } from \"./configureCodingTools\";\n// Providers\nexport { coderStatusProvider } from \"./providers/coderStatusProvider\";\n// Services\nexport { CoderService } from \"./services/coderService\";\n// Other types and utilities\nexport type {\n CoderConfig,\n CodingAction,\n CodingActionAvailabilityContext,\n CodingActionContentItem,\n CodingActionContext,\n CodingActionResult,\n CodingActionUpdateCallback,\n CodingToolsOptions,\n CommandHistoryEntry,\n CommandResult,\n FileOperation,\n FileOperationType,\n} from \"./types\";\nexport * from \"./utils\";\n"
5
+ "/**\n * Auto-generated canonical action/provider/evaluator docs for plugin-code.\n * DO NOT EDIT - Generated from prompts/specs/**.\n */\n\nexport type ActionDoc = {\n\tname: string;\n\tdescription: string;\n\tsimiles?: readonly string[];\n\tparameters?: readonly unknown[];\n\texamples?: readonly (readonly unknown[])[];\n};\n\nexport type ProviderDoc = {\n\tname: string;\n\tdescription: string;\n\tposition?: number;\n\tdynamic?: boolean;\n};\n\nexport type EvaluatorDoc = {\n\tname: string;\n\tdescription: string;\n\tsimiles?: readonly string[];\n\talwaysRun?: boolean;\n\texamples?: readonly unknown[];\n};\n\nexport const coreActionsSpec = {\n\tversion: \"1.0.0\",\n\tactions: [\n\t\t{\n\t\t\tname: \"CHANGE_DIRECTORY\",\n\t\t\tdescription:\n\t\t\t\t\"Change the working directory (restricted to allowed directory).\",\n\t\t\tsimiles: [\"CD\", \"CWD\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"EDIT_FILE\",\n\t\t\tdescription: \"Replace a substring in a file (single replacement).\",\n\t\t\tsimiles: [\"REPLACE_IN_FILE\", \"PATCH_FILE\", \"MODIFY_FILE\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"EXECUTE_SHELL\",\n\t\t\tdescription:\n\t\t\t\t\"Execute a shell command in the current working directory (restricted).\",\n\t\t\tsimiles: [\"SHELL\", \"RUN_COMMAND\", \"EXEC\", \"TERMINAL\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"GIT\",\n\t\t\tdescription: \"Run a git command (restricted).\",\n\t\t\tsimiles: [\"GIT_COMMAND\", \"GIT_RUN\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"LIST_FILES\",\n\t\t\tdescription: \"List files in a directory.\",\n\t\t\tsimiles: [\"LS\", \"LIST_DIR\", \"LIST_DIRECTORY\", \"DIR\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"READ_FILE\",\n\t\t\tdescription: \"Read and return a file\",\n\t\t\tsimiles: [\"VIEW_FILE\", \"OPEN_FILE\", \"CAT_FILE\", \"SHOW_FILE\", \"GET_FILE\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"SEARCH_FILES\",\n\t\t\tdescription: \"Search for text across files under a directory.\",\n\t\t\tsimiles: [\"GREP\", \"RG\", \"FIND_IN_FILES\", \"SEARCH\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"WRITE_FILE\",\n\t\t\tdescription: \"Create or overwrite a file with given content.\",\n\t\t\tsimiles: [\"CREATE_FILE\", \"SAVE_FILE\", \"OUTPUT_FILE\"],\n\t\t\tparameters: [],\n\t\t},\n\t],\n} as const;\nexport const allActionsSpec = {\n\tversion: \"1.0.0\",\n\tactions: [\n\t\t{\n\t\t\tname: \"CHANGE_DIRECTORY\",\n\t\t\tdescription:\n\t\t\t\t\"Change the working directory (restricted to allowed directory).\",\n\t\t\tsimiles: [\"CD\", \"CWD\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"EDIT_FILE\",\n\t\t\tdescription: \"Replace a substring in a file (single replacement).\",\n\t\t\tsimiles: [\"REPLACE_IN_FILE\", \"PATCH_FILE\", \"MODIFY_FILE\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"EXECUTE_SHELL\",\n\t\t\tdescription:\n\t\t\t\t\"Execute a shell command in the current working directory (restricted).\",\n\t\t\tsimiles: [\"SHELL\", \"RUN_COMMAND\", \"EXEC\", \"TERMINAL\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"GIT\",\n\t\t\tdescription: \"Run a git command (restricted).\",\n\t\t\tsimiles: [\"GIT_COMMAND\", \"GIT_RUN\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"LIST_FILES\",\n\t\t\tdescription: \"List files in a directory.\",\n\t\t\tsimiles: [\"LS\", \"LIST_DIR\", \"LIST_DIRECTORY\", \"DIR\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"READ_FILE\",\n\t\t\tdescription: \"Read and return a file\",\n\t\t\tsimiles: [\"VIEW_FILE\", \"OPEN_FILE\", \"CAT_FILE\", \"SHOW_FILE\", \"GET_FILE\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"SEARCH_FILES\",\n\t\t\tdescription: \"Search for text across files under a directory.\",\n\t\t\tsimiles: [\"GREP\", \"RG\", \"FIND_IN_FILES\", \"SEARCH\"],\n\t\t\tparameters: [],\n\t\t},\n\t\t{\n\t\t\tname: \"WRITE_FILE\",\n\t\t\tdescription: \"Create or overwrite a file with given content.\",\n\t\t\tsimiles: [\"CREATE_FILE\", \"SAVE_FILE\", \"OUTPUT_FILE\"],\n\t\t\tparameters: [],\n\t\t},\n\t],\n} as const;\nexport const coreProvidersSpec = {\n\tversion: \"1.0.0\",\n\tproviders: [\n\t\t{\n\t\t\tname: \"CODER_STATUS\",\n\t\t\tdescription:\n\t\t\t\t\"Provides current working directory, allowed directory, and recent shell/file operations\",\n\t\t\tdynamic: true,\n\t\t},\n\t],\n} as const;\nexport const allProvidersSpec = {\n\tversion: \"1.0.0\",\n\tproviders: [\n\t\t{\n\t\t\tname: \"CODER_STATUS\",\n\t\t\tdescription:\n\t\t\t\t\"Provides current working directory, allowed directory, and recent shell/file operations\",\n\t\t\tdynamic: true,\n\t\t},\n\t],\n} as const;\nexport const coreEvaluatorsSpec = {\n\tversion: \"1.0.0\",\n\tevaluators: [],\n} as const;\nexport const allEvaluatorsSpec = {\n\tversion: \"1.0.0\",\n\tevaluators: [],\n} as const;\n\nexport const coreActionDocs: readonly ActionDoc[] = coreActionsSpec.actions;\nexport const allActionDocs: readonly ActionDoc[] = allActionsSpec.actions;\nexport const coreProviderDocs: readonly ProviderDoc[] =\n\tcoreProvidersSpec.providers;\nexport const allProviderDocs: readonly ProviderDoc[] =\n\tallProvidersSpec.providers;\nexport const coreEvaluatorDocs: readonly EvaluatorDoc[] =\n\tcoreEvaluatorsSpec.evaluators;\nexport const allEvaluatorDocs: readonly EvaluatorDoc[] =\n\tallEvaluatorsSpec.evaluators;\n",
6
+ "/**\n * Helper functions to lookup action/provider/evaluator specs by name.\n * These allow language-specific implementations to import their text content\n * (description, similes, examples) from the centralized specs.\n *\n * DO NOT EDIT the spec data - update prompts/actions.json, prompts/providers.json, prompts/evaluators.json and regenerate.\n */\n\nimport {\n\ttype ActionDoc,\n\tallActionDocs,\n\tallEvaluatorDocs,\n\tallProviderDocs,\n\tcoreActionDocs,\n\tcoreEvaluatorDocs,\n\tcoreProviderDocs,\n\ttype EvaluatorDoc,\n\ttype ProviderDoc,\n} from \"./specs\";\n\n// Build lookup maps for O(1) access\nconst coreActionMap = new Map<string, ActionDoc>(\n\tcoreActionDocs.map((doc) => [doc.name, doc]),\n);\nconst allActionMap = new Map<string, ActionDoc>(\n\tallActionDocs.map((doc) => [doc.name, doc]),\n);\nconst coreProviderMap = new Map<string, ProviderDoc>(\n\tcoreProviderDocs.map((doc) => [doc.name, doc]),\n);\nconst allProviderMap = new Map<string, ProviderDoc>(\n\tallProviderDocs.map((doc) => [doc.name, doc]),\n);\nconst coreEvaluatorMap = new Map<string, EvaluatorDoc>(\n\tcoreEvaluatorDocs.map((doc) => [doc.name, doc]),\n);\nconst allEvaluatorMap = new Map<string, EvaluatorDoc>(\n\tallEvaluatorDocs.map((doc) => [doc.name, doc]),\n);\n\n/**\n * Get an action spec by name from the core specs.\n * @param name - The action name\n * @returns The action spec or undefined if not found\n */\nexport function getActionSpec(name: string): ActionDoc | undefined {\n\treturn coreActionMap.get(name) ?? allActionMap.get(name);\n}\n\n/**\n * Get an action spec by name, throwing if not found.\n * @param name - The action name\n * @returns The action spec\n * @throws Error if the action is not found\n */\nexport function requireActionSpec(name: string): ActionDoc {\n\tconst spec = getActionSpec(name);\n\tif (!spec) {\n\t\tthrow new Error(`Action spec not found: ${name}`);\n\t}\n\treturn spec;\n}\n\n/**\n * Get a provider spec by name from the core specs.\n * @param name - The provider name\n * @returns The provider spec or undefined if not found\n */\nexport function getProviderSpec(name: string): ProviderDoc | undefined {\n\treturn coreProviderMap.get(name) ?? allProviderMap.get(name);\n}\n\n/**\n * Get a provider spec by name, throwing if not found.\n * @param name - The provider name\n * @returns The provider spec\n * @throws Error if the provider is not found\n */\nexport function requireProviderSpec(name: string): ProviderDoc {\n\tconst spec = getProviderSpec(name);\n\tif (!spec) {\n\t\tthrow new Error(`Provider spec not found: ${name}`);\n\t}\n\treturn spec;\n}\n\n/**\n * Get an evaluator spec by name from the core specs.\n * @param name - The evaluator name\n * @returns The evaluator spec or undefined if not found\n */\nexport function getEvaluatorSpec(name: string): EvaluatorDoc | undefined {\n\treturn coreEvaluatorMap.get(name) ?? allEvaluatorMap.get(name);\n}\n\n/**\n * Get an evaluator spec by name, throwing if not found.\n * @param name - The evaluator name\n * @returns The evaluator spec\n * @throws Error if the evaluator is not found\n */\nexport function requireEvaluatorSpec(name: string): EvaluatorDoc {\n\tconst spec = getEvaluatorSpec(name);\n\tif (!spec) {\n\t\tthrow new Error(`Evaluator spec not found: ${name}`);\n\t}\n\treturn spec;\n}\n\n// Re-export types for convenience\nexport type { ActionDoc, ProviderDoc, EvaluatorDoc };\n",
7
+ "import type {\n\tAction,\n\tActionResult,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getTarget(options: HandlerOptions | undefined): string {\n\tconst opt = options as { path?: string } | undefined;\n\treturn opt?.path?.trim() ?? \"\";\n}\n\nconst spec = requireActionSpec(\"CHANGE_DIRECTORY\");\n\nexport const changeDirectory: Action = {\n\tname: spec.name,\n\tsimiles: spec.similes ? [...spec.similes] : [],\n\tdescription: spec.description,\n\tvalidate: async (runtime: IAgentRuntime): Promise<boolean> =>\n\t\truntime.getService<CoderService>(\"coder\") !== null,\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state: State | undefined,\n\t\toptions: HandlerOptions | undefined,\n\t\tcallback?: HandlerCallback,\n\t): Promise<ActionResult> => {\n\t\tconst svc = runtime.getService<CoderService>(\"coder\");\n\t\tif (!svc) {\n\t\t\tconst msg = \"Coder service is not available.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst target = getTarget(options);\n\t\tif (!target) {\n\t\t\tconst msg = \"Missing path.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst conv = message.roomId ?? message.agentId ?? runtime.agentId;\n\t\tconst result = await svc.changeDirectory(conv, target);\n\t\tconst out = result.success ? result.stdout : result.stderr;\n\t\tif (callback) await callback({ content: { text: out } });\n\t\treturn { success: result.success, text: out };\n\t},\n};\n",
8
+ "import type {\n\tAction,\n\tActionResult,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getInputs(\n\toptions: HandlerOptions | undefined,\n\tmessage: Memory,\n): { filepath: string; oldStr: string; newStr: string } {\n\tconst opt = options as\n\t\t| { filepath?: string; old_str?: string; new_str?: string }\n\t\t| undefined;\n\tconst filepath = opt?.filepath?.trim() ?? \"\";\n\tconst oldStr = opt?.old_str ?? \"\";\n\tconst newStr = opt?.new_str ?? \"\";\n\tif (filepath) return { filepath, oldStr, newStr };\n\n\tconst text = message.content.text ?? \"\";\n\tconst m = text.match(/[\"'`]([^\"'`]+)[\"'`]/);\n\tconst inferred = m?.[1]?.trim() ?? \"\";\n\treturn { filepath: inferred, oldStr, newStr };\n}\n\nconst spec = requireActionSpec(\"EDIT_FILE\");\n\nexport const editFile: Action = {\n\tname: spec.name,\n\tsimiles: spec.similes ? [...spec.similes] : [],\n\tdescription: spec.description,\n\tvalidate: async (runtime: IAgentRuntime): Promise<boolean> =>\n\t\truntime.getService<CoderService>(\"coder\") !== null,\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state: State | undefined,\n\t\toptions: HandlerOptions | undefined,\n\t\tcallback?: HandlerCallback,\n\t): Promise<ActionResult> => {\n\t\tconst svc = runtime.getService<CoderService>(\"coder\");\n\t\tif (!svc) {\n\t\t\tconst msg = \"Coder service is not available.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst { filepath, oldStr, newStr } = getInputs(options, message);\n\t\tif (!filepath || oldStr.length === 0) {\n\t\t\tconst msg = \"Missing filepath or old_str.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst conv = message.roomId ?? message.agentId ?? runtime.agentId;\n\t\tconst result = await svc.editFile(conv, filepath, oldStr, newStr);\n\t\tif (!result.ok) {\n\t\t\tif (callback) await callback({ content: { text: result.error } });\n\t\t\treturn { success: false, text: result.error };\n\t\t}\n\n\t\tconst msg = `Edited ${filepath}`;\n\t\tif (callback) await callback({ content: { text: msg } });\n\t\treturn { success: true, text: msg };\n\t},\n};\n",
9
+ "import type {\n\tAction,\n\tActionResult,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getCommand(options: HandlerOptions | undefined): string {\n\tconst opt = options as { command?: string } | undefined;\n\treturn opt?.command?.trim() ?? \"\";\n}\n\nconst spec = requireActionSpec(\"EXECUTE_SHELL\");\n\nexport const executeShell: Action = {\n\tname: spec.name,\n\tsimiles: spec.similes ? [...spec.similes] : [],\n\tdescription: spec.description,\n\tvalidate: async (runtime: IAgentRuntime): Promise<boolean> =>\n\t\truntime.getService<CoderService>(\"coder\") !== null,\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state: State | undefined,\n\t\toptions: HandlerOptions | undefined,\n\t\tcallback?: HandlerCallback,\n\t): Promise<ActionResult> => {\n\t\tconst svc = runtime.getService<CoderService>(\"coder\");\n\t\tif (!svc) {\n\t\t\tconst msg = \"Coder service is not available.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst cmd = getCommand(options);\n\t\tif (!cmd) {\n\t\t\tconst msg = \"Missing command.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst conv = message.roomId ?? message.agentId ?? runtime.agentId;\n\t\tconst result = await svc.executeShell(cmd, conv);\n\t\tconst out = result.success ? result.stdout : result.stderr;\n\t\tif (callback) await callback({ content: { text: out } });\n\t\treturn { success: result.success, text: out };\n\t},\n};\n",
10
+ "import type {\n\tAction,\n\tActionResult,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getArgs(options: HandlerOptions | undefined): string {\n\tconst opt = options as { args?: string } | undefined;\n\treturn opt?.args?.trim() ?? \"\";\n}\n\nconst spec = requireActionSpec(\"GIT\");\n\nexport const git: Action = {\n\tname: spec.name,\n\tsimiles: spec.similes ? [...spec.similes] : [],\n\tdescription: spec.description,\n\tvalidate: async (runtime: IAgentRuntime): Promise<boolean> =>\n\t\truntime.getService<CoderService>(\"coder\") !== null,\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state: State | undefined,\n\t\toptions: HandlerOptions | undefined,\n\t\tcallback?: HandlerCallback,\n\t): Promise<ActionResult> => {\n\t\tconst svc = runtime.getService<CoderService>(\"coder\");\n\t\tif (!svc) {\n\t\t\tconst msg = \"Coder service is not available.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst args = getArgs(options);\n\t\tif (!args) {\n\t\t\tconst msg = 'Missing args (provide options.args, e.g. \"status\").';\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst conv = message.roomId ?? message.agentId ?? runtime.agentId;\n\t\tconst result = await svc.git(args, conv);\n\t\tconst out = result.success ? result.stdout : result.stderr;\n\t\tif (callback) await callback({ content: { text: out } });\n\t\treturn { success: result.success, text: out };\n\t},\n};\n",
11
+ "import type {\n\tAction,\n\tActionResult,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getDir(options: HandlerOptions | undefined): string {\n\tconst opt = options as { path?: string } | undefined;\n\treturn opt?.path?.trim() ?? \".\";\n}\n\nconst spec = requireActionSpec(\"LIST_FILES\");\n\nexport const listFiles: Action = {\n\tname: spec.name,\n\tsimiles: spec.similes ? [...spec.similes] : [],\n\tdescription: spec.description,\n\tvalidate: async (runtime: IAgentRuntime): Promise<boolean> =>\n\t\truntime.getService<CoderService>(\"coder\") !== null,\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state: State | undefined,\n\t\toptions: HandlerOptions | undefined,\n\t\tcallback?: HandlerCallback,\n\t): Promise<ActionResult> => {\n\t\tconst svc = runtime.getService<CoderService>(\"coder\");\n\t\tif (!svc) {\n\t\t\tconst msg = \"Coder service is not available.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst conv = message.roomId ?? message.agentId ?? runtime.agentId;\n\t\tconst dir = getDir(options);\n\t\tconst result = await svc.listFiles(conv, dir);\n\t\tif (!result.ok) {\n\t\t\tif (callback) await callback({ content: { text: result.error } });\n\t\t\treturn { success: false, text: result.error };\n\t\t}\n\n\t\tconst out = result.items.length > 0 ? result.items.join(\"\\n\") : \"(empty)\";\n\t\tif (callback) await callback({ content: { text: out } });\n\t\treturn { success: true, text: out };\n\t},\n};\n",
12
+ "import * as path from \"node:path\";\nimport type {\n\tAction,\n\tActionResult,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction extToLang(ext: string): string {\n\tconst e = ext.toLowerCase();\n\tif (e === \".ts\" || e === \".tsx\") return \"ts\";\n\tif (e === \".js\" || e === \".jsx\") return \"js\";\n\tif (e === \".json\") return \"json\";\n\tif (e === \".md\") return \"md\";\n\tif (e === \".py\") return \"py\";\n\tif (e === \".rs\") return \"rs\";\n\tif (e === \".go\") return \"go\";\n\tif (e === \".toml\") return \"toml\";\n\tif (e === \".yml\" || e === \".yaml\") return \"yaml\";\n\tif (e === \".sh\" || e === \".bash\" || e === \".zsh\") return \"bash\";\n\treturn \"\";\n}\n\nfunction getFilepath(\n\toptions: HandlerOptions | undefined,\n\tmessage: Memory,\n): string {\n\tconst opt = options as { filepath?: string } | undefined;\n\tif (opt?.filepath && opt.filepath.trim().length > 0)\n\t\treturn opt.filepath.trim();\n\tconst text = message.content.text ?? \"\";\n\tconst m = text.match(/[\"'`]([^\"'`]+)[\"'`]/);\n\tif (m?.[1]) return m[1].trim();\n\tconst loose = text.match(/(?:\\.\\/|\\/)?[\\w\\-./]+\\.[a-zA-Z0-9]+/);\n\treturn loose?.[0]?.trim() ?? \"\";\n}\n\nconst spec = requireActionSpec(\"READ_FILE\");\n\nexport const readFile: Action = {\n\tname: spec.name,\n\tsimiles: spec.similes ? [...spec.similes] : [],\n\tdescription: `${spec.description} Reads a file's contents.`,\n\tvalidate: async (\n\t\truntime: IAgentRuntime,\n\t\t_message: Memory,\n\t): Promise<boolean> => runtime.getService<CoderService>(\"coder\") !== null,\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state: State | undefined,\n\t\toptions: HandlerOptions | undefined,\n\t\tcallback?: HandlerCallback,\n\t): Promise<ActionResult> => {\n\t\tconst svc = runtime.getService<CoderService>(\"coder\");\n\t\tif (!svc) {\n\t\t\tconst msg = \"Coder service is not available.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst filepath = getFilepath(options, message);\n\t\tif (!filepath) {\n\t\t\tconst msg = \"Missing filepath.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst conv = message.roomId ?? message.agentId ?? runtime.agentId;\n\t\tconst result = await svc.readFile(conv, filepath);\n\t\tif (!result.ok) {\n\t\t\tif (callback) await callback({ content: { text: result.error } });\n\t\t\treturn { success: false, text: result.error };\n\t\t}\n\n\t\tconst lang = extToLang(path.extname(filepath));\n\t\tconst fenced = `\\`\\`\\`${lang}\\n${result.content}\\n\\`\\`\\``;\n\t\tif (callback) await callback({ content: { text: fenced } });\n\t\treturn { success: true, text: fenced };\n\t},\n};\n",
13
+ "import type {\n\tAction,\n\tActionResult,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getInputs(options: HandlerOptions | undefined): {\n\tpattern: string;\n\tpath: string;\n\tmaxMatches: number;\n} {\n\tconst opt = options as\n\t\t| {\n\t\t\t\tpattern?: string;\n\t\t\t\tpath?: string;\n\t\t\t\tmax_matches?: string;\n\t\t\t\tmaxMatches?: number;\n\t\t }\n\t\t| undefined;\n\tconst pattern = (opt?.pattern ?? \"\").trim();\n\tconst p = (opt?.path ?? \".\").trim() || \".\";\n\tconst mm =\n\t\ttypeof opt?.maxMatches === \"number\"\n\t\t\t? opt.maxMatches\n\t\t\t: Number.parseInt((opt?.max_matches ?? \"\").trim(), 10);\n\tconst maxMatches = Number.isFinite(mm) && mm > 0 ? mm : 50;\n\treturn { pattern, path: p, maxMatches };\n}\n\nconst spec = requireActionSpec(\"SEARCH_FILES\");\n\nexport const searchFiles: Action = {\n\tname: spec.name,\n\tsimiles: spec.similes ? [...spec.similes] : [],\n\tdescription: spec.description,\n\tvalidate: async (runtime: IAgentRuntime): Promise<boolean> =>\n\t\truntime.getService<CoderService>(\"coder\") !== null,\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state: State | undefined,\n\t\toptions: HandlerOptions | undefined,\n\t\tcallback?: HandlerCallback,\n\t): Promise<ActionResult> => {\n\t\tconst svc = runtime.getService<CoderService>(\"coder\");\n\t\tif (!svc) {\n\t\t\tconst msg = \"Coder service is not available.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst conv = message.roomId ?? message.agentId ?? runtime.agentId;\n\t\tconst { pattern, path, maxMatches } = getInputs(options);\n\t\tif (!pattern) {\n\t\t\tconst msg = \"Missing pattern.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst result = await svc.searchFiles(conv, pattern, path, maxMatches);\n\t\tif (!result.ok) {\n\t\t\tif (callback) await callback({ content: { text: result.error } });\n\t\t\treturn { success: false, text: result.error };\n\t\t}\n\n\t\tconst out =\n\t\t\tresult.matches.length === 0\n\t\t\t\t? `No matches for \"${pattern}\".`\n\t\t\t\t: result.matches\n\t\t\t\t\t\t.map((m) => `${m.file}:L${m.line}: ${m.content}`)\n\t\t\t\t\t\t.join(\"\\n\");\n\t\tif (callback) await callback({ content: { text: out } });\n\t\treturn { success: true, text: out };\n\t},\n};\n",
14
+ "import type {\n\tAction,\n\tActionResult,\n\tHandlerCallback,\n\tHandlerOptions,\n\tIAgentRuntime,\n\tMemory,\n\tState,\n} from \"@elizaos/core\";\nimport { requireActionSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\n\nfunction getInputs(\n\toptions: HandlerOptions | undefined,\n\tmessage: Memory,\n): { filepath: string; content: string } {\n\tconst opt = options as { filepath?: string; content?: string } | undefined;\n\tconst filepath = opt?.filepath?.trim() ?? \"\";\n\tconst content = opt?.content ?? \"\";\n\n\tif (filepath) return { filepath, content };\n\n\tconst text = message.content.text ?? \"\";\n\tconst m = text.match(/[\"'`]([^\"'`]+)[\"'`]/);\n\tconst inferred = m?.[1]?.trim() ?? \"\";\n\treturn { filepath: inferred, content };\n}\n\nconst spec = requireActionSpec(\"WRITE_FILE\");\n\nexport const writeFile: Action = {\n\tname: spec.name,\n\tsimiles: spec.similes ? [...spec.similes] : [],\n\tdescription: spec.description,\n\tvalidate: async (runtime: IAgentRuntime): Promise<boolean> =>\n\t\truntime.getService<CoderService>(\"coder\") !== null,\n\thandler: async (\n\t\truntime: IAgentRuntime,\n\t\tmessage: Memory,\n\t\t_state: State | undefined,\n\t\toptions: HandlerOptions | undefined,\n\t\tcallback?: HandlerCallback,\n\t): Promise<ActionResult> => {\n\t\tconst svc = runtime.getService<CoderService>(\"coder\");\n\t\tif (!svc) {\n\t\t\tconst msg = \"Coder service is not available.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst { filepath, content } = getInputs(options, message);\n\t\tif (!filepath) {\n\t\t\tconst msg = \"Missing filepath.\";\n\t\t\tif (callback) await callback({ content: { text: msg } });\n\t\t\treturn { success: false, text: msg };\n\t\t}\n\n\t\tconst conv = message.roomId ?? message.agentId ?? runtime.agentId;\n\t\tconst result = await svc.writeFile(conv, filepath, content);\n\t\tif (!result.ok) {\n\t\t\tif (callback) await callback({ content: { text: result.error } });\n\t\t\treturn { success: false, text: result.error };\n\t\t}\n\n\t\tconst msg = `Wrote ${filepath} (${content.length} chars)`;\n\t\tif (callback) await callback({ content: { text: msg } });\n\t\treturn { success: true, text: msg };\n\t},\n};\n",
15
+ "import {\n\taddHeader,\n\ttype IAgentRuntime,\n\tlogger,\n\ttype Memory,\n\ttype Provider,\n\ttype State,\n} from \"@elizaos/core\";\nimport { requireProviderSpec } from \"../generated/specs/spec-helpers\";\nimport type { CoderService } from \"../services/coderService\";\nimport type { CommandHistoryEntry, FileOperation } from \"../types\";\n\nconst MAX_OUTPUT_LENGTH = 8000;\nconst TRUNCATE_SEGMENT_LENGTH = 4000;\n\nconst spec = requireProviderSpec(\"CODER_STATUS\");\n\nexport const coderStatusProvider: Provider = {\n\tname: spec.name,\n\tdescription:\n\t\t\"Provides current working directory, allowed directory, and recent shell/file operations\",\n\tposition: 99,\n\tget: async (runtime: IAgentRuntime, message: Memory, _state: State) => {\n\t\tconst svc = runtime.getService<CoderService>(\"coder\");\n\n\t\tif (!svc) {\n\t\t\tlogger.warn(\"[coderStatusProvider] Coder service not found\");\n\t\t\treturn {\n\t\t\t\tvalues: {\n\t\t\t\t\tcoderStatus: \"Coder service is not available\",\n\t\t\t\t\tcurrentWorkingDirectory: \"N/A\",\n\t\t\t\t\tallowedDirectory: \"N/A\",\n\t\t\t\t},\n\t\t\t\ttext: addHeader(\"# Coder Status\", \"Coder service is not available\"),\n\t\t\t\tdata: { historyCount: 0, cwd: \"N/A\", allowedDir: \"N/A\" },\n\t\t\t};\n\t\t}\n\n\t\tconst conversationId = message.roomId ?? message.agentId ?? runtime.agentId;\n\t\tconst history = svc.getCommandHistory(conversationId, 10);\n\t\tconst cwd = svc.getCurrentDirectory(conversationId);\n\t\tconst allowedDir = svc.getAllowedDirectory();\n\n\t\tlet historyText = \"No commands in history.\";\n\t\tif (history.length > 0) {\n\t\t\thistoryText = history\n\t\t\t\t.map((entry: CommandHistoryEntry) => {\n\t\t\t\t\tlet entryStr = `[${new Date(entry.timestamp).toISOString()}] ${entry.workingDirectory}> ${entry.command}`;\n\t\t\t\t\tif (entry.stdout) {\n\t\t\t\t\t\tif (entry.stdout.length > MAX_OUTPUT_LENGTH) {\n\t\t\t\t\t\t\tentryStr += `\\n Output: ${entry.stdout.substring(0, TRUNCATE_SEGMENT_LENGTH)}\\n ... [TRUNCATED] ...\\n ${entry.stdout.substring(entry.stdout.length - TRUNCATE_SEGMENT_LENGTH)}`;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tentryStr += `\\n Output: ${entry.stdout}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (entry.stderr) {\n\t\t\t\t\t\tif (entry.stderr.length > MAX_OUTPUT_LENGTH) {\n\t\t\t\t\t\t\tentryStr += `\\n Error: ${entry.stderr.substring(0, TRUNCATE_SEGMENT_LENGTH)}\\n ... [TRUNCATED] ...\\n ${entry.stderr.substring(entry.stderr.length - TRUNCATE_SEGMENT_LENGTH)}`;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tentryStr += `\\n Error: ${entry.stderr}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tentryStr += `\\n Exit Code: ${entry.exitCode}`;\n\n\t\t\t\t\tif (entry.fileOperations && entry.fileOperations.length > 0) {\n\t\t\t\t\t\tentryStr += \"\\n File Operations:\";\n\t\t\t\t\t\tentry.fileOperations.forEach((op: FileOperation) => {\n\t\t\t\t\t\t\tentryStr += `\\n - ${op.type}: ${op.target}`;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn entryStr;\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\\n\");\n\t\t}\n\n\t\tconst recentFileOps = history\n\t\t\t.filter((h) => (h.fileOperations?.length ?? 0) > 0)\n\t\t\t.flatMap((h) => h.fileOperations ?? [])\n\t\t\t.slice(-8);\n\n\t\tconst fileOpsText =\n\t\t\trecentFileOps.length > 0\n\t\t\t\t? `\\n\\n${addHeader(\n\t\t\t\t\t\t\"# Recent File Operations\",\n\t\t\t\t\t\trecentFileOps.map((op) => `- ${op.type}: ${op.target}`).join(\"\\n\"),\n\t\t\t\t\t)}`\n\t\t\t\t: \"\";\n\n\t\tconst text = `Current Directory: ${cwd}\nAllowed Directory: ${allowedDir}\n\n${addHeader(\"# Recent Commands (Last 10)\", historyText)}${fileOpsText}`;\n\n\t\treturn {\n\t\t\tvalues: {\n\t\t\t\tcoderStatus: historyText,\n\t\t\t\tcurrentWorkingDirectory: cwd,\n\t\t\t\tallowedDirectory: allowedDir,\n\t\t\t},\n\t\t\ttext,\n\t\t\tdata: {\n\t\t\t\thistoryCount: history.length,\n\t\t\t\tcwd,\n\t\t\t\tallowedDir,\n\t\t\t},\n\t\t};\n\t},\n};\n",
16
+ "import { execSync } from \"node:child_process\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport type {\n\tCoderConfig,\n\tCommandHistoryEntry,\n\tCommandResult,\n\tFileOperation,\n\tShellService,\n} from \"../types\";\nimport {\n\tisForbiddenCommand,\n\tisSafeCommand,\n\tloadCoderConfig,\n\tvalidatePath,\n} from \"../utils\";\n\nexport class CoderService extends Service {\n\tpublic static serviceType = \"coder\";\n\tprivate coderConfig: CoderConfig;\n\tprivate currentDirectoryByConversation = new Map<string, string>();\n\tprivate commandHistoryByConversation = new Map<\n\t\tstring,\n\t\tCommandHistoryEntry[]\n\t>();\n\tprivate maxHistoryPerConversation = 100;\n\n\tconstructor(runtime?: IAgentRuntime) {\n\t\tsuper(runtime);\n\t\tthis.coderConfig = loadCoderConfig();\n\t}\n\n\tstatic async start(runtime: IAgentRuntime): Promise<CoderService> {\n\t\tconst instance = new CoderService(runtime);\n\t\tlogger.info(\"Coder service initialized\");\n\t\treturn instance;\n\t}\n\n\tasync stop(): Promise<void> {\n\t\tlogger.info(\"Coder service stopped\");\n\t}\n\n\tget capabilityDescription(): string {\n\t\treturn \"Filesystem + shell + git tools within a restricted directory\";\n\t}\n\n\tgetAllowedDirectory(): string {\n\t\treturn this.coderConfig.allowedDirectory;\n\t}\n\n\tgetCurrentDirectory(conversationId: string): string {\n\t\treturn (\n\t\t\tthis.currentDirectoryByConversation.get(conversationId) ??\n\t\t\tthis.coderConfig.allowedDirectory\n\t\t);\n\t}\n\n\tsetCurrentDirectory(conversationId: string, dir: string): void {\n\t\tthis.currentDirectoryByConversation.set(conversationId, dir);\n\t}\n\n\tgetCommandHistory(\n\t\tconversationId: string,\n\t\tlimit: number,\n\t): CommandHistoryEntry[] {\n\t\tconst all = this.commandHistoryByConversation.get(conversationId) ?? [];\n\t\tif (limit <= 0) return [];\n\t\treturn all.slice(-limit);\n\t}\n\n\tprivate addToHistory(\n\t\tconversationId: string | undefined,\n\t\tcommand: string,\n\t\tresult: CommandResult,\n\t\tfileOperations?: FileOperation[],\n\t): void {\n\t\tif (!conversationId) return;\n\t\tconst list = this.commandHistoryByConversation.get(conversationId) ?? [];\n\t\tlist.push({\n\t\t\ttimestamp: Date.now(),\n\t\t\tworkingDirectory: result.executedIn,\n\t\t\tcommand,\n\t\t\tstdout: result.stdout,\n\t\t\tstderr: result.stderr,\n\t\t\texitCode: result.exitCode,\n\t\t\tfileOperations,\n\t\t});\n\t\tconst trimmed =\n\t\t\tlist.length > this.maxHistoryPerConversation\n\t\t\t\t? list.slice(-this.maxHistoryPerConversation)\n\t\t\t\t: list;\n\t\tthis.commandHistoryByConversation.set(conversationId, trimmed);\n\t}\n\n\tprivate ensureEnabled(): string | null {\n\t\tif (this.coderConfig.enabled) return null;\n\t\treturn \"Coder plugin is disabled. Set CODER_ENABLED=true to enable.\";\n\t}\n\n\tprivate resolveWithin(\n\t\tconversationId: string,\n\t\ttargetPath: string,\n\t): { fullPath: string; relPath: string } | { error: string } {\n\t\tconst cwd = this.getCurrentDirectory(conversationId);\n\t\tconst validated = validatePath(\n\t\t\ttargetPath,\n\t\t\tthis.coderConfig.allowedDirectory,\n\t\t\tcwd,\n\t\t);\n\t\tif (!validated)\n\t\t\treturn { error: \"Cannot access path outside allowed directory\" };\n\t\tconst rel = path.relative(this.coderConfig.allowedDirectory, validated);\n\t\treturn { fullPath: validated, relPath: rel.length === 0 ? \".\" : rel };\n\t}\n\n\tasync changeDirectory(\n\t\tconversationId: string,\n\t\ttargetPath: string,\n\t): Promise<CommandResult> {\n\t\tconst disabled = this.ensureEnabled();\n\t\tif (disabled) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tstdout: \"\",\n\t\t\t\tstderr: disabled,\n\t\t\t\texitCode: 1,\n\t\t\t\terror: \"Coder disabled\",\n\t\t\t\texecutedIn: this.getCurrentDirectory(conversationId),\n\t\t\t};\n\t\t}\n\n\t\tconst resolved = this.resolveWithin(conversationId, targetPath);\n\t\tif (\"error\" in resolved) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tstdout: \"\",\n\t\t\t\tstderr: resolved.error,\n\t\t\t\texitCode: 1,\n\t\t\t\terror: \"Permission denied\",\n\t\t\t\texecutedIn: this.getCurrentDirectory(conversationId),\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tconst stat = await fs.stat(resolved.fullPath);\n\t\t\tif (!stat.isDirectory()) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\tstdout: \"\",\n\t\t\t\t\tstderr: \"Not a directory\",\n\t\t\t\t\texitCode: 1,\n\t\t\t\t\terror: \"Not a directory\",\n\t\t\t\t\texecutedIn: this.getCurrentDirectory(conversationId),\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis.setCurrentDirectory(conversationId, resolved.fullPath);\n\t\t\treturn {\n\t\t\t\tsuccess: true,\n\t\t\t\tstdout: `Changed directory to: ${resolved.fullPath}`,\n\t\t\t\tstderr: \"\",\n\t\t\t\texitCode: 0,\n\t\t\t\texecutedIn: resolved.fullPath,\n\t\t\t};\n\t\t} catch (err) {\n\t\t\tconst e = err as NodeJS.ErrnoException;\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tstdout: \"\",\n\t\t\t\tstderr: e.message,\n\t\t\t\texitCode: 1,\n\t\t\t\terror: \"Failed to change directory\",\n\t\t\t\texecutedIn: this.getCurrentDirectory(conversationId),\n\t\t\t};\n\t\t}\n\t}\n\n\tasync readFile(\n\t\tconversationId: string,\n\t\tfilepath: string,\n\t): Promise<{ ok: true; content: string } | { ok: false; error: string }> {\n\t\tconst disabled = this.ensureEnabled();\n\t\tif (disabled) return { ok: false, error: disabled };\n\t\tconst resolved = this.resolveWithin(conversationId, filepath);\n\t\tif (\"error\" in resolved) return { ok: false, error: resolved.error };\n\t\ttry {\n\t\t\tconst stat = await fs.stat(resolved.fullPath);\n\t\t\tif (stat.isDirectory())\n\t\t\t\treturn { ok: false, error: \"Path is a directory\" };\n\t\t\tconst content = await fs.readFile(resolved.fullPath, \"utf-8\");\n\t\t\treturn { ok: true, content };\n\t\t} catch (err) {\n\t\t\tconst e = err as NodeJS.ErrnoException;\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: e.code === \"ENOENT\" ? \"File not found\" : e.message,\n\t\t\t};\n\t\t}\n\t}\n\n\tasync writeFile(\n\t\tconversationId: string,\n\t\tfilepath: string,\n\t\tcontent: string,\n\t): Promise<{ ok: true } | { ok: false; error: string }> {\n\t\tconst disabled = this.ensureEnabled();\n\t\tif (disabled) return { ok: false, error: disabled };\n\t\tconst resolved = this.resolveWithin(conversationId, filepath);\n\t\tif (\"error\" in resolved) return { ok: false, error: resolved.error };\n\t\ttry {\n\t\t\tawait fs.mkdir(path.dirname(resolved.fullPath), { recursive: true });\n\t\t\tawait fs.writeFile(resolved.fullPath, content, \"utf-8\");\n\t\t\treturn { ok: true };\n\t\t} catch (err) {\n\t\t\tconst e = err as NodeJS.ErrnoException;\n\t\t\treturn { ok: false, error: e.message };\n\t\t}\n\t}\n\n\tasync editFile(\n\t\tconversationId: string,\n\t\tfilepath: string,\n\t\toldStr: string,\n\t\tnewStr: string,\n\t): Promise<{ ok: true } | { ok: false; error: string }> {\n\t\tconst disabled = this.ensureEnabled();\n\t\tif (disabled) return { ok: false, error: disabled };\n\t\tconst resolved = this.resolveWithin(conversationId, filepath);\n\t\tif (\"error\" in resolved) return { ok: false, error: resolved.error };\n\t\ttry {\n\t\t\tconst content = await fs.readFile(resolved.fullPath, \"utf-8\");\n\t\t\tif (!content.includes(oldStr))\n\t\t\t\treturn { ok: false, error: \"Could not find old_str in file\" };\n\t\t\tconst next = content.replace(oldStr, newStr);\n\t\t\tawait fs.writeFile(resolved.fullPath, next, \"utf-8\");\n\t\t\treturn { ok: true };\n\t\t} catch (err) {\n\t\t\tconst e = err as NodeJS.ErrnoException;\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: e.code === \"ENOENT\" ? \"File not found\" : e.message,\n\t\t\t};\n\t\t}\n\t}\n\n\tasync listFiles(\n\t\tconversationId: string,\n\t\tdirPath: string,\n\t): Promise<{ ok: true; items: string[] } | { ok: false; error: string }> {\n\t\tconst disabled = this.ensureEnabled();\n\t\tif (disabled) return { ok: false, error: disabled };\n\t\tconst resolved = this.resolveWithin(conversationId, dirPath);\n\t\tif (\"error\" in resolved) return { ok: false, error: resolved.error };\n\t\ttry {\n\t\t\tconst entries = await fs.readdir(resolved.fullPath, {\n\t\t\t\twithFileTypes: true,\n\t\t\t});\n\t\t\tconst items = entries\n\t\t\t\t.filter((e) => !e.name.startsWith(\".\"))\n\t\t\t\t.map((e) => `${e.name}${e.isDirectory() ? \"/\" : \"\"}`)\n\t\t\t\t.sort((a, b) => a.localeCompare(b));\n\t\t\treturn { ok: true, items };\n\t\t} catch (err) {\n\t\t\tconst e = err as NodeJS.ErrnoException;\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\terror: e.code === \"ENOENT\" ? \"Directory not found\" : e.message,\n\t\t\t};\n\t\t}\n\t}\n\n\tasync searchFiles(\n\t\tconversationId: string,\n\t\tpattern: string,\n\t\tdirPath: string,\n\t\tmaxMatches: number,\n\t): Promise<\n\t\t| {\n\t\t\t\tok: true;\n\t\t\t\tmatches: Array<{ file: string; line: number; content: string }>;\n\t\t }\n\t\t| { ok: false; error: string }\n\t> {\n\t\tconst disabled = this.ensureEnabled();\n\t\tif (disabled) return { ok: false, error: disabled };\n\t\tconst resolved = this.resolveWithin(conversationId, dirPath);\n\t\tif (\"error\" in resolved) return { ok: false, error: resolved.error };\n\t\tconst needle = pattern.trim();\n\t\tif (!needle) return { ok: false, error: \"Missing pattern\" };\n\t\tconst limit =\n\t\t\tNumber.isFinite(maxMatches) && maxMatches > 0\n\t\t\t\t? Math.min(500, Math.floor(maxMatches))\n\t\t\t\t: 50;\n\t\tconst matches: Array<{ file: string; line: number; content: string }> = [];\n\t\tawait this.searchInDirectory(\n\t\t\tresolved.fullPath,\n\t\t\tneedle.toLowerCase(),\n\t\t\tmatches,\n\t\t\tlimit,\n\t\t);\n\t\treturn { ok: true, matches };\n\t}\n\n\tprivate async searchInDirectory(\n\t\tdir: string,\n\t\tneedleLower: string,\n\t\tmatches: Array<{ file: string; line: number; content: string }>,\n\t\tmaxMatches: number,\n\t): Promise<void> {\n\t\tif (matches.length >= maxMatches) return;\n\t\tconst entries = await fs.readdir(dir, { withFileTypes: true });\n\t\tfor (const entry of entries) {\n\t\t\tif (matches.length >= maxMatches) break;\n\t\t\tif (entry.name.startsWith(\".\")) continue;\n\t\t\tconst full = path.join(dir, entry.name);\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tif (\n\t\t\t\t\tentry.name === \"node_modules\" ||\n\t\t\t\t\tentry.name === \"dist\" ||\n\t\t\t\t\tentry.name === \"build\" ||\n\t\t\t\t\tentry.name === \"coverage\" ||\n\t\t\t\t\tentry.name === \".git\"\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tawait this.searchInDirectory(full, needleLower, matches, maxMatches);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!entry.isFile()) continue;\n\t\t\tconst content = await fs.readFile(full, \"utf-8\");\n\t\t\tconst lines = content.split(\"\\n\");\n\t\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\t\tif (matches.length >= maxMatches) break;\n\t\t\t\tconst line = lines[i] ?? \"\";\n\t\t\t\tif (!line.toLowerCase().includes(needleLower)) continue;\n\t\t\t\tmatches.push({\n\t\t\t\t\tfile: path.relative(this.coderConfig.allowedDirectory, full),\n\t\t\t\t\tline: i + 1,\n\t\t\t\t\tcontent: line.trim().slice(0, 240),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tasync executeShell(\n\t\tcommand: string,\n\t\tconversationId: string,\n\t): Promise<CommandResult> {\n\t\tconst disabled = this.ensureEnabled();\n\t\tif (disabled) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tstdout: \"\",\n\t\t\t\tstderr: disabled,\n\t\t\t\texitCode: 1,\n\t\t\t\terror: \"Coder disabled\",\n\t\t\t\texecutedIn: this.getCurrentDirectory(conversationId),\n\t\t\t};\n\t\t}\n\n\t\tconst trimmed = command.trim();\n\t\tif (!trimmed) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tstdout: \"\",\n\t\t\t\tstderr: \"Invalid command\",\n\t\t\t\texitCode: 1,\n\t\t\t\terror: \"Empty command\",\n\t\t\t\texecutedIn: this.getCurrentDirectory(conversationId),\n\t\t\t};\n\t\t}\n\n\t\tconst cwd = this.getCurrentDirectory(conversationId);\n\n\t\t// Use ShellService for execution if available\n\t\tconst shellService =\n\t\t\ttypeof this.runtime?.getService === \"function\"\n\t\t\t\t? this.runtime.getService<ShellService>(\"shell\")\n\t\t\t\t: null;\n\t\tif (shellService) {\n\t\t\tconst execResult = await shellService.exec(trimmed, {\n\t\t\t\tworkdir: cwd,\n\t\t\t\ttimeout: Math.floor(this.coderConfig.timeoutMs / 1000),\n\t\t\t\tconversationId,\n\t\t\t});\n\n\t\t\tif (execResult.status === \"running\") {\n\t\t\t\t// Command is still running (backgrounded)\n\t\t\t\tconst result: CommandResult = {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tstdout: `Command running in background (session: ${execResult.sessionId})`,\n\t\t\t\t\tstderr: \"\",\n\t\t\t\t\texitCode: 0,\n\t\t\t\t\texecutedIn: cwd,\n\t\t\t\t};\n\t\t\t\tthis.addToHistory(conversationId, trimmed, result);\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tconst success =\n\t\t\t\texecResult.status === \"completed\" && execResult.exitCode === 0;\n\t\t\tconst result: CommandResult = {\n\t\t\t\tsuccess,\n\t\t\t\tstdout: execResult.aggregated ?? \"\",\n\t\t\t\tstderr: execResult.reason ?? \"\",\n\t\t\t\texitCode: execResult.exitCode ?? (success ? 0 : 1),\n\t\t\t\terror: success ? undefined : \"Command failed\",\n\t\t\t\texecutedIn: cwd,\n\t\t\t};\n\t\t\tthis.addToHistory(conversationId, trimmed, result);\n\t\t\treturn result;\n\t\t}\n\n\t\t// Fallback: Use execSync when ShellService is not available\n\t\t// This maintains backward compatibility for standalone use\n\t\tif (!isSafeCommand(trimmed)) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tstdout: \"\",\n\t\t\t\tstderr: \"Command contains forbidden patterns\",\n\t\t\t\texitCode: 1,\n\t\t\t\terror: \"Security policy violation\",\n\t\t\t\texecutedIn: cwd,\n\t\t\t};\n\t\t}\n\n\t\tif (isForbiddenCommand(trimmed, this.coderConfig.forbiddenCommands)) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\tstdout: \"\",\n\t\t\t\tstderr: \"Command is forbidden by security policy\",\n\t\t\t\texitCode: 1,\n\t\t\t\terror: \"Forbidden command\",\n\t\t\t\texecutedIn: cwd,\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tconst stdout = execSync(trimmed, {\n\t\t\t\tcwd,\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t\tencoding: \"utf-8\",\n\t\t\t\ttimeout: this.coderConfig.timeoutMs,\n\t\t\t\tmaxBuffer: 10 * 1024 * 1024,\n\t\t\t}).toString();\n\t\t\tconst result: CommandResult = {\n\t\t\t\tsuccess: true,\n\t\t\t\tstdout,\n\t\t\t\tstderr: \"\",\n\t\t\t\texitCode: 0,\n\t\t\t\texecutedIn: cwd,\n\t\t\t};\n\t\t\tthis.addToHistory(conversationId, trimmed, result);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tconst e = err as Error & {\n\t\t\t\tstdout?: string;\n\t\t\t\tstderr?: string;\n\t\t\t\tstatus?: number;\n\t\t\t};\n\t\t\tconst stderr = (e.stderr ?? e.message).toString();\n\t\t\tconst stdout = (e.stdout ?? \"\").toString();\n\t\t\tconst exitCode = typeof e.status === \"number\" ? e.status : 1;\n\t\t\tconst result: CommandResult = {\n\t\t\t\tsuccess: false,\n\t\t\t\tstdout,\n\t\t\t\tstderr,\n\t\t\t\texitCode,\n\t\t\t\terror: \"Command failed\",\n\t\t\t\texecutedIn: cwd,\n\t\t\t};\n\t\t\tthis.addToHistory(conversationId, trimmed, result);\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tasync git(args: string, conversationId: string): Promise<CommandResult> {\n\t\t// Route through executeShell but prefix with `git`.\n\t\treturn this.executeShell(`git ${args}`, conversationId);\n\t}\n}\n",
17
+ "import * as path from \"node:path\";\nimport type { CoderConfig } from \"../types\";\n\nfunction parseBool(value: string | undefined): boolean {\n\tconst v = (value ?? \"\").trim().toLowerCase();\n\treturn v === \"1\" || v === \"true\" || v === \"yes\" || v === \"on\";\n}\n\nfunction parseIntMs(value: string | undefined, fallback: number): number {\n\tconst parsed = Number.parseInt((value ?? \"\").trim(), 10);\n\tif (!Number.isFinite(parsed) || parsed <= 0) return fallback;\n\treturn parsed;\n}\n\nexport function loadCoderConfig(): CoderConfig {\n\tconst enabled = parseBool(process.env.CODER_ENABLED);\n\tconst allowedDirectoryRaw = (\n\t\tprocess.env.CODER_ALLOWED_DIRECTORY ?? \"\"\n\t).trim();\n\tconst allowedDirectory = allowedDirectoryRaw\n\t\t? path.resolve(allowedDirectoryRaw)\n\t\t: process.cwd();\n\n\tconst timeoutMs = parseIntMs(process.env.CODER_TIMEOUT, 30_000);\n\n\tconst forbiddenCommands = (process.env.CODER_FORBIDDEN_COMMANDS ?? \"\")\n\t\t.split(\",\")\n\t\t.map((s) => s.trim())\n\t\t.filter((s) => s.length > 0);\n\n\treturn { enabled, allowedDirectory, timeoutMs, forbiddenCommands };\n}\n",
18
+ "import * as path from \"node:path\";\n\nexport const DEFAULT_FORBIDDEN_COMMANDS: string[] = [\n\t\"rm -rf /\",\n\t\"rm -rf ~\",\n\t\"sudo rm\",\n\t\"mkfs\",\n\t\"dd if=/dev\",\n];\n\nexport function extractBaseCommand(command: string): string {\n\tconst trimmed = command.trim();\n\tif (!trimmed) return \"\";\n\tconst first = trimmed.split(/\\s+/)[0];\n\treturn first ?? \"\";\n}\n\n/**\n * Very conservative “safe command” filter. Blocks shell control operators and\n * common escape patterns. (This is aligned with other plugins’ patterns.)\n */\nexport function isSafeCommand(command: string): boolean {\n\tconst c = command.trim();\n\tif (!c) return false;\n\tif (c.includes(\"&&\") || c.includes(\"||\") || c.includes(\";\")) return false;\n\tif (c.includes(\"$(\") || c.includes(\"`\")) return false;\n\treturn true;\n}\n\nexport function isForbiddenCommand(\n\tcommand: string,\n\tadditionalForbidden: string[],\n): boolean {\n\tconst c = command.toLowerCase();\n\tfor (const f of DEFAULT_FORBIDDEN_COMMANDS) {\n\t\tif (c.includes(f.toLowerCase())) return true;\n\t}\n\tfor (const f of additionalForbidden) {\n\t\tif (f.trim().length === 0) continue;\n\t\tif (c.includes(f.toLowerCase())) return true;\n\t}\n\treturn false;\n}\n\n/**\n * Resolve a target path against the current directory while enforcing that\n * the result stays inside allowedDirectory.\n */\nexport function validatePath(\n\ttargetPath: string,\n\tallowedDirectory: string,\n\tcurrentDirectory: string,\n): string | null {\n\tconst base =\n\t\tcurrentDirectory && currentDirectory.length > 0\n\t\t\t? currentDirectory\n\t\t\t: allowedDirectory;\n\tconst resolved = path.resolve(base, targetPath);\n\tconst allowed = path.resolve(allowedDirectory);\n\n\tconst rel = path.relative(allowed, resolved);\n\tif (rel === \"\") return resolved;\n\tif (rel.startsWith(\"..\") || path.isAbsolute(rel)) return null;\n\treturn resolved;\n}\n",
19
+ "/**\n * Configure coding tools - creates CodingAction instances for coding operations.\n *\n * This provides Claude Code-style actions:\n * - exec: Execute shell commands (via ShellService)\n * - process: Manage background processes (via ShellService)\n * - read_file: Read file contents\n * - write_file: Write file contents\n * - edit_file: Edit file contents (find & replace)\n * - list_files: List directory contents\n * - search_files: Search for patterns in files\n * - git: Execute git commands\n */\n\nimport type { IAgentRuntime } from \"@elizaos/core\";\nimport type { CoderService } from \"./services/coderService\";\nimport type {\n\tCodingAction,\n\tCodingActionContext,\n\tCodingActionResult,\n\tCodingToolsOptions,\n\tProcessSession,\n\tShellService,\n} from \"./types\";\n\n/**\n * Create configured coding actions using the provided services.\n *\n * @param runtime - The Eliza agent runtime\n * @param options - Configuration options for the tools\n * @returns Array of CodingAction instances\n */\nexport function configureCodingTools(\n\truntime: IAgentRuntime,\n\toptions?: CodingToolsOptions,\n): CodingAction[] {\n\tconst shellService = runtime.getService<ShellService>(\"shell\");\n\tconst coderService = runtime.getService<CoderService>(\"coder\");\n\n\tconst defaultCwd = options?.cwd ?? process.cwd();\n\tconst scopeKey = options?.scopeKey;\n\tconst sessionKey = options?.sessionKey;\n\tconst notifyOnExit = options?.notifyOnExit ?? false;\n\tconst defaultBackgroundMs = options?.backgroundMs ?? 10000;\n\tconst defaultTimeoutSec = options?.timeoutSec ?? 1800;\n\tconst conversationId = options?.conversationId ?? \"default\";\n\n\tconst actions: CodingAction[] = [];\n\n\t// ============================================================================\n\t// exec - Execute shell commands\n\t// ============================================================================\n\tif (shellService) {\n\t\tconst execAction: CodingAction = {\n\t\t\tname: \"exec\",\n\t\t\tlabel: \"exec\",\n\t\t\tdescription:\n\t\t\t\t\"Execute a shell command. Returns output when complete or session info if backgrounded.\",\n\t\t\tparameters: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tproperties: {\n\t\t\t\t\tcommand: { type: \"string\", description: \"Shell command to execute\" },\n\t\t\t\t\tworkdir: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tdescription: \"Working directory (optional)\",\n\t\t\t\t\t},\n\t\t\t\t\tenv: {\n\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\tadditionalProperties: { type: \"string\" },\n\t\t\t\t\t\tdescription: \"Environment variables (optional)\",\n\t\t\t\t\t},\n\t\t\t\t\tyieldMs: {\n\t\t\t\t\t\ttype: \"number\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Milliseconds to wait before backgrounding (default 10000)\",\n\t\t\t\t\t},\n\t\t\t\t\tbackground: {\n\t\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\t\tdescription: \"Run in background immediately\",\n\t\t\t\t\t},\n\t\t\t\t\ttimeout: { type: \"number\", description: \"Timeout in seconds\" },\n\t\t\t\t\tpty: {\n\t\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\t\tdescription: \"Use PTY for interactive commands\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: [\"command\"],\n\t\t\t},\n\t\t\texecute: async (\n\t\t\t\tcontext: CodingActionContext,\n\t\t\t): Promise<CodingActionResult> => {\n\t\t\t\tconst params = context.args as {\n\t\t\t\t\tcommand: string;\n\t\t\t\t\tworkdir?: string;\n\t\t\t\t\tenv?: Record<string, string>;\n\t\t\t\t\tyieldMs?: number;\n\t\t\t\t\tbackground?: boolean;\n\t\t\t\t\ttimeout?: number;\n\t\t\t\t\tpty?: boolean;\n\t\t\t\t};\n\n\t\t\t\tif (!params.command) {\n\t\t\t\t\tthrow new Error(\"Provide a command to execute.\");\n\t\t\t\t}\n\n\t\t\t\tconst result = await shellService.exec(params.command, {\n\t\t\t\t\tworkdir: params.workdir?.trim() || defaultCwd,\n\t\t\t\t\tenv: params.env,\n\t\t\t\t\tyieldMs: params.yieldMs ?? defaultBackgroundMs,\n\t\t\t\t\tbackground: params.background,\n\t\t\t\t\ttimeout: params.timeout ?? defaultTimeoutSec,\n\t\t\t\t\tpty: params.pty,\n\t\t\t\t\tscopeKey,\n\t\t\t\t\tsessionKey,\n\t\t\t\t\tnotifyOnExit,\n\t\t\t\t\tconversationId: context.conversationId ?? conversationId,\n\t\t\t\t\tonUpdate: context.onUpdate\n\t\t\t\t\t\t? (session: ProcessSession) => {\n\t\t\t\t\t\t\t\tcontext.onUpdate?.({\n\t\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\t\ttext: session.tail || session.aggregated || \"\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\t\t\t\t\t\tsessionId: session.id,\n\t\t\t\t\t\t\t\t\t\tpid: session.pid ?? undefined,\n\t\t\t\t\t\t\t\t\t\tstartedAt: session.startedAt,\n\t\t\t\t\t\t\t\t\t\tcwd: session.cwd,\n\t\t\t\t\t\t\t\t\t\ttail: session.tail,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t});\n\n\t\t\t\tif (result.status === \"running\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: `Command still running (session ${result.sessionId}, pid ${\n\t\t\t\t\t\t\t\t\tresult.pid ?? \"n/a\"\n\t\t\t\t\t\t\t\t}). Use process action (list/poll/log/write/kill) for follow-up.`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\t\t\tsessionId: result.sessionId,\n\t\t\t\t\t\t\tpid: result.pid ?? undefined,\n\t\t\t\t\t\t\tstartedAt: result.startedAt,\n\t\t\t\t\t\t\tcwd: result.cwd,\n\t\t\t\t\t\t\ttail: result.tail,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (result.status === \"failed\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: result.aggregated || result.reason || \"Command failed.\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\texitCode: result.exitCode ?? 1,\n\t\t\t\t\t\t\tdurationMs: result.durationMs,\n\t\t\t\t\t\t\treason: result.reason,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: result.aggregated || \"(no output)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\texitCode: result.exitCode ?? 0,\n\t\t\t\t\t\tdurationMs: result.durationMs,\n\t\t\t\t\t\taggregated: result.aggregated,\n\t\t\t\t\t\tcwd: result.cwd,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t\tactions.push(execAction);\n\n\t\t// ============================================================================\n\t\t// process - Manage background processes\n\t\t// ============================================================================\n\t\tconst processAction: CodingAction = {\n\t\t\tname: \"process\",\n\t\t\tlabel: \"process\",\n\t\t\tdescription:\n\t\t\t\t\"Manage running exec sessions: list, poll, log, write, send-keys, submit, paste, kill.\",\n\t\t\tparameters: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tproperties: {\n\t\t\t\t\taction: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Process action (list, poll, log, write, send-keys, submit, paste, kill, clear, remove)\",\n\t\t\t\t\t},\n\t\t\t\t\tsessionId: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tdescription: \"Session id for actions other than list\",\n\t\t\t\t\t},\n\t\t\t\t\tdata: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tdescription: \"Data to write for write action\",\n\t\t\t\t\t},\n\t\t\t\t\tkeys: {\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\titems: { type: \"string\" },\n\t\t\t\t\t\tdescription: \"Key tokens to send for send-keys\",\n\t\t\t\t\t},\n\t\t\t\t\thex: {\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\titems: { type: \"string\" },\n\t\t\t\t\t\tdescription: \"Hex bytes to send for send-keys\",\n\t\t\t\t\t},\n\t\t\t\t\tliteral: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tdescription: \"Literal string for send-keys\",\n\t\t\t\t\t},\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tdescription: \"Text to paste for paste action\",\n\t\t\t\t\t},\n\t\t\t\t\tbracketed: {\n\t\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\t\tdescription: \"Wrap paste in bracketed mode\",\n\t\t\t\t\t},\n\t\t\t\t\teof: { type: \"boolean\", description: \"Close stdin after write\" },\n\t\t\t\t\toffset: { type: \"number\", description: \"Log offset\" },\n\t\t\t\t\tlimit: { type: \"number\", description: \"Log length\" },\n\t\t\t\t},\n\t\t\t\trequired: [\"action\"],\n\t\t\t},\n\t\t\texecute: async (\n\t\t\t\tcontext: CodingActionContext,\n\t\t\t): Promise<CodingActionResult> => {\n\t\t\t\tconst params = context.args as {\n\t\t\t\t\taction: string;\n\t\t\t\t\tsessionId?: string;\n\t\t\t\t\tdata?: string;\n\t\t\t\t\tkeys?: string[];\n\t\t\t\t\thex?: string[];\n\t\t\t\t\tliteral?: string;\n\t\t\t\t\ttext?: string;\n\t\t\t\t\tbracketed?: boolean;\n\t\t\t\t\teof?: boolean;\n\t\t\t\t\toffset?: number;\n\t\t\t\t\tlimit?: number;\n\t\t\t\t};\n\n\t\t\t\tconst result = await shellService.processAction({\n\t\t\t\t\taction: params.action as\n\t\t\t\t\t\t| \"list\"\n\t\t\t\t\t\t| \"poll\"\n\t\t\t\t\t\t| \"log\"\n\t\t\t\t\t\t| \"write\"\n\t\t\t\t\t\t| \"send-keys\"\n\t\t\t\t\t\t| \"submit\"\n\t\t\t\t\t\t| \"paste\"\n\t\t\t\t\t\t| \"kill\"\n\t\t\t\t\t\t| \"clear\"\n\t\t\t\t\t\t| \"remove\",\n\t\t\t\t\tsessionId: params.sessionId,\n\t\t\t\t\tdata: params.data,\n\t\t\t\t\tkeys: params.keys,\n\t\t\t\t\thex: params.hex,\n\t\t\t\t\tliteral: params.literal,\n\t\t\t\t\ttext: params.text,\n\t\t\t\t\tbracketed: params.bracketed,\n\t\t\t\t\teof: params.eof,\n\t\t\t\t\toffset: params.offset,\n\t\t\t\t\tlimit: params.limit,\n\t\t\t\t});\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: result.message as string | undefined,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: result.data as Record<string, unknown> | undefined,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t\tactions.push(processAction);\n\t}\n\n\t// ============================================================================\n\t// File operations (via CoderService)\n\t// ============================================================================\n\tif (coderService) {\n\t\t// read_file\n\t\tconst readFileAction: CodingAction = {\n\t\t\tname: \"read_file\",\n\t\t\tlabel: \"read_file\",\n\t\t\tdescription: \"Read the contents of a file.\",\n\t\t\tparameters: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tproperties: {\n\t\t\t\t\tpath: { type: \"string\", description: \"Path to the file to read\" },\n\t\t\t\t},\n\t\t\t\trequired: [\"path\"],\n\t\t\t},\n\t\t\texecute: async (\n\t\t\t\tcontext: CodingActionContext,\n\t\t\t): Promise<CodingActionResult> => {\n\t\t\t\tconst params = context.args as { path: string };\n\t\t\t\tconst convId = context.conversationId ?? conversationId;\n\t\t\t\tconst result = await coderService.readFile(convId, params.path);\n\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Error: ${result.error}` }],\n\t\t\t\t\t\tdetails: { success: false, error: result.error },\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: result.content }],\n\t\t\t\t\tdetails: { success: true },\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t\tactions.push(readFileAction);\n\n\t\t// write_file\n\t\tconst writeFileAction: CodingAction = {\n\t\t\tname: \"write_file\",\n\t\t\tlabel: \"write_file\",\n\t\t\tdescription:\n\t\t\t\t\"Write content to a file. Creates the file if it doesn't exist.\",\n\t\t\tparameters: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tproperties: {\n\t\t\t\t\tpath: { type: \"string\", description: \"Path to the file to write\" },\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tdescription: \"Content to write to the file\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: [\"path\", \"content\"],\n\t\t\t},\n\t\t\texecute: async (\n\t\t\t\tcontext: CodingActionContext,\n\t\t\t): Promise<CodingActionResult> => {\n\t\t\t\tconst params = context.args as { path: string; content: string };\n\t\t\t\tconst convId = context.conversationId ?? conversationId;\n\t\t\t\tconst result = await coderService.writeFile(\n\t\t\t\t\tconvId,\n\t\t\t\t\tparams.path,\n\t\t\t\t\tparams.content,\n\t\t\t\t);\n\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Error: ${result.error}` }],\n\t\t\t\t\t\tdetails: { success: false, error: result.error },\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: `File written: ${params.path}` }],\n\t\t\t\t\tdetails: { success: true },\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t\tactions.push(writeFileAction);\n\n\t\t// edit_file\n\t\tconst editFileAction: CodingAction = {\n\t\t\tname: \"edit_file\",\n\t\t\tlabel: \"edit_file\",\n\t\t\tdescription:\n\t\t\t\t\"Edit a file by replacing text. Finds old_str and replaces with new_str.\",\n\t\t\tparameters: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tproperties: {\n\t\t\t\t\tpath: { type: \"string\", description: \"Path to the file to edit\" },\n\t\t\t\t\told_str: { type: \"string\", description: \"Text to find and replace\" },\n\t\t\t\t\tnew_str: { type: \"string\", description: \"Text to replace with\" },\n\t\t\t\t},\n\t\t\t\trequired: [\"path\", \"old_str\", \"new_str\"],\n\t\t\t},\n\t\t\texecute: async (\n\t\t\t\tcontext: CodingActionContext,\n\t\t\t): Promise<CodingActionResult> => {\n\t\t\t\tconst params = context.args as {\n\t\t\t\t\tpath: string;\n\t\t\t\t\told_str: string;\n\t\t\t\t\tnew_str: string;\n\t\t\t\t};\n\t\t\t\tconst convId = context.conversationId ?? conversationId;\n\t\t\t\tconst result = await coderService.editFile(\n\t\t\t\t\tconvId,\n\t\t\t\t\tparams.path,\n\t\t\t\t\tparams.old_str,\n\t\t\t\t\tparams.new_str,\n\t\t\t\t);\n\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Error: ${result.error}` }],\n\t\t\t\t\t\tdetails: { success: false, error: result.error },\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: `File edited: ${params.path}` }],\n\t\t\t\t\tdetails: { success: true },\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t\tactions.push(editFileAction);\n\n\t\t// list_files\n\t\tconst listFilesAction: CodingAction = {\n\t\t\tname: \"list_files\",\n\t\t\tlabel: \"list_files\",\n\t\t\tdescription: \"List files and directories in a path.\",\n\t\t\tparameters: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tproperties: {\n\t\t\t\t\tpath: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Directory path to list (defaults to current directory)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: [],\n\t\t\t},\n\t\t\texecute: async (\n\t\t\t\tcontext: CodingActionContext,\n\t\t\t): Promise<CodingActionResult> => {\n\t\t\t\tconst params = context.args as { path?: string };\n\t\t\t\tconst convId = context.conversationId ?? conversationId;\n\t\t\t\tconst result = await coderService.listFiles(convId, params.path ?? \".\");\n\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Error: ${result.error}` }],\n\t\t\t\t\t\tdetails: { success: false, error: result.error },\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: result.items.join(\"\\n\") }],\n\t\t\t\t\tdetails: { success: true, items: result.items },\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t\tactions.push(listFilesAction);\n\n\t\t// search_files\n\t\tconst searchFilesAction: CodingAction = {\n\t\t\tname: \"search_files\",\n\t\t\tlabel: \"search_files\",\n\t\t\tdescription: \"Search for a pattern in files within a directory.\",\n\t\t\tparameters: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tproperties: {\n\t\t\t\t\tpattern: { type: \"string\", description: \"Pattern to search for\" },\n\t\t\t\t\tpath: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Directory path to search in (defaults to current directory)\",\n\t\t\t\t\t},\n\t\t\t\t\tmax_matches: {\n\t\t\t\t\t\ttype: \"number\",\n\t\t\t\t\t\tdescription: \"Maximum matches to return (default 50)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: [\"pattern\"],\n\t\t\t},\n\t\t\texecute: async (\n\t\t\t\tcontext: CodingActionContext,\n\t\t\t): Promise<CodingActionResult> => {\n\t\t\t\tconst params = context.args as {\n\t\t\t\t\tpattern: string;\n\t\t\t\t\tpath?: string;\n\t\t\t\t\tmax_matches?: number;\n\t\t\t\t};\n\t\t\t\tconst convId = context.conversationId ?? conversationId;\n\t\t\t\tconst result = await coderService.searchFiles(\n\t\t\t\t\tconvId,\n\t\t\t\t\tparams.pattern,\n\t\t\t\t\tparams.path ?? \".\",\n\t\t\t\t\tparams.max_matches ?? 50,\n\t\t\t\t);\n\n\t\t\t\tif (!result.ok) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Error: ${result.error}` }],\n\t\t\t\t\t\tdetails: { success: false, error: result.error },\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst formatted = result.matches\n\t\t\t\t\t.map((m) => `${m.file}:${m.line}: ${m.content}`)\n\t\t\t\t\t.join(\"\\n\");\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: \"text\", text: formatted || \"No matches found\" }],\n\t\t\t\t\tdetails: { success: true, matches: result.matches },\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t\tactions.push(searchFilesAction);\n\n\t\t// git\n\t\tconst gitAction: CodingAction = {\n\t\t\tname: \"git\",\n\t\t\tlabel: \"git\",\n\t\t\tdescription: \"Execute a git command.\",\n\t\t\tparameters: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tproperties: {\n\t\t\t\t\targs: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Git command arguments (e.g., 'status', 'diff', 'log --oneline -5')\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trequired: [\"args\"],\n\t\t\t},\n\t\t\texecute: async (\n\t\t\t\tcontext: CodingActionContext,\n\t\t\t): Promise<CodingActionResult> => {\n\t\t\t\tconst params = context.args as { args: string };\n\t\t\t\tconst convId = context.conversationId ?? conversationId;\n\t\t\t\tconst result = await coderService.git(params.args, convId);\n\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: result.success ? result.stdout : result.stderr,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tsuccess: result.success,\n\t\t\t\t\t\texitCode: result.exitCode,\n\t\t\t\t\t\tstdout: result.stdout,\n\t\t\t\t\t\tstderr: result.stderr,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t\tactions.push(gitAction);\n\t}\n\n\treturn actions;\n}\n\nexport default configureCodingTools;\n",
20
+ "import type { Plugin } from \"@elizaos/core\";\nimport {\n\tchangeDirectory,\n\teditFile,\n\texecuteShell,\n\tgit,\n\tlistFiles,\n\treadFile,\n\tsearchFiles,\n\twriteFile,\n} from \"./actions\";\nimport { coderStatusProvider } from \"./providers\";\nimport { CoderService } from \"./services/coderService\";\n\nexport const coderPlugin: Plugin = {\n\tname: \"eliza-coder\",\n\tdescription: \"Coder tools: filesystem, shell, and git (restricted)\",\n\tservices: [CoderService],\n\tactions: [\n\t\treadFile,\n\t\tlistFiles,\n\t\tsearchFiles,\n\t\twriteFile,\n\t\teditFile,\n\t\tchangeDirectory,\n\t\texecuteShell,\n\t\tgit,\n\t],\n\tproviders: [coderStatusProvider],\n};\n\nexport default coderPlugin;\n\n// Actions (Eliza Action interface)\nexport * from \"./actions\";\n// CodingAction system - Claude Code-style function-calling actions\nexport { configureCodingTools } from \"./configureCodingTools\";\n// Providers\nexport { coderStatusProvider } from \"./providers/coderStatusProvider\";\n// Services\nexport { CoderService } from \"./services/coderService\";\n// Other types and utilities\nexport type {\n\tCoderConfig,\n\tCodingAction,\n\tCodingActionAvailabilityContext,\n\tCodingActionContentItem,\n\tCodingActionContext,\n\tCodingActionResult,\n\tCodingActionUpdateCallback,\n\tCodingToolsOptions,\n\tCommandHistoryEntry,\n\tCommandResult,\n\tFileOperation,\n\tFileOperationType,\n} from \"./types\";\nexport * from \"./utils\";\n"
21
21
  ],
22
- "mappings": "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",
22
+ "mappings": "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",
23
23
  "debugId": "69540CB5358EFA9F64756E2164756E21",
24
24
  "names": []
25
25
  }
package/package.json CHANGED
@@ -1,70 +1,98 @@
1
1
  {
2
- "name": "@elizaos/plugin-code",
3
- "version": "2.0.0-alpha.5",
4
- "description": "Coder tools plugin for ElizaOS (filesystem + shell + git)",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "module": "dist/index.js",
8
- "types": "dist/index.d.ts",
9
- "sideEffects": false,
10
- "repository": {
11
- "type": "git",
12
- "url": "https://github.com/elizaos/eliza.git"
13
- },
14
- "exports": {
15
- "./package.json": "./package.json",
16
- ".": {
17
- "types": "./dist/index.d.ts",
18
- "import": "./dist/index.js",
19
- "default": "./dist/index.js"
20
- }
21
- },
22
- "files": [
23
- "dist"
24
- ],
25
- "keywords": [
26
- "eliza",
27
- "plugin",
28
- "coding",
29
- "filesystem",
30
- "shell",
31
- "git"
32
- ],
33
- "author": "elizaOS",
34
- "license": "MIT",
35
- "dependencies": {
36
- "@elizaos/core": "2.0.0-alpha.3",
37
- "@elizaos/plugin-shell": "2.0.0-alpha.3",
38
- "zod": "^4.3.6"
39
- },
40
- "devDependencies": {
41
- "@biomejs/biome": "^2.3.11",
42
- "@types/node": "^25.0.3",
43
- "typescript": "^5.9.3",
44
- "vitest": "^4.0.0"
45
- },
46
- "scripts": {
47
- "build": "bun run build.ts",
48
- "build:ts": "bun run build.ts",
49
- "dev": "bun --hot build.ts",
50
- "clean": "rm -rf dist .turbo node_modules",
51
- "test": "vitest run",
52
- "typecheck": "tsc --noEmit",
53
- "lint": "bunx @biomejs/biome check --write --unsafe .",
54
- "lint:check": "bunx @biomejs/biome check .",
55
- "format": "bunx @biomejs/biome format --write .",
56
- "format:check": "bunx @biomejs/biome format ."
57
- },
58
- "publishConfig": {
59
- "access": "public"
60
- },
61
- "milaidy": {
62
- "platforms": [
63
- "node"
64
- ],
65
- "runtime": "node",
66
- "platformDetails": {
67
- "node": "Default export (Node.js)"
68
- }
69
- }
2
+ "name": "@elizaos/plugin-code",
3
+ "version": "2.0.0-alpha.7",
4
+ "description": "Coder tools plugin for ElizaOS (filesystem + shell + git)",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "sideEffects": false,
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/elizaos/eliza.git"
13
+ },
14
+ "exports": {
15
+ "./package.json": "./package.json",
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js",
19
+ "default": "./dist/index.js"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "keywords": [
26
+ "eliza",
27
+ "plugin",
28
+ "coding",
29
+ "filesystem",
30
+ "shell",
31
+ "git"
32
+ ],
33
+ "author": "elizaOS",
34
+ "license": "MIT",
35
+ "dependencies": {
36
+ "@elizaos/core": "2.0.0-alpha.3",
37
+ "@elizaos/plugin-shell": "2.0.0-alpha.3",
38
+ "zod": "^4.3.6"
39
+ },
40
+ "devDependencies": {
41
+ "@biomejs/biome": "^2.3.11",
42
+ "@types/node": "^25.0.3",
43
+ "typescript": "^5.9.3",
44
+ "vitest": "^4.0.0"
45
+ },
46
+ "scripts": {
47
+ "build": "bun run build.ts",
48
+ "build:ts": "bun run build.ts",
49
+ "dev": "bun --hot build.ts",
50
+ "clean": "rm -rf dist .turbo node_modules",
51
+ "test": "vitest run",
52
+ "typecheck": "tsc --noEmit",
53
+ "lint": "bunx @biomejs/biome check --write --unsafe .",
54
+ "lint:check": "bunx @biomejs/biome check .",
55
+ "format": "bunx @biomejs/biome format --write .",
56
+ "format:check": "bunx @biomejs/biome format ."
57
+ },
58
+ "publishConfig": {
59
+ "access": "public"
60
+ },
61
+ "milaidy": {
62
+ "platforms": [
63
+ "node"
64
+ ],
65
+ "runtime": "node",
66
+ "platformDetails": {
67
+ "node": "Default export (Node.js)"
68
+ }
69
+ },
70
+ "agentConfig": {
71
+ "pluginParameters": {
72
+ "CODER_ENABLED": {
73
+ "type": "boolean",
74
+ "description": "Enable or disable this feature",
75
+ "required": false,
76
+ "sensitive": false
77
+ },
78
+ "CODER_ALLOWED_DIRECTORY": {
79
+ "type": "string",
80
+ "description": "Allowed directory for file operations",
81
+ "required": false,
82
+ "sensitive": false
83
+ },
84
+ "CODER_TIMEOUT": {
85
+ "type": "number",
86
+ "description": "Coder timeout",
87
+ "required": false,
88
+ "sensitive": false
89
+ },
90
+ "CODER_FORBIDDEN_COMMANDS": {
91
+ "type": "string",
92
+ "description": "Comma-separated list of forbidden commands",
93
+ "required": false,
94
+ "sensitive": false
95
+ }
96
+ }
97
+ }
70
98
  }