codex-subscription-oauth-plugin 0.1.5 → 0.1.7
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.ja.md +27 -0
- package/README.md +27 -0
- package/lib/index.js +179 -44
- package/lib/{models-BdCc9Ab5.js → models-SNl0ezHJ.js} +14 -10
- package/lib/{openai-codex-responses-DKg-2_3a.js → openai-codex-responses-CYGCQRS8.js} +20 -20
- package/lib/openai-codex.js +5 -5
- package/lib/{provider-env-BoYS8tP5.js → provider-env-BO8sNc-2.js} +1 -1
- package/package.json +1 -1
package/README.ja.md
CHANGED
|
@@ -20,6 +20,27 @@ pnpm dsh plugin --profile acp add github:askdkc/dsh-codex
|
|
|
20
20
|
|
|
21
21
|
プラグインはプロファイルごとに読み込まれるため、`web` に導入しただけでは `acp` にモデルは追加されません。ACPクライアントが起動するDSHプロセスを再起動し、モデル選択を開き直してください。別のプロファイルを使っている場合は、`acp` をその名前に置き換えます。
|
|
22
22
|
|
|
23
|
+
このプラグインはビルド済みの `lib` を配布しており、インストール時のビルドスクリプトは不要です。インストールや更新が `ERR_PNPM_IGNORED_BUILDS` で失敗し、`codex-subscription-oauth-plugin` が表示された場合は、対象プロファイルの `pnpm-workspace.yaml`(標準では `~/.dsh/profiles/web/pnpm-workspace.yaml`)を編集します。既存の `allowBuilds` 内で、このパッケージのビルドスクリプトを実行しないよう明示してください。
|
|
24
|
+
|
|
25
|
+
```yaml
|
|
26
|
+
allowBuilds:
|
|
27
|
+
codex-subscription-oauth-plugin: false
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
既に `codex-subscription-oauth-plugin: true` があれば `false` に変更します。`allowBuilds` のキーが `codex-subscription-oauth-plugin@` で始まる他の項目は、リポジトリURL、コミットURL、生成された `set this to true or false` のプレースホルダーも含めて削除してください。このパッケージの項目は名前だけの `false` 一つにし、他のパッケージの設定は保持します。再実行する前に、プロファイルの設定ファイルを保存してください。
|
|
31
|
+
|
|
32
|
+
名前だけの `true` と異なり、名前だけの `false` はGit依存関係にも適用されます。pnpmにスクリプトを実行しない判断を明示するため、更新のたびにコミットハッシュを書き換える必要はありません。この復旧手順はpnpm 11.7.0で動作し、pnpmの更新は不要です。詳しくはpnpmの [Git依存関係のビルド設定](https://pnpm.io/settings/build#allowbuilds) を参照してください。
|
|
33
|
+
|
|
34
|
+
その後、DeepSeek Harnessのチェックアウトから、失敗した `pnpm dsh plugin ...` コマンドを再実行します。別のプラグインを更新する場合も、このプロファイルの依存関係が確認されます。例えば、失敗したKiokukoの更新を再実行する場合:
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
pnpm dsh plugin --profile web update kiokuko-dsh --latest
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
コマンドが正常終了するまで確認してください。`Already up to date` はビルド設定のエラーより前に表示される場合があり、その表示だけでは更新成功とは判断できません。
|
|
41
|
+
|
|
42
|
+
設定を編集するプロファイルと再実行するプロファイルを合わせてください。`DSH_HOME` を変更している場合はパスも合わせます。Harnessのチェックアウトで `pnpm approve-builds` を実行しても、対象はそのチェックアウトであり、プラグインのプロファイルではありません。`minimumReleaseAge` を変更しても、ビルドの承認エラーは解消しません。
|
|
43
|
+
|
|
23
44
|
既存のACPプロファイルへのインストールが `ERR_PNPM_UNEXPECTED_STORE` で失敗した場合は、現在のpnpmストアを使ってそのプロファイルの依存関係を再インストールしてから、プラグインの追加を再実行します。
|
|
24
45
|
|
|
25
46
|
```sh
|
|
@@ -43,6 +64,12 @@ Codex用のChatGPTアカウントでログインします。
|
|
|
43
64
|
pnpm dsh plugin --profile web remove codex-subscription-oauth-plugin
|
|
44
65
|
```
|
|
45
66
|
|
|
67
|
+
## モデルと接続診断
|
|
68
|
+
|
|
69
|
+
GPT-6.1 Terraには、Astraからのコピーではなく[公式Codexカタログ](https://github.com/openai/codex/blob/main/codex-rs/models-manager/models.json)の通常コンテキスト500,000、テキスト・画像入力と、本アダプターで扱えるlow〜maxのreasoning情報を使用します。出力上限と価格の見積りは[Terraのモデル情報](https://developers.openai.com/api/docs/models/gpt-6.1-terra)と[API価格](https://developers.openai.com/api/docs/pricing)に基づきます。アカウントでの表示可否は認証済みカタログで決まります。実行に必要な出力上限・価格情報がない未知モデルには `MODEL_METADATA_MISSING` を出し、他モデルの能力を推測でコピーしません。
|
|
70
|
+
|
|
71
|
+
接続失敗には、SDKの開始前・開始後の段階、SSE切替の有無と安全なエラーコードを残します。診断には生のclose理由・stack・header・本文を含めません。最初の応答イベントより前ではSDKがSSEに切り替えることがありますが、プラグインは再試行を追加せず、途中の応答やツール出力を再送しません。キャンセルを維持し、SSEのHTTPエラーではホストが分類できるようstatusを保持します。
|
|
72
|
+
|
|
46
73
|
## ライセンス
|
|
47
74
|
|
|
48
75
|
MITライセンスです。詳細は [LICENSE](./LICENSE) を参照してください。
|
package/README.md
CHANGED
|
@@ -20,6 +20,27 @@ pnpm dsh plugin --profile acp add github:askdkc/dsh-codex
|
|
|
20
20
|
|
|
21
21
|
Profiles load plugins independently: installing into `web` does not add models to `acp`. Restart the DSH process launched by your ACP client, then reopen its model selector. If the client uses a different profile, replace `acp` with that name.
|
|
22
22
|
|
|
23
|
+
This plugin ships prebuilt `lib` files and does not need install-time build scripts. If an installation or update fails with `ERR_PNPM_IGNORED_BUILDS` naming `codex-subscription-oauth-plugin`, edit the target profile's `pnpm-workspace.yaml` (by default, `~/.dsh/profiles/web/pnpm-workspace.yaml`). In its existing `allowBuilds` map, explicitly skip this package's build scripts:
|
|
24
|
+
|
|
25
|
+
```yaml
|
|
26
|
+
allowBuilds:
|
|
27
|
+
codex-subscription-oauth-plugin: false
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Change an existing `codex-subscription-oauth-plugin: true` to `false`. Delete any other `allowBuilds` entries whose key starts with `codex-subscription-oauth-plugin@`, including repository URLs, commit URLs, and generated `set this to true or false` placeholders. Keep only the name-only `false` entry for this package and preserve other packages' settings. Save the profile file before retrying.
|
|
31
|
+
|
|
32
|
+
Unlike a name-only `true`, a name-only `false` also applies to Git dependencies: pnpm records an explicit decision to skip the scripts, so updates do not require commit-hash edits. This recovery works with pnpm 11.7.0; upgrading pnpm is not required. See pnpm's [Git dependency build settings](https://pnpm.io/settings/build#allowbuilds).
|
|
33
|
+
|
|
34
|
+
Then rerun the failed `pnpm dsh plugin ...` command from the DeepSeek Harness checkout. Even an update of another plugin checks this profile's dependencies; for example, retry a failed Kiokuko update with:
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
pnpm dsh plugin --profile web update kiokuko-dsh --latest
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Wait for the command to exit successfully. `Already up to date` can appear before a build-policy error and does not by itself mean the update succeeded.
|
|
41
|
+
|
|
42
|
+
Use the same profile for the configuration edit and retry; adjust the path for a custom `DSH_HOME`. Running `pnpm approve-builds` in the Harness checkout targets that checkout, not the plugin profile. Changing `minimumReleaseAge` does not resolve build approval failures.
|
|
43
|
+
|
|
23
44
|
If installation into an existing ACP profile fails with `ERR_PNPM_UNEXPECTED_STORE`, reinstall that profile's dependencies using the current pnpm store, then retry:
|
|
24
45
|
|
|
25
46
|
```sh
|
|
@@ -43,6 +64,12 @@ Remove the plugin:
|
|
|
43
64
|
pnpm dsh plugin --profile web remove codex-subscription-oauth-plugin
|
|
44
65
|
```
|
|
45
66
|
|
|
67
|
+
## Models and connection diagnostics
|
|
68
|
+
|
|
69
|
+
GPT-6.1 Terra uses its own [Codex catalog metadata](https://github.com/openai/codex/blob/main/codex-rs/models-manager/models.json): a 500,000-token default context, text/image input, and low through max reasoning supported by this adapter. Its output cap and cost estimate come from the [Terra model page](https://developers.openai.com/api/docs/models/gpt-6.1-terra) and [API pricing](https://developers.openai.com/api/docs/pricing), rather than Astra. Account visibility still comes from the authenticated catalog. Unknown entries without executable output/cost metadata emit `MODEL_METADATA_MISSING`; their capabilities are not guessed from another model.
|
|
70
|
+
|
|
71
|
+
Connection failures retain the SDK's before/after-start phase, fallback choice and safe error code. Raw close reasons, stacks, headers and bodies are omitted from these diagnostics. The SDK may switch to SSE before its first response event; the plugin adds no retries and does not replay an interrupted response or tool output. Cancellation stays cancelled, and an SSE HTTP error retains its status for the host's classification.
|
|
72
|
+
|
|
46
73
|
## License
|
|
47
74
|
|
|
48
75
|
MIT. See [LICENSE](./LICENSE).
|
package/lib/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { c as lazyApi, i as createProvider, r as createModels } from "./models-
|
|
1
|
+
import { c as lazyApi, i as createProvider, r as createModels, u as createAssistantMessageEventStream } from "./models-SNl0ezHJ.js";
|
|
2
2
|
import AuthorizationService, { AuthorizationDeclinedError } from "@deepseek-ai/dsh-authorization";
|
|
3
3
|
import { credentialKey, credentialKeyId, credentialKeyScope, isCredentialKeySegment } from "@deepseek-ai/dsh-credentials";
|
|
4
4
|
import { LlmError, resolveImageAttachmentAccess, resolveRetryPolicy } from "@deepseek-ai/dsh-llm";
|
|
5
5
|
import { PiAiAdapter, recordKeyFor } from "@deepseek-ai/dsh-llm-pi-ai";
|
|
6
|
-
//#region
|
|
6
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/auth/helpers.js
|
|
7
7
|
/**
|
|
8
8
|
* Wraps a dynamically imported `OAuthAuth` so provider definitions can
|
|
9
9
|
* advertise OAuth without importing the implementation. The flow loads on
|
|
@@ -27,10 +27,10 @@ function lazyOAuth(input) {
|
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
29
|
//#endregion
|
|
30
|
-
//#region
|
|
31
|
-
const openAICodexResponsesApi = () => lazyApi(() => import("./openai-codex-responses-
|
|
30
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.lazy.js
|
|
31
|
+
const openAICodexResponsesApi = () => lazyApi(() => import("./openai-codex-responses-CYGCQRS8.js"));
|
|
32
32
|
//#endregion
|
|
33
|
-
//#region
|
|
33
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js
|
|
34
34
|
var __rewriteRelativeImportExtension = function(path, preserveJsx) {
|
|
35
35
|
if (typeof path === "string" && /^\.\.?\//.test(path)) return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) {
|
|
36
36
|
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js";
|
|
@@ -50,7 +50,7 @@ const loadOpenAICodexOAuth = async () => {
|
|
|
50
50
|
return (await importOAuthModule("./openai-codex.ts")).openaiCodexOAuth;
|
|
51
51
|
};
|
|
52
52
|
//#endregion
|
|
53
|
-
//#region
|
|
53
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json
|
|
54
54
|
var openai_codex_default = { "openai-codex-responses": {
|
|
55
55
|
"gpt-5.3-codex-spark": {
|
|
56
56
|
"id": "gpt-5.3-codex-spark",
|
|
@@ -305,15 +305,15 @@ var openai_codex_default = { "openai-codex-responses": {
|
|
|
305
305
|
}
|
|
306
306
|
} };
|
|
307
307
|
//#endregion
|
|
308
|
-
//#region
|
|
308
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/model-catalog.js
|
|
309
309
|
function flattenModelCatalog(_provider, groups) {
|
|
310
310
|
return Object.assign({}, ...Object.values(groups));
|
|
311
311
|
}
|
|
312
312
|
//#endregion
|
|
313
|
-
//#region
|
|
313
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.models.js
|
|
314
314
|
const OPENAI_CODEX_MODELS = flattenModelCatalog("openai-codex", openai_codex_default);
|
|
315
315
|
//#endregion
|
|
316
|
-
//#region
|
|
316
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex.js
|
|
317
317
|
function openaiCodexProvider() {
|
|
318
318
|
return createProvider({
|
|
319
319
|
id: "openai-codex",
|
|
@@ -525,6 +525,8 @@ var CodexCatalog = class {
|
|
|
525
525
|
}
|
|
526
526
|
const official = parseOfficialModels(payload);
|
|
527
527
|
if (official.length === 0) throw Object.assign(/* @__PURE__ */ new Error("empty model list"), { code: "EMPTY_LIST" });
|
|
528
|
+
const missing = official.filter((entry) => !this.baselineById.has(entry.slug)).length;
|
|
529
|
+
if (missing > 0) this.warn(`codex-subscription-oauth: MODEL_METADATA_MISSING (${missing} listed models)`);
|
|
528
530
|
const models = official.map((entry) => {
|
|
529
531
|
const baseline = this.baselineById.get(entry.slug);
|
|
530
532
|
if (baseline === void 0) return void 0;
|
|
@@ -751,13 +753,114 @@ function toBundledCodexContext(context) {
|
|
|
751
753
|
};
|
|
752
754
|
}
|
|
753
755
|
/** Freeze a catalog generation and bridge both provider streaming entry points. */
|
|
754
|
-
function providerWithModels(provider, models) {
|
|
756
|
+
function providerWithModels(provider, models, warn = () => {}) {
|
|
755
757
|
const generation = Object.freeze([...models]);
|
|
758
|
+
function observed(model, run) {
|
|
759
|
+
const stream = createAssistantMessageEventStream();
|
|
760
|
+
let httpStatus;
|
|
761
|
+
(async () => {
|
|
762
|
+
for await (const event of run((response) => {
|
|
763
|
+
httpStatus = response.status;
|
|
764
|
+
})) {
|
|
765
|
+
if (event.type !== "done" && event.type !== "error") {
|
|
766
|
+
stream.push(event);
|
|
767
|
+
continue;
|
|
768
|
+
}
|
|
769
|
+
const message = event.type === "done" ? event.message : event.error;
|
|
770
|
+
const diagnostics = message.diagnostics?.map((diagnostic) => {
|
|
771
|
+
if (diagnostic.type !== "provider_transport_failure") return diagnostic;
|
|
772
|
+
const details = diagnostic.details ?? {};
|
|
773
|
+
const safe = {};
|
|
774
|
+
for (const key of ["configuredTransport", "fallbackTransport"]) if ([
|
|
775
|
+
"auto",
|
|
776
|
+
"sse",
|
|
777
|
+
"websocket",
|
|
778
|
+
"websocket-cached"
|
|
779
|
+
].includes(String(details[key]))) safe[key] = String(details[key]);
|
|
780
|
+
if (details.phase === "before_message_stream_start" || details.phase === "after_message_stream_start") safe.phase = details.phase;
|
|
781
|
+
if (typeof details.eventsEmitted === "boolean") safe.eventsEmitted = details.eventsEmitted;
|
|
782
|
+
if (Number.isSafeInteger(details.requestBytes) && Number(details.requestBytes) >= 0) safe.requestBytes = Number(details.requestBytes);
|
|
783
|
+
const code = diagnostic.error?.code;
|
|
784
|
+
if (typeof code === "number" && Number.isSafeInteger(code) || typeof code === "string" && /^[A-Z0-9_]{1,64}$/.test(code)) safe.code = code;
|
|
785
|
+
const summary = `Codex WebSocket failure ${JSON.stringify(safe)}`;
|
|
786
|
+
warn(summary);
|
|
787
|
+
return {
|
|
788
|
+
type: diagnostic.type,
|
|
789
|
+
timestamp: diagnostic.timestamp,
|
|
790
|
+
error: { message: summary },
|
|
791
|
+
details: safe
|
|
792
|
+
};
|
|
793
|
+
});
|
|
794
|
+
const failures = diagnostics?.filter((diagnostic) => diagnostic.type === "provider_transport_failure") ?? [];
|
|
795
|
+
const terminal = {
|
|
796
|
+
...message,
|
|
797
|
+
...diagnostics === void 0 ? {} : { diagnostics },
|
|
798
|
+
...message.stopReason !== "aborted" && event.type === "error" && failures.some((diagnostic) => diagnostic.details?.phase === "after_message_stream_start") ? { errorMessage: failures.map((diagnostic) => diagnostic.error?.message).join("; ") } : {}
|
|
799
|
+
};
|
|
800
|
+
if (event.type === "error" && message.stopReason !== "aborted" && httpStatus !== void 0 && httpStatus >= 400) {
|
|
801
|
+
terminal.errorMessage = `Codex HTTP ${httpStatus} failure`;
|
|
802
|
+
warn(terminal.errorMessage);
|
|
803
|
+
}
|
|
804
|
+
Object.assign(message, terminal);
|
|
805
|
+
stream.push(event.type === "done" ? {
|
|
806
|
+
...event,
|
|
807
|
+
message: terminal
|
|
808
|
+
} : {
|
|
809
|
+
...event,
|
|
810
|
+
error: terminal
|
|
811
|
+
});
|
|
812
|
+
}
|
|
813
|
+
stream.end();
|
|
814
|
+
})().catch(() => {
|
|
815
|
+
stream.push({
|
|
816
|
+
type: "error",
|
|
817
|
+
reason: "error",
|
|
818
|
+
error: {
|
|
819
|
+
role: "assistant",
|
|
820
|
+
content: [],
|
|
821
|
+
api: model.api,
|
|
822
|
+
provider: model.provider,
|
|
823
|
+
model: model.id,
|
|
824
|
+
timestamp: Date.now(),
|
|
825
|
+
stopReason: "error",
|
|
826
|
+
errorMessage: "Codex provider stream failed",
|
|
827
|
+
usage: {
|
|
828
|
+
input: 0,
|
|
829
|
+
output: 0,
|
|
830
|
+
cacheRead: 0,
|
|
831
|
+
cacheWrite: 0,
|
|
832
|
+
totalTokens: 0,
|
|
833
|
+
cost: {
|
|
834
|
+
input: 0,
|
|
835
|
+
output: 0,
|
|
836
|
+
cacheRead: 0,
|
|
837
|
+
cacheWrite: 0,
|
|
838
|
+
total: 0
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
});
|
|
843
|
+
stream.end();
|
|
844
|
+
});
|
|
845
|
+
return stream;
|
|
846
|
+
}
|
|
756
847
|
return {
|
|
757
848
|
...provider,
|
|
758
849
|
getModels: () => generation,
|
|
759
|
-
stream: (model, context, options) => provider.stream(model, toBundledCodexContext(context),
|
|
760
|
-
|
|
850
|
+
stream: (model, context, options) => observed(model, (onResponse) => provider.stream(model, toBundledCodexContext(context), {
|
|
851
|
+
...options,
|
|
852
|
+
onResponse: (response, responseModel) => {
|
|
853
|
+
onResponse(response);
|
|
854
|
+
return options?.onResponse?.(response, responseModel);
|
|
855
|
+
}
|
|
856
|
+
})),
|
|
857
|
+
streamSimple: (model, context, options) => observed(model, (onResponse) => provider.streamSimple(model, toBundledCodexContext(context), {
|
|
858
|
+
...options,
|
|
859
|
+
onResponse: (response, responseModel) => {
|
|
860
|
+
onResponse(response);
|
|
861
|
+
return options?.onResponse?.(response, responseModel);
|
|
862
|
+
}
|
|
863
|
+
}))
|
|
761
864
|
};
|
|
762
865
|
}
|
|
763
866
|
//#endregion
|
|
@@ -988,36 +1091,65 @@ function bundledCodexModels(provider) {
|
|
|
988
1091
|
cacheWrite: .125
|
|
989
1092
|
}
|
|
990
1093
|
];
|
|
991
|
-
return Object.freeze([
|
|
992
|
-
...
|
|
993
|
-
id
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1094
|
+
return Object.freeze([
|
|
1095
|
+
...models,
|
|
1096
|
+
...additions.filter((entry) => !models.some((model) => model.id === entry.id)).map((entry) => Object.freeze({
|
|
1097
|
+
...astra,
|
|
1098
|
+
id: entry.id,
|
|
1099
|
+
name: entry.name,
|
|
1100
|
+
thinkingLevelMap: {
|
|
1101
|
+
off: null,
|
|
1102
|
+
...entry.id === "gpt-6.1-sol" ? { minimal: null } : {},
|
|
1103
|
+
low: "low",
|
|
1104
|
+
medium: "medium",
|
|
1105
|
+
high: "high",
|
|
1106
|
+
xhigh: "xhigh",
|
|
1107
|
+
max: "max"
|
|
1108
|
+
},
|
|
1109
|
+
cost: {
|
|
1110
|
+
input: entry.input,
|
|
1111
|
+
output: entry.output,
|
|
1112
|
+
cacheRead: entry.cacheRead,
|
|
1113
|
+
cacheWrite: entry.cacheWrite,
|
|
1114
|
+
tiers: [{
|
|
1115
|
+
inputTokensAbove: 272e3,
|
|
1116
|
+
input: entry.input * 2,
|
|
1117
|
+
output: entry.output * 1.5,
|
|
1118
|
+
cacheRead: entry.cacheRead * 2,
|
|
1119
|
+
cacheWrite: entry.cacheWrite * 2
|
|
1120
|
+
}]
|
|
1121
|
+
}
|
|
1122
|
+
})),
|
|
1123
|
+
...models.some((model) => model.id === "gpt-6.1-terra") ? [] : [{
|
|
1124
|
+
id: "gpt-6.1-terra",
|
|
1125
|
+
name: "GPT-6.1 Terra",
|
|
1126
|
+
api: "openai-codex-responses",
|
|
1127
|
+
provider: ROUTE,
|
|
1128
|
+
baseUrl: "https://chatgpt.com/backend-api",
|
|
1129
|
+
reasoning: true,
|
|
1130
|
+
input: ["text", "image"],
|
|
1131
|
+
contextWindow: 5e5,
|
|
1132
|
+
maxTokens: 128e3,
|
|
1133
|
+
thinkingLevelMap: {
|
|
1134
|
+
off: null,
|
|
1135
|
+
minimal: null,
|
|
1136
|
+
low: "low",
|
|
1137
|
+
medium: "medium",
|
|
1138
|
+
high: "high",
|
|
1139
|
+
xhigh: "xhigh",
|
|
1140
|
+
max: "max"
|
|
1141
|
+
},
|
|
1142
|
+
cost: {
|
|
1143
|
+
input: 1,
|
|
1144
|
+
output: 5,
|
|
1145
|
+
cacheRead: .05,
|
|
1146
|
+
cacheWrite: 1.25
|
|
1147
|
+
}
|
|
1148
|
+
}]
|
|
1149
|
+
]);
|
|
1018
1150
|
}
|
|
1019
1151
|
/** Build the one profile shape consumed by DSH's public pi-ai adapter. */
|
|
1020
|
-
function profileFor(provider, models) {
|
|
1152
|
+
function profileFor(provider, models, warn) {
|
|
1021
1153
|
return /* @__PURE__ */ new Map([[ROUTE, {
|
|
1022
1154
|
provider: ROUTE,
|
|
1023
1155
|
displayName: provider.name,
|
|
@@ -1028,7 +1160,7 @@ function profileFor(provider, models) {
|
|
|
1028
1160
|
retryPolicy: resolveRetryPolicy(void 0, `codex-subscription-oauth: provider "${ROUTE}" retryPolicy`),
|
|
1029
1161
|
configuredMaxTokens: /* @__PURE__ */ new Map(),
|
|
1030
1162
|
modelErrors: /* @__PURE__ */ new Map(),
|
|
1031
|
-
piProvider: providerWithModels(provider, models)
|
|
1163
|
+
piProvider: providerWithModels(provider, models, warn)
|
|
1032
1164
|
}]]);
|
|
1033
1165
|
}
|
|
1034
1166
|
/** Register the command, dynamic model route, and fallback authorization service. */
|
|
@@ -1051,6 +1183,9 @@ function apply(ctx, config = {}) {
|
|
|
1051
1183
|
authModels.setProvider(upstream);
|
|
1052
1184
|
let profiles;
|
|
1053
1185
|
let registration;
|
|
1186
|
+
const warn = (message) => {
|
|
1187
|
+
ctx.logger.warn(message);
|
|
1188
|
+
};
|
|
1054
1189
|
const catalog = new CodexCatalog({
|
|
1055
1190
|
...catalogConfig,
|
|
1056
1191
|
baseline: bundledModels,
|
|
@@ -1066,12 +1201,12 @@ function apply(ctx, config = {}) {
|
|
|
1066
1201
|
};
|
|
1067
1202
|
},
|
|
1068
1203
|
onChange(snapshot) {
|
|
1069
|
-
profiles = profileFor(upstream, snapshot.models);
|
|
1204
|
+
profiles = profileFor(upstream, snapshot.models, warn);
|
|
1070
1205
|
registration?.replace([ROUTE]);
|
|
1071
1206
|
},
|
|
1072
|
-
warn
|
|
1207
|
+
warn
|
|
1073
1208
|
});
|
|
1074
|
-
profiles = profileFor(upstream, catalog.current.models);
|
|
1209
|
+
profiles = profileFor(upstream, catalog.current.models, warn);
|
|
1075
1210
|
const adapter = new LiveCodexAdapter({
|
|
1076
1211
|
profiles: () => profiles,
|
|
1077
1212
|
resolveApiKey: async () => void 0,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region
|
|
1
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/event-stream.js
|
|
2
2
|
var EventStream = class {
|
|
3
3
|
queue = [];
|
|
4
4
|
waiting = [];
|
|
@@ -57,8 +57,12 @@ var AssistantMessageEventStream = class extends EventStream {
|
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
59
|
};
|
|
60
|
+
/** Factory function for AssistantMessageEventStream (for use in extensions) */
|
|
61
|
+
function createAssistantMessageEventStream() {
|
|
62
|
+
return new AssistantMessageEventStream();
|
|
63
|
+
}
|
|
60
64
|
//#endregion
|
|
61
|
-
//#region
|
|
65
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/api/lazy.js
|
|
62
66
|
function createSetupErrorMessage(model, error) {
|
|
63
67
|
return {
|
|
64
68
|
role: "assistant",
|
|
@@ -128,7 +132,7 @@ function lazyApi(load, capabilities) {
|
|
|
128
132
|
return api;
|
|
129
133
|
}
|
|
130
134
|
//#endregion
|
|
131
|
-
//#region
|
|
135
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/auth/context.js
|
|
132
136
|
var __rewriteRelativeImportExtension = function(path, preserveJsx) {
|
|
133
137
|
if (typeof path === "string" && /^\.\.?\//.test(path)) return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) {
|
|
134
138
|
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : d + ext + "." + cm.toLowerCase() + "js";
|
|
@@ -163,7 +167,7 @@ function defaultProviderAuthContext() {
|
|
|
163
167
|
};
|
|
164
168
|
}
|
|
165
169
|
//#endregion
|
|
166
|
-
//#region
|
|
170
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/abort.js
|
|
167
171
|
function abortReason(signal) {
|
|
168
172
|
if (signal.reason !== void 0) return signal.reason;
|
|
169
173
|
const error = /* @__PURE__ */ new Error("The operation was aborted");
|
|
@@ -208,7 +212,7 @@ function raceWithAbortSignal(operation, signal) {
|
|
|
208
212
|
});
|
|
209
213
|
}
|
|
210
214
|
//#endregion
|
|
211
|
-
//#region
|
|
215
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/auth/credential-store.js
|
|
212
216
|
/**
|
|
213
217
|
* Default in-memory credential store. Apps inject persistent stores.
|
|
214
218
|
* Keyed by `Provider.id`, one credential per provider; see `CredentialStore`.
|
|
@@ -260,7 +264,7 @@ var InMemoryCredentialStore = class {
|
|
|
260
264
|
}
|
|
261
265
|
};
|
|
262
266
|
//#endregion
|
|
263
|
-
//#region
|
|
267
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/diagnostics.js
|
|
264
268
|
function formatThrownValue(value) {
|
|
265
269
|
if (value instanceof Error) return value.message || value.name;
|
|
266
270
|
if (typeof value === "string") return value;
|
|
@@ -291,7 +295,7 @@ function appendAssistantMessageDiagnostic(message, diagnostic) {
|
|
|
291
295
|
message.diagnostics = [...message.diagnostics ?? [], diagnostic];
|
|
292
296
|
}
|
|
293
297
|
//#endregion
|
|
294
|
-
//#region
|
|
298
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/auth/resolve.js
|
|
295
299
|
var ModelsError = class extends Error {
|
|
296
300
|
code;
|
|
297
301
|
constructor(code, message, options) {
|
|
@@ -408,7 +412,7 @@ async function readCredential(credentials, providerId, signal) {
|
|
|
408
412
|
}
|
|
409
413
|
}
|
|
410
414
|
//#endregion
|
|
411
|
-
//#region
|
|
415
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/models-store.js
|
|
412
416
|
var InMemoryModelsStore = class {
|
|
413
417
|
entries = /* @__PURE__ */ new Map();
|
|
414
418
|
async read(providerId, options) {
|
|
@@ -426,7 +430,7 @@ var InMemoryModelsStore = class {
|
|
|
426
430
|
}
|
|
427
431
|
};
|
|
428
432
|
//#endregion
|
|
429
|
-
//#region
|
|
433
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/models.js
|
|
430
434
|
function mergeHeaders(base, override) {
|
|
431
435
|
if (!base && !override) return void 0;
|
|
432
436
|
const merged = { ...base };
|
|
@@ -938,4 +942,4 @@ function clampThinkingLevel(model, level) {
|
|
|
938
942
|
return availableLevels[0] ?? "off";
|
|
939
943
|
}
|
|
940
944
|
//#endregion
|
|
941
|
-
export { appendAssistantMessageDiagnostic as a, lazyApi as c, createProvider as i, AssistantMessageEventStream as l, clampThinkingLevel as n, createAssistantMessageDiagnostic as o, createModels as r, formatThrownValue as s, calculateCost as t };
|
|
945
|
+
export { appendAssistantMessageDiagnostic as a, lazyApi as c, createProvider as i, AssistantMessageEventStream as l, clampThinkingLevel as n, createAssistantMessageDiagnostic as o, createModels as r, formatThrownValue as s, calculateCost as t, createAssistantMessageEventStream as u };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as __commonJSMin, t as getProviderEnvValue } from "./provider-env-
|
|
2
|
-
import { a as appendAssistantMessageDiagnostic, l as AssistantMessageEventStream, n as clampThinkingLevel, o as createAssistantMessageDiagnostic, s as formatThrownValue, t as calculateCost } from "./models-
|
|
3
|
-
//#region
|
|
1
|
+
import { n as __commonJSMin, t as getProviderEnvValue } from "./provider-env-BO8sNc-2.js";
|
|
2
|
+
import { a as appendAssistantMessageDiagnostic, l as AssistantMessageEventStream, n as clampThinkingLevel, o as createAssistantMessageDiagnostic, s as formatThrownValue, t as calculateCost } from "./models-SNl0ezHJ.js";
|
|
3
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/session-resources.js
|
|
4
4
|
const sessionResourceCleanups = /* @__PURE__ */ new Set();
|
|
5
5
|
function registerSessionResourceCleanup(cleanup) {
|
|
6
6
|
sessionResourceCleanups.add(cleanup);
|
|
@@ -9,7 +9,7 @@ function registerSessionResourceCleanup(cleanup) {
|
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
11
|
//#endregion
|
|
12
|
-
//#region
|
|
12
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/partial-json/dist/options.js
|
|
13
13
|
var require_options = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
14
14
|
/**
|
|
15
15
|
* Sometimes you don't allow every type to be partially parsed.
|
|
@@ -99,7 +99,7 @@ var require_options = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
99
99
|
exports.default = exports.Allow;
|
|
100
100
|
}));
|
|
101
101
|
//#endregion
|
|
102
|
-
//#region
|
|
102
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/json-parse.js
|
|
103
103
|
var import_dist = (/* @__PURE__ */ __commonJSMin(((exports) => {
|
|
104
104
|
var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
|
|
105
105
|
if (k2 === void 0) k2 = k;
|
|
@@ -388,7 +388,7 @@ function parseStreamingJson(partialJson) {
|
|
|
388
388
|
}
|
|
389
389
|
}
|
|
390
390
|
//#endregion
|
|
391
|
-
//#region
|
|
391
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/uuid.js
|
|
392
392
|
const MAX_UUID_V7_TIMESTAMP = 0xffffffffffff;
|
|
393
393
|
const MAX_SEQUENCE = (1n << 41n) - 1n;
|
|
394
394
|
let lastOrdinaryTimestamp = -1;
|
|
@@ -418,7 +418,7 @@ function uuidv7(timestampMs) {
|
|
|
418
418
|
return `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`;
|
|
419
419
|
}
|
|
420
420
|
//#endregion
|
|
421
|
-
//#region
|
|
421
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.js
|
|
422
422
|
function combineAbortSignals(signals) {
|
|
423
423
|
const activeSignals = signals.filter((signal) => signal !== void 0);
|
|
424
424
|
if (activeSignals.length === 0) return { cleanup: () => {} };
|
|
@@ -451,7 +451,7 @@ function combineAbortSignals(signals) {
|
|
|
451
451
|
};
|
|
452
452
|
}
|
|
453
453
|
//#endregion
|
|
454
|
-
//#region
|
|
454
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/deferred-tools.js
|
|
455
455
|
const identityToolName = (name) => name;
|
|
456
456
|
/** Split current tools into prefix and transcript-loaded definitions. */
|
|
457
457
|
function splitDeferredTools(context, enabled, normalizeName = identityToolName) {
|
|
@@ -479,7 +479,7 @@ function splitDeferredTools(context, enabled, normalizeName = identityToolName)
|
|
|
479
479
|
};
|
|
480
480
|
}
|
|
481
481
|
//#endregion
|
|
482
|
-
//#region
|
|
482
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/error-body.js
|
|
483
483
|
const MAX_PROVIDER_ERROR_BODY_CHARS = 4e3;
|
|
484
484
|
function normalizeProviderError(error) {
|
|
485
485
|
if (!(error instanceof Error)) return {
|
|
@@ -579,14 +579,14 @@ function safeJsonStringify$1(value) {
|
|
|
579
579
|
}
|
|
580
580
|
}
|
|
581
581
|
//#endregion
|
|
582
|
-
//#region
|
|
582
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/headers.js
|
|
583
583
|
function headersToRecord(headers) {
|
|
584
584
|
const result = {};
|
|
585
585
|
for (const [key, value] of headers.entries()) result[key] = value;
|
|
586
586
|
return result;
|
|
587
587
|
}
|
|
588
588
|
//#endregion
|
|
589
|
-
//#region
|
|
589
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/node-http-proxy.js
|
|
590
590
|
const DEFAULT_PROXY_PORTS = {
|
|
591
591
|
ftp: 21,
|
|
592
592
|
gopher: 70,
|
|
@@ -691,7 +691,7 @@ function resolveHttpProxyUrlForTarget(targetUrl, env) {
|
|
|
691
691
|
return proxyUrl;
|
|
692
692
|
}
|
|
693
693
|
//#endregion
|
|
694
|
-
//#region
|
|
694
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/pi-user-agent.js
|
|
695
695
|
function loadNodeOs() {
|
|
696
696
|
if (typeof process === "undefined" || !(process.versions?.node || process.versions?.bun)) return null;
|
|
697
697
|
return process.getBuiltinModule?.("node:os") ?? null;
|
|
@@ -701,7 +701,7 @@ function getPiUserAgent() {
|
|
|
701
701
|
return nodeOs ? `pi (${nodeOs.platform()} ${nodeOs.release()}; ${nodeOs.arch()})` : "pi (browser)";
|
|
702
702
|
}
|
|
703
703
|
//#endregion
|
|
704
|
-
//#region
|
|
704
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/api/constrained-sampling.js
|
|
705
705
|
var UnsupportedStrictJsonSchemaError = class extends Error {};
|
|
706
706
|
const UNSUPPORTED_STRICT_SCHEMA_KEYS = [
|
|
707
707
|
"$ref",
|
|
@@ -860,7 +860,7 @@ function clampOpenAIPromptCacheKey(key) {
|
|
|
860
860
|
return chars.slice(0, 64).join("");
|
|
861
861
|
}
|
|
862
862
|
//#endregion
|
|
863
|
-
//#region
|
|
863
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/hash.js
|
|
864
864
|
/** Fast deterministic hash to shorten long strings */
|
|
865
865
|
function shortHash(str) {
|
|
866
866
|
let h1 = 3735928559;
|
|
@@ -875,7 +875,7 @@ function shortHash(str) {
|
|
|
875
875
|
return (h2 >>> 0).toString(36) + (h1 >>> 0).toString(36);
|
|
876
876
|
}
|
|
877
877
|
//#endregion
|
|
878
|
-
//#region
|
|
878
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/sanitize-unicode.js
|
|
879
879
|
/**
|
|
880
880
|
* Removes unpaired Unicode surrogate characters from a string.
|
|
881
881
|
*
|
|
@@ -900,7 +900,7 @@ function sanitizeSurrogates(text) {
|
|
|
900
900
|
return text.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g, "");
|
|
901
901
|
}
|
|
902
902
|
//#endregion
|
|
903
|
-
//#region
|
|
903
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/api/transform-messages.js
|
|
904
904
|
const NON_VISION_USER_IMAGE_PLACEHOLDER = "(image omitted: model does not support images)";
|
|
905
905
|
const NON_VISION_TOOL_IMAGE_PLACEHOLDER = "(tool image omitted: model does not support images)";
|
|
906
906
|
function replaceImagesWithPlaceholder(content, placeholder) {
|
|
@@ -1047,7 +1047,7 @@ function transformMessages(messages, model, normalizeToolCallId) {
|
|
|
1047
1047
|
return result;
|
|
1048
1048
|
}
|
|
1049
1049
|
//#endregion
|
|
1050
|
-
//#region
|
|
1050
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/api/openai-responses-shared.js
|
|
1051
1051
|
function encodeTextSignatureV1(id, phase) {
|
|
1052
1052
|
const payload = {
|
|
1053
1053
|
v: 1,
|
|
@@ -1624,7 +1624,7 @@ function mapStopReason(status, incompleteReason) {
|
|
|
1624
1624
|
}
|
|
1625
1625
|
}
|
|
1626
1626
|
//#endregion
|
|
1627
|
-
//#region
|
|
1627
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/estimate.js
|
|
1628
1628
|
const CHARS_PER_TOKEN = 4;
|
|
1629
1629
|
const ESTIMATED_IMAGE_CHARS = 4800;
|
|
1630
1630
|
function calculateContextTokens(usage) {
|
|
@@ -1725,7 +1725,7 @@ function estimateContextTokens(context) {
|
|
|
1725
1725
|
};
|
|
1726
1726
|
}
|
|
1727
1727
|
//#endregion
|
|
1728
|
-
//#region
|
|
1728
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/api/simple-options.js
|
|
1729
1729
|
const CONTEXT_SAFETY_TOKENS = 4096;
|
|
1730
1730
|
const MIN_MAX_TOKENS = 1;
|
|
1731
1731
|
function clampMaxTokensToContext(model, context, maxTokens) {
|
|
@@ -1761,7 +1761,7 @@ function buildBaseOptions(model, context, options, apiKey) {
|
|
|
1761
1761
|
};
|
|
1762
1762
|
}
|
|
1763
1763
|
//#endregion
|
|
1764
|
-
//#region
|
|
1764
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js
|
|
1765
1765
|
const DEFAULT_CODEX_BASE_URL = "https://chatgpt.com/backend-api";
|
|
1766
1766
|
const JWT_CLAIM_PATH = "https://api.openai.com/auth";
|
|
1767
1767
|
const DEFAULT_MAX_RETRIES = 0;
|
package/lib/openai-codex.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as getProviderEnvValue } from "./provider-env-
|
|
2
|
-
//#region
|
|
1
|
+
import { t as getProviderEnvValue } from "./provider-env-BO8sNc-2.js";
|
|
2
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/auth/oauth/device-code.js
|
|
3
3
|
const CANCEL_MESSAGE = "Login cancelled";
|
|
4
4
|
const TIMEOUT_MESSAGE = "Device flow timed out";
|
|
5
5
|
const SLOW_DOWN_TIMEOUT_MESSAGE = "Device flow timed out after one or more slow_down responses. This is often caused by clock drift in WSL or VM environments. Please sync or restart the VM clock and try again.";
|
|
@@ -47,7 +47,7 @@ async function pollOAuthDeviceCodeFlow(options) {
|
|
|
47
47
|
throw new Error(slowDownResponses > 0 ? SLOW_DOWN_TIMEOUT_MESSAGE : TIMEOUT_MESSAGE);
|
|
48
48
|
}
|
|
49
49
|
//#endregion
|
|
50
|
-
//#region
|
|
50
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/auth/oauth/oauth-page.js
|
|
51
51
|
const LOGO_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800" aria-hidden="true"><path fill="#fff" fill-rule="evenodd" d="M165.29 165.29 H517.36 V400 H400 V517.36 H282.65 V634.72 H165.29 Z M282.65 282.65 V400 H400 V282.65 Z"/><path fill="#fff" d="M517.36 400 H634.72 V634.72 H517.36 Z"/></svg>`;
|
|
52
52
|
function escapeHtml(value) {
|
|
53
53
|
return value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll("\"", """).replaceAll("'", "'");
|
|
@@ -148,7 +148,7 @@ function oauthErrorHtml(message, details) {
|
|
|
148
148
|
});
|
|
149
149
|
}
|
|
150
150
|
//#endregion
|
|
151
|
-
//#region
|
|
151
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/auth/oauth/pkce.js
|
|
152
152
|
/**
|
|
153
153
|
* PKCE utilities using Web Crypto API.
|
|
154
154
|
* Works in both Node.js 20+ and browsers.
|
|
@@ -177,7 +177,7 @@ async function generatePKCE() {
|
|
|
177
177
|
};
|
|
178
178
|
}
|
|
179
179
|
//#endregion
|
|
180
|
-
//#region
|
|
180
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/auth/oauth/openai-codex.js
|
|
181
181
|
/**
|
|
182
182
|
* OpenAI Codex (ChatGPT OAuth) flow
|
|
183
183
|
*
|
|
@@ -3,7 +3,7 @@ import { createRequire } from "node:module";
|
|
|
3
3
|
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
|
|
4
4
|
var __require = /* #__PURE__ */ (() => createRequire(import.meta.url))();
|
|
5
5
|
//#endregion
|
|
6
|
-
//#region
|
|
6
|
+
//#region ../../../../Users/dkc/Sites/Src/dsh-codex/node_modules/@earendil-works/pi-ai/dist/utils/provider-env.js
|
|
7
7
|
let procEnvCache = null;
|
|
8
8
|
/**
|
|
9
9
|
* Fallback for https://github.com/oven-sh/bun/issues/27802.
|