codehere 0.2.2 → 0.3.0-rc.10

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 (238) 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 +261 -1224
  5. package/dist/infrastructure/config/product-context.js +7 -6
  6. package/dist/infrastructure/hooks/claude-sdk-hook.js +348 -72
  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/conductor-adapter.js +340 -0
  16. package/dist/infrastructure/orchestration/generic-cli-adapter.js +553 -0
  17. package/dist/infrastructure/orchestration/opencode-adapter.js +275 -0
  18. package/dist/infrastructure/orchestration/progress-aggregator.js +189 -0
  19. package/dist/infrastructure/orchestration/readiness.js +106 -0
  20. package/dist/infrastructure/orchestration/session-manager.js +278 -0
  21. package/dist/infrastructure/orchestration/session-persistence.js +109 -0
  22. package/dist/infrastructure/protocols/mcp-helpers.js +10 -30
  23. package/dist/infrastructure/protocols/mcp-server-impl.js +359 -21
  24. package/dist/infrastructure/protocols/probe-port.js +36 -0
  25. package/dist/infrastructure/protocols/ui-page.js +1827 -0
  26. package/dist/infrastructure/security/file-collection.js +115 -0
  27. package/dist/infrastructure/security/trust-scorer.js +301 -56
  28. package/dist/infrastructure/storage/task-repository.js +8 -7
  29. package/dist/monitoring.js +9 -38
  30. package/dist/presentation/cli/commands/help-command.js +96 -139
  31. package/dist/presentation/cli/commands/hook-command.js +17 -24
  32. package/dist/presentation/cli/commands/report-command.js +59 -72
  33. package/dist/presentation/cli/commands/setup-command.js +4 -4
  34. package/dist/presentation/cli/commands/status-command.js +321 -30
  35. package/dist/presentation/cli/commands/trust-command.js +84 -72
  36. package/dist/presentation/cli/error-display.js +17 -21
  37. package/dist/presentation/cli/repl.js +474 -0
  38. package/dist/ui.js +11 -11
  39. package/package.json +24 -62
  40. package/dist/agents/base.js +0 -101
  41. package/dist/agents/orchestrator-model-driven.js +0 -141
  42. package/dist/agents/react-orchestrator-agent.js +0 -54
  43. package/dist/application/agents/execution-agent.js +0 -508
  44. package/dist/application/agents/multi-agent-orchestrator.js +0 -295
  45. package/dist/application/agents/planning-agent.js +0 -433
  46. package/dist/application/agents/validation-agent.js +0 -317
  47. package/dist/application/architectures/plan-and-act.js +0 -242
  48. package/dist/application/index.js +0 -12
  49. package/dist/application/services/agent-factory.js +0 -28
  50. package/dist/application/services/dependency-container.js +0 -596
  51. package/dist/application/services/git-context-service.js +0 -83
  52. package/dist/application/services/intelligent-router.js +0 -934
  53. package/dist/application/services/tool-executor-service.js +0 -94
  54. package/dist/application/use-cases/ask-question-use-case.js +0 -338
  55. package/dist/application/use-cases/edit-file-use-case.js +0 -830
  56. package/dist/application/use-cases/explain-file-use-case.js +0 -50
  57. package/dist/application/use-cases/index-codebase-use-case.js +0 -113
  58. package/dist/application/use-cases/planning-use-case.js +0 -276
  59. package/dist/application/use-cases/react-orchestration-use-case.js +0 -329
  60. package/dist/application/use-cases/reflexion-use-case.js +0 -30
  61. package/dist/application/workflows/deterministic-workflows.js +0 -189
  62. package/dist/ast-parser.js +0 -331
  63. package/dist/cache.js +0 -180
  64. package/dist/chat.js +0 -251
  65. package/dist/code-analysis.js +0 -327
  66. package/dist/context.js +0 -187
  67. package/dist/docs.js +0 -146
  68. package/dist/domain/entities/code-chunk.js +0 -6
  69. package/dist/domain/entities/decision.js +0 -9
  70. package/dist/domain/entities/edit.js +0 -6
  71. package/dist/domain/entities/knowledge-node.js +0 -9
  72. package/dist/domain/entities/knowledge-preservation.js +0 -10
  73. package/dist/domain/entities/memory.js +0 -6
  74. package/dist/domain/entities/pattern.js +0 -7
  75. package/dist/domain/entities/plan.js +0 -6
  76. package/dist/domain/entities/query.js +0 -6
  77. package/dist/domain/errors/embeddings-not-found-error.js +0 -13
  78. package/dist/domain/index.js +0 -19
  79. package/dist/domain/interfaces/ai-service.interface.js +0 -6
  80. package/dist/domain/interfaces/code-analyzer.interface.js +0 -6
  81. package/dist/domain/interfaces/decision-repository.interface.js +0 -9
  82. package/dist/domain/interfaces/embedding-repository.interface.js +0 -6
  83. package/dist/domain/interfaces/knowledge-graph-repository.interface.js +0 -9
  84. package/dist/domain/interfaces/knowledge-preservation-repository.interface.js +0 -8
  85. package/dist/domain/interfaces/memory-repository.interface.js +0 -6
  86. package/dist/domain/interfaces/pattern-repository.interface.js +0 -6
  87. package/dist/domain/interfaces/verification-service.interface.js +0 -6
  88. package/dist/domain/services/cross-team-pattern-sharing.js +0 -125
  89. package/dist/domain/services/decision-recorder.js +0 -223
  90. package/dist/domain/services/decision-retriever.js +0 -133
  91. package/dist/domain/services/environment-mode-manager.js +0 -22
  92. package/dist/domain/services/graded-memory-activation.js +0 -69
  93. package/dist/domain/services/knowledge-access.js +0 -132
  94. package/dist/domain/services/knowledge-extractor.js +0 -247
  95. package/dist/domain/services/knowledge-graph-builder.js +0 -268
  96. package/dist/domain/services/knowledge-graph-query.js +0 -187
  97. package/dist/domain/services/memory-retriever.js +0 -82
  98. package/dist/domain/services/memory-synthesizer.js +0 -91
  99. package/dist/domain/services/pattern-extractor.js +0 -442
  100. package/dist/domain/services/query-intent-classifier.js +0 -140
  101. package/dist/domain/services/react-loop.js +0 -186
  102. package/dist/domain/services/risk-tier-detector.js +0 -78
  103. package/dist/edit.js +0 -319
  104. package/dist/embed.js +0 -459
  105. package/dist/formatter.js +0 -168
  106. package/dist/git.js +0 -198
  107. package/dist/infrastructure/ai/cohere-ai-service.js +0 -607
  108. package/dist/infrastructure/ai/command-r-evaluation.js +0 -206
  109. package/dist/infrastructure/ai/model-config.js +0 -84
  110. package/dist/infrastructure/ai/provider-ai-service.js +0 -477
  111. package/dist/infrastructure/cache/embedding-cache.js +0 -175
  112. package/dist/infrastructure/cache/query-result-cache.js +0 -66
  113. package/dist/infrastructure/cache/response-cache.js +0 -48
  114. package/dist/infrastructure/cache/security-scan-cache.js +0 -47
  115. package/dist/infrastructure/chunking/ast-code-chunker.js +0 -19
  116. package/dist/infrastructure/chunking/code-aware-chunker.js +0 -397
  117. package/dist/infrastructure/context/context-compressor.js +0 -329
  118. package/dist/infrastructure/context/conversation-context.js +0 -128
  119. package/dist/infrastructure/context/session-manager.js +0 -94
  120. package/dist/infrastructure/cost/cost-tracker.js +0 -360
  121. package/dist/infrastructure/file-scanner/file-scanner.js +0 -106
  122. package/dist/infrastructure/governance/nist-ai-rmf.js +0 -292
  123. package/dist/infrastructure/governance/policy-as-code.js +0 -258
  124. package/dist/infrastructure/governance/prompt-to-code-lineage.js +0 -239
  125. package/dist/infrastructure/index.js +0 -7
  126. package/dist/infrastructure/observability/prompt-versioner.js +0 -145
  127. package/dist/infrastructure/protocols/a2a-metadata.js +0 -137
  128. package/dist/infrastructure/protocols/a2a-protocol.js +0 -314
  129. package/dist/infrastructure/protocols/mcp-oauth.js +0 -184
  130. package/dist/infrastructure/protocols/mcp-server.js +0 -333
  131. package/dist/infrastructure/protocols/streaming-handler.js +0 -103
  132. package/dist/infrastructure/providers/cohere-provider.js +0 -444
  133. package/dist/infrastructure/providers/fake-provider.js +0 -130
  134. package/dist/infrastructure/providers/local-llm-provider.js +0 -330
  135. package/dist/infrastructure/providers/model-config.types.js +0 -9
  136. package/dist/infrastructure/providers/model-provider.interface.js +0 -8
  137. package/dist/infrastructure/providers/openai-provider.js +0 -413
  138. package/dist/infrastructure/providers/openrouter-provider.js +0 -399
  139. package/dist/infrastructure/providers/operation-provider-resolver.js +0 -105
  140. package/dist/infrastructure/providers/provider-config-loader.js +0 -120
  141. package/dist/infrastructure/providers/provider-registry.js +0 -88
  142. package/dist/infrastructure/safety/pattern-detector.js +0 -133
  143. package/dist/infrastructure/security/ai-sast-scanner.js +0 -290
  144. package/dist/infrastructure/security/docker-sandbox.js +0 -178
  145. package/dist/infrastructure/security/enhanced-security-gate.js +0 -151
  146. package/dist/infrastructure/security/license-scanner.js +0 -167
  147. package/dist/infrastructure/security/provider-bias-detector.js +0 -164
  148. package/dist/infrastructure/security/sandbox-executor.js +0 -64
  149. package/dist/infrastructure/serialization/toon-serializer.js +0 -119
  150. package/dist/infrastructure/storage/memory-stream-service.js +0 -204
  151. package/dist/infrastructure/storage/plan-repository.js +0 -96
  152. package/dist/infrastructure/storage/sqlite-decision-repository.js +0 -232
  153. package/dist/infrastructure/storage/sqlite-embedding-repository.js +0 -311
  154. package/dist/infrastructure/storage/sqlite-knowledge-graph-repository.js +0 -417
  155. package/dist/infrastructure/storage/sqlite-knowledge-preservation-repository.js +0 -230
  156. package/dist/infrastructure/storage/sqlite-memory-repository.js +0 -229
  157. package/dist/infrastructure/storage/sqlite-pattern-repository.js +0 -249
  158. package/dist/infrastructure/storage/task-helpers.js +0 -197
  159. package/dist/infrastructure/telemetry/telemetry-service.js +0 -167
  160. package/dist/infrastructure/ux/appropriate-friction.js +0 -213
  161. package/dist/infrastructure/ux/bi-directional-learning.js +0 -337
  162. package/dist/infrastructure/ux/capability-boundaries.js +0 -42
  163. package/dist/infrastructure/ux/comprehensive-formatter.js +0 -117
  164. package/dist/infrastructure/ux/contextual-feature-discovery.js +0 -10
  165. package/dist/infrastructure/ux/expectation-management.js +0 -327
  166. package/dist/infrastructure/ux/feature-discovery.js +0 -14
  167. package/dist/infrastructure/ux/feedback-prompt.js +0 -45
  168. package/dist/infrastructure/ux/hitl-validation.js +0 -297
  169. package/dist/infrastructure/ux/progress-indicator.js +0 -116
  170. package/dist/infrastructure/ux/progressive-disclosure.js +0 -236
  171. package/dist/infrastructure/ux/review-checkpoint.js +0 -72
  172. package/dist/infrastructure/ux/staged-feature-intro.js +0 -24
  173. package/dist/infrastructure/ux/stream-markdown.js +0 -151
  174. package/dist/infrastructure/ux/syntax-highlighter.js +0 -91
  175. package/dist/infrastructure/ux/team-standards.js +0 -196
  176. package/dist/infrastructure/ux/transparency.js +0 -71
  177. package/dist/infrastructure/validation/agent-feedback.js +0 -55
  178. package/dist/infrastructure/validation/agent-validation-helper.js +0 -137
  179. package/dist/infrastructure/validation/review-handler.js +0 -40
  180. package/dist/infrastructure/validation/summary-aggregator.js +0 -70
  181. package/dist/infrastructure/validation/summary-extractor.js +0 -45
  182. package/dist/infrastructure/validation/trace-summary.js +0 -52
  183. package/dist/infrastructure/verification/verification-service.js +0 -47
  184. package/dist/infrastructure/xai/attention-visualizer.js +0 -172
  185. package/dist/infrastructure/xai/cot-visualizer.js +0 -283
  186. package/dist/infrastructure/xai/decision-tree-log.js +0 -212
  187. package/dist/infrastructure/xai/interactive-xai.js +0 -260
  188. package/dist/infrastructure/xai/uncertainty-quantifier.js +0 -198
  189. package/dist/intelligent-retrieval.js +0 -272
  190. package/dist/intent/classifier.js +0 -2
  191. package/dist/intent/context.js +0 -2
  192. package/dist/iterative-refinement.js +0 -189
  193. package/dist/learning.js +0 -232
  194. package/dist/log.js +0 -31
  195. package/dist/migrate.js +0 -133
  196. package/dist/parallel-processor.js +0 -534
  197. package/dist/planner.js +0 -198
  198. package/dist/policy.js +0 -26
  199. package/dist/presentation/cli/commands/ask-command.js +0 -314
  200. package/dist/presentation/cli/commands/cost-command.js +0 -191
  201. package/dist/presentation/cli/commands/decision-command.js +0 -207
  202. package/dist/presentation/cli/commands/docs-command.js +0 -25
  203. package/dist/presentation/cli/commands/fix-command.js +0 -53
  204. package/dist/presentation/cli/commands/knowledge-command.js +0 -129
  205. package/dist/presentation/cli/commands/learning-dashboard-command.js +0 -183
  206. package/dist/presentation/cli/commands/models-command.js +0 -194
  207. package/dist/presentation/cli/commands/orchestrate-command.js +0 -207
  208. package/dist/presentation/cli/commands/plan-command.js +0 -246
  209. package/dist/presentation/cli/commands/product-command.js +0 -199
  210. package/dist/presentation/cli/commands/react-command.js +0 -181
  211. package/dist/presentation/cli/commands/review-command.js +0 -154
  212. package/dist/presentation/cli/commands/run-command.js +0 -188
  213. package/dist/presentation/cli/commands/smart-command.js +0 -395
  214. package/dist/presentation/cli/commands/suggest-command.js +0 -138
  215. package/dist/presentation/cli/commands/trace-command.js +0 -129
  216. package/dist/presentation/cli/commands/undo-command.js +0 -150
  217. package/dist/query-optimizer.js +0 -205
  218. package/dist/refactor.js +0 -116
  219. package/dist/review.js +0 -206
  220. package/dist/search.js +0 -163
  221. package/dist/session.js +0 -704
  222. package/dist/task-verification.js +0 -336
  223. package/dist/testgen.js +0 -166
  224. package/dist/token-optimizer.js +0 -277
  225. package/dist/tools/bash.js +0 -213
  226. package/dist/tools/edit.js +0 -235
  227. package/dist/tools/executor.js +0 -153
  228. package/dist/tools/git-tool.js +0 -292
  229. package/dist/tools/parser.js +0 -158
  230. package/dist/tools/registry.js +0 -302
  231. package/dist/tools/search.js +0 -100
  232. package/dist/types.js +0 -2
  233. package/dist/utils/check-api-status.js +0 -100
  234. package/dist/utils/diff-parser.js +0 -162
  235. package/dist/verification/backup.js +0 -259
  236. package/dist/verification/compiler.js +0 -264
  237. package/dist/verification/index.js +0 -273
  238. 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