@defai.digital/ax-cli 3.1.3 → 3.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/.ax-cli/memory.json +4 -4
  2. package/config/models.yaml +1 -1
  3. package/dist/agent/context-manager.js +19 -8
  4. package/dist/agent/context-manager.js.map +1 -1
  5. package/dist/agent/llm-agent.d.ts +8 -0
  6. package/dist/agent/llm-agent.js +88 -54
  7. package/dist/agent/llm-agent.js.map +1 -1
  8. package/dist/agent/subagent-orchestrator.js +12 -0
  9. package/dist/agent/subagent-orchestrator.js.map +1 -1
  10. package/dist/agent/subagent.js +26 -1
  11. package/dist/agent/subagent.js.map +1 -1
  12. package/dist/commands/memory.js +5 -1
  13. package/dist/commands/memory.js.map +1 -1
  14. package/dist/constants.d.ts +12 -2
  15. package/dist/constants.js +15 -2
  16. package/dist/constants.js.map +1 -1
  17. package/dist/llm/types.js +5 -2
  18. package/dist/llm/types.js.map +1 -1
  19. package/dist/memory/context-injector.d.ts +15 -1
  20. package/dist/memory/context-injector.js +18 -1
  21. package/dist/memory/context-injector.js.map +1 -1
  22. package/dist/memory/context-store.d.ts +27 -0
  23. package/dist/memory/context-store.js +60 -6
  24. package/dist/memory/context-store.js.map +1 -1
  25. package/dist/schemas/tool-schemas.d.ts +2 -2
  26. package/dist/tools/search.js +39 -16
  27. package/dist/tools/search.js.map +1 -1
  28. package/dist/ui/components/chat-history.js +54 -21
  29. package/dist/ui/components/chat-history.js.map +1 -1
  30. package/dist/ui/components/chat-input.js +12 -5
  31. package/dist/ui/components/chat-input.js.map +1 -1
  32. package/dist/ui/components/command-suggestions.d.ts +12 -0
  33. package/dist/ui/components/command-suggestions.js +68 -3
  34. package/dist/ui/components/command-suggestions.js.map +1 -1
  35. package/dist/ui/components/confirmation-dialog.js +8 -2
  36. package/dist/ui/components/confirmation-dialog.js.map +1 -1
  37. package/dist/ui/components/loading-spinner.js +12 -3
  38. package/dist/ui/components/loading-spinner.js.map +1 -1
  39. package/dist/ui/components/reasoning-display.d.ts +8 -1
  40. package/dist/ui/components/reasoning-display.js +14 -8
  41. package/dist/ui/components/reasoning-display.js.map +1 -1
  42. package/dist/ui/components/status-bar.d.ts +4 -1
  43. package/dist/ui/components/status-bar.js +65 -4
  44. package/dist/ui/components/status-bar.js.map +1 -1
  45. package/dist/ui/components/subagent-monitor.d.ts +8 -0
  46. package/dist/ui/components/subagent-monitor.js +36 -50
  47. package/dist/ui/components/subagent-monitor.js.map +1 -1
  48. package/dist/ui/components/virtualized-chat-history.js +10 -10
  49. package/dist/ui/components/virtualized-chat-history.js.map +1 -1
  50. package/dist/ui/components/welcome-panel.d.ts +1 -1
  51. package/dist/ui/components/welcome-panel.js +2 -4
  52. package/dist/ui/components/welcome-panel.js.map +1 -1
  53. package/dist/utils/error-handler.d.ts +8 -1
  54. package/dist/utils/error-handler.js +61 -1
  55. package/dist/utils/error-handler.js.map +1 -1
  56. package/dist/utils/token-counter.d.ts +6 -0
  57. package/dist/utils/token-counter.js +24 -1
  58. package/dist/utils/token-counter.js.map +1 -1
  59. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "version": 1,
3
- "created_at": "2025-11-21T16:54:42.361Z",
4
- "updated_at": "2025-11-21T16:54:42.361Z",
3
+ "created_at": "2025-11-21T18:19:16.754Z",
4
+ "updated_at": "2025-11-21T18:19:16.754Z",
5
5
  "project_root": "/Users/akiralam/code/ax-cli",
6
- "content_hash": "sha256:84fe8cb69a9acf89955c48078864724c77f079ade4dbc06d1e2e759725f3f373",
6
+ "content_hash": "sha256:ad04dd2322ddc19e6d350bf6500be873c5161cbd50418a25ea0f0baa61ba5167",
7
7
  "source": {
8
8
  "directories": [
9
9
  {
@@ -43,7 +43,7 @@
43
43
  ]
44
44
  },
45
45
  "context": {
46
- "formatted": "# Project: ax-cli\n\n\n## Architecture Patterns\n- **Project Type**: cli\n- **Primary Language**: TypeScript\n- **Tech Stack**: React, Vitest, Zod, Commander, Ink, ESM, TypeScript\n- **Package Manager**: npm\n- **Entry Point**: dist/index.js\n- **Module System**: ESM\n- **Test Framework**: vitest\n- **Validation**: zod\n- **Linter**: eslint\n- **Key Directories**: source: src, tests: tests\n\n\n## Directory Structure\n```\nsrc/\n├── agent/\n│ ├── specialized/\n│ │ ├── analysis-agent.ts\n│ │ ├── debug-agent.ts\n│ │ ├── documentation-agent.ts\n│ │ ├── index.ts\n│ │ ├── performance-agent.ts\n│ │ ├── refactoring-agent.ts\n│ │ └── testing-agent.ts\n│ ├── context-manager.ts\n│ ├── context-manager.ts.bak\n│ ├── dependency-resolver.ts\n│ ├── index.ts\n│ ├── llm-agent.ts\n│ ├── llm-agent.ts.backup\n│ ├── subagent-orchestrator.ts\n│ ├── subagent-types.ts\n│ └── subagent.ts\n├── checkpoint/\n│ ├── index.ts\n│ ├── manager.ts\n│ ├── storage.ts\n│ └── types.ts\n├── commands/\n│ ├── init/\n│ │ └── wizard.ts\n│ ├── cache.ts\n│ ├── init.ts\n│ ├── mcp.ts\n│ ├── memory.ts\n│ ├── models.ts\n│ ├── plan.ts\n│ ├── rewind.ts\n│ ├── setup.ts\n│ ├── templates.ts\n│ ├── update.ts\n│ └── usage.ts\n├── hooks/\n│ ├── use-chat-reducer.ts\n│ ├── use-enhanced-input.ts\n│ ├── use-input-handler.ts\n│ └── use-input-history.ts\n├── llm/\n│ ├── client.ts\n│ ├── tools.ts\n│ └── types.ts\n├── mcp/\n│ ├── client.ts\n│ ├── config.ts\n│ └── transports.ts\n├── memory/\n│ ├── context-generator.ts\n│ ├── context-injector.ts\n│ ├── context-store.ts\n│ ├── index.ts\n│ ├── schemas.ts\n│ ├── stats-collector.ts\n│ └── types.ts\n├── planner/\n│ ├── prompts/\n│ │ └── planning-prompt.ts\n│ ├── dependency-resolver.ts\n│ ├── index.ts\n│ ├── plan-generator.ts\n│ ├── plan-storage.ts\n│ ├── task-planner.ts\n│ ├── token-estimator.ts\n│ └── types.ts\n├── schemas/\n│ ├── api-schemas.ts\n│ ├── confirmation-schemas.ts\n│ ├── index-unified.ts\n│ ├── index.ts\n│ ├── README.md\n│ ├── settings-schemas.ts\n│ ├── tool-schemas.ts\n│ └── yaml-schemas.ts\n├── tools/\n│ ├── bash-output.ts\n│ ├── bash.ts\n│ ├── confirmation-tool.ts\n│ ├── index.ts\n│ ├── search.ts\n│ ├── text-editor.ts\n│ └── todo-tool.ts\n├── types/\n│ ├── index.ts\n│ ├── project-analysis.ts\n│ └── template.ts\n├── ui/\n│ ├── components/\n│ │ ├── api-key-input.tsx\n│ │ ├── chat-history.tsx\n│ │ ├── chat-input.tsx\n│ │ ├── chat-interface.tsx\n│ │ ├── collapsible-tool-result.tsx\n│ │ ├── command-suggestions.tsx\n│ │ ├── confirmation-dialog.tsx\n│ │ ├── diff-renderer.tsx\n│ │ ├── index.ts\n│ │ ├── keyboard-hints.tsx\n│ │ ├── loading-spinner.tsx\n│ │ ├── mcp-status.tsx\n│ │ ├── model-selection.tsx\n│ │ ├── phase-progress.tsx\n│ │ ├── quick-actions.tsx\n│ │ ├── reasoning-display.tsx\n│ │ ├── status-bar.tsx\n│ │ ├── subagent-monitor.tsx\n│ │ ├── toast-notification.tsx\n│ │ ├── virtualized-chat-history.tsx\n│ │ └── welcome-panel.tsx\n│ ├── shared/\n│ │ └── max-sized-box.tsx\n│ ├── utils/\n│ │ ├── code-colorizer.tsx\n│ │ ├── colors.ts\n│ │ └── markdown-renderer.tsx\n│ └── app.tsx\n├── utils/\n│ ├── background-task-manager.ts\n│ ├── cache.ts\n│ ├── config-loader.ts\n│ ├── confirmation-service.ts\n│ ├── console-messenger.ts\n│ ├── custom-instructions.ts\n│ ├── error-handler.ts\n│ ├── error-translator.ts\n│ ├── errors.ts\n│ ├── file-cache.ts\n│ ├── history-manager.ts\n│ ├── incremental-analyzer.ts\n│ ├── index.ts\n│ ├── init-previewer.ts\n│ ├── init-validator.ts\n│ ├── instruction-generator.ts\n│ ├── json-utils.ts\n│ ├── llm-optimized-instruction-generator.ts\n│ ├── message-optimizer.ts\n│ ├── onboarding-manager.ts\n│ ├── parallel-analyzer.ts\n│ ├── path-utils.ts\n│ ├── path-validator.ts\n│ ├── performance.ts\n│ ├── progress-tracker.ts\n│ ├── project-analyzer.ts\n│ ├── prompt-builder.ts\n│ ├── settings-manager.ts\n│ ├── settings.ts\n│ ├── setup-validator.ts\n│ └── ... (7 more)\n├── constants.ts\n└── index.ts\npackages/\n└── schemas/\n ├── __tests__/\n ├── scripts/\n ├── src/\n ├── .eslintrc.js\n ├── package-lock.json\n ├── package.json\n ├── README.md\n ├── tsconfig.json\n └── vitest.config.ts\n```\n\n\n## Key Configuration\n\n### README.md\n\n```\n# AX CLI - Enterprise-Class AI CLI\n\n[![Tests](https://img.shields.io/badge/tests-562%20passing-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)\n[![Coverage](https://img.shields.io/badge/coverage-98.29%25-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli)\n[![npm](https://img.shields.io/npm/dt/@defai.digital/ax-cli?style=flat-square&logo=npm&label=downloads)](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-cli)\n...\n```\n\n### readme.md\n\n```\n# AX CLI - Enterprise-Class AI CLI\n\n[![Tests](https://img.shields.io/badge/tests-562%20passing-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)\n[![Coverage](https://img.shields.io/badge/coverage-98.29%25-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli)\n[![npm](https://img.shields.io/npm/dt/@defai.digital/ax-cli?style=flat-square&logo=npm&label=downloads)](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-cli)\n...\n```\n\n### package.json\n\n- **Name**: @defai.digital/ax-cli\n- **Version**: 3.1.1\n- **Description**: Enterprise-Class AI Command Line Interface - Primary support for GLM (General Language Model) with multi-provider AI orchestration powered by AutomatosX.\n- **Type**: module\n- **CLI**: Yes\n- **Dependencies**: @ax-cli/schemas, @clack/prompts, @modelcontextprotocol/sdk, axios, cfonts, chalk, clipboardy, commander, dotenv, enquirer (+11 more)\n- **Dev Dependencies**: @types/fs-extra, @types/js-yaml, @types/marked-terminal, @types/node, @types/react, @typescript-eslint/eslint-plugin, @typescript-eslint/parser, @vitest/coverage-v8 (+5 more)\n- **Scripts**: build, build:schemas, build:bun, dev, dev:node, start\n\n### tsconfig.json\n\n- **Target**: ES2022\n- **Module**: ESNext\n- **Module Resolution**: Bundler\n- **Strict**: true\n- **Output**: ./dist\n\n### .ax-cli/CUSTOM.md\n\n# @defai.digital/ax-cli - Quick Reference\n\n**Type:** cli | **Lang:** TypeScript | **Ver:** v2.3.1\n**Stack:** React, Vitest, Zod, Commander, Ink, ESM, TypeScript\n\n---\n\n## 🎯 Critical Rules\n\n1. **ESM Imports:** Always use `.js` extension: `import { x } from './y.js'`\n2. **Validation:** Use zod for all external inputs\n3. **Types:** Explicit return types required on all functions\n4. **Testing:** 80%+ coverage, test error paths\n5. **Modules:** Use `import/export` (not `require/module.exports`)\n6. **File Organization:** Follow standardized output paths (see below)\n\n---\n\n## 📁 Project File Organization\n\n### Standard Output Paths\n\nAll AI-generated and project artifacts must follow this structure:\n\n```\nautomatosx/\n├── PRD/ # Product Requirement Documents\n│ ├── features/ # Feature specifications\n│ ├── api/ # API documentation\n│ └── archive/ # Old/deprecated PRDs\n├── REPORT/ # Project reports and analysis\n│ ├── status/ # Status reports\n│ ├\n[...truncated]\n\n\n## README Summary\n\n# AX CLI - Enterprise-Class AI CLI\n\n[![Tests](https://img.shields.io/badge/tests-562%20passing-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)\n[![Coverage](https://img.shields.io/badge/coverage-98.29%25-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli)\n[![npm](https://img.shields.io/npm/dt/@defai.digital/ax-cli?style=flat-square&logo=npm&label=downloads)](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-cli)\n[![Node.js Version](https://img.shields.io/badge/node-%3E%3D24.0.0-blue?style=flat-square)](https://nodejs.org/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.9%2B-blue?style=flat-square&logo=typescript)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)\n[![macOS](https://img.shields.io/badge/macOS-26-blue?style=flat-square&logo=apple)](https://www.apple.com/macos/)\n[![Windows](https://img.shields.io/badge/Windows-11-blue?style=flat-square&logo=windows)](https://www.microsoft.com/windows/)\n[![Ubuntu](https://img.shields.io/badge/Ubuntu-24.04-blue?style=flat-square&logo=ubuntu)](https://ubuntu.com/)\n\n![AX CLI Logo](.github/assets/ax-cli.png)\n\n<p align=\"center\">\n <strong>Enterprise-Grade Architecture • 98%+ Test Coverage • TypeScript & Zod Validation</strong>\n</p>\n\n---\n\n## 🚀 Quick Start\n\n```bash\n# Install globally\nnpm install -g @defai.digital/ax-cli\n\n# Configure your API key\nax-cli setup\n\n# Initialize your project\nax-cli init\n\n# Start interactive mode\nax-cli\n```\n\n## ✨ Features\n\n- **🤖 Multi-Provider Support**: Z.AI (GLM), xAI (Grok), OpenAI, Anthropic (Claude), Ollama (local)\n- **🧠 GLM 4.6 Optimized**: Primary support for General Language Model with advanced reasoning\n - **32K max tokens** (industry-standard, matches Claude Code CLI)\n - 200K context window, 128K max output capability\n - 30% more token efficient than GLM 4.5\n - Optimized for complex code generation and refactoring\n- **🎯 Multi-Phase Task Planner** (NEW in v3.0.0): Intelligent task decomposition for complex requests\n - Automatic complexity detection (57 keyword patterns)\n - LLM-based plan generation with phases and dependencies\n - Phase-by-phase execution with progress tracking\n - File modification tracking and context pruning between phases\n - Plan management commands: `/plans`, `/plan`, `/phases`, `/pause`, `/resume`, `/skip`, `/abandon`\n- **🔄 Session Continuity**: Directory-specific conversation history with `--continue` flag\n - Preserve context across sessions for multi-day development\n - Each project maintains its own independent history\n - Seamlessly resume conversations where you left off\n- **🔌 MCP Integration**: Model Context Protocol for extensible tool support\n- **✅ Production-Ready**: 98%+ test coverage, TypeScript strict mode, Zod validation\n- **🎯 Interactive & Headless**: Chat interface or one-shot commands\n- **📝 Smart Project Init**: Automatic project analysis and custom instructions\n- **🧠 Project Memory** (NEW): Intelligent context caching for z.ai GLM-4.6\n - Automatic project scanning and context generation\n - z.ai implicit caching support (50% token savings on repeated context)\n - Cache statistics tracking and efficiency monitoring\n- **🔄 Auto-Update**: Built-in update checker and installer\n\n### Max Tokens Configuration\n\nAX CLI uses **industry-standard max tokens** based on research of leading AI coding tools:\n\n| Tool | Max Tokens | Notes |\n|------|-----------|-------|\n| **Claude Code CLI** | 16k - 32k | Industry standard |\n| **GitHub Copilot** | 64k | GPT-4o default |\n| **Cursor AI** | 200k | With intelligent pruning |\n| **AX CLI (GLM 4.6)** | **32k** ✅ | Matches Claude Code upper default |\n| **AX CLI (Others)** | 8k | Appropriate for each model |\n\n**Why 32k for GLM 4.6?**\n- Competitive with industry leaders (Claude Code, GitHub Copilot)\n- GLM 4.6 supports up to 128k max output (our 32k is conservative at 25%)\n- Better for complex code generation, large file modifications, and multi-file context\n- Based on o\n\n[...truncated]",
46
+ "formatted": "# Project: ax-cli\n\n\n## Architecture Patterns\n- **Project Type**: cli\n- **Primary Language**: TypeScript\n- **Tech Stack**: React, Vitest, Zod, Commander, Ink, ESM, TypeScript\n- **Package Manager**: npm\n- **Entry Point**: dist/index.js\n- **Module System**: ESM\n- **Test Framework**: vitest\n- **Validation**: zod\n- **Linter**: eslint\n- **Key Directories**: source: src, tests: tests\n\n\n## Directory Structure\n```\nsrc/\n├── agent/\n│ ├── specialized/\n│ │ ├── analysis-agent.ts\n│ │ ├── debug-agent.ts\n│ │ ├── documentation-agent.ts\n│ │ ├── index.ts\n│ │ ├── performance-agent.ts\n│ │ ├── refactoring-agent.ts\n│ │ └── testing-agent.ts\n│ ├── context-manager.ts\n│ ├── context-manager.ts.bak\n│ ├── dependency-resolver.ts\n│ ├── index.ts\n│ ├── llm-agent.ts\n│ ├── llm-agent.ts.backup\n│ ├── subagent-orchestrator.ts\n│ ├── subagent-types.ts\n│ └── subagent.ts\n├── checkpoint/\n│ ├── index.ts\n│ ├── manager.ts\n│ ├── storage.ts\n│ └── types.ts\n├── commands/\n│ ├── init/\n│ │ └── wizard.ts\n│ ├── cache.ts\n│ ├── init.ts\n│ ├── mcp.ts\n│ ├── memory.ts\n│ ├── models.ts\n│ ├── plan.ts\n│ ├── rewind.ts\n│ ├── setup.ts\n│ ├── templates.ts\n│ ├── update.ts\n│ └── usage.ts\n├── hooks/\n│ ├── use-chat-reducer.ts\n│ ├── use-enhanced-input.ts\n│ ├── use-input-handler.ts\n│ └── use-input-history.ts\n├── llm/\n│ ├── client.ts\n│ ├── tools.ts\n│ └── types.ts\n├── mcp/\n│ ├── client.ts\n│ ├── config.ts\n│ └── transports.ts\n├── memory/\n│ ├── context-generator.ts\n│ ├── context-injector.ts\n│ ├── context-store.ts\n│ ├── index.ts\n│ ├── schemas.ts\n│ ├── stats-collector.ts\n│ └── types.ts\n├── planner/\n│ ├── prompts/\n│ │ └── planning-prompt.ts\n│ ├── dependency-resolver.ts\n│ ├── index.ts\n│ ├── plan-generator.ts\n│ ├── plan-storage.ts\n│ ├── task-planner.ts\n│ ├── token-estimator.ts\n│ └── types.ts\n├── schemas/\n│ ├── api-schemas.ts\n│ ├── confirmation-schemas.ts\n│ ├── index-unified.ts\n│ ├── index.ts\n│ ├── README.md\n│ ├── settings-schemas.ts\n│ ├── tool-schemas.ts\n│ └── yaml-schemas.ts\n├── tools/\n│ ├── bash-output.ts\n│ ├── bash.ts\n│ ├── confirmation-tool.ts\n│ ├── index.ts\n│ ├── search.ts\n│ ├── text-editor.ts\n│ └── todo-tool.ts\n├── types/\n│ ├── index.ts\n│ ├── project-analysis.ts\n│ └── template.ts\n├── ui/\n│ ├── components/\n│ │ ├── api-key-input.tsx\n│ │ ├── chat-history.tsx\n│ │ ├── chat-input.tsx\n│ │ ├── chat-interface.tsx\n│ │ ├── collapsible-tool-result.tsx\n│ │ ├── command-suggestions.tsx\n│ │ ├── confirmation-dialog.tsx\n│ │ ├── diff-renderer.tsx\n│ │ ├── index.ts\n│ │ ├── keyboard-hints.tsx\n│ │ ├── loading-spinner.tsx\n│ │ ├── mcp-status.tsx\n│ │ ├── model-selection.tsx\n│ │ ├── phase-progress.tsx\n│ │ ├── quick-actions.tsx\n│ │ ├── reasoning-display.tsx\n│ │ ├── status-bar.tsx\n│ │ ├── subagent-monitor.tsx\n│ │ ├── toast-notification.tsx\n│ │ ├── virtualized-chat-history.tsx\n│ │ └── welcome-panel.tsx\n│ ├── shared/\n│ │ └── max-sized-box.tsx\n│ ├── utils/\n│ │ ├── code-colorizer.tsx\n│ │ ├── colors.ts\n│ │ └── markdown-renderer.tsx\n│ └── app.tsx\n├── utils/\n│ ├── background-task-manager.ts\n│ ├── cache.ts\n│ ├── config-loader.ts\n│ ├── confirmation-service.ts\n│ ├── console-messenger.ts\n│ ├── custom-instructions.ts\n│ ├── error-handler.ts\n│ ├── error-translator.ts\n│ ├── errors.ts\n│ ├── file-cache.ts\n│ ├── history-manager.ts\n│ ├── incremental-analyzer.ts\n│ ├── index.ts\n│ ├── init-previewer.ts\n│ ├── init-validator.ts\n│ ├── instruction-generator.ts\n│ ├── json-utils.ts\n│ ├── llm-optimized-instruction-generator.ts\n│ ├── message-optimizer.ts\n│ ├── onboarding-manager.ts\n│ ├── parallel-analyzer.ts\n│ ├── path-utils.ts\n│ ├── path-validator.ts\n│ ├── performance.ts\n│ ├── progress-tracker.ts\n│ ├── project-analyzer.ts\n│ ├── prompt-builder.ts\n│ ├── settings-manager.ts\n│ ├── settings.ts\n│ ├── setup-validator.ts\n│ └── ... (7 more)\n├── constants.ts\n└── index.ts\npackages/\n└── schemas/\n ├── __tests__/\n ├── scripts/\n ├── src/\n ├── .eslintrc.js\n ├── package-lock.json\n ├── package.json\n ├── README.md\n ├── tsconfig.json\n └── vitest.config.ts\n```\n\n\n## Key Configuration\n\n### README.md\n\n```\n# AX CLI - Enterprise-Class AI CLI\n\n[![Tests](https://img.shields.io/badge/tests-562%20passing-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)\n[![Coverage](https://img.shields.io/badge/coverage-98.29%25-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli)\n[![npm](https://img.shields.io/npm/dt/@defai.digital/ax-cli?style=flat-square&logo=npm&label=downloads)](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-cli)\n...\n```\n\n### readme.md\n\n```\n# AX CLI - Enterprise-Class AI CLI\n\n[![Tests](https://img.shields.io/badge/tests-562%20passing-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)\n[![Coverage](https://img.shields.io/badge/coverage-98.29%25-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli)\n[![npm](https://img.shields.io/npm/dt/@defai.digital/ax-cli?style=flat-square&logo=npm&label=downloads)](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-cli)\n...\n```\n\n### package.json\n\n- **Name**: @defai.digital/ax-cli\n- **Version**: 3.1.4\n- **Description**: Enterprise-Class AI Command Line Interface - Primary support for GLM (General Language Model) with multi-provider AI orchestration powered by AutomatosX.\n- **Type**: module\n- **CLI**: Yes\n- **Dependencies**: @ax-cli/schemas, @clack/prompts, @modelcontextprotocol/sdk, axios, cfonts, chalk, clipboardy, commander, dotenv, enquirer (+11 more)\n- **Dev Dependencies**: @types/fs-extra, @types/js-yaml, @types/marked-terminal, @types/node, @types/react, @typescript-eslint/eslint-plugin, @typescript-eslint/parser, @vitest/coverage-v8 (+5 more)\n- **Scripts**: build, build:schemas, build:bun, dev, dev:node, start\n\n### tsconfig.json\n\n- **Target**: ES2022\n- **Module**: ESNext\n- **Module Resolution**: Bundler\n- **Strict**: true\n- **Output**: ./dist\n\n### .ax-cli/CUSTOM.md\n\n# @defai.digital/ax-cli - Quick Reference\n\n**Type:** cli | **Lang:** TypeScript | **Ver:** v2.3.1\n**Stack:** React, Vitest, Zod, Commander, Ink, ESM, TypeScript\n\n---\n\n## 🎯 Critical Rules\n\n1. **ESM Imports:** Always use `.js` extension: `import { x } from './y.js'`\n2. **Validation:** Use zod for all external inputs\n3. **Types:** Explicit return types required on all functions\n4. **Testing:** 80%+ coverage, test error paths\n5. **Modules:** Use `import/export` (not `require/module.exports`)\n6. **File Organization:** Follow standardized output paths (see below)\n\n---\n\n## 📁 Project File Organization\n\n### Standard Output Paths\n\nAll AI-generated and project artifacts must follow this structure:\n\n```\nautomatosx/\n├── PRD/ # Product Requirement Documents\n│ ├── features/ # Feature specifications\n│ ├── api/ # API documentation\n│ └── archive/ # Old/deprecated PRDs\n├── REPORT/ # Project reports and analysis\n│ ├── status/ # Status reports\n│ ├\n[...truncated]\n\n\n## README Summary\n\n# AX CLI - Enterprise-Class AI CLI\n\n[![Tests](https://img.shields.io/badge/tests-562%20passing-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)\n[![Coverage](https://img.shields.io/badge/coverage-98.29%25-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli)\n[![npm](https://img.shields.io/npm/dt/@defai.digital/ax-cli?style=flat-square&logo=npm&label=downloads)](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-cli)\n[![Node.js Version](https://img.shields.io/badge/node-%3E%3D24.0.0-blue?style=flat-square)](https://nodejs.org/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.9%2B-blue?style=flat-square&logo=typescript)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)\n[![macOS](https://img.shields.io/badge/macOS-26-blue?style=flat-square&logo=apple)](https://www.apple.com/macos/)\n[![Windows](https://img.shields.io/badge/Windows-11-blue?style=flat-square&logo=windows)](https://www.microsoft.com/windows/)\n[![Ubuntu](https://img.shields.io/badge/Ubuntu-24.04-blue?style=flat-square&logo=ubuntu)](https://ubuntu.com/)\n\n![AX CLI Logo](.github/assets/ax-cli.png)\n\n<p align=\"center\">\n <strong>Enterprise-Grade Architecture • 98%+ Test Coverage • TypeScript & Zod Validation</strong>\n</p>\n\n---\n\n## 🚀 Quick Start\n\n```bash\n# Install globally\nnpm install -g @defai.digital/ax-cli\n\n# Configure your API key\nax-cli setup\n\n# Initialize your project\nax-cli init\n\n# Start interactive mode\nax-cli\n```\n\n## ✨ Features\n\n- **🤖 Multi-Provider Support**: Z.AI (GLM), xAI (Grok), OpenAI, Anthropic (Claude), Ollama (local)\n- **🧠 GLM 4.6 Optimized**: Primary support for General Language Model with advanced reasoning\n - **32K max tokens** (industry-standard, matches Claude Code CLI)\n - 200K context window, 128K max output capability\n - 30% more token efficient than GLM 4.5\n - Optimized for complex code generation and refactoring\n- **🎯 Multi-Phase Task Planner** (NEW in v3.0.0): Intelligent task decomposition for complex requests\n - Automatic complexity detection (57 keyword patterns)\n - LLM-based plan generation with phases and dependencies\n - Phase-by-phase execution with progress tracking\n - File modification tracking and context pruning between phases\n - Plan management commands: `/plans`, `/plan`, `/phases`, `/pause`, `/resume`, `/skip`, `/abandon`\n- **🔄 Session Continuity**: Directory-specific conversation history with `--continue` flag\n - Preserve context across sessions for multi-day development\n - Each project maintains its own independent history\n - Seamlessly resume conversations where you left off\n- **🔌 MCP Integration**: Model Context Protocol for extensible tool support\n- **✅ Production-Ready**: 98%+ test coverage, TypeScript strict mode, Zod validation\n- **🎯 Interactive & Headless**: Chat interface or one-shot commands\n- **📝 Smart Project Init**: Automatic project analysis and custom instructions\n- **🧠 Project Memory** (NEW): Intelligent context caching for z.ai GLM-4.6\n - Automatic project scanning and context generation\n - z.ai implicit caching support (50% token savings on repeated context)\n - Cache statistics tracking and efficiency monitoring\n- **🔄 Auto-Update**: Built-in update checker and installer\n\n### Max Tokens Configuration\n\nAX CLI uses **industry-standard max tokens** based on research of leading AI coding tools:\n\n| Tool | Max Tokens | Notes |\n|------|-----------|-------|\n| **Claude Code CLI** | 16k - 32k | Industry standard |\n| **GitHub Copilot** | 64k | GPT-4o default |\n| **Cursor AI** | 200k | With intelligent pruning |\n| **AX CLI (GLM 4.6)** | **32k** ✅ | Matches Claude Code upper default |\n| **AX CLI (Others)** | 8k | Appropriate for each model |\n\n**Why 32k for GLM 4.6?**\n- Competitive with industry leaders (Claude Code, GitHub Copilot)\n- GLM 4.6 supports up to 128k max output (our 32k is conservative at 25%)\n- Better for complex code generation, large file modifications, and multi-file context\n- Based on o\n\n[...truncated]",
47
47
  "token_estimate": 3315,
48
48
  "sections": {
49
49
  "structure": 1252,
@@ -1,7 +1,7 @@
1
1
  # AI Model Configuration
2
2
  # Defines available models and their capabilities
3
3
 
4
- default_model: grok-code-fast-1
4
+ default_model: glm-4.6
5
5
 
6
6
  models:
7
7
  glm-4.6:
@@ -47,16 +47,22 @@ export class ContextManager {
47
47
  this.tokenCache.delete(cacheKey);
48
48
  }
49
49
  }
50
- // Perform full cache cleanup if cache is getting too large
50
+ // Perform incremental cache cleanup if cache is getting too large
51
+ // Instead of sorting all entries, just remove oldest 10-20% incrementally
51
52
  if (this.tokenCache.size > this.MAX_CACHE_SIZE) {
52
53
  this.cleanupCache();
53
- // If still over limit after cleanup, evict oldest entries (LRU-style)
54
+ // If still over limit after cleanup, evict oldest entries incrementally
54
55
  if (this.tokenCache.size > this.MAX_CACHE_SIZE) {
55
- const entriesToRemove = this.tokenCache.size - this.MAX_CACHE_SIZE + 10; // Remove 10 extra for headroom
56
- const sortedEntries = Array.from(this.tokenCache.entries())
57
- .sort((a, b) => a[1].timestamp - b[1].timestamp);
58
- for (let i = 0; i < entriesToRemove && i < sortedEntries.length; i++) {
59
- this.tokenCache.delete(sortedEntries[i][0]);
56
+ const entriesToRemove = Math.min(this.tokenCache.size - this.MAX_CACHE_SIZE + 10, // Remove excess + 10 for headroom
57
+ Math.ceil(this.tokenCache.size * 0.1) // Or 10% of cache, whichever is smaller
58
+ );
59
+ let removed = 0;
60
+ // Map iteration order is insertion order, so oldest are first
61
+ for (const [key] of this.tokenCache.entries()) {
62
+ if (removed >= entriesToRemove)
63
+ break;
64
+ this.tokenCache.delete(key);
65
+ removed++;
60
66
  }
61
67
  }
62
68
  }
@@ -155,7 +161,8 @@ export class ContextManager {
155
161
  console.warn('[ContextManager] Cannot prune empty messages array');
156
162
  return messages;
157
163
  }
158
- if (messages[0].role !== 'system') {
164
+ // Bounds check: ensure array is not empty before accessing first element
165
+ if (messages.length === 0 || messages[0].role !== 'system') {
159
166
  // Missing system message - log warning but continue with defensive handling
160
167
  console.warn('[ContextManager] First message is not system message, proceeding with caution');
161
168
  // Don't prune if system message is missing to avoid breaking conversation state
@@ -271,6 +278,10 @@ export class ContextManager {
271
278
  * Apply sliding window: keep first few + last many messages
272
279
  */
273
280
  applySlidingWindow(messages, tokenCounter) {
281
+ // Bounds check: ensure array has at least a system message
282
+ if (messages.length === 0) {
283
+ return messages;
284
+ }
274
285
  const systemMessage = messages[0];
275
286
  const workingMessages = messages.slice(1);
276
287
  // Start with system message + first 2 user messages
@@ -1 +1 @@
1
- {"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../../src/agent/context-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAiBjC,MAAM,OAAO,cAAc;IACjB,KAAK,CAAS;IACd,aAAa,CAAS;IACtB,cAAc,CAAS;IACvB,SAAS,CAAS;IAClB,oBAAoB,CAAS;IAC7B,iBAAiB,CAAS;IAC1B,cAAc,CAAS;IAE/B,uCAAuC;IACvC,gEAAgE;IACxD,UAAU,GAAG,IAAI,GAAG,EAAgD,CAAC;IAC5D,SAAS,GAAG,KAAK,CAAC,CAAC,eAAe;IAClC,cAAc,GAAG,GAAG,CAAC,CAAC,uCAAuC;IAE9E,YAAY,OAA8B;QACxC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC;QACtE,IAAI,CAAC,aAAa,GAAG,WAAW,EAAE,aAAa,IAAI,MAAM,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QAC3C,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;IACvD,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAAC,QAAsB,EAAE,YAA0B;QAC5E,sCAAsC;QACtC,2EAA2E;QAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAEtD,0DAA0D;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE7C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC5C,OAAO,MAAM,CAAC,KAAK,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,qBAAqB;gBACrB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,sEAAsE;YACtE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,+BAA+B;gBACxG,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;qBACxD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,MAAM,KAAK,GAAG,YAAY,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAEzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACK,qBAAqB,CAAC,QAAsB;QAClD,uDAAuD;QACvD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACxC,mBAAmB;YACnB,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;gBAC3C,CAAC,CAAC,CAAC,CAAC,OAAO;gBACX,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;oBACxB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvE,CAAC,CAAC,EAAE,CAAC;YAET,gCAAgC;YAChC,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU;gBAClG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;gBAC9B,CAAC,CAAC,EAAE,CAAC;YAEP,+CAA+C;YAC/C,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,gDAAgD;QAChD,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC3C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAAsB,EAAE,YAA0B;QAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3D,OAAO,aAAa,GAAG,SAAS,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAsB,EAAE,YAA0B;QAChE,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;QAClD,OAAO,aAAa,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAAsB,EAAE,YAA0B;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACvE,+DAA+D;QAC/D,MAAM,UAAU,GAAG,GAAG,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAErD,OAAO;YACL,aAAa;YACb,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,UAAU,EAAE,UAAU,EAAE,+CAA+C;YACvE,SAAS;YACT,WAAW,EAAE,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;YACvE,WAAW,EAAE,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;SACnE,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,aAAa,CAAC,QAAsB,EAAE,YAA0B;QAC9D,8CAA8C;QAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,6DAA6D;YAC7D,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YACnE,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,4EAA4E;YAC5E,OAAO,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;YAC9F,gFAAgF;YAChF,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,wCAAwC;QACxC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;YAC9C,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAExC,+CAA+C;QAC/C,MAAM,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC;QAE1E,+BAA+B;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAE5D,kCAAkC;QAClC,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QAE1D,oCAAoC;QACpC,MAAM,cAAc,GAAiB,CAAC,aAAa,CAAC,CAAC;QAErD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAEnC,8BAA8B;YAC9B,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;YACD,wDAAwD;iBACnD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACjC,wBAAwB;gBACxB,SAAS;YACX,CAAC;YACD,2DAA2D;iBACtD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACjE,yCAAyC;gBACzC,IAAI,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,IAAI,aAAa,GAAG,YAAY,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAEpE,gDAAgD;QAChD,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,QAAsB;QACtD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QAEpC,yDAAyD;QACzD,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAChC,IAAI,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC9C,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACjB,gBAAgB,EAAE,CAAC;gBACrB,CAAC;qBAAM,CAAC;oBACN,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACK,kBAAkB,CAAC,QAAsB;QAC/C,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAa,EAAE,CAAC;QAChC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAE5B,4CAA4C;YAC5C,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,YAAY,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnH,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC5B,CAAC;gBACD,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,wBAAwB;iBACnB,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC5C,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;YACD,sDAAsD;iBACjD,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC3I,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC1B,YAAY,GAAG,EAAE,CAAC;gBAClB,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;YACD,0BAA0B;iBACrB,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC5C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC5B,CAAC;gBACD,YAAY,GAAG,EAAE,CAAC;gBAClB,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,QAAsB,EAAE,YAA0B;QAC3E,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE1C,oDAAoD;QACpD,MAAM,aAAa,GAAiB,CAAC,aAAa,CAAC,CAAC;QACpD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACvC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,SAAS,EAAE,CAAC;gBACZ,eAAe,GAAG,CAAC,CAAC;gBACpB,IAAI,SAAS,IAAI,IAAI,CAAC,iBAAiB;oBAAE,MAAM;YACjD,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,MAAM,WAAW,GAAG,YAAY,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACnE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAChC,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,cAAc,CAC/E,CAAC;QAEF,0EAA0E;QAC1E,IAAI,eAAe,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,aAAa,CAAC,CAAC,+CAA+C;QACvE,CAAC;QAED,mCAAmC;QACnC,MAAM,cAAc,GAAiB,EAAE,CAAC;QACxC,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;YAClE,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAEzD,IAAI,YAAY,GAAG,SAAS,IAAI,eAAe,EAAE,CAAC;gBAChD,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC5B,YAAY,IAAI,SAAS,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,MAAM,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;QAElC,4CAA4C;QAC5C,oEAAoE;QACpE,MAAM,QAAQ,GAAG,eAAe,GAAG,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;QAC9D,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,+DAA+D;aACzE,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;QAE/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAAC,KAAuC;QAC1D,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,gBAAgB,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,YAAY,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;kEAC9E,CAAC;QAC/D,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,gBAAgB,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,YAAY,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;mDAC7F,CAAC;QAChD,CAAC;QAED,OAAO,eAAe,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,YAAY,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;IAC1J,CAAC;CACF"}
1
+ {"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../../src/agent/context-manager.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,8 @@ export declare class LLMAgent extends EventEmitter {
54
54
  private abortController;
55
55
  private maxToolRounds;
56
56
  private recentToolCalls;
57
+ private toolCallIndexMap;
58
+ private toolCallArgsCache;
57
59
  private checkpointManager;
58
60
  private subagentOrchestrator;
59
61
  private taskPlanner;
@@ -94,6 +96,12 @@ export declare class LLMAgent extends EventEmitter {
94
96
  * Check if agent is running in deterministic mode
95
97
  */
96
98
  isDeterministicMode(): boolean;
99
+ /**
100
+ * Parse tool call arguments with caching for loop detection
101
+ * Returns cached result if available, otherwise parses and caches
102
+ * Used specifically for isRepetitiveToolCall to avoid redundant parsing
103
+ */
104
+ private parseToolArgumentsCached;
97
105
  /**
98
106
  * Detect if a tool call is repetitive (likely causing a loop)
99
107
  * Returns true if the same tool with similar arguments was called multiple times recently
@@ -30,6 +30,8 @@ export class LLMAgent extends EventEmitter {
30
30
  abortController = null;
31
31
  maxToolRounds;
32
32
  recentToolCalls = new Map(); // Track recent tool calls to detect loops
33
+ toolCallIndexMap = new Map(); // O(1) lookup for tool call entries in chat history
34
+ toolCallArgsCache = new Map(); // Cache parsed tool arguments
33
35
  checkpointManager;
34
36
  subagentOrchestrator;
35
37
  taskPlanner;
@@ -188,6 +190,20 @@ export class LLMAgent extends EventEmitter {
188
190
  isDeterministicMode() {
189
191
  return this.samplingConfig?.doSample === false;
190
192
  }
193
+ /**
194
+ * Parse tool call arguments with caching for loop detection
195
+ * Returns cached result if available, otherwise parses and caches
196
+ * Used specifically for isRepetitiveToolCall to avoid redundant parsing
197
+ */
198
+ parseToolArgumentsCached(toolCall) {
199
+ const cached = this.toolCallArgsCache.get(toolCall.id);
200
+ if (cached) {
201
+ return cached;
202
+ }
203
+ const args = JSON.parse(toolCall.function.arguments || '{}');
204
+ this.toolCallArgsCache.set(toolCall.id, args);
205
+ return args;
206
+ }
191
207
  /**
192
208
  * Detect if a tool call is repetitive (likely causing a loop)
193
209
  * Returns true if the same tool with similar arguments was called multiple times recently
@@ -202,30 +218,30 @@ export class LLMAgent extends EventEmitter {
202
218
  return false;
203
219
  }
204
220
  try {
205
- const args = JSON.parse(toolCall.function.arguments || '{}');
221
+ const args = this.parseToolArgumentsCached(toolCall);
206
222
  // Create a detailed signature that includes key arguments
207
223
  // This allows multiple different commands but catches true repetitions
208
224
  let signature = toolCall.function.name;
209
- if (toolCall.function.name === 'bash' && args.command) {
225
+ if (toolCall.function.name === 'bash' && args.command && typeof args.command === 'string') {
210
226
  // Normalize command: trim whitespace, collapse multiple spaces
211
227
  const normalizedCommand = args.command.trim().replace(/\s+/g, ' ');
212
228
  // Use full command for exact matching (catches true duplicates)
213
229
  signature = `bash:${normalizedCommand}`;
214
230
  }
215
- else if (toolCall.function.name === 'search' && args.query) {
231
+ else if (toolCall.function.name === 'search' && args.query && typeof args.query === 'string') {
216
232
  // For search, include the normalized query
217
233
  const normalizedQuery = args.query.trim().toLowerCase().replace(/\s+/g, ' ');
218
234
  signature = `search:${normalizedQuery}`;
219
235
  }
220
- else if (toolCall.function.name === 'view_file' && args.path) {
236
+ else if (toolCall.function.name === 'view_file' && args.path && typeof args.path === 'string') {
221
237
  // For file reads, include the path
222
238
  signature = `view:${args.path}`;
223
239
  }
224
- else if (toolCall.function.name === 'create_file' && args.path) {
240
+ else if (toolCall.function.name === 'create_file' && args.path && typeof args.path === 'string') {
225
241
  // For file writes, include the path
226
242
  signature = `create:${args.path}`;
227
243
  }
228
- else if (toolCall.function.name === 'str_replace_editor' && args.path) {
244
+ else if (toolCall.function.name === 'str_replace_editor' && args.path && typeof args.path === 'string') {
229
245
  // For text editor, include the path
230
246
  signature = `edit:${args.path}`;
231
247
  }
@@ -255,10 +271,15 @@ export class LLMAgent extends EventEmitter {
255
271
  console.error(`[LOOP DETECTION] Current map:`, Array.from(this.recentToolCalls.entries()));
256
272
  }
257
273
  // Clean up old entries (keep only last N unique calls)
274
+ // Batch cleanup when exceeding threshold to prevent unbounded growth
258
275
  if (this.recentToolCalls.size > AGENT_CONFIG.MAX_RECENT_TOOL_CALLS) {
259
- const firstKey = this.recentToolCalls.keys().next().value;
260
- if (firstKey !== undefined) {
261
- this.recentToolCalls.delete(firstKey);
276
+ const excessCount = this.recentToolCalls.size - AGENT_CONFIG.MAX_RECENT_TOOL_CALLS + 10;
277
+ let removed = 0;
278
+ for (const key of this.recentToolCalls.keys()) {
279
+ if (removed >= excessCount)
280
+ break;
281
+ this.recentToolCalls.delete(key);
282
+ removed++;
262
283
  }
263
284
  }
264
285
  return false;
@@ -887,15 +908,17 @@ export class LLMAgent extends EventEmitter {
887
908
  timestamp: new Date(),
888
909
  toolCall: toolCall,
889
910
  };
911
+ const index = this.chatHistory.length;
890
912
  this.chatHistory.push(toolCallEntry);
913
+ this.toolCallIndexMap.set(toolCall.id, index); // O(1) lookup for later updates
891
914
  newEntries.push(toolCallEntry);
892
915
  });
893
916
  // Execute tool calls and update the entries
894
917
  for (const toolCall of assistantMessage.tool_calls) {
895
918
  const result = await this.executeTool(toolCall);
896
- // Update the existing tool_call entry with the result
897
- const entryIndex = this.chatHistory.findIndex((entry) => entry.type === "tool_call" && entry.toolCall?.id === toolCall.id);
898
- if (entryIndex !== -1) {
919
+ // Update the existing tool_call entry with the result (O(1) lookup)
920
+ const entryIndex = this.toolCallIndexMap.get(toolCall.id);
921
+ if (entryIndex !== undefined) {
899
922
  const updatedEntry = {
900
923
  ...this.chatHistory[entryIndex],
901
924
  type: "tool_result",
@@ -1328,38 +1351,17 @@ export class LLMAgent extends EventEmitter {
1328
1351
  yield chunk;
1329
1352
  }
1330
1353
  }
1331
- if (process.env.DEBUG_LOOP_DETECTION === '1') {
1332
- console.error(`[LOOP DEBUG] After chunk processing, streamResult exists: ${!!streamResult}`);
1333
- }
1334
1354
  if (!streamResult) {
1335
- if (process.env.DEBUG_LOOP_DETECTION === '1') {
1336
- console.error(`[LOOP DEBUG] No streamResult, continuing...`);
1337
- }
1338
1355
  continue;
1339
1356
  }
1340
1357
  // Add assistant message to history
1341
1358
  this.addAssistantMessage(streamResult.accumulated);
1342
- // Debug: Log what we received
1343
- if (process.env.DEBUG_LOOP_DETECTION === '1') {
1344
- console.error(`\n[LOOP DEBUG] Stream result received`);
1345
- console.error(`[LOOP DEBUG] Has tool_calls: ${!!streamResult.accumulated.tool_calls}`);
1346
- console.error(`[LOOP DEBUG] Tool calls length: ${streamResult.accumulated.tool_calls?.length || 0}`);
1347
- }
1348
1359
  // Handle tool calls if present
1349
1360
  if (streamResult.accumulated.tool_calls?.length > 0) {
1350
1361
  toolRounds++;
1351
1362
  // Check for repetitive tool calls (loop detection)
1352
- if (process.env.DEBUG_LOOP_DETECTION === '1') {
1353
- console.error(`\n[LOOP CHECK STREAM] Checking ${streamResult.accumulated.tool_calls.length} tool calls...`);
1354
- }
1355
1363
  const hasRepetitiveCall = streamResult.accumulated.tool_calls.some((tc) => this.isRepetitiveToolCall(tc));
1356
- if (process.env.DEBUG_LOOP_DETECTION === '1') {
1357
- console.error(`[LOOP CHECK STREAM] hasRepetitiveCall: ${hasRepetitiveCall}\n`);
1358
- }
1359
1364
  if (hasRepetitiveCall) {
1360
- if (process.env.DEBUG_LOOP_DETECTION === '1') {
1361
- console.error(`[LOOP CHECK STREAM] 🛑 Breaking loop!`);
1362
- }
1363
1365
  yield {
1364
1366
  type: "content",
1365
1367
  content: "\n\n⚠️ Detected repetitive tool calls. Stopping to prevent infinite loop.\n\nI apologize, but I seem to be stuck in a loop trying to answer your question. Let me provide what I can without further tool use.",
@@ -1446,38 +1448,70 @@ export class LLMAgent extends EventEmitter {
1446
1448
  return { success: false, error: parseResult.error };
1447
1449
  }
1448
1450
  const args = parseResult.args;
1451
+ // Helper to safely get string argument with validation
1452
+ const getString = (key, required = true) => {
1453
+ const value = args[key];
1454
+ if (typeof value !== 'string') {
1455
+ if (required)
1456
+ throw new Error(`Tool argument '${key}' must be a string, got ${typeof value}`);
1457
+ return '';
1458
+ }
1459
+ return value;
1460
+ };
1461
+ // Helper to safely get number argument
1462
+ const getNumber = (key) => {
1463
+ const value = args[key];
1464
+ if (value === undefined || value === null)
1465
+ return undefined;
1466
+ if (typeof value !== 'number')
1467
+ return undefined;
1468
+ return value;
1469
+ };
1470
+ // Helper to safely get boolean argument
1471
+ const getBoolean = (key) => {
1472
+ const value = args[key];
1473
+ if (value === undefined || value === null)
1474
+ return undefined;
1475
+ if (typeof value !== 'boolean')
1476
+ return undefined;
1477
+ return value;
1478
+ };
1449
1479
  switch (toolCall.function.name) {
1450
1480
  case "view_file":
1451
- const range = args.start_line && args.end_line
1452
- ? [args.start_line, args.end_line]
1481
+ const startLine = getNumber('start_line');
1482
+ const endLine = getNumber('end_line');
1483
+ const range = startLine !== undefined && endLine !== undefined
1484
+ ? [startLine, endLine]
1453
1485
  : undefined;
1454
- return await this.textEditor.view(args.path, range);
1486
+ return await this.textEditor.view(getString('path'), range);
1455
1487
  case "create_file":
1456
- return await this.textEditor.create(args.path, args.content);
1488
+ return await this.textEditor.create(getString('path'), getString('content'));
1457
1489
  case "str_replace_editor":
1458
- return await this.textEditor.strReplace(args.path, args.old_str, args.new_str, args.replace_all);
1490
+ return await this.textEditor.strReplace(getString('path'), getString('old_str'), getString('new_str'), getBoolean('replace_all') ?? false);
1459
1491
  case "bash":
1460
- return await this.bash.execute(args.command, {
1461
- background: args.background,
1462
- timeout: args.timeout,
1492
+ return await this.bash.execute(getString('command'), {
1493
+ background: getBoolean('background'),
1494
+ timeout: getNumber('timeout'),
1463
1495
  });
1464
1496
  case "bash_output":
1465
- return await this.bashOutput.execute(args.task_id, args.wait, args.timeout);
1497
+ return await this.bashOutput.execute(getString('task_id'), getBoolean('wait'), getNumber('timeout'));
1466
1498
  case "create_todo_list":
1467
- return await this.todoTool.createTodoList(args.todos);
1499
+ return await this.todoTool.createTodoList(Array.isArray(args.todos) ? args.todos : []);
1468
1500
  case "update_todo_list":
1469
- return await this.todoTool.updateTodoList(args.updates);
1501
+ return await this.todoTool.updateTodoList(Array.isArray(args.updates) ? args.updates : []);
1470
1502
  case "search":
1471
- return await this.search.search(args.query, {
1472
- searchType: args.search_type,
1473
- includePattern: args.include_pattern,
1474
- excludePattern: args.exclude_pattern,
1475
- caseSensitive: args.case_sensitive,
1476
- wholeWord: args.whole_word,
1477
- regex: args.regex,
1478
- maxResults: args.max_results,
1479
- fileTypes: args.file_types,
1480
- includeHidden: args.include_hidden,
1503
+ const searchTypeValue = args.search_type;
1504
+ const validSearchType = (searchTypeValue === 'text' || searchTypeValue === 'files' || searchTypeValue === 'both') ? searchTypeValue : undefined;
1505
+ return await this.search.search(getString('query'), {
1506
+ searchType: validSearchType,
1507
+ includePattern: typeof args.include_pattern === 'string' ? args.include_pattern : undefined,
1508
+ excludePattern: typeof args.exclude_pattern === 'string' ? args.exclude_pattern : undefined,
1509
+ caseSensitive: getBoolean('case_sensitive'),
1510
+ wholeWord: getBoolean('whole_word'),
1511
+ regex: getBoolean('regex'),
1512
+ maxResults: getNumber('max_results'),
1513
+ fileTypes: Array.isArray(args.file_types) ? args.file_types : undefined,
1514
+ includeHidden: getBoolean('include_hidden'),
1481
1515
  });
1482
1516
  default:
1483
1517
  // Check if this is an MCP tool