codehere 0.2.2 → 0.3.0-rc.1
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/README.md +88 -68
- package/dist/domain/entities/task.js +4 -4
- package/dist/error-handler.js +4 -9
- package/dist/index.js +253 -1219
- package/dist/infrastructure/config/product-context.js +7 -6
- package/dist/infrastructure/hooks/claude-sdk-hook.js +335 -63
- package/dist/infrastructure/observability/execution-tracer.js +11 -6
- package/dist/infrastructure/orchestration/agent-adapter.js +13 -0
- package/dist/infrastructure/orchestration/agent-installer.js +101 -0
- package/dist/infrastructure/orchestration/agents-config-seed.js +56 -0
- package/dist/infrastructure/orchestration/aider-adapter.js +319 -0
- package/dist/infrastructure/orchestration/artifacts-extractor.js +175 -0
- package/dist/infrastructure/orchestration/claude-code-adapter.js +352 -0
- package/dist/infrastructure/orchestration/codex-adapter.js +310 -0
- package/dist/infrastructure/orchestration/generic-cli-adapter.js +553 -0
- package/dist/infrastructure/orchestration/opencode-adapter.js +275 -0
- package/dist/infrastructure/orchestration/progress-aggregator.js +189 -0
- package/dist/infrastructure/orchestration/readiness.js +106 -0
- package/dist/infrastructure/orchestration/session-manager.js +272 -0
- package/dist/infrastructure/orchestration/session-persistence.js +109 -0
- package/dist/infrastructure/protocols/mcp-helpers.js +10 -30
- package/dist/infrastructure/protocols/mcp-server-impl.js +359 -21
- package/dist/infrastructure/protocols/ui-page.js +1827 -0
- package/dist/infrastructure/security/file-collection.js +115 -0
- package/dist/infrastructure/security/trust-scorer.js +301 -56
- package/dist/infrastructure/storage/task-repository.js +8 -7
- package/dist/monitoring.js +9 -38
- package/dist/presentation/cli/commands/help-command.js +96 -139
- package/dist/presentation/cli/commands/hook-command.js +17 -24
- package/dist/presentation/cli/commands/report-command.js +59 -72
- package/dist/presentation/cli/commands/setup-command.js +4 -4
- package/dist/presentation/cli/commands/status-command.js +321 -30
- package/dist/presentation/cli/commands/trust-command.js +84 -72
- package/dist/presentation/cli/error-display.js +17 -21
- package/dist/ui.js +11 -11
- package/package.json +24 -62
- package/dist/agents/base.js +0 -101
- package/dist/agents/orchestrator-model-driven.js +0 -141
- package/dist/agents/react-orchestrator-agent.js +0 -54
- package/dist/application/agents/execution-agent.js +0 -508
- package/dist/application/agents/multi-agent-orchestrator.js +0 -295
- package/dist/application/agents/planning-agent.js +0 -433
- package/dist/application/agents/validation-agent.js +0 -317
- package/dist/application/architectures/plan-and-act.js +0 -242
- package/dist/application/index.js +0 -12
- package/dist/application/services/agent-factory.js +0 -28
- package/dist/application/services/dependency-container.js +0 -596
- package/dist/application/services/git-context-service.js +0 -83
- package/dist/application/services/intelligent-router.js +0 -934
- package/dist/application/services/tool-executor-service.js +0 -94
- package/dist/application/use-cases/ask-question-use-case.js +0 -338
- package/dist/application/use-cases/edit-file-use-case.js +0 -830
- package/dist/application/use-cases/explain-file-use-case.js +0 -50
- package/dist/application/use-cases/index-codebase-use-case.js +0 -113
- package/dist/application/use-cases/planning-use-case.js +0 -276
- package/dist/application/use-cases/react-orchestration-use-case.js +0 -329
- package/dist/application/use-cases/reflexion-use-case.js +0 -30
- package/dist/application/workflows/deterministic-workflows.js +0 -189
- package/dist/ast-parser.js +0 -331
- package/dist/cache.js +0 -180
- package/dist/chat.js +0 -251
- package/dist/code-analysis.js +0 -327
- package/dist/context.js +0 -187
- package/dist/docs.js +0 -146
- package/dist/domain/entities/code-chunk.js +0 -6
- package/dist/domain/entities/decision.js +0 -9
- package/dist/domain/entities/edit.js +0 -6
- package/dist/domain/entities/knowledge-node.js +0 -9
- package/dist/domain/entities/knowledge-preservation.js +0 -10
- package/dist/domain/entities/memory.js +0 -6
- package/dist/domain/entities/pattern.js +0 -7
- package/dist/domain/entities/plan.js +0 -6
- package/dist/domain/entities/query.js +0 -6
- package/dist/domain/errors/embeddings-not-found-error.js +0 -13
- package/dist/domain/index.js +0 -19
- package/dist/domain/interfaces/ai-service.interface.js +0 -6
- package/dist/domain/interfaces/code-analyzer.interface.js +0 -6
- package/dist/domain/interfaces/decision-repository.interface.js +0 -9
- package/dist/domain/interfaces/embedding-repository.interface.js +0 -6
- package/dist/domain/interfaces/knowledge-graph-repository.interface.js +0 -9
- package/dist/domain/interfaces/knowledge-preservation-repository.interface.js +0 -8
- package/dist/domain/interfaces/memory-repository.interface.js +0 -6
- package/dist/domain/interfaces/pattern-repository.interface.js +0 -6
- package/dist/domain/interfaces/verification-service.interface.js +0 -6
- package/dist/domain/services/cross-team-pattern-sharing.js +0 -125
- package/dist/domain/services/decision-recorder.js +0 -223
- package/dist/domain/services/decision-retriever.js +0 -133
- package/dist/domain/services/environment-mode-manager.js +0 -22
- package/dist/domain/services/graded-memory-activation.js +0 -69
- package/dist/domain/services/knowledge-access.js +0 -132
- package/dist/domain/services/knowledge-extractor.js +0 -247
- package/dist/domain/services/knowledge-graph-builder.js +0 -268
- package/dist/domain/services/knowledge-graph-query.js +0 -187
- package/dist/domain/services/memory-retriever.js +0 -82
- package/dist/domain/services/memory-synthesizer.js +0 -91
- package/dist/domain/services/pattern-extractor.js +0 -442
- package/dist/domain/services/query-intent-classifier.js +0 -140
- package/dist/domain/services/react-loop.js +0 -186
- package/dist/domain/services/risk-tier-detector.js +0 -78
- package/dist/edit.js +0 -319
- package/dist/embed.js +0 -459
- package/dist/formatter.js +0 -168
- package/dist/git.js +0 -198
- package/dist/infrastructure/ai/cohere-ai-service.js +0 -607
- package/dist/infrastructure/ai/command-r-evaluation.js +0 -206
- package/dist/infrastructure/ai/model-config.js +0 -84
- package/dist/infrastructure/ai/provider-ai-service.js +0 -477
- package/dist/infrastructure/cache/embedding-cache.js +0 -175
- package/dist/infrastructure/cache/query-result-cache.js +0 -66
- package/dist/infrastructure/cache/response-cache.js +0 -48
- package/dist/infrastructure/cache/security-scan-cache.js +0 -47
- package/dist/infrastructure/chunking/ast-code-chunker.js +0 -19
- package/dist/infrastructure/chunking/code-aware-chunker.js +0 -397
- package/dist/infrastructure/context/context-compressor.js +0 -329
- package/dist/infrastructure/context/conversation-context.js +0 -128
- package/dist/infrastructure/context/session-manager.js +0 -94
- package/dist/infrastructure/cost/cost-tracker.js +0 -360
- package/dist/infrastructure/file-scanner/file-scanner.js +0 -106
- package/dist/infrastructure/governance/nist-ai-rmf.js +0 -292
- package/dist/infrastructure/governance/policy-as-code.js +0 -258
- package/dist/infrastructure/governance/prompt-to-code-lineage.js +0 -239
- package/dist/infrastructure/index.js +0 -7
- package/dist/infrastructure/observability/prompt-versioner.js +0 -145
- package/dist/infrastructure/protocols/a2a-metadata.js +0 -137
- package/dist/infrastructure/protocols/a2a-protocol.js +0 -314
- package/dist/infrastructure/protocols/mcp-oauth.js +0 -184
- package/dist/infrastructure/protocols/mcp-server.js +0 -333
- package/dist/infrastructure/protocols/streaming-handler.js +0 -103
- package/dist/infrastructure/providers/cohere-provider.js +0 -444
- package/dist/infrastructure/providers/fake-provider.js +0 -130
- package/dist/infrastructure/providers/local-llm-provider.js +0 -330
- package/dist/infrastructure/providers/model-config.types.js +0 -9
- package/dist/infrastructure/providers/model-provider.interface.js +0 -8
- package/dist/infrastructure/providers/openai-provider.js +0 -413
- package/dist/infrastructure/providers/openrouter-provider.js +0 -399
- package/dist/infrastructure/providers/operation-provider-resolver.js +0 -105
- package/dist/infrastructure/providers/provider-config-loader.js +0 -120
- package/dist/infrastructure/providers/provider-registry.js +0 -88
- package/dist/infrastructure/safety/pattern-detector.js +0 -133
- package/dist/infrastructure/security/ai-sast-scanner.js +0 -290
- package/dist/infrastructure/security/docker-sandbox.js +0 -178
- package/dist/infrastructure/security/enhanced-security-gate.js +0 -151
- package/dist/infrastructure/security/license-scanner.js +0 -167
- package/dist/infrastructure/security/provider-bias-detector.js +0 -164
- package/dist/infrastructure/security/sandbox-executor.js +0 -64
- package/dist/infrastructure/serialization/toon-serializer.js +0 -119
- package/dist/infrastructure/storage/memory-stream-service.js +0 -204
- package/dist/infrastructure/storage/plan-repository.js +0 -96
- package/dist/infrastructure/storage/sqlite-decision-repository.js +0 -232
- package/dist/infrastructure/storage/sqlite-embedding-repository.js +0 -311
- package/dist/infrastructure/storage/sqlite-knowledge-graph-repository.js +0 -417
- package/dist/infrastructure/storage/sqlite-knowledge-preservation-repository.js +0 -230
- package/dist/infrastructure/storage/sqlite-memory-repository.js +0 -229
- package/dist/infrastructure/storage/sqlite-pattern-repository.js +0 -249
- package/dist/infrastructure/storage/task-helpers.js +0 -197
- package/dist/infrastructure/telemetry/telemetry-service.js +0 -167
- package/dist/infrastructure/ux/appropriate-friction.js +0 -213
- package/dist/infrastructure/ux/bi-directional-learning.js +0 -337
- package/dist/infrastructure/ux/capability-boundaries.js +0 -42
- package/dist/infrastructure/ux/comprehensive-formatter.js +0 -117
- package/dist/infrastructure/ux/contextual-feature-discovery.js +0 -10
- package/dist/infrastructure/ux/expectation-management.js +0 -327
- package/dist/infrastructure/ux/feature-discovery.js +0 -14
- package/dist/infrastructure/ux/feedback-prompt.js +0 -45
- package/dist/infrastructure/ux/hitl-validation.js +0 -297
- package/dist/infrastructure/ux/progress-indicator.js +0 -116
- package/dist/infrastructure/ux/progressive-disclosure.js +0 -236
- package/dist/infrastructure/ux/review-checkpoint.js +0 -72
- package/dist/infrastructure/ux/staged-feature-intro.js +0 -24
- package/dist/infrastructure/ux/stream-markdown.js +0 -151
- package/dist/infrastructure/ux/syntax-highlighter.js +0 -91
- package/dist/infrastructure/ux/team-standards.js +0 -196
- package/dist/infrastructure/ux/transparency.js +0 -71
- package/dist/infrastructure/validation/agent-feedback.js +0 -55
- package/dist/infrastructure/validation/agent-validation-helper.js +0 -137
- package/dist/infrastructure/validation/review-handler.js +0 -40
- package/dist/infrastructure/validation/summary-aggregator.js +0 -70
- package/dist/infrastructure/validation/summary-extractor.js +0 -45
- package/dist/infrastructure/validation/trace-summary.js +0 -52
- package/dist/infrastructure/verification/verification-service.js +0 -47
- package/dist/infrastructure/xai/attention-visualizer.js +0 -172
- package/dist/infrastructure/xai/cot-visualizer.js +0 -283
- package/dist/infrastructure/xai/decision-tree-log.js +0 -212
- package/dist/infrastructure/xai/interactive-xai.js +0 -260
- package/dist/infrastructure/xai/uncertainty-quantifier.js +0 -198
- package/dist/intelligent-retrieval.js +0 -272
- package/dist/intent/classifier.js +0 -2
- package/dist/intent/context.js +0 -2
- package/dist/iterative-refinement.js +0 -189
- package/dist/learning.js +0 -232
- package/dist/log.js +0 -31
- package/dist/migrate.js +0 -133
- package/dist/parallel-processor.js +0 -534
- package/dist/planner.js +0 -198
- package/dist/policy.js +0 -26
- package/dist/presentation/cli/commands/ask-command.js +0 -314
- package/dist/presentation/cli/commands/cost-command.js +0 -191
- package/dist/presentation/cli/commands/decision-command.js +0 -207
- package/dist/presentation/cli/commands/docs-command.js +0 -25
- package/dist/presentation/cli/commands/fix-command.js +0 -53
- package/dist/presentation/cli/commands/knowledge-command.js +0 -129
- package/dist/presentation/cli/commands/learning-dashboard-command.js +0 -183
- package/dist/presentation/cli/commands/models-command.js +0 -194
- package/dist/presentation/cli/commands/orchestrate-command.js +0 -207
- package/dist/presentation/cli/commands/plan-command.js +0 -246
- package/dist/presentation/cli/commands/product-command.js +0 -199
- package/dist/presentation/cli/commands/react-command.js +0 -181
- package/dist/presentation/cli/commands/review-command.js +0 -154
- package/dist/presentation/cli/commands/run-command.js +0 -188
- package/dist/presentation/cli/commands/smart-command.js +0 -395
- package/dist/presentation/cli/commands/suggest-command.js +0 -138
- package/dist/presentation/cli/commands/trace-command.js +0 -129
- package/dist/presentation/cli/commands/undo-command.js +0 -150
- package/dist/query-optimizer.js +0 -205
- package/dist/refactor.js +0 -116
- package/dist/review.js +0 -206
- package/dist/search.js +0 -163
- package/dist/session.js +0 -704
- package/dist/task-verification.js +0 -336
- package/dist/testgen.js +0 -166
- package/dist/token-optimizer.js +0 -277
- package/dist/tools/bash.js +0 -213
- package/dist/tools/edit.js +0 -235
- package/dist/tools/executor.js +0 -153
- package/dist/tools/git-tool.js +0 -292
- package/dist/tools/parser.js +0 -158
- package/dist/tools/registry.js +0 -302
- package/dist/tools/search.js +0 -100
- package/dist/types.js +0 -2
- package/dist/utils/check-api-status.js +0 -100
- package/dist/utils/diff-parser.js +0 -162
- package/dist/verification/backup.js +0 -259
- package/dist/verification/compiler.js +0 -264
- package/dist/verification/index.js +0 -273
- package/dist/verification/test-runner.js +0 -379
package/dist/ast-parser.js
DELETED
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AST-Based Code Understanding System
|
|
3
|
-
* Deep code analysis for 10X effectiveness
|
|
4
|
-
*/
|
|
5
|
-
import { readFileSync } from 'fs';
|
|
6
|
-
import { extname } from 'path';
|
|
7
|
-
import * as ts from 'typescript';
|
|
8
|
-
/**
|
|
9
|
-
* Parse TypeScript/JavaScript file to AST
|
|
10
|
-
*/
|
|
11
|
-
export function parseFile(filepath, content) {
|
|
12
|
-
const ext = extname(filepath).toLowerCase();
|
|
13
|
-
// Only parse TypeScript/JavaScript files
|
|
14
|
-
if (!['.ts', '.tsx', '.js', '.jsx'].includes(ext)) {
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
try {
|
|
18
|
-
const fileContent = content || readFileSync(filepath, 'utf-8');
|
|
19
|
-
// Create TypeScript compiler host
|
|
20
|
-
const compilerOptions = {
|
|
21
|
-
target: ts.ScriptTarget.Latest,
|
|
22
|
-
module: ts.ModuleKind.ESNext,
|
|
23
|
-
jsx: ts.JsxEmit.React,
|
|
24
|
-
allowJs: true,
|
|
25
|
-
checkJs: false,
|
|
26
|
-
skipLibCheck: true,
|
|
27
|
-
};
|
|
28
|
-
// Parse to AST
|
|
29
|
-
const sourceFile = ts.createSourceFile(filepath, fileContent, ts.ScriptTarget.Latest, true, ext === '.tsx' || ext === '.jsx' ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
30
|
-
const symbols = [];
|
|
31
|
-
const relationships = [];
|
|
32
|
-
const imports = [];
|
|
33
|
-
const exports = [];
|
|
34
|
-
const dependencies = [];
|
|
35
|
-
// Visit AST nodes
|
|
36
|
-
function visit(node, parent) {
|
|
37
|
-
// Extract imports
|
|
38
|
-
if (ts.isImportDeclaration(node)) {
|
|
39
|
-
const moduleSpecifier = node.moduleSpecifier;
|
|
40
|
-
if (ts.isStringLiteral(moduleSpecifier)) {
|
|
41
|
-
imports.push(moduleSpecifier.text);
|
|
42
|
-
dependencies.push(moduleSpecifier.text);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// Extract exports
|
|
46
|
-
if (ts.isExportDeclaration(node)) {
|
|
47
|
-
const moduleSpecifier = node.moduleSpecifier;
|
|
48
|
-
if (moduleSpecifier && ts.isStringLiteral(moduleSpecifier)) {
|
|
49
|
-
exports.push(moduleSpecifier.text);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
// Extract functions
|
|
53
|
-
if (ts.isFunctionDeclaration(node) && node.name) {
|
|
54
|
-
const symbol = extractFunctionSymbol(node, filepath, sourceFile);
|
|
55
|
-
if (symbol)
|
|
56
|
-
symbols.push(symbol);
|
|
57
|
-
}
|
|
58
|
-
// Extract methods (in classes)
|
|
59
|
-
if (ts.isMethodDeclaration(node) && node.name) {
|
|
60
|
-
const symbol = extractMethodSymbol(node, filepath, sourceFile);
|
|
61
|
-
if (symbol)
|
|
62
|
-
symbols.push(symbol);
|
|
63
|
-
}
|
|
64
|
-
// Extract classes
|
|
65
|
-
if (ts.isClassDeclaration(node) && node.name) {
|
|
66
|
-
const symbol = extractClassSymbol(node, filepath, sourceFile);
|
|
67
|
-
if (symbol)
|
|
68
|
-
symbols.push(symbol);
|
|
69
|
-
}
|
|
70
|
-
// Extract interfaces
|
|
71
|
-
if (ts.isInterfaceDeclaration(node) && node.name) {
|
|
72
|
-
const symbol = extractInterfaceSymbol(node, filepath, sourceFile);
|
|
73
|
-
if (symbol)
|
|
74
|
-
symbols.push(symbol);
|
|
75
|
-
}
|
|
76
|
-
// Extract type aliases
|
|
77
|
-
if (ts.isTypeAliasDeclaration(node) && node.name) {
|
|
78
|
-
const symbol = extractTypeSymbol(node, filepath, sourceFile);
|
|
79
|
-
if (symbol)
|
|
80
|
-
symbols.push(symbol);
|
|
81
|
-
}
|
|
82
|
-
// Extract variables (const, let, var)
|
|
83
|
-
if ((ts.isVariableDeclaration(node) || ts.isVariableStatement(node)) && parent) {
|
|
84
|
-
const symbol = extractVariableSymbol(node, filepath, sourceFile);
|
|
85
|
-
if (symbol)
|
|
86
|
-
symbols.push(symbol);
|
|
87
|
-
}
|
|
88
|
-
// Extract function calls
|
|
89
|
-
if (ts.isCallExpression(node)) {
|
|
90
|
-
const callRelationship = extractCallRelationship(node, filepath, sourceFile);
|
|
91
|
-
if (callRelationship)
|
|
92
|
-
relationships.push(callRelationship);
|
|
93
|
-
}
|
|
94
|
-
// Extract property access
|
|
95
|
-
if (ts.isPropertyAccessExpression(node)) {
|
|
96
|
-
const propRelationship = extractPropertyRelationship(node, filepath, sourceFile);
|
|
97
|
-
if (propRelationship)
|
|
98
|
-
relationships.push(propRelationship);
|
|
99
|
-
}
|
|
100
|
-
// Recursively visit children
|
|
101
|
-
ts.forEachChild(node, (child) => visit(child, node));
|
|
102
|
-
}
|
|
103
|
-
visit(sourceFile);
|
|
104
|
-
return {
|
|
105
|
-
filepath,
|
|
106
|
-
symbols,
|
|
107
|
-
relationships,
|
|
108
|
-
imports,
|
|
109
|
-
exports,
|
|
110
|
-
dependencies: [...new Set(dependencies)],
|
|
111
|
-
dependents: [],
|
|
112
|
-
ast: sourceFile,
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
catch (error) {
|
|
116
|
-
console.warn(`Failed to parse ${filepath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
function extractFunctionSymbol(node, filepath, sourceFile) {
|
|
121
|
-
if (!node.name)
|
|
122
|
-
return null;
|
|
123
|
-
const name = node.name.text;
|
|
124
|
-
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
|
|
125
|
-
const parameters = node.parameters.map(p => ({
|
|
126
|
-
name: p.name ? (ts.isIdentifier(p.name) ? p.name.text : '') : '',
|
|
127
|
-
type: p.type ? sourceFile.text.substring(p.type.getStart(), p.type.getEnd()) : 'any',
|
|
128
|
-
}));
|
|
129
|
-
const returnType = node.type
|
|
130
|
-
? sourceFile.text.substring(node.type.getStart(), node.type.getEnd())
|
|
131
|
-
: undefined;
|
|
132
|
-
const signature = `${name}(${parameters.map(p => `${p.name}: ${p.type}`).join(', ')})${returnType ? `: ${returnType}` : ''}`;
|
|
133
|
-
const isExported = !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword));
|
|
134
|
-
const isPrivate = !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.PrivateKeyword));
|
|
135
|
-
const docComment = ts.getLeadingCommentRanges(sourceFile.text, node.getFullStart())
|
|
136
|
-
?.map(range => sourceFile.text.substring(range.pos, range.end))
|
|
137
|
-
.join('\n');
|
|
138
|
-
return {
|
|
139
|
-
name,
|
|
140
|
-
kind: 'function',
|
|
141
|
-
filepath,
|
|
142
|
-
line: line + 1,
|
|
143
|
-
column: character + 1,
|
|
144
|
-
signature,
|
|
145
|
-
returnType,
|
|
146
|
-
parameters,
|
|
147
|
-
isExported,
|
|
148
|
-
isPrivate,
|
|
149
|
-
docComment,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
function extractMethodSymbol(node, filepath, sourceFile) {
|
|
153
|
-
if (!node.name || !ts.isIdentifier(node.name))
|
|
154
|
-
return null;
|
|
155
|
-
const name = node.name.text;
|
|
156
|
-
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
|
|
157
|
-
const parameters = node.parameters.map(p => ({
|
|
158
|
-
name: p.name ? (ts.isIdentifier(p.name) ? p.name.text : '') : '',
|
|
159
|
-
type: p.type ? sourceFile.text.substring(p.type.getStart(), p.type.getEnd()) : 'any',
|
|
160
|
-
}));
|
|
161
|
-
const returnType = node.type
|
|
162
|
-
? sourceFile.text.substring(node.type.getStart(), node.type.getEnd())
|
|
163
|
-
: undefined;
|
|
164
|
-
const signature = `${name}(${parameters.map(p => `${p.name}: ${p.type}`).join(', ')})${returnType ? `: ${returnType}` : ''}`;
|
|
165
|
-
const isExported = false; // Methods are not exported directly
|
|
166
|
-
const isPrivate = !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.PrivateKeyword));
|
|
167
|
-
return {
|
|
168
|
-
name,
|
|
169
|
-
kind: 'method',
|
|
170
|
-
filepath,
|
|
171
|
-
line: line + 1,
|
|
172
|
-
column: character + 1,
|
|
173
|
-
signature,
|
|
174
|
-
returnType,
|
|
175
|
-
parameters,
|
|
176
|
-
isExported,
|
|
177
|
-
isPrivate,
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
function extractClassSymbol(node, filepath, sourceFile) {
|
|
181
|
-
if (!node.name)
|
|
182
|
-
return null;
|
|
183
|
-
const name = node.name.text;
|
|
184
|
-
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
|
|
185
|
-
const isExported = !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword));
|
|
186
|
-
return {
|
|
187
|
-
name,
|
|
188
|
-
kind: 'class',
|
|
189
|
-
filepath,
|
|
190
|
-
line: line + 1,
|
|
191
|
-
column: character + 1,
|
|
192
|
-
isExported,
|
|
193
|
-
isPrivate: false,
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
function extractInterfaceSymbol(node, filepath, sourceFile) {
|
|
197
|
-
if (!node.name)
|
|
198
|
-
return null;
|
|
199
|
-
const name = node.name.text;
|
|
200
|
-
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
|
|
201
|
-
const isExported = !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword));
|
|
202
|
-
return {
|
|
203
|
-
name,
|
|
204
|
-
kind: 'interface',
|
|
205
|
-
filepath,
|
|
206
|
-
line: line + 1,
|
|
207
|
-
column: character + 1,
|
|
208
|
-
isExported,
|
|
209
|
-
isPrivate: false,
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
function extractTypeSymbol(node, filepath, sourceFile) {
|
|
213
|
-
if (!node.name)
|
|
214
|
-
return null;
|
|
215
|
-
const name = node.name.text;
|
|
216
|
-
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
|
|
217
|
-
const isExported = !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword));
|
|
218
|
-
return {
|
|
219
|
-
name,
|
|
220
|
-
kind: 'type',
|
|
221
|
-
filepath,
|
|
222
|
-
line: line + 1,
|
|
223
|
-
column: character + 1,
|
|
224
|
-
isExported,
|
|
225
|
-
isPrivate: false,
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
function extractVariableSymbol(node, filepath, sourceFile) {
|
|
229
|
-
let decl;
|
|
230
|
-
if (ts.isVariableStatement(node)) {
|
|
231
|
-
if (node.declarationList.declarations.length === 0)
|
|
232
|
-
return null;
|
|
233
|
-
decl = node.declarationList.declarations[0];
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
decl = node;
|
|
237
|
-
}
|
|
238
|
-
if (!decl.name || !ts.isIdentifier(decl.name))
|
|
239
|
-
return null;
|
|
240
|
-
const name = decl.name.text;
|
|
241
|
-
const { line, character } = sourceFile.getLineAndCharacterOfPosition(decl.getStart());
|
|
242
|
-
const isExported = ts.isVariableStatement(node)
|
|
243
|
-
? !!(node.modifiers?.some(m => m.kind === ts.SyntaxKind.ExportKeyword))
|
|
244
|
-
: false;
|
|
245
|
-
return {
|
|
246
|
-
name,
|
|
247
|
-
kind: 'variable',
|
|
248
|
-
filepath,
|
|
249
|
-
line: line + 1,
|
|
250
|
-
column: character + 1,
|
|
251
|
-
isExported,
|
|
252
|
-
isPrivate: false,
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
function extractCallRelationship(node, filepath, sourceFile) {
|
|
256
|
-
if (!ts.isIdentifier(node.expression))
|
|
257
|
-
return null;
|
|
258
|
-
const functionName = node.expression.text;
|
|
259
|
-
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
|
|
260
|
-
return {
|
|
261
|
-
from: 'current-context', // Will be resolved later
|
|
262
|
-
to: functionName,
|
|
263
|
-
type: 'calls',
|
|
264
|
-
filepath,
|
|
265
|
-
line: line + 1,
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
function extractPropertyRelationship(node, filepath, sourceFile) {
|
|
269
|
-
if (!ts.isIdentifier(node.name))
|
|
270
|
-
return null;
|
|
271
|
-
const propertyName = node.name.text;
|
|
272
|
-
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
|
|
273
|
-
return {
|
|
274
|
-
from: 'current-context',
|
|
275
|
-
to: propertyName,
|
|
276
|
-
type: 'uses',
|
|
277
|
-
filepath,
|
|
278
|
-
line: line + 1,
|
|
279
|
-
};
|
|
280
|
-
}
|
|
281
|
-
/**
|
|
282
|
-
* Build call graph from multiple files
|
|
283
|
-
*/
|
|
284
|
-
export function buildCallGraph(analyses) {
|
|
285
|
-
const callGraph = new Map();
|
|
286
|
-
for (const analysis of analyses) {
|
|
287
|
-
for (const symbol of analysis.symbols) {
|
|
288
|
-
const calls = [];
|
|
289
|
-
for (const rel of analysis.relationships) {
|
|
290
|
-
if (rel.from === 'current-context' || rel.from === symbol.name) {
|
|
291
|
-
// Find the target symbol
|
|
292
|
-
const targetSymbol = analyses
|
|
293
|
-
.flatMap(a => a.symbols)
|
|
294
|
-
.find(s => s.name === rel.to);
|
|
295
|
-
if (targetSymbol) {
|
|
296
|
-
calls.push({
|
|
297
|
-
...rel,
|
|
298
|
-
from: symbol.name,
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
if (calls.length > 0) {
|
|
304
|
-
callGraph.set(symbol.name, calls);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
return callGraph;
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Find all symbols that call a given function
|
|
312
|
-
*/
|
|
313
|
-
export function findCallers(functionName, callGraph) {
|
|
314
|
-
const callers = [];
|
|
315
|
-
for (const [caller, calls] of callGraph.entries()) {
|
|
316
|
-
if (calls.some(c => c.to === functionName && c.type === 'calls')) {
|
|
317
|
-
callers.push(caller);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
return callers;
|
|
321
|
-
}
|
|
322
|
-
/**
|
|
323
|
-
* Find all symbols called by a given function
|
|
324
|
-
*/
|
|
325
|
-
export function findCallees(functionName, callGraph) {
|
|
326
|
-
const calls = callGraph.get(functionName);
|
|
327
|
-
if (!calls)
|
|
328
|
-
return [];
|
|
329
|
-
return calls.filter(c => c.type === 'calls').map(c => c.to);
|
|
330
|
-
}
|
|
331
|
-
//# sourceMappingURL=ast-parser.js.map
|
package/dist/cache.js
DELETED
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Performance Optimization & Caching System
|
|
3
|
-
* Improve efficiency with intelligent caching
|
|
4
|
-
*/
|
|
5
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, unlinkSync } from 'fs';
|
|
6
|
-
import { join, dirname } from 'path';
|
|
7
|
-
import { fileURLToPath } from 'url';
|
|
8
|
-
import { createHash } from 'crypto';
|
|
9
|
-
class MemoryCache {
|
|
10
|
-
cache = new Map();
|
|
11
|
-
maxSize;
|
|
12
|
-
constructor(maxSize = 100) {
|
|
13
|
-
this.maxSize = maxSize;
|
|
14
|
-
}
|
|
15
|
-
set(key, value, ttl = 3600000) {
|
|
16
|
-
// Remove oldest entries if cache is full
|
|
17
|
-
if (this.cache.size >= this.maxSize) {
|
|
18
|
-
const oldestKey = Array.from(this.cache.entries())
|
|
19
|
-
.sort((a, b) => a[1].timestamp - b[1].timestamp)[0][0];
|
|
20
|
-
this.cache.delete(oldestKey);
|
|
21
|
-
}
|
|
22
|
-
this.cache.set(key, {
|
|
23
|
-
key,
|
|
24
|
-
value,
|
|
25
|
-
timestamp: Date.now(),
|
|
26
|
-
expiresAt: Date.now() + ttl,
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
get(key) {
|
|
30
|
-
const entry = this.cache.get(key);
|
|
31
|
-
if (!entry) {
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
// Check if expired
|
|
35
|
-
if (Date.now() > entry.expiresAt) {
|
|
36
|
-
this.cache.delete(key);
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
return entry.value;
|
|
40
|
-
}
|
|
41
|
-
has(key) {
|
|
42
|
-
const entry = this.cache.get(key);
|
|
43
|
-
if (!entry)
|
|
44
|
-
return false;
|
|
45
|
-
if (Date.now() > entry.expiresAt) {
|
|
46
|
-
this.cache.delete(key);
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
clear() {
|
|
52
|
-
this.cache.clear();
|
|
53
|
-
}
|
|
54
|
-
size() {
|
|
55
|
-
return this.cache.size;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
// Global cache instance
|
|
59
|
-
export const memoryCache = new MemoryCache(200);
|
|
60
|
-
/**
|
|
61
|
-
* Generate cache key from parameters
|
|
62
|
-
*/
|
|
63
|
-
export function generateCacheKey(...args) {
|
|
64
|
-
const str = JSON.stringify(args);
|
|
65
|
-
return createHash('md5').update(str).digest('hex');
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Cache wrapper for async functions
|
|
69
|
-
*/
|
|
70
|
-
export async function cached(key, fn, ttl = 3600000 // 1 hour default
|
|
71
|
-
) {
|
|
72
|
-
// Check cache
|
|
73
|
-
const cached = memoryCache.get(key);
|
|
74
|
-
if (cached !== null) {
|
|
75
|
-
return cached;
|
|
76
|
-
}
|
|
77
|
-
// Execute and cache
|
|
78
|
-
const result = await fn();
|
|
79
|
-
memoryCache.set(key, result, ttl);
|
|
80
|
-
return result;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* File-based cache for embeddings
|
|
84
|
-
*/
|
|
85
|
-
function getCacheFilePath(key) {
|
|
86
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
87
|
-
const __dirname = dirname(__filename);
|
|
88
|
-
const agentDir = join(__dirname, '..');
|
|
89
|
-
const cacheDir = join(agentDir, 'data', 'cache');
|
|
90
|
-
if (!existsSync(cacheDir)) {
|
|
91
|
-
mkdirSync(cacheDir, { recursive: true });
|
|
92
|
-
}
|
|
93
|
-
return join(cacheDir, `${key}.json`);
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Cache embeddings to disk
|
|
97
|
-
*/
|
|
98
|
-
export function cacheEmbedding(key, embedding) {
|
|
99
|
-
try {
|
|
100
|
-
const cacheFile = getCacheFilePath(key);
|
|
101
|
-
const data = {
|
|
102
|
-
embedding,
|
|
103
|
-
timestamp: Date.now(),
|
|
104
|
-
};
|
|
105
|
-
writeFileSync(cacheFile, JSON.stringify(data), 'utf-8');
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
// Silently fail - caching is optional
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Get cached embedding from disk
|
|
113
|
-
*/
|
|
114
|
-
export function getCachedEmbedding(key) {
|
|
115
|
-
try {
|
|
116
|
-
const cacheFile = getCacheFilePath(key);
|
|
117
|
-
if (!existsSync(cacheFile)) {
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
const data = JSON.parse(readFileSync(cacheFile, 'utf-8'));
|
|
121
|
-
// Check if cache is still valid (24 hours)
|
|
122
|
-
const maxAge = 24 * 60 * 60 * 1000;
|
|
123
|
-
if (Date.now() - data.timestamp > maxAge) {
|
|
124
|
-
return null;
|
|
125
|
-
}
|
|
126
|
-
return data.embedding;
|
|
127
|
-
}
|
|
128
|
-
catch (error) {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Clear all caches
|
|
134
|
-
*/
|
|
135
|
-
export function clearAllCaches() {
|
|
136
|
-
memoryCache.clear();
|
|
137
|
-
// Clear file cache
|
|
138
|
-
try {
|
|
139
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
140
|
-
const __dirname = dirname(__filename);
|
|
141
|
-
const agentDir = join(__dirname, '..');
|
|
142
|
-
const cacheDir = join(agentDir, 'data', 'cache');
|
|
143
|
-
if (existsSync(cacheDir)) {
|
|
144
|
-
const files = readdirSync(cacheDir);
|
|
145
|
-
for (const file of files) {
|
|
146
|
-
if (file.endsWith('.json')) {
|
|
147
|
-
unlinkSync(join(cacheDir, file));
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
catch (error) {
|
|
153
|
-
// Silently fail
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Get cache statistics
|
|
158
|
-
*/
|
|
159
|
-
export function getCacheStats() {
|
|
160
|
-
let fileCacheCount = 0;
|
|
161
|
-
try {
|
|
162
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
163
|
-
const __dirname = dirname(__filename);
|
|
164
|
-
const agentDir = join(__dirname, '..');
|
|
165
|
-
const cacheDir = join(agentDir, 'data', 'cache');
|
|
166
|
-
if (existsSync(cacheDir)) {
|
|
167
|
-
const files = readdirSync(cacheDir);
|
|
168
|
-
fileCacheCount = files.filter((f) => f.endsWith('.json')).length;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
catch (error) {
|
|
172
|
-
// Ignore
|
|
173
|
-
}
|
|
174
|
-
return {
|
|
175
|
-
memorySize: memoryCache.size(),
|
|
176
|
-
memoryMaxSize: 200,
|
|
177
|
-
fileCacheCount,
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
//# sourceMappingURL=cache.js.map
|