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.
Files changed (235) hide show
  1. package/README.md +88 -68
  2. package/dist/domain/entities/task.js +4 -4
  3. package/dist/error-handler.js +4 -9
  4. package/dist/index.js +253 -1219
  5. package/dist/infrastructure/config/product-context.js +7 -6
  6. package/dist/infrastructure/hooks/claude-sdk-hook.js +335 -63
  7. package/dist/infrastructure/observability/execution-tracer.js +11 -6
  8. package/dist/infrastructure/orchestration/agent-adapter.js +13 -0
  9. package/dist/infrastructure/orchestration/agent-installer.js +101 -0
  10. package/dist/infrastructure/orchestration/agents-config-seed.js +56 -0
  11. package/dist/infrastructure/orchestration/aider-adapter.js +319 -0
  12. package/dist/infrastructure/orchestration/artifacts-extractor.js +175 -0
  13. package/dist/infrastructure/orchestration/claude-code-adapter.js +352 -0
  14. package/dist/infrastructure/orchestration/codex-adapter.js +310 -0
  15. package/dist/infrastructure/orchestration/generic-cli-adapter.js +553 -0
  16. package/dist/infrastructure/orchestration/opencode-adapter.js +275 -0
  17. package/dist/infrastructure/orchestration/progress-aggregator.js +189 -0
  18. package/dist/infrastructure/orchestration/readiness.js +106 -0
  19. package/dist/infrastructure/orchestration/session-manager.js +272 -0
  20. package/dist/infrastructure/orchestration/session-persistence.js +109 -0
  21. package/dist/infrastructure/protocols/mcp-helpers.js +10 -30
  22. package/dist/infrastructure/protocols/mcp-server-impl.js +359 -21
  23. package/dist/infrastructure/protocols/ui-page.js +1827 -0
  24. package/dist/infrastructure/security/file-collection.js +115 -0
  25. package/dist/infrastructure/security/trust-scorer.js +301 -56
  26. package/dist/infrastructure/storage/task-repository.js +8 -7
  27. package/dist/monitoring.js +9 -38
  28. package/dist/presentation/cli/commands/help-command.js +96 -139
  29. package/dist/presentation/cli/commands/hook-command.js +17 -24
  30. package/dist/presentation/cli/commands/report-command.js +59 -72
  31. package/dist/presentation/cli/commands/setup-command.js +4 -4
  32. package/dist/presentation/cli/commands/status-command.js +321 -30
  33. package/dist/presentation/cli/commands/trust-command.js +84 -72
  34. package/dist/presentation/cli/error-display.js +17 -21
  35. package/dist/ui.js +11 -11
  36. package/package.json +24 -62
  37. package/dist/agents/base.js +0 -101
  38. package/dist/agents/orchestrator-model-driven.js +0 -141
  39. package/dist/agents/react-orchestrator-agent.js +0 -54
  40. package/dist/application/agents/execution-agent.js +0 -508
  41. package/dist/application/agents/multi-agent-orchestrator.js +0 -295
  42. package/dist/application/agents/planning-agent.js +0 -433
  43. package/dist/application/agents/validation-agent.js +0 -317
  44. package/dist/application/architectures/plan-and-act.js +0 -242
  45. package/dist/application/index.js +0 -12
  46. package/dist/application/services/agent-factory.js +0 -28
  47. package/dist/application/services/dependency-container.js +0 -596
  48. package/dist/application/services/git-context-service.js +0 -83
  49. package/dist/application/services/intelligent-router.js +0 -934
  50. package/dist/application/services/tool-executor-service.js +0 -94
  51. package/dist/application/use-cases/ask-question-use-case.js +0 -338
  52. package/dist/application/use-cases/edit-file-use-case.js +0 -830
  53. package/dist/application/use-cases/explain-file-use-case.js +0 -50
  54. package/dist/application/use-cases/index-codebase-use-case.js +0 -113
  55. package/dist/application/use-cases/planning-use-case.js +0 -276
  56. package/dist/application/use-cases/react-orchestration-use-case.js +0 -329
  57. package/dist/application/use-cases/reflexion-use-case.js +0 -30
  58. package/dist/application/workflows/deterministic-workflows.js +0 -189
  59. package/dist/ast-parser.js +0 -331
  60. package/dist/cache.js +0 -180
  61. package/dist/chat.js +0 -251
  62. package/dist/code-analysis.js +0 -327
  63. package/dist/context.js +0 -187
  64. package/dist/docs.js +0 -146
  65. package/dist/domain/entities/code-chunk.js +0 -6
  66. package/dist/domain/entities/decision.js +0 -9
  67. package/dist/domain/entities/edit.js +0 -6
  68. package/dist/domain/entities/knowledge-node.js +0 -9
  69. package/dist/domain/entities/knowledge-preservation.js +0 -10
  70. package/dist/domain/entities/memory.js +0 -6
  71. package/dist/domain/entities/pattern.js +0 -7
  72. package/dist/domain/entities/plan.js +0 -6
  73. package/dist/domain/entities/query.js +0 -6
  74. package/dist/domain/errors/embeddings-not-found-error.js +0 -13
  75. package/dist/domain/index.js +0 -19
  76. package/dist/domain/interfaces/ai-service.interface.js +0 -6
  77. package/dist/domain/interfaces/code-analyzer.interface.js +0 -6
  78. package/dist/domain/interfaces/decision-repository.interface.js +0 -9
  79. package/dist/domain/interfaces/embedding-repository.interface.js +0 -6
  80. package/dist/domain/interfaces/knowledge-graph-repository.interface.js +0 -9
  81. package/dist/domain/interfaces/knowledge-preservation-repository.interface.js +0 -8
  82. package/dist/domain/interfaces/memory-repository.interface.js +0 -6
  83. package/dist/domain/interfaces/pattern-repository.interface.js +0 -6
  84. package/dist/domain/interfaces/verification-service.interface.js +0 -6
  85. package/dist/domain/services/cross-team-pattern-sharing.js +0 -125
  86. package/dist/domain/services/decision-recorder.js +0 -223
  87. package/dist/domain/services/decision-retriever.js +0 -133
  88. package/dist/domain/services/environment-mode-manager.js +0 -22
  89. package/dist/domain/services/graded-memory-activation.js +0 -69
  90. package/dist/domain/services/knowledge-access.js +0 -132
  91. package/dist/domain/services/knowledge-extractor.js +0 -247
  92. package/dist/domain/services/knowledge-graph-builder.js +0 -268
  93. package/dist/domain/services/knowledge-graph-query.js +0 -187
  94. package/dist/domain/services/memory-retriever.js +0 -82
  95. package/dist/domain/services/memory-synthesizer.js +0 -91
  96. package/dist/domain/services/pattern-extractor.js +0 -442
  97. package/dist/domain/services/query-intent-classifier.js +0 -140
  98. package/dist/domain/services/react-loop.js +0 -186
  99. package/dist/domain/services/risk-tier-detector.js +0 -78
  100. package/dist/edit.js +0 -319
  101. package/dist/embed.js +0 -459
  102. package/dist/formatter.js +0 -168
  103. package/dist/git.js +0 -198
  104. package/dist/infrastructure/ai/cohere-ai-service.js +0 -607
  105. package/dist/infrastructure/ai/command-r-evaluation.js +0 -206
  106. package/dist/infrastructure/ai/model-config.js +0 -84
  107. package/dist/infrastructure/ai/provider-ai-service.js +0 -477
  108. package/dist/infrastructure/cache/embedding-cache.js +0 -175
  109. package/dist/infrastructure/cache/query-result-cache.js +0 -66
  110. package/dist/infrastructure/cache/response-cache.js +0 -48
  111. package/dist/infrastructure/cache/security-scan-cache.js +0 -47
  112. package/dist/infrastructure/chunking/ast-code-chunker.js +0 -19
  113. package/dist/infrastructure/chunking/code-aware-chunker.js +0 -397
  114. package/dist/infrastructure/context/context-compressor.js +0 -329
  115. package/dist/infrastructure/context/conversation-context.js +0 -128
  116. package/dist/infrastructure/context/session-manager.js +0 -94
  117. package/dist/infrastructure/cost/cost-tracker.js +0 -360
  118. package/dist/infrastructure/file-scanner/file-scanner.js +0 -106
  119. package/dist/infrastructure/governance/nist-ai-rmf.js +0 -292
  120. package/dist/infrastructure/governance/policy-as-code.js +0 -258
  121. package/dist/infrastructure/governance/prompt-to-code-lineage.js +0 -239
  122. package/dist/infrastructure/index.js +0 -7
  123. package/dist/infrastructure/observability/prompt-versioner.js +0 -145
  124. package/dist/infrastructure/protocols/a2a-metadata.js +0 -137
  125. package/dist/infrastructure/protocols/a2a-protocol.js +0 -314
  126. package/dist/infrastructure/protocols/mcp-oauth.js +0 -184
  127. package/dist/infrastructure/protocols/mcp-server.js +0 -333
  128. package/dist/infrastructure/protocols/streaming-handler.js +0 -103
  129. package/dist/infrastructure/providers/cohere-provider.js +0 -444
  130. package/dist/infrastructure/providers/fake-provider.js +0 -130
  131. package/dist/infrastructure/providers/local-llm-provider.js +0 -330
  132. package/dist/infrastructure/providers/model-config.types.js +0 -9
  133. package/dist/infrastructure/providers/model-provider.interface.js +0 -8
  134. package/dist/infrastructure/providers/openai-provider.js +0 -413
  135. package/dist/infrastructure/providers/openrouter-provider.js +0 -399
  136. package/dist/infrastructure/providers/operation-provider-resolver.js +0 -105
  137. package/dist/infrastructure/providers/provider-config-loader.js +0 -120
  138. package/dist/infrastructure/providers/provider-registry.js +0 -88
  139. package/dist/infrastructure/safety/pattern-detector.js +0 -133
  140. package/dist/infrastructure/security/ai-sast-scanner.js +0 -290
  141. package/dist/infrastructure/security/docker-sandbox.js +0 -178
  142. package/dist/infrastructure/security/enhanced-security-gate.js +0 -151
  143. package/dist/infrastructure/security/license-scanner.js +0 -167
  144. package/dist/infrastructure/security/provider-bias-detector.js +0 -164
  145. package/dist/infrastructure/security/sandbox-executor.js +0 -64
  146. package/dist/infrastructure/serialization/toon-serializer.js +0 -119
  147. package/dist/infrastructure/storage/memory-stream-service.js +0 -204
  148. package/dist/infrastructure/storage/plan-repository.js +0 -96
  149. package/dist/infrastructure/storage/sqlite-decision-repository.js +0 -232
  150. package/dist/infrastructure/storage/sqlite-embedding-repository.js +0 -311
  151. package/dist/infrastructure/storage/sqlite-knowledge-graph-repository.js +0 -417
  152. package/dist/infrastructure/storage/sqlite-knowledge-preservation-repository.js +0 -230
  153. package/dist/infrastructure/storage/sqlite-memory-repository.js +0 -229
  154. package/dist/infrastructure/storage/sqlite-pattern-repository.js +0 -249
  155. package/dist/infrastructure/storage/task-helpers.js +0 -197
  156. package/dist/infrastructure/telemetry/telemetry-service.js +0 -167
  157. package/dist/infrastructure/ux/appropriate-friction.js +0 -213
  158. package/dist/infrastructure/ux/bi-directional-learning.js +0 -337
  159. package/dist/infrastructure/ux/capability-boundaries.js +0 -42
  160. package/dist/infrastructure/ux/comprehensive-formatter.js +0 -117
  161. package/dist/infrastructure/ux/contextual-feature-discovery.js +0 -10
  162. package/dist/infrastructure/ux/expectation-management.js +0 -327
  163. package/dist/infrastructure/ux/feature-discovery.js +0 -14
  164. package/dist/infrastructure/ux/feedback-prompt.js +0 -45
  165. package/dist/infrastructure/ux/hitl-validation.js +0 -297
  166. package/dist/infrastructure/ux/progress-indicator.js +0 -116
  167. package/dist/infrastructure/ux/progressive-disclosure.js +0 -236
  168. package/dist/infrastructure/ux/review-checkpoint.js +0 -72
  169. package/dist/infrastructure/ux/staged-feature-intro.js +0 -24
  170. package/dist/infrastructure/ux/stream-markdown.js +0 -151
  171. package/dist/infrastructure/ux/syntax-highlighter.js +0 -91
  172. package/dist/infrastructure/ux/team-standards.js +0 -196
  173. package/dist/infrastructure/ux/transparency.js +0 -71
  174. package/dist/infrastructure/validation/agent-feedback.js +0 -55
  175. package/dist/infrastructure/validation/agent-validation-helper.js +0 -137
  176. package/dist/infrastructure/validation/review-handler.js +0 -40
  177. package/dist/infrastructure/validation/summary-aggregator.js +0 -70
  178. package/dist/infrastructure/validation/summary-extractor.js +0 -45
  179. package/dist/infrastructure/validation/trace-summary.js +0 -52
  180. package/dist/infrastructure/verification/verification-service.js +0 -47
  181. package/dist/infrastructure/xai/attention-visualizer.js +0 -172
  182. package/dist/infrastructure/xai/cot-visualizer.js +0 -283
  183. package/dist/infrastructure/xai/decision-tree-log.js +0 -212
  184. package/dist/infrastructure/xai/interactive-xai.js +0 -260
  185. package/dist/infrastructure/xai/uncertainty-quantifier.js +0 -198
  186. package/dist/intelligent-retrieval.js +0 -272
  187. package/dist/intent/classifier.js +0 -2
  188. package/dist/intent/context.js +0 -2
  189. package/dist/iterative-refinement.js +0 -189
  190. package/dist/learning.js +0 -232
  191. package/dist/log.js +0 -31
  192. package/dist/migrate.js +0 -133
  193. package/dist/parallel-processor.js +0 -534
  194. package/dist/planner.js +0 -198
  195. package/dist/policy.js +0 -26
  196. package/dist/presentation/cli/commands/ask-command.js +0 -314
  197. package/dist/presentation/cli/commands/cost-command.js +0 -191
  198. package/dist/presentation/cli/commands/decision-command.js +0 -207
  199. package/dist/presentation/cli/commands/docs-command.js +0 -25
  200. package/dist/presentation/cli/commands/fix-command.js +0 -53
  201. package/dist/presentation/cli/commands/knowledge-command.js +0 -129
  202. package/dist/presentation/cli/commands/learning-dashboard-command.js +0 -183
  203. package/dist/presentation/cli/commands/models-command.js +0 -194
  204. package/dist/presentation/cli/commands/orchestrate-command.js +0 -207
  205. package/dist/presentation/cli/commands/plan-command.js +0 -246
  206. package/dist/presentation/cli/commands/product-command.js +0 -199
  207. package/dist/presentation/cli/commands/react-command.js +0 -181
  208. package/dist/presentation/cli/commands/review-command.js +0 -154
  209. package/dist/presentation/cli/commands/run-command.js +0 -188
  210. package/dist/presentation/cli/commands/smart-command.js +0 -395
  211. package/dist/presentation/cli/commands/suggest-command.js +0 -138
  212. package/dist/presentation/cli/commands/trace-command.js +0 -129
  213. package/dist/presentation/cli/commands/undo-command.js +0 -150
  214. package/dist/query-optimizer.js +0 -205
  215. package/dist/refactor.js +0 -116
  216. package/dist/review.js +0 -206
  217. package/dist/search.js +0 -163
  218. package/dist/session.js +0 -704
  219. package/dist/task-verification.js +0 -336
  220. package/dist/testgen.js +0 -166
  221. package/dist/token-optimizer.js +0 -277
  222. package/dist/tools/bash.js +0 -213
  223. package/dist/tools/edit.js +0 -235
  224. package/dist/tools/executor.js +0 -153
  225. package/dist/tools/git-tool.js +0 -292
  226. package/dist/tools/parser.js +0 -158
  227. package/dist/tools/registry.js +0 -302
  228. package/dist/tools/search.js +0 -100
  229. package/dist/types.js +0 -2
  230. package/dist/utils/check-api-status.js +0 -100
  231. package/dist/utils/diff-parser.js +0 -162
  232. package/dist/verification/backup.js +0 -259
  233. package/dist/verification/compiler.js +0 -264
  234. package/dist/verification/index.js +0 -273
  235. package/dist/verification/test-runner.js +0 -379
@@ -1,272 +0,0 @@
1
- /**
2
- * Intelligent Context Retrieval System
3
- * 10X effectiveness through smart context selection
4
- */
5
- import { parseFile, findCallers, findCallees, buildCallGraph } from './ast-parser.js';
6
- import { readFileSync, existsSync } from 'fs';
7
- import { join } from 'path';
8
- /**
9
- * Classify query intent
10
- */
11
- export function classifyQueryIntent(query) {
12
- const lowerQuery = query.toLowerCase();
13
- // Refactor intent
14
- if (lowerQuery.includes('refactor') || lowerQuery.includes('rename') ||
15
- lowerQuery.includes('extract') || lowerQuery.includes('move') ||
16
- lowerQuery.includes('restructure')) {
17
- return 'refactor';
18
- }
19
- // Debug intent
20
- if (lowerQuery.includes('bug') || lowerQuery.includes('error') ||
21
- lowerQuery.includes('fix') || lowerQuery.includes('issue') ||
22
- lowerQuery.includes('problem') || lowerQuery.includes('wrong')) {
23
- return 'debug';
24
- }
25
- // Implement intent
26
- if (lowerQuery.includes('implement') || lowerQuery.includes('create') ||
27
- lowerQuery.includes('add') || lowerQuery.includes('write') ||
28
- lowerQuery.includes('build')) {
29
- return 'implement';
30
- }
31
- // Find intent
32
- if (lowerQuery.includes('find') || lowerQuery.includes('where') ||
33
- lowerQuery.includes('locate') || lowerQuery.includes('search')) {
34
- return 'find';
35
- }
36
- // Modify intent
37
- if (lowerQuery.includes('modify') || lowerQuery.includes('change') ||
38
- lowerQuery.includes('update') || lowerQuery.includes('edit')) {
39
- return 'modify';
40
- }
41
- // Understand/Explain intent (default)
42
- if (lowerQuery.includes('how') || lowerQuery.includes('what') ||
43
- lowerQuery.includes('explain') || lowerQuery.includes('understand') ||
44
- lowerQuery.includes('does') || lowerQuery.includes('work')) {
45
- return 'explain';
46
- }
47
- return 'understand';
48
- }
49
- /**
50
- * Extract function/class names from query
51
- */
52
- export function extractSymbolNames(query) {
53
- // Look for function/class names (capitalized words, camelCase, etc.)
54
- const patterns = [
55
- /function\s+(\w+)/gi,
56
- /class\s+(\w+)/gi,
57
- /interface\s+(\w+)/gi,
58
- /type\s+(\w+)/gi,
59
- /const\s+(\w+)/gi,
60
- /let\s+(\w+)/gi,
61
- /var\s+(\w+)/gi,
62
- /([A-Z][a-zA-Z0-9]+)/g, // Capitalized words (likely class names)
63
- /([a-z][a-zA-Z0-9]*\(\))/g, // camelCase followed by () (likely function calls)
64
- ];
65
- const symbols = new Set();
66
- for (const pattern of patterns) {
67
- const matches = query.matchAll(pattern);
68
- for (const match of matches) {
69
- if (match[1]) {
70
- symbols.add(match[1]);
71
- }
72
- }
73
- }
74
- return Array.from(symbols);
75
- }
76
- /**
77
- * Get intelligent context based on query intent and code structure
78
- */
79
- export async function getIntelligentContext(query, options = {}) {
80
- const { maxTokens = 2000, baseDir = process.cwd() } = options;
81
- // Classify query intent
82
- const intent = classifyQueryIntent(query);
83
- // Extract symbol names from query
84
- const symbolNames = extractSymbolNames(query);
85
- // Get initial search results (more than needed, we'll filter)
86
- // Use searchSimilar directly - it's imported at top level now
87
- const { searchSimilar } = await import('./search.js');
88
- const initialResults = await searchSimilar(query, 30);
89
- if (initialResults.length === 0) {
90
- return {
91
- primaryChunks: [],
92
- relatedChunks: [],
93
- codeStructure: { symbols: [], relationships: [] },
94
- relevance: new Map(),
95
- tokenEstimate: 0,
96
- };
97
- }
98
- // Get unique filepaths
99
- const filepaths = [...new Set(initialResults.map(r => r.filepath))];
100
- // Parse files to get code structure
101
- const analyses = [];
102
- const filepathToAnalysis = new Map();
103
- for (const filepath of filepaths.slice(0, 10)) { // Limit to 10 files for performance
104
- const fullPath = join(baseDir, filepath);
105
- if (existsSync(fullPath)) {
106
- const analysis = parseFile(fullPath);
107
- if (analysis) {
108
- analyses.push(analysis);
109
- filepathToAnalysis.set(filepath, analysis);
110
- }
111
- }
112
- }
113
- // Build call graph
114
- const callGraph = buildCallGraph(analyses);
115
- // Find relevant symbols
116
- const relevantSymbols = new Set();
117
- for (const symbolName of symbolNames) {
118
- relevantSymbols.add(symbolName);
119
- // Add callers and callees
120
- const callers = findCallers(symbolName, callGraph);
121
- const callees = findCallees(symbolName, callGraph);
122
- callers.forEach(c => relevantSymbols.add(c));
123
- callees.forEach(c => relevantSymbols.add(c));
124
- }
125
- // Calculate relevance scores
126
- const relevance = new Map();
127
- for (const result of initialResults) {
128
- let score = result.score; // Base similarity score
129
- // Boost if file contains relevant symbols
130
- const analysis = filepathToAnalysis.get(result.filepath);
131
- if (analysis) {
132
- const hasRelevantSymbol = analysis.symbols.some(s => relevantSymbols.has(s.name) ||
133
- symbolNames.some(sn => s.name.includes(sn) || sn.includes(s.name)));
134
- if (hasRelevantSymbol) {
135
- score *= 1.5; // Boost relevance
136
- }
137
- // Boost if chunk contains symbol names
138
- const chunkHasSymbol = symbolNames.some(sn => result.content.toLowerCase().includes(sn.toLowerCase()));
139
- if (chunkHasSymbol) {
140
- score *= 1.3;
141
- }
142
- }
143
- // Intent-based scoring
144
- if (intent === 'refactor' || intent === 'modify') {
145
- // Prefer chunks with function/class definitions
146
- if (result.content.match(/(function|class|interface|type)\s+\w+/)) {
147
- score *= 1.2;
148
- }
149
- }
150
- if (intent === 'debug') {
151
- // Prefer chunks with error handling, try-catch, etc.
152
- if (result.content.match(/(try|catch|error|throw|if.*error)/i)) {
153
- score *= 1.2;
154
- }
155
- }
156
- relevance.set(result.filepath, score);
157
- }
158
- // Sort by relevance with source file priority
159
- const sortedResults = initialResults.sort((a, b) => {
160
- const scoreA = relevance.get(a.filepath) || a.score;
161
- const scoreB = relevance.get(b.filepath) || b.score;
162
- // Boost source files over documentation
163
- const isSourceA = /\.(ts|tsx|js|jsx)$/.test(a.filepath) && !/\.(md|txt)$/.test(a.filepath);
164
- const isSourceB = /\.(ts|tsx|js|jsx)$/.test(b.filepath) && !/\.(md|txt)$/.test(b.filepath);
165
- if (isSourceA && !isSourceB)
166
- return -1; // A is source, B is not
167
- if (!isSourceA && isSourceB)
168
- return 1; // B is source, A is not
169
- return scoreB - scoreA;
170
- });
171
- // Filter and optimize chunks based on intent
172
- const optimizedChunks = await optimizeChunks(sortedResults, intent, symbolNames, analyses, maxTokens);
173
- // Split into primary and related
174
- const primaryChunks = optimizedChunks.slice(0, Math.min(10, optimizedChunks.length));
175
- const relatedChunks = optimizedChunks.slice(primaryChunks.length);
176
- // Extract code structure info
177
- const allSymbols = analyses.flatMap(a => a.symbols.map(s => ({
178
- name: s.name,
179
- filepath: a.filepath,
180
- line: s.line,
181
- kind: s.kind,
182
- })));
183
- const allRelationships = analyses.flatMap(a => a.relationships.map(r => ({
184
- from: r.from,
185
- to: r.to,
186
- type: r.type,
187
- })));
188
- // Estimate tokens (rough: 1 token ≈ 4 characters)
189
- const tokenEstimate = optimizedChunks.reduce((sum, chunk) => sum + Math.ceil(chunk.content.length / 4), 0);
190
- return {
191
- primaryChunks,
192
- relatedChunks,
193
- codeStructure: {
194
- symbols: allSymbols,
195
- relationships: allRelationships,
196
- },
197
- relevance,
198
- tokenEstimate,
199
- };
200
- }
201
- /**
202
- * Optimize chunks based on intent and token limit
203
- */
204
- async function optimizeChunks(results, intent, symbolNames, analyses, maxTokens) {
205
- const optimized = [];
206
- let currentTokens = 0;
207
- // Create filepath to analysis map
208
- const filepathToAnalysis = new Map();
209
- for (const analysis of analyses) {
210
- filepathToAnalysis.set(analysis.filepath, analysis);
211
- }
212
- for (const result of results) {
213
- if (currentTokens >= maxTokens)
214
- break;
215
- const analysis = filepathToAnalysis.get(result.filepath);
216
- // For function/class queries, extract just the relevant function/class
217
- if (symbolNames.length > 0 && analysis) {
218
- const relevantSymbol = analysis.symbols.find(s => symbolNames.some(sn => s.name === sn || s.name.includes(sn)));
219
- if (relevantSymbol) {
220
- // Extract just the function/class, not the entire chunk
221
- const optimizedChunk = extractSymbolCode(result.filepath, relevantSymbol.line, relevantSymbol.kind);
222
- if (optimizedChunk) {
223
- const chunkTokens = Math.ceil(optimizedChunk.length / 4);
224
- if (currentTokens + chunkTokens <= maxTokens) {
225
- optimized.push({
226
- ...result,
227
- content: optimizedChunk,
228
- });
229
- currentTokens += chunkTokens;
230
- continue;
231
- }
232
- }
233
- }
234
- }
235
- // Otherwise, use the chunk but truncate if needed
236
- const chunkTokens = Math.ceil(result.content.length / 4);
237
- const remainingTokens = maxTokens - currentTokens;
238
- if (chunkTokens <= remainingTokens) {
239
- optimized.push(result);
240
- currentTokens += chunkTokens;
241
- }
242
- else if (remainingTokens > 100) {
243
- // Truncate chunk to fit
244
- const truncatedContent = result.content.substring(0, remainingTokens * 4);
245
- optimized.push({
246
- ...result,
247
- content: truncatedContent + '...',
248
- });
249
- currentTokens = maxTokens;
250
- break;
251
- }
252
- }
253
- return optimized;
254
- }
255
- /**
256
- * Extract code for a specific symbol (function, class, etc.)
257
- */
258
- function extractSymbolCode(filepath, line, kind) {
259
- try {
260
- const content = readFileSync(filepath, 'utf-8');
261
- const lines = content.split('\n');
262
- // For now, return a window around the symbol
263
- // TODO: Use AST to extract exact symbol boundaries
264
- const start = Math.max(0, line - 5);
265
- const end = Math.min(lines.length, line + 50);
266
- return lines.slice(start, end).join('\n');
267
- }
268
- catch {
269
- return null;
270
- }
271
- }
272
- //# sourceMappingURL=intelligent-retrieval.js.map
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=classifier.js.map
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=context.js.map
@@ -1,189 +0,0 @@
1
- /**
2
- * Iterative Refinement System
3
- * Feedback loop, self-correction, validation and retry, learn from mistakes
4
- */
5
- import { verifyTask } from './task-verification.js';
6
- import { generateDiff } from './chat.js';
7
- import { applyUnifiedDiff } from './edit.js';
8
- import { readFileSync, writeFileSync } from 'fs';
9
- import { container } from './application/services/dependency-container.js';
10
- /**
11
- * Refine task iteratively until it passes verification
12
- */
13
- export async function refineTask(filepath, instruction, requirements, maxIterations = 3) {
14
- const corrections = [];
15
- let currentContent = readFileSync(filepath, 'utf-8');
16
- let iteration = 0;
17
- while (iteration < maxIterations) {
18
- iteration++;
19
- // Generate diff
20
- const diff = await generateDiff(currentContent, instruction, filepath);
21
- // Apply diff
22
- const modifiedContent = applyDiff(currentContent, diff);
23
- // Create context
24
- const context = {
25
- filepath,
26
- originalContent: readFileSync(filepath, 'utf-8'), // Keep original
27
- modifiedContent,
28
- diff,
29
- instruction,
30
- requirements,
31
- };
32
- // Temporarily write modified content
33
- writeFileSync(filepath, modifiedContent, 'utf-8');
34
- try {
35
- // Verify
36
- const result = await verifyTask(context);
37
- if (result.success) {
38
- // Success!
39
- return {
40
- success: true,
41
- iterations: iteration,
42
- finalResult: result,
43
- corrections,
44
- };
45
- }
46
- // Failed - extract errors and try to correct
47
- const errors = result.errors.join('; ');
48
- // Use Reflexion to generate learning
49
- const reflexionUseCase = container.reflexionUseCase;
50
- const reflexionResult = await reflexionUseCase.execute({
51
- trajectory: {
52
- query: instruction,
53
- steps: corrections.map((c, i) => ({
54
- thought: { content: `Iteration ${i + 1}`, reasoning: c.correction },
55
- action: { type: 'tool', name: 'edit', parameters: {} },
56
- observation: { result: null, success: false, error: c.error },
57
- timestamp: new Date(),
58
- })),
59
- success: false,
60
- },
61
- reward: 0,
62
- errors: result.errors,
63
- });
64
- const correction = await generateCorrection(currentContent, modifiedContent, instruction, errors, requirements);
65
- corrections.push({
66
- iteration,
67
- error: errors,
68
- correction: reflexionResult.reflection || correction,
69
- });
70
- // Update instruction with reflection-based learning
71
- instruction = `${instruction}\n\nPrevious attempt failed with: ${errors}\nReflection: ${reflexionResult.reflection}\nCorrection: ${correction}`;
72
- currentContent = modifiedContent; // Use current as base for next iteration
73
- }
74
- catch (error) {
75
- // Error during verification - rollback and try again
76
- writeFileSync(filepath, currentContent, 'utf-8');
77
- const errorMsg = error instanceof Error ? error.message : String(error);
78
- const correction = await generateCorrection(currentContent, modifiedContent, instruction, errorMsg, requirements);
79
- corrections.push({
80
- iteration,
81
- error: errorMsg,
82
- correction,
83
- });
84
- instruction = `${instruction}\n\nError: ${errorMsg}\nCorrection: ${correction}`;
85
- }
86
- }
87
- // Max iterations reached - rollback
88
- writeFileSync(filepath, currentContent, 'utf-8');
89
- return {
90
- success: false,
91
- iterations: iteration,
92
- finalResult: {
93
- success: false,
94
- compiled: false,
95
- testsPassed: false,
96
- requirementsMet: false,
97
- errors: ['Max iterations reached'],
98
- warnings: [],
99
- rollbackRequired: true,
100
- },
101
- corrections,
102
- };
103
- }
104
- /**
105
- * Apply diff to content (uses edit.ts function)
106
- */
107
- function applyDiff(originalContent, diff) {
108
- return applyUnifiedDiff(originalContent, diff);
109
- }
110
- /**
111
- * Generate correction based on errors
112
- */
113
- async function generateCorrection(originalContent, modifiedContent, instruction, errors, requirements) {
114
- // Use AI to generate correction
115
- const { chatWithContext } = await import('./chat.js');
116
- const prompt = `The following code modification failed with errors:
117
-
118
- Original instruction: ${instruction}
119
- ${requirements ? `Requirements: ${requirements.join(', ')}` : ''}
120
-
121
- Errors encountered:
122
- ${errors}
123
-
124
- Original code:
125
- \`\`\`
126
- ${originalContent.substring(0, 1000)}
127
- \`\`\`
128
-
129
- Modified code (that failed):
130
- \`\`\`
131
- ${modifiedContent.substring(0, 1000)}
132
- \`\`\`
133
-
134
- Please provide a brief correction strategy to fix these errors. Be specific about what needs to change.`;
135
- const correction = await chatWithContext(prompt, [{
136
- filepath: 'correction',
137
- content: prompt,
138
- score: 1.0,
139
- }]);
140
- return correction;
141
- }
142
- /**
143
- * Learn from corrections and improve
144
- */
145
- export function learnFromCorrections(corrections) {
146
- const errorPatterns = new Map();
147
- const correctionPatterns = new Map();
148
- for (const correction of corrections) {
149
- // Extract error patterns
150
- const errorLower = correction.error.toLowerCase();
151
- if (errorLower.includes('type'))
152
- errorPatterns.set('type', (errorPatterns.get('type') || 0) + 1);
153
- if (errorLower.includes('syntax'))
154
- errorPatterns.set('syntax', (errorPatterns.get('syntax') || 0) + 1);
155
- if (errorLower.includes('undefined'))
156
- errorPatterns.set('undefined', (errorPatterns.get('undefined') || 0) + 1);
157
- if (errorLower.includes('import'))
158
- errorPatterns.set('import', (errorPatterns.get('import') || 0) + 1);
159
- // Extract correction patterns
160
- const correctionLower = correction.correction.toLowerCase();
161
- if (correctionLower.includes('add'))
162
- correctionPatterns.set('add', (correctionPatterns.get('add') || 0) + 1);
163
- if (correctionLower.includes('remove'))
164
- correctionPatterns.set('remove', (correctionPatterns.get('remove') || 0) + 1);
165
- if (correctionLower.includes('change'))
166
- correctionPatterns.set('change', (correctionPatterns.get('change') || 0) + 1);
167
- if (correctionLower.includes('fix'))
168
- correctionPatterns.set('fix', (correctionPatterns.get('fix') || 0) + 1);
169
- }
170
- const commonErrors = Array.from(errorPatterns.entries())
171
- .sort((a, b) => b[1] - a[1])
172
- .slice(0, 5)
173
- .map(([error]) => error);
174
- const improvementSuggestions = [];
175
- if (errorPatterns.get('type') && errorPatterns.get('type') > 1) {
176
- improvementSuggestions.push('Pay more attention to type definitions and type safety');
177
- }
178
- if (errorPatterns.get('syntax') && errorPatterns.get('syntax') > 1) {
179
- improvementSuggestions.push('Double-check syntax before generating code');
180
- }
181
- if (errorPatterns.get('import') && errorPatterns.get('import') > 1) {
182
- improvementSuggestions.push('Verify all imports are correct and available');
183
- }
184
- return {
185
- commonErrors,
186
- improvementSuggestions,
187
- };
188
- }
189
- //# sourceMappingURL=iterative-refinement.js.map