cast-code 1.0.7 → 1.0.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/modules/core/services/deep-agent.service.js +6 -1
- package/dist/modules/core/services/deep-agent.service.js.map +1 -1
- package/dist/modules/git/services/commit-generator.service.js +432 -114
- package/dist/modules/git/services/commit-generator.service.js.map +1 -1
- package/dist/modules/tasks/services/plan-mode.service.js +33 -25
- package/dist/modules/tasks/services/plan-mode.service.js.map +1 -1
- package/dist/modules/tasks/services/task-tools.service.js +3 -3
- package/dist/modules/tasks/services/task-tools.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -575,7 +575,12 @@ Keep the summary under 500 words. Output ONLY the summary, no preamble.`),
|
|
|
575
575
|
}
|
|
576
576
|
async executeTask(task) {
|
|
577
577
|
try {
|
|
578
|
-
const message =
|
|
578
|
+
const message = [
|
|
579
|
+
'Voce esta executando uma tarefa de um plano ja aprovado.',
|
|
580
|
+
'NAO use enter_plan_mode nem exit_plan_mode nesta tarefa.',
|
|
581
|
+
`Tarefa:\n**${task.subject}**\n\n${task.description}`,
|
|
582
|
+
'Implemente diretamente o que foi pedido e valide o resultado.'
|
|
583
|
+
].join('\n\n');
|
|
579
584
|
let fullResponse = '';
|
|
580
585
|
for await (const chunk of this.chat(message)){
|
|
581
586
|
fullResponse += chunk;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/core/services/deep-agent.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { BaseChatModel } from '@langchain/core/language_models/chat_models';\nimport { HumanMessage, AIMessage, SystemMessage, BaseMessage } from '@langchain/core/messages';\nimport { execSync } from 'child_process';\nimport { createDeepAgent, FilesystemBackend } from 'deepagents';\nimport { MultiLlmService } from '../../../common/services/multi-llm.service';\nimport { MarkdownRendererService } from '../../../common/services/markdown-renderer.service';\nimport { AgentRegistryService } from '../../agents/services/agent-registry.service';\nimport { ToolsRegistryService } from '../../tools/services/tools-registry.service';\nimport { McpRegistryService } from '../../mcp/services/mcp-registry.service';\nimport { ProjectLoaderService } from '../../project/services/project-loader.service';\nimport { ProjectContextService } from '../../project/services/project-context.service';\nimport { SkillRegistryService } from '../../skills/services/skill-registry.service';\nimport { MemoryService } from '../../memory/services/memory.service';\nimport { ProjectInitResult } from '../../project/types';\nimport { Task } from '../../tasks/types/task.types';\nimport { McpServerSummary } from '../../mcp/types';\n\nconst SUMMARIZE_THRESHOLD = 40;\nconst KEEP_RECENT = 10;\nconst RECURSION_LIMIT = 100;\nconst DEEPAGENT_BUILTIN_TOOLS = new Set([\n 'read_file', 'write_file', 'edit_file', 'glob', 'grep', 'ls',\n 'write_todos', 'task',\n]);\n\n@Injectable()\nexport class DeepAgentService {\n private agent: any;\n private model: BaseChatModel | null = null;\n private messages: BaseMessage[] = [];\n private tokenCount = 0;\n private lastToolOutputs: { tool: string; output: string }[] = [];\n\n private cachedSystemPrompt: string = '';\n private cachedExtraTools: any[] = [];\n private cachedMcpTools: any[] = [];\n private cachedMcpDiscoveryTools: any[] = [];\n private cachedSubagents: any[] = [];\n\n constructor(\n private readonly multiLlmService: MultiLlmService,\n private readonly agentRegistry: AgentRegistryService,\n private readonly toolsRegistry: ToolsRegistryService,\n private readonly mcpRegistry: McpRegistryService,\n private readonly projectLoader: ProjectLoaderService,\n private readonly projectContext: ProjectContextService,\n private readonly skillRegistry: SkillRegistryService,\n private readonly memoryService: MemoryService,\n private readonly markdownRenderer: MarkdownRendererService,\n ) {}\n\n async initialize(): Promise<ProjectInitResult> {\n const projectPath = await this.projectLoader.detectProject();\n\n if (projectPath) {\n const projectConfig = await this.projectLoader.loadProject(projectPath);\n\n if (projectConfig.context) {\n this.projectContext.setContext(projectConfig.context);\n }\n\n if (projectConfig.mcpConfigs) {\n this.mcpRegistry.loadConfigs(projectConfig.mcpConfigs);\n await this.mcpRegistry.connectAll();\n }\n\n const agentsOverridePath = this.projectLoader.getAgentsOverridePath(projectPath);\n const legacyAgentsOverridePath = this.projectLoader.getLegacyAgentsOverridePath(projectPath);\n await this.agentRegistry.loadProjectAgents(agentsOverridePath);\n await this.agentRegistry.loadProjectAgents(legacyAgentsOverridePath);\n\n const skillsOverridePath = this.projectLoader.getSkillsOverridePath(projectPath);\n const legacySkillsOverridePath = this.projectLoader.getLegacySkillsOverridePath(projectPath);\n await this.skillRegistry.loadProjectSkills(skillsOverridePath);\n await this.skillRegistry.loadProjectSkills(legacySkillsOverridePath);\n\n await this.memoryService.initialize(projectPath);\n }\n\n this.model = this.multiLlmService.createStreamingModel('default');\n\n const contextPrompt = this.projectContext.getContextPrompt();\n const memoryPrompt = await this.memoryService.getMemoryPrompt();\n const skillKnowledge = this.skillRegistry.getAllSkillKnowledge();\n const subagents = this.agentRegistry.getSubagentDefinitions(contextPrompt);\n const allTools = this.toolsRegistry.getAllTools();\n const mcpTools = this.mcpRegistry.getAllMcpTools();\n\n const extraTools = allTools.filter(t => !DEEPAGENT_BUILTIN_TOOLS.has(t.name));\n const mcpDiscoveryTools = this.mcpRegistry.getDiscoveryTools();\n const mcpServerSummaries = this.mcpRegistry.getServerSummaries();\n\n const systemPrompt = this.buildSystemPrompt(contextPrompt, memoryPrompt, skillKnowledge, subagents, allTools, mcpTools, mcpServerSummaries);\n\n this.cachedSystemPrompt = systemPrompt;\n this.cachedExtraTools = extraTools;\n this.cachedMcpTools = mcpTools;\n this.cachedMcpDiscoveryTools = mcpDiscoveryTools;\n this.cachedSubagents = subagents;\n\n this.agent = createDeepAgent({\n model: this.model,\n systemPrompt,\n tools: [...extraTools, ...mcpTools, ...mcpDiscoveryTools],\n subagents,\n backend: () => new FilesystemBackend({ rootDir: process.cwd() }),\n });\n\n return {\n projectPath,\n hasContext: this.projectContext.hasContext(),\n agentCount: subagents.length,\n toolCount: extraTools.length + mcpTools.length,\n };\n }\n\n async reinitializeModel(): Promise<void> {\n this.model = this.multiLlmService.createStreamingModel('default');\n this.agent = createDeepAgent({\n model: this.model,\n systemPrompt: this.cachedSystemPrompt,\n tools: [...this.cachedExtraTools, ...this.cachedMcpTools, ...this.cachedMcpDiscoveryTools],\n subagents: this.cachedSubagents,\n backend: () => new FilesystemBackend({ rootDir: process.cwd() }),\n });\n }\n\n private getGitStatus(): string {\n try {\n const branch = execSync('git rev-parse --abbrev-ref HEAD 2>/dev/null', {\n encoding: 'utf-8',\n cwd: process.cwd(),\n }).trim();\n const status = execSync('git status --short 2>/dev/null', {\n encoding: 'utf-8',\n cwd: process.cwd(),\n }).trim();\n const log = execSync('git log --oneline -5 2>/dev/null', {\n encoding: 'utf-8',\n cwd: process.cwd(),\n }).trim();\n\n let result = `Branch: ${branch}`;\n if (status) {\n result += `\\nChanges:\\n${status}`;\n } else {\n result += `\\nStatus: clean`;\n }\n if (log) {\n result += `\\nRecent commits:\\n${log}`;\n }\n return result;\n } catch {\n return 'Not a git repository';\n }\n }\n\n private buildSystemPrompt(\n contextPrompt: string,\n memoryPrompt: string,\n skillKnowledge: string,\n subagents: any[],\n tools: any[],\n mcpTools: any[],\n mcpServerSummaries: McpServerSummary[] = [],\n ): string {\n const gitInfo = this.getGitStatus();\n const allToolNames = [\n ...tools.map((t: any) => t.name),\n ...mcpTools.map((t: any) => t.name),\n ];\n\n const parts: string[] = [];\n\n parts.push(\n `You are Cast, an autonomous AI coding assistant running as a CLI tool.`,\n `You are a highly capable agent that can independently explore codebases, make decisions, execute multi-step plans, and delegate work to specialized sub-agents. You help developers with software engineering tasks including writing code, debugging, refactoring, and answering questions about codebases.`,\n ``,\n );\n\n parts.push(\n `# CRITICAL RULES`,\n ``,\n `## NEVER Guess — ALWAYS Verify`,\n `- NEVER say a file \"doesn't exist\" without FIRST using glob or read_file to check`,\n `- NEVER guess file contents — ALWAYS read_file before answering about a file`,\n `- NEVER assume a directory structure — ALWAYS use ls or glob to discover it`,\n `- NEVER say \"I don't have access\" — you DO have access through your tools`,\n `- If a user mentions a file path, your FIRST action must be to read it or verify it exists`,\n ``,\n `## Read Before Edit`,\n `- ALWAYS use read_file on a file before using edit_file or write_file on it`,\n `- NEVER edit a file you haven't read in this conversation`,\n `- Understand existing code before suggesting modifications`,\n ``,\n `## Minimal Changes`,\n `- Only make changes that are directly requested or clearly necessary`,\n `- Don't add features, refactor code, or make \"improvements\" beyond what was asked`,\n `- Don't add docstrings, comments, or type annotations to code you didn't change`,\n `- Preserve existing code style and conventions`,\n ``,\n );\n\n const builtInCount = tools.length;\n const mcpCount = mcpTools.length;\n const discoveryCount = 2;\n\n parts.push(\n `# Available Tools`,\n ``,\n `You have ${allToolNames.length} tools available:`,\n `- **Built-in**: ${builtInCount} tools (read_file, write_file, edit_file, glob, grep, ls, shell, task management, memory)`,\n );\n\n if (mcpCount > 0) {\n const serverCount = mcpServerSummaries.length;\n parts.push(`- **MCP**: ${mcpCount} tools from ${serverCount} server(s)`);\n }\n\n if (mcpCount > 0) {\n parts.push(`- **Discovery**: ${discoveryCount} tools (mcp_list_servers, mcp_list_tools)`);\n }\n\n parts.push(\n ``,\n `USE THEM PROACTIVELY.`,\n ``,\n );\n\n if (tools.length > 0) {\n parts.push(`## Built-in Tools`);\n for (const t of tools) {\n parts.push(`- **${t.name}**: ${t.description}`);\n }\n parts.push(``);\n }\n\n if (mcpTools.length > 0) {\n parts.push(`## MCP Tools (External Services)`);\n parts.push(``);\n parts.push(`**⚠️ Important**: Only tools from servers with status \"connected\" are available. Tools from disconnected servers will fail.`);\n parts.push(``);\n\n if (mcpServerSummaries.length > 0) {\n for (const server of mcpServerSummaries) {\n const statusIcon = server.status === 'connected' ? '✓' : '✗';\n parts.push(`### ${statusIcon} ${server.name} (${server.transport}, ${server.status}) — ${server.toolCount} tools`);\n for (const td of server.toolDescriptions) {\n parts.push(`- **${td.name}**: ${td.description}`);\n }\n }\n } else {\n for (const t of mcpTools) {\n parts.push(`- **${t.name}**: ${t.description}`);\n }\n }\n parts.push(`## MCP Discovery Tools`);\n parts.push(`- **mcp_list_servers**: List all connected MCP servers with status and tool counts`);\n parts.push(`- **mcp_list_tools**: List tools from a specific server or all servers`);\n parts.push(``);\n }\n\n parts.push(\n `# Tool Usage Guidelines`,\n ``,\n `## File Operations`,\n `- Use **read_file** to read file contents. Always read before editing.`,\n `- Use **write_file** only to create NEW files. Prefer edit_file for existing files.`,\n `- Use **edit_file** for precise string replacements in existing files.`,\n ` - Provide enough context in old_string to make it unique`,\n ` - Use replace_all=true only when renaming across the file`,\n ``,\n `## Search & Discovery`,\n `- Use **glob** to find files by pattern (e.g., \"**/*.ts\", \"src/**/*.service.ts\")`,\n `- Use **grep** to search content within files (supports regex)`,\n ` - Use context_lines to see surrounding code`,\n ` - Use output_mode=\"files_with_matches\" to just find file paths`,\n `- Use **ls** to list directory contents`,\n `- When looking for something, try glob first, then grep if needed`,\n ``,\n `## Shell Commands`,\n `- Use **shell** for git, npm, docker, and other CLI operations`,\n `- Dangerous commands (rm -rf, sudo, git push --force) require user approval`,\n `- Use **shell_background** for long-running tasks (dev servers, watch mode)`,\n ``,\n `## Task Management`,\n `- Use **task_create** to break complex work into trackable subtasks`,\n `- Use **task_update** to mark tasks as in_progress or completed`,\n `- Use **task_list** to see all tasks and their status`,\n `- Use **ask_user_question** when you need clarification BEFORE acting`,\n ``,\n `## Memory`,\n `- Use **memory_write** to save important learnings and project insights`,\n `- Use **memory_read** to recall previously saved notes`,\n `- Memory persists across sessions — use it to avoid repeating mistakes`,\n ``,\n );\n\n if (mcpTools.length > 0) {\n parts.push(\n `# MCP Integration Protocol`,\n ``,\n `MCP (Model Context Protocol) tools connect you to external services. They work exactly like built-in tools but reach outside the local filesystem.`,\n ``,\n `## Connected Servers`,\n );\n if (mcpServerSummaries.length > 0) {\n for (const s of mcpServerSummaries) {\n parts.push(`- **${s.name}** (${s.transport}, ${s.status}) — ${s.toolCount} tools`);\n }\n }\n parts.push(\n ``,\n `## When to Use MCP vs Built-in`,\n `| Need | Use |`,\n `|------|-----|`,\n `| Read/write local files | Built-in (read_file, write_file, edit_file) |`,\n `| Search local codebase | Built-in (glob, grep) |`,\n `| Run commands | Built-in (shell) |`,\n `| Interact with external APIs/services | MCP tools |`,\n `| Discover available MCP capabilities | mcp_list_servers, mcp_list_tools |`,\n ``,\n `## MCP Tool Naming Convention`,\n `MCP tools follow the pattern \\`{server}_{tool}\\` (e.g., \\`figma_get_file\\`, \\`github_create_issue\\`).`,\n `The prefix tells you which server provides the tool.`,\n ``,\n `## Discovery`,\n `- Use **mcp_list_servers** to see which servers are connected and their status`,\n `- Use **mcp_list_tools** to explore what tools a server provides (with descriptions)`,\n `- When you're unsure which MCP tool to use, call mcp_list_tools first`,\n ``,\n `## Error Handling`,\n `- If an MCP tool returns an error, check the server status with mcp_list_servers`,\n `- MCP servers can disconnect — if a tool fails, the server may need reconnection`,\n `- Report MCP errors to the user and suggest they check /mcp list in the REPL`,\n ``,\n );\n }\n\n parts.push(\n `# Planning Protocol`,\n ``,\n `## When to Enter Plan Mode`,\n `Use **enter_plan_mode** when:`,\n `- Task touches 3+ files`,\n `- Task involves new features or architecture changes`,\n `- Task is ambiguous and needs scope definition`,\n `- User explicitly asks for a plan`,\n ``,\n `Do NOT plan for: simple fixes, single-file edits, questions, explanations`,\n ``,\n `## Plan Mode Workflow`,\n `1. **enter_plan_mode** — signals you are planning`,\n `2. **Explore rapidly**: Use glob and grep efficiently to understand codebase`,\n `3. **Design**: Create structured plan with specific file changes and order`,\n `4. **exit_plan_mode** — present plan for approval`,\n `5. **Execute immediately** after approval without asking for further confirmation`,\n ``,\n `## Critical: Autonomous Execution`,\n `AFTER the user approves your plan, you MUST:`,\n `- Start implementing immediately`,\n `- Create tasks and execute them sequentially`,\n `- Do NOT ask \"should I proceed?\" or \"ready to start?\"`,\n `- Do NOT wait for additional confirmation`,\n `- Just execute the approved plan autonomously`,\n ``,\n `## Plan Quality Rules`,\n `- Specify WHAT changes and WHY for each file`,\n `- Order by dependency (foundations first)`,\n `- Include verification at the end`,\n `- Use ask_user_question ONLY to clarify requirements, not to ask for permission to execute`,\n ``,\n );\n\n if (subagents.length > 0) {\n parts.push(\n `# Sub-Agent Orchestration`,\n ``,\n `You have ${subagents.length} specialized sub-agents available. Each has domain-specific knowledge and tools.`,\n ``,\n `## Available Sub-Agents`,\n );\n for (const sa of subagents) {\n const mcpAnnotation = sa.mcp && sa.mcp.length > 0 ? ` [MCP: ${sa.mcp.join(', ')}]` : '';\n parts.push(`- **${sa.name}**: ${sa.description}${mcpAnnotation}`);\n }\n parts.push(\n ``,\n `## When to Delegate to Sub-Agents`,\n `- Task requires specialized domain knowledge (React, testing, API design, databases)`,\n `- Multiple independent subtasks can be worked on in parallel`,\n `- Task is well-defined and self-contained (a sub-agent can complete it without further guidance)`,\n `- You want a focused review or analysis (e.g., code review, architecture review)`,\n ``,\n `## When NOT to Delegate`,\n `- Simple tasks you can do yourself quickly`,\n `- Tasks that require back-and-forth with the user`,\n `- Tasks that depend heavily on earlier context in this conversation`,\n ``,\n `## Delegation Pattern`,\n `1. Identify the task and which sub-agent is best suited`,\n `2. Create a clear, specific task description with all necessary context`,\n `3. Delegate execution to that sub-agent (do not stop at planning only)`,\n `4. Track delegated work with task_create/task_update`,\n `5. When the sub-agent returns, verify the result and integrate it`,\n `6. Mark the task as completed`,\n ``,\n `## Delegation Quality Bar`,\n `- If user explicitly asks to use a specific sub-agent, you MUST delegate to it`,\n `- For frontend UI generation from Figma, prefer the frontend sub-agent when available`,\n `- Avoid fake delegation: creating tasks without executing delegated work is not enough`,\n `- Return concrete delegated outputs (files changed, decisions made, validations run)`,\n ``,\n `## Multi-Agent Coordination`,\n `For large tasks, you can orchestrate multiple sub-agents:`,\n `1. Break the work into independent pieces`,\n `2. Assign each piece to the most qualified sub-agent`,\n `3. Track progress with task_create/task_update`,\n `4. Integrate results and verify the combined output`,\n ``,\n `## MCP-Aware Delegation`,\n `When a task involves heavy interaction with an external service (e.g., fetching Figma designs, managing GitHub issues):`,\n `- Check which sub-agents have MCP access (annotated with [MCP: name] above)`,\n `- Delegate MCP-heavy work to the sub-agent with the right MCP connection`,\n `- If no sub-agent has the needed MCP, handle it yourself using the MCP tools directly`,\n `- Include the MCP server name in the task description so the sub-agent knows which tools to use`,\n ``,\n );\n }\n\n parts.push(\n `# Execution Protocol`,\n ``,\n `## Exploring a Project`,\n `1. ls the root directory`,\n `2. Read key config files (package.json, tsconfig.json, etc.)`,\n `3. glob to map directory tree with key patterns`,\n `4. Read the most important files (entry points, main modules)`,\n `5. Present a structured summary`,\n `Be EXHAUSTIVE. Read as many files as needed.`,\n ``,\n `## Implementing Changes`,\n `1. Understand the current codebase (read relevant files)`,\n `2. If complex (3+ files): use enter_plan_mode`,\n `3. Create a task list with task_create for each step`,\n `4. Execute each step, marking tasks as completed`,\n `5. Verify changes (re-read edited files, run tests)`,\n `6. Summarize what was done`,\n ``,\n `## Tool Chain Patterns`,\n `- **Find something**: glob → grep → read_file`,\n `- **Edit a file**: read_file → edit_file → read_file (verify)`,\n `- **Explore a module**: ls → glob(\"module/**/*\") → read_file (key files)`,\n `- **Debug an issue**: grep (error) → read_file → edit_file → shell (test)`,\n `- **New feature**: enter_plan_mode → task_create → [implement] → shell (test)`,\n ``,\n `## Thoroughness Rules`,\n `- NEVER give up after one failed search. Try different patterns and approaches.`,\n `- ALWAYS verify changes by re-reading the file after editing.`,\n `- If tests exist, run them after changes: shell(\"npm test\") or equivalent.`,\n `- When you encounter an error, analyze and fix it — don't just report it.`,\n `- If blocked, try a different approach. If still blocked, ask the user.`,\n ``,\n );\n\n parts.push(\n `# Autonomous Decision-Making`,\n ``,\n `You are an autonomous agent. Make decisions proactively:`,\n ``,\n `## Decision Framework`,\n `| Situation | Action |`,\n `|-----------|--------|`,\n `| User asks to implement something | Explore first, then plan if complex |`,\n `| You find a bug while working | Fix it AND mention it to the user |`,\n `| Test fails after your change | Analyze the failure and fix it |`,\n `| Build fails | Read the error, fix the cause |`,\n `| File you need doesn't exist | Search broader, check for alternatives |`,\n `| Task is ambiguous | ask_user_question BEFORE starting |`,\n `| Task has multiple approaches | Briefly explain options, pick the best one |`,\n `| Something could break | Use enter_plan_mode and verify |`,\n ``,\n `## Self-Correction`,\n `- After editing, always re-read the file to verify the change is correct`,\n `- If a tool call fails, understand why and adjust (don't retry the same thing)`,\n `- If your approach isn't working after 3 attempts, step back and reconsider`,\n `- Save important learnings with memory_write so you don't repeat mistakes`,\n ``,\n );\n\n parts.push(\n `# Git Safety Protocol`,\n `- NEVER update git config`,\n `- NEVER run destructive git commands (push --force, reset --hard, clean -f) without explicit user request`,\n `- NEVER skip hooks (--no-verify) unless user explicitly requests it`,\n `- When committing: stage specific files (not \"git add -A\"), write clear commit messages`,\n `- When creating PRs: summarize all commits, not just the latest`,\n ``,\n );\n\n parts.push(\n `# Response Style`,\n `- Be concise in responses but thorough in your work`,\n `- Show your work: mention which tools you're using and why`,\n `- When showing code changes, explain WHAT changed and WHY`,\n `- Use markdown formatting for readability`,\n `- Reference files with their path (e.g., \"In src/main.ts:\")`,\n ``,\n );\n\n parts.push(\n `# User Mentions`,\n `When the user's message contains <file>, <directory>, <url>, or <git> tags,`,\n `these are automatically injected file/directory contents from @ mentions.`,\n `The content inside these tags is REAL and CURRENT — trust it and use it to answer.`,\n `Do NOT re-read a file that was already provided via a mention tag unless you need a different section.`,\n ``,\n );\n\n if (skillKnowledge) {\n const skillSummaries = this.skillRegistry.getSkillSummaries();\n\n parts.push(\n `# Domain Knowledge`,\n ``,\n `You have ${skillSummaries.length} skills loaded:`,\n );\n\n for (const skill of skillSummaries) {\n parts.push(`- **${skill.name}**: ${skill.description}`);\n }\n\n parts.push(\n ``,\n `The following are the complete guidelines from your skill library. These are reference materials — study them to learn patterns, decision frameworks, and anti-patterns for each domain. Use this knowledge when making decisions about how to approach tasks.`,\n ``,\n skillKnowledge,\n ``,\n );\n }\n\n parts.push(\n `# Environment`,\n `- Working directory: ${process.cwd()}`,\n `- Platform: ${process.platform}`,\n `- Node.js: ${process.version}`,\n ``,\n `# Git Status (snapshot)`,\n gitInfo,\n ``,\n );\n\n if (contextPrompt) {\n parts.push(contextPrompt, ``);\n }\n\n if (memoryPrompt) {\n parts.push(\n `# Auto Memory`,\n `These are notes from previous sessions:`,\n memoryPrompt,\n ``,\n );\n }\n\n return parts.join('\\n');\n }\n\n private formatToolStart(toolName: string, input: any): string {\n const dim = '\\x1b[2m';\n const cyan = '\\x1b[36m';\n const reset = '\\x1b[0m';\n const icon = '\\u23bf';\n\n let detail = '';\n\n switch (toolName) {\n case 'read_file':\n detail = input?.file_path ? ` ${input.file_path}` : '';\n break;\n case 'write_file':\n detail = input?.file_path ? ` ${input.file_path}` : '';\n break;\n case 'edit_file':\n detail = input?.file_path ? ` ${input.file_path}` : '';\n break;\n case 'glob':\n detail = input?.pattern ? ` ${input.pattern}` : '';\n if (input?.cwd) detail += ` in ${input.cwd}`;\n break;\n case 'grep':\n detail = input?.pattern ? ` \"${input.pattern}\"` : '';\n if (input?.file_pattern) detail += ` (${input.file_pattern})`;\n break;\n case 'shell':\n if (input?.command) {\n const cmd = input.command.length > 80 ? input.command.slice(0, 80) + '...' : input.command;\n detail = ` ${cmd}`;\n }\n break;\n case 'shell_background':\n if (input?.command) {\n const cmd = input.command.length > 60 ? input.command.slice(0, 60) + '...' : input.command;\n detail = ` ${cmd}`;\n }\n break;\n case 'ls':\n detail = ` ${input?.directory || input?.path || '.'}`;\n break;\n case 'web_search':\n detail = input?.query ? ` \"${input.query}\"` : '';\n break;\n case 'web_fetch':\n detail = input?.url ? ` ${input.url}` : '';\n break;\n case 'task_create':\n detail = input?.title ? ` \"${input.title}\"` : '';\n break;\n case 'task_update':\n detail = input?.id ? ` #${input.id} → ${input?.status || ''}` : '';\n break;\n case 'task_list':\n detail = '';\n break;\n case 'task_get':\n detail = input?.id ? ` #${input.id}` : '';\n break;\n case 'ask_user_question':\n detail = input?.question ? ` \"${input.question.slice(0, 50)}${input.question.length > 50 ? '...' : ''}\"` : '';\n break;\n case 'enter_plan_mode':\n detail = ' Starting plan...';\n break;\n case 'exit_plan_mode':\n detail = ' Submitting plan';\n break;\n case 'memory_write':\n detail = input?.key ? ` ${input.key}` : '';\n break;\n case 'memory_read':\n detail = input?.key ? ` ${input.key}` : '';\n break;\n case 'memory_search':\n detail = input?.query ? ` \"${input.query}\"` : '';\n break;\n case 'mcp_list_servers':\n detail = ' Listing MCP servers';\n break;\n case 'mcp_list_tools':\n detail = input?.server ? ` server=${input.server}` : ' (all servers)';\n break;\n default:\n if (input) {\n const keys = Object.keys(input);\n if (keys.length > 0) {\n const firstVal = String(input[keys[0]]).slice(0, 60);\n detail = ` ${keys[0]}=${firstVal}`;\n }\n }\n }\n\n return `\\n${dim} ${cyan}${icon}${reset}${dim} ${toolName}${detail}${reset}\\n`;\n }\n\n private formatToolEnd(toolName: string, output: string): string {\n if (!output || output.length === 0) return '';\n\n const dim = '\\x1b[2m';\n const green = '\\x1b[32m';\n const reset = '\\x1b[0m';\n\n switch (toolName) {\n case 'read_file': {\n const lineCount = output.split('\\n').length;\n return `${dim} ${green}\\u2713${reset}${dim} ${lineCount} lines${reset}\\n`;\n }\n case 'write_file':\n return `${dim} ${green}\\u2713${reset}${dim} ${output.slice(0, 120)}${reset}\\n`;\n case 'edit_file': {\n if (output.startsWith('Error')) {\n return `${dim} \\x1b[31m${output.slice(0, 150)}${reset}\\n`;\n }\n return `${dim} ${green}\\u2713${reset}${dim} ${output.slice(0, 120)}${reset}\\n`;\n }\n case 'glob': {\n const lines = output.split('\\n').filter(l => l.trim());\n const fileCount = lines.length;\n const preview = lines.slice(0, 5).map(l => `${dim} ${l.slice(0, 100)}${reset}`).join('\\n');\n const more = fileCount > 5 ? `\\n${dim} ... (${fileCount - 5} more)${reset}` : '';\n return `${preview}${more}\\n`;\n }\n case 'grep': {\n const lines = output.split('\\n').filter(l => l.trim());\n const preview = lines.slice(0, 5).map(l => `${dim} ${l.slice(0, 120)}${reset}`).join('\\n');\n const more = lines.length > 5 ? `\\n${dim} ... (${lines.length - 5} more)${reset}` : '';\n return `${preview}${more}\\n`;\n }\n case 'shell':\n case 'shell_background': {\n const lines = output.split('\\n');\n const preview = lines.slice(0, 8).map(l => `${dim} ${l.slice(0, 150)}${reset}`).join('\\n');\n const more = lines.length > 8 ? `\\n${dim} ... (${lines.length - 8} more lines)${reset}` : '';\n return `${preview}${more}\\n`;\n }\n case 'ls': {\n const lines = output.split('\\n').filter(l => l.trim());\n const preview = lines.slice(0, 10).map(l => `${dim} ${l}${reset}`).join('\\n');\n const more = lines.length > 10 ? `\\n${dim} ... (${lines.length - 10} more)${reset}` : '';\n return `${preview}${more}\\n`;\n }\n default: {\n const lines = output.split('\\n');\n const preview = lines.slice(0, 3).map(l => `${dim} ${l.slice(0, 120)}${reset}`).join('\\n');\n const more = lines.length > 3 ? `\\n${dim} ... (${lines.length - 3} more lines)${reset}` : '';\n return `${preview}${more}\\n`;\n }\n }\n }\n\n private async autoSummarize(force = false): Promise<boolean> {\n if ((!force && this.messages.length < SUMMARIZE_THRESHOLD) || !this.model) {\n return false;\n }\n\n if (this.messages.length < 4) {\n return false;\n }\n\n const oldMessages = this.messages.slice(0, this.messages.length - KEEP_RECENT);\n const recentMessages = this.messages.slice(this.messages.length - KEEP_RECENT);\n\n const conversationText = oldMessages.map((m) => {\n const role = m._getType() === 'human' ? 'User' : 'Assistant';\n const content = typeof m.content === 'string' ? m.content : JSON.stringify(m.content);\n const truncated = content.length > 500 ? content.slice(0, 500) + '...' : content;\n return `${role}: ${truncated}`;\n }).join('\\n');\n\n try {\n const summaryResponse = await this.model.invoke([\n new SystemMessage(\n `You are a conversation summarizer. Produce a concise summary of the following conversation between a user and an AI assistant. Focus on:\n- Key decisions made\n- Files that were read or modified\n- Tasks completed or pending\n- Important context the assistant needs to remember\nKeep the summary under 500 words. Output ONLY the summary, no preamble.`\n ),\n new HumanMessage(conversationText),\n ]);\n\n const summaryText = typeof summaryResponse.content === 'string'\n ? summaryResponse.content\n : JSON.stringify(summaryResponse.content);\n\n this.messages = [\n new SystemMessage(`[Conversation Summary — ${oldMessages.length} messages compacted]\\n\\n${summaryText}`),\n ...recentMessages,\n ];\n\n return true;\n } catch {\n return false;\n }\n }\n\n async *chat(message: string): AsyncGenerator<string> {\n const summarized = await this.autoSummarize();\n if (summarized) {\n yield `\\n\\x1b[2m \\u2500 conversation compacted (${this.messages.length} messages retained)\\x1b[0m\\n`;\n }\n\n this.messages.push(new HumanMessage(message));\n this.lastToolOutputs = [];\n\n let stream: any;\n try {\n stream = this.agent.streamEvents(\n { messages: this.messages },\n { version: 'v2', recursionLimit: RECURSION_LIMIT },\n );\n } catch (error) {\n yield `\\n\\x1b[31m Error starting agent: ${(error as Error).message}\\x1b[0m\\n`;\n return;\n }\n\n let fullResponse = '';\n let lastToolName = '';\n let interactionInputTokens = 0;\n let interactionOutputTokens = 0;\n\n try {\n for await (const event of stream) {\n if (event.event === 'on_chat_model_stream' && event.data?.chunk?.content) {\n const text = this.extractTextFromModelContent(event.data.chunk.content);\n if (text) {\n yield text;\n fullResponse += text;\n }\n }\n\n if (event.event === 'on_chat_model_end') {\n const output = event.data?.output;\n if (!fullResponse && output?.content) {\n const fallbackText = this.extractTextFromModelContent(output.content);\n if (fallbackText) {\n yield fallbackText;\n fullResponse += fallbackText;\n }\n }\n const usage = output?.usage_metadata\n || output?.response_metadata?.usage;\n if (usage) {\n interactionInputTokens += usage.input_tokens || usage.prompt_tokens || usage.promptTokens || 0;\n interactionOutputTokens += usage.output_tokens || usage.completion_tokens || usage.completionTokens || 0;\n }\n }\n\n if (event.event === 'on_tool_start') {\n lastToolName = event.name;\n yield this.formatToolStart(event.name, event.data?.input);\n }\n\n if (event.event === 'on_tool_end') {\n const raw = event.data?.output;\n let output = '';\n if (typeof raw === 'string') {\n output = raw;\n } else if (raw?.content) {\n output = typeof raw.content === 'string' ? raw.content : JSON.stringify(raw.content);\n } else if (raw?.output) {\n output = typeof raw.output === 'string' ? raw.output : JSON.stringify(raw.output);\n } else if (raw) {\n output = typeof raw === 'object' ? JSON.stringify(raw) : String(raw);\n }\n if (output) {\n this.lastToolOutputs.push({ tool: lastToolName, output });\n yield this.formatToolEnd(lastToolName, output);\n }\n }\n\n if (event.event === 'on_tool_error') {\n const error = event.data?.error;\n yield `\\n\\x1b[31m \\u2717 Error: ${error?.message || 'Unknown error'}\\x1b[0m\\n`;\n }\n }\n } catch (error) {\n const msg = (error as Error).message;\n if (!msg.includes('abort') && !msg.includes('cancel')) {\n yield `\\n\\x1b[31m Stream error: ${msg}\\x1b[0m\\n`;\n }\n }\n\n if (fullResponse) {\n this.messages.push(new AIMessage(fullResponse));\n }\n\n this.tokenCount += interactionInputTokens + interactionOutputTokens;\n\n const fmt = (n: number) => n.toLocaleString();\n yield `\\n\\x1b[2m \\u2500 tokens: ${fmt(interactionInputTokens)} in / ${fmt(interactionOutputTokens)} out (session: ${fmt(this.tokenCount)})\\x1b[0m\\n`;\n }\n\n clearHistory() {\n this.messages = [];\n this.tokenCount = 0;\n }\n\n private extractTextFromModelContent(content: unknown): string {\n if (!content) return '';\n\n if (typeof content === 'string') {\n return content;\n }\n\n if (Array.isArray(content)) {\n let combined = '';\n for (const item of content) {\n combined += this.extractTextFromModelContent(item);\n }\n return combined;\n }\n\n if (typeof content === 'object') {\n const record = content as Record<string, unknown>;\n\n if (typeof record.text === 'string') {\n return record.text;\n }\n\n if (typeof record.content === 'string') {\n return record.content;\n }\n\n if (record.content) {\n return this.extractTextFromModelContent(record.content);\n }\n\n if (record.delta) {\n return this.extractTextFromModelContent(record.delta);\n }\n }\n\n return '';\n }\n\n async compactHistory(): Promise<{ compacted: boolean; messagesBefore: number; messagesAfter: number }> {\n const before = this.messages.length;\n if (before < 4) {\n return { compacted: false, messagesBefore: before, messagesAfter: before };\n }\n const result = await this.autoSummarize(true);\n return { compacted: result, messagesBefore: before, messagesAfter: this.messages.length };\n }\n\n getHistory(): BaseMessage[] {\n return this.messages;\n }\n\n getMessageCount(): number {\n return this.messages.length;\n }\n\n getTokenCount(): number {\n return this.tokenCount;\n }\n\n getLastToolOutputs(): { tool: string; output: string }[] {\n return this.lastToolOutputs;\n }\n\n async executeTask(task: Task): Promise<{ success: boolean; error?: string }> {\n try {\n const message = `Execute a seguinte tarefa:\\n\\n**${task.subject}**\\n\\n${task.description}\\n\\nCertifique-se de completar a tarefa totalmente e verificar o resultado.`;\n\n let fullResponse = '';\n for await (const chunk of this.chat(message)) {\n fullResponse += chunk;\n process.stdout.write(chunk);\n }\n\n return { success: true };\n } catch (error) {\n return { success: false, error: (error as Error).message };\n }\n }\n}\n"],"names":["DeepAgentService","SUMMARIZE_THRESHOLD","KEEP_RECENT","RECURSION_LIMIT","DEEPAGENT_BUILTIN_TOOLS","Set","initialize","projectPath","projectLoader","detectProject","projectConfig","loadProject","context","projectContext","setContext","mcpConfigs","mcpRegistry","loadConfigs","connectAll","agentsOverridePath","getAgentsOverridePath","legacyAgentsOverridePath","getLegacyAgentsOverridePath","agentRegistry","loadProjectAgents","skillsOverridePath","getSkillsOverridePath","legacySkillsOverridePath","getLegacySkillsOverridePath","skillRegistry","loadProjectSkills","memoryService","model","multiLlmService","createStreamingModel","contextPrompt","getContextPrompt","memoryPrompt","getMemoryPrompt","skillKnowledge","getAllSkillKnowledge","subagents","getSubagentDefinitions","allTools","toolsRegistry","getAllTools","mcpTools","getAllMcpTools","extraTools","filter","t","has","name","mcpDiscoveryTools","getDiscoveryTools","mcpServerSummaries","getServerSummaries","systemPrompt","buildSystemPrompt","cachedSystemPrompt","cachedExtraTools","cachedMcpTools","cachedMcpDiscoveryTools","cachedSubagents","agent","createDeepAgent","tools","backend","FilesystemBackend","rootDir","process","cwd","hasContext","agentCount","length","toolCount","reinitializeModel","getGitStatus","branch","execSync","encoding","trim","status","log","result","gitInfo","allToolNames","map","parts","push","builtInCount","mcpCount","discoveryCount","serverCount","description","server","statusIcon","transport","td","toolDescriptions","s","sa","mcpAnnotation","mcp","join","skillSummaries","getSkillSummaries","skill","platform","version","formatToolStart","toolName","input","dim","cyan","reset","icon","detail","file_path","pattern","file_pattern","command","cmd","slice","directory","path","query","url","title","id","question","key","keys","Object","firstVal","String","formatToolEnd","output","green","lineCount","split","startsWith","lines","l","fileCount","preview","more","autoSummarize","force","messages","oldMessages","recentMessages","conversationText","m","role","_getType","content","JSON","stringify","truncated","summaryResponse","invoke","SystemMessage","HumanMessage","summaryText","chat","message","summarized","lastToolOutputs","stream","streamEvents","recursionLimit","error","fullResponse","lastToolName","interactionInputTokens","interactionOutputTokens","event","data","chunk","text","extractTextFromModelContent","fallbackText","usage","usage_metadata","response_metadata","input_tokens","prompt_tokens","promptTokens","output_tokens","completion_tokens","completionTokens","raw","tool","msg","includes","AIMessage","tokenCount","fmt","n","toLocaleString","clearHistory","Array","isArray","combined","item","record","delta","compactHistory","before","compacted","messagesBefore","messagesAfter","getHistory","getMessageCount","getTokenCount","getLastToolOutputs","executeTask","task","subject","stdout","write","success","markdownRenderer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/core/services/deep-agent.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { BaseChatModel } from '@langchain/core/language_models/chat_models';\nimport { HumanMessage, AIMessage, SystemMessage, BaseMessage } from '@langchain/core/messages';\nimport { execSync } from 'child_process';\nimport { createDeepAgent, FilesystemBackend } from 'deepagents';\nimport { MultiLlmService } from '../../../common/services/multi-llm.service';\nimport { MarkdownRendererService } from '../../../common/services/markdown-renderer.service';\nimport { AgentRegistryService } from '../../agents/services/agent-registry.service';\nimport { ToolsRegistryService } from '../../tools/services/tools-registry.service';\nimport { McpRegistryService } from '../../mcp/services/mcp-registry.service';\nimport { ProjectLoaderService } from '../../project/services/project-loader.service';\nimport { ProjectContextService } from '../../project/services/project-context.service';\nimport { SkillRegistryService } from '../../skills/services/skill-registry.service';\nimport { MemoryService } from '../../memory/services/memory.service';\nimport { ProjectInitResult } from '../../project/types';\nimport { Task } from '../../tasks/types/task.types';\nimport { McpServerSummary } from '../../mcp/types';\n\nconst SUMMARIZE_THRESHOLD = 40;\nconst KEEP_RECENT = 10;\nconst RECURSION_LIMIT = 100;\nconst DEEPAGENT_BUILTIN_TOOLS = new Set([\n 'read_file', 'write_file', 'edit_file', 'glob', 'grep', 'ls',\n 'write_todos', 'task',\n]);\n\n@Injectable()\nexport class DeepAgentService {\n private agent: any;\n private model: BaseChatModel | null = null;\n private messages: BaseMessage[] = [];\n private tokenCount = 0;\n private lastToolOutputs: { tool: string; output: string }[] = [];\n\n private cachedSystemPrompt: string = '';\n private cachedExtraTools: any[] = [];\n private cachedMcpTools: any[] = [];\n private cachedMcpDiscoveryTools: any[] = [];\n private cachedSubagents: any[] = [];\n\n constructor(\n private readonly multiLlmService: MultiLlmService,\n private readonly agentRegistry: AgentRegistryService,\n private readonly toolsRegistry: ToolsRegistryService,\n private readonly mcpRegistry: McpRegistryService,\n private readonly projectLoader: ProjectLoaderService,\n private readonly projectContext: ProjectContextService,\n private readonly skillRegistry: SkillRegistryService,\n private readonly memoryService: MemoryService,\n private readonly markdownRenderer: MarkdownRendererService,\n ) {}\n\n async initialize(): Promise<ProjectInitResult> {\n const projectPath = await this.projectLoader.detectProject();\n\n if (projectPath) {\n const projectConfig = await this.projectLoader.loadProject(projectPath);\n\n if (projectConfig.context) {\n this.projectContext.setContext(projectConfig.context);\n }\n\n if (projectConfig.mcpConfigs) {\n this.mcpRegistry.loadConfigs(projectConfig.mcpConfigs);\n await this.mcpRegistry.connectAll();\n }\n\n const agentsOverridePath = this.projectLoader.getAgentsOverridePath(projectPath);\n const legacyAgentsOverridePath = this.projectLoader.getLegacyAgentsOverridePath(projectPath);\n await this.agentRegistry.loadProjectAgents(agentsOverridePath);\n await this.agentRegistry.loadProjectAgents(legacyAgentsOverridePath);\n\n const skillsOverridePath = this.projectLoader.getSkillsOverridePath(projectPath);\n const legacySkillsOverridePath = this.projectLoader.getLegacySkillsOverridePath(projectPath);\n await this.skillRegistry.loadProjectSkills(skillsOverridePath);\n await this.skillRegistry.loadProjectSkills(legacySkillsOverridePath);\n\n await this.memoryService.initialize(projectPath);\n }\n\n this.model = this.multiLlmService.createStreamingModel('default');\n\n const contextPrompt = this.projectContext.getContextPrompt();\n const memoryPrompt = await this.memoryService.getMemoryPrompt();\n const skillKnowledge = this.skillRegistry.getAllSkillKnowledge();\n const subagents = this.agentRegistry.getSubagentDefinitions(contextPrompt);\n const allTools = this.toolsRegistry.getAllTools();\n const mcpTools = this.mcpRegistry.getAllMcpTools();\n\n const extraTools = allTools.filter(t => !DEEPAGENT_BUILTIN_TOOLS.has(t.name));\n const mcpDiscoveryTools = this.mcpRegistry.getDiscoveryTools();\n const mcpServerSummaries = this.mcpRegistry.getServerSummaries();\n\n const systemPrompt = this.buildSystemPrompt(contextPrompt, memoryPrompt, skillKnowledge, subagents, allTools, mcpTools, mcpServerSummaries);\n\n this.cachedSystemPrompt = systemPrompt;\n this.cachedExtraTools = extraTools;\n this.cachedMcpTools = mcpTools;\n this.cachedMcpDiscoveryTools = mcpDiscoveryTools;\n this.cachedSubagents = subagents;\n\n this.agent = createDeepAgent({\n model: this.model,\n systemPrompt,\n tools: [...extraTools, ...mcpTools, ...mcpDiscoveryTools],\n subagents,\n backend: () => new FilesystemBackend({ rootDir: process.cwd() }),\n });\n\n return {\n projectPath,\n hasContext: this.projectContext.hasContext(),\n agentCount: subagents.length,\n toolCount: extraTools.length + mcpTools.length,\n };\n }\n\n async reinitializeModel(): Promise<void> {\n this.model = this.multiLlmService.createStreamingModel('default');\n this.agent = createDeepAgent({\n model: this.model,\n systemPrompt: this.cachedSystemPrompt,\n tools: [...this.cachedExtraTools, ...this.cachedMcpTools, ...this.cachedMcpDiscoveryTools],\n subagents: this.cachedSubagents,\n backend: () => new FilesystemBackend({ rootDir: process.cwd() }),\n });\n }\n\n private getGitStatus(): string {\n try {\n const branch = execSync('git rev-parse --abbrev-ref HEAD 2>/dev/null', {\n encoding: 'utf-8',\n cwd: process.cwd(),\n }).trim();\n const status = execSync('git status --short 2>/dev/null', {\n encoding: 'utf-8',\n cwd: process.cwd(),\n }).trim();\n const log = execSync('git log --oneline -5 2>/dev/null', {\n encoding: 'utf-8',\n cwd: process.cwd(),\n }).trim();\n\n let result = `Branch: ${branch}`;\n if (status) {\n result += `\\nChanges:\\n${status}`;\n } else {\n result += `\\nStatus: clean`;\n }\n if (log) {\n result += `\\nRecent commits:\\n${log}`;\n }\n return result;\n } catch {\n return 'Not a git repository';\n }\n }\n\n private buildSystemPrompt(\n contextPrompt: string,\n memoryPrompt: string,\n skillKnowledge: string,\n subagents: any[],\n tools: any[],\n mcpTools: any[],\n mcpServerSummaries: McpServerSummary[] = [],\n ): string {\n const gitInfo = this.getGitStatus();\n const allToolNames = [\n ...tools.map((t: any) => t.name),\n ...mcpTools.map((t: any) => t.name),\n ];\n\n const parts: string[] = [];\n\n parts.push(\n `You are Cast, an autonomous AI coding assistant running as a CLI tool.`,\n `You are a highly capable agent that can independently explore codebases, make decisions, execute multi-step plans, and delegate work to specialized sub-agents. You help developers with software engineering tasks including writing code, debugging, refactoring, and answering questions about codebases.`,\n ``,\n );\n\n parts.push(\n `# CRITICAL RULES`,\n ``,\n `## NEVER Guess — ALWAYS Verify`,\n `- NEVER say a file \"doesn't exist\" without FIRST using glob or read_file to check`,\n `- NEVER guess file contents — ALWAYS read_file before answering about a file`,\n `- NEVER assume a directory structure — ALWAYS use ls or glob to discover it`,\n `- NEVER say \"I don't have access\" — you DO have access through your tools`,\n `- If a user mentions a file path, your FIRST action must be to read it or verify it exists`,\n ``,\n `## Read Before Edit`,\n `- ALWAYS use read_file on a file before using edit_file or write_file on it`,\n `- NEVER edit a file you haven't read in this conversation`,\n `- Understand existing code before suggesting modifications`,\n ``,\n `## Minimal Changes`,\n `- Only make changes that are directly requested or clearly necessary`,\n `- Don't add features, refactor code, or make \"improvements\" beyond what was asked`,\n `- Don't add docstrings, comments, or type annotations to code you didn't change`,\n `- Preserve existing code style and conventions`,\n ``,\n );\n\n const builtInCount = tools.length;\n const mcpCount = mcpTools.length;\n const discoveryCount = 2;\n\n parts.push(\n `# Available Tools`,\n ``,\n `You have ${allToolNames.length} tools available:`,\n `- **Built-in**: ${builtInCount} tools (read_file, write_file, edit_file, glob, grep, ls, shell, task management, memory)`,\n );\n\n if (mcpCount > 0) {\n const serverCount = mcpServerSummaries.length;\n parts.push(`- **MCP**: ${mcpCount} tools from ${serverCount} server(s)`);\n }\n\n if (mcpCount > 0) {\n parts.push(`- **Discovery**: ${discoveryCount} tools (mcp_list_servers, mcp_list_tools)`);\n }\n\n parts.push(\n ``,\n `USE THEM PROACTIVELY.`,\n ``,\n );\n\n if (tools.length > 0) {\n parts.push(`## Built-in Tools`);\n for (const t of tools) {\n parts.push(`- **${t.name}**: ${t.description}`);\n }\n parts.push(``);\n }\n\n if (mcpTools.length > 0) {\n parts.push(`## MCP Tools (External Services)`);\n parts.push(``);\n parts.push(`**⚠️ Important**: Only tools from servers with status \"connected\" are available. Tools from disconnected servers will fail.`);\n parts.push(``);\n\n if (mcpServerSummaries.length > 0) {\n for (const server of mcpServerSummaries) {\n const statusIcon = server.status === 'connected' ? '✓' : '✗';\n parts.push(`### ${statusIcon} ${server.name} (${server.transport}, ${server.status}) — ${server.toolCount} tools`);\n for (const td of server.toolDescriptions) {\n parts.push(`- **${td.name}**: ${td.description}`);\n }\n }\n } else {\n for (const t of mcpTools) {\n parts.push(`- **${t.name}**: ${t.description}`);\n }\n }\n parts.push(`## MCP Discovery Tools`);\n parts.push(`- **mcp_list_servers**: List all connected MCP servers with status and tool counts`);\n parts.push(`- **mcp_list_tools**: List tools from a specific server or all servers`);\n parts.push(``);\n }\n\n parts.push(\n `# Tool Usage Guidelines`,\n ``,\n `## File Operations`,\n `- Use **read_file** to read file contents. Always read before editing.`,\n `- Use **write_file** only to create NEW files. Prefer edit_file for existing files.`,\n `- Use **edit_file** for precise string replacements in existing files.`,\n ` - Provide enough context in old_string to make it unique`,\n ` - Use replace_all=true only when renaming across the file`,\n ``,\n `## Search & Discovery`,\n `- Use **glob** to find files by pattern (e.g., \"**/*.ts\", \"src/**/*.service.ts\")`,\n `- Use **grep** to search content within files (supports regex)`,\n ` - Use context_lines to see surrounding code`,\n ` - Use output_mode=\"files_with_matches\" to just find file paths`,\n `- Use **ls** to list directory contents`,\n `- When looking for something, try glob first, then grep if needed`,\n ``,\n `## Shell Commands`,\n `- Use **shell** for git, npm, docker, and other CLI operations`,\n `- Dangerous commands (rm -rf, sudo, git push --force) require user approval`,\n `- Use **shell_background** for long-running tasks (dev servers, watch mode)`,\n ``,\n `## Task Management`,\n `- Use **task_create** to break complex work into trackable subtasks`,\n `- Use **task_update** to mark tasks as in_progress or completed`,\n `- Use **task_list** to see all tasks and their status`,\n `- Use **ask_user_question** when you need clarification BEFORE acting`,\n ``,\n `## Memory`,\n `- Use **memory_write** to save important learnings and project insights`,\n `- Use **memory_read** to recall previously saved notes`,\n `- Memory persists across sessions — use it to avoid repeating mistakes`,\n ``,\n );\n\n if (mcpTools.length > 0) {\n parts.push(\n `# MCP Integration Protocol`,\n ``,\n `MCP (Model Context Protocol) tools connect you to external services. They work exactly like built-in tools but reach outside the local filesystem.`,\n ``,\n `## Connected Servers`,\n );\n if (mcpServerSummaries.length > 0) {\n for (const s of mcpServerSummaries) {\n parts.push(`- **${s.name}** (${s.transport}, ${s.status}) — ${s.toolCount} tools`);\n }\n }\n parts.push(\n ``,\n `## When to Use MCP vs Built-in`,\n `| Need | Use |`,\n `|------|-----|`,\n `| Read/write local files | Built-in (read_file, write_file, edit_file) |`,\n `| Search local codebase | Built-in (glob, grep) |`,\n `| Run commands | Built-in (shell) |`,\n `| Interact with external APIs/services | MCP tools |`,\n `| Discover available MCP capabilities | mcp_list_servers, mcp_list_tools |`,\n ``,\n `## MCP Tool Naming Convention`,\n `MCP tools follow the pattern \\`{server}_{tool}\\` (e.g., \\`figma_get_file\\`, \\`github_create_issue\\`).`,\n `The prefix tells you which server provides the tool.`,\n ``,\n `## Discovery`,\n `- Use **mcp_list_servers** to see which servers are connected and their status`,\n `- Use **mcp_list_tools** to explore what tools a server provides (with descriptions)`,\n `- When you're unsure which MCP tool to use, call mcp_list_tools first`,\n ``,\n `## Error Handling`,\n `- If an MCP tool returns an error, check the server status with mcp_list_servers`,\n `- MCP servers can disconnect — if a tool fails, the server may need reconnection`,\n `- Report MCP errors to the user and suggest they check /mcp list in the REPL`,\n ``,\n );\n }\n\n parts.push(\n `# Planning Protocol`,\n ``,\n `## When to Enter Plan Mode`,\n `Use **enter_plan_mode** when:`,\n `- Task touches 3+ files`,\n `- Task involves new features or architecture changes`,\n `- Task is ambiguous and needs scope definition`,\n `- User explicitly asks for a plan`,\n ``,\n `Do NOT plan for: simple fixes, single-file edits, questions, explanations`,\n ``,\n `## Plan Mode Workflow`,\n `1. **enter_plan_mode** — signals you are planning`,\n `2. **Explore rapidly**: Use glob and grep efficiently to understand codebase`,\n `3. **Design**: Create structured plan with specific file changes and order`,\n `4. **exit_plan_mode** — present plan for approval`,\n `5. **Execute immediately** after approval without asking for further confirmation`,\n ``,\n `## Critical: Autonomous Execution`,\n `AFTER the user approves your plan, you MUST:`,\n `- Start implementing immediately`,\n `- Create tasks and execute them sequentially`,\n `- Do NOT ask \"should I proceed?\" or \"ready to start?\"`,\n `- Do NOT wait for additional confirmation`,\n `- Just execute the approved plan autonomously`,\n ``,\n `## Plan Quality Rules`,\n `- Specify WHAT changes and WHY for each file`,\n `- Order by dependency (foundations first)`,\n `- Include verification at the end`,\n `- Use ask_user_question ONLY to clarify requirements, not to ask for permission to execute`,\n ``,\n );\n\n if (subagents.length > 0) {\n parts.push(\n `# Sub-Agent Orchestration`,\n ``,\n `You have ${subagents.length} specialized sub-agents available. Each has domain-specific knowledge and tools.`,\n ``,\n `## Available Sub-Agents`,\n );\n for (const sa of subagents) {\n const mcpAnnotation = sa.mcp && sa.mcp.length > 0 ? ` [MCP: ${sa.mcp.join(', ')}]` : '';\n parts.push(`- **${sa.name}**: ${sa.description}${mcpAnnotation}`);\n }\n parts.push(\n ``,\n `## When to Delegate to Sub-Agents`,\n `- Task requires specialized domain knowledge (React, testing, API design, databases)`,\n `- Multiple independent subtasks can be worked on in parallel`,\n `- Task is well-defined and self-contained (a sub-agent can complete it without further guidance)`,\n `- You want a focused review or analysis (e.g., code review, architecture review)`,\n ``,\n `## When NOT to Delegate`,\n `- Simple tasks you can do yourself quickly`,\n `- Tasks that require back-and-forth with the user`,\n `- Tasks that depend heavily on earlier context in this conversation`,\n ``,\n `## Delegation Pattern`,\n `1. Identify the task and which sub-agent is best suited`,\n `2. Create a clear, specific task description with all necessary context`,\n `3. Delegate execution to that sub-agent (do not stop at planning only)`,\n `4. Track delegated work with task_create/task_update`,\n `5. When the sub-agent returns, verify the result and integrate it`,\n `6. Mark the task as completed`,\n ``,\n `## Delegation Quality Bar`,\n `- If user explicitly asks to use a specific sub-agent, you MUST delegate to it`,\n `- For frontend UI generation from Figma, prefer the frontend sub-agent when available`,\n `- Avoid fake delegation: creating tasks without executing delegated work is not enough`,\n `- Return concrete delegated outputs (files changed, decisions made, validations run)`,\n ``,\n `## Multi-Agent Coordination`,\n `For large tasks, you can orchestrate multiple sub-agents:`,\n `1. Break the work into independent pieces`,\n `2. Assign each piece to the most qualified sub-agent`,\n `3. Track progress with task_create/task_update`,\n `4. Integrate results and verify the combined output`,\n ``,\n `## MCP-Aware Delegation`,\n `When a task involves heavy interaction with an external service (e.g., fetching Figma designs, managing GitHub issues):`,\n `- Check which sub-agents have MCP access (annotated with [MCP: name] above)`,\n `- Delegate MCP-heavy work to the sub-agent with the right MCP connection`,\n `- If no sub-agent has the needed MCP, handle it yourself using the MCP tools directly`,\n `- Include the MCP server name in the task description so the sub-agent knows which tools to use`,\n ``,\n );\n }\n\n parts.push(\n `# Execution Protocol`,\n ``,\n `## Exploring a Project`,\n `1. ls the root directory`,\n `2. Read key config files (package.json, tsconfig.json, etc.)`,\n `3. glob to map directory tree with key patterns`,\n `4. Read the most important files (entry points, main modules)`,\n `5. Present a structured summary`,\n `Be EXHAUSTIVE. Read as many files as needed.`,\n ``,\n `## Implementing Changes`,\n `1. Understand the current codebase (read relevant files)`,\n `2. If complex (3+ files): use enter_plan_mode`,\n `3. Create a task list with task_create for each step`,\n `4. Execute each step, marking tasks as completed`,\n `5. Verify changes (re-read edited files, run tests)`,\n `6. Summarize what was done`,\n ``,\n `## Tool Chain Patterns`,\n `- **Find something**: glob → grep → read_file`,\n `- **Edit a file**: read_file → edit_file → read_file (verify)`,\n `- **Explore a module**: ls → glob(\"module/**/*\") → read_file (key files)`,\n `- **Debug an issue**: grep (error) → read_file → edit_file → shell (test)`,\n `- **New feature**: enter_plan_mode → task_create → [implement] → shell (test)`,\n ``,\n `## Thoroughness Rules`,\n `- NEVER give up after one failed search. Try different patterns and approaches.`,\n `- ALWAYS verify changes by re-reading the file after editing.`,\n `- If tests exist, run them after changes: shell(\"npm test\") or equivalent.`,\n `- When you encounter an error, analyze and fix it — don't just report it.`,\n `- If blocked, try a different approach. If still blocked, ask the user.`,\n ``,\n );\n\n parts.push(\n `# Autonomous Decision-Making`,\n ``,\n `You are an autonomous agent. Make decisions proactively:`,\n ``,\n `## Decision Framework`,\n `| Situation | Action |`,\n `|-----------|--------|`,\n `| User asks to implement something | Explore first, then plan if complex |`,\n `| You find a bug while working | Fix it AND mention it to the user |`,\n `| Test fails after your change | Analyze the failure and fix it |`,\n `| Build fails | Read the error, fix the cause |`,\n `| File you need doesn't exist | Search broader, check for alternatives |`,\n `| Task is ambiguous | ask_user_question BEFORE starting |`,\n `| Task has multiple approaches | Briefly explain options, pick the best one |`,\n `| Something could break | Use enter_plan_mode and verify |`,\n ``,\n `## Self-Correction`,\n `- After editing, always re-read the file to verify the change is correct`,\n `- If a tool call fails, understand why and adjust (don't retry the same thing)`,\n `- If your approach isn't working after 3 attempts, step back and reconsider`,\n `- Save important learnings with memory_write so you don't repeat mistakes`,\n ``,\n );\n\n parts.push(\n `# Git Safety Protocol`,\n `- NEVER update git config`,\n `- NEVER run destructive git commands (push --force, reset --hard, clean -f) without explicit user request`,\n `- NEVER skip hooks (--no-verify) unless user explicitly requests it`,\n `- When committing: stage specific files (not \"git add -A\"), write clear commit messages`,\n `- When creating PRs: summarize all commits, not just the latest`,\n ``,\n );\n\n parts.push(\n `# Response Style`,\n `- Be concise in responses but thorough in your work`,\n `- Show your work: mention which tools you're using and why`,\n `- When showing code changes, explain WHAT changed and WHY`,\n `- Use markdown formatting for readability`,\n `- Reference files with their path (e.g., \"In src/main.ts:\")`,\n ``,\n );\n\n parts.push(\n `# User Mentions`,\n `When the user's message contains <file>, <directory>, <url>, or <git> tags,`,\n `these are automatically injected file/directory contents from @ mentions.`,\n `The content inside these tags is REAL and CURRENT — trust it and use it to answer.`,\n `Do NOT re-read a file that was already provided via a mention tag unless you need a different section.`,\n ``,\n );\n\n if (skillKnowledge) {\n const skillSummaries = this.skillRegistry.getSkillSummaries();\n\n parts.push(\n `# Domain Knowledge`,\n ``,\n `You have ${skillSummaries.length} skills loaded:`,\n );\n\n for (const skill of skillSummaries) {\n parts.push(`- **${skill.name}**: ${skill.description}`);\n }\n\n parts.push(\n ``,\n `The following are the complete guidelines from your skill library. These are reference materials — study them to learn patterns, decision frameworks, and anti-patterns for each domain. Use this knowledge when making decisions about how to approach tasks.`,\n ``,\n skillKnowledge,\n ``,\n );\n }\n\n parts.push(\n `# Environment`,\n `- Working directory: ${process.cwd()}`,\n `- Platform: ${process.platform}`,\n `- Node.js: ${process.version}`,\n ``,\n `# Git Status (snapshot)`,\n gitInfo,\n ``,\n );\n\n if (contextPrompt) {\n parts.push(contextPrompt, ``);\n }\n\n if (memoryPrompt) {\n parts.push(\n `# Auto Memory`,\n `These are notes from previous sessions:`,\n memoryPrompt,\n ``,\n );\n }\n\n return parts.join('\\n');\n }\n\n private formatToolStart(toolName: string, input: any): string {\n const dim = '\\x1b[2m';\n const cyan = '\\x1b[36m';\n const reset = '\\x1b[0m';\n const icon = '\\u23bf';\n\n let detail = '';\n\n switch (toolName) {\n case 'read_file':\n detail = input?.file_path ? ` ${input.file_path}` : '';\n break;\n case 'write_file':\n detail = input?.file_path ? ` ${input.file_path}` : '';\n break;\n case 'edit_file':\n detail = input?.file_path ? ` ${input.file_path}` : '';\n break;\n case 'glob':\n detail = input?.pattern ? ` ${input.pattern}` : '';\n if (input?.cwd) detail += ` in ${input.cwd}`;\n break;\n case 'grep':\n detail = input?.pattern ? ` \"${input.pattern}\"` : '';\n if (input?.file_pattern) detail += ` (${input.file_pattern})`;\n break;\n case 'shell':\n if (input?.command) {\n const cmd = input.command.length > 80 ? input.command.slice(0, 80) + '...' : input.command;\n detail = ` ${cmd}`;\n }\n break;\n case 'shell_background':\n if (input?.command) {\n const cmd = input.command.length > 60 ? input.command.slice(0, 60) + '...' : input.command;\n detail = ` ${cmd}`;\n }\n break;\n case 'ls':\n detail = ` ${input?.directory || input?.path || '.'}`;\n break;\n case 'web_search':\n detail = input?.query ? ` \"${input.query}\"` : '';\n break;\n case 'web_fetch':\n detail = input?.url ? ` ${input.url}` : '';\n break;\n case 'task_create':\n detail = input?.title ? ` \"${input.title}\"` : '';\n break;\n case 'task_update':\n detail = input?.id ? ` #${input.id} → ${input?.status || ''}` : '';\n break;\n case 'task_list':\n detail = '';\n break;\n case 'task_get':\n detail = input?.id ? ` #${input.id}` : '';\n break;\n case 'ask_user_question':\n detail = input?.question ? ` \"${input.question.slice(0, 50)}${input.question.length > 50 ? '...' : ''}\"` : '';\n break;\n case 'enter_plan_mode':\n detail = ' Starting plan...';\n break;\n case 'exit_plan_mode':\n detail = ' Submitting plan';\n break;\n case 'memory_write':\n detail = input?.key ? ` ${input.key}` : '';\n break;\n case 'memory_read':\n detail = input?.key ? ` ${input.key}` : '';\n break;\n case 'memory_search':\n detail = input?.query ? ` \"${input.query}\"` : '';\n break;\n case 'mcp_list_servers':\n detail = ' Listing MCP servers';\n break;\n case 'mcp_list_tools':\n detail = input?.server ? ` server=${input.server}` : ' (all servers)';\n break;\n default:\n if (input) {\n const keys = Object.keys(input);\n if (keys.length > 0) {\n const firstVal = String(input[keys[0]]).slice(0, 60);\n detail = ` ${keys[0]}=${firstVal}`;\n }\n }\n }\n\n return `\\n${dim} ${cyan}${icon}${reset}${dim} ${toolName}${detail}${reset}\\n`;\n }\n\n private formatToolEnd(toolName: string, output: string): string {\n if (!output || output.length === 0) return '';\n\n const dim = '\\x1b[2m';\n const green = '\\x1b[32m';\n const reset = '\\x1b[0m';\n\n switch (toolName) {\n case 'read_file': {\n const lineCount = output.split('\\n').length;\n return `${dim} ${green}\\u2713${reset}${dim} ${lineCount} lines${reset}\\n`;\n }\n case 'write_file':\n return `${dim} ${green}\\u2713${reset}${dim} ${output.slice(0, 120)}${reset}\\n`;\n case 'edit_file': {\n if (output.startsWith('Error')) {\n return `${dim} \\x1b[31m${output.slice(0, 150)}${reset}\\n`;\n }\n return `${dim} ${green}\\u2713${reset}${dim} ${output.slice(0, 120)}${reset}\\n`;\n }\n case 'glob': {\n const lines = output.split('\\n').filter(l => l.trim());\n const fileCount = lines.length;\n const preview = lines.slice(0, 5).map(l => `${dim} ${l.slice(0, 100)}${reset}`).join('\\n');\n const more = fileCount > 5 ? `\\n${dim} ... (${fileCount - 5} more)${reset}` : '';\n return `${preview}${more}\\n`;\n }\n case 'grep': {\n const lines = output.split('\\n').filter(l => l.trim());\n const preview = lines.slice(0, 5).map(l => `${dim} ${l.slice(0, 120)}${reset}`).join('\\n');\n const more = lines.length > 5 ? `\\n${dim} ... (${lines.length - 5} more)${reset}` : '';\n return `${preview}${more}\\n`;\n }\n case 'shell':\n case 'shell_background': {\n const lines = output.split('\\n');\n const preview = lines.slice(0, 8).map(l => `${dim} ${l.slice(0, 150)}${reset}`).join('\\n');\n const more = lines.length > 8 ? `\\n${dim} ... (${lines.length - 8} more lines)${reset}` : '';\n return `${preview}${more}\\n`;\n }\n case 'ls': {\n const lines = output.split('\\n').filter(l => l.trim());\n const preview = lines.slice(0, 10).map(l => `${dim} ${l}${reset}`).join('\\n');\n const more = lines.length > 10 ? `\\n${dim} ... (${lines.length - 10} more)${reset}` : '';\n return `${preview}${more}\\n`;\n }\n default: {\n const lines = output.split('\\n');\n const preview = lines.slice(0, 3).map(l => `${dim} ${l.slice(0, 120)}${reset}`).join('\\n');\n const more = lines.length > 3 ? `\\n${dim} ... (${lines.length - 3} more lines)${reset}` : '';\n return `${preview}${more}\\n`;\n }\n }\n }\n\n private async autoSummarize(force = false): Promise<boolean> {\n if ((!force && this.messages.length < SUMMARIZE_THRESHOLD) || !this.model) {\n return false;\n }\n\n if (this.messages.length < 4) {\n return false;\n }\n\n const oldMessages = this.messages.slice(0, this.messages.length - KEEP_RECENT);\n const recentMessages = this.messages.slice(this.messages.length - KEEP_RECENT);\n\n const conversationText = oldMessages.map((m) => {\n const role = m._getType() === 'human' ? 'User' : 'Assistant';\n const content = typeof m.content === 'string' ? m.content : JSON.stringify(m.content);\n const truncated = content.length > 500 ? content.slice(0, 500) + '...' : content;\n return `${role}: ${truncated}`;\n }).join('\\n');\n\n try {\n const summaryResponse = await this.model.invoke([\n new SystemMessage(\n `You are a conversation summarizer. Produce a concise summary of the following conversation between a user and an AI assistant. Focus on:\n- Key decisions made\n- Files that were read or modified\n- Tasks completed or pending\n- Important context the assistant needs to remember\nKeep the summary under 500 words. Output ONLY the summary, no preamble.`\n ),\n new HumanMessage(conversationText),\n ]);\n\n const summaryText = typeof summaryResponse.content === 'string'\n ? summaryResponse.content\n : JSON.stringify(summaryResponse.content);\n\n this.messages = [\n new SystemMessage(`[Conversation Summary — ${oldMessages.length} messages compacted]\\n\\n${summaryText}`),\n ...recentMessages,\n ];\n\n return true;\n } catch {\n return false;\n }\n }\n\n async *chat(message: string): AsyncGenerator<string> {\n const summarized = await this.autoSummarize();\n if (summarized) {\n yield `\\n\\x1b[2m \\u2500 conversation compacted (${this.messages.length} messages retained)\\x1b[0m\\n`;\n }\n\n this.messages.push(new HumanMessage(message));\n this.lastToolOutputs = [];\n\n let stream: any;\n try {\n stream = this.agent.streamEvents(\n { messages: this.messages },\n { version: 'v2', recursionLimit: RECURSION_LIMIT },\n );\n } catch (error) {\n yield `\\n\\x1b[31m Error starting agent: ${(error as Error).message}\\x1b[0m\\n`;\n return;\n }\n\n let fullResponse = '';\n let lastToolName = '';\n let interactionInputTokens = 0;\n let interactionOutputTokens = 0;\n\n try {\n for await (const event of stream) {\n if (event.event === 'on_chat_model_stream' && event.data?.chunk?.content) {\n const text = this.extractTextFromModelContent(event.data.chunk.content);\n if (text) {\n yield text;\n fullResponse += text;\n }\n }\n\n if (event.event === 'on_chat_model_end') {\n const output = event.data?.output;\n if (!fullResponse && output?.content) {\n const fallbackText = this.extractTextFromModelContent(output.content);\n if (fallbackText) {\n yield fallbackText;\n fullResponse += fallbackText;\n }\n }\n const usage = output?.usage_metadata\n || output?.response_metadata?.usage;\n if (usage) {\n interactionInputTokens += usage.input_tokens || usage.prompt_tokens || usage.promptTokens || 0;\n interactionOutputTokens += usage.output_tokens || usage.completion_tokens || usage.completionTokens || 0;\n }\n }\n\n if (event.event === 'on_tool_start') {\n lastToolName = event.name;\n yield this.formatToolStart(event.name, event.data?.input);\n }\n\n if (event.event === 'on_tool_end') {\n const raw = event.data?.output;\n let output = '';\n if (typeof raw === 'string') {\n output = raw;\n } else if (raw?.content) {\n output = typeof raw.content === 'string' ? raw.content : JSON.stringify(raw.content);\n } else if (raw?.output) {\n output = typeof raw.output === 'string' ? raw.output : JSON.stringify(raw.output);\n } else if (raw) {\n output = typeof raw === 'object' ? JSON.stringify(raw) : String(raw);\n }\n if (output) {\n this.lastToolOutputs.push({ tool: lastToolName, output });\n yield this.formatToolEnd(lastToolName, output);\n }\n }\n\n if (event.event === 'on_tool_error') {\n const error = event.data?.error;\n yield `\\n\\x1b[31m \\u2717 Error: ${error?.message || 'Unknown error'}\\x1b[0m\\n`;\n }\n }\n } catch (error) {\n const msg = (error as Error).message;\n if (!msg.includes('abort') && !msg.includes('cancel')) {\n yield `\\n\\x1b[31m Stream error: ${msg}\\x1b[0m\\n`;\n }\n }\n\n if (fullResponse) {\n this.messages.push(new AIMessage(fullResponse));\n }\n\n this.tokenCount += interactionInputTokens + interactionOutputTokens;\n\n const fmt = (n: number) => n.toLocaleString();\n yield `\\n\\x1b[2m \\u2500 tokens: ${fmt(interactionInputTokens)} in / ${fmt(interactionOutputTokens)} out (session: ${fmt(this.tokenCount)})\\x1b[0m\\n`;\n }\n\n clearHistory() {\n this.messages = [];\n this.tokenCount = 0;\n }\n\n private extractTextFromModelContent(content: unknown): string {\n if (!content) return '';\n\n if (typeof content === 'string') {\n return content;\n }\n\n if (Array.isArray(content)) {\n let combined = '';\n for (const item of content) {\n combined += this.extractTextFromModelContent(item);\n }\n return combined;\n }\n\n if (typeof content === 'object') {\n const record = content as Record<string, unknown>;\n\n if (typeof record.text === 'string') {\n return record.text;\n }\n\n if (typeof record.content === 'string') {\n return record.content;\n }\n\n if (record.content) {\n return this.extractTextFromModelContent(record.content);\n }\n\n if (record.delta) {\n return this.extractTextFromModelContent(record.delta);\n }\n }\n\n return '';\n }\n\n async compactHistory(): Promise<{ compacted: boolean; messagesBefore: number; messagesAfter: number }> {\n const before = this.messages.length;\n if (before < 4) {\n return { compacted: false, messagesBefore: before, messagesAfter: before };\n }\n const result = await this.autoSummarize(true);\n return { compacted: result, messagesBefore: before, messagesAfter: this.messages.length };\n }\n\n getHistory(): BaseMessage[] {\n return this.messages;\n }\n\n getMessageCount(): number {\n return this.messages.length;\n }\n\n getTokenCount(): number {\n return this.tokenCount;\n }\n\n getLastToolOutputs(): { tool: string; output: string }[] {\n return this.lastToolOutputs;\n }\n\n async executeTask(task: Task): Promise<{ success: boolean; error?: string }> {\n try {\n const message = [\n 'Voce esta executando uma tarefa de um plano ja aprovado.',\n 'NAO use enter_plan_mode nem exit_plan_mode nesta tarefa.',\n `Tarefa:\\n**${task.subject}**\\n\\n${task.description}`,\n 'Implemente diretamente o que foi pedido e valide o resultado.',\n ].join('\\n\\n');\n\n let fullResponse = '';\n for await (const chunk of this.chat(message)) {\n fullResponse += chunk;\n process.stdout.write(chunk);\n }\n\n return { success: true };\n } catch (error) {\n return { success: false, error: (error as Error).message };\n }\n }\n}\n"],"names":["DeepAgentService","SUMMARIZE_THRESHOLD","KEEP_RECENT","RECURSION_LIMIT","DEEPAGENT_BUILTIN_TOOLS","Set","initialize","projectPath","projectLoader","detectProject","projectConfig","loadProject","context","projectContext","setContext","mcpConfigs","mcpRegistry","loadConfigs","connectAll","agentsOverridePath","getAgentsOverridePath","legacyAgentsOverridePath","getLegacyAgentsOverridePath","agentRegistry","loadProjectAgents","skillsOverridePath","getSkillsOverridePath","legacySkillsOverridePath","getLegacySkillsOverridePath","skillRegistry","loadProjectSkills","memoryService","model","multiLlmService","createStreamingModel","contextPrompt","getContextPrompt","memoryPrompt","getMemoryPrompt","skillKnowledge","getAllSkillKnowledge","subagents","getSubagentDefinitions","allTools","toolsRegistry","getAllTools","mcpTools","getAllMcpTools","extraTools","filter","t","has","name","mcpDiscoveryTools","getDiscoveryTools","mcpServerSummaries","getServerSummaries","systemPrompt","buildSystemPrompt","cachedSystemPrompt","cachedExtraTools","cachedMcpTools","cachedMcpDiscoveryTools","cachedSubagents","agent","createDeepAgent","tools","backend","FilesystemBackend","rootDir","process","cwd","hasContext","agentCount","length","toolCount","reinitializeModel","getGitStatus","branch","execSync","encoding","trim","status","log","result","gitInfo","allToolNames","map","parts","push","builtInCount","mcpCount","discoveryCount","serverCount","description","server","statusIcon","transport","td","toolDescriptions","s","sa","mcpAnnotation","mcp","join","skillSummaries","getSkillSummaries","skill","platform","version","formatToolStart","toolName","input","dim","cyan","reset","icon","detail","file_path","pattern","file_pattern","command","cmd","slice","directory","path","query","url","title","id","question","key","keys","Object","firstVal","String","formatToolEnd","output","green","lineCount","split","startsWith","lines","l","fileCount","preview","more","autoSummarize","force","messages","oldMessages","recentMessages","conversationText","m","role","_getType","content","JSON","stringify","truncated","summaryResponse","invoke","SystemMessage","HumanMessage","summaryText","chat","message","summarized","lastToolOutputs","stream","streamEvents","recursionLimit","error","fullResponse","lastToolName","interactionInputTokens","interactionOutputTokens","event","data","chunk","text","extractTextFromModelContent","fallbackText","usage","usage_metadata","response_metadata","input_tokens","prompt_tokens","promptTokens","output_tokens","completion_tokens","completionTokens","raw","tool","msg","includes","AIMessage","tokenCount","fmt","n","toLocaleString","clearHistory","Array","isArray","combined","item","record","delta","compactHistory","before","compacted","messagesBefore","messagesAfter","getHistory","getMessageCount","getTokenCount","getLastToolOutputs","executeTask","task","subject","stdout","write","success","markdownRenderer"],"mappings":"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"}
|