modular-studio 0.2.0

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 (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +261 -0
  3. package/dist/assets/graphPopulator-C6jg83nL.js +1 -0
  4. package/dist/assets/index-CXhIX28x.js +634 -0
  5. package/dist/assets/index-CeNF0r-K.css +1 -0
  6. package/dist/assets/jszip.min-BlpRodxc.js +2 -0
  7. package/dist/index.html +16 -0
  8. package/dist/vite.svg +1 -0
  9. package/dist-server/bin/modular-mcp.d.ts +8 -0
  10. package/dist-server/bin/modular-mcp.d.ts.map +1 -0
  11. package/dist-server/bin/modular-mcp.js +158 -0
  12. package/dist-server/bin/modular-mcp.js.map +1 -0
  13. package/dist-server/bin/modular-studio.d.ts +3 -0
  14. package/dist-server/bin/modular-studio.d.ts.map +1 -0
  15. package/dist-server/bin/modular-studio.js +63 -0
  16. package/dist-server/bin/modular-studio.js.map +1 -0
  17. package/dist-server/server/config.d.ts +4 -0
  18. package/dist-server/server/config.d.ts.map +1 -0
  19. package/dist-server/server/config.js +33 -0
  20. package/dist-server/server/config.js.map +1 -0
  21. package/dist-server/server/data/mcp-clients.json +5 -0
  22. package/dist-server/server/index.d.ts +3 -0
  23. package/dist-server/server/index.d.ts.map +1 -0
  24. package/dist-server/server/index.js +174 -0
  25. package/dist-server/server/index.js.map +1 -0
  26. package/dist-server/server/mcp/manager.d.ts +47 -0
  27. package/dist-server/server/mcp/manager.d.ts.map +1 -0
  28. package/dist-server/server/mcp/manager.js +203 -0
  29. package/dist-server/server/mcp/manager.js.map +1 -0
  30. package/dist-server/server/mcp/modular-server.d.ts +55 -0
  31. package/dist-server/server/mcp/modular-server.d.ts.map +1 -0
  32. package/dist-server/server/mcp/modular-server.js +492 -0
  33. package/dist-server/server/mcp/modular-server.js.map +1 -0
  34. package/dist-server/server/mcp/transport.d.ts +29 -0
  35. package/dist-server/server/mcp/transport.d.ts.map +1 -0
  36. package/dist-server/server/mcp/transport.js +61 -0
  37. package/dist-server/server/mcp/transport.js.map +1 -0
  38. package/dist-server/server/routes/agent-sdk.d.ts +3 -0
  39. package/dist-server/server/routes/agent-sdk.d.ts.map +1 -0
  40. package/dist-server/server/routes/agent-sdk.js +99 -0
  41. package/dist-server/server/routes/agent-sdk.js.map +1 -0
  42. package/dist-server/server/routes/agents.d.ts +10 -0
  43. package/dist-server/server/routes/agents.d.ts.map +1 -0
  44. package/dist-server/server/routes/agents.js +61 -0
  45. package/dist-server/server/routes/agents.js.map +1 -0
  46. package/dist-server/server/routes/auth-codex.d.ts +3 -0
  47. package/dist-server/server/routes/auth-codex.d.ts.map +1 -0
  48. package/dist-server/server/routes/auth-codex.js +51 -0
  49. package/dist-server/server/routes/auth-codex.js.map +1 -0
  50. package/dist-server/server/routes/capabilities.d.ts +3 -0
  51. package/dist-server/server/routes/capabilities.d.ts.map +1 -0
  52. package/dist-server/server/routes/capabilities.js +32 -0
  53. package/dist-server/server/routes/capabilities.js.map +1 -0
  54. package/dist-server/server/routes/claude-config.d.ts +3 -0
  55. package/dist-server/server/routes/claude-config.d.ts.map +1 -0
  56. package/dist-server/server/routes/claude-config.js +146 -0
  57. package/dist-server/server/routes/claude-config.js.map +1 -0
  58. package/dist-server/server/routes/connectors.d.ts +12 -0
  59. package/dist-server/server/routes/connectors.d.ts.map +1 -0
  60. package/dist-server/server/routes/connectors.js +325 -0
  61. package/dist-server/server/routes/connectors.js.map +1 -0
  62. package/dist-server/server/routes/embeddings.d.ts +6 -0
  63. package/dist-server/server/routes/embeddings.d.ts.map +1 -0
  64. package/dist-server/server/routes/embeddings.js +130 -0
  65. package/dist-server/server/routes/embeddings.js.map +1 -0
  66. package/dist-server/server/routes/health.d.ts +9 -0
  67. package/dist-server/server/routes/health.d.ts.map +1 -0
  68. package/dist-server/server/routes/health.js +284 -0
  69. package/dist-server/server/routes/health.js.map +1 -0
  70. package/dist-server/server/routes/knowledge.d.ts +3 -0
  71. package/dist-server/server/routes/knowledge.d.ts.map +1 -0
  72. package/dist-server/server/routes/knowledge.js +534 -0
  73. package/dist-server/server/routes/knowledge.js.map +1 -0
  74. package/dist-server/server/routes/llm.d.ts +3 -0
  75. package/dist-server/server/routes/llm.d.ts.map +1 -0
  76. package/dist-server/server/routes/llm.js +200 -0
  77. package/dist-server/server/routes/llm.js.map +1 -0
  78. package/dist-server/server/routes/mcp-oauth.d.ts +12 -0
  79. package/dist-server/server/routes/mcp-oauth.d.ts.map +1 -0
  80. package/dist-server/server/routes/mcp-oauth.js +137 -0
  81. package/dist-server/server/routes/mcp-oauth.js.map +1 -0
  82. package/dist-server/server/routes/mcp.d.ts +3 -0
  83. package/dist-server/server/routes/mcp.d.ts.map +1 -0
  84. package/dist-server/server/routes/mcp.js +177 -0
  85. package/dist-server/server/routes/mcp.js.map +1 -0
  86. package/dist-server/server/routes/pipeline.d.ts +45 -0
  87. package/dist-server/server/routes/pipeline.d.ts.map +1 -0
  88. package/dist-server/server/routes/pipeline.js +483 -0
  89. package/dist-server/server/routes/pipeline.js.map +1 -0
  90. package/dist-server/server/routes/providers.d.ts +3 -0
  91. package/dist-server/server/routes/providers.d.ts.map +1 -0
  92. package/dist-server/server/routes/providers.js +204 -0
  93. package/dist-server/server/routes/providers.js.map +1 -0
  94. package/dist-server/server/routes/qualification.d.ts +3 -0
  95. package/dist-server/server/routes/qualification.d.ts.map +1 -0
  96. package/dist-server/server/routes/qualification.js +105 -0
  97. package/dist-server/server/routes/qualification.js.map +1 -0
  98. package/dist-server/server/routes/repo-index.d.ts +4 -0
  99. package/dist-server/server/routes/repo-index.d.ts.map +1 -0
  100. package/dist-server/server/routes/repo-index.js +318 -0
  101. package/dist-server/server/routes/repo-index.js.map +1 -0
  102. package/dist-server/server/routes/runtime.d.ts +3 -0
  103. package/dist-server/server/routes/runtime.d.ts.map +1 -0
  104. package/dist-server/server/routes/runtime.js +122 -0
  105. package/dist-server/server/routes/runtime.js.map +1 -0
  106. package/dist-server/server/routes/skills-search.d.ts +3 -0
  107. package/dist-server/server/routes/skills-search.d.ts.map +1 -0
  108. package/dist-server/server/routes/skills-search.js +198 -0
  109. package/dist-server/server/routes/skills-search.js.map +1 -0
  110. package/dist-server/server/routes/worktrees.d.ts +3 -0
  111. package/dist-server/server/routes/worktrees.d.ts.map +1 -0
  112. package/dist-server/server/routes/worktrees.js +70 -0
  113. package/dist-server/server/routes/worktrees.js.map +1 -0
  114. package/dist-server/server/services/__tests__/embeddingService.test.d.ts +5 -0
  115. package/dist-server/server/services/__tests__/embeddingService.test.d.ts.map +1 -0
  116. package/dist-server/server/services/__tests__/embeddingService.test.js +233 -0
  117. package/dist-server/server/services/__tests__/embeddingService.test.js.map +1 -0
  118. package/dist-server/server/services/agentRunner.d.ts +46 -0
  119. package/dist-server/server/services/agentRunner.d.ts.map +1 -0
  120. package/dist-server/server/services/agentRunner.js +295 -0
  121. package/dist-server/server/services/agentRunner.js.map +1 -0
  122. package/dist-server/server/services/agentStore.d.ts +40 -0
  123. package/dist-server/server/services/agentStore.d.ts.map +1 -0
  124. package/dist-server/server/services/agentStore.js +62 -0
  125. package/dist-server/server/services/agentStore.js.map +1 -0
  126. package/dist-server/server/services/contentStore.d.ts +32 -0
  127. package/dist-server/server/services/contentStore.d.ts.map +1 -0
  128. package/dist-server/server/services/contentStore.js +68 -0
  129. package/dist-server/server/services/contentStore.js.map +1 -0
  130. package/dist-server/server/services/embeddingService.d.ts +53 -0
  131. package/dist-server/server/services/embeddingService.d.ts.map +1 -0
  132. package/dist-server/server/services/embeddingService.js +199 -0
  133. package/dist-server/server/services/embeddingService.js.map +1 -0
  134. package/dist-server/server/services/factExtractor.d.ts +14 -0
  135. package/dist-server/server/services/factExtractor.d.ts.map +1 -0
  136. package/dist-server/server/services/factExtractor.js +126 -0
  137. package/dist-server/server/services/factExtractor.js.map +1 -0
  138. package/dist-server/server/services/githubIndexer.d.ts +59 -0
  139. package/dist-server/server/services/githubIndexer.d.ts.map +1 -0
  140. package/dist-server/server/services/githubIndexer.js +183 -0
  141. package/dist-server/server/services/githubIndexer.js.map +1 -0
  142. package/dist-server/server/services/mcpOAuth.d.ts +32 -0
  143. package/dist-server/server/services/mcpOAuth.d.ts.map +1 -0
  144. package/dist-server/server/services/mcpOAuth.js +264 -0
  145. package/dist-server/server/services/mcpOAuth.js.map +1 -0
  146. package/dist-server/server/services/memoryScorer.d.ts +19 -0
  147. package/dist-server/server/services/memoryScorer.d.ts.map +1 -0
  148. package/dist-server/server/services/memoryScorer.js +147 -0
  149. package/dist-server/server/services/memoryScorer.js.map +1 -0
  150. package/dist-server/server/services/repoIndexer.d.ts +91 -0
  151. package/dist-server/server/services/repoIndexer.d.ts.map +1 -0
  152. package/dist-server/server/services/repoIndexer.js +512 -0
  153. package/dist-server/server/services/repoIndexer.js.map +1 -0
  154. package/dist-server/server/services/teamRunner.d.ts +39 -0
  155. package/dist-server/server/services/teamRunner.d.ts.map +1 -0
  156. package/dist-server/server/services/teamRunner.js +76 -0
  157. package/dist-server/server/services/teamRunner.js.map +1 -0
  158. package/dist-server/server/services/worktreeManager.d.ts +27 -0
  159. package/dist-server/server/services/worktreeManager.d.ts.map +1 -0
  160. package/dist-server/server/services/worktreeManager.js +107 -0
  161. package/dist-server/server/services/worktreeManager.js.map +1 -0
  162. package/dist-server/server/types.d.ts +30 -0
  163. package/dist-server/server/types.d.ts.map +1 -0
  164. package/dist-server/server/types.js +2 -0
  165. package/dist-server/server/types.js.map +1 -0
  166. package/dist-server/server/utils/pathSecurity.d.ts +34 -0
  167. package/dist-server/server/utils/pathSecurity.d.ts.map +1 -0
  168. package/dist-server/server/utils/pathSecurity.js +78 -0
  169. package/dist-server/server/utils/pathSecurity.js.map +1 -0
  170. package/dist-server/src/services/budgetAllocator.d.ts +37 -0
  171. package/dist-server/src/services/budgetAllocator.d.ts.map +1 -0
  172. package/dist-server/src/services/budgetAllocator.js +120 -0
  173. package/dist-server/src/services/budgetAllocator.js.map +1 -0
  174. package/dist-server/src/services/contradictionDetector.d.ts +18 -0
  175. package/dist-server/src/services/contradictionDetector.d.ts.map +1 -0
  176. package/dist-server/src/services/contradictionDetector.js +111 -0
  177. package/dist-server/src/services/contradictionDetector.js.map +1 -0
  178. package/dist-server/src/services/treeIndexer.d.ts +91 -0
  179. package/dist-server/src/services/treeIndexer.d.ts.map +1 -0
  180. package/dist-server/src/services/treeIndexer.js +289 -0
  181. package/dist-server/src/services/treeIndexer.js.map +1 -0
  182. package/dist-server/src/store/knowledgeBase.d.ts +130 -0
  183. package/dist-server/src/store/knowledgeBase.d.ts.map +1 -0
  184. package/dist-server/src/store/knowledgeBase.js +299 -0
  185. package/dist-server/src/store/knowledgeBase.js.map +1 -0
  186. package/dist-server/tsconfig.server.tsbuildinfo +1 -0
  187. package/package.json +92 -0
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Test suite for the embedding service
3
+ */
4
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
5
+ import embeddingService from '../embeddingService.js';
6
+ // Mock the transformers.js pipeline
7
+ const mockPipeline = vi.fn();
8
+ vi.mock('@huggingface/transformers', () => ({
9
+ pipeline: mockPipeline,
10
+ env: {
11
+ allowLocalModels: false,
12
+ useBrowserCache: false,
13
+ },
14
+ }));
15
+ describe('EmbeddingService', () => {
16
+ const mockModel = vi.fn();
17
+ beforeEach(() => {
18
+ vi.clearAllMocks();
19
+ mockPipeline.mockResolvedValue(mockModel);
20
+ });
21
+ describe('initialize', () => {
22
+ it('should initialize the model successfully', async () => {
23
+ await embeddingService.initialize();
24
+ expect(mockPipeline).toHaveBeenCalledWith('feature-extraction', 'Xenova/all-MiniLM-L6-v2', { quantized: false });
25
+ expect(embeddingService.isReady()).toBe(true);
26
+ });
27
+ it('should handle initialization errors', async () => {
28
+ const error = new Error('Model loading failed');
29
+ mockPipeline.mockRejectedValue(error);
30
+ await expect(embeddingService.initialize()).rejects.toThrow('Model loading failed');
31
+ expect(embeddingService.isReady()).toBe(false);
32
+ });
33
+ it('should return the same promise for concurrent initialization calls', async () => {
34
+ const promise1 = embeddingService.initialize();
35
+ const promise2 = embeddingService.initialize();
36
+ expect(promise1).toBe(promise2);
37
+ await promise1;
38
+ await promise2;
39
+ });
40
+ });
41
+ describe('embed', () => {
42
+ beforeEach(async () => {
43
+ mockModel.mockResolvedValue({
44
+ data: new Float32Array([0.1, 0.2, 0.3, 0.4, 0.5]),
45
+ });
46
+ await embeddingService.initialize();
47
+ });
48
+ it('should return correct embedding dimensions', async () => {
49
+ const embedding = await embeddingService.embed('test text');
50
+ expect(embedding).toHaveLength(5);
51
+ expect(embedding).toEqual([0.1, 0.2, 0.3, 0.4, 0.5]);
52
+ });
53
+ it('should reject empty text', async () => {
54
+ await expect(embeddingService.embed('')).rejects.toThrow('Text cannot be empty');
55
+ await expect(embeddingService.embed(' ')).rejects.toThrow('Text cannot be empty');
56
+ });
57
+ it('should cache embeddings', async () => {
58
+ const text = 'cacheable text';
59
+ // First call should hit the model
60
+ await embeddingService.embed(text);
61
+ expect(mockModel).toHaveBeenCalledTimes(1);
62
+ // Second call should use cache
63
+ await embeddingService.embed(text);
64
+ expect(mockModel).toHaveBeenCalledTimes(1); // Still 1, not 2
65
+ });
66
+ it('should cache based on trimmed text hash', async () => {
67
+ await embeddingService.embed(' test text ');
68
+ await embeddingService.embed('test text');
69
+ // Should only call model once since trimmed versions are identical
70
+ expect(mockModel).toHaveBeenCalledTimes(1);
71
+ });
72
+ });
73
+ describe('embedBatch', () => {
74
+ beforeEach(async () => {
75
+ mockModel.mockImplementation(async (text) => ({
76
+ data: new Float32Array([
77
+ text.length * 0.1,
78
+ text.length * 0.2,
79
+ text.length * 0.3,
80
+ ]),
81
+ }));
82
+ await embeddingService.initialize();
83
+ });
84
+ it('should handle empty batch', async () => {
85
+ const embeddings = await embeddingService.embedBatch([]);
86
+ expect(embeddings).toEqual([]);
87
+ });
88
+ it('should process batch of texts', async () => {
89
+ const texts = ['a', 'ab', 'abc'];
90
+ const embeddings = await embeddingService.embedBatch(texts);
91
+ expect(embeddings).toHaveLength(3);
92
+ expect(embeddings[0]).toEqual([0.1, 0.2, 0.3]); // 'a' has length 1
93
+ expect(embeddings[1]).toEqual([0.2, 0.4, 0.6]); // 'ab' has length 2
94
+ expect(embeddings[2]).toEqual([0.3, 0.6, 0.9]); // 'abc' has length 3
95
+ });
96
+ it('should process large batches in smaller chunks', async () => {
97
+ const texts = Array.from({ length: 25 }, (_, i) => `text${i}`);
98
+ await embeddingService.embedBatch(texts);
99
+ // Should be called at least 3 times due to batch size limit of 10
100
+ expect(mockModel).toHaveBeenCalledTimes(25);
101
+ });
102
+ });
103
+ describe('similarity', () => {
104
+ it('should compute cosine similarity correctly', () => {
105
+ // Test vectors
106
+ const a = [1, 0, 0];
107
+ const b = [0, 1, 0];
108
+ const c = [1, 0, 0]; // Same as a
109
+ // Orthogonal vectors should have similarity close to 0
110
+ expect(embeddingService.similarity(a, b)).toBeCloseTo(0, 5);
111
+ // Identical vectors should have similarity 1
112
+ expect(embeddingService.similarity(a, c)).toBeCloseTo(1, 5);
113
+ // Vector with itself should be 1
114
+ expect(embeddingService.similarity(a, a)).toBeCloseTo(1, 5);
115
+ });
116
+ it('should handle zero vectors', () => {
117
+ const zero = [0, 0, 0];
118
+ const nonZero = [1, 2, 3];
119
+ expect(embeddingService.similarity(zero, zero)).toBe(0);
120
+ expect(embeddingService.similarity(zero, nonZero)).toBe(0);
121
+ });
122
+ it('should reject vectors of different lengths', () => {
123
+ expect(() => embeddingService.similarity([1, 2], [1, 2, 3]))
124
+ .toThrow('Vectors must have the same length');
125
+ });
126
+ it('should handle empty vectors', () => {
127
+ expect(embeddingService.similarity([], [])).toBe(0);
128
+ });
129
+ });
130
+ describe('nearestK', () => {
131
+ it('should return top k similar vectors', () => {
132
+ const query = [1, 0, 0];
133
+ const corpus = [
134
+ [1, 0, 0], // Exact match - similarity 1
135
+ [0.5, 0.5, 0], // Partial match
136
+ [0, 1, 0], // Orthogonal - similarity 0
137
+ [0, 0, 1], // Orthogonal - similarity 0
138
+ ];
139
+ const results = embeddingService.nearestK(query, corpus, 2);
140
+ expect(results).toHaveLength(2);
141
+ expect(results[0].index).toBe(0);
142
+ expect(results[0].score).toBeCloseTo(1, 5);
143
+ expect(results[1].index).toBe(1);
144
+ expect(results[1].score).toBeGreaterThan(0);
145
+ });
146
+ it('should return results in descending order of similarity', () => {
147
+ const query = [1, 1, 0];
148
+ const corpus = [
149
+ [0, 0, 1], // Low similarity
150
+ [1, 1, 0], // High similarity (exact match)
151
+ [1, 0, 0], // Medium similarity
152
+ ];
153
+ const results = embeddingService.nearestK(query, corpus, 3);
154
+ expect(results[0].score).toBeGreaterThan(results[1].score);
155
+ expect(results[1].score).toBeGreaterThan(results[2].score);
156
+ expect(results[0].index).toBe(1); // Exact match
157
+ });
158
+ it('should handle empty corpus', () => {
159
+ const results = embeddingService.nearestK([1, 2, 3], [], 5);
160
+ expect(results).toEqual([]);
161
+ });
162
+ it('should respect k limit', () => {
163
+ const query = [1, 0, 0];
164
+ const corpus = Array.from({ length: 10 }, (_, i) => [i / 10, 0, 0]);
165
+ const results = embeddingService.nearestK(query, corpus, 3);
166
+ expect(results).toHaveLength(3);
167
+ });
168
+ });
169
+ describe('cache management', () => {
170
+ beforeEach(async () => {
171
+ mockModel.mockResolvedValue({
172
+ data: new Float32Array([0.1, 0.2, 0.3]),
173
+ });
174
+ await embeddingService.initialize();
175
+ });
176
+ it('should evict oldest entries when cache is full', async () => {
177
+ // Set a small cache size for testing
178
+ // Note: In a real implementation, you'd want to make cache size configurable
179
+ // Fill cache beyond capacity
180
+ const texts = Array.from({ length: 10001 }, (_, i) => `text${i}`);
181
+ for (const text of texts.slice(0, 5000)) {
182
+ await embeddingService.embed(text);
183
+ }
184
+ // Check that cache has some entries
185
+ const health = embeddingService.getHealth();
186
+ expect(health.cacheSize).toBeGreaterThan(0);
187
+ expect(health.cacheSize).toBeLessThanOrEqual(health.maxCacheSize);
188
+ });
189
+ });
190
+ describe('getHealth', () => {
191
+ it('should return health status', () => {
192
+ const health = embeddingService.getHealth();
193
+ expect(health).toHaveProperty('ready');
194
+ expect(health).toHaveProperty('model');
195
+ expect(health).toHaveProperty('cacheSize');
196
+ expect(health).toHaveProperty('maxCacheSize');
197
+ expect(health.model).toBe('Xenova/all-MiniLM-L6-v2');
198
+ expect(typeof health.cacheSize).toBe('number');
199
+ expect(typeof health.maxCacheSize).toBe('number');
200
+ });
201
+ it('should reflect ready state', async () => {
202
+ let health = embeddingService.getHealth();
203
+ expect(health.ready).toBe(false);
204
+ await embeddingService.initialize();
205
+ health = embeddingService.getHealth();
206
+ expect(health.ready).toBe(true);
207
+ });
208
+ });
209
+ });
210
+ // Integration tests would be in a separate file
211
+ describe('integration (with real model)', () => {
212
+ // These tests would actually load the model and test real embeddings
213
+ // Skipped by default since they require network access and are slow
214
+ it.skip('should generate real embeddings', async () => {
215
+ // This would test with the actual transformers.js model
216
+ // await embeddingService.initialize();
217
+ // const embedding = await embeddingService.embed('hello world');
218
+ // expect(embedding).toHaveLength(384); // all-MiniLM-L6-v2 dimension
219
+ // expect(embedding.every(n => typeof n === 'number')).toBe(true);
220
+ });
221
+ it.skip('should compute realistic similarities', async () => {
222
+ // await embeddingService.initialize();
223
+ // const embedding1 = await embeddingService.embed('cat');
224
+ // const embedding2 = await embeddingService.embed('dog');
225
+ // const embedding3 = await embeddingService.embed('database');
226
+ //
227
+ // const similarity1 = embeddingService.similarity(embedding1, embedding2);
228
+ // const similarity2 = embeddingService.similarity(embedding1, embedding3);
229
+ //
230
+ // expect(similarity1).toBeGreaterThan(similarity2); // cat-dog more similar than cat-database
231
+ });
232
+ });
233
+ //# sourceMappingURL=embeddingService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddingService.test.js","sourceRoot":"","sources":["../../../../server/services/__tests__/embeddingService.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { ExtractedFact } from './factExtractor.js';
2
+ export interface ToolDef {
3
+ serverId: string;
4
+ name: string;
5
+ description?: string;
6
+ inputSchema?: unknown;
7
+ }
8
+ export interface AgentRunConfig {
9
+ agentId: string;
10
+ name: string;
11
+ systemPrompt: string;
12
+ task: string;
13
+ providerId: string;
14
+ model: string;
15
+ teamFacts: ExtractedFact[];
16
+ maxTurns?: number;
17
+ tools?: ToolDef[];
18
+ }
19
+ export interface AgentRunResult {
20
+ agentId: string;
21
+ output: string;
22
+ facts: ExtractedFact[];
23
+ turns: number;
24
+ tokens: {
25
+ input: number;
26
+ output: number;
27
+ };
28
+ durationMs: number;
29
+ status: 'completed' | 'max_turns' | 'error';
30
+ error?: string;
31
+ }
32
+ export type ProgressCallback = (event: {
33
+ type: 'turn' | 'fact' | 'tool_call';
34
+ agentId: string;
35
+ turn?: number;
36
+ message?: string;
37
+ fact?: ExtractedFact;
38
+ tool?: string;
39
+ args?: unknown;
40
+ tokens?: {
41
+ input: number;
42
+ output: number;
43
+ };
44
+ }) => void;
45
+ export declare function runAgent(config: AgentRunConfig, onProgress?: ProgressCallback): Promise<AgentRunResult>;
46
+ //# sourceMappingURL=agentRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentRunner.d.ts","sourceRoot":"","sources":["../../../server/services/agentRunner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE;IACrC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C,KAAK,IAAI,CAAC;AAwNX,wBAAsB,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAkH7G"}
@@ -0,0 +1,295 @@
1
+ import { readConfig } from '../config.js';
2
+ import { mcpManager } from '../mcp/manager.js';
3
+ import { extractFacts } from './factExtractor.js';
4
+ /* ── Helpers ── */
5
+ function buildTeamFactsBlock(facts) {
6
+ if (facts.length === 0)
7
+ return '';
8
+ const lines = facts.map((f) => ` <fact key="${f.key}" type="${f.epistemicType}">${f.value}</fact>`);
9
+ return `\n<team_facts>\n${lines.join('\n')}\n</team_facts>\n`;
10
+ }
11
+ function buildToolsParam(tools, providerType) {
12
+ if (!tools || tools.length === 0)
13
+ return undefined;
14
+ if (providerType === 'anthropic') {
15
+ return tools.map((t) => ({
16
+ name: t.name,
17
+ description: t.description ?? '',
18
+ input_schema: t.inputSchema ?? { type: 'object', properties: {} },
19
+ }));
20
+ }
21
+ return tools.map((t) => ({
22
+ type: 'function',
23
+ function: {
24
+ name: t.name,
25
+ description: t.description ?? '',
26
+ parameters: t.inputSchema ?? { type: 'object', properties: {} },
27
+ },
28
+ }));
29
+ }
30
+ /* ── Agent SDK Call ── */
31
+ async function callAgentSdk(messages, model, _tools, onProgress, agentId, maxTurns, mcpServers) {
32
+ const { query } = await import('@anthropic-ai/claude-agent-sdk');
33
+ const systemMsg = messages.find((m) => m.role === 'system');
34
+ const userMsgs = messages.filter((m) => m.role === 'user');
35
+ const prompt = userMsgs.map((m) => typeof m.content === 'string' ? m.content : '').join('\n');
36
+ const texts = [];
37
+ let inputTokens = 0;
38
+ let outputTokens = 0;
39
+ let turn = 0;
40
+ for await (const message of query({
41
+ prompt,
42
+ options: {
43
+ model: model || undefined,
44
+ allowedTools: ['Read', 'Edit', 'Bash', 'Glob', 'Grep', 'WebSearch', 'WebFetch'],
45
+ permissionMode: 'acceptEdits',
46
+ maxTurns: maxTurns || 10,
47
+ systemPrompt: typeof systemMsg?.content === 'string' ? systemMsg.content : undefined,
48
+ ...(mcpServers ? { mcpServers } : {}),
49
+ },
50
+ })) {
51
+ if (message.type === 'assistant' && message.message?.content) {
52
+ const content = message.message.content;
53
+ let textContent = '';
54
+ // Process content blocks
55
+ for (const block of content) {
56
+ if (block.type === 'text' && block.text) {
57
+ const text = block.text;
58
+ texts.push(text);
59
+ textContent += text;
60
+ }
61
+ else if (block.type === 'tool_use' && block.name) {
62
+ const toolBlock = block;
63
+ // Notify progress callback about tool use
64
+ if (onProgress && agentId) {
65
+ onProgress({
66
+ type: 'tool_call',
67
+ agentId,
68
+ tool: toolBlock.name,
69
+ args: toolBlock.input,
70
+ });
71
+ }
72
+ }
73
+ }
74
+ // Extract usage information
75
+ const usage = message.message?.usage;
76
+ if (usage) {
77
+ inputTokens += usage.input_tokens ?? 0;
78
+ outputTokens += usage.output_tokens ?? 0;
79
+ }
80
+ // Notify progress callback about turn completion if we have text content
81
+ if (textContent && onProgress && agentId) {
82
+ onProgress({
83
+ type: 'turn',
84
+ agentId,
85
+ turn: turn++,
86
+ message: textContent,
87
+ tokens: { input: inputTokens, output: outputTokens },
88
+ });
89
+ }
90
+ }
91
+ else if (message.type === 'result') {
92
+ // Handle result messages (success/error/etc)
93
+ const resultMsg = message;
94
+ if (resultMsg.subtype === 'error' && onProgress && agentId) {
95
+ // For now, we'll let the main error handling catch this
96
+ // Could potentially emit an error event here
97
+ }
98
+ }
99
+ }
100
+ // Agent SDK handles tools internally — returns final output with no pending tool calls
101
+ return { content: texts.join('\n'), toolCalls: [], inputTokens, outputTokens };
102
+ }
103
+ /* ── LLM Call ── */
104
+ async function callLlm(messages, providerId, model, tools, onProgress, agentId, maxTurns) {
105
+ const config = readConfig();
106
+ const provider = config.providers.find((p) => p.id === providerId);
107
+ if (!provider)
108
+ throw new Error(`Provider "${providerId}" not found`);
109
+ if (provider.authMethod === 'claude-agent-sdk') {
110
+ // Build MCP servers config from global config
111
+ const mcpServers = {};
112
+ config.mcpServers?.forEach((server) => {
113
+ mcpServers[server.id] = {
114
+ command: server.command,
115
+ args: server.args,
116
+ };
117
+ });
118
+ return callAgentSdk(messages, model, tools, onProgress, agentId, maxTurns, mcpServers);
119
+ }
120
+ if (!provider.baseUrl)
121
+ throw new Error(`Provider "${providerId}" has no baseUrl`);
122
+ const toolsParam = buildToolsParam(tools, provider.type);
123
+ let url;
124
+ let headers;
125
+ let body;
126
+ if (provider.type === 'anthropic') {
127
+ url = `${provider.baseUrl}/messages`;
128
+ headers = {
129
+ 'x-api-key': provider.apiKey,
130
+ 'anthropic-version': '2023-06-01',
131
+ 'content-type': 'application/json',
132
+ };
133
+ const systemMsg = messages.find((m) => m.role === 'system');
134
+ const nonSystemMsgs = messages.filter((m) => m.role !== 'system');
135
+ body = {
136
+ model,
137
+ max_tokens: 4096,
138
+ messages: nonSystemMsgs,
139
+ ...(systemMsg && { system: typeof systemMsg.content === 'string' ? systemMsg.content : '' }),
140
+ ...(toolsParam && { tools: toolsParam }),
141
+ };
142
+ }
143
+ else {
144
+ url = `${provider.baseUrl}/chat/completions`;
145
+ headers = {
146
+ 'Authorization': `Bearer ${provider.apiKey}`,
147
+ 'Content-Type': 'application/json',
148
+ };
149
+ body = {
150
+ model,
151
+ messages,
152
+ ...(toolsParam && { tools: toolsParam }),
153
+ };
154
+ }
155
+ const response = await fetch(url, { method: 'POST', headers, body: JSON.stringify(body) });
156
+ if (!response.ok) {
157
+ const errText = await response.text();
158
+ throw new Error(`LLM call failed (${response.status}): ${errText}`);
159
+ }
160
+ const data = await response.json();
161
+ if (provider.type === 'anthropic') {
162
+ const content = data.content;
163
+ const usage = data.usage;
164
+ const textParts = content?.filter((c) => c.type === 'text').map((c) => c.text ?? '').join('') ?? '';
165
+ const toolUses = content?.filter((c) => c.type === 'tool_use') ?? [];
166
+ const toolCalls = toolUses.map((tc) => {
167
+ const toolDef = tools?.find((t) => t.name === tc.name);
168
+ return { id: tc.id ?? '', name: tc.name ?? '', args: (tc.input ?? {}), serverId: toolDef?.serverId ?? '' };
169
+ });
170
+ return { content: textParts, toolCalls, inputTokens: usage?.input_tokens ?? 0, outputTokens: usage?.output_tokens ?? 0 };
171
+ }
172
+ else {
173
+ const choices = data.choices;
174
+ const usage = data.usage;
175
+ const msg = choices?.[0]?.message;
176
+ const toolCalls = (msg?.tool_calls ?? []).map((tc) => {
177
+ const toolDef = tools?.find((t) => t.name === tc.function.name);
178
+ return { id: tc.id, name: tc.function.name, args: JSON.parse(tc.function.arguments), serverId: toolDef?.serverId ?? '' };
179
+ });
180
+ return { content: msg?.content ?? '', toolCalls, inputTokens: usage?.prompt_tokens ?? 0, outputTokens: usage?.completion_tokens ?? 0 };
181
+ }
182
+ }
183
+ /* ── Agent Runner ── */
184
+ export async function runAgent(config, onProgress) {
185
+ const start = Date.now();
186
+ const maxTurns = config.maxTurns ?? 10;
187
+ let totalInputTokens = 0;
188
+ let totalOutputTokens = 0;
189
+ const allAssistantTexts = [];
190
+ const systemContent = config.systemPrompt + buildTeamFactsBlock(config.teamFacts);
191
+ const providerConfig = readConfig().providers.find((p) => p.id === config.providerId);
192
+ const providerType = providerConfig?.type ?? 'openai';
193
+ const messages = [
194
+ { role: 'system', content: systemContent },
195
+ { role: 'user', content: config.task },
196
+ ];
197
+ try {
198
+ for (let turn = 0; turn < maxTurns; turn++) {
199
+ const result = await callLlm(messages, config.providerId, config.model, config.tools, onProgress, config.agentId, maxTurns);
200
+ totalInputTokens += result.inputTokens;
201
+ totalOutputTokens += result.outputTokens;
202
+ if (result.content)
203
+ allAssistantTexts.push(result.content);
204
+ // Only emit turn progress for non-Agent SDK providers (Agent SDK handles its own progress)
205
+ if (providerConfig?.authMethod !== 'claude-agent-sdk') {
206
+ onProgress?.({
207
+ type: 'turn',
208
+ agentId: config.agentId,
209
+ turn,
210
+ message: result.content,
211
+ tokens: { input: totalInputTokens, output: totalOutputTokens },
212
+ });
213
+ }
214
+ // No tool calls → agent is done
215
+ if (result.toolCalls.length === 0) {
216
+ const facts = extractFacts(allAssistantTexts.join('\n'), config.agentId);
217
+ facts.forEach((fact) => onProgress?.({ type: 'fact', agentId: config.agentId, fact }));
218
+ return {
219
+ agentId: config.agentId,
220
+ output: result.content,
221
+ facts,
222
+ turns: turn + 1,
223
+ tokens: { input: totalInputTokens, output: totalOutputTokens },
224
+ durationMs: Date.now() - start,
225
+ status: 'completed',
226
+ };
227
+ }
228
+ // Handle tool calls
229
+ if (providerType === 'anthropic') {
230
+ const assistantContent = [];
231
+ if (result.content)
232
+ assistantContent.push({ type: 'text', text: result.content });
233
+ for (const tc of result.toolCalls) {
234
+ assistantContent.push({ type: 'tool_use', id: tc.id, name: tc.name, input: tc.args });
235
+ }
236
+ messages.push({ role: 'assistant', content: assistantContent });
237
+ const toolResults = [];
238
+ for (const tc of result.toolCalls) {
239
+ // Only emit tool call progress for non-Agent SDK providers (Agent SDK handles its own progress)
240
+ if (providerConfig?.authMethod !== 'claude-agent-sdk') {
241
+ onProgress?.({ type: 'tool_call', agentId: config.agentId, tool: tc.name, args: tc.args });
242
+ }
243
+ try {
244
+ const toolResult = await mcpManager.callTool(tc.serverId, tc.name, tc.args);
245
+ toolResults.push({ type: 'tool_result', tool_use_id: tc.id, content: typeof toolResult === 'string' ? toolResult : JSON.stringify(toolResult) });
246
+ }
247
+ catch (err) {
248
+ toolResults.push({ type: 'tool_result', tool_use_id: tc.id, content: `Error: ${err instanceof Error ? err.message : String(err)}` });
249
+ }
250
+ }
251
+ messages.push({ role: 'user', content: toolResults });
252
+ }
253
+ else {
254
+ messages.push({ role: 'assistant', content: result.content || '' });
255
+ for (const tc of result.toolCalls) {
256
+ // Only emit tool call progress for non-Agent SDK providers (Agent SDK handles its own progress)
257
+ if (providerConfig?.authMethod !== 'claude-agent-sdk') {
258
+ onProgress?.({ type: 'tool_call', agentId: config.agentId, tool: tc.name, args: tc.args });
259
+ }
260
+ try {
261
+ const toolResult = await mcpManager.callTool(tc.serverId, tc.name, tc.args);
262
+ messages.push({ role: 'tool', content: typeof toolResult === 'string' ? toolResult : JSON.stringify(toolResult) });
263
+ }
264
+ catch (err) {
265
+ messages.push({ role: 'tool', content: `Error: ${err instanceof Error ? err.message : String(err)}` });
266
+ }
267
+ }
268
+ }
269
+ }
270
+ // Max turns reached
271
+ const facts = extractFacts(allAssistantTexts.join('\n'), config.agentId);
272
+ return {
273
+ agentId: config.agentId,
274
+ output: allAssistantTexts[allAssistantTexts.length - 1] ?? '',
275
+ facts,
276
+ turns: maxTurns,
277
+ tokens: { input: totalInputTokens, output: totalOutputTokens },
278
+ durationMs: Date.now() - start,
279
+ status: 'max_turns',
280
+ };
281
+ }
282
+ catch (err) {
283
+ return {
284
+ agentId: config.agentId,
285
+ output: '',
286
+ facts: [],
287
+ turns: 0,
288
+ tokens: { input: totalInputTokens, output: totalOutputTokens },
289
+ durationMs: Date.now() - start,
290
+ status: 'error',
291
+ error: err instanceof Error ? err.message : String(err),
292
+ };
293
+ }
294
+ }
295
+ //# sourceMappingURL=agentRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentRunner.js","sourceRoot":"","sources":["../../../server/services/agentRunner.ts"],"names":[],"mappings":"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"}