@almightygpt/core 0.10.1 → 0.11.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 (44) hide show
  1. package/dist/adapters/defaults.d.ts.map +1 -1
  2. package/dist/adapters/defaults.js +5 -0
  3. package/dist/adapters/defaults.js.map +1 -1
  4. package/dist/adapters/factory.d.ts.map +1 -1
  5. package/dist/adapters/factory.js +11 -1
  6. package/dist/adapters/factory.js.map +1 -1
  7. package/dist/adapters/index.d.ts +9 -5
  8. package/dist/adapters/index.d.ts.map +1 -1
  9. package/dist/adapters/index.js +9 -5
  10. package/dist/adapters/index.js.map +1 -1
  11. package/dist/adapters/ollama.d.ts +47 -0
  12. package/dist/adapters/ollama.d.ts.map +1 -0
  13. package/dist/adapters/ollama.js +124 -0
  14. package/dist/adapters/ollama.js.map +1 -0
  15. package/dist/adapters/openrouter.d.ts +50 -0
  16. package/dist/adapters/openrouter.d.ts.map +1 -0
  17. package/dist/adapters/openrouter.js +148 -0
  18. package/dist/adapters/openrouter.js.map +1 -0
  19. package/dist/auth/__tests__/resolver.test.js +18 -0
  20. package/dist/auth/__tests__/resolver.test.js.map +1 -1
  21. package/dist/auth/types.d.ts +1 -1
  22. package/dist/auth/types.d.ts.map +1 -1
  23. package/dist/auth/types.js +8 -0
  24. package/dist/auth/types.js.map +1 -1
  25. package/dist/auth/validator.d.ts.map +1 -1
  26. package/dist/auth/validator.js +101 -0
  27. package/dist/auth/validator.js.map +1 -1
  28. package/dist/config/schema.d.ts +12 -12
  29. package/dist/config/schema.d.ts.map +1 -1
  30. package/dist/config/schema.js +8 -1
  31. package/dist/config/schema.js.map +1 -1
  32. package/dist/index.d.ts +1 -1
  33. package/dist/index.js +1 -1
  34. package/package.json +1 -1
  35. package/src/adapters/defaults.ts +5 -0
  36. package/src/adapters/factory.ts +11 -1
  37. package/src/adapters/index.ts +9 -5
  38. package/src/adapters/ollama.ts +157 -0
  39. package/src/adapters/openrouter.ts +194 -0
  40. package/src/auth/__tests__/resolver.test.ts +24 -0
  41. package/src/auth/types.ts +15 -1
  42. package/src/auth/validator.ts +106 -0
  43. package/src/config/schema.ts +8 -1
  44. package/src/index.ts +1 -1
@@ -40,6 +40,11 @@ export const PROVIDER_ENV_VARS = {
40
40
  anthropic: ["ANTHROPIC_API_KEY"],
41
41
  // Google's SDK historically accepted both names; honor both.
42
42
  google: ["GOOGLE_API_KEY", "GEMINI_API_KEY"],
43
+ openrouter: ["OPENROUTER_API_KEY"],
44
+ // Ollama is local — no key. The empty list signals "no auth"
45
+ // to the resolver (it just falls through to keychain → missing,
46
+ // and the Ollama adapter bypasses the resolver entirely).
47
+ ollama: [],
43
48
  };
44
49
  /**
45
50
  * Browser-launchable URL where a user creates / manages keys for each
@@ -49,5 +54,8 @@ export const PROVIDER_KEY_URLS = {
49
54
  openai: "https://platform.openai.com/api-keys",
50
55
  anthropic: "https://console.anthropic.com/settings/keys",
51
56
  google: "https://aistudio.google.com/apikey",
57
+ openrouter: "https://openrouter.ai/keys",
58
+ // Ollama is local — no keys page. Linked instead to install docs.
59
+ ollama: "https://ollama.ai/download",
52
60
  };
53
61
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAgCH;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,QAAQ,CAAa;IACrB,MAAM,CAAS;IACxB,YAAY,QAAoB,EAAE,MAAc,EAAE,aAAsB;QACtE,KAAK,CACH,aAAa;YACX,wBAAwB,QAAQ,IAAI;gBAClC,yBAAyB,QAAQ,iCAAiC;gBAClE,aAAa,MAAM,iBAAiB,CACzC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAA0C;IACtE,MAAM,EAAE,CAAC,gBAAgB,CAAC;IAC1B,SAAS,EAAE,CAAC,mBAAmB,CAAC;IAChC,6DAA6D;IAC7D,MAAM,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA+B;IAC3D,MAAM,EAAE,sCAAsC;IAC9C,SAAS,EAAE,6CAA6C;IACxD,MAAM,EAAE,oCAAoC;CAC7C,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAsCH;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,QAAQ,CAAa;IACrB,MAAM,CAAS;IACxB,YAAY,QAAoB,EAAE,MAAc,EAAE,aAAsB;QACtE,KAAK,CACH,aAAa;YACX,wBAAwB,QAAQ,IAAI;gBAClC,yBAAyB,QAAQ,iCAAiC;gBAClE,aAAa,MAAM,iBAAiB,CACzC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAA0C;IACtE,MAAM,EAAE,CAAC,gBAAgB,CAAC;IAC1B,SAAS,EAAE,CAAC,mBAAmB,CAAC;IAChC,6DAA6D;IAC7D,MAAM,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,UAAU,EAAE,CAAC,oBAAoB,CAAC;IAClC,6DAA6D;IAC7D,gEAAgE;IAChE,0DAA0D;IAC1D,MAAM,EAAE,EAAE;CACX,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA+B;IAC3D,MAAM,EAAE,sCAAsC;IAC9C,SAAS,EAAE,6CAA6C;IACxD,MAAM,EAAE,oCAAoC;IAC5C,UAAU,EAAE,4BAA4B;IACxC,kEAAkE;IAClE,MAAM,EAAE,4BAA4B;CACrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/auth/validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,UAAU,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,CAAC,CAwB3B"}
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/auth/validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,UAAU,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,CAAC,CAsC3B"}
@@ -47,6 +47,20 @@ export async function validateKey(provider, key) {
47
47
  case "google":
48
48
  result = await validateGoogle(key);
49
49
  break;
50
+ case "openrouter":
51
+ result = await validateOpenRouter(key);
52
+ break;
53
+ case "ollama":
54
+ // Ollama has no key — "validation" means probing the local
55
+ // daemon. The key arg is ignored.
56
+ result = await validateOllama();
57
+ break;
58
+ default: {
59
+ // Exhaustiveness check — TypeScript will error here if a new
60
+ // ProviderId is added without a switch case.
61
+ const _exhaustive = provider;
62
+ throw new Error(`Unknown provider: ${String(_exhaustive)}`);
63
+ }
50
64
  }
51
65
  result.latencyMs = Date.now() - start;
52
66
  return result;
@@ -162,6 +176,76 @@ async function validateGoogle(key) {
162
176
  clearTimeout(timer);
163
177
  }
164
178
  }
179
+ async function validateOpenRouter(key) {
180
+ // OpenRouter is OpenAI-compatible at https://openrouter.ai/api/v1.
181
+ // Same chat-completions shape — point fetch at OR's base URL.
182
+ const model = DEFAULT_MODELS.openrouter;
183
+ const controller = new AbortController();
184
+ const timer = setTimeout(() => controller.abort(), VALIDATION_TIMEOUT_MS);
185
+ try {
186
+ const res = await fetch("https://openrouter.ai/api/v1/chat/completions", {
187
+ method: "POST",
188
+ headers: {
189
+ "content-type": "application/json",
190
+ authorization: `Bearer ${key}`,
191
+ "HTTP-Referer": "https://github.com/roxjayanath/almightygpt",
192
+ "X-Title": "AlmightyGPT validation",
193
+ },
194
+ body: JSON.stringify({
195
+ model,
196
+ messages: [{ role: "user", content: "hi" }],
197
+ max_tokens: 1,
198
+ }),
199
+ signal: controller.signal,
200
+ });
201
+ if (!res.ok) {
202
+ const rawBody = await res.text().catch(() => "");
203
+ return {
204
+ ok: false,
205
+ statusCode: res.status,
206
+ error: normalizeOpenRouterError(res.status, rawBody, key),
207
+ rawBody,
208
+ };
209
+ }
210
+ const data = (await res.json());
211
+ return { ok: true, model: data.model ?? model };
212
+ }
213
+ finally {
214
+ clearTimeout(timer);
215
+ }
216
+ }
217
+ async function validateOllama() {
218
+ // No key. Probe the local daemon at /api/tags — cheap, no model
219
+ // invocation. If the user has Ollama running, this confirms the
220
+ // adapter can reach it. Doesn't confirm the default model is
221
+ // pulled — that surfaces on the first real call.
222
+ const baseUrl = process.env["OLLAMA_BASE_URL"] ?? "http://localhost:11434";
223
+ const probeUrl = baseUrl.replace(/\/v1\/?$/, "") + "/api/tags";
224
+ const controller = new AbortController();
225
+ const timer = setTimeout(() => controller.abort(), 3000);
226
+ try {
227
+ const res = await fetch(probeUrl, { signal: controller.signal });
228
+ if (!res.ok) {
229
+ return {
230
+ ok: false,
231
+ statusCode: res.status,
232
+ error: `[${res.status}] Ollama daemon at ${baseUrl} responded with an error.`,
233
+ };
234
+ }
235
+ return { ok: true, model: DEFAULT_MODELS.ollama };
236
+ }
237
+ catch (err) {
238
+ return {
239
+ ok: false,
240
+ error: `Ollama daemon unreachable at ${baseUrl}. Is Ollama installed ` +
241
+ `and running? Try \`ollama serve\` or open the Ollama app.`,
242
+ rawBody: err instanceof Error ? err.message : String(err),
243
+ };
244
+ }
245
+ finally {
246
+ clearTimeout(timer);
247
+ }
248
+ }
165
249
  // ─── Error normalization (Codex v0.8 P2 #6) ──────────────────────────
166
250
  //
167
251
  // Parse known provider JSON error shapes into short, user-safe messages.
@@ -217,6 +301,23 @@ function redactKey(msg, key) {
217
301
  return msg;
218
302
  return msg.split(key).join("<redacted-key>");
219
303
  }
304
+ function normalizeOpenRouterError(status, rawBody, submittedKey) {
305
+ // OpenRouter forwards provider errors but wraps them; shape is
306
+ // typically { "error": { "message": "...", "code": N } }.
307
+ try {
308
+ const parsed = JSON.parse(rawBody);
309
+ let msg = parsed.error?.message ?? "";
310
+ if (submittedKey && msg.includes(submittedKey)) {
311
+ msg = msg.replace(submittedKey, "<redacted-key>");
312
+ }
313
+ if (msg)
314
+ return `[${status}] OpenRouter: ${truncate(msg, 200)}`;
315
+ }
316
+ catch {
317
+ /* fall through */
318
+ }
319
+ return statusOnlyMessage("OpenRouter", status);
320
+ }
220
321
  function statusOnlyMessage(provider, status) {
221
322
  if (status === 401 || status === 403) {
222
323
  return `[${status}] ${provider} rejected the key (unauthorized).`;
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/auth/validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/auth/validator.ts"],"names":[],"mappings":"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"}
@@ -9,19 +9,19 @@ import { z } from "zod";
9
9
  export declare const AgentRoleSchema: z.ZodEnum<["worker", "reviewer", "both", "optional"]>;
10
10
  export declare const AgentConfigSchema: z.ZodObject<{
11
11
  enabled: z.ZodDefault<z.ZodBoolean>;
12
- provider: z.ZodEnum<["openai", "anthropic", "google", "mock"]>;
12
+ provider: z.ZodEnum<["openai", "anthropic", "google", "openrouter", "ollama", "mock"]>;
13
13
  mode: z.ZodDefault<z.ZodEnum<["api", "cli"]>>;
14
14
  role: z.ZodDefault<z.ZodEnum<["worker", "reviewer", "both", "optional"]>>;
15
15
  memoryFile: z.ZodString;
16
16
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
17
17
  enabled: z.ZodDefault<z.ZodBoolean>;
18
- provider: z.ZodEnum<["openai", "anthropic", "google", "mock"]>;
18
+ provider: z.ZodEnum<["openai", "anthropic", "google", "openrouter", "ollama", "mock"]>;
19
19
  mode: z.ZodDefault<z.ZodEnum<["api", "cli"]>>;
20
20
  role: z.ZodDefault<z.ZodEnum<["worker", "reviewer", "both", "optional"]>>;
21
21
  memoryFile: z.ZodString;
22
22
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
23
23
  enabled: z.ZodDefault<z.ZodBoolean>;
24
- provider: z.ZodEnum<["openai", "anthropic", "google", "mock"]>;
24
+ provider: z.ZodEnum<["openai", "anthropic", "google", "openrouter", "ollama", "mock"]>;
25
25
  mode: z.ZodDefault<z.ZodEnum<["api", "cli"]>>;
26
26
  role: z.ZodDefault<z.ZodEnum<["worker", "reviewer", "both", "optional"]>>;
27
27
  memoryFile: z.ZodString;
@@ -40,19 +40,19 @@ export declare const ConfigSchema: z.ZodObject<{
40
40
  runsDir: z.ZodDefault<z.ZodString>;
41
41
  agents: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
42
42
  enabled: z.ZodDefault<z.ZodBoolean>;
43
- provider: z.ZodEnum<["openai", "anthropic", "google", "mock"]>;
43
+ provider: z.ZodEnum<["openai", "anthropic", "google", "openrouter", "ollama", "mock"]>;
44
44
  mode: z.ZodDefault<z.ZodEnum<["api", "cli"]>>;
45
45
  role: z.ZodDefault<z.ZodEnum<["worker", "reviewer", "both", "optional"]>>;
46
46
  memoryFile: z.ZodString;
47
47
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
48
48
  enabled: z.ZodDefault<z.ZodBoolean>;
49
- provider: z.ZodEnum<["openai", "anthropic", "google", "mock"]>;
49
+ provider: z.ZodEnum<["openai", "anthropic", "google", "openrouter", "ollama", "mock"]>;
50
50
  mode: z.ZodDefault<z.ZodEnum<["api", "cli"]>>;
51
51
  role: z.ZodDefault<z.ZodEnum<["worker", "reviewer", "both", "optional"]>>;
52
52
  memoryFile: z.ZodString;
53
53
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
54
54
  enabled: z.ZodDefault<z.ZodBoolean>;
55
- provider: z.ZodEnum<["openai", "anthropic", "google", "mock"]>;
55
+ provider: z.ZodEnum<["openai", "anthropic", "google", "openrouter", "ollama", "mock"]>;
56
56
  mode: z.ZodDefault<z.ZodEnum<["api", "cli"]>>;
57
57
  role: z.ZodDefault<z.ZodEnum<["worker", "reviewer", "both", "optional"]>>;
58
58
  memoryFile: z.ZodString;
@@ -132,19 +132,19 @@ export declare const ConfigSchema: z.ZodObject<{
132
132
  runsDir: z.ZodDefault<z.ZodString>;
133
133
  agents: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
134
134
  enabled: z.ZodDefault<z.ZodBoolean>;
135
- provider: z.ZodEnum<["openai", "anthropic", "google", "mock"]>;
135
+ provider: z.ZodEnum<["openai", "anthropic", "google", "openrouter", "ollama", "mock"]>;
136
136
  mode: z.ZodDefault<z.ZodEnum<["api", "cli"]>>;
137
137
  role: z.ZodDefault<z.ZodEnum<["worker", "reviewer", "both", "optional"]>>;
138
138
  memoryFile: z.ZodString;
139
139
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
140
140
  enabled: z.ZodDefault<z.ZodBoolean>;
141
- provider: z.ZodEnum<["openai", "anthropic", "google", "mock"]>;
141
+ provider: z.ZodEnum<["openai", "anthropic", "google", "openrouter", "ollama", "mock"]>;
142
142
  mode: z.ZodDefault<z.ZodEnum<["api", "cli"]>>;
143
143
  role: z.ZodDefault<z.ZodEnum<["worker", "reviewer", "both", "optional"]>>;
144
144
  memoryFile: z.ZodString;
145
145
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
146
146
  enabled: z.ZodDefault<z.ZodBoolean>;
147
- provider: z.ZodEnum<["openai", "anthropic", "google", "mock"]>;
147
+ provider: z.ZodEnum<["openai", "anthropic", "google", "openrouter", "ollama", "mock"]>;
148
148
  mode: z.ZodDefault<z.ZodEnum<["api", "cli"]>>;
149
149
  role: z.ZodDefault<z.ZodEnum<["worker", "reviewer", "both", "optional"]>>;
150
150
  memoryFile: z.ZodString;
@@ -224,19 +224,19 @@ export declare const ConfigSchema: z.ZodObject<{
224
224
  runsDir: z.ZodDefault<z.ZodString>;
225
225
  agents: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
226
226
  enabled: z.ZodDefault<z.ZodBoolean>;
227
- provider: z.ZodEnum<["openai", "anthropic", "google", "mock"]>;
227
+ provider: z.ZodEnum<["openai", "anthropic", "google", "openrouter", "ollama", "mock"]>;
228
228
  mode: z.ZodDefault<z.ZodEnum<["api", "cli"]>>;
229
229
  role: z.ZodDefault<z.ZodEnum<["worker", "reviewer", "both", "optional"]>>;
230
230
  memoryFile: z.ZodString;
231
231
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
232
232
  enabled: z.ZodDefault<z.ZodBoolean>;
233
- provider: z.ZodEnum<["openai", "anthropic", "google", "mock"]>;
233
+ provider: z.ZodEnum<["openai", "anthropic", "google", "openrouter", "ollama", "mock"]>;
234
234
  mode: z.ZodDefault<z.ZodEnum<["api", "cli"]>>;
235
235
  role: z.ZodDefault<z.ZodEnum<["worker", "reviewer", "both", "optional"]>>;
236
236
  memoryFile: z.ZodString;
237
237
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
238
238
  enabled: z.ZodDefault<z.ZodBoolean>;
239
- provider: z.ZodEnum<["openai", "anthropic", "google", "mock"]>;
239
+ provider: z.ZodEnum<["openai", "anthropic", "google", "openrouter", "ollama", "mock"]>;
240
240
  mode: z.ZodDefault<z.ZodEnum<["api", "cli"]>>;
241
241
  role: z.ZodDefault<z.ZodEnum<["worker", "reviewer", "both", "optional"]>>;
242
242
  memoryFile: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe,uDAAqD,CAAC;AAElF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;gCAQd,CAAC;AAEjB,eAAO,MAAM,YAAY;;;IAIrB;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;QAQC;;;;WAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAlBP;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;QAQC;;;;WAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAlBP;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;QAQC;;;;WAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA8BK,CAAC;AAEjB,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe,uDAAqD,CAAC;AAElF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;gCAed,CAAC;AAEjB,eAAO,MAAM,YAAY;;;IAIrB;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;QAQC;;;;WAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAlBP;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;QAQC;;;;WAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAlBP;;;;;;OAMG;;;;;;;;;;;;;;;;;;;;;;;;;QAQC;;;;WAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA8BK,CAAC;AAEjB,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC"}
@@ -10,7 +10,14 @@ export const AgentRoleSchema = z.enum(["worker", "reviewer", "both", "optional"]
10
10
  export const AgentConfigSchema = z
11
11
  .object({
12
12
  enabled: z.boolean().default(true),
13
- provider: z.enum(["openai", "anthropic", "google", "mock"]),
13
+ provider: z.enum([
14
+ "openai",
15
+ "anthropic",
16
+ "google",
17
+ "openrouter",
18
+ "ollama",
19
+ "mock",
20
+ ]),
14
21
  mode: z.enum(["api", "cli"]).default("api"),
15
22
  role: AgentRoleSchema.default("optional"),
16
23
  memoryFile: z.string().min(1),
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAElF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3C,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC9B,CAAC;KACD,WAAW,EAAE,CAAC;AAEjB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC;IAC3D;;;;;;OAMG;IACH,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC;IACjE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;IACvD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3D,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACtC;;;;WAIG;QACH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KAC5C,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;IACd,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;KAC3D,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACxC,mCAAmC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KAC/D,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;IACd,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACpD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;KAC9D,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;IACd,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACpE,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KACpD,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;CACf,CAAC;KACD,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -12,7 +12,7 @@
12
12
  * - review/ ✅ task #11 diff review pipeline (with #12/#13/#14 wiring)
13
13
  * - budget/ ✅ task #14 BudgetTracker + BudgetExceededError
14
14
  */
15
- export declare const VERSION = "0.10.0";
15
+ export declare const VERSION = "0.11.0";
16
16
  export { startMcpServer } from "./mcp/server.js";
17
17
  export { checkGitStatus, assertSafeToWrite, GitStatusDirtyError, type GitStatusCheck, } from "./git/status.js";
18
18
  export { installTemplate, hasExistingConfig, type InstallOptions, type InstallResult, } from "./templates/install.js";
package/dist/index.js CHANGED
@@ -12,7 +12,7 @@
12
12
  * - review/ ✅ task #11 diff review pipeline (with #12/#13/#14 wiring)
13
13
  * - budget/ ✅ task #14 BudgetTracker + BudgetExceededError
14
14
  */
15
- export const VERSION = "0.10.0";
15
+ export const VERSION = "0.11.0";
16
16
  // MCP server (v0.9.0+) — exposes AlmightyGPT's review surface as MCP tools.
17
17
  export { startMcpServer } from "./mcp/server.js";
18
18
  // Git safety primitives
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almightygpt/core",
3
- "version": "0.10.1",
3
+ "version": "0.11.0",
4
4
  "description": "Core orchestrator, adapters, config, runs, and review logic for AlmightyGPT",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -31,6 +31,9 @@ export const DEFAULT_MODELS: Record<ProviderId, string> = {
31
31
  openai: "gpt-4o",
32
32
  anthropic: "claude-sonnet-4-6",
33
33
  google: "gemini-2.5-flash",
34
+ // v0.12.0+ — meta-providers
35
+ openrouter: "deepseek/deepseek-chat",
36
+ ollama: "llama3.3:70b",
34
37
  };
35
38
 
36
39
  /**
@@ -41,4 +44,6 @@ export const PROVIDER_PRETTY_NAME: Record<ProviderId, string> = {
41
44
  openai: "OpenAI",
42
45
  anthropic: "Anthropic",
43
46
  google: "Google",
47
+ openrouter: "OpenRouter",
48
+ ollama: "Ollama (local)",
44
49
  };
@@ -12,6 +12,8 @@ import { MockAdapter } from "./mock.js";
12
12
  import { OpenAIAdapter } from "./openai.js";
13
13
  import { ClaudeAdapter } from "./claude.js";
14
14
  import { GeminiAdapter } from "./gemini.js";
15
+ import { OpenRouterAdapter } from "./openrouter.js";
16
+ import { OllamaAdapter } from "./ollama.js";
15
17
 
16
18
  export function makeAdapter(name: string, provider: string): Adapter {
17
19
  switch (provider) {
@@ -21,12 +23,16 @@ export function makeAdapter(name: string, provider: string): Adapter {
21
23
  return new ClaudeAdapter(name);
22
24
  case "google":
23
25
  return new GeminiAdapter(name);
26
+ case "openrouter":
27
+ return new OpenRouterAdapter(name);
28
+ case "ollama":
29
+ return new OllamaAdapter(name);
24
30
  case "mock":
25
31
  return new MockAdapter();
26
32
  default:
27
33
  throw new Error(
28
34
  `Provider "${provider}" not supported. ` +
29
- `Use "openai", "anthropic", "google", or "mock".`,
35
+ `Use "openai", "anthropic", "google", "openrouter", "ollama", or "mock".`,
30
36
  );
31
37
  }
32
38
  }
@@ -39,6 +45,10 @@ export function envHintForProvider(provider: string): string {
39
45
  return "Export ANTHROPIC_API_KEY in your environment.";
40
46
  case "google":
41
47
  return "Export GOOGLE_API_KEY (or GEMINI_API_KEY) in your environment.";
48
+ case "openrouter":
49
+ return "Export OPENROUTER_API_KEY in your environment.";
50
+ case "ollama":
51
+ return "Install Ollama (https://ollama.ai) and run `ollama serve` locally.";
42
52
  default:
43
53
  return "";
44
54
  }
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * Adapter exports.
3
3
  *
4
- * Add new adapters here as they're implemented:
5
- * - Claude (Anthropic) — task #15
6
- * - Gemini post-MVP 1
7
- * - OpenRouter — post-MVP 1 (for cost-conscious users; see
8
- * docs/claude/competitor-ai-council.md)
4
+ * Currently shipped adapters:
5
+ * - OpenAI (gpt-4o family)
6
+ * - Anthropic (Claude Sonnet 4.x family)
7
+ * - Google (Gemini 2.5 family)
8
+ * - OpenRouter — v0.12.0+, meta-provider unlocking 100+ models
9
+ * - Ollama — v0.12.0+, local models, no cloud calls
10
+ * - Mock — for testing without API keys
9
11
  */
10
12
 
11
13
  export type {
@@ -19,3 +21,5 @@ export { MockAdapter } from "./mock.js";
19
21
  export { OpenAIAdapter, type OpenAIAdapterOptions } from "./openai.js";
20
22
  export { ClaudeAdapter, type ClaudeAdapterOptions } from "./claude.js";
21
23
  export { GeminiAdapter, type GeminiAdapterOptions } from "./gemini.js";
24
+ export { OpenRouterAdapter, type OpenRouterAdapterOptions } from "./openrouter.js";
25
+ export { OllamaAdapter, type OllamaAdapterOptions } from "./ollama.js";
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Ollama adapter (v0.12.0+).
3
+ *
4
+ * Ollama runs LLMs locally — no cloud calls, no API key, code never
5
+ * leaves the machine. Opens AlmightyGPT to regulated / government /
6
+ * air-gapped enterprise users who can't use cloud AI but want the
7
+ * Worker/Reviewer convention.
8
+ *
9
+ * Ollama exposes an OpenAI-compatible API at http://localhost:11434/v1,
10
+ * so this adapter is a thin wrapper around the OpenAI SDK with a
11
+ * custom baseURL.
12
+ *
13
+ * Requires the user to have Ollama installed + running locally. See
14
+ * https://ollama.ai. The adapter does NOT install Ollama or pull
15
+ * models — that's the user's setup step.
16
+ *
17
+ * Default model: llama3.3:70b (large, very capable for code review).
18
+ * Users with smaller machines should override via config:
19
+ * - llama3.2:3b (3B parameter, runs on most laptops)
20
+ * - qwen2.5-coder:7b (7B, code-tuned, decent for review)
21
+ * - qwen2.5-coder:32b (32B, much stronger for code, needs ~24GB RAM)
22
+ * - deepseek-r1:14b (14B, reasoning-tuned)
23
+ *
24
+ * No auth, no API key, no pricing — local model.
25
+ */
26
+
27
+ import OpenAI from "openai";
28
+ import { AdapterError, type Adapter, type AdapterInput, type AdapterOutput } from "./types.js";
29
+ import { DEFAULT_MODELS } from "./defaults.js";
30
+
31
+ const DEFAULT_BASE_URL = "http://localhost:11434/v1";
32
+ const DEFAULT_MODEL = DEFAULT_MODELS.ollama;
33
+
34
+ export interface OllamaAdapterOptions {
35
+ /** Override the local Ollama base URL. Defaults to http://localhost:11434/v1. */
36
+ baseUrl?: string;
37
+ defaultModel?: string;
38
+ defaultMaxOutputTokens?: number;
39
+ defaultTimeoutMs?: number;
40
+ }
41
+
42
+ export class OllamaAdapter implements Adapter {
43
+ readonly name: string;
44
+ readonly provider = "ollama";
45
+
46
+ private readonly client: OpenAI;
47
+ readonly defaultModel: string;
48
+ private readonly defaultMaxOutputTokens: number;
49
+ private readonly defaultTimeoutMs: number;
50
+ private readonly baseUrl: string;
51
+
52
+ constructor(name = "ollama", options: OllamaAdapterOptions = {}) {
53
+ this.name = name;
54
+ this.defaultModel = options.defaultModel ?? DEFAULT_MODEL;
55
+ // Larger default — local models often run slower than cloud, and
56
+ // shorter responses are rarely the bottleneck.
57
+ this.defaultMaxOutputTokens = options.defaultMaxOutputTokens ?? 8192;
58
+ // Longer default — large local models can take 30-90s on CPU/GPU.
59
+ this.defaultTimeoutMs = options.defaultTimeoutMs ?? 300_000;
60
+ this.baseUrl =
61
+ options.baseUrl ?? process.env["OLLAMA_BASE_URL"] ?? DEFAULT_BASE_URL;
62
+
63
+ // OpenAI SDK requires SOMETHING for apiKey even when the server
64
+ // doesn't validate it. "ollama" is the documented sentinel.
65
+ this.client = new OpenAI({
66
+ apiKey: "ollama",
67
+ baseURL: this.baseUrl,
68
+ });
69
+ }
70
+
71
+ /** Ollama is "available" if the local daemon responds. */
72
+ async isAvailable(): Promise<boolean> {
73
+ try {
74
+ // Cheap probe — Ollama's /api/tags lists local models. If the
75
+ // daemon isn't running, this throws / times out fast.
76
+ const probeUrl = this.baseUrl.replace(/\/v1\/?$/, "") + "/api/tags";
77
+ const controller = new AbortController();
78
+ const timer = setTimeout(() => controller.abort(), 2000);
79
+ try {
80
+ const res = await fetch(probeUrl, { signal: controller.signal });
81
+ return res.ok;
82
+ } finally {
83
+ clearTimeout(timer);
84
+ }
85
+ } catch {
86
+ return false;
87
+ }
88
+ }
89
+
90
+ async execute(input: AdapterInput): Promise<AdapterOutput> {
91
+ const model = input.model ?? this.defaultModel;
92
+ const maxOutputTokens = input.maxOutputTokens ?? this.defaultMaxOutputTokens;
93
+ const timeoutMs = input.timeoutMs ?? this.defaultTimeoutMs;
94
+
95
+ const start = Date.now();
96
+ let response: OpenAI.Chat.Completions.ChatCompletion;
97
+ try {
98
+ response = await this.client.chat.completions.create(
99
+ {
100
+ model,
101
+ max_tokens: maxOutputTokens,
102
+ messages: [
103
+ { role: "system", content: input.systemPrompt },
104
+ { role: "user", content: input.userMessage },
105
+ ],
106
+ },
107
+ { timeout: timeoutMs },
108
+ );
109
+ } catch (err) {
110
+ const message = err instanceof Error ? err.message : String(err);
111
+ // Common failure: Ollama daemon isn't running.
112
+ if (message.includes("ECONNREFUSED") || message.includes("fetch failed")) {
113
+ throw new AdapterError(
114
+ `Ollama daemon unreachable at ${this.baseUrl}. ` +
115
+ "Is Ollama installed and running? Try `ollama serve` or " +
116
+ "open the Ollama app.",
117
+ this.name,
118
+ err,
119
+ );
120
+ }
121
+ // Common failure: model not pulled locally.
122
+ if (message.includes("model") && message.includes("not found")) {
123
+ throw new AdapterError(
124
+ `Ollama model "${model}" not found locally. Pull it first: ` +
125
+ `\`ollama pull ${model}\``,
126
+ this.name,
127
+ err,
128
+ );
129
+ }
130
+ throw new AdapterError(
131
+ `Ollama call failed: ${message}`,
132
+ this.name,
133
+ err,
134
+ );
135
+ }
136
+
137
+ const choice = response.choices[0];
138
+ if (!choice || !choice.message.content) {
139
+ throw new AdapterError(
140
+ "Ollama returned an empty response.",
141
+ this.name,
142
+ );
143
+ }
144
+
145
+ return {
146
+ content: choice.message.content,
147
+ tokensIn: response.usage?.prompt_tokens ?? 0,
148
+ cachedTokensIn: 0,
149
+ tokensOut: response.usage?.completion_tokens ?? 0,
150
+ // Local models are $0. Always.
151
+ costUsd: 0,
152
+ latencyMs: Date.now() - start,
153
+ modelUsed: response.model ?? model,
154
+ provider: this.provider,
155
+ };
156
+ }
157
+ }