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,329 +0,0 @@
1
- /**
2
- * Application Use Case: ReActOrchestrationUseCase
3
- * Orchestrates ReAct loop with Memory Stream
4
- */
5
- import { ReActLoop } from '../../domain/services/react-loop.js';
6
- import { ToolExecutorService } from '../services/tool-executor-service.js';
7
- import { DecisionTreeLog } from '../../infrastructure/xai/decision-tree-log.js';
8
- export class ReActOrchestrationUseCase {
9
- aiService;
10
- memoryStream;
11
- toolExecutor;
12
- decisionTreeLog;
13
- uncertaintyQuantifier;
14
- cotVisualizer;
15
- attentionVisualizer;
16
- constructor(aiService, memoryStream, toolExecutor, decisionTreeLog, uncertaintyQuantifier, cotVisualizer, attentionVisualizer) {
17
- this.aiService = aiService;
18
- this.memoryStream = memoryStream;
19
- this.toolExecutor = toolExecutor || new ToolExecutorService();
20
- this.decisionTreeLog = decisionTreeLog || new DecisionTreeLog();
21
- this.uncertaintyQuantifier = uncertaintyQuantifier;
22
- this.cotVisualizer = cotVisualizer;
23
- this.attentionVisualizer = attentionVisualizer;
24
- }
25
- async execute(request) {
26
- const reactLoop = new ReActLoop(request.maxTurns || 20);
27
- this.decisionTreeLog.clear(); // Start fresh for this execution
28
- // 0. Create CoT trajectory for visualization (XAI Foundation - Research: CoT visualization)
29
- let cotTrajectory;
30
- if (this.cotVisualizer) {
31
- cotTrajectory = this.cotVisualizer.createTrajectory(request.query);
32
- }
33
- // 1. Retrieve relevant memories
34
- const memories = await this.memoryStream.retrieve(request.query, 10);
35
- // 2. Get available tools for context
36
- const { getToolRegistry } = await import('../../tools/registry.js');
37
- const toolRegistry = getToolRegistry();
38
- // getToolList() returns a string, getAll() returns Tool[] array
39
- const availableTools = toolRegistry.getAll().map(tool => tool.name); // Get array of tool names
40
- // 3. Log goal interpretation (XAI Foundation - Research: Full auditability required)
41
- const goalId = `goal-${Date.now()}`;
42
- const goalInterpretation = {
43
- parsedIntent: request.query,
44
- constraints: request.context?.constraints || [],
45
- dependencies: memories.map(m => m.description).slice(0, 3), // Top dependencies
46
- confidence: memories.length > 0 ? 0.8 : 0.6, // Higher confidence with memories
47
- };
48
- this.decisionTreeLog.logGoalInterpretation(goalId, goalInterpretation);
49
- // 4. Build context with memories and tools
50
- const context = {
51
- ...request.context,
52
- memories,
53
- query: request.query,
54
- availableTools, // Now guaranteed to be an array
55
- goalId, // Include goal ID for linking tool calls
56
- };
57
- // 4. Execute ReAct loop (with streaming support if handler provided)
58
- const generateThoughtWithStreaming = async (query, context, trajectory) => {
59
- const thought = await this.generateThought(query, context, trajectory);
60
- // Add thought to CoT trajectory (XAI Foundation - Research: CoT visualization)
61
- if (this.cotVisualizer && cotTrajectory) {
62
- this.cotVisualizer.addThought(cotTrajectory, thought.content, {
63
- reasoning: thought.reasoning,
64
- });
65
- }
66
- // Stream thought if handler provided
67
- if (request.streamHandler?.onThought) {
68
- request.streamHandler.onThought(thought.content);
69
- }
70
- return thought;
71
- };
72
- const generateActionWithStreaming = async (thought, context) => {
73
- const action = await this.generateAction(thought, context);
74
- // Add action to CoT trajectory (XAI Foundation - Research: CoT visualization)
75
- if (this.cotVisualizer && cotTrajectory) {
76
- const actionDesc = action.type === 'tool'
77
- ? `${action.type}: ${action.name}`
78
- : `${action.type}: ${action.answer || 'final answer'}`;
79
- this.cotVisualizer.addAction(cotTrajectory, actionDesc, {
80
- tool: action.type === 'tool' ? action.name : undefined,
81
- toolParams: action.type === 'tool' ? action.parameters : undefined,
82
- reasoning: `Action selected based on thought: ${thought.content.substring(0, 100)}`,
83
- });
84
- }
85
- // Stream action if handler provided
86
- if (request.streamHandler?.onAction) {
87
- const actionDesc = `${action.type}: ${action.name}`;
88
- request.streamHandler.onAction(actionDesc);
89
- }
90
- return action;
91
- };
92
- const executeActionWithStreaming = async (action) => {
93
- const startTime = Date.now();
94
- // Log tool rationale before execution (XAI Foundation - Research: Tool Rationale Logging)
95
- if (action.type === 'tool') {
96
- const toolId = `tool-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
97
- const toolRationale = {
98
- toolName: action.name,
99
- parameters: action.parameters || {},
100
- reasoning: `Tool selected based on thought and available context`,
101
- alternativeTools: Array.isArray(context.availableTools)
102
- ? context.availableTools.filter((t) => t !== action.name).slice(0, 3)
103
- : [],
104
- };
105
- this.decisionTreeLog.logToolExecution(toolId, toolRationale, context.goalId || goalId);
106
- // Store tool ID for linking observation
107
- action.toolId = toolId;
108
- }
109
- const observation = await this.toolExecutor.executeAction(action);
110
- const executionTime = Date.now() - startTime;
111
- // Update tool execution with raw output and execution time (XAI Foundation - Research: Raw Output Capture)
112
- if (action.type === 'tool' && action.toolId) {
113
- const toolId = action.toolId;
114
- // Re-log with execution results (Note: This is a simplified approach - in production, we'd update the node)
115
- const toolRationaleWithResults = {
116
- toolName: action.name,
117
- parameters: action.parameters || {},
118
- reasoning: `Tool executed successfully`,
119
- executionTime,
120
- rawOutput: observation.result, // Unaltered tool result for provenance
121
- };
122
- this.decisionTreeLog.logToolExecution(`tool-result-${toolId}`, toolRationaleWithResults, toolId);
123
- }
124
- // Add observation to CoT trajectory (XAI Foundation - Research: CoT visualization)
125
- if (this.cotVisualizer && cotTrajectory) {
126
- const obsContent = observation.success
127
- ? String(observation.result).substring(0, 500) // Truncate for display
128
- : `Error: ${observation.error || 'Failed'}`;
129
- this.cotVisualizer.addObservation(cotTrajectory, obsContent, {
130
- success: observation.success,
131
- executionTime,
132
- });
133
- }
134
- // Stream observation result if handler provided
135
- if (request.streamHandler?.onObservation) {
136
- const obsDesc = observation.success
137
- ? `✓ ${String(observation.result).substring(0, 100)}`
138
- : `✗ ${observation.error || 'Failed'}`;
139
- request.streamHandler.onObservation(obsDesc);
140
- }
141
- // Log error if execution failed (XAI Foundation - Research: Error Trace for Fault Attribution)
142
- if (!observation.success && action.toolId) {
143
- this.decisionTreeLog.logError(`error-${Date.now()}`, new Error(observation.error || 'Tool execution failed'), { action, observation }, action.toolId);
144
- // Add error to CoT trajectory
145
- if (this.cotVisualizer && cotTrajectory) {
146
- this.cotVisualizer.addError(cotTrajectory, observation.error || 'Tool execution failed', {
147
- tool: action.name,
148
- executionTime,
149
- });
150
- }
151
- }
152
- return observation;
153
- };
154
- const trajectory = await reactLoop.execute(request.query, context, generateThoughtWithStreaming, generateActionWithStreaming, executeActionWithStreaming, this.isFinalAnswer.bind(this));
155
- // 5. Record observation
156
- if (trajectory.success) {
157
- await this.memoryStream.recordObservation(`Successfully completed: ${request.query}`, { trajectory });
158
- }
159
- // Get complete execution tree for auditability (XAI Foundation - Research: Full auditability)
160
- const executionTree = this.decisionTreeLog.getExecutionTree();
161
- // Quantify uncertainty in final answer (XAI Foundation - Research: Uncertainty Quantification)
162
- let uncertainty;
163
- const finalAnswer = trajectory.finalAnswer || 'Max iterations reached';
164
- if (this.uncertaintyQuantifier && finalAnswer) {
165
- uncertainty = await this.uncertaintyQuantifier.quantifyUncertainty(request.query, finalAnswer, {
166
- chunks: memories.map(m => ({ content: m.description, filepath: m.filepath || '' })),
167
- });
168
- }
169
- // Finalize CoT trajectory (XAI Foundation - Research: CoT visualization)
170
- if (this.cotVisualizer && cotTrajectory) {
171
- this.cotVisualizer.completeTrajectory(cotTrajectory);
172
- // Update status based on trajectory success
173
- if (!trajectory.success) {
174
- cotTrajectory.status = 'failed';
175
- }
176
- }
177
- // Generate attention map from memories (XAI Foundation - Research: Attention visualization)
178
- let attentionMap;
179
- if (this.attentionVisualizer && memories.length > 0) {
180
- attentionMap = this.attentionVisualizer.generateAttentionMap(request.query, memories.map(m => ({
181
- filepath: m.filepath || '',
182
- content: m.description,
183
- score: m.relevanceScore || 0.5, // Default score if not available
184
- })));
185
- }
186
- return {
187
- trajectory,
188
- answer: finalAnswer,
189
- memoriesUsed: memories,
190
- decisionTree: executionTree, // Complete audit trail
191
- uncertainty, // XAI Foundation - Uncertainty quantification for transparency
192
- cotTrajectory, // XAI Foundation - Chain-of-Thought visualization
193
- attentionMap, // XAI Foundation - Attention visualization
194
- };
195
- }
196
- async generateThought(query, context, trajectory) {
197
- const memoryContext = context.memories?.length > 0
198
- ? `\n\nPrevious experiences:\n${context.memories.map((m) => `- ${m.description}`).join('\n')}`
199
- : '';
200
- const trajectoryContext = trajectory.steps.length > 0
201
- ? `\n\nPrevious steps:\n${trajectory.steps.map((s, i) => `${i + 1}. Thought: ${s.thought.content}\n Action: ${s.action.name}\n Result: ${s.observation.success ? 'Success' : 'Failed'}`).join('\n')}`
202
- : '';
203
- const prompt = `You are a reasoning agent. Generate a thought about how to solve this query.
204
-
205
- Query: ${query}${memoryContext}${trajectoryContext}
206
-
207
- Generate a thought that:
208
- 1. Analyzes the current situation
209
- 2. Considers what needs to be done next
210
- 3. Reasons about the best approach
211
-
212
- Thought:`;
213
- const response = await this.aiService.chat(prompt, [], context.memories || []);
214
- return {
215
- content: response,
216
- reasoning: response,
217
- };
218
- }
219
- async generateAction(thought, context) {
220
- const availableTools = context.availableTools || 'No tools available';
221
- const trajectory = context.trajectory || { steps: [] };
222
- const trajectoryContext = trajectory.steps.length > 0
223
- ? `\n\nPrevious actions:\n${trajectory.steps.map((s, i) => `${i + 1}. ${s.action.type}: ${s.action.name} - ${s.observation.success ? 'Success' : 'Failed: ' + (s.observation.error || 'Unknown')}`).join('\n')}`
224
- : '';
225
- const memoryContext = context.memories?.length > 0
226
- ? `\n\nRelevant past experiences:\n${context.memories.slice(0, 3).map((m) => `- ${m.description}`).join('\n')}`
227
- : '';
228
- const prompt = `You are a reasoning agent. Based on this thought, decide the next action.
229
-
230
- Thought: ${thought.content}${memoryContext}${trajectoryContext}
231
-
232
- Available tools:
233
- ${availableTools}
234
-
235
- CRITICAL: Respond with ONLY valid JSON in this exact format:
236
- {
237
- "type": "tool" | "agent" | "answer",
238
- "name": "tool_or_agent_name",
239
- "parameters": {...}
240
- }
241
-
242
- Examples:
243
- - Use search tool: {"type": "tool", "name": "search", "parameters": {"query": "authentication"}}
244
- - View file: {"type": "tool", "name": "edit_view", "parameters": {"filepath": "src/auth.ts"}}
245
- - Final answer: {"type": "answer", "name": "final", "parameters": {"answer": "The answer is..."}}
246
-
247
- JSON only, no other text:`;
248
- const response = await this.aiService.chat(prompt, [], context.memories || []);
249
- try {
250
- // Extract JSON - try multiple patterns
251
- let jsonStr = response.trim();
252
- // Remove markdown code blocks if present
253
- jsonStr = jsonStr.replace(/```json\n?/g, '').replace(/```\n?/g, '').trim();
254
- // Find JSON object
255
- const jsonMatch = jsonStr.match(/\{[\s\S]*\}/);
256
- if (jsonMatch) {
257
- const parsed = JSON.parse(jsonMatch[0]);
258
- if (parsed.type && parsed.name) {
259
- return {
260
- type: parsed.type,
261
- name: parsed.name,
262
- parameters: parsed.parameters || {},
263
- };
264
- }
265
- }
266
- }
267
- catch (e) {
268
- // Fall through to fallback
269
- }
270
- // Fallback: analyze thought to determine action
271
- const thoughtLower = thought.content.toLowerCase();
272
- if (thoughtLower.includes('search') || thoughtLower.includes('find') || thoughtLower.includes('look')) {
273
- // Extract query from thought
274
- const queryMatch = thought.content.match(/(?:search|find|look for|locate)\s+(.+)/i);
275
- return {
276
- type: 'tool',
277
- name: 'search',
278
- parameters: { query: queryMatch ? queryMatch[1] : thought.content },
279
- };
280
- }
281
- if (thoughtLower.includes('view') || thoughtLower.includes('read') || thoughtLower.includes('file')) {
282
- // Try to extract filepath
283
- const fileMatch = thought.content.match(/(?:view|read|file|open)\s+([^\s]+\.(ts|js|tsx|jsx|py|java|cpp))/i);
284
- if (fileMatch) {
285
- return {
286
- type: 'tool',
287
- name: 'edit_view',
288
- parameters: { filepath: fileMatch[1] },
289
- };
290
- }
291
- }
292
- if (thoughtLower.includes('answer') || thoughtLower.includes('complete') || thoughtLower.includes('done') || thoughtLower.includes('solution')) {
293
- return {
294
- type: 'answer',
295
- name: 'final_answer',
296
- parameters: { answer: thought.content },
297
- };
298
- }
299
- // Default: provide answer based on thought
300
- return {
301
- type: 'answer',
302
- name: 'direct_answer',
303
- parameters: { answer: thought.content },
304
- };
305
- }
306
- isFinalAnswer(observation) {
307
- // If observation failed, not a final answer
308
- if (!observation.success)
309
- return false;
310
- // Check if result is a meaningful string answer
311
- if (typeof observation.result === 'string') {
312
- const lower = observation.result.toLowerCase();
313
- const result = observation.result.trim();
314
- // Not a final answer if it's a tool execution message or empty
315
- if (result.length === 0)
316
- return false;
317
- if (lower.includes('executed') || lower.includes('tool') || lower.includes('found 0')) {
318
- return false;
319
- }
320
- // If it's a substantial answer (more than just status), it's final
321
- if (result.length > 20 && !lower.includes('error')) {
322
- return true;
323
- }
324
- }
325
- // Check if it's an answer type action result
326
- return false;
327
- }
328
- }
329
- //# sourceMappingURL=react-orchestration-use-case.js.map
@@ -1,30 +0,0 @@
1
- /**
2
- * Application Use Case: ReflexionUseCase
3
- * Implements Reflexion pattern - converts failures to learnings
4
- */
5
- export class ReflexionUseCase {
6
- aiService;
7
- memoryStream;
8
- constructor(aiService, memoryStream) {
9
- this.aiService = aiService;
10
- this.memoryStream = memoryStream;
11
- }
12
- async execute(request) {
13
- // Only generate reflection if failed (reward < 1)
14
- if (request.reward >= 1.0) {
15
- return {
16
- reflection: 'Task completed successfully',
17
- stored: false,
18
- };
19
- }
20
- // Generate reflection using self-reflection model
21
- const reflection = await this.aiService.generateReflection(request.trajectory, request.reward, request.errors);
22
- // Store reflection in memory stream
23
- await this.memoryStream.recordReflection(reflection, request.trajectory, request.reward, request.errors);
24
- return {
25
- reflection,
26
- stored: true,
27
- };
28
- }
29
- }
30
- //# sourceMappingURL=reflexion-use-case.js.map
@@ -1,189 +0,0 @@
1
- /**
2
- * Application: Deterministic Workflows
3
- * Replace overloaded prompts with deterministic workflows for common patterns
4
- * Faster, more predictable, lower cost than ReAct for common operations
5
- *
6
- * Based on ARCHITECTURAL_DECOMPOSITION.md analysis
7
- */
8
- /**
9
- * Deterministic workflow for explain operations
10
- * Faster than ReAct - direct path with minimal LLM calls
11
- */
12
- export class ExplainWorkflow {
13
- embeddingRepository;
14
- aiService;
15
- constructor(embeddingRepository, aiService) {
16
- this.embeddingRepository = embeddingRepository;
17
- this.aiService = aiService;
18
- }
19
- async execute(query, filepath) {
20
- try {
21
- // 1. Find file if not provided
22
- let resolvedFilepath = filepath;
23
- if (!resolvedFilepath) {
24
- const foundFilepath = await this.findFile(query);
25
- resolvedFilepath = foundFilepath || undefined;
26
- if (!resolvedFilepath) {
27
- return {
28
- result: null,
29
- success: false,
30
- error: 'Could not find file to explain',
31
- };
32
- }
33
- }
34
- // 2. Read file content
35
- const { readFileSync } = await import('fs');
36
- const { join } = await import('path');
37
- const fullPath = join(process.cwd(), resolvedFilepath);
38
- const content = readFileSync(fullPath, 'utf-8');
39
- // 3. Generate explanation (single LLM call)
40
- const explanation = await this.aiService.chat(`Explain this code file clearly and concisely:\n\n${content}\n\nFile: ${resolvedFilepath}`, [], []);
41
- return {
42
- result: {
43
- filepath: resolvedFilepath,
44
- explanation,
45
- },
46
- success: true,
47
- };
48
- }
49
- catch (error) {
50
- return {
51
- result: null,
52
- success: false,
53
- error: error instanceof Error ? error.message : String(error),
54
- };
55
- }
56
- }
57
- async findFile(query) {
58
- // Extract filepath from query or search
59
- // Simplified for now
60
- return null;
61
- }
62
- }
63
- /**
64
- * Deterministic workflow for find/search operations
65
- * Direct semantic search + answer generation
66
- */
67
- export class FindWorkflow {
68
- embeddingRepository;
69
- aiService;
70
- constructor(embeddingRepository, aiService) {
71
- this.embeddingRepository = embeddingRepository;
72
- this.aiService = aiService;
73
- }
74
- async execute(query, maxResults = 5) {
75
- try {
76
- // 1. Generate query embedding
77
- const queryEmbedding = await this.aiService.embedQuery?.(query) ||
78
- await this.aiService.embed(query);
79
- const embedding = Array.isArray(queryEmbedding[0]) ? queryEmbedding[0] : queryEmbedding;
80
- // 2. Search codebase
81
- const chunks = await this.embeddingRepository.searchWithEmbedding(embedding, maxResults);
82
- // 3. Generate concise answer (single LLM call)
83
- const contextText = chunks
84
- .slice(0, 3) // Top 3 for speed
85
- .map((chunk, idx) => `[${idx + 1}] ${chunk.filepath}:\n${chunk.content.substring(0, 300)}`)
86
- .join('\n\n');
87
- const answer = await this.aiService.chat(`Query: ${query}\n\nRelevant code:\n${contextText}\n\nProvide a concise answer.`, [], []);
88
- return {
89
- result: {
90
- answer,
91
- chunks: chunks.slice(0, 3),
92
- },
93
- success: true,
94
- };
95
- }
96
- catch (error) {
97
- return {
98
- result: null,
99
- success: false,
100
- error: error instanceof Error ? error.message : String(error),
101
- };
102
- }
103
- }
104
- }
105
- /**
106
- * Deterministic workflow for simple edits
107
- * Direct edit generation without multi-step reasoning
108
- */
109
- export class SimpleEditWorkflow {
110
- aiService;
111
- constructor(aiService) {
112
- this.aiService = aiService;
113
- }
114
- async execute(filepath, instruction) {
115
- try {
116
- // 1. Read file
117
- const { readFileSync } = await import('fs');
118
- const { join } = await import('path');
119
- const fullPath = join(process.cwd(), filepath);
120
- const content = readFileSync(fullPath, 'utf-8');
121
- // 2. Generate edit (single LLM call)
122
- const diff = await this.aiService.generateEdit(content, instruction, filepath);
123
- return {
124
- result: {
125
- filepath,
126
- diff,
127
- },
128
- success: true,
129
- };
130
- }
131
- catch (error) {
132
- return {
133
- result: null,
134
- success: false,
135
- error: error instanceof Error ? error.message : String(error),
136
- };
137
- }
138
- }
139
- }
140
- /**
141
- * Workflow Router
142
- * Routes to appropriate deterministic workflow
143
- */
144
- export class WorkflowRouter {
145
- explainWorkflow;
146
- findWorkflow;
147
- simpleEditWorkflow;
148
- constructor(explainWorkflow, findWorkflow, simpleEditWorkflow) {
149
- this.explainWorkflow = explainWorkflow;
150
- this.findWorkflow = findWorkflow;
151
- this.simpleEditWorkflow = simpleEditWorkflow;
152
- }
153
- async route(request) {
154
- switch (request.type) {
155
- case 'explain':
156
- return await this.explainWorkflow.execute(request.query);
157
- case 'find':
158
- return await this.findWorkflow.execute(request.query);
159
- case 'simple-edit':
160
- // Extract filepath and instruction
161
- const { filepath, instruction } = this.parseEditQuery(request.query);
162
- if (!filepath || !instruction) {
163
- return {
164
- result: null,
165
- success: false,
166
- error: 'Could not extract filepath and instruction',
167
- };
168
- }
169
- return await this.simpleEditWorkflow.execute(filepath, instruction);
170
- case 'search':
171
- return await this.findWorkflow.execute(request.query);
172
- default:
173
- return {
174
- result: null,
175
- success: false,
176
- error: `Unknown workflow type: ${request.type}`,
177
- };
178
- }
179
- }
180
- parseEditQuery(query) {
181
- // Extract filepath and instruction from query
182
- // Simplified - should use IntelligentRouter's extraction logic
183
- const filepathMatch = query.match(/(?:file|in|at)\s+([^\s]+\.(ts|js|tsx|jsx|py|java|cpp|go|rs|rb|php|vue|svelte|html|css|json|yaml|yml|md|txt|sh|bash))/i);
184
- const filepath = filepathMatch ? filepathMatch[1] : null;
185
- const instruction = query.replace(new RegExp(filepath || '', 'gi'), '').trim();
186
- return { filepath, instruction };
187
- }
188
- }
189
- //# sourceMappingURL=deterministic-workflows.js.map