darwin-agents 0.4.4

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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +245 -0
  3. package/dist/agents/analyst.d.ts +11 -0
  4. package/dist/agents/analyst.d.ts.map +1 -0
  5. package/dist/agents/analyst.js +78 -0
  6. package/dist/agents/analyst.js.map +1 -0
  7. package/dist/agents/blog-writer.d.ts +13 -0
  8. package/dist/agents/blog-writer.d.ts.map +1 -0
  9. package/dist/agents/blog-writer.js +59 -0
  10. package/dist/agents/blog-writer.js.map +1 -0
  11. package/dist/agents/critic.d.ts +11 -0
  12. package/dist/agents/critic.d.ts.map +1 -0
  13. package/dist/agents/critic.js +57 -0
  14. package/dist/agents/critic.js.map +1 -0
  15. package/dist/agents/index.d.ts +15 -0
  16. package/dist/agents/index.d.ts.map +1 -0
  17. package/dist/agents/index.js +31 -0
  18. package/dist/agents/index.js.map +1 -0
  19. package/dist/agents/investigator-critic.d.ts +10 -0
  20. package/dist/agents/investigator-critic.d.ts.map +1 -0
  21. package/dist/agents/investigator-critic.js +78 -0
  22. package/dist/agents/investigator-critic.js.map +1 -0
  23. package/dist/agents/investigator.d.ts +13 -0
  24. package/dist/agents/investigator.d.ts.map +1 -0
  25. package/dist/agents/investigator.js +105 -0
  26. package/dist/agents/investigator.js.map +1 -0
  27. package/dist/agents/marketing.d.ts +13 -0
  28. package/dist/agents/marketing.d.ts.map +1 -0
  29. package/dist/agents/marketing.js +59 -0
  30. package/dist/agents/marketing.js.map +1 -0
  31. package/dist/agents/researcher.d.ts +11 -0
  32. package/dist/agents/researcher.d.ts.map +1 -0
  33. package/dist/agents/researcher.js +68 -0
  34. package/dist/agents/researcher.js.map +1 -0
  35. package/dist/agents/writer.d.ts +9 -0
  36. package/dist/agents/writer.d.ts.map +1 -0
  37. package/dist/agents/writer.js +47 -0
  38. package/dist/agents/writer.js.map +1 -0
  39. package/dist/cli/create.d.ts +11 -0
  40. package/dist/cli/create.d.ts.map +1 -0
  41. package/dist/cli/create.js +104 -0
  42. package/dist/cli/create.js.map +1 -0
  43. package/dist/cli/evolve.d.ts +13 -0
  44. package/dist/cli/evolve.d.ts.map +1 -0
  45. package/dist/cli/evolve.js +69 -0
  46. package/dist/cli/evolve.js.map +1 -0
  47. package/dist/cli/index.d.ts +13 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +84 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/cli/init.d.ts +12 -0
  52. package/dist/cli/init.d.ts.map +1 -0
  53. package/dist/cli/init.js +68 -0
  54. package/dist/cli/init.js.map +1 -0
  55. package/dist/cli/run.d.ts +7 -0
  56. package/dist/cli/run.d.ts.map +1 -0
  57. package/dist/cli/run.js +371 -0
  58. package/dist/cli/run.js.map +1 -0
  59. package/dist/cli/status.d.ts +7 -0
  60. package/dist/cli/status.d.ts.map +1 -0
  61. package/dist/cli/status.js +123 -0
  62. package/dist/cli/status.js.map +1 -0
  63. package/dist/core/agent.d.ts +53 -0
  64. package/dist/core/agent.d.ts.map +1 -0
  65. package/dist/core/agent.js +172 -0
  66. package/dist/core/agent.js.map +1 -0
  67. package/dist/core/runner.d.ts +64 -0
  68. package/dist/core/runner.d.ts.map +1 -0
  69. package/dist/core/runner.js +203 -0
  70. package/dist/core/runner.js.map +1 -0
  71. package/dist/evolution/loop.d.ts +100 -0
  72. package/dist/evolution/loop.d.ts.map +1 -0
  73. package/dist/evolution/loop.js +424 -0
  74. package/dist/evolution/loop.js.map +1 -0
  75. package/dist/evolution/multi-critic.d.ts +58 -0
  76. package/dist/evolution/multi-critic.d.ts.map +1 -0
  77. package/dist/evolution/multi-critic.js +324 -0
  78. package/dist/evolution/multi-critic.js.map +1 -0
  79. package/dist/evolution/notifications.d.ts +32 -0
  80. package/dist/evolution/notifications.d.ts.map +1 -0
  81. package/dist/evolution/notifications.js +92 -0
  82. package/dist/evolution/notifications.js.map +1 -0
  83. package/dist/evolution/optimizer.d.ts +64 -0
  84. package/dist/evolution/optimizer.d.ts.map +1 -0
  85. package/dist/evolution/optimizer.js +223 -0
  86. package/dist/evolution/optimizer.js.map +1 -0
  87. package/dist/evolution/patterns.d.ts +63 -0
  88. package/dist/evolution/patterns.d.ts.map +1 -0
  89. package/dist/evolution/patterns.js +297 -0
  90. package/dist/evolution/patterns.js.map +1 -0
  91. package/dist/evolution/safety.d.ts +76 -0
  92. package/dist/evolution/safety.d.ts.map +1 -0
  93. package/dist/evolution/safety.js +182 -0
  94. package/dist/evolution/safety.js.map +1 -0
  95. package/dist/evolution/tracker.d.ts +48 -0
  96. package/dist/evolution/tracker.d.ts.map +1 -0
  97. package/dist/evolution/tracker.js +163 -0
  98. package/dist/evolution/tracker.js.map +1 -0
  99. package/dist/index.d.ts +32 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +35 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/memory/index.d.ts +32 -0
  104. package/dist/memory/index.d.ts.map +1 -0
  105. package/dist/memory/index.js +49 -0
  106. package/dist/memory/index.js.map +1 -0
  107. package/dist/memory/postgres-memory.d.ts +52 -0
  108. package/dist/memory/postgres-memory.d.ts.map +1 -0
  109. package/dist/memory/postgres-memory.js +515 -0
  110. package/dist/memory/postgres-memory.js.map +1 -0
  111. package/dist/memory/sqlite-memory.d.ts +36 -0
  112. package/dist/memory/sqlite-memory.d.ts.map +1 -0
  113. package/dist/memory/sqlite-memory.js +380 -0
  114. package/dist/memory/sqlite-memory.js.map +1 -0
  115. package/dist/providers/anthropic.d.ts +20 -0
  116. package/dist/providers/anthropic.d.ts.map +1 -0
  117. package/dist/providers/anthropic.js +82 -0
  118. package/dist/providers/anthropic.js.map +1 -0
  119. package/dist/providers/claude-cli.d.ts +35 -0
  120. package/dist/providers/claude-cli.d.ts.map +1 -0
  121. package/dist/providers/claude-cli.js +143 -0
  122. package/dist/providers/claude-cli.js.map +1 -0
  123. package/dist/providers/index.d.ts +39 -0
  124. package/dist/providers/index.d.ts.map +1 -0
  125. package/dist/providers/index.js +58 -0
  126. package/dist/providers/index.js.map +1 -0
  127. package/dist/providers/ollama.d.ts +17 -0
  128. package/dist/providers/ollama.d.ts.map +1 -0
  129. package/dist/providers/ollama.js +64 -0
  130. package/dist/providers/ollama.js.map +1 -0
  131. package/dist/providers/openai.d.ts +19 -0
  132. package/dist/providers/openai.d.ts.map +1 -0
  133. package/dist/providers/openai.js +75 -0
  134. package/dist/providers/openai.js.map +1 -0
  135. package/dist/providers/types.d.ts +62 -0
  136. package/dist/providers/types.d.ts.map +1 -0
  137. package/dist/providers/types.js +9 -0
  138. package/dist/providers/types.js.map +1 -0
  139. package/dist/types.d.ts +221 -0
  140. package/dist/types.d.ts.map +1 -0
  141. package/dist/types.js +19 -0
  142. package/dist/types.js.map +1 -0
  143. package/package.json +81 -0
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Darwin — Claude CLI Provider
3
+ *
4
+ * Spawns `claude` CLI as a child process.
5
+ * The only provider that supports MCP tool use (via --mcp-config).
6
+ * Slower than direct API but enables full tool-augmented agents.
7
+ */
8
+ import { spawn } from 'node:child_process';
9
+ const DEFAULT_MODEL = 'claude-sonnet-4-20250514';
10
+ export class ClaudeCliProvider {
11
+ name = 'claude-cli';
12
+ supportsMcp = true;
13
+ defaultModel;
14
+ /** Stashed CLI-specific options — set before run() via setRunOptions() */
15
+ runOptions = {};
16
+ constructor(config) {
17
+ this.defaultModel = config.defaultModel ?? DEFAULT_MODEL;
18
+ }
19
+ /** Set CLI-specific options for the next run (MCP, tools, etc.) */
20
+ setRunOptions(opts) {
21
+ this.runOptions = opts;
22
+ }
23
+ async run(options) {
24
+ const MAX_RETRIES = 2;
25
+ const MIN_VALID_CHARS = 50;
26
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
27
+ const result = await this.executeOnce(options);
28
+ if (result.output.trim().length >= MIN_VALID_CHARS) {
29
+ return result;
30
+ }
31
+ if (attempt < MAX_RETRIES) {
32
+ const delay = 1000 * (attempt + 1);
33
+ console.warn(`[claude-cli] Attempt ${attempt + 1} produced ${result.output.length} chars. Retrying in ${delay}ms...`);
34
+ await new Promise((r) => setTimeout(r, delay));
35
+ }
36
+ else {
37
+ return result; // All retries exhausted
38
+ }
39
+ }
40
+ // TypeScript: unreachable but needed for return type
41
+ throw new Error('Unreachable');
42
+ }
43
+ async executeOnce(options) {
44
+ const model = options.model ?? this.defaultModel;
45
+ const timeout = options.timeout ?? 600_000;
46
+ const opts = this.runOptions;
47
+ // Build CLI args
48
+ const args = [
49
+ '-p',
50
+ '--output-format', 'text',
51
+ '--model', model,
52
+ '--max-turns', String(opts.maxTurns ?? 10),
53
+ ];
54
+ // MCP config
55
+ if (opts.agent && opts.darwinConfig) {
56
+ const mcpConfig = buildMcpConfig(opts.agent, opts.darwinConfig);
57
+ if (mcpConfig) {
58
+ args.push('--mcp-config', mcpConfig);
59
+ }
60
+ const allowedTools = buildAllowedTools(opts.agent, opts.darwinConfig);
61
+ if (allowedTools) {
62
+ args.push('--allowedTools', allowedTools);
63
+ }
64
+ }
65
+ if (opts.autonomous) {
66
+ args.push('--permission-mode', 'bypassPermissions');
67
+ }
68
+ // Combine system prompt + task as stdin
69
+ const stdin = `${options.systemPrompt}\n\n---\n\nTask: ${options.userMessage}`;
70
+ const startTime = Date.now();
71
+ // Spawn claude CLI
72
+ const output = await new Promise((resolve, reject) => {
73
+ const cleanEnv = { ...process.env };
74
+ delete cleanEnv.CLAUDECODE;
75
+ const child = spawn('claude', args, {
76
+ cwd: opts.cwd ?? process.cwd(),
77
+ stdio: ['pipe', 'pipe', 'inherit'],
78
+ timeout,
79
+ env: cleanEnv,
80
+ });
81
+ const chunks = [];
82
+ child.stdout.on('data', (chunk) => {
83
+ chunks.push(chunk);
84
+ });
85
+ child.stdin.write(stdin);
86
+ child.stdin.end();
87
+ child.on('close', (code) => {
88
+ const result = Buffer.concat(chunks).toString('utf-8');
89
+ if (code === 0) {
90
+ resolve(result);
91
+ }
92
+ else {
93
+ reject(new Error(`Claude CLI exited with code ${String(code)}: ${result.slice(0, 500)}`));
94
+ }
95
+ });
96
+ child.on('error', (err) => {
97
+ reject(new Error(`Failed to spawn Claude CLI: ${err.message}`));
98
+ });
99
+ });
100
+ const durationMs = Date.now() - startTime;
101
+ return {
102
+ output,
103
+ durationMs,
104
+ model,
105
+ };
106
+ }
107
+ }
108
+ // ─── Helpers (extracted from runner.ts) ───────────
109
+ function buildMcpConfig(agent, config) {
110
+ if (!agent.mcp || agent.mcp.length === 0 || !config.mcp) {
111
+ return null;
112
+ }
113
+ const mcpServers = {};
114
+ let hasServers = false;
115
+ for (const serverName of agent.mcp) {
116
+ const serverConfig = config.mcp[serverName];
117
+ if (serverConfig) {
118
+ mcpServers[serverName] = {
119
+ type: 'stdio',
120
+ command: serverConfig.command,
121
+ args: serverConfig.args,
122
+ ...(serverConfig.env ? { env: serverConfig.env } : {}),
123
+ };
124
+ hasServers = true;
125
+ }
126
+ }
127
+ return hasServers ? JSON.stringify({ mcpServers }) : null;
128
+ }
129
+ function buildAllowedTools(agent, config) {
130
+ const patterns = [];
131
+ if (agent.mcp && agent.mcp.length > 0 && config.mcp) {
132
+ for (const serverName of agent.mcp) {
133
+ if (config.mcp[serverName]) {
134
+ patterns.push(`mcp__${serverName}__*`);
135
+ }
136
+ }
137
+ }
138
+ if (agent.tools && agent.tools.length > 0) {
139
+ patterns.push(...agent.tools);
140
+ }
141
+ return patterns.length > 0 ? patterns.join(',') : null;
142
+ }
143
+ //# sourceMappingURL=claude-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-cli.js","sourceRoot":"","sources":["../../src/providers/claude-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Darwin — Provider Factory
3
+ *
4
+ * Creates the appropriate LLM provider based on configuration.
5
+ * Supports: claude-cli, anthropic-api, openai, ollama.
6
+ */
7
+ export type { LLMProvider, LLMCallOptions, LLMCallResult, ProviderConfig } from './types.js';
8
+ export { ClaudeCliProvider } from './claude-cli.js';
9
+ export type { ClaudeCliRunOptions } from './claude-cli.js';
10
+ export { AnthropicProvider } from './anthropic.js';
11
+ export { OpenAIProvider } from './openai.js';
12
+ export { OllamaProvider } from './ollama.js';
13
+ import type { LLMProvider, ProviderConfig } from './types.js';
14
+ /**
15
+ * Create an LLM provider from configuration.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * // Anthropic API (fastest for non-MCP agents)
20
+ * const provider = createProvider({ type: 'anthropic-api' });
21
+ *
22
+ * // OpenAI-compatible (GPT-4o, Together AI, Groq, etc.)
23
+ * const provider = createProvider({
24
+ * type: 'openai',
25
+ * baseUrl: 'https://api.together.xyz/v1',
26
+ * defaultModel: 'meta-llama/Llama-3.1-70B-Instruct-Turbo',
27
+ * });
28
+ *
29
+ * // Ollama (local, free, offline)
30
+ * const provider = createProvider({ type: 'ollama', defaultModel: 'llama3.1' });
31
+ *
32
+ * // Claude CLI (only option for MCP-enabled agents)
33
+ * const provider = createProvider({ type: 'claude-cli' });
34
+ * ```
35
+ */
36
+ export declare function createProvider(config: ProviderConfig): LLMProvider;
37
+ /** Default model names per provider */
38
+ export declare const DEFAULT_MODELS: Record<ProviderConfig['type'], string>;
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAM9D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CAalE;AAED,uCAAuC;AACvC,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,CAKjE,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Darwin — Provider Factory
3
+ *
4
+ * Creates the appropriate LLM provider based on configuration.
5
+ * Supports: claude-cli, anthropic-api, openai, ollama.
6
+ */
7
+ export { ClaudeCliProvider } from './claude-cli.js';
8
+ export { AnthropicProvider } from './anthropic.js';
9
+ export { OpenAIProvider } from './openai.js';
10
+ export { OllamaProvider } from './ollama.js';
11
+ import { ClaudeCliProvider } from './claude-cli.js';
12
+ import { AnthropicProvider } from './anthropic.js';
13
+ import { OpenAIProvider } from './openai.js';
14
+ import { OllamaProvider } from './ollama.js';
15
+ /**
16
+ * Create an LLM provider from configuration.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * // Anthropic API (fastest for non-MCP agents)
21
+ * const provider = createProvider({ type: 'anthropic-api' });
22
+ *
23
+ * // OpenAI-compatible (GPT-4o, Together AI, Groq, etc.)
24
+ * const provider = createProvider({
25
+ * type: 'openai',
26
+ * baseUrl: 'https://api.together.xyz/v1',
27
+ * defaultModel: 'meta-llama/Llama-3.1-70B-Instruct-Turbo',
28
+ * });
29
+ *
30
+ * // Ollama (local, free, offline)
31
+ * const provider = createProvider({ type: 'ollama', defaultModel: 'llama3.1' });
32
+ *
33
+ * // Claude CLI (only option for MCP-enabled agents)
34
+ * const provider = createProvider({ type: 'claude-cli' });
35
+ * ```
36
+ */
37
+ export function createProvider(config) {
38
+ switch (config.type) {
39
+ case 'claude-cli':
40
+ return new ClaudeCliProvider(config);
41
+ case 'anthropic-api':
42
+ return new AnthropicProvider(config);
43
+ case 'openai':
44
+ return new OpenAIProvider(config);
45
+ case 'ollama':
46
+ return new OllamaProvider(config);
47
+ default:
48
+ throw new Error(`Unknown provider type: ${String(config.type)}`);
49
+ }
50
+ }
51
+ /** Default model names per provider */
52
+ export const DEFAULT_MODELS = {
53
+ 'claude-cli': 'claude-sonnet-4-20250514',
54
+ 'anthropic-api': 'claude-sonnet-4-20250514',
55
+ 'openai': 'gpt-5.4',
56
+ 'ollama': 'llama3.1',
57
+ };
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,YAAY;YACf,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,eAAe;YAClB,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAE,MAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED,uCAAuC;AACvC,MAAM,CAAC,MAAM,cAAc,GAA2C;IACpE,YAAY,EAAE,0BAA0B;IACxC,eAAe,EAAE,0BAA0B;IAC3C,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,UAAU;CACrB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Darwin — Ollama Provider
3
+ *
4
+ * Local LLM inference via Ollama's API.
5
+ * Perfect for development, testing, and cost-free experimentation.
6
+ * No API key needed — runs locally.
7
+ */
8
+ import type { LLMCallOptions, LLMCallResult, LLMProvider, ProviderConfig } from './types.js';
9
+ export declare class OllamaProvider implements LLMProvider {
10
+ readonly name = "ollama";
11
+ readonly supportsMcp = false;
12
+ private baseUrl;
13
+ private defaultModel;
14
+ constructor(config: ProviderConfig);
15
+ run(options: LLMCallOptions): Promise<LLMCallResult>;
16
+ }
17
+ //# sourceMappingURL=ollama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmB7F,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,SAAS;IAE7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,cAAc;IAK5B,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAmD3D"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Darwin — Ollama Provider
3
+ *
4
+ * Local LLM inference via Ollama's API.
5
+ * Perfect for development, testing, and cost-free experimentation.
6
+ * No API key needed — runs locally.
7
+ */
8
+ const DEFAULT_BASE_URL = 'http://localhost:11434';
9
+ const DEFAULT_MODEL = 'llama3.1';
10
+ export class OllamaProvider {
11
+ name = 'ollama';
12
+ supportsMcp = false;
13
+ baseUrl;
14
+ defaultModel;
15
+ constructor(config) {
16
+ this.baseUrl = (config.baseUrl ?? process.env.OLLAMA_BASE_URL ?? DEFAULT_BASE_URL).replace(/\/$/, '');
17
+ this.defaultModel = config.defaultModel ?? DEFAULT_MODEL;
18
+ }
19
+ async run(options) {
20
+ const model = options.model ?? this.defaultModel;
21
+ const timeout = options.timeout ?? 600_000; // 10 min for local models (slower)
22
+ const messages = [
23
+ { role: 'system', content: options.systemPrompt },
24
+ { role: 'user', content: options.userMessage },
25
+ ];
26
+ const body = {
27
+ model,
28
+ messages,
29
+ stream: false,
30
+ ...(options.temperature !== undefined ? { options: { temperature: options.temperature } } : {}),
31
+ };
32
+ const startTime = Date.now();
33
+ const controller = new AbortController();
34
+ const timer = setTimeout(() => controller.abort(), timeout);
35
+ try {
36
+ const response = await fetch(`${this.baseUrl}/api/chat`, {
37
+ method: 'POST',
38
+ headers: {
39
+ 'Content-Type': 'application/json',
40
+ },
41
+ body: JSON.stringify(body),
42
+ signal: controller.signal,
43
+ });
44
+ if (!response.ok) {
45
+ const errorText = await response.text();
46
+ throw new Error(`Ollama API error ${String(response.status)}: ${errorText}`);
47
+ }
48
+ const data = (await response.json());
49
+ const durationMs = Date.now() - startTime;
50
+ return {
51
+ output: data.message?.content ?? '',
52
+ durationMs,
53
+ inputTokens: data.prompt_eval_count,
54
+ outputTokens: data.eval_count,
55
+ model: data.model,
56
+ meta: data.total_duration ? { totalDurationNs: data.total_duration } : undefined,
57
+ };
58
+ }
59
+ finally {
60
+ clearTimeout(timer);
61
+ }
62
+ }
63
+ }
64
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Darwin — OpenAI-Compatible Provider
3
+ *
4
+ * Works with OpenAI, Azure OpenAI, Together AI, Groq,
5
+ * and any other OpenAI-compatible API endpoint.
6
+ * No SDK dependency — uses native fetch (Node 20+).
7
+ */
8
+ import type { LLMCallOptions, LLMCallResult, LLMProvider, ProviderConfig } from './types.js';
9
+ export declare class OpenAIProvider implements LLMProvider {
10
+ readonly name = "openai";
11
+ readonly supportsMcp = false;
12
+ private apiKey;
13
+ private baseUrl;
14
+ private defaultModel;
15
+ private defaultMaxTokens;
16
+ constructor(config: ProviderConfig);
17
+ run(options: LLMCallOptions): Promise<LLMCallResult>;
18
+ }
19
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA2B7F,qBAAa,cAAe,YAAW,WAAW;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,SAAS;IAE7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAS;gBAErB,MAAM,EAAE,cAAc;IAW5B,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAsD3D"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Darwin — OpenAI-Compatible Provider
3
+ *
4
+ * Works with OpenAI, Azure OpenAI, Together AI, Groq,
5
+ * and any other OpenAI-compatible API endpoint.
6
+ * No SDK dependency — uses native fetch (Node 20+).
7
+ */
8
+ const DEFAULT_BASE_URL = 'https://api.openai.com/v1';
9
+ const DEFAULT_MODEL = 'gpt-5.4';
10
+ const DEFAULT_MAX_TOKENS = 8192;
11
+ export class OpenAIProvider {
12
+ name = 'openai';
13
+ supportsMcp = false;
14
+ apiKey;
15
+ baseUrl;
16
+ defaultModel;
17
+ defaultMaxTokens;
18
+ constructor(config) {
19
+ const key = config.apiKey ?? process.env.OPENAI_API_KEY;
20
+ if (!key) {
21
+ throw new Error('OpenAI API key required. Set OPENAI_API_KEY or pass apiKey in config.');
22
+ }
23
+ this.apiKey = key;
24
+ this.baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, '');
25
+ this.defaultModel = config.defaultModel ?? DEFAULT_MODEL;
26
+ this.defaultMaxTokens = config.defaultMaxTokens ?? DEFAULT_MAX_TOKENS;
27
+ }
28
+ async run(options) {
29
+ const model = options.model ?? this.defaultModel;
30
+ const maxTokens = options.maxTokens ?? this.defaultMaxTokens;
31
+ const timeout = options.timeout ?? 300_000;
32
+ const messages = [
33
+ { role: 'system', content: options.systemPrompt },
34
+ { role: 'user', content: options.userMessage },
35
+ ];
36
+ const body = {
37
+ model,
38
+ max_tokens: maxTokens,
39
+ messages,
40
+ ...(options.temperature !== undefined ? { temperature: options.temperature } : {}),
41
+ };
42
+ const startTime = Date.now();
43
+ const controller = new AbortController();
44
+ const timer = setTimeout(() => controller.abort(), timeout);
45
+ try {
46
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
47
+ method: 'POST',
48
+ headers: {
49
+ 'Content-Type': 'application/json',
50
+ 'Authorization': `Bearer ${this.apiKey}`,
51
+ },
52
+ body: JSON.stringify(body),
53
+ signal: controller.signal,
54
+ });
55
+ if (!response.ok) {
56
+ const errorText = await response.text();
57
+ throw new Error(`OpenAI API error ${String(response.status)}: ${errorText}`);
58
+ }
59
+ const data = (await response.json());
60
+ const durationMs = Date.now() - startTime;
61
+ const output = data.choices[0]?.message?.content ?? '';
62
+ return {
63
+ output,
64
+ durationMs,
65
+ inputTokens: data.usage?.prompt_tokens,
66
+ outputTokens: data.usage?.completion_tokens,
67
+ model: data.model,
68
+ };
69
+ }
70
+ finally {
71
+ clearTimeout(timer);
72
+ }
73
+ }
74
+ }
75
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Darwin — LLM Provider Interface
3
+ *
4
+ * Abstraction over different LLM backends.
5
+ * All providers implement the same interface so Darwin can
6
+ * swap models/providers without changing agent or evolution code.
7
+ */
8
+ /** Options for a single LLM call */
9
+ export interface LLMCallOptions {
10
+ /** Model identifier (provider-specific, e.g. "claude-sonnet-4-20250514") */
11
+ model: string;
12
+ /** System prompt (role/behavior instructions) */
13
+ systemPrompt: string;
14
+ /** User message (the task) */
15
+ userMessage: string;
16
+ /** Max output tokens (default: provider-dependent) */
17
+ maxTokens?: number;
18
+ /** Temperature (0-1, default: provider-dependent) */
19
+ temperature?: number;
20
+ /** Timeout in milliseconds */
21
+ timeout?: number;
22
+ }
23
+ /** Result from an LLM call */
24
+ export interface LLMCallResult {
25
+ /** The generated text output */
26
+ output: string;
27
+ /** Duration of the API call in milliseconds */
28
+ durationMs: number;
29
+ /** Input tokens used (if reported by provider) */
30
+ inputTokens?: number;
31
+ /** Output tokens used (if reported by provider) */
32
+ outputTokens?: number;
33
+ /** Model actually used (may differ from requested) */
34
+ model?: string;
35
+ /** Provider-specific metadata */
36
+ meta?: Record<string, unknown>;
37
+ }
38
+ /** LLM Provider — implemented by each backend */
39
+ export interface LLMProvider {
40
+ /** Provider name for logging */
41
+ readonly name: string;
42
+ /** Whether this provider supports MCP tool use */
43
+ readonly supportsMcp: boolean;
44
+ /** Run a single LLM call */
45
+ run(options: LLMCallOptions): Promise<LLMCallResult>;
46
+ }
47
+ /** Provider configuration */
48
+ export interface ProviderConfig {
49
+ /** Provider type */
50
+ type: 'claude-cli' | 'anthropic-api' | 'openai' | 'ollama';
51
+ /** API key (for anthropic, openai) */
52
+ apiKey?: string;
53
+ /** Base URL override (for openai-compatible, ollama) */
54
+ baseUrl?: string;
55
+ /** Default model for this provider */
56
+ defaultModel?: string;
57
+ /** Default max tokens */
58
+ defaultMaxTokens?: number;
59
+ /** Default temperature */
60
+ defaultTemperature?: number;
61
+ }
62
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,4BAA4B;IAC5B,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACtD;AAED,6BAA6B;AAC7B,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3D,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0BAA0B;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Darwin — LLM Provider Interface
3
+ *
4
+ * Abstraction over different LLM backends.
5
+ * All providers implement the same interface so Darwin can
6
+ * swap models/providers without changing agent or evolution code.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}