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,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