@xiaoso/dsh-tool-plus 0.1.0-beta.2 → 0.1.0-beta.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.
- package/README.en.md +122 -0
- package/README.md +3 -2
- package/THIRD_PARTY_NOTICES.md +4 -35
- package/lib/abort-B7izMMna.mjs +51 -0
- package/lib/abort-D1_Z5Ut5.mjs +51 -0
- package/lib/abort-dIkZBV7Q.mjs +51 -0
- package/lib/amazon-bedrock-B0nxT06F.mjs +917 -0
- package/lib/amazon-bedrock-D-shAr1X.mjs +917 -0
- package/lib/amazon-bedrock-WQhvjHYu.mjs +917 -0
- package/lib/anthropic-BWsZFzU8.mjs +262 -0
- package/lib/anthropic-CJCauvYz.mjs +3115 -0
- package/lib/anthropic-CMT1Qj1t.mjs +3115 -0
- package/lib/anthropic-CZghe_9U.mjs +3115 -0
- package/lib/anthropic-sCMH7JID.mjs +262 -0
- package/lib/anthropic-tTntD8BD.mjs +262 -0
- package/lib/api-key-login-BzqNdM2y.mjs +157 -0
- package/lib/api-key-login-CWVwvHT1.mjs +157 -0
- package/lib/api-key-login-CpzSezsi.mjs +157 -0
- package/lib/aws-credentials-8Mgn5MAy.mjs +867 -0
- package/lib/aws-credentials-CXryMobh.mjs +867 -0
- package/lib/aws-credentials-ChG79ey-.mjs +867 -0
- package/lib/azure-openai-responses-CNkHiLUh.mjs +274 -0
- package/lib/azure-openai-responses-Cgmc-rbL.mjs +274 -0
- package/lib/azure-openai-responses-DuukbD0F.mjs +274 -0
- package/lib/bun-shim.mjs +252 -12
- package/lib/bundled-references-CSuBco5p.mjs +55 -0
- package/lib/bundled-references-Cavaffah.mjs +55 -0
- package/lib/bundled-references-sLN0YdXU.mjs +55 -0
- package/lib/callback-server-BEFNf-jf.mjs +398 -0
- package/lib/callback-server-CQ5Jo8F-.mjs +398 -0
- package/lib/callback-server-DDSrZ6l_.mjs +398 -0
- package/lib/client.js +111 -41
- package/lib/cursor-B3zg7EHj.mjs +273 -0
- package/lib/cursor-B6TUEmgP.mjs +135 -0
- package/lib/cursor-BIQfBC6V.mjs +135 -0
- package/lib/cursor-D8gvtTL3.mjs +135 -0
- package/lib/cursor-DNk6eXDd.mjs +5470 -0
- package/lib/cursor-DkSX2h3H.mjs +5441 -0
- package/lib/cursor-MjSm74IJ.mjs +273 -0
- package/lib/cursor-aJrXeYCb.mjs +273 -0
- package/lib/cursor-mJQwUKXK.mjs +5441 -0
- package/lib/device-code-DBo3B5nh.mjs +51 -0
- package/lib/device-code-DIb0FU-H.mjs +51 -0
- package/lib/device-code-OI_tQcmc.mjs +51 -0
- package/lib/devin-BHZZyMhO.mjs +95 -0
- package/lib/devin-BK7DHeca.mjs +114 -0
- package/lib/devin-CfMp3cXS.mjs +95 -0
- package/lib/devin-CldyPD8K.mjs +95 -0
- package/lib/devin-CzRpTUOA.mjs +114 -0
- package/lib/devin-D9zR5B_R.mjs +542 -0
- package/lib/devin-DXOeNyU7.mjs +542 -0
- package/lib/devin-Q1yem3lp.mjs +114 -0
- package/lib/devin-vNZTNUON.mjs +542 -0
- package/lib/error-B3bevhrs.mjs +1449 -0
- package/lib/error-Dd8DIqs-.mjs +1449 -0
- package/lib/error-yCSG0mGC.mjs +1449 -0
- package/lib/event-stream-BDPi64mK.mjs +151 -0
- package/lib/event-stream-BbFZJy-z.mjs +151 -0
- package/lib/event-stream-loUa0s1T.mjs +151 -0
- package/lib/fs-promises-shim-Bx0fpxuk.mjs +57 -0
- package/lib/github-copilot-4GaMtQmg.mjs +208 -0
- package/lib/github-copilot-B1yiyVRh.mjs +104 -0
- package/lib/github-copilot-B2HGSIJK.mjs +104 -0
- package/lib/github-copilot-BWT3eAOF.mjs +208 -0
- package/lib/github-copilot-CYkjeTi3.mjs +208 -0
- package/lib/github-copilot-jscUZ8Hf.mjs +104 -0
- package/lib/gitlab-duo-CM7Ref1H.mjs +155 -0
- package/lib/gitlab-duo-akICyfeD.mjs +155 -0
- package/lib/gitlab-duo-gubO4FNw.mjs +155 -0
- package/lib/gitlab-duo-workflow-BGAF6JDw.mjs +91 -0
- package/lib/gitlab-duo-workflow-CSEgYk3N.mjs +91 -0
- package/lib/gitlab-duo-workflow-D78tdn8E.mjs +91 -0
- package/lib/google-BS4T25Pn.mjs +30 -0
- package/lib/google-TFe-7-of.mjs +30 -0
- package/lib/google-antigravity-DGmwC2KV.mjs +198 -0
- package/lib/google-antigravity-DNYhgTpA.mjs +198 -0
- package/lib/google-antigravity-Dlkdhahq.mjs +198 -0
- package/lib/google-auth-B6gjsZvg.mjs +232 -0
- package/lib/google-auth-De7_s3eo.mjs +232 -0
- package/lib/google-auth-DhqpOYrX.mjs +232 -0
- package/lib/google-gemini-cli-BG_LRdIV.mjs +850 -0
- package/lib/google-gemini-cli-CWu8HvXW.mjs +211 -0
- package/lib/google-gemini-cli-Cb97bzQc.mjs +850 -0
- package/lib/google-gemini-cli-Cqds_Q5T.mjs +850 -0
- package/lib/google-gemini-cli-Dsztq0N5.mjs +211 -0
- package/lib/google-gemini-cli-zJhiOcND.mjs +211 -0
- package/lib/google-oauth-shared-CuEHaDDj.mjs +147 -0
- package/lib/google-oauth-shared-CwNWYdmR.mjs +147 -0
- package/lib/google-oauth-shared-yqlyqPPC.mjs +147 -0
- package/lib/google-shared-CgKmmdO3.mjs +760 -0
- package/lib/google-shared-Dr-VG-ap.mjs +760 -0
- package/lib/google-shared-DzhCb9b0.mjs +760 -0
- package/lib/google-vertex-BDN2tLaD.mjs +99 -0
- package/lib/google-vertex-DopVOQOG.mjs +99 -0
- package/lib/google-vertex-kscbkyRb.mjs +99 -0
- package/lib/google-zyDOG9x7.mjs +30 -0
- package/lib/identity-Da1GPU9a.mjs +219 -0
- package/lib/identity-DnB63pS7.mjs +219 -0
- package/lib/identity-xRP7_eSR.mjs +219 -0
- package/lib/idle-iterator-Baoyn3Hp.mjs +366 -0
- package/lib/idle-iterator-C6XbWcuB.mjs +366 -0
- package/lib/idle-iterator-DUjKQEGT.mjs +366 -0
- package/lib/index.mjs +4608 -3935
- package/lib/kimi--wUOWER5.mjs +236 -0
- package/lib/kimi-DMVI-zrZ.mjs +236 -0
- package/lib/kimi-Dh0pv3WZ.mjs +236 -0
- package/lib/markit-BL3cH47U.mjs +1417 -0
- package/lib/markit-BNiNY6SE.mjs +1417 -0
- package/lib/markit-M0jhziqU.mjs +1417 -0
- package/lib/minimax-code-BK-3eBbz.mjs +53 -0
- package/lib/minimax-code-DCbuA6Yk.mjs +53 -0
- package/lib/minimax-code-Uq8Qu9LW.mjs +53 -0
- package/lib/models-CfT4coYT.mjs +104660 -0
- package/lib/models-D_XnT6ay.mjs +104660 -0
- package/lib/models-SGASygJ3.mjs +104660 -0
- package/lib/ollama-BQMGPxtV.mjs +589 -0
- package/lib/ollama-DPzBmq89.mjs +589 -0
- package/lib/ollama-DoBz5SFm.mjs +589 -0
- package/lib/openai-codex-Bi-4S4PX.mjs +255 -0
- package/lib/openai-codex-CQL_kvYL.mjs +255 -0
- package/lib/openai-codex-Ch8CkT3p.mjs +255 -0
- package/lib/openai-codex-responses-CvxL_FMF.mjs +3144 -0
- package/lib/openai-codex-responses-Cz-2qpC7.mjs +3144 -0
- package/lib/openai-codex-responses-pejZgdZo.mjs +3144 -0
- package/lib/openai-completions-CF8IyNtP.mjs +1360 -0
- package/lib/openai-completions-DIf361kF.mjs +1360 -0
- package/lib/openai-completions-i8doczAk.mjs +1360 -0
- package/lib/openai-reasoning-fallback-DGVVLgd1.mjs +286 -0
- package/lib/openai-reasoning-fallback-Nj6yB2rY.mjs +286 -0
- package/lib/openai-reasoning-fallback-OdJREP1o.mjs +286 -0
- package/lib/openai-responses-BqXJInHX.mjs +867 -0
- package/lib/openai-responses-DTkBiiy-.mjs +867 -0
- package/lib/openai-responses-Db_a-U4-.mjs +867 -0
- package/lib/opencode-DaJjcUbf.mjs +38 -0
- package/lib/opencode-DhMolSoB.mjs +38 -0
- package/lib/opencode-Rq_Q2vAO.mjs +38 -0
- package/lib/perplexity-9b-RQ0mV.mjs +194 -0
- package/lib/perplexity-C4iLVMUj.mjs +194 -0
- package/lib/perplexity-Uu7Jzg5b.mjs +194 -0
- package/lib/proxy-DDqrmjjC.mjs +190 -0
- package/lib/proxy-ZtUcl6r5.mjs +190 -0
- package/lib/proxy-pM_NIv-H.mjs +190 -0
- package/lib/request-debug-HJMoJncL.mjs +183 -0
- package/lib/sanitize-text-CfcXzw5X.mjs +33 -0
- package/lib/scrapers-BkFfcPHj.mjs +9198 -0
- package/lib/scrapers-CL-WgdU1.mjs +9198 -0
- package/lib/scrapers-CVptboMs.mjs +9198 -0
- package/lib/scrapers-CipyKyCH.mjs +9198 -0
- package/lib/scrapers-DGfrYhtw.mjs +9198 -0
- package/lib/scrapers-DSUPYoUF.mjs +9198 -0
- package/lib/scrapers-DZ2GXmp7.mjs +9198 -0
- package/lib/scrapers-nhQAvc8d.mjs +9198 -0
- package/lib/shell-snapshot-fn-env.sh +67 -43
- package/lib/src-BgpusnsB.mjs +5076 -0
- package/lib/src-DTid0g4K.mjs +5001 -0
- package/lib/src-lDmkSRbm.mjs +5006 -0
- package/lib/stream-BlldLkVq.mjs +10236 -0
- package/lib/stream-CRtexYLe.mjs +10236 -0
- package/lib/stream-C_RAoxJC.mjs +10236 -0
- package/lib/stream-markup-healing-2toHXWXM.mjs +491 -0
- package/lib/stream-markup-healing-DMsxBx1L.mjs +491 -0
- package/lib/stream-markup-healing-KMkiAA00.mjs +491 -0
- package/lib/turndown-DN7ByzEI.mjs +667 -0
- package/lib/types/client/locales.d.ts +1 -1
- package/lib/types/config/fields.d.ts +1 -1
- package/lib/types/config/settings.d.ts +25 -3
- package/lib/types/config/truncate.d.ts +9 -5
- package/lib/types/tools/bash/background.d.ts +1 -1
- package/lib/types/tools/bash/bash-executor.d.ts +4 -0
- package/lib/types/tools/bash/bash-interceptor.d.ts +10 -8
- package/lib/types/tools/bash/cd-workdir.d.ts +35 -0
- package/lib/types/tools/bash/non-interactive-env.d.ts +2 -0
- package/lib/types/tools/bash/render.d.ts +4 -3
- package/lib/types/tools/bash/sanitize-text.d.ts +5 -0
- package/lib/types/tools/bash/shell-snapshot.d.ts +4 -1
- package/lib/types/tools/bash/shell-tokenize.d.ts +60 -0
- package/lib/types/tools/bash/streaming-output.d.ts +12 -212
- package/lib/types/tools/bash/which.d.ts +20 -0
- package/lib/types/tools/bash/windows-shell.d.ts +31 -0
- package/lib/types/tools/edit/adapter/index.d.ts +25 -3
- package/lib/types/tools/edit/adapter/tools/auto-generated-guard.d.ts +7 -17
- package/lib/types/tools/glob/adapter/index.d.ts +27 -1
- package/lib/types/tools/grep/adapter/index.d.ts +29 -1
- package/lib/types/tools/omp/edit/dispatch.d.ts +43 -0
- package/lib/types/tools/omp/edit/hashline/noop-loop-guard.d.ts +3 -1
- package/lib/types/tools/omp/sdk.d.ts +6 -0
- package/lib/types/tools/omp/tools/auto-generated-guard.d.ts +20 -0
- package/lib/types/tools/omp/tools/fetch.d.ts +2 -0
- package/lib/types/tools/omp/tools/read.d.ts +2 -8
- package/lib/types/tools/omp/tools/write.d.ts +4 -4
- package/lib/types/tools/omp/utils/image-loading.d.ts +10 -36
- package/lib/types/tools/read/adapter/index.d.ts +4 -1
- package/lib/types/tools/read-image/index.d.ts +4 -0
- package/lib/types/tools/shared/auto-generated-guard.dsh.d.ts +16 -4
- package/lib/types/tools/shared/bun-shim.d.ts +39 -3
- package/lib/types/tools/shared/fs-promises-shim.d.ts +3 -1
- package/lib/types/tools/shared/image-bridge.d.ts +98 -0
- package/lib/types/tools/shared/omp-prompt.d.ts +17 -9
- package/lib/types/tools/shared/session-state.d.ts +9 -3
- package/lib/utils-2Wq2eATG.mjs +8119 -0
- package/lib/utils-BnX8O3vi.mjs +12303 -0
- package/lib/utils-Bw139LTz.mjs +8119 -0
- package/lib/utils-CE8N8P4Q.mjs +12315 -0
- package/lib/utils-CZw4tVZQ.mjs +12315 -0
- package/lib/utils-C_MrQ_0z.mjs +12301 -0
- package/lib/utils-CiGN7OHR.mjs +12315 -0
- package/lib/utils-Cp76gCyk.mjs +8119 -0
- package/lib/utils-D0GRDgAr.mjs +12315 -0
- package/lib/utils-D0Z1fyoO.mjs +12299 -0
- package/lib/utils-D2YknRk4.mjs +51 -0
- package/lib/utils-DppGHXQB.mjs +51 -0
- package/lib/utils-DzXZDfYc.mjs +51 -0
- package/lib/utils-W8WdSBpX.mjs +12315 -0
- package/lib/vision-guard-01qSwFpf.mjs +92 -0
- package/lib/vision-guard-BDD4OrKo.mjs +92 -0
- package/lib/vision-guard-DzZGaOga.mjs +92 -0
- package/lib/wafer-CgtPHerf.mjs +17 -0
- package/lib/wafer-DRU0EjZX.mjs +17 -0
- package/lib/wafer-cBtrn6q9.mjs +17 -0
- package/lib/xai-oauth-Buk8XVvM.mjs +446 -0
- package/lib/xai-oauth-CMal8l1O.mjs +446 -0
- package/lib/xai-oauth-DPHDXKD7.mjs +446 -0
- package/lib/xiaomi-CZgwvX2G.mjs +157 -0
- package/lib/xiaomi-D2qT5cAC.mjs +157 -0
- package/lib/xiaomi-Dd87KSg5.mjs +157 -0
- package/lib/zai-7DWMkEqM.mjs +203 -0
- package/lib/zai-C59YnomG.mjs +203 -0
- package/lib/zai-CFeOt-53.mjs +203 -0
- package/lib/zip-Cg9ANN_U.mjs +1316 -0
- package/lib/zip-D36ZKsP8.mjs +1316 -0
- package/lib/zip-D6QXpvaJ.mjs +1316 -0
- package/package.json +14 -10
- package/presets/package.json +1 -1
- package/presets/tool-plus-ptc/preset.yml +1 -1
- package/presets/tool-plus-standard/preset.yml +1 -1
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { installBunShim as __installBunShim } from "./bun-shim.mjs";
|
|
2
|
+
__installBunShim();
|
|
3
|
+
import { c as OAuthError } from "./error-yCSG0mGC.mjs";
|
|
4
|
+
import { i as clearGitLabDuoDirectAccessCache } from "./stream-BlldLkVq.mjs";
|
|
5
|
+
import { t as OAuthCallbackFlow } from "./callback-server-DDSrZ6l_.mjs";
|
|
6
|
+
import { t as generatePKCE } from "./pkce-BlQikGPu.mjs";
|
|
7
|
+
//#region node_modules/.pnpm/@oh-my-pi+pi-ai@17.3.5/node_modules/@oh-my-pi/pi-ai/src/registry/oauth/gitlab-duo.ts
|
|
8
|
+
const GITLAB_COM_URL = "https://gitlab.com";
|
|
9
|
+
/**
|
|
10
|
+
* Default OAuth client id baked into the bundled GitLab Duo login flow. GitLab
|
|
11
|
+
* authorize requests are rejected outright (`The redirect URI included is not
|
|
12
|
+
* valid`) whenever this client id's registered redirect URI list drifts from
|
|
13
|
+
* `http://localhost:8080/callback`. Users hitting that case can either:
|
|
14
|
+
*
|
|
15
|
+
* - register their own GitLab OAuth application and override the bundled
|
|
16
|
+
* credentials with `GITLAB_CLIENT_ID` + `GITLAB_REDIRECT_URI`, or
|
|
17
|
+
* - skip OAuth entirely and supply a Personal Access Token via `GITLAB_TOKEN`.
|
|
18
|
+
*
|
|
19
|
+
* @see https://github.com/can1357/oh-my-pi/issues/2424
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_CLIENT_ID = "da4edff2e6ebd2bc3208611e2768bc1c1dd7be791dc5ff26ca34ca9ee44f7d4b";
|
|
22
|
+
const OAUTH_SCOPES = ["api"];
|
|
23
|
+
const DEFAULT_CALLBACK_PORT = 8080;
|
|
24
|
+
const DEFAULT_CALLBACK_PATH = "/callback";
|
|
25
|
+
const DEFAULT_CALLBACK_HOSTNAME = "localhost";
|
|
26
|
+
/**
|
|
27
|
+
* Resolve the OAuth client id, preferring `GITLAB_CLIENT_ID` when set so users
|
|
28
|
+
* with their own GitLab OAuth application can bypass the bundled credentials.
|
|
29
|
+
*/
|
|
30
|
+
function resolveClientId() {
|
|
31
|
+
const env = process.env.GITLAB_CLIENT_ID?.trim();
|
|
32
|
+
return env && env.length > 0 ? env : DEFAULT_CLIENT_ID;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve callback-server options from `GITLAB_REDIRECT_URI`. When set, the
|
|
36
|
+
* exact string is advertised to GitLab (strict matching), random-port fallback
|
|
37
|
+
* is disabled, and HTTP loopback URIs bind the listener to the URI's host/port
|
|
38
|
+
* so the browser callback lands on us. HTTPS loopback URIs are rejected because
|
|
39
|
+
* the local callback server is plaintext HTTP. Non-loopback URIs bind a random
|
|
40
|
+
* local port — only the paste-code path can complete in that case.
|
|
41
|
+
*/
|
|
42
|
+
function resolveCallbackOptions() {
|
|
43
|
+
const raw = process.env.GITLAB_REDIRECT_URI?.trim();
|
|
44
|
+
if (!raw) return {
|
|
45
|
+
preferredPort: DEFAULT_CALLBACK_PORT,
|
|
46
|
+
callbackPath: DEFAULT_CALLBACK_PATH,
|
|
47
|
+
callbackHostname: DEFAULT_CALLBACK_HOSTNAME
|
|
48
|
+
};
|
|
49
|
+
let parsed;
|
|
50
|
+
try {
|
|
51
|
+
parsed = new URL(raw);
|
|
52
|
+
} catch {
|
|
53
|
+
throw new OAuthError(`Invalid GITLAB_REDIRECT_URI: ${raw}`, {
|
|
54
|
+
kind: "configuration",
|
|
55
|
+
provider: "gitlab-duo"
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") throw new OAuthError(`GITLAB_REDIRECT_URI must use http:// or https://, got: ${raw}`, {
|
|
59
|
+
kind: "configuration",
|
|
60
|
+
provider: "gitlab-duo"
|
|
61
|
+
});
|
|
62
|
+
const isLoopback = parsed.hostname === "localhost" || parsed.hostname === "127.0.0.1" || parsed.hostname === "[::1]";
|
|
63
|
+
if (isLoopback && parsed.protocol !== "http:") throw new OAuthError(`GITLAB_REDIRECT_URI loopback callbacks must use http://, got: ${raw}`, {
|
|
64
|
+
kind: "configuration",
|
|
65
|
+
provider: "gitlab-duo"
|
|
66
|
+
});
|
|
67
|
+
const port = parsed.port ? Number.parseInt(parsed.port, 10) : parsed.protocol === "https:" ? 443 : 80;
|
|
68
|
+
return {
|
|
69
|
+
preferredPort: isLoopback ? port : 0,
|
|
70
|
+
callbackPath: parsed.pathname || DEFAULT_CALLBACK_PATH,
|
|
71
|
+
callbackHostname: isLoopback ? parsed.hostname : DEFAULT_CALLBACK_HOSTNAME,
|
|
72
|
+
redirectUri: raw
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function mapTokenResponse(payload) {
|
|
76
|
+
if (!payload.access_token || !payload.refresh_token || typeof payload.expires_in !== "number") throw new OAuthError("GitLab OAuth token response missing required fields", {
|
|
77
|
+
kind: "validation",
|
|
78
|
+
provider: "gitlab-duo"
|
|
79
|
+
});
|
|
80
|
+
const createdAtMs = typeof payload.created_at === "number" && Number.isFinite(payload.created_at) ? payload.created_at * 1e3 : Date.now();
|
|
81
|
+
return {
|
|
82
|
+
access: payload.access_token,
|
|
83
|
+
refresh: payload.refresh_token,
|
|
84
|
+
expires: createdAtMs + payload.expires_in * 1e3 - 3e5
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
var GitLabDuoOAuthFlow = class extends OAuthCallbackFlow {
|
|
88
|
+
#pkce;
|
|
89
|
+
#clientId;
|
|
90
|
+
#fetch;
|
|
91
|
+
constructor(ctrl, pkce, clientId, options) {
|
|
92
|
+
super(ctrl, options);
|
|
93
|
+
this.#pkce = pkce;
|
|
94
|
+
this.#clientId = clientId;
|
|
95
|
+
this.#fetch = ctrl.fetch ?? fetch;
|
|
96
|
+
}
|
|
97
|
+
async generateAuthUrl(state, redirectUri) {
|
|
98
|
+
const authParams = new URLSearchParams({
|
|
99
|
+
client_id: this.#clientId,
|
|
100
|
+
redirect_uri: redirectUri,
|
|
101
|
+
response_type: "code",
|
|
102
|
+
scope: OAUTH_SCOPES.join(" "),
|
|
103
|
+
code_challenge: this.#pkce.challenge,
|
|
104
|
+
code_challenge_method: "S256",
|
|
105
|
+
state
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
url: `${GITLAB_COM_URL}/oauth/authorize?${authParams.toString()}`,
|
|
109
|
+
instructions: "Complete GitLab login in browser. If GitLab responds with \"The redirect URI included is not valid\", register your own GitLab OAuth application and set GITLAB_CLIENT_ID + GITLAB_REDIRECT_URI, or use a Personal Access Token via GITLAB_TOKEN."
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
async exchangeToken(code, _state, redirectUri) {
|
|
113
|
+
const response = await this.#fetch(`${GITLAB_COM_URL}/oauth/token`, {
|
|
114
|
+
method: "POST",
|
|
115
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
116
|
+
body: new URLSearchParams({
|
|
117
|
+
client_id: this.#clientId,
|
|
118
|
+
grant_type: "authorization_code",
|
|
119
|
+
code,
|
|
120
|
+
code_verifier: this.#pkce.verifier,
|
|
121
|
+
redirect_uri: redirectUri
|
|
122
|
+
}).toString()
|
|
123
|
+
});
|
|
124
|
+
if (!response.ok) throw new OAuthError(`GitLab OAuth token exchange failed: ${response.status} ${await response.text()}`, {
|
|
125
|
+
kind: "token-exchange",
|
|
126
|
+
provider: "gitlab-duo",
|
|
127
|
+
status: response.status
|
|
128
|
+
});
|
|
129
|
+
clearGitLabDuoDirectAccessCache();
|
|
130
|
+
return mapTokenResponse(await response.json());
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
async function loginGitLabDuo(callbacks) {
|
|
134
|
+
return new GitLabDuoOAuthFlow(callbacks, await generatePKCE(), resolveClientId(), resolveCallbackOptions()).login();
|
|
135
|
+
}
|
|
136
|
+
async function refreshGitLabDuoToken(credentials) {
|
|
137
|
+
const response = await fetch(`${GITLAB_COM_URL}/oauth/token`, {
|
|
138
|
+
method: "POST",
|
|
139
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
140
|
+
body: new URLSearchParams({
|
|
141
|
+
client_id: resolveClientId(),
|
|
142
|
+
grant_type: "refresh_token",
|
|
143
|
+
refresh_token: credentials.refresh
|
|
144
|
+
}).toString()
|
|
145
|
+
});
|
|
146
|
+
if (!response.ok) throw new OAuthError(`GitLab OAuth refresh failed: ${response.status} ${await response.text()}`, {
|
|
147
|
+
kind: "token-refresh",
|
|
148
|
+
provider: "gitlab-duo",
|
|
149
|
+
status: response.status
|
|
150
|
+
});
|
|
151
|
+
clearGitLabDuoDirectAccessCache();
|
|
152
|
+
return mapTokenResponse(await response.json());
|
|
153
|
+
}
|
|
154
|
+
//#endregion
|
|
155
|
+
export { loginGitLabDuo, refreshGitLabDuoToken };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { installBunShim as __installBunShim } from "./bun-shim.mjs";
|
|
2
|
+
__installBunShim();
|
|
3
|
+
import { c as OAuthError } from "./error-Dd8DIqs-.mjs";
|
|
4
|
+
import { t as OAuthCallbackFlow } from "./callback-server-CQ5Jo8F-.mjs";
|
|
5
|
+
import { t as generatePKCE } from "./pkce-BlQikGPu.mjs";
|
|
6
|
+
//#region node_modules/.pnpm/@oh-my-pi+pi-ai@17.3.5/node_modules/@oh-my-pi/pi-ai/src/registry/oauth/gitlab-duo-workflow.ts
|
|
7
|
+
const GITLAB_COM_URL = "https://gitlab.com";
|
|
8
|
+
const GITLAB_DUO_WORKFLOW_OAUTH_CLIENT_ID = "36f2a70cddeb5a0889d4fd8295c241b7e9848e89cf9e599d0eed2d8e5350fbf5";
|
|
9
|
+
const GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI = "vscode://gitlab.gitlab-workflow/authentication";
|
|
10
|
+
const OAUTH_SCOPES = ["api"];
|
|
11
|
+
function mapTokenResponse(payload) {
|
|
12
|
+
if (!payload.access_token || !payload.refresh_token || typeof payload.expires_in !== "number") throw new OAuthError("GitLab Duo Workflow OAuth token response missing required fields", {
|
|
13
|
+
kind: "validation",
|
|
14
|
+
provider: "gitlab-duo-workflow"
|
|
15
|
+
});
|
|
16
|
+
const createdAtMs = typeof payload.created_at === "number" && Number.isFinite(payload.created_at) ? payload.created_at * 1e3 : Date.now();
|
|
17
|
+
return {
|
|
18
|
+
access: payload.access_token,
|
|
19
|
+
refresh: payload.refresh_token,
|
|
20
|
+
expires: createdAtMs + payload.expires_in * 1e3 - 3e5
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
var GitLabDuoWorkflowOAuthFlow = class extends OAuthCallbackFlow {
|
|
24
|
+
#pkce;
|
|
25
|
+
#fetch;
|
|
26
|
+
constructor(ctrl, pkce) {
|
|
27
|
+
super(ctrl, {
|
|
28
|
+
preferredPort: 0,
|
|
29
|
+
redirectUri: GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI
|
|
30
|
+
});
|
|
31
|
+
this.#pkce = pkce;
|
|
32
|
+
this.#fetch = ctrl.fetch ?? fetch;
|
|
33
|
+
}
|
|
34
|
+
async generateAuthUrl(state) {
|
|
35
|
+
const authParams = new URLSearchParams({
|
|
36
|
+
client_id: GITLAB_DUO_WORKFLOW_OAUTH_CLIENT_ID,
|
|
37
|
+
redirect_uri: GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI,
|
|
38
|
+
response_type: "code",
|
|
39
|
+
scope: OAUTH_SCOPES.join(" "),
|
|
40
|
+
code_challenge: this.#pkce.challenge,
|
|
41
|
+
code_challenge_method: "S256",
|
|
42
|
+
state
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
url: `${GITLAB_COM_URL}/oauth/authorize?${authParams.toString()}`,
|
|
46
|
+
instructions: "Complete GitLab login in your browser. This uses GitLab's official VS Code OAuth application. If the redirect opens VS Code instead of returning to OMP, copy the full vscode://gitlab.gitlab-workflow/authentication?... callback URL from VS Code/browser and paste it back into OMP."
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async exchangeToken(code) {
|
|
50
|
+
const response = await this.#fetch(`${GITLAB_COM_URL}/oauth/token`, {
|
|
51
|
+
method: "POST",
|
|
52
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
53
|
+
body: new URLSearchParams({
|
|
54
|
+
client_id: GITLAB_DUO_WORKFLOW_OAUTH_CLIENT_ID,
|
|
55
|
+
redirect_uri: GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI,
|
|
56
|
+
grant_type: "authorization_code",
|
|
57
|
+
code,
|
|
58
|
+
code_verifier: this.#pkce.verifier
|
|
59
|
+
}).toString()
|
|
60
|
+
});
|
|
61
|
+
if (!response.ok) throw new OAuthError(`GitLab Duo Workflow OAuth token exchange failed: ${response.status} ${await response.text()}`, {
|
|
62
|
+
kind: "token-exchange",
|
|
63
|
+
provider: "gitlab-duo-workflow",
|
|
64
|
+
status: response.status
|
|
65
|
+
});
|
|
66
|
+
return mapTokenResponse(await response.json());
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
async function loginGitLabDuoWorkflow(callbacks) {
|
|
70
|
+
return new GitLabDuoWorkflowOAuthFlow(callbacks, await generatePKCE()).login();
|
|
71
|
+
}
|
|
72
|
+
async function refreshGitLabDuoWorkflowToken(credentials, fetchImpl = fetch) {
|
|
73
|
+
const response = await fetchImpl(`${GITLAB_COM_URL}/oauth/token`, {
|
|
74
|
+
method: "POST",
|
|
75
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
76
|
+
body: new URLSearchParams({
|
|
77
|
+
client_id: GITLAB_DUO_WORKFLOW_OAUTH_CLIENT_ID,
|
|
78
|
+
redirect_uri: GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI,
|
|
79
|
+
grant_type: "refresh_token",
|
|
80
|
+
refresh_token: credentials.refresh
|
|
81
|
+
}).toString()
|
|
82
|
+
});
|
|
83
|
+
if (!response.ok) throw new OAuthError(`GitLab Duo Workflow OAuth refresh failed: ${response.status} ${await response.text()}`, {
|
|
84
|
+
kind: "token-refresh",
|
|
85
|
+
provider: "gitlab-duo-workflow",
|
|
86
|
+
status: response.status
|
|
87
|
+
});
|
|
88
|
+
return mapTokenResponse(await response.json());
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
export { loginGitLabDuoWorkflow, refreshGitLabDuoWorkflowToken };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { installBunShim as __installBunShim } from "./bun-shim.mjs";
|
|
2
|
+
__installBunShim();
|
|
3
|
+
import { c as OAuthError } from "./error-B3bevhrs.mjs";
|
|
4
|
+
import { t as OAuthCallbackFlow } from "./callback-server-BEFNf-jf.mjs";
|
|
5
|
+
import { t as generatePKCE } from "./pkce-BlQikGPu.mjs";
|
|
6
|
+
//#region node_modules/.pnpm/@oh-my-pi+pi-ai@17.3.5/node_modules/@oh-my-pi/pi-ai/src/registry/oauth/gitlab-duo-workflow.ts
|
|
7
|
+
const GITLAB_COM_URL = "https://gitlab.com";
|
|
8
|
+
const GITLAB_DUO_WORKFLOW_OAUTH_CLIENT_ID = "36f2a70cddeb5a0889d4fd8295c241b7e9848e89cf9e599d0eed2d8e5350fbf5";
|
|
9
|
+
const GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI = "vscode://gitlab.gitlab-workflow/authentication";
|
|
10
|
+
const OAUTH_SCOPES = ["api"];
|
|
11
|
+
function mapTokenResponse(payload) {
|
|
12
|
+
if (!payload.access_token || !payload.refresh_token || typeof payload.expires_in !== "number") throw new OAuthError("GitLab Duo Workflow OAuth token response missing required fields", {
|
|
13
|
+
kind: "validation",
|
|
14
|
+
provider: "gitlab-duo-workflow"
|
|
15
|
+
});
|
|
16
|
+
const createdAtMs = typeof payload.created_at === "number" && Number.isFinite(payload.created_at) ? payload.created_at * 1e3 : Date.now();
|
|
17
|
+
return {
|
|
18
|
+
access: payload.access_token,
|
|
19
|
+
refresh: payload.refresh_token,
|
|
20
|
+
expires: createdAtMs + payload.expires_in * 1e3 - 3e5
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
var GitLabDuoWorkflowOAuthFlow = class extends OAuthCallbackFlow {
|
|
24
|
+
#pkce;
|
|
25
|
+
#fetch;
|
|
26
|
+
constructor(ctrl, pkce) {
|
|
27
|
+
super(ctrl, {
|
|
28
|
+
preferredPort: 0,
|
|
29
|
+
redirectUri: GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI
|
|
30
|
+
});
|
|
31
|
+
this.#pkce = pkce;
|
|
32
|
+
this.#fetch = ctrl.fetch ?? fetch;
|
|
33
|
+
}
|
|
34
|
+
async generateAuthUrl(state) {
|
|
35
|
+
const authParams = new URLSearchParams({
|
|
36
|
+
client_id: GITLAB_DUO_WORKFLOW_OAUTH_CLIENT_ID,
|
|
37
|
+
redirect_uri: GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI,
|
|
38
|
+
response_type: "code",
|
|
39
|
+
scope: OAUTH_SCOPES.join(" "),
|
|
40
|
+
code_challenge: this.#pkce.challenge,
|
|
41
|
+
code_challenge_method: "S256",
|
|
42
|
+
state
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
url: `${GITLAB_COM_URL}/oauth/authorize?${authParams.toString()}`,
|
|
46
|
+
instructions: "Complete GitLab login in your browser. This uses GitLab's official VS Code OAuth application. If the redirect opens VS Code instead of returning to OMP, copy the full vscode://gitlab.gitlab-workflow/authentication?... callback URL from VS Code/browser and paste it back into OMP."
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async exchangeToken(code) {
|
|
50
|
+
const response = await this.#fetch(`${GITLAB_COM_URL}/oauth/token`, {
|
|
51
|
+
method: "POST",
|
|
52
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
53
|
+
body: new URLSearchParams({
|
|
54
|
+
client_id: GITLAB_DUO_WORKFLOW_OAUTH_CLIENT_ID,
|
|
55
|
+
redirect_uri: GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI,
|
|
56
|
+
grant_type: "authorization_code",
|
|
57
|
+
code,
|
|
58
|
+
code_verifier: this.#pkce.verifier
|
|
59
|
+
}).toString()
|
|
60
|
+
});
|
|
61
|
+
if (!response.ok) throw new OAuthError(`GitLab Duo Workflow OAuth token exchange failed: ${response.status} ${await response.text()}`, {
|
|
62
|
+
kind: "token-exchange",
|
|
63
|
+
provider: "gitlab-duo-workflow",
|
|
64
|
+
status: response.status
|
|
65
|
+
});
|
|
66
|
+
return mapTokenResponse(await response.json());
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
async function loginGitLabDuoWorkflow(callbacks) {
|
|
70
|
+
return new GitLabDuoWorkflowOAuthFlow(callbacks, await generatePKCE()).login();
|
|
71
|
+
}
|
|
72
|
+
async function refreshGitLabDuoWorkflowToken(credentials, fetchImpl = fetch) {
|
|
73
|
+
const response = await fetchImpl(`${GITLAB_COM_URL}/oauth/token`, {
|
|
74
|
+
method: "POST",
|
|
75
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
76
|
+
body: new URLSearchParams({
|
|
77
|
+
client_id: GITLAB_DUO_WORKFLOW_OAUTH_CLIENT_ID,
|
|
78
|
+
redirect_uri: GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI,
|
|
79
|
+
grant_type: "refresh_token",
|
|
80
|
+
refresh_token: credentials.refresh
|
|
81
|
+
}).toString()
|
|
82
|
+
});
|
|
83
|
+
if (!response.ok) throw new OAuthError(`GitLab Duo Workflow OAuth refresh failed: ${response.status} ${await response.text()}`, {
|
|
84
|
+
kind: "token-refresh",
|
|
85
|
+
provider: "gitlab-duo-workflow",
|
|
86
|
+
status: response.status
|
|
87
|
+
});
|
|
88
|
+
return mapTokenResponse(await response.json());
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
export { loginGitLabDuoWorkflow, refreshGitLabDuoWorkflowToken };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { installBunShim as __installBunShim } from "./bun-shim.mjs";
|
|
2
|
+
__installBunShim();
|
|
3
|
+
import { c as OAuthError } from "./error-yCSG0mGC.mjs";
|
|
4
|
+
import { t as OAuthCallbackFlow } from "./callback-server-DDSrZ6l_.mjs";
|
|
5
|
+
import { t as generatePKCE } from "./pkce-BlQikGPu.mjs";
|
|
6
|
+
//#region node_modules/.pnpm/@oh-my-pi+pi-ai@17.3.5/node_modules/@oh-my-pi/pi-ai/src/registry/oauth/gitlab-duo-workflow.ts
|
|
7
|
+
const GITLAB_COM_URL = "https://gitlab.com";
|
|
8
|
+
const GITLAB_DUO_WORKFLOW_OAUTH_CLIENT_ID = "36f2a70cddeb5a0889d4fd8295c241b7e9848e89cf9e599d0eed2d8e5350fbf5";
|
|
9
|
+
const GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI = "vscode://gitlab.gitlab-workflow/authentication";
|
|
10
|
+
const OAUTH_SCOPES = ["api"];
|
|
11
|
+
function mapTokenResponse(payload) {
|
|
12
|
+
if (!payload.access_token || !payload.refresh_token || typeof payload.expires_in !== "number") throw new OAuthError("GitLab Duo Workflow OAuth token response missing required fields", {
|
|
13
|
+
kind: "validation",
|
|
14
|
+
provider: "gitlab-duo-workflow"
|
|
15
|
+
});
|
|
16
|
+
const createdAtMs = typeof payload.created_at === "number" && Number.isFinite(payload.created_at) ? payload.created_at * 1e3 : Date.now();
|
|
17
|
+
return {
|
|
18
|
+
access: payload.access_token,
|
|
19
|
+
refresh: payload.refresh_token,
|
|
20
|
+
expires: createdAtMs + payload.expires_in * 1e3 - 3e5
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
var GitLabDuoWorkflowOAuthFlow = class extends OAuthCallbackFlow {
|
|
24
|
+
#pkce;
|
|
25
|
+
#fetch;
|
|
26
|
+
constructor(ctrl, pkce) {
|
|
27
|
+
super(ctrl, {
|
|
28
|
+
preferredPort: 0,
|
|
29
|
+
redirectUri: GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI
|
|
30
|
+
});
|
|
31
|
+
this.#pkce = pkce;
|
|
32
|
+
this.#fetch = ctrl.fetch ?? fetch;
|
|
33
|
+
}
|
|
34
|
+
async generateAuthUrl(state) {
|
|
35
|
+
const authParams = new URLSearchParams({
|
|
36
|
+
client_id: GITLAB_DUO_WORKFLOW_OAUTH_CLIENT_ID,
|
|
37
|
+
redirect_uri: GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI,
|
|
38
|
+
response_type: "code",
|
|
39
|
+
scope: OAUTH_SCOPES.join(" "),
|
|
40
|
+
code_challenge: this.#pkce.challenge,
|
|
41
|
+
code_challenge_method: "S256",
|
|
42
|
+
state
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
url: `${GITLAB_COM_URL}/oauth/authorize?${authParams.toString()}`,
|
|
46
|
+
instructions: "Complete GitLab login in your browser. This uses GitLab's official VS Code OAuth application. If the redirect opens VS Code instead of returning to OMP, copy the full vscode://gitlab.gitlab-workflow/authentication?... callback URL from VS Code/browser and paste it back into OMP."
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async exchangeToken(code) {
|
|
50
|
+
const response = await this.#fetch(`${GITLAB_COM_URL}/oauth/token`, {
|
|
51
|
+
method: "POST",
|
|
52
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
53
|
+
body: new URLSearchParams({
|
|
54
|
+
client_id: GITLAB_DUO_WORKFLOW_OAUTH_CLIENT_ID,
|
|
55
|
+
redirect_uri: GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI,
|
|
56
|
+
grant_type: "authorization_code",
|
|
57
|
+
code,
|
|
58
|
+
code_verifier: this.#pkce.verifier
|
|
59
|
+
}).toString()
|
|
60
|
+
});
|
|
61
|
+
if (!response.ok) throw new OAuthError(`GitLab Duo Workflow OAuth token exchange failed: ${response.status} ${await response.text()}`, {
|
|
62
|
+
kind: "token-exchange",
|
|
63
|
+
provider: "gitlab-duo-workflow",
|
|
64
|
+
status: response.status
|
|
65
|
+
});
|
|
66
|
+
return mapTokenResponse(await response.json());
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
async function loginGitLabDuoWorkflow(callbacks) {
|
|
70
|
+
return new GitLabDuoWorkflowOAuthFlow(callbacks, await generatePKCE()).login();
|
|
71
|
+
}
|
|
72
|
+
async function refreshGitLabDuoWorkflowToken(credentials, fetchImpl = fetch) {
|
|
73
|
+
const response = await fetchImpl(`${GITLAB_COM_URL}/oauth/token`, {
|
|
74
|
+
method: "POST",
|
|
75
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
76
|
+
body: new URLSearchParams({
|
|
77
|
+
client_id: GITLAB_DUO_WORKFLOW_OAUTH_CLIENT_ID,
|
|
78
|
+
redirect_uri: GITLAB_DUO_WORKFLOW_OAUTH_REDIRECT_URI,
|
|
79
|
+
grant_type: "refresh_token",
|
|
80
|
+
refresh_token: credentials.refresh
|
|
81
|
+
}).toString()
|
|
82
|
+
});
|
|
83
|
+
if (!response.ok) throw new OAuthError(`GitLab Duo Workflow OAuth refresh failed: ${response.status} ${await response.text()}`, {
|
|
84
|
+
kind: "token-refresh",
|
|
85
|
+
provider: "gitlab-duo-workflow",
|
|
86
|
+
status: response.status
|
|
87
|
+
});
|
|
88
|
+
return mapTokenResponse(await response.json());
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
export { loginGitLabDuoWorkflow, refreshGitLabDuoWorkflowToken };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { installBunShim as __installBunShim } from "./bun-shim.mjs";
|
|
2
|
+
__installBunShim();
|
|
3
|
+
import { g as MissingApiKeyError } from "./error-Dd8DIqs-.mjs";
|
|
4
|
+
import { n as getEnvApiKey } from "./stream-CRtexYLe.mjs";
|
|
5
|
+
import { p as streamGoogleGenAI, t as buildGoogleGenerateContentParams } from "./google-shared-Dr-VG-ap.mjs";
|
|
6
|
+
//#region node_modules/.pnpm/@oh-my-pi+pi-ai@17.3.5/node_modules/@oh-my-pi/pi-ai/src/providers/google.ts
|
|
7
|
+
const DEFAULT_GENERATIVE_LANGUAGE_BASE = "https://generativelanguage.googleapis.com/v1beta";
|
|
8
|
+
const streamGoogle = (model, context, options) => {
|
|
9
|
+
const apiKey = options?.apiKey || getEnvApiKey(model.provider);
|
|
10
|
+
if (!apiKey) throw new MissingApiKeyError(void 0, "Google Generative AI requires an API key (GEMINI_API_KEY or options.apiKey).");
|
|
11
|
+
return streamGoogleGenAI({
|
|
12
|
+
model,
|
|
13
|
+
options,
|
|
14
|
+
api: "google-generative-ai",
|
|
15
|
+
prepare: () => {
|
|
16
|
+
return {
|
|
17
|
+
params: buildGoogleGenerateContentParams(model, context, options ?? {}),
|
|
18
|
+
url: `${model.baseUrl?.trim() || DEFAULT_GENERATIVE_LANGUAGE_BASE}/models/${model.id}:streamGenerateContent?alt=sse`,
|
|
19
|
+
headers: {
|
|
20
|
+
"x-goog-api-key": apiKey,
|
|
21
|
+
...model.headers ?? {},
|
|
22
|
+
...options?.headers ?? {}
|
|
23
|
+
},
|
|
24
|
+
fetch: options?.fetch
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
//#endregion
|
|
30
|
+
export { streamGoogle };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { installBunShim as __installBunShim } from "./bun-shim.mjs";
|
|
2
|
+
__installBunShim();
|
|
3
|
+
import { g as MissingApiKeyError } from "./error-yCSG0mGC.mjs";
|
|
4
|
+
import { n as getEnvApiKey } from "./stream-BlldLkVq.mjs";
|
|
5
|
+
import { p as streamGoogleGenAI, t as buildGoogleGenerateContentParams } from "./google-shared-CgKmmdO3.mjs";
|
|
6
|
+
//#region node_modules/.pnpm/@oh-my-pi+pi-ai@17.3.5/node_modules/@oh-my-pi/pi-ai/src/providers/google.ts
|
|
7
|
+
const DEFAULT_GENERATIVE_LANGUAGE_BASE = "https://generativelanguage.googleapis.com/v1beta";
|
|
8
|
+
const streamGoogle = (model, context, options) => {
|
|
9
|
+
const apiKey = options?.apiKey || getEnvApiKey(model.provider);
|
|
10
|
+
if (!apiKey) throw new MissingApiKeyError(void 0, "Google Generative AI requires an API key (GEMINI_API_KEY or options.apiKey).");
|
|
11
|
+
return streamGoogleGenAI({
|
|
12
|
+
model,
|
|
13
|
+
options,
|
|
14
|
+
api: "google-generative-ai",
|
|
15
|
+
prepare: () => {
|
|
16
|
+
return {
|
|
17
|
+
params: buildGoogleGenerateContentParams(model, context, options ?? {}),
|
|
18
|
+
url: `${model.baseUrl?.trim() || DEFAULT_GENERATIVE_LANGUAGE_BASE}/models/${model.id}:streamGenerateContent?alt=sse`,
|
|
19
|
+
headers: {
|
|
20
|
+
"x-goog-api-key": apiKey,
|
|
21
|
+
...model.headers ?? {},
|
|
22
|
+
...options?.headers ?? {}
|
|
23
|
+
},
|
|
24
|
+
fetch: options?.fetch
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
//#endregion
|
|
30
|
+
export { streamGoogle };
|