@defai.digital/ax-cli 3.3.0 → 3.4.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 +6 -6
- package/README.md +110 -0
- package/config/settings.yaml +6 -0
- package/dist/agent/dependency-resolver.js +2 -1
- package/dist/agent/dependency-resolver.js.map +1 -1
- package/dist/agent/llm-agent.d.ts +3 -0
- package/dist/agent/llm-agent.js +57 -8
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.d.ts +29 -0
- package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js +103 -0
- package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js.map +1 -0
- package/dist/analyzers/architecture/architecture-analyzer.d.ts +58 -0
- package/dist/analyzers/architecture/architecture-analyzer.js +276 -0
- package/dist/analyzers/architecture/architecture-analyzer.js.map +1 -0
- package/dist/analyzers/architecture/index.d.ts +12 -0
- package/dist/analyzers/architecture/index.js +14 -0
- package/dist/analyzers/architecture/index.js.map +1 -0
- package/dist/analyzers/architecture/pattern-detectors/base-detector.d.ts +27 -0
- package/dist/analyzers/architecture/pattern-detectors/base-detector.js +31 -0
- package/dist/analyzers/architecture/pattern-detectors/base-detector.js.map +1 -0
- package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.d.ts +11 -0
- package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js +57 -0
- package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js.map +1 -0
- package/dist/analyzers/architecture/pattern-detectors/mvc-detector.d.ts +11 -0
- package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js +43 -0
- package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js.map +1 -0
- package/dist/analyzers/architecture/pattern-detectors/repository-detector.d.ts +11 -0
- package/dist/analyzers/architecture/pattern-detectors/repository-detector.js +49 -0
- package/dist/analyzers/architecture/pattern-detectors/repository-detector.js.map +1 -0
- package/dist/analyzers/architecture/project-structure-scanner.d.ts +54 -0
- package/dist/analyzers/architecture/project-structure-scanner.js +200 -0
- package/dist/analyzers/architecture/project-structure-scanner.js.map +1 -0
- package/dist/analyzers/best-practices/base-rule.d.ts +45 -0
- package/dist/analyzers/best-practices/base-rule.js +45 -0
- package/dist/analyzers/best-practices/base-rule.js.map +1 -0
- package/dist/analyzers/best-practices/best-practice-validator.d.ts +35 -0
- package/dist/analyzers/best-practices/best-practice-validator.js +181 -0
- package/dist/analyzers/best-practices/best-practice-validator.js.map +1 -0
- package/dist/analyzers/best-practices/rules/index.d.ts +7 -0
- package/dist/analyzers/best-practices/rules/index.js +56 -0
- package/dist/analyzers/best-practices/rules/index.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/consistent-naming.d.ts +17 -0
- package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js +41 -0
- package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/function-complexity.d.ts +27 -0
- package/dist/analyzers/best-practices/rules/typescript/function-complexity.js +76 -0
- package/dist/analyzers/best-practices/rules/typescript/function-complexity.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/index.d.ts +15 -0
- package/dist/analyzers/best-practices/rules/typescript/index.js +16 -0
- package/dist/analyzers/best-practices/rules/typescript/index.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/max-file-length.d.ts +18 -0
- package/dist/analyzers/best-practices/rules/typescript/max-file-length.js +25 -0
- package/dist/analyzers/best-practices/rules/typescript/max-file-length.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/no-any-type.d.ts +17 -0
- package/dist/analyzers/best-practices/rules/typescript/no-any-type.js +27 -0
- package/dist/analyzers/best-practices/rules/typescript/no-any-type.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.d.ts +18 -0
- package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js +39 -0
- package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.d.ts +17 -0
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +32 -0
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.d.ts +17 -0
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +36 -0
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.d.ts +17 -0
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +33 -0
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.d.ts +17 -0
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +34 -0
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.d.ts +17 -0
- package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js +27 -0
- package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js.map +1 -0
- package/dist/analyzers/best-practices/types.d.ts +86 -0
- package/dist/analyzers/best-practices/types.js +7 -0
- package/dist/analyzers/best-practices/types.js.map +1 -0
- package/dist/analyzers/cache/analysis-cache.d.ts +41 -0
- package/dist/analyzers/cache/analysis-cache.js +84 -0
- package/dist/analyzers/cache/analysis-cache.js.map +1 -0
- package/dist/analyzers/errors.d.ts +51 -0
- package/dist/analyzers/errors.js +79 -0
- package/dist/analyzers/errors.js.map +1 -0
- package/dist/commands/doctor.js +2 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/mcp.js +243 -0
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/setup.js +85 -28
- package/dist/commands/setup.js.map +1 -1
- package/dist/constants.d.ts +3 -0
- package/dist/constants.js +3 -0
- package/dist/constants.js.map +1 -1
- package/dist/hooks/use-input-handler.js +2 -1
- package/dist/hooks/use-input-handler.js.map +1 -1
- package/dist/llm/tools.js +86 -0
- package/dist/llm/tools.js.map +1 -1
- package/dist/mcp/client.d.ts +5 -0
- package/dist/mcp/client.js +55 -0
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/health.d.ts +11 -2
- package/dist/mcp/health.js +35 -12
- package/dist/mcp/health.js.map +1 -1
- package/dist/mcp/reconnection.d.ts +93 -0
- package/dist/mcp/reconnection.js +216 -0
- package/dist/mcp/reconnection.js.map +1 -0
- package/dist/mcp/registry.d.ts +71 -0
- package/dist/mcp/registry.js +257 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/mcp/resources.d.ts +53 -0
- package/dist/mcp/resources.js +135 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/validation.d.ts +25 -0
- package/dist/mcp/validation.js +209 -0
- package/dist/mcp/validation.js.map +1 -0
- package/dist/memory/context-generator.js +1 -2
- package/dist/memory/context-generator.js.map +1 -1
- package/dist/planner/types.d.ts +2 -2
- package/dist/schemas/index.d.ts +4 -4
- package/dist/schemas/tool-schemas.d.ts +2 -2
- package/dist/schemas/yaml-schemas.d.ts +15 -0
- package/dist/schemas/yaml-schemas.js +3 -0
- package/dist/schemas/yaml-schemas.js.map +1 -1
- package/dist/sdk/index.d.ts +138 -0
- package/dist/sdk/index.js +173 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/types.d.ts +53 -0
- package/dist/sdk/types.js +8 -0
- package/dist/sdk/types.js.map +1 -0
- package/dist/tools/analysis-tools/architecture-tool.d.ts +46 -0
- package/dist/tools/analysis-tools/architecture-tool.js +124 -0
- package/dist/tools/analysis-tools/architecture-tool.js.map +1 -0
- package/dist/tools/analysis-tools/validation-tool.d.ts +51 -0
- package/dist/tools/analysis-tools/validation-tool.js +121 -0
- package/dist/tools/analysis-tools/validation-tool.js.map +1 -0
- package/dist/tools/web-search/cache.d.ts +62 -0
- package/dist/tools/web-search/cache.js +105 -0
- package/dist/tools/web-search/cache.js.map +1 -0
- package/dist/tools/web-search/engines/brave.d.ts +16 -0
- package/dist/tools/web-search/engines/brave.js +99 -0
- package/dist/tools/web-search/engines/brave.js.map +1 -0
- package/dist/tools/web-search/engines/crates.d.ts +19 -0
- package/dist/tools/web-search/engines/crates.js +87 -0
- package/dist/tools/web-search/engines/crates.js.map +1 -0
- package/dist/tools/web-search/engines/npm.d.ts +18 -0
- package/dist/tools/web-search/engines/npm.js +86 -0
- package/dist/tools/web-search/engines/npm.js.map +1 -0
- package/dist/tools/web-search/engines/pypi.d.ts +18 -0
- package/dist/tools/web-search/engines/pypi.js +75 -0
- package/dist/tools/web-search/engines/pypi.js.map +1 -0
- package/dist/tools/web-search/engines/tavily.d.ts +17 -0
- package/dist/tools/web-search/engines/tavily.js +73 -0
- package/dist/tools/web-search/engines/tavily.js.map +1 -0
- package/dist/tools/web-search/index.d.ts +13 -0
- package/dist/tools/web-search/index.js +13 -0
- package/dist/tools/web-search/index.js.map +1 -0
- package/dist/tools/web-search/router.d.ts +36 -0
- package/dist/tools/web-search/router.js +280 -0
- package/dist/tools/web-search/router.js.map +1 -0
- package/dist/tools/web-search/types.d.ts +45 -0
- package/dist/tools/web-search/types.js +6 -0
- package/dist/tools/web-search/types.js.map +1 -0
- package/dist/tools/web-search/web-search-tool.d.ts +51 -0
- package/dist/tools/web-search/web-search-tool.js +256 -0
- package/dist/tools/web-search/web-search-tool.js.map +1 -0
- package/dist/types/analysis.d.ts +177 -0
- package/dist/types/analysis.js +8 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/ui/components/chat-interface.js +11 -1
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/components/keyboard-hints.js +2 -2
- package/dist/ui/components/keyboard-hints.js.map +1 -1
- package/dist/ui/components/status-bar.d.ts +1 -0
- package/dist/ui/components/status-bar.js +37 -39
- package/dist/ui/components/status-bar.js.map +1 -1
- package/dist/ui/components/toast-notification.js +2 -2
- package/dist/ui/components/toast-notification.js.map +1 -1
- package/dist/ui/components/welcome-panel.d.ts +1 -0
- package/dist/ui/components/welcome-panel.js +94 -11
- package/dist/ui/components/welcome-panel.js.map +1 -1
- package/dist/utils/analysis-logger.d.ts +47 -0
- package/dist/utils/analysis-logger.js +70 -0
- package/dist/utils/analysis-logger.js.map +1 -0
- package/dist/utils/automatosx-detector.d.ts +19 -0
- package/dist/utils/automatosx-detector.js +52 -0
- package/dist/utils/automatosx-detector.js.map +1 -0
- package/dist/utils/config-loader.d.ts +3 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/confirmation-service.js +1 -1
- package/dist/utils/confirmation-service.js.map +1 -1
- package/dist/utils/init-previewer.js +26 -4
- package/dist/utils/init-previewer.js.map +1 -1
- package/package.json +19 -3
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AX CLI SDK - Programmatic API for AX CLI
|
|
3
|
+
*
|
|
4
|
+
* This SDK allows you to use AX CLI as a library instead of spawning CLI processes.
|
|
5
|
+
* Perfect for integrations, VSCode extensions, and programmatic AI agent usage.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createAgent, getSettingsManager } from '@defai.digital/ax-cli/sdk';
|
|
10
|
+
*
|
|
11
|
+
* // Initialize settings
|
|
12
|
+
* const settings = getSettingsManager();
|
|
13
|
+
* await settings.loadUserSettings();
|
|
14
|
+
*
|
|
15
|
+
* // Create agent
|
|
16
|
+
* const agent = await createAgent({
|
|
17
|
+
* model: 'glm-4.6',
|
|
18
|
+
* maxToolRounds: 50
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // Listen to streaming responses
|
|
22
|
+
* agent.on('stream', (chunk) => {
|
|
23
|
+
* console.log(chunk.content);
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* // Process messages
|
|
27
|
+
* const result = await agent.processUserMessage('List all TypeScript files');
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @packageDocumentation
|
|
31
|
+
*/
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Core Agent Classes
|
|
34
|
+
// ============================================================================
|
|
35
|
+
export { LLMAgent } from '../agent/llm-agent.js';
|
|
36
|
+
export { Subagent } from '../agent/subagent.js';
|
|
37
|
+
export { SubagentOrchestrator } from '../agent/subagent-orchestrator.js';
|
|
38
|
+
export { ContextManager } from '../agent/context-manager.js';
|
|
39
|
+
// Internal imports for SDK functions
|
|
40
|
+
import { LLMAgent } from '../agent/llm-agent.js';
|
|
41
|
+
import { Subagent } from '../agent/subagent.js';
|
|
42
|
+
import { getSettingsManager } from '../utils/settings-manager.js';
|
|
43
|
+
import { initializeMCPServers } from '../llm/tools.js';
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// LLM Client
|
|
46
|
+
// ============================================================================
|
|
47
|
+
export { LLMClient } from '../llm/client.js';
|
|
48
|
+
export { SubagentRole, SubagentState, } from '../agent/subagent-types.js';
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// Settings and Configuration
|
|
51
|
+
// ============================================================================
|
|
52
|
+
export { getSettingsManager } from '../utils/settings-manager.js';
|
|
53
|
+
// ============================================================================
|
|
54
|
+
// Utilities
|
|
55
|
+
// ============================================================================
|
|
56
|
+
export { createTokenCounter } from '../utils/token-counter.js';
|
|
57
|
+
export { loadCustomInstructions } from '../utils/custom-instructions.js';
|
|
58
|
+
export { buildSystemPrompt } from '../utils/prompt-builder.js';
|
|
59
|
+
export { getUsageTracker } from '../utils/usage-tracker.js';
|
|
60
|
+
export { extractErrorMessage, createErrorMessage, ErrorCategory } from '../utils/error-handler.js';
|
|
61
|
+
// ============================================================================
|
|
62
|
+
// MCP Integration
|
|
63
|
+
// ============================================================================
|
|
64
|
+
export { loadMCPConfig } from '../mcp/config.js';
|
|
65
|
+
export { getMCPManager, initializeMCPServers } from '../llm/tools.js';
|
|
66
|
+
// ============================================================================
|
|
67
|
+
// Planning System
|
|
68
|
+
// ============================================================================
|
|
69
|
+
export { getTaskPlanner, isComplexRequest } from '../planner/index.js';
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// Checkpoint System
|
|
72
|
+
// ============================================================================
|
|
73
|
+
export { getCheckpointManager } from '../checkpoint/index.js';
|
|
74
|
+
// ============================================================================
|
|
75
|
+
// Constants
|
|
76
|
+
// ============================================================================
|
|
77
|
+
export { GLM_MODELS, DEFAULT_MODEL, AGENT_CONFIG, PLANNER_CONFIG, } from '../constants.js';
|
|
78
|
+
/**
|
|
79
|
+
* Create a new LLM Agent with configuration
|
|
80
|
+
*
|
|
81
|
+
* @param options - Agent configuration options
|
|
82
|
+
* @returns Configured LLM Agent instance
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const agent = await createAgent({
|
|
87
|
+
* model: 'glm-4.6',
|
|
88
|
+
* maxToolRounds: 50
|
|
89
|
+
* });
|
|
90
|
+
*
|
|
91
|
+
* agent.on('stream', (chunk) => {
|
|
92
|
+
* if (chunk.type === 'content') {
|
|
93
|
+
* console.log(chunk.content);
|
|
94
|
+
* }
|
|
95
|
+
* });
|
|
96
|
+
*
|
|
97
|
+
* const result = await agent.processUserMessage('Analyze this codebase');
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export async function createAgent(options = {}) {
|
|
101
|
+
const settingsManager = getSettingsManager();
|
|
102
|
+
// Load settings if not already loaded
|
|
103
|
+
try {
|
|
104
|
+
settingsManager.loadUserSettings();
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Settings may not exist yet, that's okay
|
|
108
|
+
}
|
|
109
|
+
// Get configuration (use options or settings)
|
|
110
|
+
const apiKey = options.apiKey || settingsManager.getApiKey() || '';
|
|
111
|
+
const model = options.model || settingsManager.getCurrentModel();
|
|
112
|
+
const baseURL = options.baseURL || settingsManager.getBaseURL();
|
|
113
|
+
const maxToolRounds = options.maxToolRounds;
|
|
114
|
+
// Create agent instance
|
|
115
|
+
const agent = new LLMAgent(apiKey, baseURL, model, maxToolRounds);
|
|
116
|
+
return agent;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Create a specialized subagent for specific tasks
|
|
120
|
+
*
|
|
121
|
+
* @param role - The role/specialty of the subagent
|
|
122
|
+
* @param config - Optional configuration overrides
|
|
123
|
+
* @returns Configured Subagent instance
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const testAgent = createSubagent(SubagentRole.TESTING, {
|
|
128
|
+
* maxToolRounds: 20,
|
|
129
|
+
* priority: 2
|
|
130
|
+
* });
|
|
131
|
+
*
|
|
132
|
+
* const result = await testAgent.execute({
|
|
133
|
+
* id: 'task-1',
|
|
134
|
+
* description: 'Write unit tests for auth module',
|
|
135
|
+
* context: { files: ['src/auth.ts'] }
|
|
136
|
+
* });
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
export function createSubagent(role, config) {
|
|
140
|
+
return new Subagent(role, config);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Initialize SDK with configuration
|
|
144
|
+
*
|
|
145
|
+
* @param config - SDK initialization configuration
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* await initializeSDK({
|
|
150
|
+
* apiKey: 'your-api-key',
|
|
151
|
+
* model: 'glm-4.6',
|
|
152
|
+
* baseURL: 'https://api.example.com/v1'
|
|
153
|
+
* });
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
export async function initializeSDK(config) {
|
|
157
|
+
const settingsManager = getSettingsManager();
|
|
158
|
+
// Update settings
|
|
159
|
+
if (config.apiKey) {
|
|
160
|
+
settingsManager.updateUserSetting('apiKey', config.apiKey);
|
|
161
|
+
}
|
|
162
|
+
if (config.model) {
|
|
163
|
+
settingsManager.updateUserSetting('defaultModel', config.model);
|
|
164
|
+
}
|
|
165
|
+
if (config.baseURL) {
|
|
166
|
+
settingsManager.updateUserSetting('baseURL', config.baseURL);
|
|
167
|
+
}
|
|
168
|
+
// Initialize MCP servers if provided
|
|
169
|
+
if (config.mcpServers) {
|
|
170
|
+
await initializeMCPServers();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AX CLI SDK - Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Consolidated type definitions for SDK consumers.
|
|
5
|
+
* All types are re-exported from core modules for convenience.
|
|
6
|
+
*/
|
|
7
|
+
export type { ChatEntry, StreamingChunk } from '../agent/llm-agent.js';
|
|
8
|
+
export type { AgentState } from '../types/index.js';
|
|
9
|
+
export { SubagentRole, SubagentState, type SubagentConfig, type SubagentTask, type SubagentResult, type SubagentStatus, } from '../agent/subagent-types.js';
|
|
10
|
+
export type { LLMMessage, LLMTool, LLMToolCall, LLMResponse, SearchParameters, SearchOptions, } from '../llm/client.js';
|
|
11
|
+
export type { ChatOptions, ThinkingConfig, SamplingConfig, GLM46StreamChunk, } from '../llm/types.js';
|
|
12
|
+
export type { ToolResult, Tool, EditorCommand } from '../types/index.js';
|
|
13
|
+
export type { UserSettings, ProjectSettings, } from '../schemas/settings-schemas.js';
|
|
14
|
+
export type { MCPConfig } from '../mcp/config.js';
|
|
15
|
+
export type { MCPServerConfig } from '../mcp/client.js';
|
|
16
|
+
export type { TaskPlan, TaskPhase, PhaseResult, PlanResult, PhaseStatus, } from '../planner/types.js';
|
|
17
|
+
export type { Checkpoint, CheckpointMetadata, CheckpointFilter, } from '../checkpoint/types.js';
|
|
18
|
+
import type { StreamingChunk } from '../agent/llm-agent.js';
|
|
19
|
+
import type { LLMToolCall } from '../llm/client.js';
|
|
20
|
+
import type { ToolResult } from '../types/index.js';
|
|
21
|
+
import type { SubagentState, SubagentResult } from '../agent/subagent-types.js';
|
|
22
|
+
/**
|
|
23
|
+
* Events emitted by LLMAgent
|
|
24
|
+
*/
|
|
25
|
+
export interface AgentEvents {
|
|
26
|
+
/** Streaming content chunk */
|
|
27
|
+
stream: (chunk: StreamingChunk) => void;
|
|
28
|
+
/** Tool execution started */
|
|
29
|
+
tool_start: (toolCall: LLMToolCall) => void;
|
|
30
|
+
/** Tool execution completed */
|
|
31
|
+
tool_complete: (toolCall: LLMToolCall, result: ToolResult) => void;
|
|
32
|
+
/** Token count updated */
|
|
33
|
+
token_count: (count: number) => void;
|
|
34
|
+
/** Error occurred */
|
|
35
|
+
error: (error: Error) => void;
|
|
36
|
+
/** Agent status changed */
|
|
37
|
+
status: (status: 'idle' | 'processing' | 'waiting' | 'error') => void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Events emitted by Subagent
|
|
41
|
+
*/
|
|
42
|
+
export interface SubagentEvents {
|
|
43
|
+
/** Subagent state changed */
|
|
44
|
+
state_change: (state: SubagentState) => void;
|
|
45
|
+
/** Progress updated (0-100) */
|
|
46
|
+
progress: (progress: number) => void;
|
|
47
|
+
/** Task started */
|
|
48
|
+
task_start: (taskId: string) => void;
|
|
49
|
+
/** Task completed */
|
|
50
|
+
task_complete: (result: SubagentResult) => void;
|
|
51
|
+
/** Subagent error */
|
|
52
|
+
error: (error: Error) => void;
|
|
53
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AX CLI SDK - Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Consolidated type definitions for SDK consumers.
|
|
5
|
+
* All types are re-exported from core modules for convenience.
|
|
6
|
+
*/
|
|
7
|
+
export { SubagentRole, SubagentState, } from '../agent/subagent-types.js';
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,EACL,YAAY,EACZ,aAAa,GAKd,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Architecture Analysis Tool
|
|
3
|
+
*
|
|
4
|
+
* LLM tool for architecture analysis
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolResult } from '../../types/index.js';
|
|
7
|
+
export declare class ArchitectureTool {
|
|
8
|
+
private analyzer;
|
|
9
|
+
constructor();
|
|
10
|
+
/**
|
|
11
|
+
* Analyze project architecture
|
|
12
|
+
*/
|
|
13
|
+
execute(args: {
|
|
14
|
+
projectPath?: string;
|
|
15
|
+
depth?: string;
|
|
16
|
+
}): Promise<ToolResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Format analysis result for display
|
|
19
|
+
*/
|
|
20
|
+
private formatOutput;
|
|
21
|
+
/**
|
|
22
|
+
* Get tool definition for LLM
|
|
23
|
+
*/
|
|
24
|
+
getToolDefinition(): {
|
|
25
|
+
type: "function";
|
|
26
|
+
function: {
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
parameters: {
|
|
30
|
+
type: string;
|
|
31
|
+
properties: {
|
|
32
|
+
projectPath: {
|
|
33
|
+
type: string;
|
|
34
|
+
description: string;
|
|
35
|
+
};
|
|
36
|
+
depth: {
|
|
37
|
+
type: string;
|
|
38
|
+
enum: string[];
|
|
39
|
+
default: string;
|
|
40
|
+
description: string;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Architecture Analysis Tool
|
|
3
|
+
*
|
|
4
|
+
* LLM tool for architecture analysis
|
|
5
|
+
*/
|
|
6
|
+
import { ArchitectureAnalyzer } from '../../analyzers/architecture/index.js';
|
|
7
|
+
export class ArchitectureTool {
|
|
8
|
+
analyzer;
|
|
9
|
+
constructor() {
|
|
10
|
+
this.analyzer = new ArchitectureAnalyzer();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Analyze project architecture
|
|
14
|
+
*/
|
|
15
|
+
async execute(args) {
|
|
16
|
+
try {
|
|
17
|
+
// Use current directory if no path specified
|
|
18
|
+
const projectPath = args.projectPath || process.cwd();
|
|
19
|
+
// Validate depth parameter
|
|
20
|
+
const depth = args.depth === 'deep' ? 'deep' : 'quick';
|
|
21
|
+
// Run analysis
|
|
22
|
+
const result = await this.analyzer.analyzeProject(projectPath, depth);
|
|
23
|
+
// Format output
|
|
24
|
+
const output = this.formatOutput(result);
|
|
25
|
+
return {
|
|
26
|
+
success: true,
|
|
27
|
+
output,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
return {
|
|
32
|
+
success: false,
|
|
33
|
+
error: `Architecture analysis failed: ${error.message}`,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Format analysis result for display
|
|
39
|
+
*/
|
|
40
|
+
formatOutput(result) {
|
|
41
|
+
const lines = [];
|
|
42
|
+
lines.push('# Architecture Analysis\n');
|
|
43
|
+
lines.push(`**Project**: ${result.projectPath}`);
|
|
44
|
+
lines.push(`**Score**: ${result.architectureScore}/100`);
|
|
45
|
+
lines.push(`**Duration**: ${result.durationMs}ms\n`);
|
|
46
|
+
// Summary
|
|
47
|
+
lines.push('## Summary\n');
|
|
48
|
+
lines.push(result.summary);
|
|
49
|
+
lines.push('');
|
|
50
|
+
// Detected Patterns
|
|
51
|
+
if (result.detectedPatterns.length > 0) {
|
|
52
|
+
lines.push('## Detected Patterns\n');
|
|
53
|
+
for (const pattern of result.detectedPatterns) {
|
|
54
|
+
lines.push(`### ${pattern.name}`);
|
|
55
|
+
lines.push(`- **Category**: ${pattern.category}`);
|
|
56
|
+
lines.push(`- **Confidence**: ${Math.round(pattern.confidence * 100)}%`);
|
|
57
|
+
lines.push(`- **Description**: ${pattern.description}`);
|
|
58
|
+
lines.push(`- **Locations**: ${pattern.locations.join(', ')}`);
|
|
59
|
+
lines.push('');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Anti-Patterns
|
|
63
|
+
if (result.antiPatterns.length > 0) {
|
|
64
|
+
lines.push('## Anti-Patterns Found\n');
|
|
65
|
+
for (const antiPattern of result.antiPatterns) {
|
|
66
|
+
lines.push(`### ⚠️ ${antiPattern.name} (${antiPattern.severity})`);
|
|
67
|
+
lines.push(`- **Description**: ${antiPattern.description}`);
|
|
68
|
+
lines.push(`- **Impact**: ${antiPattern.impact}`);
|
|
69
|
+
lines.push(`- **Suggestion**: ${antiPattern.suggestion}`);
|
|
70
|
+
lines.push(`- **Locations**: ${antiPattern.locations.join(', ')}`);
|
|
71
|
+
lines.push('');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Recommendations
|
|
75
|
+
if (result.recommendations.length > 0) {
|
|
76
|
+
lines.push('## Recommendations\n');
|
|
77
|
+
for (const rec of result.recommendations) {
|
|
78
|
+
lines.push(`### ${rec.title} (Priority: ${rec.priority})`);
|
|
79
|
+
lines.push(`**Description**: ${rec.description}\n`);
|
|
80
|
+
lines.push(`**Rationale**: ${rec.rationale}\n`);
|
|
81
|
+
lines.push(`**Estimated Effort**: ${rec.estimatedEffort}\n`);
|
|
82
|
+
if (rec.benefits.length > 0) {
|
|
83
|
+
lines.push('**Benefits**:');
|
|
84
|
+
for (const benefit of rec.benefits) {
|
|
85
|
+
lines.push(`- ${benefit}`);
|
|
86
|
+
}
|
|
87
|
+
lines.push('');
|
|
88
|
+
}
|
|
89
|
+
if (rec.relatedPatterns.length > 0) {
|
|
90
|
+
lines.push(`**Related Patterns**: ${rec.relatedPatterns.join(', ')}\n`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return lines.join('\n');
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get tool definition for LLM
|
|
98
|
+
*/
|
|
99
|
+
getToolDefinition() {
|
|
100
|
+
return {
|
|
101
|
+
type: 'function',
|
|
102
|
+
function: {
|
|
103
|
+
name: 'analyze_architecture',
|
|
104
|
+
description: 'Analyze project architecture to detect patterns, anti-patterns, and generate improvement recommendations',
|
|
105
|
+
parameters: {
|
|
106
|
+
type: 'object',
|
|
107
|
+
properties: {
|
|
108
|
+
projectPath: {
|
|
109
|
+
type: 'string',
|
|
110
|
+
description: 'Path to project root directory (default: current directory)',
|
|
111
|
+
},
|
|
112
|
+
depth: {
|
|
113
|
+
type: 'string',
|
|
114
|
+
enum: ['quick', 'deep'],
|
|
115
|
+
default: 'quick',
|
|
116
|
+
description: 'Analysis depth: "quick" for pattern detection only, "deep" includes anti-pattern detection',
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=architecture-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture-tool.js","sourceRoot":"","sources":["../../../src/tools/analysis-tools/architecture-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Tool
|
|
3
|
+
*
|
|
4
|
+
* LLM tool for best practice validation
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolResult } from '../../types/index.js';
|
|
7
|
+
export declare class ValidationTool {
|
|
8
|
+
private validator;
|
|
9
|
+
constructor();
|
|
10
|
+
/**
|
|
11
|
+
* Validate files
|
|
12
|
+
*/
|
|
13
|
+
execute(args: {
|
|
14
|
+
path?: string;
|
|
15
|
+
pattern?: string;
|
|
16
|
+
rules?: Record<string, {
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
}): Promise<ToolResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Format validation result for display
|
|
22
|
+
*/
|
|
23
|
+
private formatOutput;
|
|
24
|
+
/**
|
|
25
|
+
* Get tool definition for LLM
|
|
26
|
+
*/
|
|
27
|
+
getToolDefinition(): {
|
|
28
|
+
type: "function";
|
|
29
|
+
function: {
|
|
30
|
+
name: string;
|
|
31
|
+
description: string;
|
|
32
|
+
parameters: {
|
|
33
|
+
type: string;
|
|
34
|
+
properties: {
|
|
35
|
+
path: {
|
|
36
|
+
type: string;
|
|
37
|
+
description: string;
|
|
38
|
+
};
|
|
39
|
+
pattern: {
|
|
40
|
+
type: string;
|
|
41
|
+
description: string;
|
|
42
|
+
};
|
|
43
|
+
rules: {
|
|
44
|
+
type: string;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Tool
|
|
3
|
+
*
|
|
4
|
+
* LLM tool for best practice validation
|
|
5
|
+
*/
|
|
6
|
+
import { BestPracticeValidator } from '../../analyzers/best-practices/best-practice-validator.js';
|
|
7
|
+
import { glob } from 'glob';
|
|
8
|
+
export class ValidationTool {
|
|
9
|
+
validator;
|
|
10
|
+
constructor() {
|
|
11
|
+
this.validator = new BestPracticeValidator();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Validate files
|
|
15
|
+
*/
|
|
16
|
+
async execute(args) {
|
|
17
|
+
try {
|
|
18
|
+
const targetPath = args.path || process.cwd();
|
|
19
|
+
const pattern = args.pattern || '**/*.{ts,tsx}';
|
|
20
|
+
// Find files to validate
|
|
21
|
+
const files = await glob(pattern, {
|
|
22
|
+
cwd: targetPath,
|
|
23
|
+
absolute: true,
|
|
24
|
+
ignore: [
|
|
25
|
+
'**/node_modules/**',
|
|
26
|
+
'**/dist/**',
|
|
27
|
+
'**/build/**',
|
|
28
|
+
'**/.git/**',
|
|
29
|
+
],
|
|
30
|
+
});
|
|
31
|
+
if (files.length === 0) {
|
|
32
|
+
return {
|
|
33
|
+
success: true,
|
|
34
|
+
output: 'No files found matching pattern',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Validate files
|
|
38
|
+
const options = {
|
|
39
|
+
rules: args.rules,
|
|
40
|
+
};
|
|
41
|
+
const result = await this.validator.validateBatch(files, options);
|
|
42
|
+
// Format output
|
|
43
|
+
const output = this.formatOutput(result);
|
|
44
|
+
return {
|
|
45
|
+
success: true,
|
|
46
|
+
output,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
return {
|
|
51
|
+
success: false,
|
|
52
|
+
error: `Validation failed: ${error.message}`,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Format validation result for display
|
|
58
|
+
*/
|
|
59
|
+
formatOutput(result) {
|
|
60
|
+
const lines = [];
|
|
61
|
+
lines.push('# Best Practice Validation\n');
|
|
62
|
+
lines.push(`**Files Checked**: ${result.files.length}`);
|
|
63
|
+
lines.push(`**Total Violations**: ${result.totalViolations}`);
|
|
64
|
+
lines.push(`**Average Score**: ${result.averageScore}/100\n`);
|
|
65
|
+
// Summary by severity
|
|
66
|
+
lines.push('## Violations by Severity\n');
|
|
67
|
+
lines.push(`- **Critical**: ${result.criticalCount}`);
|
|
68
|
+
lines.push(`- **High**: ${result.highCount}\n`);
|
|
69
|
+
// Top violations
|
|
70
|
+
if (result.files.length > 0) {
|
|
71
|
+
lines.push('## Files with Most Violations\n');
|
|
72
|
+
const sortedFiles = result.files
|
|
73
|
+
.slice()
|
|
74
|
+
.sort((a, b) => b.violations.length - a.violations.length)
|
|
75
|
+
.slice(0, 5);
|
|
76
|
+
for (const file of sortedFiles) {
|
|
77
|
+
if (file.violations.length > 0) {
|
|
78
|
+
lines.push(`### ${file.file} (${file.violations.length} violations)\n`);
|
|
79
|
+
for (const violation of file.violations.slice(0, 3)) {
|
|
80
|
+
lines.push(`- **Line ${violation.line}**: ${violation.message}`);
|
|
81
|
+
if (violation.suggestion) {
|
|
82
|
+
lines.push(` *Suggestion*: ${violation.suggestion}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
lines.push('');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return lines.join('\n');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get tool definition for LLM
|
|
93
|
+
*/
|
|
94
|
+
getToolDefinition() {
|
|
95
|
+
return {
|
|
96
|
+
type: 'function',
|
|
97
|
+
function: {
|
|
98
|
+
name: 'validate_best_practices',
|
|
99
|
+
description: 'Validate TypeScript/JavaScript files against best practices and coding standards',
|
|
100
|
+
parameters: {
|
|
101
|
+
type: 'object',
|
|
102
|
+
properties: {
|
|
103
|
+
path: {
|
|
104
|
+
type: 'string',
|
|
105
|
+
description: 'Path to directory or file to validate (default: current directory)',
|
|
106
|
+
},
|
|
107
|
+
pattern: {
|
|
108
|
+
type: 'string',
|
|
109
|
+
description: 'Glob pattern for files to validate (default: **/*.{ts,tsx})',
|
|
110
|
+
},
|
|
111
|
+
rules: {
|
|
112
|
+
type: 'object',
|
|
113
|
+
description: 'Rule configuration (e.g., {"no-any-type": {"enabled": false}})',
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=validation-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-tool.js","sourceRoot":"","sources":["../../../src/tools/analysis-tools/validation-tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,2DAA2D,CAAC;AAElG,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,OAAO,cAAc;IACjB,SAAS,CAAwB;IAEzC;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,IAIb;QACC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,eAAe,CAAC;YAEhD,yBAAyB;YACzB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;gBAChC,GAAG,EAAE,UAAU;gBACf,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,oBAAoB;oBACpB,YAAY;oBACZ,aAAa;oBACb,YAAY;iBACb;aACF,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,iCAAiC;iBAC1C,CAAC;YACJ,CAAC;YAED,iBAAiB;YACjB,MAAM,OAAO,GAAsB;gBACjC,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAElE,gBAAgB;YAChB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAEzC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM;aACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,sBAAuB,KAAe,CAAC,OAAO,EAAE;aACxD,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,MAA6B;QAChD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,YAAY,QAAQ,CAAC,CAAC;QAE9D,sBAAsB;QACtB,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;QAEhD,iBAAiB;QACjB,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAE9C,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK;iBAC7B,KAAK,EAAE;iBACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;iBACzD,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEf,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,gBAAgB,CAAC,CAAC;oBAExE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;wBACpD,KAAK,CAAC,IAAI,CAAC,YAAY,SAAS,CAAC,IAAI,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;wBACjE,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;4BACzB,KAAK,CAAC,IAAI,CAAC,mBAAmB,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;wBACxD,CAAC;oBACH,CAAC;oBAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO;YACL,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EACT,kFAAkF;gBACpF,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,oEAAoE;yBAClF;wBACD,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,6DAA6D;yBAC3E;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,gEAAgE;yBAC9E;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search Cache
|
|
3
|
+
* In-memory cache for web search results
|
|
4
|
+
*/
|
|
5
|
+
import type { WebSearchResult } from "./types.js";
|
|
6
|
+
export interface CacheEntry {
|
|
7
|
+
query: string;
|
|
8
|
+
results: WebSearchResult[];
|
|
9
|
+
timestamp: number;
|
|
10
|
+
ttl: number;
|
|
11
|
+
}
|
|
12
|
+
export declare class SearchCache {
|
|
13
|
+
private cache;
|
|
14
|
+
private readonly DEFAULT_TTL;
|
|
15
|
+
private readonly MAX_KEYS;
|
|
16
|
+
constructor(ttl?: number, maxKeys?: number);
|
|
17
|
+
/**
|
|
18
|
+
* Generate cache key from query
|
|
19
|
+
*/
|
|
20
|
+
private getCacheKey;
|
|
21
|
+
/**
|
|
22
|
+
* Get cached results for a query
|
|
23
|
+
*/
|
|
24
|
+
get(query: string): WebSearchResult[] | null;
|
|
25
|
+
/**
|
|
26
|
+
* Cache search results for a query
|
|
27
|
+
*/
|
|
28
|
+
set(query: string, results: WebSearchResult[], ttl?: number): void;
|
|
29
|
+
/**
|
|
30
|
+
* Check if query has cached results
|
|
31
|
+
*/
|
|
32
|
+
has(query: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Clear specific query from cache
|
|
35
|
+
*/
|
|
36
|
+
delete(query: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Clear all cached results
|
|
39
|
+
*/
|
|
40
|
+
clear(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Get cache statistics
|
|
43
|
+
*/
|
|
44
|
+
getStats(): {
|
|
45
|
+
keys: number;
|
|
46
|
+
hits: number;
|
|
47
|
+
misses: number;
|
|
48
|
+
hitRate: number;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Get all cached queries (for debugging)
|
|
52
|
+
*/
|
|
53
|
+
getCachedQueries(): string[];
|
|
54
|
+
/**
|
|
55
|
+
* Get cache entry with metadata
|
|
56
|
+
*/
|
|
57
|
+
getEntry(query: string): CacheEntry | null;
|
|
58
|
+
/**
|
|
59
|
+
* Get TTL for a cached query
|
|
60
|
+
*/
|
|
61
|
+
getTTL(query: string): number | undefined;
|
|
62
|
+
}
|