@amical/aiagent-sdk 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +11 -3
- package/dist/index.d.ts +11 -3
- package/dist/index.js +61 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +61 -6
- package/dist/index.mjs.map +1 -1
- package/dist/runtime/nodeRuntime.d.mts +3 -3
- package/dist/runtime/nodeRuntime.d.ts +3 -3
- package/dist/runtime/nodeRuntime.js +94 -16
- package/dist/runtime/nodeRuntime.js.map +1 -1
- package/dist/runtime/nodeRuntime.mjs +93 -15
- package/dist/runtime/nodeRuntime.mjs.map +1 -1
- package/dist/runtime/webRuntime.d.mts +3 -2
- package/dist/runtime/webRuntime.d.ts +3 -2
- package/dist/runtime/webRuntime.js +85 -10
- package/dist/runtime/webRuntime.js.map +1 -1
- package/dist/runtime/webRuntime.mjs +85 -10
- package/dist/runtime/webRuntime.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/shared/tools.ts","../src/parser/parse-assistant-message.ts","../src/parser/index.ts","../src/agent/Agent.ts","../src/index.ts"],"names":["AgentDefaultTool","toolParamNames","AgentState","files"],"mappings":"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","file":"index.mjs","sourcesContent":["export enum AgentDefaultTool {\n ASK = \"agent_ask_followup_question\",\n ATTEMPT = \"agent_attempt_completion\",\n BASH = \"agent_execute_command\",\n FILE_EDIT = \"agent_replace_in_file\",\n FILE_READ = \"agent_read_file\",\n FILE_NEW = \"agent_write_to_file\",\n FILE_DELETE = \"agent_delete_file\",\n DIR_DELETE = \"agent_delete_directory\",\n SEARCH = \"agent_search_files\",\n LIST_FILES = \"agent_list_files\",\n LIST_CODE_DEF = \"agent_list_code_definition_names\",\n BROWSER = \"agent_browser_action\",\n MCP_USE = \"agent_use_mcp_tool\",\n MCP_ACCESS = \"agent_access_mcp_resource\",\n MCP_DOCS = \"agent_load_mcp_documentation\",\n NEW_TASK = \"agent_new_task\",\n PLAN_MODE = \"agent_plan_mode_respond\",\n ACT_MODE = \"agent_act_mode_respond\",\n TODO = \"agent_focus_chain\",\n WEB_FETCH = \"agent_web_fetch\",\n WEB_SEARCH = \"agent_web_search\",\n CONDENSE = \"agent_condense\",\n SUMMARIZE_TASK = \"agent_summarize_task\",\n REPORT_BUG = \"agent_report_bug\",\n NEW_RULE = \"agent_new_rule\",\n APPLY_PATCH = \"agent_apply_patch\",\n GENERATE_EXPLANATION = \"agent_generate_explanation\",\n LOAD_SKILL = \"agent_load_skill\",\n USE_SUBAGENTS = \"agent_use_subagents\",\n}\n\nexport const TOOL_RESULT_BLOCK = 'tool_call_result';\n\nexport const defaultTools = [\n {\n name: AgentDefaultTool.ASK,\n description: \"Ask the user a clarifying question if more information is needed.\",\n params: {\n question: \"The question to ask the user.\",\n },\n },\n {\n name: AgentDefaultTool.ATTEMPT,\n description: \"After each tool use, the user will respond with the result of that tool use, i.e. if it succeeded or failed, along with any reasons for failure. Once you've received the results of tool uses and can confirm that the task is complete, use this tool to present the result of your work to the user. Optionally you may provide a CLI command to showcase the result of your work. The user may respond with feedback if they are not satisfied with the result, which you can use to make improvements and try again. IMPORTANT NOTE: This tool CANNOT be used until you've confirmed from the user that any previous tool uses were successful. Failure to do so will result in code corruption and system failure. Before using this tool, you must ask yourself in tags if you've confirmed from the user that any previous tool uses were successful. If not, then DO NOT use this tool. If you were using task_progress to update the task progress, you must include the completed list in the result as well.\",\n params: {\n result: \"(required) The result of the tool use. This should be a clear, specific description of the result.\",\n },\n example: `## Example: ${AgentDefaultTool.ATTEMPT}\n<${AgentDefaultTool.ATTEMPT}>\n<result>final result or message</result>\n<task_progress>\n- [x] Set up project structure\n- [x] Install dependencies\n- [x] Run command to start server\n- [x] Test application\n</task_progress>\n</${AgentDefaultTool.ATTEMPT}>`,\n },\n {\n name: AgentDefaultTool.BASH,\n description: \"Request to execute a CLI command on the system. Use this when you need to perform system operations or run specific commands to accomplish any step in the user's task. You must tailor your command to the user's system and provide a clear explanation of what the command does. For command chaining, use the appropriate chaining syntax for the user's shell. Prefer to execute complex CLI commands over creating executable scripts, as they are more flexible and easier to run. Commands will be executed in the current working directory: ${context.cwd} Use @workspace:path syntax (e.g., @frontend:src/index.ts) to specify a workspace.\",\n params: {\n command: \"(required) The CLI command to execute. This should be valid for the current operating system. Ensure the command is properly formatted and does not contain any harmful instructions.\",\n },\n example: `## Example: Requesting to execute a command\n\n<${AgentDefaultTool.BASH}>\n<command>npm run dev</command>\n<requires_approval>false</requires_approval>\n<task_progress>\n- [x] Set up project structure\n- [x] Install dependencies\n- [ ] Run command to start server\n- [ ] Test application\n</task_progress>\n</${AgentDefaultTool.BASH}>`,\n },\n {\n name: AgentDefaultTool.FILE_EDIT,\n description: \"Replace specific content in a file using a search/replace diff block.\",\n params: {\n path: \"(required) The absolute or relative file path to modify.\",\n diff: \"(required) The diff content to apply.\",\n },\n example: `## Example: Requesting to make targeted edits to a file\n\n<${AgentDefaultTool.FILE_EDIT}>\n<path>src/components/App.tsx</path>\n<diff>\n------- SEARCH\nimport React from 'react';\n=======\nimport React, { useState } from 'react';\n+++++++ REPLACE\n\n------- SEARCH\nfunction handleSubmit() {\n saveData();\n setLoading(false);\n}\n\n=======\n+++++++ REPLACE\n\n------- SEARCH\nreturn (\n <div>\n=======\nfunction handleSubmit() {\n saveData();\n setLoading(false);\n}\n\nreturn (\n <div>\n+++++++ REPLACE\n</diff>\n<task_progress>\n- [x] Set up project structure\n- [x] Install dependencies\n- [ ] Create components\n- [ ] Test application\n</task_progress>\n</${AgentDefaultTool.FILE_EDIT}>`,\n },\n {\n name: AgentDefaultTool.FILE_READ,\n description: \"Read the contents of a specific file.\",\n params: {\n path: \"(required) The absolute or relative file path to read.\",\n },\n },\n {\n name: AgentDefaultTool.FILE_NEW,\n description: \"Create or overwrite a file with new content.\",\n params: {\n path: \"(required) The path of the file to write to (relative to the current working directory ${context.cwd}) Use @workspace:path syntax (e.g., @frontend:src/index.ts) to specify a workspace.\",\n content: \"(required) The content to write to the file.\",\n },\n example: `## Example: Requesting to create a new file\n\n<${AgentDefaultTool.FILE_NEW}>\n<path>src/frontend-config.json</path>\n<content>\n{\n \"apiEndpoint\": \"https://api.example.com\",\n \"theme\": {\n \"primaryColor\": \"#007bff\",\n \"secondaryColor\": \"#6c757d\",\n \"fontFamily\": \"Arial, sans-serif\"\n },\n \"features\": {\n \"darkMode\": true,\n \"notifications\": true,\n \"analytics\": false\n },\n \"version\": \"1.0.0\"\n}\n</content>\n<task_progress>\n- [x] Set up project structure\n- [x] Install dependencies\n- [x] Create components\n- [ ] Test application\n</task_progress>\n</${AgentDefaultTool.FILE_NEW}>`\n },\n {\n name: AgentDefaultTool.FILE_DELETE,\n description: \"Delete a file.\",\n params: {\n path: \"(required) The path of the file to delete to (relative to the current working directory ${context.cwd}) Use @workspace:path syntax (e.g., @frontend:src/index.ts) to specify a workspace.\",\n },\n },\n {\n name: AgentDefaultTool.DIR_DELETE,\n description: \"Delete a directory.\",\n params: {\n path: \"(required) The path of the directory to delete to (relative to the current working directory ${context.cwd}) Use @workspace:path syntax (e.g., @frontend:src/index.ts) to specify a workspace.\",\n },\n },\n {\n name: AgentDefaultTool.SEARCH,\n description: \"Search for files in a directory that match a regex pattern or glob pattern.\",\n params: {\n path: \"(required) The absolute or relative directory path to search.\",\n regex: \"(required) The regex pattern to match files against.\",\n file_pattern: \"(optional) glob pattern like *.ts.\",\n },\n },\n {\n name: AgentDefaultTool.LIST_FILES,\n description: \"List all files in a directory.\",\n params: {\n path: \"(required) The absolute or relative directory path to list.\",\n },\n },\n //================\n {\n name: AgentDefaultTool.NEW_TASK,\n description: \"Create a new task with a given context.\",\n params: {\n context: \"(required) The context of the new task.\",\n },\n example: `## Example: Creating a new task\n<${AgentDefaultTool.NEW_TASK}>\n<context>\n1. Current Work:\n [Detailed description]\n\n2. Key Technical Concepts:\n - [Concept 1]\n - [Concept 2]\n - [...]\n\n3. Relevant Files and Code:\n - [File Name 1]\n - [Summary of why this file is important]\n - [Summary of the changes made to this file, if any]\n - [Important Code Snippet]\n - [File Name 2]\n - [Important Code Snippet]\n - [...]\n\n4. Problem Solving:\n [Detailed description]\n\n5. Pending Tasks and Next Steps:\n - [Task 1 details & next steps]\n - [Task 2 details & next steps]\n - [...]\n</context>\n</${AgentDefaultTool.NEW_TASK}>`,\n },\n {\n name: AgentDefaultTool.LOAD_SKILL,\n description: \"Load a skill to perform a task. important: skill_name is required. must use this tool to load the skill; do not use any other method to read it.\",\n params: {\n skill_name: \"(required) The name of the skill to load.\",\n },\n },\n] as const; \n\nexport const toolUseNames = Object.values(AgentDefaultTool) as AgentDefaultTool[];\n\nconst dynamicToolUseNamesByNamespace = new Map<string, Set<string>>();\n\nexport function setDynamicToolUseNames(namespace: string, names: string[]): void {\n dynamicToolUseNamesByNamespace.set(namespace, new Set(names.map((name) => name.trim()).filter(Boolean)));\n}\n\nexport function getToolUseNames(): string[] {\n const defaults = [...toolUseNames];\n const dynamic = Array.from(dynamicToolUseNamesByNamespace.values()).flatMap((set) => Array.from(set));\n return Array.from(new Set([...defaults, ...dynamic]));\n}\n\nexport const READ_ONLY_TOOLS = [\n AgentDefaultTool.LIST_FILES,\n AgentDefaultTool.FILE_READ,\n AgentDefaultTool.SEARCH,\n AgentDefaultTool.LIST_CODE_DEF,\n AgentDefaultTool.BROWSER,\n AgentDefaultTool.ASK,\n AgentDefaultTool.WEB_SEARCH,\n AgentDefaultTool.WEB_FETCH,\n AgentDefaultTool.LOAD_SKILL,\n AgentDefaultTool.USE_SUBAGENTS,\n] as const;\n","import { AgentDefaultTool, getToolUseNames } from \"../shared/tools\"\nimport { nanoid } from \"nanoid\"\nimport { AssistantMessageContent, TextStreamContent, ToolParamName, ToolUse } from \"./index\" // Assuming types are defined in index.ts or a similar file\n\n// parseAssistantmessageV1 removed in https://github.com/cline/cline/pull/5425\n\n/**\n * @description **Version 2**\n * Parses an assistant message string potentially containing mixed text and tool usage blocks\n * marked with XML-like tags into an array of structured content objects.\n *\n * This version aims for efficiency by avoiding the character-by-character accumulator of V1.\n * It iterates through the string using an index `i`. At each position, it checks if the substring\n * *ending* at `i` matches any known opening or closing tags for tools or parameters using `startsWith`\n * with an offset.\n * It uses pre-computed Maps (`toolUseOpenTags`, `toolParamOpenTags`) for quick tag lookups.\n * State is managed using indices (`currentTextContentStart`, `currentToolUseStart`, `currentParamValueStart`)\n * pointing to the start of the current block within the original `assistantMessage` string.\n * Slicing is used to extract content only when a block (text, parameter, or tool use) is completed.\n * Special handling for `write_to_file` and `new_rule` content parameters is included, using `indexOf`\n * and `lastIndexOf` on the relevant slice to handle potentially nested closing tags.\n * If the input string ends mid-block, the last open block is added and marked as partial.\n *\n * @param assistantMessage The raw string output from the assistant.\n * @returns An array of `AssistantMessageContent` objects, which can be `TextContent` or `ToolUse`.\n * Blocks that were not fully closed by the end of the input string will have their `partial` flag set to `true`.\n */\nexport function parseAssistantMessageV2(assistantMessage: string, toolParamNames: any): AssistantMessageContent[] {\n\tconst contentBlocks: AssistantMessageContent[] = []\n\tlet currentTextContentStart = 0 // Index where the current text block started\n\tlet currentTextContent: TextStreamContent | undefined\n\tlet currentToolUseStart = 0 // Index *after* the opening tag of the current tool use\n\tlet currentToolUse: ToolUse | undefined\n\tlet currentParamValueStart = 0 // Index *after* the opening tag of the current param\n\tlet currentParamName: ToolParamName | undefined\n\n\t// Precompute tags for faster lookups\n\tconst toolUseOpenTags = new Map<string, string>()\n\tconst toolParamOpenTags = new Map<string, ToolParamName>()\n\tfor (const name of getToolUseNames()) {\n\t\ttoolUseOpenTags.set(`<${name}>`, name)\n\t}\n\tfor (const name of toolParamNames) {\n\t\ttoolParamOpenTags.set(`<${name}>`, name)\n\t}\n\n\tconst len = assistantMessage.length\n\tfor (let i = 0; i < len; i++) {\n\t\tconst currentCharIndex = i\n\n\t\t// --- State: Parsing a Tool Parameter ---\n\t\tif (currentToolUse && currentParamName) {\n\t\t\tconst closeTag = `</${currentParamName}>`\n\t\t\t// Check if the string *ending* at index `i` matches the closing tag\n\t\t\tif (\n\t\t\t\tcurrentCharIndex >= closeTag.length - 1 &&\n\t\t\t\tassistantMessage.startsWith(\n\t\t\t\t\tcloseTag,\n\t\t\t\t\tcurrentCharIndex - closeTag.length + 1, // Start checking from potential start of tag\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// Found the closing tag for the parameter\n\t\t\t\tconst value = assistantMessage\n\t\t\t\t\t.slice(\n\t\t\t\t\t\tcurrentParamValueStart, // Start after the opening tag\n\t\t\t\t\t\tcurrentCharIndex - closeTag.length + 1, // End before the closing tag\n\t\t\t\t\t)\n\t\t\t\t\t.trim()\n\t\t\t\tcurrentToolUse.params[currentParamName] = value\n\t\t\t\tcurrentParamName = undefined // Go back to parsing tool content\n\t\t\t\t// We don't continue loop here, need to check for tool close or other params at index i\n\t\t\t} else {\n\t\t\t\tcontinue // Still inside param value, move to next char\n\t\t\t}\n\t\t}\n\n\t\t// --- State: Parsing a Tool Use (but not a specific parameter) ---\n\t\tif (currentToolUse && !currentParamName) {\n\t\t\t// Ensure we are not inside a parameter already\n\t\t\t// Check if starting a new parameter\n\t\t\tlet startedNewParam = false\n\t\t\tfor (const [tag, paramName] of toolParamOpenTags.entries()) {\n\t\t\t\tif (currentCharIndex >= tag.length - 1 && assistantMessage.startsWith(tag, currentCharIndex - tag.length + 1)) {\n\t\t\t\t\tcurrentParamName = paramName\n\t\t\t\t\tcurrentParamValueStart = currentCharIndex + 1 // Value starts after the tag\n\t\t\t\t\tstartedNewParam = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (startedNewParam) {\n\t\t\t\tcontinue // Handled start of param, move to next char\n\t\t\t}\n\n\t\t\t// Check if closing the current tool use\n\t\t\tconst toolCloseTag = `</${currentToolUse.name}>`\n\t\t\tif (\n\t\t\t\tcurrentCharIndex >= toolCloseTag.length - 1 &&\n\t\t\t\tassistantMessage.startsWith(toolCloseTag, currentCharIndex - toolCloseTag.length + 1)\n\t\t\t) {\n\t\t\t\t// End of the tool use found\n\t\t\t\t// Special handling for content params *before* finalizing the tool\n\t\t\t\tconst toolContentSlice = assistantMessage.slice(\n\t\t\t\t\tcurrentToolUseStart, // From after the tool opening tag\n\t\t\t\t\tcurrentCharIndex - toolCloseTag.length + 1, // To before the tool closing tag\n\t\t\t\t)\n\n\t\t\t\t// Check if content parameter needs special handling (write_to_file/new_rule)\n\t\t\t\t// This check is important if the closing </content> tag was missed by the parameter parsing logic\n\t\t\t\t// (e.g., if content is empty or parsing logic prioritizes tool close)\n\t\t\t\tconst contentParamName: ToolParamName = \"content\"\n\t\t\t\tif (\n\t\t\t\t\tcurrentToolUse.name === AgentDefaultTool.FILE_NEW /* || currentToolUse.name === \"new_rule\" */ &&\n\t\t\t\t\ttoolContentSlice.includes(`<${contentParamName}>`)\n\t\t\t\t) {\n\t\t\t\t\tconst contentStartTag = `<${contentParamName}>`\n\t\t\t\t\tconst contentEndTag = `</${contentParamName}>`\n\t\t\t\t\tconst contentStart = toolContentSlice.indexOf(contentStartTag)\n\t\t\t\t\t// Use lastIndexOf for robustness against nested tags\n\t\t\t\t\tconst contentEnd = toolContentSlice.lastIndexOf(contentEndTag)\n\n\t\t\t\t\tif (contentStart !== -1 && contentEnd !== -1 && contentEnd > contentStart) {\n\t\t\t\t\t\tconst contentValue = toolContentSlice.slice(contentStart + contentStartTag.length, contentEnd).trim()\n\t\t\t\t\t\tcurrentToolUse.params[contentParamName] = contentValue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcurrentToolUse.partial = false // Mark as complete\n\t\t\t\tcontentBlocks.push(currentToolUse)\n\t\t\t\tcurrentToolUse = undefined // Reset state\n\t\t\t\tcurrentTextContentStart = currentCharIndex + 1 // Potential text starts after this tag\n\t\t\t\tcontinue // Move to next char\n\t\t\t}\n\t\t\t// If not starting a param and not closing the tool, continue accumulating tool content implicitly\n\t\t\tcontinue\n\t\t}\n\n\t\t// --- State: Parsing Text / Looking for Tool Start ---\n\t\tif (!currentToolUse) {\n\t\t\t// Check if starting a new tool use\n\t\t\tlet startedNewTool = false\n\t\t\tfor (const [tag, toolName] of toolUseOpenTags.entries()) {\n\t\t\t\tif (currentCharIndex >= tag.length - 1 && assistantMessage.startsWith(tag, currentCharIndex - tag.length + 1)) {\n\t\t\t\t\t// End current text block if one was active\n\t\t\t\t\tif (currentTextContent) {\n\t\t\t\t\t\tcurrentTextContent.content = assistantMessage\n\t\t\t\t\t\t\t.slice(\n\t\t\t\t\t\t\t\tcurrentTextContentStart, // From where text started\n\t\t\t\t\t\t\t\tcurrentCharIndex - tag.length + 1, // To before the tool tag starts\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.trim()\n\t\t\t\t\t\tcurrentTextContent.partial = false // Ended because tool started\n\t\t\t\t\t\tif (currentTextContent.content.length > 0) {\n\t\t\t\t\t\t\tcontentBlocks.push(currentTextContent)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentTextContent = undefined\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Check for any text between the last block and this tag\n\t\t\t\t\t\tconst potentialText = assistantMessage\n\t\t\t\t\t\t\t.slice(\n\t\t\t\t\t\t\t\tcurrentTextContentStart, // From where text *might* have started\n\t\t\t\t\t\t\t\tcurrentCharIndex - tag.length + 1, // To before the tool tag starts\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.trim()\n\t\t\t\t\t\tif (potentialText.length > 0) {\n\t\t\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\tcontent: potentialText,\n\t\t\t\t\t\t\t\tpartial: false,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Start the new tool use\n\t\t\t\t\tcurrentToolUse = {\n\t\t\t\t\t\ttype: \"tool_use\",\n\t\t\t\t\t\tname: toolName as ToolParamName,\n\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\tpartial: true, // Assume partial until closing tag is found\n\t\t\t\t\t\tcall_id: nanoid(8),\n\t\t\t\t\t\tisNativeToolCall: false,\n\t\t\t\t\t}\n\t\t\t\t\tcurrentToolUseStart = currentCharIndex + 1 // Tool content starts after the opening tag\n\t\t\t\t\tstartedNewTool = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (startedNewTool) {\n\t\t\t\tcontinue // Handled start of tool, move to next char\n\t\t\t}\n\n\t\t\t// If not starting a tool, it must be text content\n\t\t\tif (!currentTextContent) {\n\t\t\t\t// Start a new text block if we aren't already in one\n\t\t\t\tcurrentTextContentStart = currentCharIndex // Text starts at the current character\n\t\t\t\t// Check if the current char is the start of potential text *immediately* after a tag\n\t\t\t\t// This needs the previous state - simpler to let slicing handle it later.\n\t\t\t\t// Resetting start index accurately is key.\n\t\t\t\t// It should be the index *after* the last processed tag.\n\t\t\t\t// The logic managing currentTextContentStart after closing tags handles this.\n\n\t\t\t\tcurrentTextContent = {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\tcontent: \"\", // Will be determined by slicing at the end or when a tool starts\n\t\t\t\t\tpartial: true,\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Continue accumulating text implicitly; content is extracted later.\n\t\t}\n\t} // End of loop\n\n\t// --- Finalization after loop ---\n\n\t// Finalize any open parameter within an open tool use\n\tif (currentToolUse && currentParamName) {\n\t\tcurrentToolUse.params[currentParamName] = assistantMessage\n\t\t\t.slice(currentParamValueStart) // From param start to end of string\n\t\t\t.trim()\n\t\t// Tool use remains partial\n\t}\n\n\t// Finalize any open tool use (which might contain the finalized partial param)\n\tif (currentToolUse) {\n\t\t// Tool use is partial because the loop finished before its closing tag\n\t\tcontentBlocks.push(currentToolUse)\n\t}\n\t// Finalize any trailing text content\n\t// Only possible if a tool use wasn't open at the very end\n\telse if (currentTextContent) {\n\t\tcurrentTextContent.content = assistantMessage\n\t\t\t.slice(currentTextContentStart) // From text start to end of string\n\t\t\t.trim()\n\t\t// Text is partial because the loop finished\n\t\tif (currentTextContent.content.length > 0) {\n\t\t\tcontentBlocks.push(currentTextContent)\n\t\t}\n\t}\n\n\treturn contentBlocks\n}\n","import { AgentDefaultTool } from \"../shared/tools\"\n\nexport type AssistantMessageContent = TextStreamContent | ToolUse | ReasoningStreamContent\n\nexport { parseAssistantMessageV2 } from \"./parse-assistant-message\"\n\nexport interface TextStreamContent {\n\ttype: \"text\"\n\tcontent: string\n\tpartial: boolean\n}\n\nexport const toolParamNames = [\n\t\"command\",\n\t\"requires_approval\",\n\t\"path\",\n\t\"absolutePath\",\n\t\"content\",\n\t\"diff\",\n\t\"regex\",\n\t\"file_pattern\",\n\t\"recursive\",\n\t\"action\",\n\t\"url\",\n\t\"coordinate\",\n\t\"text\",\n\t\"query\",\n\t\"allowed_domains\",\n\t\"blocked_domains\",\n\t\"prompt\",\n\t\"server_name\",\n\t\"tool_name\",\n\t\"arguments\",\n\t\"uri\",\n\t\"question\",\n\t\"options\",\n\t\"response\",\n\t\"result\",\n\t\"context\",\n\t\"title\",\n\t\"what_happened\",\n\t\"steps_to_reproduce\",\n\t\"api_request_output\",\n\t\"additional_context\",\n\t\"needs_more_exploration\",\n\t\"task_progress\",\n\t\"timeout\",\n\t\"input\",\n\t\"from_ref\",\n\t\"to_ref\",\n\t\"skill_name\",\n\t\"prompt_1\",\n\t\"prompt_2\",\n\t\"prompt_3\",\n\t\"prompt_4\",\n\t\"prompt_5\",\n\t\"start_line\",\n\t\"end_line\",\n] as const\n\nexport type ToolParamName = (typeof toolParamNames)[number]\n\nexport interface ToolUse {\n\ttype: \"tool_use\"\n\tname: AgentDefaultTool | string // id of the tool being used\n\t// params is a partial record, allowing only some or none of the possible parameters to be used\n\tparams: Partial<Record<ToolParamName, string>>\n\tpartial: boolean\n\t/**\n\t * Whether this tool use was initiated by a native tool call\n\t */\n\tisNativeToolCall?: boolean\n\t/**\n\t * The call / response ID this tool use is associated with.\n\t */\n\tcall_id?: string // optional call ID for tracking tool use calls\n\t/**\n\t * Thought signature associated with this tool use, used by Gemini\n\t */\n\tsignature?: string\n}\n\nexport interface ReasoningStreamContent {\n\ttype: \"reasoning\"\n\t/**\n\t * The reasoning text generated by the model.\n\t * Redacted reasoning block will have this field set to \"[REDACTED]\" or an empty string.\n\t */\n\treasoning: string\n\t/**\n\t * openrouter has various properties that we can pass back unmodified in api requests to preserve reasoning traces\n\t */\n\tdetails?: any\n\t/**\n\t * It's used when sending the thinking block back to the API.\n\t * API expects this in completed form, not as array of deltas.\n\t */\n\tsignature?: string\n\t/**\n\t * whether this reasoning block has been redacted\n\t */\n\tredacted?: boolean\n\t/**\n\t * redacted data\n\t */\n\tdata?: string\n\t/**\n\t * Indicates whether this is a partial reasoning block\n\t */\n\tpartial: boolean\n}\n","import { IAgentRuntime } from '../runtime';\nimport { IApiHandler, ApiStreamChunk } from '../llm/index';\nimport { IPromptManager } from '../prompt/index';\nimport { IMemoryManager, AgentMessage } from '../memory/index';\nimport { IMcpManager } from '../mcp/index';\nimport { parseAssistantMessageV2, ToolUse, toolParamNames } from '../parser/index';\nimport { AgentDefaultTool, setDynamicToolUseNames, TOOL_RESULT_BLOCK } from '../shared/tools';\nimport matter from 'gray-matter';\n\n/**\n * Agent 初始化配置依赖\n */\nexport interface AgentOptions {\n runtime: IAgentRuntime;\n api: IApiHandler;\n promptManager: IPromptManager;\n memory: IMemoryManager;\n mcp?: IMcpManager;\n customTools?: any[];\n allowDefaultTools?: string[];\n customInstructions?: string;\n /** 最大循环次数,默认150 */\n maxLoopCount?: number;\n}\n\n/**\n * Agent 状态\n */\nexport enum AgentState {\n IDLE = 'idle',\n THINKING = 'thinking',\n WAITING_FOR_USER = 'waiting_for_user',\n FINISHED = 'finished',\n ERROR = 'error',\n}\n\n/**\n * ClineAgent 核心逻辑循环状态机\n * 它独立于 VS Code 或 Node 环境,纯粹通过依赖注入的方式执行工作流。\n */\nexport class ClineAgent {\n private runtime: IAgentRuntime;\n private api: IApiHandler;\n private promptManager: IPromptManager;\n private memory: IMemoryManager;\n private mcp?: IMcpManager;\n\n public state: AgentState = AgentState.IDLE;\n public allToolParamNames: string[] = [...toolParamNames];\n /** 循环计数器 */\n private loopCount: number = 0;\n /** 最大循环次数 */\n private maxLoopCount: number;\n\n skillDir: string;\n rulesDir: string;\n customTools: any[];\n customToolNames: Set<string>;\n allowDefaultTools?: string[];\n customInstructions?: string;\n\n sysPrompt?: string;\n noUseTollSysPrompt?: string;\n\n // 简单的事件回调系统,供宿主环境注册以监听 Agent 内部事件\n public onStateChange?: (state: AgentState) => void;\n public onStreamChunk?: (chunk: ApiStreamChunk) => void;\n public onToolCall?: (tool: ToolUse) => Promise<any | void>;\n\n constructor(options: AgentOptions) {\n this.runtime = options.runtime;\n this.api = options.api;\n this.promptManager = options.promptManager;\n this.memory = options.memory;\n this.mcp = options.mcp;\n this.maxLoopCount = options.maxLoopCount ?? 150;\n this.customTools = options.customTools || [];\n this.allowDefaultTools = options.allowDefaultTools;\n if (this.allowDefaultTools && !this.allowDefaultTools.includes(AgentDefaultTool.ATTEMPT)) {\n this.allowDefaultTools.push(AgentDefaultTool.ATTEMPT);\n }\n this.customInstructions = options.customInstructions;\n if (this.customTools.length > 0) {\n const dynamicToolNames = new Set<string>();\n const customToolParams = new Set<string>();\n for (const customTool of this.customTools) {\n dynamicToolNames.add(customTool.name);\n if (customTool.params) {\n for (const key in customTool.params) {\n if (!Object.hasOwn(customTool.params, key)) continue;\n customToolParams.add(key);\n }\n }\n }\n\n // 检测和内置工具的重复,抛出错误\n const defaultToolNames = Object.values(AgentDefaultTool);\n const overlappingTools = Array.from(dynamicToolNames).filter((name: any) => defaultToolNames.includes(name));\n if (overlappingTools.length > 0) {\n throw new Error(`Custom tools and default tools have overlapping names: ${overlappingTools.join(', ')}`);\n }\n\n if (dynamicToolNames.size > 0) {\n setDynamicToolUseNames('customUser', Array.from(dynamicToolNames));\n }\n if (customToolParams.size > 0) {\n this.allToolParamNames = Array.from(new Set([...this.allToolParamNames, ...Array.from(customToolParams)]));\n }\n }\n this.customToolNames = new Set<string>(this.customTools.map((t: any) => t.name));\n this.skillDir = this.runtime.path.join(this.runtime.env.cwd(), '.agents/skills');\n this.rulesDir = this.runtime.path.join(this.runtime.env.cwd(), '.agents/rules');\n }\n\n private setState(newState: AgentState) {\n this.state = newState;\n if (this.onStateChange) {\n this.onStateChange(newState);\n }\n }\n\n /**\n * 获取当前 Agent 的系统提示词 \n * 如果 force 为 true,则强制重新获取系统提示词\n */\n public async getPrompt(force = false) {\n if (!force && this.sysPrompt && this.noUseTollSysPrompt) {\n return { sysPrompt: this.sysPrompt, noUseTollSysPrompt: this.noUseTollSysPrompt };\n }\n\n const context = {\n cwd: this.runtime.env.cwd(),\n os: this.runtime.env.osInfo(),\n shell: this.runtime.env.shell(),\n skills: await this.getSkills(),\n agentRules: await this.getAgentRules(),\n customTools: this.customTools,\n allowDefaultTools: this.allowDefaultTools,\n customInstructions: this.customInstructions,\n };\n // 1. 获取动态系统提示词\n this.sysPrompt = await this.promptManager.getSystemPrompt(context);\n this.noUseTollSysPrompt = this.promptManager.getNoUseToolInstructions(context);\n\n return { sysPrompt: this.sysPrompt, noUseTollSysPrompt: this.noUseTollSysPrompt };\n }\n\n /**\n * 启动一个新的任务\n */\n public async startTask(taskDescription: AgentMessage['content']): Promise<void> {\n this.setState(AgentState.THINKING);\n try {\n await this.memory.clear();\n // 重置循环计数器\n this.loopCount = 0;\n await this.memory.appendMessage({\n role: 'user',\n content: taskDescription,\n });\n\n await this.loop();\n } catch (err) {\n this.setState(AgentState.ERROR);\n throw err;\n }\n }\n\n /**\n * 读取项目级 Agent Rules:\n * 1. ${cwd}/Agents.md\n * 2. ${cwd}/.agents/rules/ 一级目录下所有 .md 文件\n * 将内容合并为一段文本,供系统提示词注入。\n */\n private async getAgentRules(): Promise<string> {\n const cwd = this.runtime.env.cwd();\n const rules: string[] = [];\n\n // 1. Agents.md\n const agentsMdPath = this.runtime.path.join(cwd, 'Agents.md');\n try {\n if (await this.runtime.fs.fileExists(agentsMdPath)) {\n const content = await this.runtime.fs.readFile(agentsMdPath);\n if (content && content.trim()) {\n rules.push(content.trim());\n }\n }\n } catch (e) {\n // Agents.md 读取失败时静默忽略\n }\n\n // 2. .agents/rules/ 一级目录下所有 .md 文件\n try {\n if (await this.runtime.fs.fileExists(this.rulesDir)) {\n const files = await this.runtime.fs.readDir(this.rulesDir);\n for (const file of files) {\n if (!file.isFile()) {\n continue;\n }\n const name = String(file.name);\n if (!name.toLowerCase().endsWith('.md')) {\n continue;\n }\n const filePath = this.runtime.path.join(this.rulesDir, name);\n try {\n const content = await this.runtime.fs.readFile(filePath);\n if (content && content.trim()) {\n rules.push(`\\`\\`\\`markdown\\n# ${name}\\n${content.trim()}\\`\\`\\``);\n }\n } catch (e) {\n // 单个规则文件读取失败时忽略,继续读取其他文件\n }\n }\n }\n } catch (e) {\n // 规则目录读取失败时静默忽略\n }\n\n return rules.join('\\n---\\n');\n }\n\n private async getSkills() {\n const skillDir = this.skillDir;\n const skillList: { name: string; description: string }[] = [];\n if (!(await this.runtime.fs.fileExists(skillDir))) {\n return skillList;\n }\n const files = await this.runtime.fs.readDir(skillDir);\n const skills = files.filter((item) => item.isDirectory()).map((item) => item.name);\n\n if (skills.length === 0) {\n return skillList;\n }\n\n for (const skill of skills) {\n try {\n const skillPath = this.runtime.path.join(skillDir, skill);\n const files = await this.runtime.fs.readDir(skillPath);\n const skillFile = files.map((item) => item.isFile()).find((f) => f.toLowerCase() === 'skill.md');\n if (skillFile) {\n const mdPath = this.runtime.path.join(skillPath, skillFile);\n const mdContent = await this.runtime.fs.readFile(mdPath);\n const parsed = matter(mdContent);\n if (parsed.data && parsed.data.description) {\n let description = String(parsed.data.description).trim();\n description = description.replace(/\\s+/g, ' ').trim();\n if (description) {\n skillList.push({\n name: skill,\n description: description,\n });\n }\n }\n }\n } catch (e) {\n // SKILL.md might not exist or be invalid, ignore\n return skillList;\n }\n }\n }\n\n /**\n * 核心任务循环\n */\n private async loop(): Promise<void> {\n const {sysPrompt, noUseTollSysPrompt} = await this.getPrompt(true);\n const {customTools, customToolNames} = this;\n while (this.state === AgentState.THINKING) {\n this.loopCount++;\n // 检查是否超过最大循环次数\n if (this.loopCount > this.maxLoopCount) {\n await this.memory.appendMessage({\n role: 'user',\n content: `[ERROR] You have exceeded the maximum loop limit of ${this.maxLoopCount} times. Please immediately call the agent_attempt_completion tool to return the final result. If you have pending user-specified tools to execute, you may run them first before calling agent_attempt_completion.`,\n });\n }\n // 1.历史记忆\n const history = await this.memory.getHistory();\n\n // 2. 调用 API\n const stream = this.api.createMessage(sysPrompt, history);\n let fullResponseText = '';\n\n // 3. 处理流式输出\n for await (const chunk of stream) {\n if (chunk.type === 'text' && chunk.text) {\n fullResponseText += chunk.text;\n }\n if (this.onStreamChunk) {\n this.onStreamChunk(chunk);\n }\n }\n\n // 4. 将助手的完整回复记入 Memory\n await this.memory.appendMessage({\n role: 'assistant',\n content: fullResponseText,\n });\n\n // 5. 解析回复中的工具调用\n const parsedBlocks = parseAssistantMessageV2(fullResponseText, this.allToolParamNames);\n const toolUses = parsedBlocks.filter((b) => b.type === 'tool_use') as ToolUse[];\n\n if (toolUses.length === 0) {\n // 如果没有工具调用,错误\n await this.memory.appendMessage({\n role: 'user',\n content: noUseTollSysPrompt,\n });\n } else {\n // 6. 顺序执行工具(为简化模型,暂时使用 await 顺序执行)\n const toolResults = [];\n for (const tool of toolUses) {\n if (this.onToolCall) {\n // 如果宿主接管了工具执行或需要拦截请求权限\n const hookResult = await this.onToolCall(tool);\n if (hookResult) {\n toolResults.push({ tool, result: hookResult });\n continue;\n }\n }\n\n // 外部工具调用\n if (customToolNames.has(tool.name)) {\n const customTool = customTools.find((t: any) => t.name === tool.name);\n if (customTool.onCall) {\n try {\n const res = await customTool.onCall(tool.params);\n toolResults.push({ tool, result: res });\n } catch (error: any) {\n toolResults.push({ tool, result: `Error: ${error.message}` });\n }\n } else {\n toolResults.push({ tool, result: `Error: Custom tool \"${tool.name}\" does not have an onCall method.` });\n }\n continue;\n }\n\n // 内置逻辑分发(可由 IAgentRuntime 支撑的核心工具)\n if (tool.name === AgentDefaultTool.ATTEMPT) {\n toolResults.push({ tool, result: 'Task marked as completed.' });\n this.setState(AgentState.FINISHED);\n break; // 中断循环\n } else if (tool.name === AgentDefaultTool.FILE_READ) {\n const path = tool.params.path;\n if (path) {\n try {\n const content = await this.runtime.fs.readFile(path);\n toolResults.push({ tool, result: content });\n } catch (error: any) {\n toolResults.push({ tool, result: `Error: ${error.message}` });\n }\n } else {\n toolResults.push({ tool, result: 'Error: No path provided.' });\n }\n } else if (tool.name === AgentDefaultTool.BASH) {\n const cmd = tool.params.command;\n if (cmd) {\n const result = await this.runtime.terminal.execCommand(cmd);\n toolResults.push({ tool, result: `STDOUT: ${result.stdout}\\nSTDERR: ${result.stderr}` });\n }\n } else if (tool.name === AgentDefaultTool.FILE_NEW) {\n const path = tool.params.path;\n const content = tool.params.content;\n if (path && content !== undefined) {\n try {\n await this.runtime.fs.writeFile(path, content);\n toolResults.push({ tool, result: `Successfully wrote to ${path}` });\n } catch (error: any) {\n toolResults.push({ tool, result: `Error: ${error.message}` });\n }\n }\n } else if (tool.name === AgentDefaultTool.LIST_FILES) {\n const path = tool.params.path || this.runtime.env.cwd();\n try {\n const files = await this.runtime.fs.readDir(path);\n // 输出是 文件还是目录\n toolResults.push({ tool, result: files.map((f) => f.name + (f.isDirectory() ? '/' : '')).join('\\n') });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else if (tool.name === AgentDefaultTool.FILE_EDIT) {\n const path = tool.params.path;\n const diff = tool.params.diff;\n if (path && diff) {\n try {\n const content = await this.runtime.fs.readFile(path);\n const newContent = this.applyDiff(content, diff);\n await this.runtime.fs.writeFile(path, newContent);\n toolResults.push({ tool, result: `Successfully replaced content in ${path}` });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else {\n toolResults.push({ tool, result: 'Error: Missing path or diff.' });\n }\n } else if (tool.name === AgentDefaultTool.FILE_DELETE) {\n const path = tool.params.path;\n if (path) {\n try {\n await this.runtime.fs.deleteFile(path);\n toolResults.push({ tool, result: `Successfully deleted ${path}` });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else {\n toolResults.push({ tool, result: 'Error: Missing path.' });\n }\n } else if (tool.name === AgentDefaultTool.DIR_DELETE) {\n const path = tool.params.path;\n if (path) {\n try {\n await this.runtime.fs.deleteDirectory(path);\n toolResults.push({ tool, result: `Successfully deleted ${path}` });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else {\n toolResults.push({ tool, result: 'Error: Missing path.' });\n }\n } else if (tool.name === AgentDefaultTool.ASK) {\n const question = tool.params.question;\n toolResults.push({ tool, result: `Asking user: ${question}` });\n this.setState(AgentState.WAITING_FOR_USER);\n // 遇到主动提问,立刻跳出循环,等待外部应用 resume()\n break;\n } else if (tool.name === AgentDefaultTool.SEARCH) {\n const path = tool.params.path || this.runtime.env.cwd();\n const regexStr = tool.params.regex;\n const filePattern = tool.params.file_pattern;\n if (regexStr && this.runtime.fs.searchFiles) {\n try {\n const result = await this.runtime.fs.searchFiles(path, regexStr, filePattern);\n toolResults.push({ tool, result: `${result}` });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else {\n toolResults.push({ tool, result: `Error: searchFiles not supported by runtime or missing regex.` });\n }\n } else if (tool.name === AgentDefaultTool.MCP_USE) {\n const serverName = tool.params.server_name;\n const toolName = tool.params.tool_name;\n const args = tool.params.arguments;\n if (this.mcp && serverName && toolName) {\n try {\n let parsedArgs = args;\n if (typeof args === 'string') {\n parsedArgs = JSON.parse(args);\n }\n const result = await this.mcp.callTool(serverName, toolName, parsedArgs);\n if (result.isError) {\n toolResults.push({ tool, result: `Error executing MCP tool: ${JSON.stringify(result.content)}` });\n } else {\n toolResults.push({ tool, result: `${JSON.stringify(result.content)}` });\n }\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else {\n toolResults.push({ tool, result: `Error: MCP Manager not available or missing parameters.` });\n }\n } else if (tool.name === AgentDefaultTool.MCP_ACCESS) {\n const serverName = tool.params.server_name;\n const uri = tool.params.uri;\n if (this.mcp && this.mcp.readResource && serverName && uri) {\n try {\n const result = await this.mcp.readResource(serverName, uri);\n toolResults.push({ tool, result: `${JSON.stringify(result)}` });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else {\n toolResults.push({ tool, result: `Error: MCP Manager not available, readResource not implemented, or missing parameters.` });\n }\n } else if (tool.name === AgentDefaultTool.MCP_DOCS) {\n // 提供一个简短的关于创建和使用 MCP 的静态文档,供 LLM 了解如何构建和提供 MCP\n const docs = `MCP (Model Context Protocol) is used to connect to external tools/resources. To build one, typically you create an HTTP/stdio server responding to MCP defined JSON-RPC messages...`;\n toolResults.push({ tool, result: docs });\n } else if (tool.name === AgentDefaultTool.LIST_CODE_DEF) {\n // 简单的 LIST_CODE_DEF 实现\n const path = tool.params.path || this.runtime.env.cwd();\n try {\n const result = await this.runtime.fs.searchFiles?.(path, '^(class|function|const|let|var|export|interface|type)\\\\s+\\\\w+', '*.ts|*.js');\n toolResults.push({ tool, result: `${result ? result : 'No definitions found or searchFiles not supported.'}` });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else if (tool.name === AgentDefaultTool.WEB_FETCH) {\n const url = tool.params.url;\n if (url) {\n try {\n const res = await fetch(url);\n const text = await res.text();\n // 简单截断防止超长\n toolResults.push({ tool, result: text.substring(0, 3000) });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n }\n } else if (tool.name === AgentDefaultTool.TODO) {\n toolResults.push({ tool, result: `Focus chain updated successfully.` });\n } else if (tool.name === AgentDefaultTool.PLAN_MODE || tool.name === AgentDefaultTool.ACT_MODE) {\n toolResults.push({ tool, result: `Mode switch acknowledged.` });\n } else if (tool.name === AgentDefaultTool.NEW_RULE) {\n toolResults.push({ tool, result: `Rule recorded in current context.` });\n } else if (tool.name === AgentDefaultTool.NEW_TASK) {\n toolResults.push({ tool, result: `New task request received. Terminating current task.` });\n this.setState(AgentState.FINISHED);\n break;\n } else if (tool.name === AgentDefaultTool.LOAD_SKILL) {\n const skillName = (tool.params as any).skill_name || (tool.params as any).skill;\n if (!skillName) {\n toolResults.push({ tool, result: `\"Error: Missing required parameter 'skill_name'. Please provide the name of the skill to activate.\"` });\n } else {\n const skillDir = this.skillDir;\n // 按照约定从本地硬盘查找 skillDir/SKILL.md\n const skillFilePath = this.runtime.path.join(skillDir, skillName, 'SKILL.md');\n try {\n const fileExists = await this.runtime.fs.fileExists(skillFilePath);\n if (!fileExists) {\n toolResults.push({ tool, result: `Error: Skill \"${skillName}\" not found at ${skillFilePath}.` });\n } else {\n const content = await this.runtime.fs.readFile(skillFilePath);\n toolResults.push({\n tool,\n result: `# Skill \"${skillName}\" is now active\\n\\n${content}\\n\\n---\\nIMPORTANT: The skill is now loaded. Do NOT call agent_load_skill again for this task. Simply follow the instructions above to complete the user's request.`,\n });\n }\n } catch (err: any) {\n toolResults.push({ tool, result: `Error loading skill \"${skillName}\": ${err.message}` });\n }\n }\n } else if (tool.name === AgentDefaultTool.BROWSER || tool.name === AgentDefaultTool.WEB_SEARCH || tool.name === AgentDefaultTool.APPLY_PATCH) {\n // 这些高级工具通常需要宿主环境的深度集成(如 Puppeteer、真实搜索引擎、Patch 引擎等)\n // 如果宿主没有通过 onToolCall 拦截,默认返回提示信息\n toolResults.push({ tool, result: `This tool requires specific host integration. If you see this, the host environment has not implemented it yet.` });\n } else if (\n tool.name === AgentDefaultTool.CONDENSE ||\n tool.name === AgentDefaultTool.SUMMARIZE_TASK ||\n tool.name === AgentDefaultTool.REPORT_BUG ||\n tool.name === AgentDefaultTool.GENERATE_EXPLANATION\n ) {\n // 这些主要起记录/输出作用的工具\n toolResults.push({ tool, result: `Action logged successfully.` });\n } else {\n // 未知或新增工具兜底\n toolResults.push({ tool, result: `Executed by host or unsupported.` });\n }\n }\n\n // 7. 如果任务未完成,把执行结果告诉 LLM\n if (this.state === AgentState.THINKING && toolResults.length > 0) {\n const toolResultsContext = toolResults\n .map((tr) => `<${TOOL_RESULT_BLOCK} tool_name=\"${tr.tool.name}\">\\n${typeof tr.result === 'string' ? tr.result.trim() : JSON.stringify(tr.result)}\\n</${TOOL_RESULT_BLOCK}>`)\n .join('\\n\\n');\n // const lastResult = toolResults[toolResults.length - 1];\n // if (lastResult && lastResult.tool.params.task_progress) {\n // toolResultsContext += `\\n<task_progress>\\n${lastResult.tool.params.task_progress}\\n</task_progress>\\n`;\n // }\n if (this.onStreamChunk) {\n this.onStreamChunk({ type: 'text', text: toolResultsContext });\n }\n await this.memory.appendMessage({\n role: 'user',\n content: toolResultsContext,\n });\n // 循环将继续,发送新的请求\n }\n }\n }\n }\n\n /**\n * 简单的 Diff 解析与替换辅助方法\n */\n private applyDiff(content: string, diff: string): string {\n const regex = /-------\\s*SEARCH\\r?\\n(.*?)\\r?\\n=======\\r?\\n(.*?)\\r?\\n\\+\\+\\+\\+\\+\\+\\+\\s*REPLACE/gs;\n let newContent = content;\n let match;\n let matchCount = 0;\n while ((match = regex.exec(diff)) !== null) {\n matchCount++;\n const searchBlock = match[1];\n const replaceBlock = match[2];\n const idx = newContent.indexOf(searchBlock);\n if (idx !== -1) {\n newContent = newContent.substring(0, idx) + replaceBlock + newContent.substring(idx + searchBlock.length);\n } else {\n throw new Error(`Search block not found in file:\\n${searchBlock.substring(0, 100)}...`);\n }\n }\n if (matchCount === 0) {\n throw new Error(`No valid SEARCH/REPLACE blocks found in the diff.`);\n }\n return newContent;\n }\n\n /**\n * 恢复被中断的循环(例如等待用户输入/确认后继续)\n */\n public async resume(userInput?: string): Promise<void> {\n if (userInput) {\n await this.memory.appendMessage({\n role: 'user',\n content: userInput,\n });\n }\n this.setState(AgentState.THINKING);\n await this.loop();\n }\n\n public async appendHistory(history: AgentMessage[]) {\n for (const message of history) {\n await this.memory.appendMessage(message);\n }\n }\n\n public async getHistory() {\n return this.memory.getHistory();\n }\n}\n","export const VERSION = '0.1.0';\n\n// @ts-ignore\nglobalThis.AI_SDK_LOG_WARNINGS = false;\n\nexport * from './runtime';\nexport * from './shared/tools';\nexport * from './parser';\nexport * from './prompt';\nexport * from './llm';\nexport * from './mcp';\nexport * from './agent';\nexport * from './memory';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/shared/tools.ts","../src/parser/parse-assistant-message.ts","../src/parser/index.ts","../src/agent/Agent.ts","../src/index.ts"],"names":["AgentDefaultTool","toolParamNames","AgentState","files"],"mappings":"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","file":"index.mjs","sourcesContent":["export enum AgentDefaultTool {\n ASK = \"agent_ask_followup_question\",\n ATTEMPT = \"agent_attempt_completion\",\n BASH = \"agent_execute_command\",\n FILE_EDIT = \"agent_replace_in_file\",\n FILE_READ = \"agent_read_file\",\n FILE_NEW = \"agent_write_to_file\",\n FILE_DELETE = \"agent_delete_file\",\n DIR_DELETE = \"agent_delete_directory\",\n SEARCH = \"agent_search_files\",\n LIST_FILES = \"agent_list_files\",\n LIST_CODE_DEF = \"agent_list_code_definition_names\",\n BROWSER = \"agent_browser_action\",\n MCP_USE = \"agent_use_mcp_tool\",\n MCP_ACCESS = \"agent_access_mcp_resource\",\n MCP_DOCS = \"agent_load_mcp_documentation\",\n NEW_TASK = \"agent_new_task\",\n PLAN_MODE = \"agent_plan_mode_respond\",\n ACT_MODE = \"agent_act_mode_respond\",\n TODO = \"agent_focus_chain\",\n WEB_FETCH = \"agent_web_fetch\",\n WEB_SEARCH = \"agent_web_search\",\n CONDENSE = \"agent_condense\",\n SUMMARIZE_TASK = \"agent_summarize_task\",\n REPORT_BUG = \"agent_report_bug\",\n NEW_RULE = \"agent_new_rule\",\n APPLY_PATCH = \"agent_apply_patch\",\n GENERATE_EXPLANATION = \"agent_generate_explanation\",\n LOAD_SKILL = \"agent_load_skill\",\n USE_SUBAGENTS = \"agent_use_subagents\",\n}\n\nexport const TOOL_RESULT_BLOCK = 'tool_call_result';\n\nexport const defaultTools = [\n {\n name: AgentDefaultTool.ASK,\n description: \"Ask the user a clarifying question if more information is needed.\",\n params: {\n question: \"The question to ask the user.\",\n },\n },\n {\n name: AgentDefaultTool.ATTEMPT,\n description: \"After each tool use, the user will respond with the result of that tool use, i.e. if it succeeded or failed, along with any reasons for failure. Once you've received the results of tool uses and can confirm that the task is complete, use this tool to present the result of your work to the user. Optionally you may provide a CLI command to showcase the result of your work. The user may respond with feedback if they are not satisfied with the result, which you can use to make improvements and try again. IMPORTANT NOTE: This tool CANNOT be used until you've confirmed from the user that any previous tool uses were successful. Failure to do so will result in code corruption and system failure. Before using this tool, you must ask yourself in tags if you've confirmed from the user that any previous tool uses were successful. If not, then DO NOT use this tool. If you were using task_progress to update the task progress, you must include the completed list in the result as well.\",\n params: {\n result: \"(required) The result of the tool use. This should be a clear, specific description of the result.\",\n },\n example: `## Example: ${AgentDefaultTool.ATTEMPT}\n<${AgentDefaultTool.ATTEMPT}>\n<result>final result or message</result>\n<task_progress>\n- [x] Set up project structure\n- [x] Install dependencies\n- [x] Run command to start server\n- [x] Test application\n</task_progress>\n</${AgentDefaultTool.ATTEMPT}>`,\n },\n {\n name: AgentDefaultTool.BASH,\n description: \"Request to execute a CLI command on the system. Use this when you need to perform system operations or run specific commands to accomplish any step in the user's task. You must tailor your command to the user's system and provide a clear explanation of what the command does. For command chaining, use the appropriate chaining syntax for the user's shell. Prefer to execute complex CLI commands over creating executable scripts, as they are more flexible and easier to run. Commands will be executed in the current working directory: ${context.cwd} Use @workspace:path syntax (e.g., @frontend:src/index.ts) to specify a workspace.\",\n params: {\n command: \"(required) The CLI command to execute. This should be valid for the current operating system. Ensure the command is properly formatted and does not contain any harmful instructions.\",\n },\n example: `## Example: Requesting to execute a command\n\n<${AgentDefaultTool.BASH}>\n<command>npm run dev</command>\n<requires_approval>false</requires_approval>\n<task_progress>\n- [x] Set up project structure\n- [x] Install dependencies\n- [ ] Run command to start server\n- [ ] Test application\n</task_progress>\n</${AgentDefaultTool.BASH}>`,\n },\n {\n name: AgentDefaultTool.FILE_EDIT,\n description: \"Replace specific content in a file using a search/replace diff block.\",\n params: {\n path: \"(required) The absolute or relative file path to modify.\",\n diff: \"(required) The diff content to apply.\",\n },\n example: `## Example: Requesting to make targeted edits to a file\n\n<${AgentDefaultTool.FILE_EDIT}>\n<path>src/components/App.tsx</path>\n<diff>\n------- SEARCH\nimport React from 'react';\n=======\nimport React, { useState } from 'react';\n+++++++ REPLACE\n\n------- SEARCH\nfunction handleSubmit() {\n saveData();\n setLoading(false);\n}\n\n=======\n+++++++ REPLACE\n\n------- SEARCH\nreturn (\n <div>\n=======\nfunction handleSubmit() {\n saveData();\n setLoading(false);\n}\n\nreturn (\n <div>\n+++++++ REPLACE\n</diff>\n<task_progress>\n- [x] Set up project structure\n- [x] Install dependencies\n- [ ] Create components\n- [ ] Test application\n</task_progress>\n</${AgentDefaultTool.FILE_EDIT}>`,\n },\n {\n name: AgentDefaultTool.FILE_READ,\n description: \"Read the contents of a specific file.\",\n params: {\n path: \"(required) The absolute or relative file path to read.\",\n },\n },\n {\n name: AgentDefaultTool.FILE_NEW,\n description: \"Create or overwrite a file with new content.\",\n params: {\n path: \"(required) The path of the file to write to (relative to the current working directory ${context.cwd}) Use @workspace:path syntax (e.g., @frontend:src/index.ts) to specify a workspace.\",\n content: \"(required) The content to write to the file.\",\n },\n example: `## Example: Requesting to create a new file\n\n<${AgentDefaultTool.FILE_NEW}>\n<path>src/frontend-config.json</path>\n<content>\n{\n \"apiEndpoint\": \"https://api.example.com\",\n \"theme\": {\n \"primaryColor\": \"#007bff\",\n \"secondaryColor\": \"#6c757d\",\n \"fontFamily\": \"Arial, sans-serif\"\n },\n \"features\": {\n \"darkMode\": true,\n \"notifications\": true,\n \"analytics\": false\n },\n \"version\": \"1.0.0\"\n}\n</content>\n<task_progress>\n- [x] Set up project structure\n- [x] Install dependencies\n- [x] Create components\n- [ ] Test application\n</task_progress>\n</${AgentDefaultTool.FILE_NEW}>`\n },\n {\n name: AgentDefaultTool.FILE_DELETE,\n description: \"Delete a file.\",\n params: {\n path: \"(required) The path of the file to delete to (relative to the current working directory ${context.cwd}) Use @workspace:path syntax (e.g., @frontend:src/index.ts) to specify a workspace.\",\n },\n },\n {\n name: AgentDefaultTool.DIR_DELETE,\n description: \"Delete a directory.\",\n params: {\n path: \"(required) The path of the directory to delete to (relative to the current working directory ${context.cwd}) Use @workspace:path syntax (e.g., @frontend:src/index.ts) to specify a workspace.\",\n },\n },\n {\n name: AgentDefaultTool.SEARCH,\n description: \"Search for files in a directory that match a regex pattern or glob pattern.\",\n params: {\n path: \"(required) The absolute or relative directory path to search.\",\n regex: \"(required) The regex pattern to match files against.\",\n file_pattern: \"(optional) glob pattern like *.ts.\",\n },\n },\n {\n name: AgentDefaultTool.LIST_FILES,\n description: \"List all files in a directory.\",\n params: {\n path: \"(required) The absolute or relative directory path to list.\",\n },\n },\n //================\n {\n name: AgentDefaultTool.NEW_TASK,\n description: \"Create a new task with a given context.\",\n params: {\n context: \"(required) The context of the new task.\",\n },\n example: `## Example: Creating a new task\n<${AgentDefaultTool.NEW_TASK}>\n<context>\n1. Current Work:\n [Detailed description]\n\n2. Key Technical Concepts:\n - [Concept 1]\n - [Concept 2]\n - [...]\n\n3. Relevant Files and Code:\n - [File Name 1]\n - [Summary of why this file is important]\n - [Summary of the changes made to this file, if any]\n - [Important Code Snippet]\n - [File Name 2]\n - [Important Code Snippet]\n - [...]\n\n4. Problem Solving:\n [Detailed description]\n\n5. Pending Tasks and Next Steps:\n - [Task 1 details & next steps]\n - [Task 2 details & next steps]\n - [...]\n</context>\n</${AgentDefaultTool.NEW_TASK}>`,\n },\n {\n name: AgentDefaultTool.LOAD_SKILL,\n description: \"Load a skill to perform a task. important: skill_name is required. must use this tool to load the skill; do not use any other method to read it.\",\n params: {\n skill_name: \"(required) The name of the skill to load.\",\n },\n },\n] as const; \n\nexport const toolUseNames = Object.values(AgentDefaultTool) as AgentDefaultTool[];\n\nconst dynamicToolUseNamesByNamespace = new Map<string, Set<string>>();\n\nexport function setDynamicToolUseNames(namespace: string, names: string[]): void {\n dynamicToolUseNamesByNamespace.set(namespace, new Set(names.map((name) => name.trim()).filter(Boolean)));\n}\n\nexport function getToolUseNames(): string[] {\n const defaults = [...toolUseNames];\n const dynamic = Array.from(dynamicToolUseNamesByNamespace.values()).flatMap((set) => Array.from(set));\n return Array.from(new Set([...defaults, ...dynamic]));\n}\n\nexport const READ_ONLY_TOOLS = [\n AgentDefaultTool.LIST_FILES,\n AgentDefaultTool.FILE_READ,\n AgentDefaultTool.SEARCH,\n AgentDefaultTool.LIST_CODE_DEF,\n AgentDefaultTool.BROWSER,\n AgentDefaultTool.ASK,\n AgentDefaultTool.WEB_SEARCH,\n AgentDefaultTool.WEB_FETCH,\n AgentDefaultTool.LOAD_SKILL,\n AgentDefaultTool.USE_SUBAGENTS,\n] as const;\n","import { AgentDefaultTool, getToolUseNames } from \"../shared/tools\"\nimport { nanoid } from \"nanoid\"\nimport { AssistantMessageContent, TextStreamContent, ToolParamName, ToolUse } from \"./index\" // Assuming types are defined in index.ts or a similar file\n\n// parseAssistantmessageV1 removed in https://github.com/cline/cline/pull/5425\n\n/**\n * @description **Version 2**\n * Parses an assistant message string potentially containing mixed text and tool usage blocks\n * marked with XML-like tags into an array of structured content objects.\n *\n * This version aims for efficiency by avoiding the character-by-character accumulator of V1.\n * It iterates through the string using an index `i`. At each position, it checks if the substring\n * *ending* at `i` matches any known opening or closing tags for tools or parameters using `startsWith`\n * with an offset.\n * It uses pre-computed Maps (`toolUseOpenTags`, `toolParamOpenTags`) for quick tag lookups.\n * State is managed using indices (`currentTextContentStart`, `currentToolUseStart`, `currentParamValueStart`)\n * pointing to the start of the current block within the original `assistantMessage` string.\n * Slicing is used to extract content only when a block (text, parameter, or tool use) is completed.\n * Special handling for `write_to_file` and `new_rule` content parameters is included, using `indexOf`\n * and `lastIndexOf` on the relevant slice to handle potentially nested closing tags.\n * If the input string ends mid-block, the last open block is added and marked as partial.\n *\n * @param assistantMessage The raw string output from the assistant.\n * @returns An array of `AssistantMessageContent` objects, which can be `TextContent` or `ToolUse`.\n * Blocks that were not fully closed by the end of the input string will have their `partial` flag set to `true`.\n */\nexport function parseAssistantMessageV2(assistantMessage: string, toolParamNames: any): AssistantMessageContent[] {\n\tconst contentBlocks: AssistantMessageContent[] = []\n\tlet currentTextContentStart = 0 // Index where the current text block started\n\tlet currentTextContent: TextStreamContent | undefined\n\tlet currentToolUseStart = 0 // Index *after* the opening tag of the current tool use\n\tlet currentToolUse: ToolUse | undefined\n\tlet currentParamValueStart = 0 // Index *after* the opening tag of the current param\n\tlet currentParamName: ToolParamName | undefined\n\n\t// Precompute tags for faster lookups\n\tconst toolUseOpenTags = new Map<string, string>()\n\tconst toolParamOpenTags = new Map<string, ToolParamName>()\n\tfor (const name of getToolUseNames()) {\n\t\ttoolUseOpenTags.set(`<${name}>`, name)\n\t}\n\tfor (const name of toolParamNames) {\n\t\ttoolParamOpenTags.set(`<${name}>`, name)\n\t}\n\n\tconst len = assistantMessage.length\n\tfor (let i = 0; i < len; i++) {\n\t\tconst currentCharIndex = i\n\n\t\t// --- State: Parsing a Tool Parameter ---\n\t\tif (currentToolUse && currentParamName) {\n\t\t\tconst closeTag = `</${currentParamName}>`\n\t\t\t// Check if the string *ending* at index `i` matches the closing tag\n\t\t\tif (\n\t\t\t\tcurrentCharIndex >= closeTag.length - 1 &&\n\t\t\t\tassistantMessage.startsWith(\n\t\t\t\t\tcloseTag,\n\t\t\t\t\tcurrentCharIndex - closeTag.length + 1, // Start checking from potential start of tag\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// Found the closing tag for the parameter\n\t\t\t\tconst value = assistantMessage\n\t\t\t\t\t.slice(\n\t\t\t\t\t\tcurrentParamValueStart, // Start after the opening tag\n\t\t\t\t\t\tcurrentCharIndex - closeTag.length + 1, // End before the closing tag\n\t\t\t\t\t)\n\t\t\t\t\t.trim()\n\t\t\t\tcurrentToolUse.params[currentParamName] = value\n\t\t\t\tcurrentParamName = undefined // Go back to parsing tool content\n\t\t\t\t// We don't continue loop here, need to check for tool close or other params at index i\n\t\t\t} else {\n\t\t\t\tcontinue // Still inside param value, move to next char\n\t\t\t}\n\t\t}\n\n\t\t// --- State: Parsing a Tool Use (but not a specific parameter) ---\n\t\tif (currentToolUse && !currentParamName) {\n\t\t\t// Ensure we are not inside a parameter already\n\t\t\t// Check if starting a new parameter\n\t\t\tlet startedNewParam = false\n\t\t\tfor (const [tag, paramName] of toolParamOpenTags.entries()) {\n\t\t\t\tif (currentCharIndex >= tag.length - 1 && assistantMessage.startsWith(tag, currentCharIndex - tag.length + 1)) {\n\t\t\t\t\tcurrentParamName = paramName\n\t\t\t\t\tcurrentParamValueStart = currentCharIndex + 1 // Value starts after the tag\n\t\t\t\t\tstartedNewParam = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (startedNewParam) {\n\t\t\t\tcontinue // Handled start of param, move to next char\n\t\t\t}\n\n\t\t\t// Check if closing the current tool use\n\t\t\tconst toolCloseTag = `</${currentToolUse.name}>`\n\t\t\tif (\n\t\t\t\tcurrentCharIndex >= toolCloseTag.length - 1 &&\n\t\t\t\tassistantMessage.startsWith(toolCloseTag, currentCharIndex - toolCloseTag.length + 1)\n\t\t\t) {\n\t\t\t\t// End of the tool use found\n\t\t\t\t// Special handling for content params *before* finalizing the tool\n\t\t\t\tconst toolContentSlice = assistantMessage.slice(\n\t\t\t\t\tcurrentToolUseStart, // From after the tool opening tag\n\t\t\t\t\tcurrentCharIndex - toolCloseTag.length + 1, // To before the tool closing tag\n\t\t\t\t)\n\n\t\t\t\t// Check if content parameter needs special handling (write_to_file/new_rule)\n\t\t\t\t// This check is important if the closing </content> tag was missed by the parameter parsing logic\n\t\t\t\t// (e.g., if content is empty or parsing logic prioritizes tool close)\n\t\t\t\tconst contentParamName: ToolParamName = \"content\"\n\t\t\t\tif (\n\t\t\t\t\tcurrentToolUse.name === AgentDefaultTool.FILE_NEW /* || currentToolUse.name === \"new_rule\" */ &&\n\t\t\t\t\ttoolContentSlice.includes(`<${contentParamName}>`)\n\t\t\t\t) {\n\t\t\t\t\tconst contentStartTag = `<${contentParamName}>`\n\t\t\t\t\tconst contentEndTag = `</${contentParamName}>`\n\t\t\t\t\tconst contentStart = toolContentSlice.indexOf(contentStartTag)\n\t\t\t\t\t// Use lastIndexOf for robustness against nested tags\n\t\t\t\t\tconst contentEnd = toolContentSlice.lastIndexOf(contentEndTag)\n\n\t\t\t\t\tif (contentStart !== -1 && contentEnd !== -1 && contentEnd > contentStart) {\n\t\t\t\t\t\tconst contentValue = toolContentSlice.slice(contentStart + contentStartTag.length, contentEnd).trim()\n\t\t\t\t\t\tcurrentToolUse.params[contentParamName] = contentValue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcurrentToolUse.partial = false // Mark as complete\n\t\t\t\tcontentBlocks.push(currentToolUse)\n\t\t\t\tcurrentToolUse = undefined // Reset state\n\t\t\t\tcurrentTextContentStart = currentCharIndex + 1 // Potential text starts after this tag\n\t\t\t\tcontinue // Move to next char\n\t\t\t}\n\t\t\t// If not starting a param and not closing the tool, continue accumulating tool content implicitly\n\t\t\tcontinue\n\t\t}\n\n\t\t// --- State: Parsing Text / Looking for Tool Start ---\n\t\tif (!currentToolUse) {\n\t\t\t// Check if starting a new tool use\n\t\t\tlet startedNewTool = false\n\t\t\tfor (const [tag, toolName] of toolUseOpenTags.entries()) {\n\t\t\t\tif (currentCharIndex >= tag.length - 1 && assistantMessage.startsWith(tag, currentCharIndex - tag.length + 1)) {\n\t\t\t\t\t// End current text block if one was active\n\t\t\t\t\tif (currentTextContent) {\n\t\t\t\t\t\tcurrentTextContent.content = assistantMessage\n\t\t\t\t\t\t\t.slice(\n\t\t\t\t\t\t\t\tcurrentTextContentStart, // From where text started\n\t\t\t\t\t\t\t\tcurrentCharIndex - tag.length + 1, // To before the tool tag starts\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.trim()\n\t\t\t\t\t\tcurrentTextContent.partial = false // Ended because tool started\n\t\t\t\t\t\tif (currentTextContent.content.length > 0) {\n\t\t\t\t\t\t\tcontentBlocks.push(currentTextContent)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentTextContent = undefined\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Check for any text between the last block and this tag\n\t\t\t\t\t\tconst potentialText = assistantMessage\n\t\t\t\t\t\t\t.slice(\n\t\t\t\t\t\t\t\tcurrentTextContentStart, // From where text *might* have started\n\t\t\t\t\t\t\t\tcurrentCharIndex - tag.length + 1, // To before the tool tag starts\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.trim()\n\t\t\t\t\t\tif (potentialText.length > 0) {\n\t\t\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\tcontent: potentialText,\n\t\t\t\t\t\t\t\tpartial: false,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Start the new tool use\n\t\t\t\t\tcurrentToolUse = {\n\t\t\t\t\t\ttype: \"tool_use\",\n\t\t\t\t\t\tname: toolName as ToolParamName,\n\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\tpartial: true, // Assume partial until closing tag is found\n\t\t\t\t\t\tcall_id: nanoid(8),\n\t\t\t\t\t\tisNativeToolCall: false,\n\t\t\t\t\t}\n\t\t\t\t\tcurrentToolUseStart = currentCharIndex + 1 // Tool content starts after the opening tag\n\t\t\t\t\tstartedNewTool = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (startedNewTool) {\n\t\t\t\tcontinue // Handled start of tool, move to next char\n\t\t\t}\n\n\t\t\t// If not starting a tool, it must be text content\n\t\t\tif (!currentTextContent) {\n\t\t\t\t// Start a new text block if we aren't already in one\n\t\t\t\tcurrentTextContentStart = currentCharIndex // Text starts at the current character\n\t\t\t\t// Check if the current char is the start of potential text *immediately* after a tag\n\t\t\t\t// This needs the previous state - simpler to let slicing handle it later.\n\t\t\t\t// Resetting start index accurately is key.\n\t\t\t\t// It should be the index *after* the last processed tag.\n\t\t\t\t// The logic managing currentTextContentStart after closing tags handles this.\n\n\t\t\t\tcurrentTextContent = {\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\tcontent: \"\", // Will be determined by slicing at the end or when a tool starts\n\t\t\t\t\tpartial: true,\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Continue accumulating text implicitly; content is extracted later.\n\t\t}\n\t} // End of loop\n\n\t// --- Finalization after loop ---\n\n\t// Finalize any open parameter within an open tool use\n\tif (currentToolUse && currentParamName) {\n\t\tcurrentToolUse.params[currentParamName] = assistantMessage\n\t\t\t.slice(currentParamValueStart) // From param start to end of string\n\t\t\t.trim()\n\t\t// Tool use remains partial\n\t}\n\n\t// Finalize any open tool use (which might contain the finalized partial param)\n\tif (currentToolUse) {\n\t\t// Tool use is partial because the loop finished before its closing tag\n\t\tcontentBlocks.push(currentToolUse)\n\t}\n\t// Finalize any trailing text content\n\t// Only possible if a tool use wasn't open at the very end\n\telse if (currentTextContent) {\n\t\tcurrentTextContent.content = assistantMessage\n\t\t\t.slice(currentTextContentStart) // From text start to end of string\n\t\t\t.trim()\n\t\t// Text is partial because the loop finished\n\t\tif (currentTextContent.content.length > 0) {\n\t\t\tcontentBlocks.push(currentTextContent)\n\t\t}\n\t}\n\n\treturn contentBlocks\n}\n","import { AgentDefaultTool } from \"../shared/tools\"\n\nexport type AssistantMessageContent = TextStreamContent | ToolUse | ReasoningStreamContent\n\nexport { parseAssistantMessageV2 } from \"./parse-assistant-message\"\n\nexport interface TextStreamContent {\n\ttype: \"text\"\n\tcontent: string\n\tpartial: boolean\n}\n\nexport const toolParamNames = [\n\t\"command\",\n\t\"requires_approval\",\n\t\"path\",\n\t\"absolutePath\",\n\t\"content\",\n\t\"diff\",\n\t\"regex\",\n\t\"file_pattern\",\n\t\"recursive\",\n\t\"action\",\n\t\"url\",\n\t\"coordinate\",\n\t\"text\",\n\t\"query\",\n\t\"allowed_domains\",\n\t\"blocked_domains\",\n\t\"prompt\",\n\t\"server_name\",\n\t\"tool_name\",\n\t\"arguments\",\n\t\"uri\",\n\t\"question\",\n\t\"options\",\n\t\"response\",\n\t\"result\",\n\t\"context\",\n\t\"title\",\n\t\"what_happened\",\n\t\"steps_to_reproduce\",\n\t\"api_request_output\",\n\t\"additional_context\",\n\t\"needs_more_exploration\",\n\t\"task_progress\",\n\t\"timeout\",\n\t\"input\",\n\t\"from_ref\",\n\t\"to_ref\",\n\t\"skill_name\",\n\t\"prompt_1\",\n\t\"prompt_2\",\n\t\"prompt_3\",\n\t\"prompt_4\",\n\t\"prompt_5\",\n\t\"start_line\",\n\t\"end_line\",\n] as const\n\nexport type ToolParamName = (typeof toolParamNames)[number]\n\nexport interface ToolUse {\n\ttype: \"tool_use\"\n\tname: AgentDefaultTool | string // id of the tool being used\n\t// params is a partial record, allowing only some or none of the possible parameters to be used\n\tparams: Partial<Record<ToolParamName, string>>\n\tpartial: boolean\n\t/**\n\t * Whether this tool use was initiated by a native tool call\n\t */\n\tisNativeToolCall?: boolean\n\t/**\n\t * The call / response ID this tool use is associated with.\n\t */\n\tcall_id?: string // optional call ID for tracking tool use calls\n\t/**\n\t * Thought signature associated with this tool use, used by Gemini\n\t */\n\tsignature?: string\n}\n\nexport interface ReasoningStreamContent {\n\ttype: \"reasoning\"\n\t/**\n\t * The reasoning text generated by the model.\n\t * Redacted reasoning block will have this field set to \"[REDACTED]\" or an empty string.\n\t */\n\treasoning: string\n\t/**\n\t * openrouter has various properties that we can pass back unmodified in api requests to preserve reasoning traces\n\t */\n\tdetails?: any\n\t/**\n\t * It's used when sending the thinking block back to the API.\n\t * API expects this in completed form, not as array of deltas.\n\t */\n\tsignature?: string\n\t/**\n\t * whether this reasoning block has been redacted\n\t */\n\tredacted?: boolean\n\t/**\n\t * redacted data\n\t */\n\tdata?: string\n\t/**\n\t * Indicates whether this is a partial reasoning block\n\t */\n\tpartial: boolean\n}\n","import { IAgentRuntime } from '../runtime';\nimport { IApiHandler, ApiStreamChunk } from '../llm/index';\nimport { IPromptManager } from '../prompt/index';\nimport { IMemoryManager, AgentMessage } from '../memory/index';\nimport { IMcpManager } from '../mcp/index';\nimport { parseAssistantMessageV2, ToolUse, toolParamNames } from '../parser/index';\nimport { AgentDefaultTool, setDynamicToolUseNames, TOOL_RESULT_BLOCK } from '../shared/tools';\nimport matter from 'gray-matter';\n\n/**\n * Agent 初始化配置依赖\n */\nexport interface AgentOptions {\n runtime: IAgentRuntime;\n api: IApiHandler;\n promptManager: IPromptManager;\n memory: IMemoryManager;\n mcp?: IMcpManager;\n customTools?: any[];\n allowDefaultTools?: string[];\n customInstructions?: string;\n /** 最大循环次数,默认150 */\n maxLoopCount?: number;\n}\n\n/**\n * Agent 状态\n */\nexport enum AgentState {\n IDLE = 'idle',\n THINKING = 'thinking',\n WAITING_FOR_USER = 'waiting_for_user',\n FINISHED = 'finished',\n ERROR = 'error',\n}\n\n/**\n * ClineAgent 核心逻辑循环状态机\n * 它独立于 VS Code 或 Node 环境,纯粹通过依赖注入的方式执行工作流。\n */\nexport class ClineAgent {\n private runtime: IAgentRuntime;\n private api: IApiHandler;\n private promptManager: IPromptManager;\n private memory: IMemoryManager;\n private mcp?: IMcpManager;\n\n public state: AgentState = AgentState.IDLE;\n public allToolParamNames: string[] = [...toolParamNames];\n /** 循环计数器 */\n private loopCount: number = 0;\n /** 最大循环次数 */\n private maxLoopCount: number;\n\n skillDir: string;\n rulesDir: string;\n customTools: any[];\n customToolNames: Set<string>;\n allowDefaultTools?: string[];\n customInstructions?: string;\n\n sysPrompt?: string;\n noUseTollSysPrompt?: string;\n\n // 简单的事件回调系统,供宿主环境注册以监听 Agent 内部事件\n public onStateChange?: (state: AgentState) => void;\n public onStreamChunk?: (chunk: ApiStreamChunk) => void;\n public onToolCall?: (tool: ToolUse) => Promise<any | void>;\n\n constructor(options: AgentOptions) {\n this.runtime = options.runtime;\n this.api = options.api;\n this.promptManager = options.promptManager;\n this.memory = options.memory;\n this.mcp = options.mcp;\n this.maxLoopCount = options.maxLoopCount ?? 150;\n this.customTools = options.customTools || [];\n this.allowDefaultTools = options.allowDefaultTools;\n if (this.allowDefaultTools && !this.allowDefaultTools.includes(AgentDefaultTool.ATTEMPT)) {\n this.allowDefaultTools.push(AgentDefaultTool.ATTEMPT);\n }\n this.customInstructions = options.customInstructions;\n if (this.customTools.length > 0) {\n const dynamicToolNames = new Set<string>();\n const customToolParams = new Set<string>();\n for (const customTool of this.customTools) {\n dynamicToolNames.add(customTool.name);\n if (customTool.params) {\n for (const key in customTool.params) {\n if (!Object.hasOwn(customTool.params, key)) continue;\n customToolParams.add(key);\n }\n }\n }\n\n // 检测和内置工具的重复,抛出错误\n const defaultToolNames = Object.values(AgentDefaultTool);\n const overlappingTools = Array.from(dynamicToolNames).filter((name: any) => defaultToolNames.includes(name));\n if (overlappingTools.length > 0) {\n throw new Error(`Custom tools and default tools have overlapping names: ${overlappingTools.join(', ')}`);\n }\n\n if (dynamicToolNames.size > 0) {\n setDynamicToolUseNames('customUser', Array.from(dynamicToolNames));\n }\n if (customToolParams.size > 0) {\n this.allToolParamNames = Array.from(new Set([...this.allToolParamNames, ...Array.from(customToolParams)]));\n }\n }\n this.customToolNames = new Set<string>(this.customTools.map((t: any) => t.name));\n this.skillDir = this.runtime.path.join(this.runtime.env.cwd(), '.agents/skills');\n this.rulesDir = this.runtime.path.join(this.runtime.env.cwd(), '.agents/rules');\n }\n\n private setState(newState: AgentState) {\n this.state = newState;\n if (this.onStateChange) {\n this.onStateChange(newState);\n }\n }\n\n /**\n * 获取当前 Agent 的系统提示词\n * 如果 force 为 true,则强制重新获取系统提示词\n */\n public async getPrompt(force = false) {\n if (!force && this.sysPrompt && this.noUseTollSysPrompt) {\n return { sysPrompt: this.sysPrompt, noUseTollSysPrompt: this.noUseTollSysPrompt };\n }\n\n const context = {\n cwd: this.runtime.env.cwd(),\n os: this.runtime.env.osInfo(),\n shell: this.runtime.env.shell(),\n skills: await this.getSkills(),\n agentRules: await this.getAgentRules(),\n customTools: this.customTools,\n allowDefaultTools: this.allowDefaultTools,\n customInstructions: this.customInstructions,\n };\n // 1. 获取动态系统提示词\n this.sysPrompt = await this.promptManager.getSystemPrompt(context);\n this.noUseTollSysPrompt = this.promptManager.getNoUseToolInstructions(context);\n\n return { sysPrompt: this.sysPrompt, noUseTollSysPrompt: this.noUseTollSysPrompt };\n }\n\n /**\n * 启动一个新的任务\n */\n public async startTask(taskDescription: AgentMessage['content']): Promise<void> {\n this.setState(AgentState.THINKING);\n try {\n await this.memory.clear();\n // 重置循环计数器\n this.loopCount = 0;\n await this.memory.appendMessage({\n role: 'user',\n content: taskDescription,\n });\n\n await this.loop();\n } catch (err) {\n this.setState(AgentState.ERROR);\n throw err;\n }\n }\n\n /**\n * 读取项目级 Agent Rules:\n * 1. ${cwd}/Agents.md\n * 2. ${cwd}/.agents/rules/ 一级目录下所有 .md 文件\n * 将内容合并为一段文本,供系统提示词注入。\n */\n private async getAgentRules(): Promise<string> {\n const cwd = this.runtime.env.cwd();\n const rules: string[] = [];\n\n // 1. Agents.md\n const agentsMdPath = this.runtime.path.join(cwd, 'Agents.md');\n try {\n if (await this.runtime.fs.fileExists(agentsMdPath)) {\n const content = await this.runtime.fs.readFile(agentsMdPath);\n if (content && content.trim()) {\n rules.push(content.trim());\n }\n }\n } catch (e) {\n // Agents.md 读取失败时静默忽略\n }\n\n // 2. .agents/rules/ 一级目录下所有 .md 文件\n try {\n if (await this.runtime.fs.fileExists(this.rulesDir)) {\n const files = await this.runtime.fs.readDir(this.rulesDir);\n for (const file of files) {\n if (!file.isFile()) {\n continue;\n }\n const name = String(file.name);\n if (!name.toLowerCase().endsWith('.md')) {\n continue;\n }\n const filePath = this.runtime.path.join(this.rulesDir, name);\n try {\n const content = await this.runtime.fs.readFile(filePath);\n if (content && content.trim()) {\n rules.push(`\\`\\`\\`markdown\\n# ${name}\\n${content.trim()}\\`\\`\\``);\n }\n } catch (e) {\n // 单个规则文件读取失败时忽略,继续读取其他文件\n }\n }\n }\n } catch (e) {\n // 规则目录读取失败时静默忽略\n }\n\n return rules.join('\\n---\\n');\n }\n\n private async getSkills() {\n const skillDir = this.skillDir;\n const skillList: { name: string; description: string }[] = [];\n if (!(await this.runtime.fs.fileExists(skillDir))) {\n return skillList;\n }\n const files = await this.runtime.fs.readDir(skillDir);\n const skills = files.filter((item) => item.isDirectory()).map((item) => item.name);\n\n if (skills.length === 0) {\n return skillList;\n }\n\n for (const skill of skills) {\n try {\n const skillPath = this.runtime.path.join(skillDir, skill);\n const files = await this.runtime.fs.readDir(skillPath);\n const skillFile = files.map((item) => item.isFile()).find((f) => f.toLowerCase() === 'skill.md');\n if (skillFile) {\n const mdPath = this.runtime.path.join(skillPath, skillFile);\n const mdContent = await this.runtime.fs.readFile(mdPath);\n const parsed = matter(mdContent);\n if (parsed.data && parsed.data.description) {\n let description = String(parsed.data.description).trim();\n description = description.replace(/\\s+/g, ' ').trim();\n if (description) {\n skillList.push({\n name: skill,\n description: description,\n });\n }\n }\n }\n } catch (e) {\n // SKILL.md might not exist or be invalid, ignore\n return skillList;\n }\n }\n }\n\n /**\n * 核心任务循环\n */\n private async loop(): Promise<void> {\n const { sysPrompt, noUseTollSysPrompt } = await this.getPrompt(true);\n const { customTools, customToolNames } = this;\n while (this.state === AgentState.THINKING) {\n this.loopCount++;\n // 检查是否超过最大循环次数\n if (this.loopCount > this.maxLoopCount) {\n await this.memory.appendMessage({\n role: 'user',\n content: `[ERROR] You have exceeded the maximum loop limit of ${this.maxLoopCount} times. Please immediately call the agent_attempt_completion tool to return the final result. If you have pending user-specified tools to execute, you may run them first before calling agent_attempt_completion.`,\n });\n }\n // 1.历史记忆\n const history = await this.memory.getHistory();\n\n // 2. 调用 API\n const stream = this.api.createMessage(sysPrompt, history);\n let fullResponseText = '';\n\n // 3. 处理流式输出\n let fullReasoningText = '';\n for await (const chunk of stream) {\n if (chunk.type === 'text' && chunk.text) {\n fullResponseText += chunk.text;\n } else if (chunk.type === 'reasoning' && chunk.reasoning) {\n fullReasoningText += chunk.reasoning;\n }\n if (this.onStreamChunk) {\n this.onStreamChunk(chunk);\n }\n }\n\n // 4. 将助手的完整回复记入 Memory\n await this.memory.appendMessage({\n role: 'assistant',\n content: fullResponseText,\n ...(fullReasoningText ? { reasoning: fullReasoningText } : {}),\n });\n\n // 5. 解析回复中的工具调用\n const parsedBlocks = parseAssistantMessageV2(fullResponseText, this.allToolParamNames);\n const toolUses = parsedBlocks.filter((b) => b.type === 'tool_use') as ToolUse[];\n\n if (toolUses.length === 0) {\n // 如果没有工具调用,错误\n await this.memory.appendMessage({\n role: 'user',\n content: noUseTollSysPrompt,\n });\n } else {\n // 6. 顺序执行工具(为简化模型,暂时使用 await 顺序执行)\n const toolResults = [];\n for (const tool of toolUses) {\n if (this.onToolCall) {\n // 如果宿主接管了工具执行或需要拦截请求权限\n const hookResult = await this.onToolCall(tool);\n if (hookResult) {\n toolResults.push({ tool, result: hookResult });\n continue;\n }\n }\n\n // 外部工具调用\n if (customToolNames.has(tool.name)) {\n const customTool = customTools.find((t: any) => t.name === tool.name);\n if (customTool.onCall) {\n try {\n const res = await customTool.onCall(tool.params);\n toolResults.push({ tool, result: res });\n } catch (error: any) {\n toolResults.push({ tool, result: `Error: ${error.message}` });\n }\n } else {\n toolResults.push({ tool, result: `Error: Custom tool \"${tool.name}\" does not have an onCall method.` });\n }\n continue;\n }\n\n // 内置逻辑分发(可由 IAgentRuntime 支撑的核心工具)\n if (tool.name === AgentDefaultTool.ATTEMPT) {\n toolResults.push({ tool, result: 'Task marked as completed.' });\n this.setState(AgentState.FINISHED);\n break; // 中断循环\n } else if (tool.name === AgentDefaultTool.FILE_READ) {\n const path = tool.params.path;\n if (path) {\n try {\n const content = await this.runtime.fs.readFile(path);\n toolResults.push({ tool, result: content });\n } catch (error: any) {\n toolResults.push({ tool, result: `Error: ${error.message}` });\n }\n } else {\n toolResults.push({ tool, result: 'Error: No path provided.' });\n }\n } else if (tool.name === AgentDefaultTool.BASH) {\n const cmd = tool.params.command;\n if (cmd) {\n const result = await this.runtime.terminal.execCommand(cmd);\n toolResults.push({ tool, result: `STDOUT: ${result.stdout}\\nSTDERR: ${result.stderr}` });\n }\n } else if (tool.name === AgentDefaultTool.FILE_NEW) {\n const path = tool.params.path;\n const content = tool.params.content;\n if (path && content !== undefined) {\n try {\n await this.runtime.fs.writeFile(path, content);\n toolResults.push({ tool, result: `Successfully wrote to ${path}` });\n } catch (error: any) {\n toolResults.push({ tool, result: `Error: ${error.message}` });\n }\n }\n } else if (tool.name === AgentDefaultTool.LIST_FILES) {\n const path = tool.params.path || this.runtime.env.cwd();\n try {\n const files = await this.runtime.fs.readDir(path);\n // 输出是 文件还是目录\n toolResults.push({ tool, result: files.map((f) => f.name + (f.isDirectory() ? '/' : '')).join('\\n') });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else if (tool.name === AgentDefaultTool.FILE_EDIT) {\n const path = tool.params.path;\n const diff = tool.params.diff;\n if (path && diff) {\n try {\n const content = await this.runtime.fs.readFile(path);\n const newContent = this.applyDiff(content, diff);\n await this.runtime.fs.writeFile(path, newContent);\n toolResults.push({ tool, result: `Successfully replaced content in ${path}` });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else {\n toolResults.push({ tool, result: 'Error: Missing path or diff.' });\n }\n } else if (tool.name === AgentDefaultTool.FILE_DELETE) {\n const path = tool.params.path;\n if (path) {\n try {\n await this.runtime.fs.deleteFile(path);\n toolResults.push({ tool, result: `Successfully deleted ${path}` });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else {\n toolResults.push({ tool, result: 'Error: Missing path.' });\n }\n } else if (tool.name === AgentDefaultTool.DIR_DELETE) {\n const path = tool.params.path;\n if (path) {\n try {\n await this.runtime.fs.deleteDirectory(path);\n toolResults.push({ tool, result: `Successfully deleted ${path}` });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else {\n toolResults.push({ tool, result: 'Error: Missing path.' });\n }\n } else if (tool.name === AgentDefaultTool.ASK) {\n const question = tool.params.question;\n toolResults.push({ tool, result: `Asking user: ${question}` });\n this.setState(AgentState.WAITING_FOR_USER);\n // 遇到主动提问,立刻跳出循环,等待外部应用 resume()\n break;\n } else if (tool.name === AgentDefaultTool.SEARCH) {\n const path = tool.params.path || this.runtime.env.cwd();\n const regexStr = tool.params.regex;\n const filePattern = tool.params.file_pattern;\n if (regexStr && path) {\n try {\n let result;\n if (typeof this.runtime.fs.searchFiles === 'function') {\n result = await this.runtime.fs.searchFiles(path, regexStr, filePattern);\n } else {\n result = await this.searchFiles(path, regexStr, filePattern);\n }\n toolResults.push({ tool, result: `${result}` });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else {\n toolResults.push({ tool, result: `Error: miss path or regex params` });\n }\n } else if (tool.name === AgentDefaultTool.MCP_USE) {\n const serverName = tool.params.server_name;\n const toolName = tool.params.tool_name;\n const args = tool.params.arguments;\n if (this.mcp && serverName && toolName) {\n try {\n let parsedArgs = args;\n if (typeof args === 'string') {\n parsedArgs = JSON.parse(args);\n }\n const result = await this.mcp.callTool(serverName, toolName, parsedArgs);\n if (result.isError) {\n toolResults.push({ tool, result: `Error executing MCP tool: ${JSON.stringify(result.content)}` });\n } else {\n toolResults.push({ tool, result: `${JSON.stringify(result.content)}` });\n }\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else {\n toolResults.push({ tool, result: `Error: MCP Manager not available or missing parameters.` });\n }\n } else if (tool.name === AgentDefaultTool.MCP_ACCESS) {\n const serverName = tool.params.server_name;\n const uri = tool.params.uri;\n if (this.mcp && this.mcp.readResource && serverName && uri) {\n try {\n const result = await this.mcp.readResource(serverName, uri);\n toolResults.push({ tool, result: `${JSON.stringify(result)}` });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else {\n toolResults.push({ tool, result: `Error: MCP Manager not available, readResource not implemented, or missing parameters.` });\n }\n } else if (tool.name === AgentDefaultTool.MCP_DOCS) {\n // 提供一个简短的关于创建和使用 MCP 的静态文档,供 LLM 了解如何构建和提供 MCP\n const docs = `MCP (Model Context Protocol) is used to connect to external tools/resources. To build one, typically you create an HTTP/stdio server responding to MCP defined JSON-RPC messages...`;\n toolResults.push({ tool, result: docs });\n } else if (tool.name === AgentDefaultTool.LIST_CODE_DEF) {\n // 简单的 LIST_CODE_DEF 实现\n const path = tool.params.path || this.runtime.env.cwd();\n try {\n const result = await this.runtime.fs.searchFiles?.(path, '^(class|function|const|let|var|export|interface|type)\\\\s+\\\\w+', '*.ts|*.js');\n toolResults.push({ tool, result: `${result ? result : 'No definitions found or searchFiles not supported.'}` });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n } else if (tool.name === AgentDefaultTool.WEB_FETCH) {\n const url = tool.params.url;\n if (url) {\n try {\n const res = await fetch(url);\n const text = await res.text();\n // 简单截断防止超长\n toolResults.push({ tool, result: text.substring(0, 3000) });\n } catch (e: any) {\n toolResults.push({ tool, result: `Error: ${e.message}` });\n }\n }\n } else if (tool.name === AgentDefaultTool.TODO) {\n toolResults.push({ tool, result: `Focus chain updated successfully.` });\n } else if (tool.name === AgentDefaultTool.PLAN_MODE || tool.name === AgentDefaultTool.ACT_MODE) {\n toolResults.push({ tool, result: `Mode switch acknowledged.` });\n } else if (tool.name === AgentDefaultTool.NEW_RULE) {\n toolResults.push({ tool, result: `Rule recorded in current context.` });\n } else if (tool.name === AgentDefaultTool.NEW_TASK) {\n toolResults.push({ tool, result: `New task request received. Terminating current task.` });\n this.setState(AgentState.FINISHED);\n break;\n } else if (tool.name === AgentDefaultTool.LOAD_SKILL) {\n const skillName = (tool.params as any).skill_name || (tool.params as any).skill;\n if (!skillName) {\n toolResults.push({ tool, result: `\"Error: Missing required parameter 'skill_name'. Please provide the name of the skill to activate.\"` });\n } else {\n const skillDir = this.skillDir;\n // 按照约定从本地硬盘查找 skillDir/SKILL.md\n const skillFilePath = this.runtime.path.join(skillDir, skillName, 'SKILL.md');\n try {\n const fileExists = await this.runtime.fs.fileExists(skillFilePath);\n if (!fileExists) {\n toolResults.push({ tool, result: `Error: Skill \"${skillName}\" not found at ${skillFilePath}.` });\n } else {\n const content = await this.runtime.fs.readFile(skillFilePath);\n toolResults.push({\n tool,\n result: `# Skill \"${skillName}\" is now active\\n\\n${content}\\n\\n---\\nIMPORTANT: The skill is now loaded. Do NOT call agent_load_skill again for this task. Simply follow the instructions above to complete the user's request.`,\n });\n }\n } catch (err: any) {\n toolResults.push({ tool, result: `Error loading skill \"${skillName}\": ${err.message}` });\n }\n }\n } else if (tool.name === AgentDefaultTool.BROWSER || tool.name === AgentDefaultTool.WEB_SEARCH || tool.name === AgentDefaultTool.APPLY_PATCH) {\n // 这些高级工具通常需要宿主环境的深度集成(如 Puppeteer、真实搜索引擎、Patch 引擎等)\n // 如果宿主没有通过 onToolCall 拦截,默认返回提示信息\n toolResults.push({ tool, result: `This tool requires specific host integration. If you see this, the host environment has not implemented it yet.` });\n } else if (\n tool.name === AgentDefaultTool.CONDENSE ||\n tool.name === AgentDefaultTool.SUMMARIZE_TASK ||\n tool.name === AgentDefaultTool.REPORT_BUG ||\n tool.name === AgentDefaultTool.GENERATE_EXPLANATION\n ) {\n // 这些主要起记录/输出作用的工具\n toolResults.push({ tool, result: `Action logged successfully.` });\n } else {\n // 未知或新增工具兜底\n toolResults.push({ tool, result: `Executed by host or unsupported.` });\n }\n }\n\n // 7. 如果任务未完成,把执行结果告诉 LLM\n if (this.state === AgentState.THINKING && toolResults.length > 0) {\n let toolResultsContext = toolResults\n .map((tr) => `<${TOOL_RESULT_BLOCK} tool_name=\"${tr.tool.name}\">\\n${typeof tr.result === 'string' ? tr.result.trim() : JSON.stringify(tr.result)}\\n</${TOOL_RESULT_BLOCK}>`)\n .join('\\n\\n');\n const lastResult = toolResults[toolResults.length - 1];\n if (lastResult && lastResult.tool.name !== AgentDefaultTool.ATTEMPT) {\n toolResultsContext += `\\n${this.promptManager.getUsedToolResultInstructions()}`;\n }\n if (this.onStreamChunk) {\n this.onStreamChunk({ type: 'text', text: toolResultsContext });\n }\n await this.memory.appendMessage({\n role: 'user',\n content: toolResultsContext,\n });\n // 循环将继续,发送新的请求\n }\n }\n }\n }\n\n /**\n * 简单的 Diff 解析与替换辅助方法\n */\n private applyDiff(content: string, diff: string): string {\n const regex = /-------\\s*SEARCH\\r?\\n(.*?)\\r?\\n=======\\r?\\n(.*?)\\r?\\n\\+\\+\\+\\+\\+\\+\\+\\s*REPLACE/gs;\n let newContent = content;\n let match;\n let matchCount = 0;\n while ((match = regex.exec(diff)) !== null) {\n matchCount++;\n const searchBlock = match[1];\n const replaceBlock = match[2];\n const idx = newContent.indexOf(searchBlock);\n if (idx !== -1) {\n newContent = newContent.substring(0, idx) + replaceBlock + newContent.substring(idx + searchBlock.length);\n } else {\n throw new Error(`Search block not found in file:\\n${searchBlock.substring(0, 100)}...`);\n }\n }\n if (matchCount === 0) {\n throw new Error(`No valid SEARCH/REPLACE blocks found in the diff.`);\n }\n return newContent;\n }\n\n /**\n * 恢复被中断的循环(例如等待用户输入/确认后继续)\n */\n public async resume(userInput?: string): Promise<void> {\n if (userInput) {\n await this.memory.appendMessage({\n role: 'user',\n content: userInput,\n });\n }\n this.setState(AgentState.THINKING);\n await this.loop();\n }\n\n public async appendHistory(history: AgentMessage[]) {\n for (const message of history) {\n await this.memory.appendMessage(message);\n }\n }\n\n public async getHistory() {\n return this.memory.getHistory();\n }\n\n public async searchFiles(dirpath: string, regex: string, filePattern?: string) {\n const matches: Array<string> = [];\n const contentRe = new RegExp(regex);\n const nameRe = filePattern ? new RegExp(filePattern.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*')) : null;\n const SKIP_DIRS = new Set(['.git', 'dist', '.agent', '.turbopack']);\n\n const walk = async (dir: string, depth: number) => {\n if (depth > 8 || matches.length >= 100) {\n return;\n }\n let entries: Array<any>;\n try {\n entries = await this.runtime.fs.readDir(dir, { recursive: false });\n } catch {\n return;\n }\n for (const entry of entries) {\n if (matches.length >= 100) {\n break;\n }\n const child = dir === '.' ? entry.name : `${dir}/${entry.name}`;\n if (entry.isDirectory()) {\n if (!SKIP_DIRS.has(entry.name)) {\n await walk(child, depth + 1);\n }\n } else if (entry.isFile()) {\n if (nameRe && !nameRe.test(entry.name)) {\n continue;\n }\n try {\n const content = (await this.runtime.fs.readFile(child, 'utf8')).toString();\n if (contentRe.test(content)) {\n matches.push(child);\n }\n } catch {\n // 忽略单个文件读取失败\n }\n }\n }\n };\n\n await walk(dirpath, 0);\n return matches.join('\\n');\n }\n}\n","export const VERSION = '0.1.0';\n\n// @ts-ignore\nglobalThis.AI_SDK_LOG_WARNINGS = false;\n\nexport * from './runtime';\nexport * from './shared/tools';\nexport * from './parser';\nexport * from './prompt';\nexport * from './llm';\nexport * from './mcp';\nexport * from './agent';\nexport * from './memory';\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
1
|
import { IApiHandler, ApiProviderInfo, AgentMessage, ApiStreamChunk, IMemoryManager, IPromptManager, IMcpManager, McpServerInfo, McpTool, McpToolCallResult, IAgentRuntime, ClineAgent } from '../index.mjs';
|
|
3
2
|
export { AgentDefaultTool, AgentOptions, AgentState, AssistantMessageContent, READ_ONLY_TOOLS, ReasoningStreamContent, TOOL_RESULT_BLOCK, TextStreamContent, ToolParamName, ToolUse, VERSION, defaultTools, getToolUseNames, parseAssistantMessageV2, setDynamicToolUseNames, toolParamNames, toolUseNames } from '../index.mjs';
|
|
4
3
|
import { W as WebMemoryManager } from '../WebMemoryManager-Bk19j8i6.mjs';
|
|
@@ -68,6 +67,7 @@ declare class NodePromptManager implements IPromptManager {
|
|
|
68
67
|
customTools?: any[];
|
|
69
68
|
}): string;
|
|
70
69
|
getNoUseToolInstructions(context: any): string;
|
|
70
|
+
getUsedToolResultInstructions(): string;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
interface StdioServerConfig {
|
|
@@ -103,12 +103,12 @@ declare class NodeMcpManager implements IMcpManager {
|
|
|
103
103
|
*/
|
|
104
104
|
declare class DefaultNodeRuntime implements IAgentRuntime {
|
|
105
105
|
fs: {
|
|
106
|
-
readFile: (filepath: string) => Promise<
|
|
106
|
+
readFile: (filepath: string, options?: any) => Promise<NonSharedBuffer>;
|
|
107
107
|
writeFile: (filepath: string, content: string) => Promise<void>;
|
|
108
108
|
deleteFile: (filepath: string) => Promise<void>;
|
|
109
109
|
deleteDirectory: (dirpath: string) => Promise<void>;
|
|
110
110
|
fileExists: (filepath: string) => Promise<boolean>;
|
|
111
|
-
readDir: (dirpath: string) => Promise<
|
|
111
|
+
readDir: (dirpath: string, options: any) => Promise<string[]>;
|
|
112
112
|
mkdir: (dirpath: string) => Promise<void>;
|
|
113
113
|
};
|
|
114
114
|
path: {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
1
|
import { IApiHandler, ApiProviderInfo, AgentMessage, ApiStreamChunk, IMemoryManager, IPromptManager, IMcpManager, McpServerInfo, McpTool, McpToolCallResult, IAgentRuntime, ClineAgent } from '../index.js';
|
|
3
2
|
export { AgentDefaultTool, AgentOptions, AgentState, AssistantMessageContent, READ_ONLY_TOOLS, ReasoningStreamContent, TOOL_RESULT_BLOCK, TextStreamContent, ToolParamName, ToolUse, VERSION, defaultTools, getToolUseNames, parseAssistantMessageV2, setDynamicToolUseNames, toolParamNames, toolUseNames } from '../index.js';
|
|
4
3
|
import { W as WebMemoryManager } from '../WebMemoryManager-DXxLUDBB.js';
|
|
@@ -68,6 +67,7 @@ declare class NodePromptManager implements IPromptManager {
|
|
|
68
67
|
customTools?: any[];
|
|
69
68
|
}): string;
|
|
70
69
|
getNoUseToolInstructions(context: any): string;
|
|
70
|
+
getUsedToolResultInstructions(): string;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
interface StdioServerConfig {
|
|
@@ -103,12 +103,12 @@ declare class NodeMcpManager implements IMcpManager {
|
|
|
103
103
|
*/
|
|
104
104
|
declare class DefaultNodeRuntime implements IAgentRuntime {
|
|
105
105
|
fs: {
|
|
106
|
-
readFile: (filepath: string) => Promise<
|
|
106
|
+
readFile: (filepath: string, options?: any) => Promise<NonSharedBuffer>;
|
|
107
107
|
writeFile: (filepath: string, content: string) => Promise<void>;
|
|
108
108
|
deleteFile: (filepath: string) => Promise<void>;
|
|
109
109
|
deleteDirectory: (dirpath: string) => Promise<void>;
|
|
110
110
|
fileExists: (filepath: string) => Promise<boolean>;
|
|
111
|
-
readDir: (dirpath: string) => Promise<
|
|
111
|
+
readDir: (dirpath: string, options: any) => Promise<string[]>;
|
|
112
112
|
mkdir: (dirpath: string) => Promise<void>;
|
|
113
113
|
};
|
|
114
114
|
path: {
|