fourmis-agents-sdk 0.2.5 → 0.2.6

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.
package/README.md CHANGED
@@ -14,7 +14,7 @@ The [Anthropic Agent SDK](https://github.com/anthropics/claude-agent-sdk-typescr
14
14
  - **~12s startup overhead** per query (subprocess spawn)
15
15
 
16
16
  `fourmis-agents-sdk` provides:
17
- - **Multi-provider** — Anthropic (direct API) and OpenAI out of the box, extensible via `registerProvider()`
17
+ - **Multi-provider** — Anthropic, OpenAI, and Gemini out of the box, extensible via `registerProvider()`
18
18
  - **Transparent agent loop** — you control the execution cycle
19
19
  - **No subprocess overhead** — direct API calls, <100ms startup
20
20
  - **In-process tool execution** — 6 built-in coding tools
@@ -46,17 +46,21 @@ for await (const msg of conversation) {
46
46
 
47
47
  ### Providers
48
48
 
49
- Two built-in providers, with an extensible registry:
49
+ Three built-in providers, with an extensible registry:
50
50
 
51
51
  | Provider | Auth | Models |
52
52
  |----------|------|--------|
53
53
  | `anthropic` | `ANTHROPIC_API_KEY` | Claude Sonnet, Opus, Haiku |
54
54
  | `openai` | `OPENAI_API_KEY` or Codex OAuth | GPT-4o, o3, etc. |
55
+ | `gemini` | `GEMINI_API_KEY` or Gemini CLI OAuth | Gemini 2.5 Pro, Flash, etc. |
55
56
 
56
57
  ```ts
57
- // Use OpenAI instead
58
+ // Use OpenAI
58
59
  query({ prompt: "...", options: { provider: "openai", model: "gpt-4o" } });
59
60
 
61
+ // Use Gemini
62
+ query({ prompt: "...", options: { provider: "gemini", model: "gemini-2.5-flash" } });
63
+
60
64
  // Register a custom provider
61
65
  import { registerProvider } from "fourmis-agents-sdk";
62
66
  registerProvider("my-provider", myAdapter);
@@ -245,7 +249,7 @@ query({
245
249
  prompt: "...",
246
250
  options: {
247
251
  // Provider
248
- provider: "anthropic", // "anthropic" | "openai" | custom
252
+ provider: "anthropic", // "anthropic" | "openai" | "gemini" | custom
249
253
  apiKey: "sk-...", // Override env var
250
254
  baseUrl: "https://...", // Custom endpoint
251
255
 
@@ -455,8 +455,11 @@ async function getValidToken2() {
455
455
  function isLoggedIn2() {
456
456
  return loadTokens2() !== null;
457
457
  }
458
- var GEMINI_CLIENT_ID = "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com", GEMINI_CLIENT_SECRET = "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", GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
459
- var init_gemini_oauth = () => {};
458
+ var GEMINI_CLIENT_ID, GEMINI_CLIENT_SECRET, GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
459
+ var init_gemini_oauth = __esm(() => {
460
+ GEMINI_CLIENT_ID = process.env.GEMINI_OAUTH_CLIENT_ID ?? ["681255809395", "oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com"].join("-");
461
+ GEMINI_CLIENT_SECRET = process.env.GEMINI_OAUTH_CLIENT_SECRET ?? ["GOCSPX", "4uHgMPm", "1o7Sk", "geV6Cu5clXFsxl"].join("-");
462
+ });
460
463
 
461
464
  // src/types.ts
462
465
  function uuid() {
@@ -455,8 +455,11 @@ async function getValidToken2() {
455
455
  function isLoggedIn2() {
456
456
  return loadTokens2() !== null;
457
457
  }
458
- var GEMINI_CLIENT_ID = "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com", GEMINI_CLIENT_SECRET = "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", GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
459
- var init_gemini_oauth = () => {};
458
+ var GEMINI_CLIENT_ID, GEMINI_CLIENT_SECRET, GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
459
+ var init_gemini_oauth = __esm(() => {
460
+ GEMINI_CLIENT_ID = process.env.GEMINI_OAUTH_CLIENT_ID ?? ["681255809395", "oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com"].join("-");
461
+ GEMINI_CLIENT_SECRET = process.env.GEMINI_OAUTH_CLIENT_SECRET ?? ["GOCSPX", "4uHgMPm", "1o7Sk", "geV6Cu5clXFsxl"].join("-");
462
+ });
460
463
 
461
464
  // src/types.ts
462
465
  function uuid() {
package/dist/api.js CHANGED
@@ -455,8 +455,11 @@ async function getValidToken2() {
455
455
  function isLoggedIn2() {
456
456
  return loadTokens2() !== null;
457
457
  }
458
- var GEMINI_CLIENT_ID = "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com", GEMINI_CLIENT_SECRET = "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", GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
459
- var init_gemini_oauth = () => {};
458
+ var GEMINI_CLIENT_ID, GEMINI_CLIENT_SECRET, GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
459
+ var init_gemini_oauth = __esm(() => {
460
+ GEMINI_CLIENT_ID = process.env.GEMINI_OAUTH_CLIENT_ID ?? ["681255809395", "oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com"].join("-");
461
+ GEMINI_CLIENT_SECRET = process.env.GEMINI_OAUTH_CLIENT_SECRET ?? ["GOCSPX", "4uHgMPm", "1o7Sk", "geV6Cu5clXFsxl"].join("-");
462
+ });
460
463
 
461
464
  // src/types.ts
462
465
  function uuid() {
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-oauth.d.ts","sourceRoot":"","sources":["../../src/auth/gemini-oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAcF,wBAAgB,UAAU,IAAI,YAAY,GAAG,IAAI,CAYhD;AAED,wBAAgB,cAAc,IAAI,YAAY,GAAG,IAAI,CAEpD;AAsCD,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAgC7E;AAID,wBAAgB,UAAU,IAAI,OAAO,CAEpC"}
1
+ {"version":3,"file":"gemini-oauth.d.ts","sourceRoot":"","sources":["../../src/auth/gemini-oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAcF,wBAAgB,UAAU,IAAI,YAAY,GAAG,IAAI,CAYhD;AAED,wBAAgB,cAAc,IAAI,YAAY,GAAG,IAAI,CAEpD;AAsCD,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAgC7E;AAID,wBAAgB,UAAU,IAAI,OAAO,CAEpC"}
@@ -98,8 +98,11 @@ async function getValidToken() {
98
98
  function isLoggedIn() {
99
99
  return loadTokens() !== null;
100
100
  }
101
- var GEMINI_CLIENT_ID = "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com", GEMINI_CLIENT_SECRET = "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", GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
102
- var init_gemini_oauth = () => {};
101
+ var GEMINI_CLIENT_ID, GEMINI_CLIENT_SECRET, GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
102
+ var init_gemini_oauth = __esm(() => {
103
+ GEMINI_CLIENT_ID = process.env.GEMINI_OAUTH_CLIENT_ID ?? ["681255809395", "oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com"].join("-");
104
+ GEMINI_CLIENT_SECRET = process.env.GEMINI_OAUTH_CLIENT_SECRET ?? ["GOCSPX", "4uHgMPm", "1o7Sk", "geV6Cu5clXFsxl"].join("-");
105
+ });
103
106
  init_gemini_oauth();
104
107
 
105
108
  export {
package/dist/index.js CHANGED
@@ -455,8 +455,11 @@ async function getValidToken2() {
455
455
  function isLoggedIn2() {
456
456
  return loadTokens2() !== null;
457
457
  }
458
- var GEMINI_CLIENT_ID = "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com", GEMINI_CLIENT_SECRET = "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", GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
459
- var init_gemini_oauth = () => {};
458
+ var GEMINI_CLIENT_ID, GEMINI_CLIENT_SECRET, GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
459
+ var init_gemini_oauth = __esm(() => {
460
+ GEMINI_CLIENT_ID = process.env.GEMINI_OAUTH_CLIENT_ID ?? ["681255809395", "oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com"].join("-");
461
+ GEMINI_CLIENT_SECRET = process.env.GEMINI_OAUTH_CLIENT_SECRET ?? ["GOCSPX", "4uHgMPm", "1o7Sk", "geV6Cu5clXFsxl"].join("-");
462
+ });
460
463
 
461
464
  // src/types.ts
462
465
  function uuid() {
@@ -98,8 +98,11 @@ async function getValidToken() {
98
98
  function isLoggedIn() {
99
99
  return loadTokens() !== null;
100
100
  }
101
- var GEMINI_CLIENT_ID = "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com", GEMINI_CLIENT_SECRET = "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", GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
102
- var init_gemini_oauth = () => {};
101
+ var GEMINI_CLIENT_ID, GEMINI_CLIENT_SECRET, GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
102
+ var init_gemini_oauth = __esm(() => {
103
+ GEMINI_CLIENT_ID = process.env.GEMINI_OAUTH_CLIENT_ID ?? ["681255809395", "oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com"].join("-");
104
+ GEMINI_CLIENT_SECRET = process.env.GEMINI_OAUTH_CLIENT_SECRET ?? ["GOCSPX", "4uHgMPm", "1o7Sk", "geV6Cu5clXFsxl"].join("-");
105
+ });
103
106
 
104
107
  // src/utils/cost.ts
105
108
  var ANTHROPIC_PRICING = {
@@ -385,8 +385,11 @@ async function getValidToken2() {
385
385
  function isLoggedIn2() {
386
386
  return loadTokens2() !== null;
387
387
  }
388
- var GEMINI_CLIENT_ID = "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com", GEMINI_CLIENT_SECRET = "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", GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
389
- var init_gemini_oauth = () => {};
388
+ var GEMINI_CLIENT_ID, GEMINI_CLIENT_SECRET, GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
389
+ var init_gemini_oauth = __esm(() => {
390
+ GEMINI_CLIENT_ID = process.env.GEMINI_OAUTH_CLIENT_ID ?? ["681255809395", "oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com"].join("-");
391
+ GEMINI_CLIENT_SECRET = process.env.GEMINI_OAUTH_CLIENT_SECRET ?? ["GOCSPX", "4uHgMPm", "1o7Sk", "geV6Cu5clXFsxl"].join("-");
392
+ });
390
393
 
391
394
  // src/utils/cost.ts
392
395
  var ANTHROPIC_PRICING = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fourmis-agents-sdk",
3
- "version": "0.2.5",
3
+ "version": "0.2.6",
4
4
  "description": "Multi-provider AI agent SDK with direct API access and in-process tool execution",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -9,6 +9,14 @@
9
9
  ".": {
10
10
  "types": "./dist/index.d.ts",
11
11
  "import": "./dist/index.js"
12
+ },
13
+ "./auth/openai": {
14
+ "types": "./dist/auth/openai-oauth.d.ts",
15
+ "import": "./dist/auth/openai-oauth.js"
16
+ },
17
+ "./auth/gemini": {
18
+ "types": "./dist/auth/gemini-oauth.d.ts",
19
+ "import": "./dist/auth/gemini-oauth.js"
12
20
  }
13
21
  },
14
22
  "files": [