fourmis-agents-sdk 0.2.4 → 0.2.5
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/dist/agents/index.js +549 -0
- package/dist/agents/tools.js +549 -0
- package/dist/api.js +572 -23
- package/dist/auth/gemini-oauth.d.ts +23 -0
- package/dist/auth/gemini-oauth.d.ts.map +1 -0
- package/dist/auth/gemini-oauth.js +110 -0
- package/dist/index.js +572 -23
- package/dist/providers/anthropic.js +61 -0
- package/dist/providers/gemini.d.ts +39 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +710 -0
- package/dist/providers/openai.js +61 -0
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +549 -0
- package/dist/utils/cost.d.ts +13 -0
- package/dist/utils/cost.d.ts.map +1 -1
- package/dist/utils/cost.js +66 -0
- package/package.json +2 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini CLI OAuth token management.
|
|
3
|
+
*
|
|
4
|
+
* Reads tokens from ~/.gemini/oauth_creds.json (written by `gemini login`)
|
|
5
|
+
* and auto-refreshes access tokens using Google's OAuth2 endpoint.
|
|
6
|
+
*
|
|
7
|
+
* Token storage: ~/.gemini/oauth_creds.json (read/write)
|
|
8
|
+
*/
|
|
9
|
+
export type StoredTokens = {
|
|
10
|
+
access_token: string;
|
|
11
|
+
refresh_token: string;
|
|
12
|
+
token_type: string;
|
|
13
|
+
expires_in?: number;
|
|
14
|
+
expires_at?: number;
|
|
15
|
+
expiry_date?: number;
|
|
16
|
+
};
|
|
17
|
+
export declare function loadTokens(): StoredTokens | null;
|
|
18
|
+
export declare function loadTokensSync(): StoredTokens | null;
|
|
19
|
+
export declare function getValidToken(): Promise<{
|
|
20
|
+
accessToken: string;
|
|
21
|
+
} | null>;
|
|
22
|
+
export declare function isLoggedIn(): boolean;
|
|
23
|
+
//# sourceMappingURL=gemini-oauth.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __export = (target, all) => {
|
|
4
|
+
for (var name in all)
|
|
5
|
+
__defProp(target, name, {
|
|
6
|
+
get: all[name],
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
set: (newValue) => all[name] = () => newValue
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
13
|
+
var __require = import.meta.require;
|
|
14
|
+
|
|
15
|
+
// src/auth/gemini-oauth.ts
|
|
16
|
+
var exports_gemini_oauth = {};
|
|
17
|
+
__export(exports_gemini_oauth, {
|
|
18
|
+
loadTokensSync: () => loadTokensSync,
|
|
19
|
+
loadTokens: () => loadTokens,
|
|
20
|
+
isLoggedIn: () => isLoggedIn,
|
|
21
|
+
getValidToken: () => getValidToken
|
|
22
|
+
});
|
|
23
|
+
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
24
|
+
import { join } from "path";
|
|
25
|
+
import { homedir } from "os";
|
|
26
|
+
function getHome() {
|
|
27
|
+
return process.env.HOME ?? homedir();
|
|
28
|
+
}
|
|
29
|
+
function tokenPath() {
|
|
30
|
+
return join(getHome(), ".gemini", "oauth_creds.json");
|
|
31
|
+
}
|
|
32
|
+
function loadTokens() {
|
|
33
|
+
const p = tokenPath();
|
|
34
|
+
try {
|
|
35
|
+
const raw = readFileSync(p, "utf-8");
|
|
36
|
+
const data = JSON.parse(raw);
|
|
37
|
+
if (data.access_token && data.refresh_token) {
|
|
38
|
+
return data;
|
|
39
|
+
}
|
|
40
|
+
} catch {}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
function loadTokensSync() {
|
|
44
|
+
return loadTokens();
|
|
45
|
+
}
|
|
46
|
+
function saveTokens(tokens) {
|
|
47
|
+
const p = tokenPath();
|
|
48
|
+
const dir = join(getHome(), ".gemini");
|
|
49
|
+
if (!existsSync(dir)) {
|
|
50
|
+
const { mkdirSync } = __require("fs");
|
|
51
|
+
mkdirSync(dir, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
writeFileSync(p, JSON.stringify(tokens, null, 2), { mode: 384 });
|
|
54
|
+
}
|
|
55
|
+
async function refreshAccessToken(refreshToken) {
|
|
56
|
+
const res = await fetch(GOOGLE_TOKEN_URL, {
|
|
57
|
+
method: "POST",
|
|
58
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
59
|
+
body: new URLSearchParams({
|
|
60
|
+
grant_type: "refresh_token",
|
|
61
|
+
client_id: GEMINI_CLIENT_ID,
|
|
62
|
+
client_secret: GEMINI_CLIENT_SECRET,
|
|
63
|
+
refresh_token: refreshToken
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
if (!res.ok) {
|
|
67
|
+
const text = await res.text();
|
|
68
|
+
throw new Error(`Gemini token refresh failed (${res.status}): ${text}`);
|
|
69
|
+
}
|
|
70
|
+
return res.json();
|
|
71
|
+
}
|
|
72
|
+
async function getValidToken() {
|
|
73
|
+
const tokens = loadTokens();
|
|
74
|
+
if (!tokens)
|
|
75
|
+
return null;
|
|
76
|
+
const expiresAt = tokens.expires_at ?? tokens.expiry_date;
|
|
77
|
+
const needsRefresh = expiresAt ? expiresAt <= Date.now() + 300000 : true;
|
|
78
|
+
if (needsRefresh) {
|
|
79
|
+
try {
|
|
80
|
+
const fresh = await refreshAccessToken(tokens.refresh_token);
|
|
81
|
+
const expiryMs = Date.now() + fresh.expires_in * 1000;
|
|
82
|
+
const updated = {
|
|
83
|
+
access_token: fresh.access_token,
|
|
84
|
+
refresh_token: fresh.refresh_token ?? tokens.refresh_token,
|
|
85
|
+
token_type: fresh.token_type ?? "Bearer",
|
|
86
|
+
expires_in: fresh.expires_in,
|
|
87
|
+
expires_at: expiryMs,
|
|
88
|
+
expiry_date: expiryMs
|
|
89
|
+
};
|
|
90
|
+
saveTokens(updated);
|
|
91
|
+
return { accessToken: updated.access_token };
|
|
92
|
+
} catch {
|
|
93
|
+
return { accessToken: tokens.access_token };
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return { accessToken: tokens.access_token };
|
|
97
|
+
}
|
|
98
|
+
function isLoggedIn() {
|
|
99
|
+
return loadTokens() !== null;
|
|
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 = () => {};
|
|
103
|
+
init_gemini_oauth();
|
|
104
|
+
|
|
105
|
+
export {
|
|
106
|
+
loadTokensSync,
|
|
107
|
+
loadTokens,
|
|
108
|
+
isLoggedIn,
|
|
109
|
+
getValidToken
|
|
110
|
+
};
|