@omaikit/agents 0.1.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 (186) hide show
  1. package/README.md +31 -0
  2. package/dist/agent.d.ts +31 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +30 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/ai-provider/anthropic.d.ts +13 -0
  7. package/dist/ai-provider/anthropic.d.ts.map +1 -0
  8. package/dist/ai-provider/anthropic.js +85 -0
  9. package/dist/ai-provider/anthropic.js.map +1 -0
  10. package/dist/ai-provider/factory.d.ts +3 -0
  11. package/dist/ai-provider/factory.d.ts.map +1 -0
  12. package/dist/ai-provider/factory.js +22 -0
  13. package/dist/ai-provider/factory.js.map +1 -0
  14. package/dist/ai-provider/openai.d.ts +16 -0
  15. package/dist/ai-provider/openai.d.ts.map +1 -0
  16. package/dist/ai-provider/openai.js +252 -0
  17. package/dist/ai-provider/openai.js.map +1 -0
  18. package/dist/ai-provider/provider.d.ts +25 -0
  19. package/dist/ai-provider/provider.d.ts.map +1 -0
  20. package/dist/ai-provider/provider.js +2 -0
  21. package/dist/ai-provider/provider.js.map +1 -0
  22. package/dist/ai-provider/token-manager.d.ts +12 -0
  23. package/dist/ai-provider/token-manager.d.ts.map +1 -0
  24. package/dist/ai-provider/token-manager.js +63 -0
  25. package/dist/ai-provider/token-manager.js.map +1 -0
  26. package/dist/coder/code-parser.d.ts +23 -0
  27. package/dist/coder/code-parser.d.ts.map +1 -0
  28. package/dist/coder/code-parser.js +184 -0
  29. package/dist/coder/code-parser.js.map +1 -0
  30. package/dist/coder/coder.d.ts +79 -0
  31. package/dist/coder/coder.d.ts.map +1 -0
  32. package/dist/coder/coder.js +476 -0
  33. package/dist/coder/coder.js.map +1 -0
  34. package/dist/coder/dependency-resolver.d.ts +23 -0
  35. package/dist/coder/dependency-resolver.d.ts.map +1 -0
  36. package/dist/coder/dependency-resolver.js +94 -0
  37. package/dist/coder/dependency-resolver.js.map +1 -0
  38. package/dist/coder/language-handlers.d.ts +38 -0
  39. package/dist/coder/language-handlers.d.ts.map +1 -0
  40. package/dist/coder/language-handlers.js +264 -0
  41. package/dist/coder/language-handlers.js.map +1 -0
  42. package/dist/coder/linter-integration.d.ts +37 -0
  43. package/dist/coder/linter-integration.d.ts.map +1 -0
  44. package/dist/coder/linter-integration.js +200 -0
  45. package/dist/coder/linter-integration.js.map +1 -0
  46. package/dist/coder/prompt-templates.d.ts +13 -0
  47. package/dist/coder/prompt-templates.d.ts.map +1 -0
  48. package/dist/coder/prompt-templates.js +78 -0
  49. package/dist/coder/prompt-templates.js.map +1 -0
  50. package/dist/coder/quality-checker.d.ts +31 -0
  51. package/dist/coder/quality-checker.d.ts.map +1 -0
  52. package/dist/coder/quality-checker.js +264 -0
  53. package/dist/coder/quality-checker.js.map +1 -0
  54. package/dist/coder/syntax-validator.d.ts +21 -0
  55. package/dist/coder/syntax-validator.d.ts.map +1 -0
  56. package/dist/coder/syntax-validator.js +169 -0
  57. package/dist/coder/syntax-validator.js.map +1 -0
  58. package/dist/coder.d.ts +2 -0
  59. package/dist/coder.d.ts.map +1 -0
  60. package/dist/coder.js +2 -0
  61. package/dist/coder.js.map +1 -0
  62. package/dist/errors.d.ts +11 -0
  63. package/dist/errors.d.ts.map +1 -0
  64. package/dist/errors.js +16 -0
  65. package/dist/errors.js.map +1 -0
  66. package/dist/index.d.ts +18 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +18 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/logger.d.ts +6 -0
  71. package/dist/logger.d.ts.map +1 -0
  72. package/dist/logger.js +12 -0
  73. package/dist/logger.js.map +1 -0
  74. package/dist/manager/manager.d.ts +31 -0
  75. package/dist/manager/manager.d.ts.map +1 -0
  76. package/dist/manager/manager.js +162 -0
  77. package/dist/manager/manager.js.map +1 -0
  78. package/dist/memory/memory-store.d.ts +20 -0
  79. package/dist/memory/memory-store.d.ts.map +1 -0
  80. package/dist/memory/memory-store.js +68 -0
  81. package/dist/memory/memory-store.js.map +1 -0
  82. package/dist/planner/clarification-handler.d.ts +11 -0
  83. package/dist/planner/clarification-handler.d.ts.map +1 -0
  84. package/dist/planner/clarification-handler.js +60 -0
  85. package/dist/planner/clarification-handler.js.map +1 -0
  86. package/dist/planner/plan-parser.d.ts +11 -0
  87. package/dist/planner/plan-parser.d.ts.map +1 -0
  88. package/dist/planner/plan-parser.js +136 -0
  89. package/dist/planner/plan-parser.js.map +1 -0
  90. package/dist/planner/plan-validator.d.ts +29 -0
  91. package/dist/planner/plan-validator.d.ts.map +1 -0
  92. package/dist/planner/plan-validator.js +123 -0
  93. package/dist/planner/plan-validator.js.map +1 -0
  94. package/dist/planner/planner.d.ts +25 -0
  95. package/dist/planner/planner.d.ts.map +1 -0
  96. package/dist/planner/planner.js +334 -0
  97. package/dist/planner/planner.js.map +1 -0
  98. package/dist/planner/prompt-templates.d.ts +9 -0
  99. package/dist/planner/prompt-templates.d.ts.map +1 -0
  100. package/dist/planner/prompt-templates.js +168 -0
  101. package/dist/planner/prompt-templates.js.map +1 -0
  102. package/dist/planner.d.ts +2 -0
  103. package/dist/planner.d.ts.map +1 -0
  104. package/dist/planner.js +2 -0
  105. package/dist/planner.js.map +1 -0
  106. package/dist/reviewer/reviewer.d.ts +29 -0
  107. package/dist/reviewer/reviewer.d.ts.map +1 -0
  108. package/dist/reviewer/reviewer.js +40 -0
  109. package/dist/reviewer/reviewer.js.map +1 -0
  110. package/dist/reviewer.d.ts +2 -0
  111. package/dist/reviewer.d.ts.map +1 -0
  112. package/dist/reviewer.js +2 -0
  113. package/dist/reviewer.js.map +1 -0
  114. package/dist/tester/coverage-analyzer.d.ts +9 -0
  115. package/dist/tester/coverage-analyzer.d.ts.map +1 -0
  116. package/dist/tester/coverage-analyzer.js +18 -0
  117. package/dist/tester/coverage-analyzer.js.map +1 -0
  118. package/dist/tester/coverage-validator.d.ts +10 -0
  119. package/dist/tester/coverage-validator.d.ts.map +1 -0
  120. package/dist/tester/coverage-validator.js +14 -0
  121. package/dist/tester/coverage-validator.js.map +1 -0
  122. package/dist/tester/framework-detector.d.ts +4 -0
  123. package/dist/tester/framework-detector.d.ts.map +1 -0
  124. package/dist/tester/framework-detector.js +26 -0
  125. package/dist/tester/framework-detector.js.map +1 -0
  126. package/dist/tester/prompt-templates.d.ts +6 -0
  127. package/dist/tester/prompt-templates.d.ts.map +1 -0
  128. package/dist/tester/prompt-templates.js +30 -0
  129. package/dist/tester/prompt-templates.js.map +1 -0
  130. package/dist/tester/test-executor.d.ts +11 -0
  131. package/dist/tester/test-executor.d.ts.map +1 -0
  132. package/dist/tester/test-executor.js +24 -0
  133. package/dist/tester/test-executor.js.map +1 -0
  134. package/dist/tester/test-parser.d.ts +10 -0
  135. package/dist/tester/test-parser.d.ts.map +1 -0
  136. package/dist/tester/test-parser.js +83 -0
  137. package/dist/tester/test-parser.js.map +1 -0
  138. package/dist/tester/test-patterns.d.ts +10 -0
  139. package/dist/tester/test-patterns.d.ts.map +1 -0
  140. package/dist/tester/test-patterns.js +65 -0
  141. package/dist/tester/test-patterns.js.map +1 -0
  142. package/dist/tester/tester.d.ts +56 -0
  143. package/dist/tester/tester.d.ts.map +1 -0
  144. package/dist/tester/tester.js +246 -0
  145. package/dist/tester/tester.js.map +1 -0
  146. package/dist/tester.d.ts +3 -0
  147. package/dist/tester.d.ts.map +1 -0
  148. package/dist/tester.js +2 -0
  149. package/dist/tester.js.map +1 -0
  150. package/dist/tools/default-registry.d.ts +3 -0
  151. package/dist/tools/default-registry.d.ts.map +1 -0
  152. package/dist/tools/default-registry.js +12 -0
  153. package/dist/tools/default-registry.js.map +1 -0
  154. package/dist/tools/edit.d.ts +4 -0
  155. package/dist/tools/edit.d.ts.map +1 -0
  156. package/dist/tools/edit.js +95 -0
  157. package/dist/tools/edit.js.map +1 -0
  158. package/dist/tools/index.d.ts +6 -0
  159. package/dist/tools/index.d.ts.map +1 -0
  160. package/dist/tools/index.js +6 -0
  161. package/dist/tools/index.js.map +1 -0
  162. package/dist/tools/read.d.ts +4 -0
  163. package/dist/tools/read.d.ts.map +1 -0
  164. package/dist/tools/read.js +39 -0
  165. package/dist/tools/read.js.map +1 -0
  166. package/dist/tools/registry.d.ts +11 -0
  167. package/dist/tools/registry.d.ts.map +1 -0
  168. package/dist/tools/registry.js +31 -0
  169. package/dist/tools/registry.js.map +1 -0
  170. package/dist/tools/search.d.ts +4 -0
  171. package/dist/tools/search.d.ts.map +1 -0
  172. package/dist/tools/search.js +52 -0
  173. package/dist/tools/search.js.map +1 -0
  174. package/dist/tools/types.d.ts +37 -0
  175. package/dist/tools/types.d.ts.map +1 -0
  176. package/dist/tools/types.js +2 -0
  177. package/dist/tools/types.js.map +1 -0
  178. package/dist/tools/utils.d.ts +10 -0
  179. package/dist/tools/utils.d.ts.map +1 -0
  180. package/dist/tools/utils.js +76 -0
  181. package/dist/tools/utils.js.map +1 -0
  182. package/dist/types.d.ts +16 -0
  183. package/dist/types.d.ts.map +1 -0
  184. package/dist/types.js +2 -0
  185. package/dist/types.js.map +1 -0
  186. package/package.json +38 -0
@@ -0,0 +1,476 @@
1
+ /* eslint-disable max-lines */
2
+ /**
3
+ * Coder Agent - Code Generation
4
+ * Generates production-ready code from plan tasks
5
+ */
6
+ import { Agent } from '../agent.js';
7
+ import { PromptTemplates } from './prompt-templates.js';
8
+ import { CodeParser } from './code-parser.js';
9
+ import { CodeWriter } from '@omaikit/analysis';
10
+ import { createProvider } from '../ai-provider/factory.js';
11
+ import { createDefaultToolRegistry } from '../tools/default-registry.js';
12
+ import { MemoryStore } from '../memory/memory-store.js';
13
+ import { loadConfig } from '@omaikit/config';
14
+ export class CoderAgent extends Agent {
15
+ name = 'coder';
16
+ version = '1.0.0';
17
+ promptTemplates;
18
+ codeParser;
19
+ codeWriter;
20
+ provider;
21
+ memoryStore;
22
+ cfg;
23
+ constructor(logger) {
24
+ super(logger);
25
+ this.promptTemplates = new PromptTemplates();
26
+ this.codeParser = new CodeParser();
27
+ this.codeWriter = new CodeWriter();
28
+ this.memoryStore = new MemoryStore();
29
+ this.cfg = loadConfig();
30
+ }
31
+ async init() {
32
+ this.logger.info('Initializing CoderAgent', { version: this.version });
33
+ try {
34
+ this.provider = createProvider();
35
+ }
36
+ catch (error) {
37
+ this.logger.warn('Could not initialize AI provider, using mock mode');
38
+ }
39
+ }
40
+ /**
41
+ * Execute code generation for a task
42
+ */
43
+ async execute(input) {
44
+ const startTime = Date.now();
45
+ const output = {
46
+ agentName: this.name,
47
+ status: 'success',
48
+ timestamp: new Date().toISOString(),
49
+ result: {
50
+ id: `cg-${Date.now()}`,
51
+ taskId: input.task.id,
52
+ prompt: '',
53
+ files: [],
54
+ },
55
+ metadata: {
56
+ durationMs: 0,
57
+ filesGenerated: 0,
58
+ totalLOC: 0,
59
+ syntaxErrors: 0,
60
+ lintingIssues: 0,
61
+ },
62
+ };
63
+ try {
64
+ await this.beforeExecute(input);
65
+ // Validate input
66
+ this.validateInput(input);
67
+ const fallbackLanguage = this.determineLanguage(input);
68
+ // Generate prompt
69
+ const prompt = await this.promptTemplates.generatePrompt(input.task, input.projectContext, input.plan);
70
+ const recentMemory = await this.memoryStore.readRecent(this.name, 3);
71
+ const memoryContext = this.memoryStore.formatRecent(recentMemory);
72
+ const reuseSection = this.buildReuseSection(input);
73
+ const finalPrompt = [
74
+ prompt,
75
+ memoryContext ? `## Recent Agent Memory\n${memoryContext}` : '',
76
+ reuseSection ? `## Reuse Opportunities\n${reuseSection}` : '',
77
+ ]
78
+ .filter(Boolean)
79
+ .join('\n\n');
80
+ output.result.prompt = finalPrompt;
81
+ // Call LLM via AIProvider (would be injected)
82
+ // For now, return mock response
83
+ const llmResponse = await this.callLLM(finalPrompt, input, fallbackLanguage);
84
+ await this.memoryStore.append(this.name, {
85
+ timestamp: new Date().toISOString(),
86
+ prompt: finalPrompt,
87
+ response: llmResponse,
88
+ taskId: input.task.id,
89
+ });
90
+ // Parse generated code
91
+ const files = await this.codeParser.parse(llmResponse, {
92
+ taskTitle: input.task.title,
93
+ projectContext: input.projectContext,
94
+ fallbackLanguage,
95
+ });
96
+ this.logger.info('Code parsed', { fileCount: files.length });
97
+ const projectRoot = input.projectContext?.project?.rootPath || process.cwd();
98
+ const writtenPaths = await this.codeWriter.writeFiles(files, projectRoot);
99
+ // Prepare output
100
+ output.result.files = files;
101
+ output.result.metadata = {
102
+ generatedAt: new Date().toISOString(),
103
+ model: 'mock-model',
104
+ };
105
+ output.metadata.filesGenerated = files.length;
106
+ output.metadata.writtenPaths = writtenPaths;
107
+ output.metadata.totalLOC = files.reduce((sum, f) => sum + (f.content.split('\n').length || 0), 0);
108
+ output.metadata.syntaxErrors = 0;
109
+ output.metadata.lintingIssues = 0;
110
+ await this.afterExecute(output);
111
+ await this.memoryStore.clear(this.name);
112
+ }
113
+ catch (error) {
114
+ await this.onError(error);
115
+ output.status = 'failed';
116
+ output.error = {
117
+ code: 'CODER_ERROR',
118
+ message: error.message,
119
+ };
120
+ await this.memoryStore.append(this.name, {
121
+ timestamp: new Date().toISOString(),
122
+ prompt: output.result.prompt || '',
123
+ response: output.error.message,
124
+ taskId: input.task.id,
125
+ metadata: { status: 'failed' },
126
+ });
127
+ }
128
+ output.metadata.durationMs = Date.now() - startTime;
129
+ return output;
130
+ }
131
+ /**
132
+ * Validate output structure and correctness
133
+ */
134
+ async validate(output) {
135
+ const issues = [];
136
+ let qualityScore = 100;
137
+ const result = output.result || {};
138
+ // Check required fields
139
+ if (!result.id) {
140
+ issues.push({
141
+ severity: 'error',
142
+ message: 'Missing result.id',
143
+ field: 'result.id',
144
+ });
145
+ qualityScore -= 25;
146
+ }
147
+ if (!result.taskId) {
148
+ issues.push({
149
+ severity: 'error',
150
+ message: 'Missing result.taskId',
151
+ field: 'result.taskId',
152
+ });
153
+ qualityScore -= 25;
154
+ }
155
+ if (!Array.isArray(result.files) || result.files.length === 0) {
156
+ issues.push({
157
+ severity: 'error',
158
+ message: 'No files generated',
159
+ field: 'result.files',
160
+ });
161
+ qualityScore -= 25;
162
+ }
163
+ // Check file structure
164
+ if (Array.isArray(result.files)) {
165
+ result.files.forEach((file, idx) => {
166
+ if (!file.path) {
167
+ issues.push({
168
+ severity: 'error',
169
+ message: `File ${idx} missing path`,
170
+ field: `result.files[${idx}].path`,
171
+ });
172
+ qualityScore -= 5;
173
+ }
174
+ if (!file.language) {
175
+ issues.push({
176
+ severity: 'error',
177
+ message: `File ${idx} missing language`,
178
+ field: `result.files[${idx}].language`,
179
+ });
180
+ qualityScore -= 5;
181
+ }
182
+ if (!file.content) {
183
+ issues.push({
184
+ severity: 'error',
185
+ message: `File ${idx} missing content`,
186
+ field: `result.files[${idx}].content`,
187
+ });
188
+ qualityScore -= 5;
189
+ }
190
+ });
191
+ }
192
+ return {
193
+ isValid: issues.filter((i) => i.severity === 'error').length === 0,
194
+ issues,
195
+ warnings: [],
196
+ qualityScore: Math.max(0, qualityScore),
197
+ };
198
+ }
199
+ /**
200
+ * Check if agent can handle a task
201
+ */
202
+ canHandle(task) {
203
+ // Coder handles feature, refactor, and bugfix tasks
204
+ return ['feature', 'refactor', 'bugfix'].includes(task.type);
205
+ }
206
+ /**
207
+ * Validate input structure
208
+ */
209
+ validateInput(input) {
210
+ if (!input.task) {
211
+ throw new Error('Task is required');
212
+ }
213
+ if (!input.projectContext) {
214
+ throw new Error('Project context is required');
215
+ }
216
+ if (!input.task.id || !input.task.title) {
217
+ throw new Error('Task must have id and title');
218
+ }
219
+ }
220
+ /**
221
+ * Determine target programming language
222
+ */
223
+ determineLanguage(input) {
224
+ const candidates = [];
225
+ const addCandidate = (value) => {
226
+ if (typeof value === 'string') {
227
+ candidates.push(value);
228
+ }
229
+ };
230
+ const analysisLanguages = input.projectContext?.analysis?.languages;
231
+ if (Array.isArray(analysisLanguages)) {
232
+ analysisLanguages.forEach((lang) => addCandidate(lang));
233
+ }
234
+ const metadataLanguages = input.projectContext?.metadata?.languages;
235
+ if (Array.isArray(metadataLanguages)) {
236
+ metadataLanguages.forEach((lang) => addCandidate(lang));
237
+ }
238
+ const techStack = input.plan?.techStack;
239
+ if (Array.isArray(techStack)) {
240
+ techStack.forEach((entry) => addCandidate(entry));
241
+ }
242
+ const projectType = input.plan?.projectType;
243
+ addCandidate(projectType);
244
+ for (const candidate of candidates) {
245
+ const normalized = this.normalizeLanguage(candidate);
246
+ if (normalized) {
247
+ return normalized;
248
+ }
249
+ }
250
+ return 'typescript';
251
+ }
252
+ normalizeLanguage(value) {
253
+ const normalized = value.toLowerCase();
254
+ if (normalized.includes('golang') || normalized === 'go')
255
+ return 'go';
256
+ if (normalized.includes('typescript'))
257
+ return 'typescript';
258
+ if (normalized.includes('javascript'))
259
+ return 'javascript';
260
+ if (normalized.includes('python'))
261
+ return 'python';
262
+ if (normalized.includes('rust'))
263
+ return 'rust';
264
+ if (normalized.includes('c#') || normalized.includes('csharp'))
265
+ return 'csharp';
266
+ if (normalized.includes('php'))
267
+ return 'php';
268
+ return null;
269
+ }
270
+ /**
271
+ * Call LLM to generate code
272
+ */
273
+ async callLLM(prompt, input, fallbackLanguage) {
274
+ if (process.env.VITEST !== undefined) {
275
+ await new Promise((resolve) => setTimeout(resolve, 10));
276
+ return this.getMockGeneratedCode(fallbackLanguage, input.task);
277
+ }
278
+ if (!this.provider) {
279
+ await new Promise((resolve) => setTimeout(resolve, 100));
280
+ return this.getMockGeneratedCode(fallbackLanguage, input.task);
281
+ }
282
+ const toolRegistry = createDefaultToolRegistry();
283
+ const toolContext = this.buildToolContext(input);
284
+ if (!this.provider.generateCodex) {
285
+ throw new Error('AI provider does not support Codex responses API');
286
+ }
287
+ const response = await this.provider.generateCodex(prompt, {
288
+ model: this.cfg.coderModel,
289
+ maxTokens: undefined,
290
+ temperature: undefined,
291
+ tools: toolRegistry.getDefinitions(),
292
+ toolRegistry,
293
+ toolContext,
294
+ toolChoice: 'auto',
295
+ maxToolCalls: 3,
296
+ });
297
+ if (typeof response === 'string' &&
298
+ (response.startsWith('OPENAI_ECHO') || response.startsWith('ANTHROPIC_ECHO'))) {
299
+ return this.getMockGeneratedCode(fallbackLanguage, input.task);
300
+ }
301
+ return response;
302
+ }
303
+ /**
304
+ * Generate mock code for demonstration
305
+ */
306
+ getMockGeneratedCode(language, task) {
307
+ const taskName = task.title.toLowerCase().replace(/\s+/g, '_');
308
+ switch (language) {
309
+ case 'python':
310
+ return `
311
+ """
312
+ Generated module for: ${task.title}
313
+ """
314
+
315
+ import logging
316
+ from typing import Any
317
+
318
+ logger = logging.getLogger(__name__)
319
+
320
+ def ${taskName}() -> Any:
321
+ """${task.description}"""
322
+ try:
323
+ logger.info("Executing ${taskName}")
324
+ # Implementation goes here
325
+ return None
326
+ except Exception as e:
327
+ logger.error(f"Error in ${taskName}: {e}")
328
+ raise
329
+ `;
330
+ case 'go':
331
+ return `
332
+ package main
333
+
334
+ import (
335
+ "fmt"
336
+ "log"
337
+ )
338
+
339
+ // ${task.title}
340
+ func ${this.toPascalCase(taskName)}() error {
341
+ log.Println("Executing ${taskName}")
342
+ // Implementation goes here
343
+ return nil
344
+ }
345
+ `;
346
+ case 'rust':
347
+ return `
348
+ //! Generated module for: ${task.title}
349
+
350
+ use log::{info, error};
351
+
352
+ /// ${task.description}
353
+ pub async fn ${taskName}() -> Result<(), Box<dyn std::error::Error>> {
354
+ info!("Executing ${taskName}");
355
+ // Implementation goes here
356
+ Ok(())
357
+ }
358
+ `;
359
+ case 'csharp':
360
+ return `
361
+ using System;
362
+ using System.Logging;
363
+
364
+ namespace Generated
365
+ {
366
+ /// <summary>
367
+ /// ${task.title}
368
+ /// </summary>
369
+ public class ${this.toPascalCase(taskName)}
370
+ {
371
+ private static readonly ILogger Logger = LoggerFactory.CreateLogger<${this.toPascalCase(taskName)}>();
372
+
373
+ public static void Execute()
374
+ {
375
+ try
376
+ {
377
+ Logger.LogInformation("Executing ${taskName}");
378
+ // Implementation goes here
379
+ }
380
+ catch (Exception ex)
381
+ {
382
+ Logger.LogError(ex, "Error in ${taskName}");
383
+ throw;
384
+ }
385
+ }
386
+ }
387
+ }
388
+ `;
389
+ case 'typescript':
390
+ default:
391
+ return `
392
+ /**
393
+ * ${task.title}
394
+ *
395
+ * ${task.description}
396
+ */
397
+
398
+ import { Logger } from './logger';
399
+
400
+ const logger = new Logger('${taskName}');
401
+
402
+ export async function ${taskName}(): Promise<void> {
403
+ try {
404
+ logger.info('Executing ${taskName}');
405
+ // Implementation goes here
406
+ } catch (error) {
407
+ logger.error('Error in ${taskName}', { error });
408
+ throw error;
409
+ }
410
+ }
411
+
412
+ export default ${taskName};
413
+ `;
414
+ }
415
+ }
416
+ /**
417
+ * Convert string to PascalCase
418
+ */
419
+ toPascalCase(str) {
420
+ return str
421
+ .split('_')
422
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
423
+ .join('');
424
+ }
425
+ buildReuseSection(input) {
426
+ const rawSources = [
427
+ input.plan?.reuseOpportunities,
428
+ input.projectContext?.reuseOpportunities,
429
+ input.projectContext?.analysis?.reuseOpportunities,
430
+ input.projectContext?.analysis?.reuseSuggestions,
431
+ ];
432
+ const items = rawSources.flatMap((value) => (Array.isArray(value) ? value : []));
433
+ const normalized = items
434
+ .map((item) => {
435
+ if (typeof item === 'string')
436
+ return item.trim();
437
+ if (item && typeof item === 'object') {
438
+ const description = item.description || item.summary;
439
+ const moduleName = item.module || item.moduleName;
440
+ if (description)
441
+ return String(description).trim();
442
+ if (moduleName)
443
+ return `Consider reusing module: ${String(moduleName).trim()}`;
444
+ }
445
+ return '';
446
+ })
447
+ .filter((item) => item.length > 0);
448
+ if (normalized.length === 0) {
449
+ return null;
450
+ }
451
+ return normalized.map((item) => `- ${item}`).join('\n');
452
+ }
453
+ async withTimeout(promise, timeoutMs) {
454
+ let timeoutId;
455
+ const timeoutPromise = new Promise((resolve) => {
456
+ timeoutId = setTimeout(() => resolve(null), timeoutMs);
457
+ });
458
+ const result = await Promise.race([promise, timeoutPromise]);
459
+ if (timeoutId) {
460
+ clearTimeout(timeoutId);
461
+ }
462
+ return result;
463
+ }
464
+ buildToolContext(input) {
465
+ const rootPath = input.projectContext?.root ||
466
+ input.projectContext?.rootPath ||
467
+ input.projectContext?.project?.rootPath ||
468
+ process.cwd();
469
+ return {
470
+ rootPath,
471
+ cwd: process.cwd(),
472
+ logger: this.logger,
473
+ };
474
+ }
475
+ }
476
+ //# sourceMappingURL=coder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coder.js","sourceRoot":"","sources":["../../src/coder/coder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Dependency Resolver
3
+ * Resolves and tracks dependencies in generated code
4
+ */
5
+ import type { CodeFile } from '@omaikit/models';
6
+ export declare class DependencyResolver {
7
+ private languageHandlers;
8
+ constructor();
9
+ init(): Promise<void>;
10
+ /**
11
+ * Resolve dependencies for generated code files
12
+ */
13
+ resolveDependencies(files: CodeFile[], projectContext: any): Promise<CodeFile[]>;
14
+ /**
15
+ * Detect circular dependencies in generated files
16
+ */
17
+ private detectCircularDependencies;
18
+ /**
19
+ * Check if a dependency is internal (project-relative) or external (npm/package)
20
+ */
21
+ private isInternalDependency;
22
+ }
23
+ //# sourceMappingURL=dependency-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-resolver.d.ts","sourceRoot":"","sources":["../../src/coder/dependency-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,gBAAgB,CAAmB;;IAMrC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;OAEG;IACG,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IA4BtF;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA+ClC;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAc7B"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Dependency Resolver
3
+ * Resolves and tracks dependencies in generated code
4
+ */
5
+ import { LanguageHandlers } from './language-handlers.js';
6
+ export class DependencyResolver {
7
+ languageHandlers;
8
+ constructor() {
9
+ this.languageHandlers = new LanguageHandlers();
10
+ }
11
+ async init() {
12
+ // Initialize dependency resolver
13
+ }
14
+ /**
15
+ * Resolve dependencies for generated code files
16
+ */
17
+ async resolveDependencies(files, projectContext) {
18
+ const filesWithDeps = files.map((file) => {
19
+ const handler = this.languageHandlers.getHandler(file.language);
20
+ const dependencies = handler.dependencyExtractor(file.content);
21
+ // Separate internal and external dependencies
22
+ const internalDeps = dependencies.filter((dep) => this.isInternalDependency(dep, projectContext));
23
+ const externalDeps = dependencies.filter((dep) => !this.isInternalDependency(dep, projectContext));
24
+ return {
25
+ ...file,
26
+ dependencies: [...internalDeps, ...externalDeps],
27
+ };
28
+ });
29
+ // Check for circular dependencies
30
+ const circular = this.detectCircularDependencies(filesWithDeps);
31
+ if (circular.length > 0) {
32
+ console.warn('Circular dependencies detected:', circular);
33
+ }
34
+ return filesWithDeps;
35
+ }
36
+ /**
37
+ * Detect circular dependencies in generated files
38
+ */
39
+ detectCircularDependencies(files) {
40
+ const graph = new Map();
41
+ // Build dependency graph
42
+ files.forEach((file) => {
43
+ graph.set(file.path, file.dependencies || []);
44
+ });
45
+ const cycles = [];
46
+ const visited = new Set();
47
+ const recursionStack = new Set();
48
+ const hasCycle = (node, path) => {
49
+ visited.add(node);
50
+ recursionStack.add(node);
51
+ path.push(node);
52
+ const neighbors = graph.get(node) || [];
53
+ for (const neighbor of neighbors) {
54
+ if (!visited.has(neighbor)) {
55
+ if (hasCycle(neighbor, [...path])) {
56
+ return true;
57
+ }
58
+ }
59
+ else if (recursionStack.has(neighbor)) {
60
+ const cycleStart = path.indexOf(neighbor);
61
+ if (cycleStart !== -1) {
62
+ cycles.push([...path.slice(cycleStart), neighbor]);
63
+ }
64
+ return true;
65
+ }
66
+ }
67
+ recursionStack.delete(node);
68
+ return false;
69
+ };
70
+ // Check each node
71
+ Array.from(graph.keys()).forEach((node) => {
72
+ if (!visited.has(node)) {
73
+ hasCycle(node, []);
74
+ }
75
+ });
76
+ return cycles;
77
+ }
78
+ /**
79
+ * Check if a dependency is internal (project-relative) or external (npm/package)
80
+ */
81
+ isInternalDependency(dep, projectContext) {
82
+ // Internal: starts with . or /
83
+ if (dep.startsWith('.') || dep.startsWith('/')) {
84
+ return true;
85
+ }
86
+ // Check against known external packages
87
+ if (projectContext?.metadata?.dependencies) {
88
+ return !projectContext.metadata.dependencies.includes(dep);
89
+ }
90
+ // External packages don't start with . or / and don't have slashes early
91
+ return false;
92
+ }
93
+ }
94
+ //# sourceMappingURL=dependency-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../src/coder/dependency-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Language Handler Registry
3
+ * Provides language-specific code generation and validation support
4
+ */
5
+ export interface LanguageHandler {
6
+ name: string;
7
+ extensions: string[];
8
+ syntaxValidator: (code: string) => boolean;
9
+ dependencyExtractor: (code: string) => string[];
10
+ linterConfig: Record<string, any>;
11
+ formatter: (code: string) => string;
12
+ errorHandlingPattern: string;
13
+ loggingPattern: string;
14
+ }
15
+ export declare class LanguageHandlers {
16
+ private handlers;
17
+ constructor();
18
+ private registerDefaultHandlers;
19
+ register(handler: LanguageHandler): void;
20
+ getHandler(language: string): LanguageHandler;
21
+ supportedLanguages(): string[];
22
+ getHandlerByExtension(extension: string): LanguageHandler | undefined;
23
+ private validateTypeScript;
24
+ private validateJavaScript;
25
+ private validatePython;
26
+ private validateGo;
27
+ private validateRust;
28
+ private validateCsharp;
29
+ private validatePhp;
30
+ private extractTypeScriptDependencies;
31
+ private extractJavaScriptDependencies;
32
+ private extractPythonDependencies;
33
+ private extractGoDependencies;
34
+ private extractRustDependencies;
35
+ private extractCsharpDependencies;
36
+ private extractPhpDependencies;
37
+ }
38
+ //# sourceMappingURL=language-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-handlers.d.ts","sourceRoot":"","sources":["../../src/coder/language-handlers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAChD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAA+B;;IAO/C,OAAO,CAAC,uBAAuB;IA4H/B,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAKxC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;IAQ7C,kBAAkB,IAAI,MAAM,EAAE;IAI9B,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAKrE,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,6BAA6B;IAYrC,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,sBAAsB;CAgB/B"}