@wlv-zedd/dsh-chatgpt-web 1.0.0 → 1.0.2
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/LICENSE +21 -21
- package/README.md +140 -140
- package/cordis.patch.yml +4 -4
- package/lib/cli.js +13269 -11860
- package/lib/plugin.js +3 -50
- package/package.json +89 -88
- package/src/adapters/base.ts +16 -16
- package/src/adapters/chatgpt-web/adapter-error.ts +59 -59
- package/src/adapters/chatgpt-web/browser-helper-main.ts +513 -513
- package/src/adapters/chatgpt-web/browser-helper-prompt-selection.ts +27 -27
- package/src/adapters/chatgpt-web/browser-worker.ts +4944 -4944
- package/src/adapters/chatgpt-web/codex-rollout-environment.ts +628 -628
- package/src/adapters/chatgpt-web/compaction-handoff.ts +533 -533
- package/src/adapters/chatgpt-web/compaction-transaction.ts +142 -142
- package/src/adapters/chatgpt-web/concurrency.ts +6 -6
- package/src/adapters/chatgpt-web/conversation-key.ts +58 -58
- package/src/adapters/chatgpt-web/environment.ts +669 -669
- package/src/adapters/chatgpt-web/index.ts +1544 -1544
- package/src/adapters/chatgpt-web/input-tokens.ts +74 -74
- package/src/adapters/chatgpt-web/launcher-helper-client.ts +695 -695
- package/src/adapters/chatgpt-web/markdown.ts +418 -418
- package/src/adapters/chatgpt-web/mcp-main.ts +25 -25
- package/src/adapters/chatgpt-web/mcp-server.ts +933 -933
- package/src/adapters/chatgpt-web/model.ts +70 -70
- package/src/adapters/chatgpt-web/native-compaction-control.ts +74 -74
- package/src/adapters/chatgpt-web/output-validation.ts +62 -62
- package/src/adapters/chatgpt-web/process-line-writer.ts +46 -46
- package/src/adapters/chatgpt-web/prompt.ts +702 -702
- package/src/adapters/chatgpt-web/retry-policy.ts +73 -73
- package/src/adapters/chatgpt-web/rolling-checkpoint.ts +384 -384
- package/src/adapters/chatgpt-web/thread-environment.ts +238 -238
- package/src/adapters/chatgpt-web/tool-stream-parser.ts +1 -1
- package/src/adapters/chatgpt-web/turn-broker.ts +1481 -1481
- package/src/adapters/chatgpt-web/turn-execution.ts +816 -816
- package/src/adapters/chatgpt-web/turn-progress.ts +292 -292
- package/src/adapters/chatgpt-web/usage.ts +121 -121
- package/src/adapters/image.ts +9 -9
- package/src/bridge.ts +1083 -1083
- package/src/browser-login.ts +521 -521
- package/src/chatgpt-session.ts +240 -240
- package/src/chatgpt-web-models.ts +400 -400
- package/src/cli.ts +568 -568
- package/src/codex-integration-document.ts +824 -824
- package/src/codex-integration-journal.ts +212 -212
- package/src/codex-integration-route.ts +515 -515
- package/src/codex-integration-shared.ts +332 -332
- package/src/codex-integration.ts +529 -529
- package/src/codex-interrupt-hook.ts +158 -158
- package/src/config.ts +616 -616
- package/src/dev-chat/cli.ts +432 -432
- package/src/dev-chat/constants.ts +3 -3
- package/src/dev-chat/driver.ts +655 -655
- package/src/dev-chat/profile.ts +223 -223
- package/src/dev-chat/session.ts +287 -287
- package/src/dev-chat/transport.ts +54 -54
- package/src/doctor.ts +237 -237
- package/src/event-queue.ts +45 -45
- package/src/http-body.ts +30 -30
- package/src/launcher-browser-host.ts +695 -695
- package/src/lib/errors.ts +281 -281
- package/src/lib/token-estimate.ts +42 -42
- package/src/login-helper.cjs +1 -1
- package/src/model-catalog.ts +197 -197
- package/src/native-passthrough.ts +261 -261
- package/src/plugin.ts +191 -191
- package/src/process.ts +45 -45
- package/src/responses/compaction.ts +199 -199
- package/src/responses/parser.ts +633 -633
- package/src/responses/reasoning-envelope.ts +49 -49
- package/src/responses/schema.ts +172 -172
- package/src/responses/state.ts +230 -230
- package/src/server.ts +1111 -1111
- package/src/service.ts +315 -315
- package/src/setup.ts +671 -671
- package/src/stall-timeout.ts +23 -23
- package/src/tunnel-service.ts +160 -160
- package/src/tunnel.ts +417 -417
- package/src/turndown-plugin-gfm.d.ts +5 -5
- package/src/types.ts +307 -307
- package/src/usage/totals.ts +12 -12
- package/src/version.ts +1 -1
package/src/event-queue.ts
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
export class AsyncEventQueue<T> implements AsyncIterable<T> {
|
|
2
|
-
private readonly buffered: T[] = [];
|
|
3
|
-
private readonly waiters: Array<(result: IteratorResult<T>) => void> = [];
|
|
4
|
-
private closed = false;
|
|
5
|
-
|
|
6
|
-
constructor(private readonly maxBuffered = 10_000) {}
|
|
7
|
-
|
|
8
|
-
push(value: T): void {
|
|
9
|
-
if (this.closed) return;
|
|
10
|
-
const waiter = this.waiters.shift();
|
|
11
|
-
if (waiter) {
|
|
12
|
-
waiter({ value, done: false });
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
if (this.buffered.length >= this.maxBuffered) throw new Error("Adapter event backlog exceeded");
|
|
16
|
-
this.buffered.push(value);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
close(): void {
|
|
20
|
-
if (this.closed) return;
|
|
21
|
-
this.closed = true;
|
|
22
|
-
while (this.waiters.length > 0) this.waiters.shift()!({ value: undefined, done: true });
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async collect(): Promise<T[]> {
|
|
26
|
-
const values: T[] = [];
|
|
27
|
-
for await (const value of this) values.push(value);
|
|
28
|
-
return values;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
[Symbol.asyncIterator](): AsyncIterator<T> {
|
|
32
|
-
return {
|
|
33
|
-
next: () => {
|
|
34
|
-
const value = this.buffered.shift();
|
|
35
|
-
if (value !== undefined) return Promise.resolve({ value, done: false });
|
|
36
|
-
if (this.closed) return Promise.resolve({ value: undefined, done: true });
|
|
37
|
-
return new Promise(resolve => this.waiters.push(resolve));
|
|
38
|
-
},
|
|
39
|
-
return: () => {
|
|
40
|
-
this.close();
|
|
41
|
-
return Promise.resolve({ value: undefined, done: true });
|
|
42
|
-
},
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
}
|
|
1
|
+
export class AsyncEventQueue<T> implements AsyncIterable<T> {
|
|
2
|
+
private readonly buffered: T[] = [];
|
|
3
|
+
private readonly waiters: Array<(result: IteratorResult<T>) => void> = [];
|
|
4
|
+
private closed = false;
|
|
5
|
+
|
|
6
|
+
constructor(private readonly maxBuffered = 10_000) {}
|
|
7
|
+
|
|
8
|
+
push(value: T): void {
|
|
9
|
+
if (this.closed) return;
|
|
10
|
+
const waiter = this.waiters.shift();
|
|
11
|
+
if (waiter) {
|
|
12
|
+
waiter({ value, done: false });
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (this.buffered.length >= this.maxBuffered) throw new Error("Adapter event backlog exceeded");
|
|
16
|
+
this.buffered.push(value);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
close(): void {
|
|
20
|
+
if (this.closed) return;
|
|
21
|
+
this.closed = true;
|
|
22
|
+
while (this.waiters.length > 0) this.waiters.shift()!({ value: undefined, done: true });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async collect(): Promise<T[]> {
|
|
26
|
+
const values: T[] = [];
|
|
27
|
+
for await (const value of this) values.push(value);
|
|
28
|
+
return values;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
[Symbol.asyncIterator](): AsyncIterator<T> {
|
|
32
|
+
return {
|
|
33
|
+
next: () => {
|
|
34
|
+
const value = this.buffered.shift();
|
|
35
|
+
if (value !== undefined) return Promise.resolve({ value, done: false });
|
|
36
|
+
if (this.closed) return Promise.resolve({ value: undefined, done: true });
|
|
37
|
+
return new Promise(resolve => this.waiters.push(resolve));
|
|
38
|
+
},
|
|
39
|
+
return: () => {
|
|
40
|
+
this.close();
|
|
41
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
package/src/http-body.ts
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
const MAX_ENCODED_REQUEST_BYTES = 64 * 1024 * 1024;
|
|
2
|
-
const MAX_DECODED_REQUEST_BYTES = 128 * 1024 * 1024;
|
|
3
|
-
|
|
4
|
-
function assertWithinLimit(bytes: number, limit: number, label: string): void {
|
|
5
|
-
if (bytes > limit) throw new Error(`${label} exceeds ${limit} bytes`);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export async function readJsonRequestBody(request: Request): Promise<unknown> {
|
|
9
|
-
const declaredLength = Number(request.headers.get("content-length"));
|
|
10
|
-
if (Number.isFinite(declaredLength)) {
|
|
11
|
-
assertWithinLimit(declaredLength, MAX_ENCODED_REQUEST_BYTES, "Encoded request body");
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const encoded = new Uint8Array(await request.arrayBuffer());
|
|
15
|
-
assertWithinLimit(encoded.byteLength, MAX_ENCODED_REQUEST_BYTES, "Encoded request body");
|
|
16
|
-
|
|
17
|
-
const contentEncoding = (request.headers.get("content-encoding") ?? "identity").trim().toLowerCase();
|
|
18
|
-
let decoded: Uint8Array;
|
|
19
|
-
if (contentEncoding === "" || contentEncoding === "identity") {
|
|
20
|
-
decoded = encoded;
|
|
21
|
-
} else if (contentEncoding === "zstd") {
|
|
22
|
-
decoded = await Bun.zstdDecompress(encoded);
|
|
23
|
-
} else {
|
|
24
|
-
throw new Error(`Unsupported Content-Encoding: ${contentEncoding}`);
|
|
25
|
-
}
|
|
26
|
-
assertWithinLimit(decoded.byteLength, MAX_DECODED_REQUEST_BYTES, "Decoded request body");
|
|
27
|
-
|
|
28
|
-
const text = new TextDecoder("utf-8", { fatal: true }).decode(decoded);
|
|
29
|
-
return JSON.parse(text) as unknown;
|
|
30
|
-
}
|
|
1
|
+
const MAX_ENCODED_REQUEST_BYTES = 64 * 1024 * 1024;
|
|
2
|
+
const MAX_DECODED_REQUEST_BYTES = 128 * 1024 * 1024;
|
|
3
|
+
|
|
4
|
+
function assertWithinLimit(bytes: number, limit: number, label: string): void {
|
|
5
|
+
if (bytes > limit) throw new Error(`${label} exceeds ${limit} bytes`);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export async function readJsonRequestBody(request: Request): Promise<unknown> {
|
|
9
|
+
const declaredLength = Number(request.headers.get("content-length"));
|
|
10
|
+
if (Number.isFinite(declaredLength)) {
|
|
11
|
+
assertWithinLimit(declaredLength, MAX_ENCODED_REQUEST_BYTES, "Encoded request body");
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const encoded = new Uint8Array(await request.arrayBuffer());
|
|
15
|
+
assertWithinLimit(encoded.byteLength, MAX_ENCODED_REQUEST_BYTES, "Encoded request body");
|
|
16
|
+
|
|
17
|
+
const contentEncoding = (request.headers.get("content-encoding") ?? "identity").trim().toLowerCase();
|
|
18
|
+
let decoded: Uint8Array;
|
|
19
|
+
if (contentEncoding === "" || contentEncoding === "identity") {
|
|
20
|
+
decoded = encoded;
|
|
21
|
+
} else if (contentEncoding === "zstd") {
|
|
22
|
+
decoded = await Bun.zstdDecompress(encoded);
|
|
23
|
+
} else {
|
|
24
|
+
throw new Error(`Unsupported Content-Encoding: ${contentEncoding}`);
|
|
25
|
+
}
|
|
26
|
+
assertWithinLimit(decoded.byteLength, MAX_DECODED_REQUEST_BYTES, "Decoded request body");
|
|
27
|
+
|
|
28
|
+
const text = new TextDecoder("utf-8", { fatal: true }).decode(decoded);
|
|
29
|
+
return JSON.parse(text) as unknown;
|
|
30
|
+
}
|