@defai.digital/ax-cli 3.5.2 → 3.6.0
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/.ax-cli/memory.json +8 -8
- package/README.md +27 -1
- package/dist/agent/chat-history-manager.d.ts +56 -0
- package/dist/agent/chat-history-manager.js +150 -0
- package/dist/agent/chat-history-manager.js.map +1 -0
- package/dist/agent/llm-agent.js +1 -1
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/tool-manager.d.ts +39 -0
- package/dist/agent/tool-manager.js +76 -0
- package/dist/agent/tool-manager.js.map +1 -0
- package/dist/analyzers/ast/index.d.ts +9 -0
- package/dist/analyzers/ast/index.js +10 -0
- package/dist/analyzers/ast/index.js.map +1 -0
- package/dist/analyzers/ast/node-helpers.d.ts +81 -0
- package/dist/analyzers/ast/node-helpers.js +128 -0
- package/dist/analyzers/ast/node-helpers.js.map +1 -0
- package/dist/analyzers/ast/traverser.d.ts +67 -0
- package/dist/analyzers/ast/traverser.js +156 -0
- package/dist/analyzers/ast/traverser.js.map +1 -0
- package/dist/analyzers/best-practices/index.d.ts +10 -0
- package/dist/analyzers/best-practices/index.js +11 -0
- package/dist/analyzers/best-practices/index.js.map +1 -0
- package/dist/commands/setup.js +13 -5
- package/dist/commands/setup.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/llm/client.d.ts +1 -0
- package/dist/llm/client.js +44 -0
- package/dist/llm/client.js.map +1 -1
- package/dist/mcp/ssrf-protection.d.ts +86 -0
- package/dist/mcp/ssrf-protection.js +313 -0
- package/dist/mcp/ssrf-protection.js.map +1 -0
- package/dist/mcp/validation.d.ts +4 -0
- package/dist/mcp/validation.js +122 -11
- package/dist/mcp/validation.js.map +1 -1
- package/dist/schemas/settings-schemas.d.ts +30 -0
- package/dist/schemas/settings-schemas.js +30 -0
- package/dist/schemas/settings-schemas.js.map +1 -1
- package/dist/tools/bash.d.ts +3 -2
- package/dist/tools/bash.js +31 -2
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/search.d.ts +1 -1
- package/dist/tools/search.js +121 -128
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/text-editor.js +52 -15
- package/dist/tools/text-editor.js.map +1 -1
- package/dist/ui/components/status-bar.js +2 -2
- package/dist/ui/components/status-bar.js.map +1 -1
- package/dist/ui/components/toast-notification.js +0 -1
- package/dist/ui/components/toast-notification.js.map +1 -1
- package/dist/utils/audit-logger.d.ts +247 -0
- package/dist/utils/audit-logger.js +374 -0
- package/dist/utils/audit-logger.js.map +1 -0
- package/dist/utils/command-security.d.ts +85 -0
- package/dist/utils/command-security.js +200 -0
- package/dist/utils/command-security.js.map +1 -0
- package/dist/utils/encryption.d.ts +78 -0
- package/dist/utils/encryption.js +216 -0
- package/dist/utils/encryption.js.map +1 -0
- package/dist/utils/error-sanitizer.d.ts +119 -0
- package/dist/utils/error-sanitizer.js +253 -0
- package/dist/utils/error-sanitizer.js.map +1 -0
- package/dist/utils/input-sanitizer.d.ts +210 -0
- package/dist/utils/input-sanitizer.js +362 -0
- package/dist/utils/input-sanitizer.js.map +1 -0
- package/dist/utils/json-utils.d.ts +13 -0
- package/dist/utils/json-utils.js +55 -1
- package/dist/utils/json-utils.js.map +1 -1
- package/dist/utils/parallel-analyzer.js +29 -12
- package/dist/utils/parallel-analyzer.js.map +1 -1
- package/dist/utils/path-security.d.ts +90 -0
- package/dist/utils/path-security.js +328 -0
- package/dist/utils/path-security.js.map +1 -0
- package/dist/utils/process-pool.d.ts +105 -0
- package/dist/utils/process-pool.js +326 -0
- package/dist/utils/process-pool.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +207 -0
- package/dist/utils/rate-limiter.js +303 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/settings-manager.js +83 -4
- package/dist/utils/settings-manager.js.map +1 -1
- package/eslint.config.js +3 -0
- package/package.json +1 -1
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-11e9e0ba-c39d-4fd2-aa77-bc818811c921.json +0 -69
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-2b260b98-b418-4c7c-9694-e2b94967e662.json +0 -24
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-7e03601e-e8ab-4cd7-9841-a74b66adf78f.json +0 -69
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-7f9c6562-771f-4fd0-adcf-9e7e9ac34ae8.json +0 -44
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-e1ebe666-4c3a-4367-ba5c-27fe512a9c70.json +0 -24
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-15743e7d-430c-4d76-b6fc-955d7a5c250c.json +0 -44
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-25cf7679-0b3f-4988-83d7-704548fbba91.json +0 -69
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-54aedbac-6db0-464e-8ebb-dbb3979e6dca.json +0 -24
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-7658aed8-fe5d-4222-903f-1a7c63717ea7.json +0 -24
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-c9c13497-40dc-4294-a327-6a5fc854eaa1.json +0 -69
- package/ax.config.json +0 -333
- package/dist/hooks/use-chat-reducer.d.ts +0 -61
- package/dist/hooks/use-chat-reducer.js +0 -118
- package/dist/hooks/use-chat-reducer.js.map +0 -1
- package/dist/hooks/use-enhanced-input.d.ts +0 -40
- package/dist/hooks/use-enhanced-input.js +0 -249
- package/dist/hooks/use-enhanced-input.js.map +0 -1
- package/dist/hooks/use-input-handler.d.ts +0 -46
- package/dist/hooks/use-input-handler.js +0 -1430
- package/dist/hooks/use-input-handler.js.map +0 -1
- package/dist/hooks/use-input-history.d.ts +0 -9
- package/dist/hooks/use-input-history.js +0 -112
- package/dist/hooks/use-input-history.js.map +0 -1
- package/dist/utils/paste-collapse.d.ts +0 -46
- package/dist/utils/paste-collapse.js +0 -77
- package/dist/utils/paste-collapse.js.map +0 -1
- package/packages/schemas/dist/index.d.ts +0 -14
- package/packages/schemas/dist/index.d.ts.map +0 -1
- package/packages/schemas/dist/index.js +0 -19
- package/packages/schemas/dist/index.js.map +0 -1
- package/packages/schemas/dist/public/core/brand-types.d.ts +0 -308
- package/packages/schemas/dist/public/core/brand-types.d.ts.map +0 -1
- package/packages/schemas/dist/public/core/brand-types.js +0 -243
- package/packages/schemas/dist/public/core/brand-types.js.map +0 -1
- package/packages/schemas/dist/public/core/enums.d.ts +0 -227
- package/packages/schemas/dist/public/core/enums.d.ts.map +0 -1
- package/packages/schemas/dist/public/core/enums.js +0 -222
- package/packages/schemas/dist/public/core/enums.js.map +0 -1
- package/packages/schemas/dist/public/core/id-types.d.ts +0 -286
- package/packages/schemas/dist/public/core/id-types.d.ts.map +0 -1
- package/packages/schemas/dist/public/core/id-types.js +0 -136
- package/packages/schemas/dist/public/core/id-types.js.map +0 -1
package/.ax-cli/memory.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"created_at": "2025-11-
|
|
4
|
-
"updated_at": "2025-11-
|
|
3
|
+
"created_at": "2025-11-22T11:59:21.278Z",
|
|
4
|
+
"updated_at": "2025-11-22T11:59:21.278Z",
|
|
5
5
|
"project_root": "/Users/akiralam/code/ax-cli",
|
|
6
|
-
"content_hash": "sha256:
|
|
6
|
+
"content_hash": "sha256:213c195995de78eced482260119b8ac69826a6a26f7bffe20ab0e3874b4f0f9f",
|
|
7
7
|
"source": {
|
|
8
8
|
"directories": [
|
|
9
9
|
{
|
|
@@ -43,12 +43,12 @@
|
|
|
43
43
|
]
|
|
44
44
|
},
|
|
45
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│ ├── 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├── 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│ ├── 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├── 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│ ├── health.ts\n│ ├── reconnection.ts\n│ ├── registry.ts\n│ ├── resources.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│ ├── 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│ ├── 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│ ├── automatosx-detector.ts\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│ └── ... (9 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[](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)\n[](https://github.com/defai-digital/ax-cli)\n[](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-\n...\n```\n\n### readme.md\n\n```\n# AX CLI - Enterprise-Class GLM AI CLI\n\n[](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)\n[](https://github.com/defai-digital/ax-cli)\n[](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-\n...\n```\n\n### package.json\n\n- **Name**: @defai.digital/ax-cli\n- **Version**: 3.4.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, 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[](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)\n[](https://github.com/defai-digital/ax-cli)\n[](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-cli)\n[](https://nodejs.org/)\n[](https://www.typescriptlang.org/)\n[](https://opensource.org/licenses/MIT)\n[](https://www.apple.com/macos/)\n[](https://www.microsoft.com/windows/)\n[](https://ubuntu.com/)\n\n\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 de\n\n[...truncated]",
|
|
47
|
-
"token_estimate":
|
|
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[](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-cli)\n[](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)\n[](https://github.com/defai-digital/ax\n...\n```\n\n### readme.md\n\n```\n# AX CLI - Enterprise-Class GLM AI CLI\n\n[](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-cli)\n[](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)\n[](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[](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-cli)\n[](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)\n[](https://github.com/defai-digital/ax-cli)\n[](https://www.typescriptlang.org/)\n[](https://nodejs.org/)\n[](https://opensource.org/licenses/MIT)\n[](https://www.apple.com/macos/)\n[](https://www.microsoft.com/windows/)\n[](https://ubuntu.com/)\n\n\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
48
|
"sections": {
|
|
49
|
-
"structure":
|
|
50
|
-
"readme":
|
|
51
|
-
"config":
|
|
49
|
+
"structure": 1906,
|
|
50
|
+
"readme": 1114,
|
|
51
|
+
"config": 838,
|
|
52
52
|
"patterns": 99
|
|
53
53
|
}
|
|
54
54
|
}
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# AX CLI - Enterprise-Class GLM AI CLI
|
|
2
2
|
|
|
3
3
|
[](https://npm-stat.com/charts.html?package=%40defai.digital%2Fax-cli)
|
|
4
|
-
[](https://github.com/defai-digital/ax-cli/actions/workflows/test.yml)
|
|
5
5
|
[](https://github.com/defai-digital/ax-cli)
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
7
|
[](https://nodejs.org/)
|
|
@@ -82,6 +82,13 @@ ax-cli
|
|
|
82
82
|
- Support for technical docs, code examples, news, and general queries
|
|
83
83
|
- Configurable search depth and freshness filters
|
|
84
84
|
- **🔄 Auto-Update**: Built-in update checker and installer
|
|
85
|
+
- **🔒 Enterprise Security** (NEW in v3.6.0): Optional hardening features for enterprise deployments
|
|
86
|
+
- **Automatic API Key Encryption**: AES-256-GCM encryption at rest (transparent migration)
|
|
87
|
+
- **Optional Command Whitelist**: Restrict bash commands to safe list (disabled by default)
|
|
88
|
+
- **Optional SSRF Protection**: Validate MCP transport URLs (disabled by default)
|
|
89
|
+
- **Optional Error Sanitization**: Remove sensitive data from error messages (disabled by default)
|
|
90
|
+
- **117 security tests** with 98%+ coverage
|
|
91
|
+
- **User-friendly defaults**: Full functionality for 95% of users, opt-in hardening for enterprise
|
|
85
92
|
- **📊 Advanced Code Analysis** (NEW in v2.4.0): Professional-grade static analysis tools
|
|
86
93
|
- **Dependency Analyzer**: Detect circular dependencies, calculate coupling metrics, identify orphan and hub files
|
|
87
94
|
- **Code Smell Detector**: Find 10+ anti-patterns (long methods, large classes, duplicates, dead code, etc.)
|
|
@@ -742,6 +749,25 @@ AX CLI implements enterprise-grade architecture with:
|
|
|
742
749
|
|
|
743
750
|
## 📋 Changelog
|
|
744
751
|
|
|
752
|
+
### v3.5.3 (2025-11-22)
|
|
753
|
+
|
|
754
|
+
**Bug Fixes - Test Quality & Reliability:**
|
|
755
|
+
- Fixed unhandled promise rejection in subagent tests that caused Node.js warnings
|
|
756
|
+
- Replaced meaningless test assertions (`expect(true).toBe(true)`) with real validation
|
|
757
|
+
- Properly skipped untestable tests with clear TODO documentation
|
|
758
|
+
- Fixed flaky performance test by adjusting timing threshold (0.9x instead of 0.7x)
|
|
759
|
+
|
|
760
|
+
**Test Suite Improvements:**
|
|
761
|
+
- Improved test isolation and error handling patterns
|
|
762
|
+
- Enhanced performance test reliability for CI/CD environments
|
|
763
|
+
- Better documentation of test limitations
|
|
764
|
+
- All 1,038 tests passing (1,036 passed + 2 properly skipped)
|
|
765
|
+
|
|
766
|
+
**Code Quality:**
|
|
767
|
+
- Comprehensive test quality analysis across all test files
|
|
768
|
+
- Eliminated false confidence from placeholder tests
|
|
769
|
+
- Maintained 98%+ test coverage with genuine validation
|
|
770
|
+
|
|
745
771
|
### v3.5.2 (2025-11-22)
|
|
746
772
|
|
|
747
773
|
**Bug Fixes - Resource Leak Prevention:**
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-history-manager.js","sourceRoot":"","sources":["../../src/agent/chat-history-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,OAAO,kBAAkB;IACrB,WAAW,GAAgB,EAAE,CAAC;IAC9B,gBAAgB,GAAwB,IAAI,GAAG,EAAE,CAAC;IAClD,iBAAiB,GAAyC,IAAI,GAAG,EAAE,CAAC;IAE5E;;OAEG;IACH,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW;aACpB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC;aACpG,GAAG,CAAC,KAAK,CAAC,EAAE;YACX,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAClD,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACtC,MAAM,OAAO,GAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnE,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClD,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBACtD,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;4BAC5B,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS;yBACvC;qBACF,CAAC,CAAC,CAAC;gBACN,CAAC;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC1D,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE;oBAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAgB;QACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7B,2CAA2C;QAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,UAAkB;QACjC,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,UAAkB,EAAE,IAA6B;QACjE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,UAAkB;QACtC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,8DAA8D;QAC9D,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,sCAAsC;YAC1F,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBAC3B,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,SAAiB;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,IAAI,aAAa,IAAI,SAAS,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,gDAAgD;QAChD,IAAI,YAAY,GAAG,SAAS,CAAC;QAC7B,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,+BAA+B;QAC/B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE/F,IAAI,UAAU,GAAG,WAAW,IAAI,YAAY,EAAE,CAAC;gBAC7C,UAAU,IAAI,WAAW,CAAC;gBAC1B,aAAa,EAAE,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC;QAE1D,8BAA8B;QAC9B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/agent/llm-agent.js
CHANGED
|
@@ -1797,7 +1797,7 @@ export class LLMAgent extends EventEmitter {
|
|
|
1797
1797
|
const subagentTasks = tasks.map((task, index) => ({
|
|
1798
1798
|
id: task.id || `task-${index}-${Date.now()}`,
|
|
1799
1799
|
description: task.description,
|
|
1800
|
-
role: roleMap[task.role.toLowerCase()]
|
|
1800
|
+
role: roleMap[task.role.toLowerCase()] ?? SubagentRole.GENERAL,
|
|
1801
1801
|
priority: 1,
|
|
1802
1802
|
context: {
|
|
1803
1803
|
files: [],
|