@office-agents/sdk 0.0.1
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/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/lockdown.d.ts +3 -0
- package/dist/lockdown.d.ts.map +1 -0
- package/dist/lockdown.js +103 -0
- package/dist/lockdown.js.map +1 -0
- package/dist/message-utils.d.ts +44 -0
- package/dist/message-utils.d.ts.map +1 -0
- package/dist/message-utils.js +134 -0
- package/dist/message-utils.js.map +1 -0
- package/dist/oauth/index.d.ts +44 -0
- package/dist/oauth/index.d.ts.map +1 -0
- package/dist/oauth/index.js +259 -0
- package/dist/oauth/index.js.map +1 -0
- package/dist/provider-config.d.ts +29 -0
- package/dist/provider-config.d.ts.map +1 -0
- package/dist/provider-config.js +101 -0
- package/dist/provider-config.js.map +1 -0
- package/dist/runtime.d.ts +93 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +688 -0
- package/dist/runtime.js.map +1 -0
- package/dist/sandbox.d.ts +2 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +22 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/skills/index.d.ts +16 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +96 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/storage/db.d.ts +55 -0
- package/dist/storage/db.d.ts.map +1 -0
- package/dist/storage/db.js +229 -0
- package/dist/storage/db.js.map +1 -0
- package/dist/storage/index.d.ts +4 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +3 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/namespace.d.ts +9 -0
- package/dist/storage/namespace.d.ts.map +1 -0
- package/dist/storage/namespace.js +14 -0
- package/dist/storage/namespace.js.map +1 -0
- package/dist/tools/bash.d.ts +2 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +69 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/read-file.d.ts +2 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +116 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/types.d.ts +16 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +28 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/truncate.d.ts +19 -0
- package/dist/truncate.d.ts.map +1 -0
- package/dist/truncate.js +101 -0
- package/dist/truncate.js.map +1 -0
- package/dist/vfs/index.d.ts +35 -0
- package/dist/vfs/index.d.ts.map +1 -0
- package/dist/vfs/index.js +168 -0
- package/dist/vfs/index.js.map +1 -0
- package/dist/web/config.d.ts +12 -0
- package/dist/web/config.d.ts.map +1 -0
- package/dist/web/config.js +41 -0
- package/dist/web/config.js.map +1 -0
- package/dist/web/fetch.d.ts +5 -0
- package/dist/web/fetch.d.ts.map +1 -0
- package/dist/web/fetch.js +174 -0
- package/dist/web/fetch.js.map +1 -0
- package/dist/web/search.d.ts +9 -0
- package/dist/web/search.d.ts.map +1 -0
- package/dist/web/search.js +238 -0
- package/dist/web/search.js.map +1 -0
- package/dist/web/types.d.ts +56 -0
- package/dist/web/types.d.ts.map +1 -0
- package/dist/web/types.js +2 -0
- package/dist/web/types.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
export const OAUTH_PROVIDERS = {
|
|
2
|
+
anthropic: {
|
|
3
|
+
label: "OAuth (Pro/Max)",
|
|
4
|
+
buttonText: "Login with Claude Pro/Max",
|
|
5
|
+
},
|
|
6
|
+
"openai-codex": {
|
|
7
|
+
label: "OAuth (Plus/Pro)",
|
|
8
|
+
buttonText: "Login with ChatGPT Plus/Pro",
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
// --- Credential Storage ---
|
|
12
|
+
import { getNamespace } from "../storage/namespace";
|
|
13
|
+
function oauthStorageKey() {
|
|
14
|
+
return `${getNamespace().localStoragePrefix}-oauth-credentials`;
|
|
15
|
+
}
|
|
16
|
+
export function loadOAuthCredentials(provider) {
|
|
17
|
+
try {
|
|
18
|
+
const store = JSON.parse(localStorage.getItem(oauthStorageKey()) || "{}");
|
|
19
|
+
return store[provider] || null;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function saveOAuthCredentials(provider, creds) {
|
|
26
|
+
try {
|
|
27
|
+
const key = oauthStorageKey();
|
|
28
|
+
const store = JSON.parse(localStorage.getItem(key) || "{}");
|
|
29
|
+
store[provider] = creds;
|
|
30
|
+
localStorage.setItem(key, JSON.stringify(store));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
/* ignore */
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function removeOAuthCredentials(provider) {
|
|
37
|
+
try {
|
|
38
|
+
const key = oauthStorageKey();
|
|
39
|
+
const store = JSON.parse(localStorage.getItem(key) || "{}");
|
|
40
|
+
delete store[provider];
|
|
41
|
+
localStorage.setItem(key, JSON.stringify(store));
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
/* ignore */
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// --- PKCE (Web Crypto, browser-safe) ---
|
|
48
|
+
function base64urlEncode(bytes) {
|
|
49
|
+
let binary = "";
|
|
50
|
+
for (const byte of bytes) {
|
|
51
|
+
binary += String.fromCharCode(byte);
|
|
52
|
+
}
|
|
53
|
+
return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
|
|
54
|
+
}
|
|
55
|
+
export async function generatePKCE() {
|
|
56
|
+
const verifierBytes = new Uint8Array(32);
|
|
57
|
+
crypto.getRandomValues(verifierBytes);
|
|
58
|
+
const verifier = base64urlEncode(verifierBytes);
|
|
59
|
+
const data = new TextEncoder().encode(verifier);
|
|
60
|
+
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
|
|
61
|
+
const challenge = base64urlEncode(new Uint8Array(hashBuffer));
|
|
62
|
+
return { verifier, challenge };
|
|
63
|
+
}
|
|
64
|
+
function createRandomState() {
|
|
65
|
+
const bytes = new Uint8Array(16);
|
|
66
|
+
crypto.getRandomValues(bytes);
|
|
67
|
+
return Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
68
|
+
}
|
|
69
|
+
// --- Provider Constants ---
|
|
70
|
+
const ANTHROPIC_CLIENT_ID = atob("OWQxYzI1MGEtZTYxYi00NGQ5LTg4ZWQtNTk0NGQxOTYyZjVl");
|
|
71
|
+
const ANTHROPIC_AUTHORIZE_URL = "https://claude.ai/oauth/authorize";
|
|
72
|
+
const ANTHROPIC_TOKEN_URL = "https://console.anthropic.com/v1/oauth/token";
|
|
73
|
+
const ANTHROPIC_REDIRECT_URI = "https://console.anthropic.com/oauth/code/callback";
|
|
74
|
+
const ANTHROPIC_SCOPES = "org:create_api_key user:profile user:inference";
|
|
75
|
+
const OPENAI_CODEX_CLIENT_ID = atob("YXBwX0VNb2FtRUVaNzNmMENrWGFYcDdocmFubg==");
|
|
76
|
+
const OPENAI_CODEX_AUTHORIZE_URL = "https://auth.openai.com/oauth/authorize";
|
|
77
|
+
const OPENAI_CODEX_TOKEN_URL = "https://auth.openai.com/oauth/token";
|
|
78
|
+
const OPENAI_CODEX_REDIRECT_URI = "http://localhost:1455/auth/callback";
|
|
79
|
+
const OPENAI_CODEX_SCOPE = "openid profile email offline_access";
|
|
80
|
+
// --- Authorization URL ---
|
|
81
|
+
export function buildAuthorizationUrl(provider, challenge, verifier) {
|
|
82
|
+
if (provider === "openai-codex") {
|
|
83
|
+
const oauthState = createRandomState();
|
|
84
|
+
const params = new URLSearchParams({
|
|
85
|
+
response_type: "code",
|
|
86
|
+
client_id: OPENAI_CODEX_CLIENT_ID,
|
|
87
|
+
redirect_uri: OPENAI_CODEX_REDIRECT_URI,
|
|
88
|
+
scope: OPENAI_CODEX_SCOPE,
|
|
89
|
+
code_challenge: challenge,
|
|
90
|
+
code_challenge_method: "S256",
|
|
91
|
+
state: oauthState,
|
|
92
|
+
id_token_add_organizations: "true",
|
|
93
|
+
codex_cli_simplified_flow: "true",
|
|
94
|
+
originator: "pi",
|
|
95
|
+
});
|
|
96
|
+
return { url: `${OPENAI_CODEX_AUTHORIZE_URL}?${params}`, oauthState };
|
|
97
|
+
}
|
|
98
|
+
const params = new URLSearchParams({
|
|
99
|
+
code: "true",
|
|
100
|
+
client_id: ANTHROPIC_CLIENT_ID,
|
|
101
|
+
response_type: "code",
|
|
102
|
+
redirect_uri: ANTHROPIC_REDIRECT_URI,
|
|
103
|
+
scope: ANTHROPIC_SCOPES,
|
|
104
|
+
code_challenge: challenge,
|
|
105
|
+
code_challenge_method: "S256",
|
|
106
|
+
state: verifier,
|
|
107
|
+
});
|
|
108
|
+
return { url: `${ANTHROPIC_AUTHORIZE_URL}?${params}` };
|
|
109
|
+
}
|
|
110
|
+
// --- Input Parsing ---
|
|
111
|
+
function parseAuthorizationInput(input) {
|
|
112
|
+
const value = input.trim();
|
|
113
|
+
if (!value)
|
|
114
|
+
return {};
|
|
115
|
+
try {
|
|
116
|
+
const url = new URL(value);
|
|
117
|
+
return {
|
|
118
|
+
code: url.searchParams.get("code") ?? undefined,
|
|
119
|
+
state: url.searchParams.get("state") ?? undefined,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
/* not a URL */
|
|
124
|
+
}
|
|
125
|
+
if (value.includes("#")) {
|
|
126
|
+
const [code, state] = value.split("#", 2);
|
|
127
|
+
return { code, state };
|
|
128
|
+
}
|
|
129
|
+
if (value.includes("code=")) {
|
|
130
|
+
const params = new URLSearchParams(value);
|
|
131
|
+
return {
|
|
132
|
+
code: params.get("code") ?? undefined,
|
|
133
|
+
state: params.get("state") ?? undefined,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return { code: value };
|
|
137
|
+
}
|
|
138
|
+
// --- Proxy URL helper ---
|
|
139
|
+
function buildProxiedUrl(baseUrl, useProxy, proxyUrl) {
|
|
140
|
+
return useProxy && proxyUrl
|
|
141
|
+
? `${proxyUrl}/?url=${encodeURIComponent(baseUrl)}`
|
|
142
|
+
: baseUrl;
|
|
143
|
+
}
|
|
144
|
+
// --- Token Refresh ---
|
|
145
|
+
async function refreshAnthropicOAuth(refreshToken, proxyUrl, useProxy) {
|
|
146
|
+
const url = buildProxiedUrl(ANTHROPIC_TOKEN_URL, useProxy, proxyUrl);
|
|
147
|
+
const response = await fetch(url, {
|
|
148
|
+
method: "POST",
|
|
149
|
+
headers: { "Content-Type": "application/json" },
|
|
150
|
+
body: JSON.stringify({
|
|
151
|
+
grant_type: "refresh_token",
|
|
152
|
+
client_id: ANTHROPIC_CLIENT_ID,
|
|
153
|
+
refresh_token: refreshToken,
|
|
154
|
+
}),
|
|
155
|
+
});
|
|
156
|
+
if (!response.ok)
|
|
157
|
+
throw new Error(`Anthropic token refresh failed: ${response.status}`);
|
|
158
|
+
const data = (await response.json());
|
|
159
|
+
return {
|
|
160
|
+
refresh: data.refresh_token,
|
|
161
|
+
access: data.access_token,
|
|
162
|
+
expires: Date.now() + data.expires_in * 1000 - 5 * 60 * 1000,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
async function refreshOpenAICodexOAuth(refreshToken, proxyUrl, useProxy) {
|
|
166
|
+
const url = buildProxiedUrl(OPENAI_CODEX_TOKEN_URL, useProxy, proxyUrl);
|
|
167
|
+
const response = await fetch(url, {
|
|
168
|
+
method: "POST",
|
|
169
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
170
|
+
body: new URLSearchParams({
|
|
171
|
+
grant_type: "refresh_token",
|
|
172
|
+
refresh_token: refreshToken,
|
|
173
|
+
client_id: OPENAI_CODEX_CLIENT_ID,
|
|
174
|
+
}),
|
|
175
|
+
});
|
|
176
|
+
if (!response.ok)
|
|
177
|
+
throw new Error(`OpenAI Codex token refresh failed: ${response.status}`);
|
|
178
|
+
const data = (await response.json());
|
|
179
|
+
if (!data.access_token ||
|
|
180
|
+
!data.refresh_token ||
|
|
181
|
+
typeof data.expires_in !== "number") {
|
|
182
|
+
throw new Error("OpenAI Codex token refresh: missing fields in response");
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
refresh: data.refresh_token,
|
|
186
|
+
access: data.access_token,
|
|
187
|
+
expires: Date.now() + data.expires_in * 1000,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
export async function refreshOAuthToken(provider, refreshToken, proxyUrl, useProxy) {
|
|
191
|
+
if (provider === "openai-codex") {
|
|
192
|
+
return refreshOpenAICodexOAuth(refreshToken, proxyUrl, useProxy);
|
|
193
|
+
}
|
|
194
|
+
return refreshAnthropicOAuth(refreshToken, proxyUrl, useProxy);
|
|
195
|
+
}
|
|
196
|
+
// --- Token Exchange ---
|
|
197
|
+
export async function exchangeOAuthCode(params) {
|
|
198
|
+
const { provider, rawInput, verifier, expectedState, useProxy, proxyUrl } = params;
|
|
199
|
+
const parsed = parseAuthorizationInput(rawInput);
|
|
200
|
+
if (!parsed.code)
|
|
201
|
+
throw new Error("Could not extract authorization code from input");
|
|
202
|
+
if (expectedState && parsed.state && parsed.state !== expectedState) {
|
|
203
|
+
throw new Error("State mismatch — possible CSRF. Please try again.");
|
|
204
|
+
}
|
|
205
|
+
if (provider === "openai-codex") {
|
|
206
|
+
const url = buildProxiedUrl(OPENAI_CODEX_TOKEN_URL, useProxy, proxyUrl);
|
|
207
|
+
const response = await fetch(url, {
|
|
208
|
+
method: "POST",
|
|
209
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
210
|
+
body: new URLSearchParams({
|
|
211
|
+
grant_type: "authorization_code",
|
|
212
|
+
client_id: OPENAI_CODEX_CLIENT_ID,
|
|
213
|
+
code: parsed.code,
|
|
214
|
+
code_verifier: verifier,
|
|
215
|
+
redirect_uri: OPENAI_CODEX_REDIRECT_URI,
|
|
216
|
+
}),
|
|
217
|
+
});
|
|
218
|
+
if (!response.ok) {
|
|
219
|
+
const text = await response.text().catch(() => "");
|
|
220
|
+
throw new Error(`Token exchange failed (${response.status}): ${text}`);
|
|
221
|
+
}
|
|
222
|
+
const data = (await response.json());
|
|
223
|
+
if (!data.access_token ||
|
|
224
|
+
!data.refresh_token ||
|
|
225
|
+
typeof data.expires_in !== "number") {
|
|
226
|
+
throw new Error("Token response missing required fields");
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
refresh: data.refresh_token,
|
|
230
|
+
access: data.access_token,
|
|
231
|
+
expires: Date.now() + data.expires_in * 1000,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
// Anthropic
|
|
235
|
+
const url = buildProxiedUrl(ANTHROPIC_TOKEN_URL, useProxy, proxyUrl);
|
|
236
|
+
const response = await fetch(url, {
|
|
237
|
+
method: "POST",
|
|
238
|
+
headers: { "Content-Type": "application/json" },
|
|
239
|
+
body: JSON.stringify({
|
|
240
|
+
grant_type: "authorization_code",
|
|
241
|
+
client_id: ANTHROPIC_CLIENT_ID,
|
|
242
|
+
code: parsed.code,
|
|
243
|
+
state: parsed.state,
|
|
244
|
+
redirect_uri: ANTHROPIC_REDIRECT_URI,
|
|
245
|
+
code_verifier: verifier,
|
|
246
|
+
}),
|
|
247
|
+
});
|
|
248
|
+
if (!response.ok) {
|
|
249
|
+
const text = await response.text().catch(() => "");
|
|
250
|
+
throw new Error(`Token exchange failed (${response.status}): ${text}`);
|
|
251
|
+
}
|
|
252
|
+
const data = (await response.json());
|
|
253
|
+
return {
|
|
254
|
+
refresh: data.refresh_token,
|
|
255
|
+
access: data.access_token,
|
|
256
|
+
expires: Date.now() + data.expires_in * 1000 - 5 * 60 * 1000,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/oauth/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Api, Model } from "@mariozechner/pi-ai";
|
|
2
|
+
export type ThinkingLevel = "none" | "low" | "medium" | "high";
|
|
3
|
+
export interface ProviderConfig {
|
|
4
|
+
provider: string;
|
|
5
|
+
apiKey: string;
|
|
6
|
+
model: string;
|
|
7
|
+
useProxy: boolean;
|
|
8
|
+
proxyUrl: string;
|
|
9
|
+
thinking: ThinkingLevel;
|
|
10
|
+
followMode: boolean;
|
|
11
|
+
expandToolCalls: boolean;
|
|
12
|
+
apiType?: string;
|
|
13
|
+
customBaseUrl?: string;
|
|
14
|
+
authMethod?: "apikey" | "oauth";
|
|
15
|
+
}
|
|
16
|
+
export declare const THINKING_LEVELS: {
|
|
17
|
+
value: ThinkingLevel;
|
|
18
|
+
label: string;
|
|
19
|
+
}[];
|
|
20
|
+
export declare const API_TYPES: {
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
hint: string;
|
|
24
|
+
}[];
|
|
25
|
+
export declare function loadSavedConfig(): ProviderConfig | null;
|
|
26
|
+
export declare function saveConfig(config: ProviderConfig): void;
|
|
27
|
+
export declare function buildCustomModel(config: ProviderConfig): Model<Api> | null;
|
|
28
|
+
export declare function applyProxyToModel(model: Model<Api>, config: ProviderConfig): Model<Api>;
|
|
29
|
+
//# sourceMappingURL=provider-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-config.d.ts","sourceRoot":"","sources":["../src/provider-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAItD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACjC;AAMD,eAAO,MAAM,eAAe,EAAE;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAKpE,CAAC;AAEF,eAAO,MAAM,SAAS;;;;GAiCrB,CAAC;AAEF,wBAAgB,eAAe,IAAI,cAAc,GAAG,IAAI,CAmBvD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,QAEhD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAc1E;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,MAAM,EAAE,cAAc,GACrB,KAAK,CAAC,GAAG,CAAC,CAMZ"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { loadOAuthCredentials } from "./oauth";
|
|
2
|
+
import { getNamespace } from "./storage/namespace";
|
|
3
|
+
function storageKey() {
|
|
4
|
+
return `${getNamespace().localStoragePrefix}-provider-config`;
|
|
5
|
+
}
|
|
6
|
+
export const THINKING_LEVELS = [
|
|
7
|
+
{ value: "none", label: "None" },
|
|
8
|
+
{ value: "low", label: "Low" },
|
|
9
|
+
{ value: "medium", label: "Medium" },
|
|
10
|
+
{ value: "high", label: "High" },
|
|
11
|
+
];
|
|
12
|
+
export const API_TYPES = [
|
|
13
|
+
{
|
|
14
|
+
id: "openai-completions",
|
|
15
|
+
name: "OpenAI Completions",
|
|
16
|
+
hint: "Most compatible — Ollama, vLLM, LMStudio, etc.",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: "openai-responses",
|
|
20
|
+
name: "OpenAI Responses",
|
|
21
|
+
hint: "Newer OpenAI API format",
|
|
22
|
+
},
|
|
23
|
+
{ id: "anthropic-messages", name: "Anthropic Messages", hint: "Claude API" },
|
|
24
|
+
{
|
|
25
|
+
id: "google-generative-ai",
|
|
26
|
+
name: "Google Generative AI",
|
|
27
|
+
hint: "Gemini API",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: "azure-openai-responses",
|
|
31
|
+
name: "Azure OpenAI Responses",
|
|
32
|
+
hint: "Azure-hosted OpenAI",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "openai-codex-responses",
|
|
36
|
+
name: "OpenAI Codex Responses",
|
|
37
|
+
hint: "ChatGPT subscription models",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: "google-gemini-cli",
|
|
41
|
+
name: "Google Gemini CLI",
|
|
42
|
+
hint: "Cloud Code Assist",
|
|
43
|
+
},
|
|
44
|
+
{ id: "google-vertex", name: "Google Vertex AI", hint: "Vertex AI endpoint" },
|
|
45
|
+
];
|
|
46
|
+
export function loadSavedConfig() {
|
|
47
|
+
try {
|
|
48
|
+
const saved = localStorage.getItem(storageKey());
|
|
49
|
+
if (saved) {
|
|
50
|
+
const config = JSON.parse(saved);
|
|
51
|
+
if (config.proxyUrl === undefined)
|
|
52
|
+
config.proxyUrl = "";
|
|
53
|
+
if (config.followMode === undefined)
|
|
54
|
+
config.followMode = true;
|
|
55
|
+
if (config.expandToolCalls === undefined)
|
|
56
|
+
config.expandToolCalls = false;
|
|
57
|
+
if (config.apiType === undefined)
|
|
58
|
+
config.apiType = "";
|
|
59
|
+
if (config.customBaseUrl === undefined)
|
|
60
|
+
config.customBaseUrl = "";
|
|
61
|
+
if (config.authMethod === undefined)
|
|
62
|
+
config.authMethod = "apikey";
|
|
63
|
+
if (config.authMethod === "oauth") {
|
|
64
|
+
const creds = loadOAuthCredentials(config.provider);
|
|
65
|
+
if (creds)
|
|
66
|
+
config.apiKey = creds.access;
|
|
67
|
+
}
|
|
68
|
+
return config;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch { }
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
export function saveConfig(config) {
|
|
75
|
+
localStorage.setItem(storageKey(), JSON.stringify(config));
|
|
76
|
+
}
|
|
77
|
+
export function buildCustomModel(config) {
|
|
78
|
+
if (!config.apiType || !config.customBaseUrl || !config.model)
|
|
79
|
+
return null;
|
|
80
|
+
return {
|
|
81
|
+
id: config.model,
|
|
82
|
+
name: config.model,
|
|
83
|
+
api: config.apiType,
|
|
84
|
+
provider: "custom",
|
|
85
|
+
baseUrl: config.customBaseUrl,
|
|
86
|
+
reasoning: true,
|
|
87
|
+
input: ["text", "image"],
|
|
88
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
89
|
+
contextWindow: 128000,
|
|
90
|
+
maxTokens: 32000,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export function applyProxyToModel(model, config) {
|
|
94
|
+
if (!config.useProxy || !config.proxyUrl || !model.baseUrl)
|
|
95
|
+
return model;
|
|
96
|
+
return {
|
|
97
|
+
...model,
|
|
98
|
+
baseUrl: `${config.proxyUrl}/?url=${encodeURIComponent(model.baseUrl)}`,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=provider-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-config.js","sourceRoot":"","sources":["../src/provider-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { type AgentTool } from "@mariozechner/pi-agent-core";
|
|
2
|
+
import { type Api, type Model } from "@mariozechner/pi-ai";
|
|
3
|
+
import type { CustomCommand } from "just-bash/browser";
|
|
4
|
+
import { type ChatMessage, type SessionStats } from "./message-utils";
|
|
5
|
+
import { type ProviderConfig } from "./provider-config";
|
|
6
|
+
import { type SkillMeta } from "./skills";
|
|
7
|
+
import { type ChatSession } from "./storage";
|
|
8
|
+
export interface RuntimeAdapter {
|
|
9
|
+
tools: AgentTool[];
|
|
10
|
+
buildSystemPrompt: (skills: SkillMeta[]) => string;
|
|
11
|
+
getDocumentId: () => Promise<string>;
|
|
12
|
+
getDocumentMetadata?: () => Promise<{
|
|
13
|
+
metadata: object;
|
|
14
|
+
nameMap?: Record<number, string>;
|
|
15
|
+
} | null>;
|
|
16
|
+
onToolResult?: (toolCallId: string, result: string, isError: boolean) => void;
|
|
17
|
+
metadataTag?: string;
|
|
18
|
+
staticFiles?: Record<string, string>;
|
|
19
|
+
customCommands?: () => CustomCommand[];
|
|
20
|
+
}
|
|
21
|
+
export interface UploadedFile {
|
|
22
|
+
name: string;
|
|
23
|
+
size: number;
|
|
24
|
+
}
|
|
25
|
+
export interface RuntimeState {
|
|
26
|
+
messages: ChatMessage[];
|
|
27
|
+
isStreaming: boolean;
|
|
28
|
+
error: string | null;
|
|
29
|
+
providerConfig: ProviderConfig | null;
|
|
30
|
+
sessionStats: SessionStats;
|
|
31
|
+
currentSession: ChatSession | null;
|
|
32
|
+
sessions: ChatSession[];
|
|
33
|
+
nameMap: Record<number, string>;
|
|
34
|
+
uploads: UploadedFile[];
|
|
35
|
+
isUploading: boolean;
|
|
36
|
+
skills: SkillMeta[];
|
|
37
|
+
}
|
|
38
|
+
type StateListener = (state: RuntimeState) => void;
|
|
39
|
+
export declare class AgentRuntime {
|
|
40
|
+
private agent;
|
|
41
|
+
private config;
|
|
42
|
+
private pendingConfig;
|
|
43
|
+
private streamingMessageId;
|
|
44
|
+
private isStreaming;
|
|
45
|
+
private documentId;
|
|
46
|
+
private currentSessionId;
|
|
47
|
+
private sessionLoaded;
|
|
48
|
+
private followMode;
|
|
49
|
+
private skills;
|
|
50
|
+
private adapter;
|
|
51
|
+
private listeners;
|
|
52
|
+
private state;
|
|
53
|
+
constructor(adapter: RuntimeAdapter);
|
|
54
|
+
getState(): RuntimeState;
|
|
55
|
+
subscribe(listener: StateListener): () => void;
|
|
56
|
+
private emit;
|
|
57
|
+
private update;
|
|
58
|
+
private updateMessages;
|
|
59
|
+
setAdapter(adapter: RuntimeAdapter): void;
|
|
60
|
+
getAvailableProviders(): string[];
|
|
61
|
+
getModelsForProvider(provider: string): Model<Api>[];
|
|
62
|
+
private getActiveApiKey;
|
|
63
|
+
private handleAgentEvent;
|
|
64
|
+
applyConfig(config: ProviderConfig): void;
|
|
65
|
+
setProviderConfig(config: ProviderConfig): void;
|
|
66
|
+
abort(): void;
|
|
67
|
+
sendMessage(content: string, attachments?: string[]): Promise<void>;
|
|
68
|
+
clearMessages(): void;
|
|
69
|
+
private refreshSessions;
|
|
70
|
+
newSession(): Promise<void>;
|
|
71
|
+
switchSession(sessionId: string): Promise<void>;
|
|
72
|
+
deleteCurrentSession(): Promise<void>;
|
|
73
|
+
private onStreamingEnd;
|
|
74
|
+
init(): Promise<void>;
|
|
75
|
+
uploadFiles(files: {
|
|
76
|
+
name: string;
|
|
77
|
+
size: number;
|
|
78
|
+
data: Uint8Array;
|
|
79
|
+
}[]): Promise<void>;
|
|
80
|
+
removeUpload(name: string): Promise<void>;
|
|
81
|
+
private refreshSkillsAndRebuildAgent;
|
|
82
|
+
installSkill(inputs: {
|
|
83
|
+
path: string;
|
|
84
|
+
data: Uint8Array;
|
|
85
|
+
}[]): Promise<void>;
|
|
86
|
+
uninstallSkill(name: string): Promise<void>;
|
|
87
|
+
toggleFollowMode(): void;
|
|
88
|
+
toggleExpandToolCalls(): void;
|
|
89
|
+
getName(id: number): string | undefined;
|
|
90
|
+
dispose(): void;
|
|
91
|
+
}
|
|
92
|
+
export {};
|
|
93
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|