@defai.digital/ax-cli 3.6.0 → 3.6.2

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 (101) hide show
  1. package/README.md +447 -102
  2. package/config-defaults/settings.yaml +24 -0
  3. package/dist/analyzers/code-smells/detectors/data-clumps-detector.js +7 -9
  4. package/dist/analyzers/code-smells/detectors/data-clumps-detector.js.map +1 -1
  5. package/dist/analyzers/code-smells/detectors/dead-code-detector.js +1 -1
  6. package/dist/analyzers/code-smells/detectors/dead-code-detector.js.map +1 -1
  7. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +22 -10
  8. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +1 -1
  9. package/dist/analyzers/code-smells/detectors/feature-envy-detector.js +1 -1
  10. package/dist/analyzers/code-smells/detectors/feature-envy-detector.js.map +1 -1
  11. package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js +1 -1
  12. package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js.map +1 -1
  13. package/dist/analyzers/code-smells/detectors/large-class-detector.js +4 -1
  14. package/dist/analyzers/code-smells/detectors/large-class-detector.js.map +1 -1
  15. package/dist/analyzers/code-smells/detectors/long-method-detector.js +4 -1
  16. package/dist/analyzers/code-smells/detectors/long-method-detector.js.map +1 -1
  17. package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js +4 -1
  18. package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js.map +1 -1
  19. package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js +4 -5
  20. package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js.map +1 -1
  21. package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js +4 -1
  22. package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js.map +1 -1
  23. package/dist/constants.d.ts +13 -0
  24. package/dist/constants.js +28 -0
  25. package/dist/constants.js.map +1 -1
  26. package/dist/schemas/settings-schemas.d.ts +40 -0
  27. package/dist/schemas/settings-schemas.js +32 -0
  28. package/dist/schemas/settings-schemas.js.map +1 -1
  29. package/dist/tools/web-search/index.d.ts +0 -2
  30. package/dist/tools/web-search/index.js +0 -2
  31. package/dist/tools/web-search/index.js.map +1 -1
  32. package/dist/tools/web-search/router.d.ts +0 -2
  33. package/dist/tools/web-search/router.js +2 -37
  34. package/dist/tools/web-search/router.js.map +1 -1
  35. package/dist/tools/web-search/web-search-tool.js +2 -12
  36. package/dist/tools/web-search/web-search-tool.js.map +1 -1
  37. package/dist/ui/components/chat-history.d.ts +2 -0
  38. package/dist/ui/components/chat-history.js +32 -81
  39. package/dist/ui/components/chat-history.js.map +1 -1
  40. package/dist/ui/components/chat-input.d.ts +4 -1
  41. package/dist/ui/components/chat-input.js +133 -52
  42. package/dist/ui/components/chat-input.js.map +1 -1
  43. package/dist/ui/components/chat-interface.js +4 -4
  44. package/dist/ui/components/chat-interface.js.map +1 -1
  45. package/dist/ui/components/keyboard-hints.js +2 -0
  46. package/dist/ui/components/keyboard-hints.js.map +1 -1
  47. package/dist/ui/components/status-bar.d.ts +2 -0
  48. package/dist/ui/components/status-bar.js +31 -17
  49. package/dist/ui/components/status-bar.js.map +1 -1
  50. package/dist/ui/components/tool-group-display.d.ts +15 -0
  51. package/dist/ui/components/tool-group-display.js +91 -0
  52. package/dist/ui/components/tool-group-display.js.map +1 -0
  53. package/dist/ui/components/welcome-panel.js +4 -0
  54. package/dist/ui/components/welcome-panel.js.map +1 -1
  55. package/dist/ui/hooks/use-enhanced-input.d.ts +4 -0
  56. package/dist/ui/hooks/use-enhanced-input.js +156 -9
  57. package/dist/ui/hooks/use-enhanced-input.js.map +1 -1
  58. package/dist/ui/hooks/use-input-handler.d.ts +4 -0
  59. package/dist/ui/hooks/use-input-handler.js +28 -10
  60. package/dist/ui/hooks/use-input-handler.js.map +1 -1
  61. package/dist/ui/utils/change-summarizer.d.ts +20 -0
  62. package/dist/ui/utils/change-summarizer.js +193 -0
  63. package/dist/ui/utils/change-summarizer.js.map +1 -0
  64. package/dist/ui/utils/tool-grouper.d.ts +62 -0
  65. package/dist/ui/utils/tool-grouper.js +224 -0
  66. package/dist/ui/utils/tool-grouper.js.map +1 -0
  67. package/dist/utils/audit-logger.d.ts +28 -70
  68. package/dist/utils/audit-logger.js +30 -135
  69. package/dist/utils/audit-logger.js.map +1 -1
  70. package/dist/utils/config-loader.d.ts +4 -0
  71. package/dist/utils/config-loader.js.map +1 -1
  72. package/dist/utils/paste-utils.d.ts +99 -0
  73. package/dist/utils/paste-utils.js +265 -0
  74. package/dist/utils/paste-utils.js.map +1 -0
  75. package/dist/utils/rate-limiter.d.ts +15 -1
  76. package/dist/utils/rate-limiter.js +15 -1
  77. package/dist/utils/rate-limiter.js.map +1 -1
  78. package/package.json +4 -8
  79. package/packages/schemas/package.json +1 -1
  80. package/.ax-cli/CUSTOM.md +0 -269
  81. package/.ax-cli/checkpoints/2025-11-20/checkpoint-2dd84869-e62d-46c8-9885-7e45f37f36e2.json +0 -69
  82. package/.ax-cli/checkpoints/2025-11-20/checkpoint-484dc350-353f-4808-9ed1-ebb3cefdab37.json +0 -24
  83. package/.ax-cli/checkpoints/2025-11-20/checkpoint-74a18b87-6172-4215-962b-44bb9f46a662.json +0 -69
  84. package/.ax-cli/checkpoints/2025-11-20/checkpoint-870a5fb9-6e82-4ff2-8ec8-af4c251cc514.json +0 -44
  85. package/.ax-cli/checkpoints/2025-11-20/checkpoint-93946601-0e83-456c-ba47-def9713124dd.json +0 -24
  86. package/.ax-cli/checkpoints/metadata.json +0 -62
  87. package/.ax-cli/index.json +0 -44
  88. package/.ax-cli/memory.json +0 -55
  89. package/.ax-cli/settings.json +0 -1
  90. package/dist/agent/chat-history-manager.d.ts +0 -56
  91. package/dist/agent/chat-history-manager.js +0 -150
  92. package/dist/agent/chat-history-manager.js.map +0 -1
  93. package/dist/agent/tool-manager.d.ts +0 -39
  94. package/dist/agent/tool-manager.js +0 -76
  95. package/dist/agent/tool-manager.js.map +0 -1
  96. package/dist/tools/web-search/engines/brave.d.ts +0 -16
  97. package/dist/tools/web-search/engines/brave.js +0 -99
  98. package/dist/tools/web-search/engines/brave.js.map +0 -1
  99. package/dist/tools/web-search/engines/tavily.d.ts +0 -17
  100. package/dist/tools/web-search/engines/tavily.js +0 -73
  101. package/dist/tools/web-search/engines/tavily.js.map +0 -1
@@ -1,55 +0,0 @@
1
- {
2
- "version": 1,
3
- "created_at": "2025-11-22T11:59:21.278Z",
4
- "updated_at": "2025-11-22T11:59:21.278Z",
5
- "project_root": "/Users/akiralam/code/ax-cli",
6
- "content_hash": "sha256:213c195995de78eced482260119b8ac69826a6a26f7bffe20ab0e3874b4f0f9f",
7
- "source": {
8
- "directories": [
9
- {
10
- "path": "src",
11
- "max_depth": 3
12
- },
13
- {
14
- "path": "packages",
15
- "max_depth": 2
16
- }
17
- ],
18
- "files": [
19
- "README.md",
20
- "readme.md",
21
- "package.json",
22
- "tsconfig.json",
23
- ".ax-cli/CUSTOM.md"
24
- ],
25
- "ignore": [
26
- "node_modules",
27
- "dist",
28
- "build",
29
- ".git",
30
- ".next",
31
- ".nuxt",
32
- "coverage",
33
- ".cache",
34
- ".turbo",
35
- ".vercel",
36
- "__pycache__",
37
- ".pytest_cache",
38
- "target",
39
- "vendor",
40
- "*.log",
41
- "*.lock",
42
- ".DS_Store"
43
- ]
44
- },
45
- "context": {
46
- "formatted": "# Project Context\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│ ├── chat-history-manager.ts\n│ ├── context-manager.ts\n│ ├── dependency-resolver.ts\n│ ├── index.ts\n│ ├── llm-agent.ts\n│ ├── subagent-orchestrator.ts\n│ ├── subagent-types.ts\n│ ├── subagent.ts\n│ └── tool-manager.ts\n├── analyzers/\n│ ├── architecture/\n│ │ ├── anti-pattern-detectors/\n│ │ ├── pattern-detectors/\n│ │ ├── architecture-analyzer.ts\n│ │ ├── index.ts\n│ │ └── project-structure-scanner.ts\n│ ├── ast/\n│ │ ├── index.ts\n│ │ ├── node-helpers.ts\n│ │ ├── parser.ts\n│ │ ├── traverser.ts\n│ │ └── types.ts\n│ ├── best-practices/\n│ │ ├── rules/\n│ │ ├── base-rule.ts\n│ │ ├── best-practice-validator.ts\n│ │ ├── index.ts\n│ │ └── types.ts\n│ ├── cache/\n│ │ └── analysis-cache.ts\n│ ├── code-smells/\n│ │ ├── detectors/\n│ │ ├── base-smell-detector.ts\n│ │ ├── code-smell-analyzer.ts\n│ │ ├── index.ts\n│ │ └── types.ts\n│ ├── dependency/\n│ │ ├── circular-detector.ts\n│ │ ├── coupling-calculator.ts\n│ │ ├── dependency-analyzer.ts\n│ │ ├── dependency-graph.ts\n│ │ ├── index.ts\n│ │ └── types.ts\n│ ├── git/\n│ │ ├── churn-calculator.ts\n│ │ ├── git-analyzer.ts\n│ │ ├── hotspot-detector.ts\n│ │ ├── index.ts\n│ │ └── types.ts\n│ ├── metrics/\n│ │ ├── halstead-calculator.ts\n│ │ ├── index.ts\n│ │ ├── maintainability-calculator.ts\n│ │ ├── metrics-analyzer.ts\n│ │ └── types.ts\n│ ├── security/\n│ │ ├── detectors/\n│ │ ├── base-detector.ts\n│ │ ├── index.ts\n│ │ ├── security-analyzer.ts\n│ │ └── types.ts\n│ └── errors.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│ ├── doctor.ts\n│ ├── frontend.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├── llm/\n│ ├── client.ts\n│ ├── tools.ts\n│ └── types.ts\n├── mcp/\n│ ├── client.ts\n│ ├── config.ts\n│ ├── health.ts\n│ ├── reconnection.ts\n│ ├── registry.ts\n│ ├── resources.ts\n│ ├── ssrf-protection.ts\n│ ├── templates.ts\n│ ├── transports.ts\n│ └── validation.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├── sdk/\n│ ├── index.ts\n│ ├── README.md\n│ └── types.ts\n├── tools/\n│ ├── analysis-tools/\n│ │ ├── architecture-tool.ts\n│ │ └── validation-tool.ts\n│ ├── web-search/\n│ │ ├── engines/\n│ │ ├── cache.ts\n│ │ ├── index.ts\n│ │ ├── router.ts\n│ │ ├── types.ts\n│ │ └── web-search-tool.ts\n│ ├── analysis-tools.ts\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│ ├── analysis.ts\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│ ├── hooks/\n│ │ ├── use-chat-reducer.ts\n│ │ ├── use-enhanced-input.ts\n│ │ ├── use-input-handler.ts\n│ │ └── use-input-history.ts\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│ ├── analysis-logger.ts\n│ ├── audit-logger.ts\n│ ├── automatosx-detector.ts\n│ ├── background-task-manager.ts\n│ ├── cache.ts\n│ ├── command-security.ts\n│ ├── config-loader.ts\n│ ├── confirmation-service.ts\n│ ├── console-messenger.ts\n│ ├── custom-instructions.ts\n│ ├── encryption.ts\n│ ├── error-handler.ts\n│ ├── error-sanitizer.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│ ├── input-sanitizer.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-security.ts\n│ ├── path-utils.ts\n│ └── ... (17 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 GLM AI CLI\n\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[![Tests](https://img.shields.io/badge/tests-1036%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%2B%25-brightgreen?style=flat-square)](https://github.com/defai-digital/ax\n...\n```\n\n### readme.md\n\n```\n# AX CLI - Enterprise-Class GLM AI CLI\n\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[![Tests](https://img.shields.io/badge/tests-1036%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%2B%25-brightgreen?style=flat-square)](https://github.com/defai-digital/ax\n...\n```\n\n### package.json\n\n- **Name**: @defai.digital/ax-cli\n- **Version**: 3.5.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, chalk, clipboardy, commander, dotenv, enquirer, fs-extra (+14 more)\n- **Dev Dependencies**: @types/fs-extra, @types/glob, @types/js-yaml, @types/marked-terminal, @types/node, @types/react, @typescript-eslint/eslint-plugin, @typescript-eslint/parser (+6 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 GLM AI CLI\n\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[![Tests](https://img.shields.io/badge/tests-1036%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%2B%25-brightgreen?style=flat-square)](https://github.com/defai-digital/ax-cli)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.9%2B-blue?style=flat-square&logo=typescript)](https://www.typescriptlang.org/)\n[![Node.js Version](https://img.shields.io/badge/node-%3E%3D24.0.0-blue?style=flat-square)](https://nodejs.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 Screenshot](.github/assets/screenshot1.png)\n\n<p align=\"center\">\n <strong>GLM-Optimized CLI • Enterprise Architecture • 98%+ Test Coverage • TypeScript & Zod</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- **🤖 GLM-Focused AI CLI**: Optimized for Z.AI's GLM models (glm-4.6, glm-4-air, glm-4-airx)\n - **Note**: For xAI Grok models, use [grok-cli](https://github.com/superagent-ai/grok-cli)\n - **Note**: For Anthropic Claude models, use [claude-code](https://claude.ai/code)\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- **🔌 Enhanced MCP Integration**: Model Context Protocol with production-ready templates\n - **One-command setup**: `ax-cli mcp add figma --template`\n - **12+ pre-configured templates**: Figma, GitHub, Vercel, Puppeteer, Storybook, Sentry, and more\n - **Tool discovery**: `ax-cli mcp tools <server>` to preview capabilities\n - **Template browser**: `ax-cli mcp browse` for quick navigation\n - **Front-end focused**: Design-to-code workflows with Figma integration\n - **[Complete Guide](docs/mcp-frontend-guide.md)**: Front-end developer workflows\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- **🏥 Health Check** (NEW): Comprehensive diagnostics with `ax-cli doctor`\n - Verify configuration, API connectivity, and d\n\n[...truncated]",
47
- "token_estimate": 3963,
48
- "sections": {
49
- "structure": 1906,
50
- "readme": 1114,
51
- "config": 838,
52
- "patterns": 99
53
- }
54
- }
55
- }
@@ -1 +0,0 @@
1
- {}
@@ -1,56 +0,0 @@
1
- /**
2
- * Chat History Manager
3
- *
4
- * Manages chat history, tool call tracking, and related operations.
5
- * Extracted from LLMAgent to reduce God Object anti-pattern.
6
- */
7
- import type { ChatEntry } from "./llm-agent.js";
8
- export declare class ChatHistoryManager {
9
- private chatHistory;
10
- private toolCallIndexMap;
11
- private toolCallArgsCache;
12
- /**
13
- * Get all chat history
14
- */
15
- getHistory(): ChatEntry[];
16
- /**
17
- * Get chat history for LLM (filtered format)
18
- */
19
- getLLMMessages(): any[];
20
- /**
21
- * Add entry to chat history
22
- */
23
- addEntry(entry: ChatEntry): void;
24
- /**
25
- * Get recent history (last N entries)
26
- */
27
- getRecentHistory(count: number): ChatEntry[];
28
- /**
29
- * Clear chat history
30
- */
31
- clearHistory(): void;
32
- /**
33
- * Get tool call index by ID
34
- */
35
- getToolCallIndex(toolCallId: string): number | undefined;
36
- /**
37
- * Cache tool call arguments
38
- */
39
- cacheToolCallArgs(toolCallId: string, args: Record<string, unknown>): void;
40
- /**
41
- * Get cached tool call arguments
42
- */
43
- getCachedToolCallArgs(toolCallId: string): Record<string, unknown> | undefined;
44
- /**
45
- * Get history size
46
- */
47
- getHistorySize(): number;
48
- /**
49
- * Get token count estimate for history
50
- */
51
- getTokenCount(): number;
52
- /**
53
- * Trim history to stay within token limit
54
- */
55
- trimToTokenLimit(maxTokens: number): void;
56
- }
@@ -1,150 +0,0 @@
1
- /**
2
- * Chat History Manager
3
- *
4
- * Manages chat history, tool call tracking, and related operations.
5
- * Extracted from LLMAgent to reduce God Object anti-pattern.
6
- */
7
- export class ChatHistoryManager {
8
- chatHistory = [];
9
- toolCallIndexMap = new Map();
10
- toolCallArgsCache = new Map();
11
- /**
12
- * Get all chat history
13
- */
14
- getHistory() {
15
- return [...this.chatHistory];
16
- }
17
- /**
18
- * Get chat history for LLM (filtered format)
19
- */
20
- getLLMMessages() {
21
- return this.chatHistory
22
- .filter(entry => entry.type === 'user' || entry.type === 'assistant' || entry.type === 'tool_result')
23
- .map(entry => {
24
- if (entry.type === 'user') {
25
- return { role: 'user', content: entry.content };
26
- }
27
- else if (entry.type === 'assistant') {
28
- const message = { role: 'assistant', content: entry.content };
29
- if (entry.toolCalls && entry.toolCalls.length > 0) {
30
- message.tool_calls = entry.toolCalls.map((toolCall) => ({
31
- id: toolCall.id,
32
- type: 'function',
33
- function: {
34
- name: toolCall.function.name,
35
- arguments: toolCall.function.arguments,
36
- },
37
- }));
38
- }
39
- return message;
40
- }
41
- else if (entry.type === 'tool_result' && entry.toolCall) {
42
- return {
43
- role: 'tool',
44
- tool_call_id: entry.toolCall.id,
45
- content: entry.content,
46
- };
47
- }
48
- return null;
49
- })
50
- .filter(Boolean);
51
- }
52
- /**
53
- * Add entry to chat history
54
- */
55
- addEntry(entry) {
56
- this.chatHistory.push(entry);
57
- // Track tool call indices for quick lookup
58
- if (entry.type === 'tool_call' && entry.toolCall) {
59
- this.toolCallIndexMap.set(entry.toolCall.id, this.chatHistory.length - 1);
60
- }
61
- }
62
- /**
63
- * Get recent history (last N entries)
64
- */
65
- getRecentHistory(count) {
66
- return this.chatHistory.slice(-count);
67
- }
68
- /**
69
- * Clear chat history
70
- */
71
- clearHistory() {
72
- this.chatHistory = [];
73
- this.toolCallIndexMap.clear();
74
- this.toolCallArgsCache.clear();
75
- }
76
- /**
77
- * Get tool call index by ID
78
- */
79
- getToolCallIndex(toolCallId) {
80
- return this.toolCallIndexMap.get(toolCallId);
81
- }
82
- /**
83
- * Cache tool call arguments
84
- */
85
- cacheToolCallArgs(toolCallId, args) {
86
- this.toolCallArgsCache.set(toolCallId, args);
87
- }
88
- /**
89
- * Get cached tool call arguments
90
- */
91
- getCachedToolCallArgs(toolCallId) {
92
- return this.toolCallArgsCache.get(toolCallId);
93
- }
94
- /**
95
- * Get history size
96
- */
97
- getHistorySize() {
98
- return this.chatHistory.length;
99
- }
100
- /**
101
- * Get token count estimate for history
102
- */
103
- getTokenCount() {
104
- // Simple estimation - could be improved with actual tokenizer
105
- let totalTokens = 0;
106
- for (const entry of this.chatHistory) {
107
- totalTokens += Math.ceil(entry.content.length / 4); // Rough estimate: 1 token per 4 chars
108
- if (entry.reasoningContent) {
109
- totalTokens += Math.ceil(entry.reasoningContent.length / 4);
110
- }
111
- }
112
- return totalTokens;
113
- }
114
- /**
115
- * Trim history to stay within token limit
116
- */
117
- trimToTokenLimit(maxTokens) {
118
- const currentTokens = this.getTokenCount();
119
- if (currentTokens <= maxTokens) {
120
- return;
121
- }
122
- // Keep recent entries (simple approach for now)
123
- let tokensToKeep = maxTokens;
124
- let entriesToKeep = 0;
125
- let tokenCount = 0;
126
- // Count from the end backwards
127
- for (let i = this.chatHistory.length - 1; i >= 0; i--) {
128
- const entry = this.chatHistory[i];
129
- const entryTokens = Math.ceil(entry.content.length / 4) +
130
- (entry.reasoningContent ? Math.ceil(entry.reasoningContent.length / 4) : 0);
131
- if (tokenCount + entryTokens <= tokensToKeep) {
132
- tokenCount += entryTokens;
133
- entriesToKeep++;
134
- }
135
- else {
136
- break;
137
- }
138
- }
139
- // Keep only recent entries
140
- this.chatHistory = this.chatHistory.slice(-entriesToKeep);
141
- // Rebuild tool call index map
142
- this.toolCallIndexMap.clear();
143
- this.chatHistory.forEach((entry, index) => {
144
- if (entry.type === 'tool_call' && entry.toolCall) {
145
- this.toolCallIndexMap.set(entry.toolCall.id, index);
146
- }
147
- });
148
- }
149
- }
150
- //# sourceMappingURL=chat-history-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chat-history-manager.js","sourceRoot":"","sources":["../../src/agent/chat-history-manager.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- /**
2
- * Tool Manager
3
- *
4
- * Manages all tool instances and their lifecycle.
5
- * Extracted from LLMAgent to reduce God Object anti-pattern.
6
- */
7
- import { LLMTool } from "../llm/client.js";
8
- export declare class ToolManager {
9
- private tools;
10
- private initialized;
11
- /**
12
- * Initialize tools
13
- */
14
- private initialize;
15
- /**
16
- * Get all available tools as LLMTool array
17
- */
18
- getAllTools(): Promise<LLMTool[]>;
19
- /**
20
- * Get tool by name
21
- */
22
- getToolByName(name: string): Promise<LLMTool | undefined>;
23
- /**
24
- * Load tools safely (for compatibility with existing code)
25
- */
26
- loadToolsSafely(): Promise<LLMTool[]>;
27
- /**
28
- * Get tool count
29
- */
30
- getToolCount(): Promise<number>;
31
- /**
32
- * Check if tools are available
33
- */
34
- hasTools(): Promise<boolean>;
35
- /**
36
- * Dispose all tools
37
- */
38
- dispose(): void;
39
- }
@@ -1,76 +0,0 @@
1
- /**
2
- * Tool Manager
3
- *
4
- * Manages all tool instances and their lifecycle.
5
- * Extracted from LLMAgent to reduce God Object anti-pattern.
6
- */
7
- import { getAllGrokTools, } from "../llm/tools.js";
8
- export class ToolManager {
9
- tools = [];
10
- initialized = false;
11
- /**
12
- * Initialize tools
13
- */
14
- async initialize() {
15
- if (this.initialized) {
16
- return;
17
- }
18
- try {
19
- this.tools = await getAllGrokTools();
20
- this.initialized = true;
21
- }
22
- catch (error) {
23
- console.warn('⚠️ Error initializing tools:', error);
24
- this.tools = [];
25
- this.initialized = true;
26
- }
27
- }
28
- /**
29
- * Get all available tools as LLMTool array
30
- */
31
- async getAllTools() {
32
- await this.initialize();
33
- return [...this.tools];
34
- }
35
- /**
36
- * Get tool by name
37
- */
38
- async getToolByName(name) {
39
- const tools = await this.getAllTools();
40
- return tools.find(tool => tool.function.name === name);
41
- }
42
- /**
43
- * Load tools safely (for compatibility with existing code)
44
- */
45
- async loadToolsSafely() {
46
- try {
47
- return await this.getAllTools();
48
- }
49
- catch (error) {
50
- console.warn('⚠️ Error loading tools:', error);
51
- return [];
52
- }
53
- }
54
- /**
55
- * Get tool count
56
- */
57
- async getToolCount() {
58
- const tools = await this.getAllTools();
59
- return tools.length;
60
- }
61
- /**
62
- * Check if tools are available
63
- */
64
- async hasTools() {
65
- const tools = await this.getAllTools();
66
- return tools.length > 0;
67
- }
68
- /**
69
- * Dispose all tools
70
- */
71
- dispose() {
72
- this.tools = [];
73
- this.initialized = false;
74
- }
75
- }
76
- //# sourceMappingURL=tool-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-manager.js","sourceRoot":"","sources":["../../src/agent/tool-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,OAAO,WAAW;IACd,KAAK,GAAc,EAAE,CAAC;IACtB,WAAW,GAAG,KAAK,CAAC;IAE5B;;OAEG;IACK,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,IAAY;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC/C,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;CACF"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Brave Search Engine
3
- * Privacy-focused independent search
4
- * https://brave.com/search/api/
5
- */
6
- import type { SearchEngine, WebSearchResult, SearchOptions } from "../types.js";
7
- export declare class BraveSearch implements SearchEngine {
8
- readonly name = "brave";
9
- private apiKey;
10
- private baseUrl;
11
- private timeout;
12
- constructor();
13
- isAvailable(): boolean;
14
- search(query: string, options?: SearchOptions): Promise<WebSearchResult[]>;
15
- private formatResults;
16
- }
@@ -1,99 +0,0 @@
1
- /**
2
- * Brave Search Engine
3
- * Privacy-focused independent search
4
- * https://brave.com/search/api/
5
- */
6
- import axios from "axios";
7
- export class BraveSearch {
8
- name = "brave";
9
- apiKey;
10
- baseUrl = "https://api.search.brave.com/res/v1/web/search";
11
- timeout = 10000; // 10 second timeout
12
- constructor() {
13
- this.apiKey = process.env.BRAVE_API_KEY;
14
- }
15
- isAvailable() {
16
- return !!this.apiKey;
17
- }
18
- async search(query, options) {
19
- if (!this.isAvailable()) {
20
- throw new Error("Brave API key not configured");
21
- }
22
- try {
23
- const params = new URLSearchParams({
24
- q: query,
25
- count: Math.min(options?.maxResults || 10, 20).toString(),
26
- offset: "0",
27
- text_decorations: "false",
28
- spellcheck: "true",
29
- });
30
- // Add freshness filter if specified
31
- if (options?.freshness) {
32
- const freshnessMap = {
33
- day: "pd",
34
- week: "pw",
35
- month: "pm",
36
- year: "py",
37
- };
38
- params.append("freshness", freshnessMap[options.freshness]);
39
- }
40
- const response = await axios.get(`${this.baseUrl}?${params.toString()}`, {
41
- timeout: options?.timeout || this.timeout,
42
- headers: {
43
- Accept: "application/json",
44
- "Accept-Encoding": "gzip",
45
- "X-Subscription-Token": this.apiKey,
46
- },
47
- });
48
- return this.formatResults(response.data);
49
- }
50
- catch (error) {
51
- if (axios.isAxiosError(error)) {
52
- if (error.code === "ECONNABORTED") {
53
- throw new Error("Brave search timeout");
54
- }
55
- if (error.response?.status === 401) {
56
- throw new Error("Invalid Brave API key");
57
- }
58
- if (error.response?.status === 429) {
59
- throw new Error("Brave rate limit exceeded");
60
- }
61
- throw new Error(`Brave API error: ${error.response?.data?.message || error.message}`);
62
- }
63
- throw error;
64
- }
65
- }
66
- formatResults(response) {
67
- const results = [];
68
- // Add web results
69
- if (response.web?.results) {
70
- results.push(...response.web.results.map((result, index) => ({
71
- title: result.title,
72
- url: result.url,
73
- snippet: result.description,
74
- source: this.name,
75
- relevanceScore: 100 - index * 5, // Simple scoring based on position
76
- publishedDate: result.age || result.page_age,
77
- metadata: {
78
- language: result.language,
79
- },
80
- })));
81
- }
82
- // Add news results if available
83
- if (response.news?.results) {
84
- results.push(...response.news.results.map((result, index) => ({
85
- title: result.title,
86
- url: result.url,
87
- snippet: result.description,
88
- source: `${this.name}-news`,
89
- relevanceScore: 95 - index * 5,
90
- publishedDate: result.age,
91
- metadata: {
92
- type: "news",
93
- },
94
- })));
95
- }
96
- return results;
97
- }
98
- }
99
- //# sourceMappingURL=brave.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"brave.js","sourceRoot":"","sources":["../../../../src/tools/web-search/engines/brave.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Tavily AI Search Engine
3
- * AI-optimized search designed for LLMs
4
- * https://tavily.com/
5
- */
6
- import type { SearchEngine, WebSearchResult, SearchOptions } from "../types.js";
7
- export declare class TavilySearch implements SearchEngine {
8
- readonly name = "tavily";
9
- private apiKey;
10
- private baseUrl;
11
- private timeout;
12
- constructor();
13
- isAvailable(): boolean;
14
- search(query: string, options?: SearchOptions): Promise<WebSearchResult[]>;
15
- private formatResults;
16
- getAnswer(results: WebSearchResult[]): string | undefined;
17
- }
@@ -1,73 +0,0 @@
1
- /**
2
- * Tavily AI Search Engine
3
- * AI-optimized search designed for LLMs
4
- * https://tavily.com/
5
- */
6
- import axios from "axios";
7
- export class TavilySearch {
8
- name = "tavily";
9
- apiKey;
10
- baseUrl = "https://api.tavily.com/search";
11
- timeout = 10000; // 10 second timeout
12
- constructor() {
13
- this.apiKey = process.env.TAVILY_API_KEY;
14
- }
15
- isAvailable() {
16
- return !!this.apiKey;
17
- }
18
- async search(query, options) {
19
- if (!this.isAvailable()) {
20
- throw new Error("Tavily API key not configured");
21
- }
22
- try {
23
- const response = await axios.post(this.baseUrl, {
24
- api_key: this.apiKey,
25
- query: query,
26
- search_depth: options?.searchDepth || "basic",
27
- max_results: Math.min(options?.maxResults || 5, 10),
28
- include_answer: options?.includeAnswer ?? true,
29
- include_domains: options?.includeDomains || [],
30
- exclude_domains: options?.excludeDomains || [],
31
- }, {
32
- timeout: options?.timeout || this.timeout,
33
- headers: {
34
- "Content-Type": "application/json",
35
- },
36
- });
37
- return this.formatResults(response.data);
38
- }
39
- catch (error) {
40
- if (axios.isAxiosError(error)) {
41
- if (error.code === "ECONNABORTED") {
42
- throw new Error("Tavily search timeout");
43
- }
44
- if (error.response?.status === 401) {
45
- throw new Error("Invalid Tavily API key");
46
- }
47
- if (error.response?.status === 429) {
48
- throw new Error("Tavily rate limit exceeded");
49
- }
50
- throw new Error(`Tavily API error: ${error.response?.data?.message || error.message}`);
51
- }
52
- throw error;
53
- }
54
- }
55
- formatResults(response) {
56
- return response.results.map((result) => ({
57
- title: result.title,
58
- url: result.url,
59
- snippet: result.content,
60
- source: this.name,
61
- relevanceScore: result.score * 100, // Convert 0-1 to 0-100
62
- publishedDate: result.published_date,
63
- metadata: {
64
- answer: response.answer,
65
- responseTime: response.response_time,
66
- },
67
- }));
68
- }
69
- getAnswer(results) {
70
- return results[0]?.metadata?.answer;
71
- }
72
- }
73
- //# sourceMappingURL=tavily.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tavily.js","sourceRoot":"","sources":["../../../../src/tools/web-search/engines/tavily.ts"],"names":[],"mappings":"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"}