codehere 0.2.1 → 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 +10 -49
  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 +334 -43
  33. package/dist/presentation/cli/commands/trust-command.js +115 -99
  34. package/dist/presentation/cli/error-display.js +17 -21
  35. package/dist/ui.js +17 -12
  36. package/package.json +35 -67
  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 -530
  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 -652
  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,314 +0,0 @@
1
- /**
2
- * Infrastructure: Agent-to-Agent (A2A) Communication Protocol
3
- * Enables Codehere to communicate with other AI agents
4
- * Standard protocol for agent collaboration and delegation
5
- *
6
- * Based on research: A2A Protocol (Linux Foundation/Google)
7
- * - 3-layer architecture: Canonical Data Model, Abstract Operations, Protocol Bindings
8
- * - Protocol Buffer messages for data integrity
9
- * - Supports JSON-RPC, gRPC, HTTP/REST bindings
10
- * - Agentic AI Metadata for capability discovery
11
- * - Asynchronous tasks with webhooks
12
- * - Server-Sent Events (SSE) for streaming
13
- * - Agent Opacity (black box service economy)
14
- *
15
- * Vision: Codehere as "The Memory Agent" - other agents call Codehere for memory/context
16
- * Research: See docs/NOTEBOOKLM_RESEARCH_PROMPTS.md - Prompt #5
17
- */
18
- /**
19
- * A2A Protocol Handler
20
- * Handles agent-to-agent communication
21
- */
22
- export class A2AProtocol {
23
- agentId;
24
- agentName;
25
- agents = new Map();
26
- messageHandlers = new Map();
27
- pendingRequests = new Map();
28
- constructor(agentId, agentName) {
29
- this.agentId = agentId;
30
- this.agentName = agentName;
31
- // Register self
32
- this.registerAgent({
33
- id: this.agentId,
34
- name: this.agentName,
35
- capabilities: ['memory_query', 'memory_store', 'code_search', 'code_explain', 'code_edit'],
36
- local: true,
37
- });
38
- }
39
- /**
40
- * Register an agent
41
- */
42
- registerAgent(agent) {
43
- this.agents.set(agent.id, agent);
44
- }
45
- /**
46
- * Unregister an agent
47
- */
48
- unregisterAgent(agentId) {
49
- this.agents.delete(agentId);
50
- }
51
- /**
52
- * Register a message handler
53
- */
54
- registerHandler(action, handler) {
55
- this.messageHandlers.set(action, handler);
56
- }
57
- /**
58
- * Send a request to another agent
59
- */
60
- async sendRequest(to, action, payload, timeout = 30000) {
61
- const agent = this.agents.get(to);
62
- if (!agent) {
63
- throw new Error(`Agent not found: ${to}`);
64
- }
65
- const messageId = this.generateMessageId();
66
- const request = {
67
- id: messageId,
68
- from: this.agentId,
69
- to,
70
- type: 'request',
71
- action,
72
- payload,
73
- timestamp: Date.now(),
74
- };
75
- // Create promise for response
76
- return new Promise((resolve, reject) => {
77
- // Set timeout
78
- const timeoutHandle = setTimeout(() => {
79
- this.pendingRequests.delete(messageId);
80
- reject(new Error(`Request timeout: ${action} to ${to}`));
81
- }, timeout);
82
- // Store pending request
83
- this.pendingRequests.set(messageId, {
84
- resolve,
85
- reject,
86
- timeout: timeoutHandle,
87
- });
88
- // Send request
89
- if (agent.local) {
90
- // Local agent - handle directly
91
- this.handleLocalRequest(request).catch(reject);
92
- }
93
- else if (agent.endpoint) {
94
- // Remote agent - send via HTTP
95
- this.sendHTTPRequest(agent.endpoint, request).catch(reject);
96
- }
97
- else {
98
- clearTimeout(timeoutHandle);
99
- this.pendingRequests.delete(messageId);
100
- reject(new Error(`Agent has no endpoint: ${to}`));
101
- }
102
- });
103
- }
104
- /**
105
- * Handle incoming message
106
- */
107
- async handleMessage(message) {
108
- if (message.type === 'request') {
109
- return await this.handleRequest(message);
110
- }
111
- else if (message.type === 'response') {
112
- return await this.handleResponse(message);
113
- }
114
- else if (message.type === 'notification') {
115
- return await this.handleNotification(message);
116
- }
117
- }
118
- /**
119
- * Handle incoming request
120
- */
121
- async handleRequest(request) {
122
- const handler = this.messageHandlers.get(request.action);
123
- if (!handler) {
124
- return {
125
- id: this.generateMessageId(),
126
- from: this.agentId,
127
- to: request.from,
128
- type: 'response',
129
- action: request.action,
130
- payload: {},
131
- timestamp: Date.now(),
132
- correlationId: request.id,
133
- success: false,
134
- error: `Unknown action: ${request.action}`,
135
- };
136
- }
137
- try {
138
- const response = await handler(request);
139
- response.correlationId = request.id;
140
- return response;
141
- }
142
- catch (error) {
143
- return {
144
- id: this.generateMessageId(),
145
- from: this.agentId,
146
- to: request.from,
147
- type: 'response',
148
- action: request.action,
149
- payload: {},
150
- timestamp: Date.now(),
151
- correlationId: request.id,
152
- success: false,
153
- error: error instanceof Error ? error.message : String(error),
154
- };
155
- }
156
- }
157
- /**
158
- * Handle incoming response
159
- */
160
- async handleResponse(response) {
161
- if (response.correlationId) {
162
- const pending = this.pendingRequests.get(response.correlationId);
163
- if (pending) {
164
- clearTimeout(pending.timeout);
165
- this.pendingRequests.delete(response.correlationId);
166
- if (response.success) {
167
- pending.resolve(response);
168
- }
169
- else {
170
- pending.reject(new Error(response.error || 'Request failed'));
171
- }
172
- }
173
- }
174
- }
175
- /**
176
- * Handle incoming notification
177
- */
178
- async handleNotification(notification) {
179
- // Handle notifications (e.g., agent discovery, status updates)
180
- // Can be extended for specific notification types
181
- }
182
- /**
183
- * Handle local request (same process)
184
- */
185
- async handleLocalRequest(request) {
186
- const response = await this.handleRequest(request);
187
- // Send response back
188
- await this.handleMessage(response);
189
- }
190
- /**
191
- * Send HTTP request to remote agent
192
- */
193
- async sendHTTPRequest(endpoint, request) {
194
- // TODO: Implement HTTP transport for remote agents
195
- // For now, local-only
196
- throw new Error('HTTP transport not yet implemented');
197
- }
198
- /**
199
- * Generate unique message ID
200
- */
201
- generateMessageId() {
202
- return `${this.agentId}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
203
- }
204
- /**
205
- * Get registered agents
206
- */
207
- getAgents() {
208
- return Array.from(this.agents.values());
209
- }
210
- /**
211
- * Discover agents (local discovery for now)
212
- */
213
- discoverAgents() {
214
- // For now, return registered agents
215
- // In future, can implement mDNS, service registry, etc.
216
- return this.getAgents();
217
- }
218
- }
219
- /**
220
- * Codehere A2A Agent Interface
221
- * Exposes Codehere capabilities to other agents
222
- */
223
- export class CodehereA2AAgent {
224
- protocol;
225
- container;
226
- constructor(container) {
227
- this.container = container;
228
- this.protocol = new A2AProtocol('codehere', 'Codehere');
229
- // Register handlers
230
- this.registerHandlers();
231
- }
232
- /**
233
- * Register A2A message handlers
234
- */
235
- registerHandlers() {
236
- // Memory query handler
237
- this.protocol.registerHandler('memory_query', async (request) => {
238
- const memoryStream = this.container.memoryStreamService;
239
- const memories = await memoryStream.retrieve(request.payload.query, request.payload.limit || 10);
240
- return {
241
- id: this.protocol['generateMessageId'](),
242
- from: 'codehere',
243
- to: request.from,
244
- type: 'response',
245
- action: 'memory_query',
246
- payload: {
247
- memories: memories.map((m) => ({
248
- type: m.type,
249
- description: m.description,
250
- timestamp: m.timestamp,
251
- importance: m.importance,
252
- })),
253
- },
254
- timestamp: Date.now(),
255
- correlationId: request.id,
256
- success: true,
257
- };
258
- });
259
- // Code search handler
260
- this.protocol.registerHandler('code_search', async (request) => {
261
- const useCase = this.container.askQuestionUseCase;
262
- const result = await useCase.execute({
263
- query: request.payload.query,
264
- maxResults: request.payload.maxResults || 10,
265
- });
266
- return {
267
- id: this.protocol['generateMessageId'](),
268
- from: 'codehere',
269
- to: request.from,
270
- type: 'response',
271
- action: 'code_search',
272
- payload: {
273
- chunks: result.chunks.map((chunk) => ({
274
- filepath: chunk.filepath,
275
- content: chunk.content.substring(0, 500),
276
- score: chunk.score,
277
- })),
278
- },
279
- timestamp: Date.now(),
280
- correlationId: request.id,
281
- success: true,
282
- };
283
- });
284
- // Memory store handler
285
- this.protocol.registerHandler('memory_store', async (request) => {
286
- const memoryStream = this.container.memoryStreamService;
287
- await memoryStream.recordObservation(request.payload.description, request.payload.metadata || {});
288
- return {
289
- id: this.protocol['generateMessageId'](),
290
- from: 'codehere',
291
- to: request.from,
292
- type: 'response',
293
- action: 'memory_store',
294
- payload: {},
295
- timestamp: Date.now(),
296
- correlationId: request.id,
297
- success: true,
298
- };
299
- });
300
- }
301
- /**
302
- * Get A2A protocol instance
303
- */
304
- getProtocol() {
305
- return this.protocol;
306
- }
307
- /**
308
- * Send request to another agent
309
- */
310
- async sendRequest(to, action, payload) {
311
- return await this.protocol.sendRequest(to, action, payload);
312
- }
313
- }
314
- //# sourceMappingURL=a2a-protocol.js.map
@@ -1,184 +0,0 @@
1
- /**
2
- * Infrastructure: MCP OAuth 2.1 Security Implementation
3
- * Implements OAuth 2.1 security for MCP servers
4
- *
5
- * Based on research findings:
6
- * - OAuth 2.1 with Dynamic Client Registration
7
- * - /.well-known/oauth-protected-resource endpoint
8
- * - M2M tokens for agent-to-agent communication
9
- * - Scoped permissions (least privilege)
10
- * - T-BAC (Task-Based Access Control) ready
11
- */
12
- /**
13
- * OAuth 2.1 Provider for MCP Server
14
- * Implements security as Resource Server
15
- */
16
- export class MCPOAuthProvider {
17
- scopes = new Map();
18
- authorizationServer;
19
- constructor(authorizationServer) {
20
- this.authorizationServer = authorizationServer;
21
- this.initializeDefaultScopes();
22
- }
23
- /**
24
- * Get OAuth-protected resource metadata
25
- * Must implement /.well-known/oauth-protected-resource endpoint
26
- */
27
- getMetadata() {
28
- return {
29
- issuer: this.authorizationServer || 'codehere',
30
- authorization_endpoint: `${this.authorizationServer || 'https://auth.codehere.io'}/oauth/authorize`,
31
- token_endpoint: `${this.authorizationServer || 'https://auth.codehere.io'}/oauth/token`,
32
- registration_endpoint: `${this.authorizationServer || 'https://auth.codehere.io'}/oauth/register`,
33
- introspection_endpoint: `${this.authorizationServer || 'https://auth.codehere.io'}/oauth/introspect`,
34
- revocation_endpoint: `${this.authorizationServer || 'https://auth.codehere.io'}/oauth/revoke`,
35
- scopes_supported: Array.from(this.scopes.keys()),
36
- response_types_supported: ['code'],
37
- grant_types_supported: [
38
- 'authorization_code',
39
- 'client_credentials', // For M2M tokens
40
- 'refresh_token',
41
- ],
42
- };
43
- }
44
- /**
45
- * Validate OAuth token and check permissions
46
- * Resource Server validates tokens from Authorization Server
47
- */
48
- async validateToken(token, requiredScope) {
49
- // TODO: Implement actual token validation with Authorization Server
50
- // For now, return mock validation
51
- // In production, call introspection endpoint or validate JWT
52
- // Mock: Check if token exists and has required scope
53
- if (!token || token === 'invalid') {
54
- return { valid: false, error: 'Invalid token' };
55
- }
56
- // Extract scopes from token (in production, decode JWT or introspect)
57
- const scopes = this.extractScopesFromToken(token);
58
- if (requiredScope && !scopes.includes(requiredScope)) {
59
- return {
60
- valid: false,
61
- error: `Missing required scope: ${requiredScope}`,
62
- scopes,
63
- };
64
- }
65
- return { valid: true, scopes };
66
- }
67
- /**
68
- * Check if token has required permission
69
- * Supports T-BAC (Task-Based Access Control)
70
- */
71
- hasPermission(token, task, tool) {
72
- // T-BAC: Check permission for specific task/tool combination
73
- // More granular than role-based access
74
- return this.validateToken(token).then(result => {
75
- if (!result.valid || !result.scopes) {
76
- return false;
77
- }
78
- // Check if scope allows this task/tool combination
79
- for (const scopeName of result.scopes) {
80
- const scope = this.scopes.get(scopeName);
81
- if (scope && scope.permissions.includes(`${task}:${tool || '*'}`)) {
82
- return true;
83
- }
84
- }
85
- return false;
86
- });
87
- }
88
- /**
89
- * Initialize default OAuth scopes for MCP tools
90
- */
91
- initializeDefaultScopes() {
92
- // Scope: codehere:ask - Query codebase
93
- this.scopes.set('codehere:ask', {
94
- name: 'codehere:ask',
95
- description: 'Ask questions about codebase using semantic search',
96
- permissions: ['query:codebase'],
97
- });
98
- // Scope: codehere:explain - Explain code files
99
- this.scopes.set('codehere:explain', {
100
- name: 'codehere:explain',
101
- description: 'Get detailed explanations of code files',
102
- permissions: ['read:code', 'explain:code'],
103
- });
104
- // Scope: codehere:edit - Edit files
105
- this.scopes.set('codehere:edit', {
106
- name: 'codehere:edit',
107
- description: 'Edit files with AI-generated changes',
108
- permissions: ['write:code', 'edit:code'],
109
- });
110
- // Scope: codehere:memory:read - Read memory
111
- this.scopes.set('codehere:memory:read', {
112
- name: 'codehere:memory:read',
113
- description: 'Query persistent episodic memory',
114
- permissions: ['read:memory'],
115
- });
116
- // Scope: codehere:memory:write - Write memory
117
- this.scopes.set('codehere:memory:write', {
118
- name: 'codehere:memory:write',
119
- description: 'Store information in persistent memory',
120
- permissions: ['write:memory'],
121
- });
122
- }
123
- /**
124
- * Extract scopes from token (mock implementation)
125
- * In production: Decode JWT or call introspection endpoint
126
- */
127
- extractScopesFromToken(token) {
128
- // Mock: For now, return all scopes if token is valid
129
- // In production, decode JWT claims or introspect token
130
- if (token.startsWith('codehere_')) {
131
- return Array.from(this.scopes.keys());
132
- }
133
- return [];
134
- }
135
- }
136
- /**
137
- * OAuth-protected MCP Server
138
- * Wraps MCP server with OAuth 2.1 security
139
- */
140
- export class OAuthProtectedMCPServer {
141
- mcpServer;
142
- oauthProvider;
143
- constructor(mcpServer, oauthProvider) {
144
- this.mcpServer = mcpServer;
145
- this.oauthProvider = oauthProvider;
146
- }
147
- /**
148
- * Get OAuth metadata endpoint
149
- * Implements /.well-known/oauth-protected-resource
150
- */
151
- getOAuthMetadata() {
152
- return this.oauthProvider.getMetadata();
153
- }
154
- /**
155
- * Call tool with OAuth validation
156
- */
157
- async callToolWithAuth(token, name, args) {
158
- // Determine required scope based on tool
159
- const scopeMap = {
160
- 'codehere_ask': 'codehere:ask',
161
- 'codehere_explain': 'codehere:explain',
162
- 'codehere_edit': 'codehere:edit',
163
- 'codehere_search': 'codehere:ask',
164
- 'codehere_memory_query': 'codehere:memory:read',
165
- };
166
- const requiredScope = scopeMap[name];
167
- // Validate token and scope
168
- const validation = await this.oauthProvider.validateToken(token, requiredScope);
169
- if (!validation.valid) {
170
- return {
171
- content: [
172
- {
173
- type: 'text',
174
- text: `Authorization failed: ${validation.error}`,
175
- },
176
- ],
177
- isError: true,
178
- };
179
- }
180
- // Call tool if authorized
181
- return await this.mcpServer.callTool(name, args);
182
- }
183
- }
184
- //# sourceMappingURL=mcp-oauth.js.map