@love-moon/chat-web 0.17.2 → 0.18.0

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.
Files changed (64) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/README.md +176 -0
  3. package/dist/cli.js +8 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/login.js +11 -2
  6. package/dist/commands/login.js.map +1 -1
  7. package/dist/index.d.ts +5 -4
  8. package/dist/index.js +6 -4
  9. package/dist/index.js.map +1 -1
  10. package/dist/providers/chatgpt-sse-collector.d.ts +2 -0
  11. package/dist/providers/chatgpt-sse-collector.js +4 -0
  12. package/dist/providers/chatgpt-sse-collector.js.map +1 -1
  13. package/dist/runtime/accounts.d.ts +13 -0
  14. package/dist/runtime/accounts.js +86 -0
  15. package/dist/runtime/accounts.js.map +1 -0
  16. package/dist/runtime/archive.d.ts +9 -0
  17. package/dist/runtime/archive.js +54 -0
  18. package/dist/runtime/archive.js.map +1 -0
  19. package/dist/runtime/browser-worker.d.ts +14 -0
  20. package/dist/runtime/browser-worker.js +87 -0
  21. package/dist/runtime/browser-worker.js.map +1 -0
  22. package/dist/runtime/cli.d.ts +1 -0
  23. package/dist/runtime/cli.js +141 -0
  24. package/dist/runtime/cli.js.map +1 -0
  25. package/dist/runtime/client.d.ts +84 -0
  26. package/dist/runtime/client.js +258 -0
  27. package/dist/runtime/client.js.map +1 -0
  28. package/dist/runtime/daemon.d.ts +1 -0
  29. package/dist/runtime/daemon.js +33 -0
  30. package/dist/runtime/daemon.js.map +1 -0
  31. package/dist/runtime/engine.d.ts +105 -0
  32. package/dist/runtime/engine.js +605 -0
  33. package/dist/runtime/engine.js.map +1 -0
  34. package/dist/runtime/index.d.ts +7 -0
  35. package/dist/runtime/index.js +8 -0
  36. package/dist/runtime/index.js.map +1 -0
  37. package/dist/runtime/managed.d.ts +7 -0
  38. package/dist/runtime/managed.js +75 -0
  39. package/dist/runtime/managed.js.map +1 -0
  40. package/dist/runtime/process-env.d.ts +2 -0
  41. package/dist/runtime/process-env.js +5 -0
  42. package/dist/runtime/process-env.js.map +1 -0
  43. package/dist/runtime/retention.d.ts +15 -0
  44. package/dist/runtime/retention.js +62 -0
  45. package/dist/runtime/retention.js.map +1 -0
  46. package/dist/runtime/server.d.ts +12 -0
  47. package/dist/runtime/server.js +246 -0
  48. package/dist/runtime/server.js.map +1 -0
  49. package/dist/runtime/sites.d.ts +2 -0
  50. package/dist/runtime/sites.js +40 -0
  51. package/dist/runtime/sites.js.map +1 -0
  52. package/dist/runtime/store.d.ts +17 -0
  53. package/dist/runtime/store.js +61 -0
  54. package/dist/runtime/store.js.map +1 -0
  55. package/dist/runtime/stream-decoder.d.ts +30 -0
  56. package/dist/runtime/stream-decoder.js +227 -0
  57. package/dist/runtime/stream-decoder.js.map +1 -0
  58. package/dist/runtime/types.d.ts +102 -0
  59. package/dist/runtime/types.js +12 -0
  60. package/dist/runtime/types.js.map +1 -0
  61. package/dist/runtime/worker.d.ts +1 -0
  62. package/dist/runtime/worker.js +422 -0
  63. package/dist/runtime/worker.js.map +1 -0
  64. package/package.json +1 -1
@@ -0,0 +1,422 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { readRuntimeAccount, applyRuntimeAccount } from "./accounts.js";
5
+ import { launchProviderBrowser } from "../core/browser.js";
6
+ import { clearProfileOwner } from "../core/profile-lock.js";
7
+ import { createLogger } from "../core/logger.js";
8
+ import { ChatStreamDecoder } from "./stream-decoder.js";
9
+ import { RuntimeError } from "./types.js";
10
+ const pause = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
11
+ /** Installed in the page's main world, with a private per-worker binding. */
12
+ // Keep injected source independent of Node/TypeScript loader helpers.
13
+ const observeStreams = String.raw `(options) => {
14
+ const scope = window;
15
+ if (scope[options.key]) return;
16
+ const state = { active: "" };
17
+ const original = window.fetch;
18
+ const pattern = new RegExp(options.path);
19
+ window.fetch = async function (...args) {
20
+ const request = args[0];
21
+ const url = new URL(typeof request === "string" ? request : request instanceof URL ? request.href : request.url, location.href);
22
+ const method = args[1]?.method ?? (request instanceof Request ? request.method : "GET");
23
+ const token = state.active;
24
+ const matched = token && url.origin === options.origin && method.toUpperCase() === "POST" && pattern.test(url.pathname + url.search);
25
+ const response = await original.apply(this, args);
26
+ if (matched) {
27
+ const send = (payload) => Promise.resolve(scope[options.binding]({ token, ...payload })).catch(() => undefined);
28
+ if (!response.ok) void send({ error: "Provider HTTP " + response.status });
29
+ else if (response.headers.get("content-type")?.includes("event-stream") ||
30
+ response.headers.get("content-type")?.includes("application/connect+json")) {
31
+ const connect = response.headers.get("content-type").includes("application/connect+json");
32
+ const reader = response.clone().body?.getReader();
33
+ if (reader) void (async () => {
34
+ const decoder = new TextDecoder();
35
+ let bytes = 0;
36
+ const pending = new Set();
37
+ const emit = (payload) => {
38
+ const task = send(payload).finally(() => pending.delete(task));
39
+ pending.add(task);
40
+ };
41
+ try {
42
+ for (;;) {
43
+ const { value, done } = await reader.read();
44
+ if (done) break;
45
+ bytes += value.byteLength;
46
+ if (bytes > 8_000_000) { await send({ error: "Response exceeds capture limit" }); void reader.cancel().catch(() => undefined); break; }
47
+ if (connect) {
48
+ // Pass raw bytes across IPC: decoding binary envelope headers as UTF-8 corrupts lengths.
49
+ let binary = "";
50
+ for (let i = 0; i < value.length; i += 32768) binary += String.fromCharCode(...value.subarray(i, i + 32768));
51
+ emit({ connectChunk: btoa(binary) });
52
+ // Drain the tee promptly: the site's reader may abort as soon as it sees done.
53
+ if (pending.size >= 64) await Promise.all(pending);
54
+ } else await send({ chunk: decoder.decode(value, { stream: true }) });
55
+ }
56
+ if (connect) { await Promise.all(pending); await send({ connectEnd: true }); }
57
+ const tail = decoder.decode();
58
+ if (tail) await send({ chunk: tail });
59
+ } catch (error) {
60
+ await Promise.all(pending);
61
+ await send({ interrupted: error?.name || "Error" });
62
+ }
63
+ finally { reader.releaseLock(); }
64
+ })();
65
+ }
66
+ }
67
+ return response;
68
+ };
69
+ // DeepSeek streams SSE through XMLHttpRequest, so fetch alone misses the entire protocol.
70
+ const opened = new WeakMap();
71
+ const xhrOpen = XMLHttpRequest.prototype.open;
72
+ const xhrSend = XMLHttpRequest.prototype.send;
73
+ XMLHttpRequest.prototype.open = function (method, url, ...rest) {
74
+ opened.set(this, { method: String(method).toUpperCase(), url: new URL(String(url), location.href) });
75
+ return xhrOpen.call(this, method, url, ...rest);
76
+ };
77
+ XMLHttpRequest.prototype.send = function (...args) {
78
+ const request = opened.get(this);
79
+ const token = state.active;
80
+ if (token && request?.method === "POST" && request.url.origin === options.origin &&
81
+ pattern.test(request.url.pathname + request.url.search)) {
82
+ let offset = 0;
83
+ let limited = false;
84
+ const send = (payload) => Promise.resolve(scope[options.binding]({ token, ...payload })).catch(() => undefined);
85
+ const flush = () => {
86
+ if (limited || (this.responseType && this.responseType !== "text") ||
87
+ !this.getResponseHeader("content-type")?.includes("event-stream")) return;
88
+ const text = this.responseText;
89
+ if (text.length > 8_000_000) { limited = true; void send({ error: "Response exceeds capture limit" }); return; }
90
+ const chunk = text.slice(offset); offset = text.length;
91
+ if (chunk) void send({ chunk });
92
+ };
93
+ this.addEventListener("progress", flush);
94
+ this.addEventListener("load", () => {
95
+ if (this.status < 200 || this.status >= 300) void send({ error: "Provider HTTP " + this.status });
96
+ else flush();
97
+ });
98
+ this.addEventListener("abort", () => { void send({ interrupted: "AbortError" }); });
99
+ this.addEventListener("error", () => { void send({ interrupted: "NetworkError" }); });
100
+ this.addEventListener("timeout", () => { void send({ interrupted: "TimeoutError" }); });
101
+ }
102
+ return xhrSend.apply(this, args);
103
+ };
104
+ scope[options.key] = state;
105
+ }`;
106
+ class Session {
107
+ config;
108
+ context;
109
+ page;
110
+ opening;
111
+ controller;
112
+ decoder;
113
+ token = "";
114
+ captureError;
115
+ key = "__chat_runtime_" + randomUUID().replaceAll("-", "");
116
+ binding = "__chat_runtime_event_" + randomUUID().replaceAll("-", "");
117
+ constructor(config) {
118
+ this.config = config;
119
+ }
120
+ open() {
121
+ if (this.page && !this.page.isClosed())
122
+ return this.location();
123
+ this.opening ??= this.openInternal().catch(async (error) => {
124
+ await this.close();
125
+ throw error;
126
+ }).finally(() => { this.opening = undefined; });
127
+ return this.opening;
128
+ }
129
+ async openInternal() {
130
+ if (this.context)
131
+ await this.close();
132
+ const directory = this.config.profileDir;
133
+ await fs.mkdir(directory, { recursive: true, mode: 0o700 });
134
+ const launched = await launchProviderBrowser(this.config.site.name, {
135
+ headless: this.config.conversation.headless,
136
+ executablePath: this.config.executablePath,
137
+ channel: this.config.channel,
138
+ logger: createLogger("silent"),
139
+ profileManager: {
140
+ getProfileDir: () => directory,
141
+ ensureProfile: async () => directory,
142
+ clearProfile: async () => { throw new Error("Runtime profiles are retained"); },
143
+ listProfiles: async () => [this.config.conversation.id],
144
+ },
145
+ });
146
+ this.context = launched.context;
147
+ this.page = launched.page;
148
+ const page = this.page;
149
+ const auth = await readRuntimeAccount(this.config.site.name, this.config.conversation.accountId, this.config.authDirectory);
150
+ const marker = path.join(directory, ".account-auth.json");
151
+ let importedAt = 0;
152
+ try {
153
+ importedAt = JSON.parse(await fs.readFile(marker, "utf8")).updatedAt ?? 0;
154
+ }
155
+ catch (error) {
156
+ if (error.code !== "ENOENT")
157
+ throw error;
158
+ }
159
+ if (auth && auth.updatedAt > importedAt) {
160
+ await applyRuntimeAccount(this.context, auth.state);
161
+ await fs.writeFile(marker, JSON.stringify({ updatedAt: auth.updatedAt }), { mode: 0o600 });
162
+ }
163
+ page.setDefaultTimeout(10_000);
164
+ page.setDefaultNavigationTimeout(30_000);
165
+ await page.exposeBinding(this.binding, ({ page: source, frame }, payload) => {
166
+ if (source !== page || frame !== page.mainFrame() || payload?.token !== this.token || !this.token)
167
+ return;
168
+ if (typeof payload.error === "string")
169
+ this.captureError = payload.error.slice(0, 256);
170
+ if (typeof payload.interrupted === "string" &&
171
+ !(payload.interrupted === "AbortError" && this.decoder?.complete)) {
172
+ this.captureError = "Response stream interrupted (" + payload.interrupted.slice(0, 32) + ")";
173
+ }
174
+ if (typeof payload.connectChunk === "string") {
175
+ if (payload.connectChunk.length > 1_400_000) {
176
+ this.captureError = "Capture chunk exceeds limit";
177
+ return;
178
+ }
179
+ try {
180
+ this.decoder?.pushConnect(Buffer.from(payload.connectChunk, "base64"));
181
+ }
182
+ catch (error) {
183
+ this.captureError = String(error);
184
+ }
185
+ }
186
+ if (payload.connectEnd === true) {
187
+ try {
188
+ this.decoder?.finishConnect();
189
+ }
190
+ catch (error) {
191
+ this.captureError = String(error);
192
+ }
193
+ }
194
+ if (typeof payload.chunk === "string") {
195
+ if (payload.chunk.length > 1_000_000) {
196
+ this.captureError = "Capture chunk exceeds limit";
197
+ return;
198
+ }
199
+ try {
200
+ this.decoder?.push(payload.chunk);
201
+ }
202
+ catch (error) {
203
+ this.captureError = String(error);
204
+ }
205
+ }
206
+ });
207
+ const observer = { key: this.key, binding: this.binding, path: this.config.site.streamPath, origin: new URL(this.config.site.homeUrl).origin };
208
+ const source = "(" + observeStreams + ")(" + JSON.stringify(observer) + ")";
209
+ await page.addInitScript({ content: source });
210
+ await page.goto(this.config.conversation.url ?? this.config.site.homeUrl, { waitUntil: "domcontentloaded" });
211
+ await page.evaluate(source);
212
+ await this.waitForInput();
213
+ return this.location();
214
+ }
215
+ async visible(selector) {
216
+ const locator = this.page.locator(selector);
217
+ const count = Math.min(await locator.count(), 12);
218
+ for (let index = 0; index < count; index++) {
219
+ const candidate = locator.nth(index);
220
+ if (await candidate.isVisible().catch(() => false))
221
+ return candidate;
222
+ }
223
+ return undefined;
224
+ }
225
+ async waitForInput() {
226
+ const deadline = Date.now() + 10_000;
227
+ while (Date.now() < deadline) {
228
+ if (/\/(?:login|auth|signin|sign_in|sign-in)(?:\/|$)/i.test(new URL(this.page.url()).pathname))
229
+ return undefined;
230
+ const input = await this.visible(this.config.site.input);
231
+ if (input && (!this.config.site.authenticated || await this.visible(this.config.site.authenticated)))
232
+ return input;
233
+ await pause(100);
234
+ }
235
+ return undefined;
236
+ }
237
+ async location() {
238
+ const page = this.page;
239
+ const url = new URL(page.url());
240
+ const origin = new URL(this.config.site.homeUrl).origin;
241
+ const match = url.origin === origin ? new RegExp(this.config.site.conversationPath).exec(url.pathname) : null;
242
+ const input = !!(await this.visible(this.config.site.input));
243
+ const authenticated = !this.config.site.authenticated || !!(await this.visible(this.config.site.authenticated));
244
+ const authRequired = /\/(?:login|auth|signin|sign_in|sign-in)(?:\/|$)/i.test(url.pathname) || (input && !authenticated);
245
+ return {
246
+ ready: input && authenticated && !authRequired, authRequired,
247
+ ...(match ? { url: url.href, providerConversationId: match[1] } : {}),
248
+ };
249
+ }
250
+ async setDeepThink(enabled) {
251
+ if (enabled === undefined)
252
+ return;
253
+ const selector = this.config.site.deepThink;
254
+ if (this.config.site.name !== "deepseek" || !selector)
255
+ throw new RuntimeError("DEEPTHINK_UNAVAILABLE", "DeepThink control is unavailable");
256
+ let toggle = await this.visible(selector);
257
+ for (let i = 0; !toggle && i < 60; i++) {
258
+ if (this.controller?.signal.aborted)
259
+ throw new RuntimeError("CANCELLED", "Cancelled before submission");
260
+ await pause(50);
261
+ toggle = await this.visible(selector);
262
+ }
263
+ if (!toggle)
264
+ throw new RuntimeError("DEEPTHINK_UNAVAILABLE", "DeepThink control is unavailable");
265
+ const state = async () => (await toggle.getAttribute("aria-pressed")) ?? (await toggle.getAttribute("aria-checked"));
266
+ const current = await state();
267
+ if (current !== "true" && current !== "false")
268
+ throw new RuntimeError("DEEPTHINK_UNAVAILABLE", "Cannot determine DeepThink state");
269
+ if ((current === "true") === enabled)
270
+ return;
271
+ await toggle.click();
272
+ for (let i = 0; i < 60; i++) {
273
+ if (await state() === String(enabled))
274
+ return;
275
+ if (this.controller?.signal.aborted)
276
+ throw new RuntimeError("CANCELLED", "Cancelled before submission");
277
+ await pause(50);
278
+ }
279
+ throw new RuntimeError("DEEPTHINK_UNAVAILABLE", "DeepThink did not switch to the requested state");
280
+ }
281
+ async send(input, timeoutMs, notify, options = {}) {
282
+ await this.open();
283
+ const page = this.page;
284
+ const composer = await this.waitForInput();
285
+ if (!composer) {
286
+ const { authRequired } = await this.location();
287
+ throw new RuntimeError(authRequired ? "AUTH_REQUIRED" : "PAGE_NOT_READY", authRequired ? "Chat requires login before sending" : "Chat page did not become ready; wait for it to finish loading and retry");
288
+ }
289
+ if (await this.visible(this.config.site.stop))
290
+ throw new RuntimeError("PROVIDER_BUSY", "Provider is still generating; wait or stop it before sending again");
291
+ const baseline = await page.locator(this.config.site.assistant).allTextContents();
292
+ this.controller = new AbortController();
293
+ this.decoder = new ChatStreamDecoder(this.config.site.format);
294
+ this.captureError = undefined;
295
+ this.token = randomUUID();
296
+ await page.evaluate(({ key, token }) => { window[key].active = token; }, { key: this.key, token: this.token });
297
+ let previous = "";
298
+ let stableSince = Date.now();
299
+ let observedStop = false;
300
+ const deadline = Date.now() + timeoutMs;
301
+ try {
302
+ await this.setDeepThink(options.deepThink);
303
+ await composer.fill(input);
304
+ if (this.controller.signal.aborted)
305
+ throw new RuntimeError("CANCELLED", "Cancelled before submission");
306
+ // Parent records this phase before considering any subsequent failure safe to retry.
307
+ notify({ type: "submitting" });
308
+ const send = await this.visible(this.config.site.send);
309
+ if (send && await send.isEnabled())
310
+ await send.click();
311
+ else
312
+ await composer.press("Enter");
313
+ while (Date.now() < deadline) {
314
+ if (this.controller.signal.aborted) {
315
+ const stop = await this.visible(this.config.site.stop);
316
+ if (stop) {
317
+ await stop.click().catch(() => undefined);
318
+ for (let i = 0; i < 20; i++) {
319
+ if (!(await this.visible(this.config.site.stop))) {
320
+ const error = new RuntimeError("CANCELLED", "Generation stop observed");
321
+ Object.assign(error, { stopConfirmed: true });
322
+ throw error;
323
+ }
324
+ await pause(100);
325
+ }
326
+ }
327
+ throw new RuntimeError("UNCERTAIN", "Client cancelled; provider stop was not confirmed");
328
+ }
329
+ if (this.decoder.error)
330
+ throw new RuntimeError(this.decoder.errorCode ?? "PROVIDER_ERROR", this.decoder.error);
331
+ if (this.captureError)
332
+ throw new RuntimeError("UNCERTAIN", this.captureError);
333
+ const texts = await page.locator(this.config.site.assistant).allTextContents();
334
+ const newMessage = texts.length > baseline.length;
335
+ const domText = newMessage ? texts.at(-1)?.trim() ?? "" : "";
336
+ // Once a protocol is captured, an empty answer can mean reasoning, not missing DOM.
337
+ const text = this.decoder.captured ? this.decoder.text : domText;
338
+ if (text.length > 1_000_000)
339
+ throw new RuntimeError("UNCERTAIN", "Response exceeds limit");
340
+ if (text !== previous) {
341
+ previous = text;
342
+ stableSince = Date.now();
343
+ if (text)
344
+ notify({ type: "progress", text, ...(await this.location()) });
345
+ }
346
+ const stopping = !!(await this.visible(this.config.site.stop));
347
+ // The protocol can finish before the UI releases its composer; keep FIFO handoff safe.
348
+ if (this.decoder.complete && this.decoder.text && !stopping)
349
+ return { text: this.decoder.text, source: this.decoder.source, ...(await this.location()) };
350
+ observedStop ||= stopping;
351
+ // DOM completion requires an observed generation control transition and a NEW answer.
352
+ if (this.decoder.source !== "connect" && newMessage && text && observedStop && !stopping && Date.now() - stableSince > 700) {
353
+ return { text, source: "dom", ...(await this.location()) };
354
+ }
355
+ await pause(100);
356
+ }
357
+ throw new RuntimeError("UNCERTAIN", "Response deadline exceeded; provider completion was not confirmed");
358
+ }
359
+ finally {
360
+ // A stop can precede the first text delta. Retain its provider URL so a
361
+ // task restart resumes that conversation instead of silently opening home.
362
+ try {
363
+ notify({ type: "progress", text: previous, ...(await this.location()) });
364
+ }
365
+ catch { }
366
+ this.token = "";
367
+ this.controller = undefined;
368
+ }
369
+ }
370
+ cancel() { this.controller?.abort(); }
371
+ async close() {
372
+ this.cancel();
373
+ const owned = !!this.context;
374
+ await this.context?.close().catch(() => undefined);
375
+ if (owned)
376
+ clearProfileOwner(this.config.profileDir);
377
+ this.context = undefined;
378
+ this.page = undefined;
379
+ }
380
+ }
381
+ let config;
382
+ let session;
383
+ let busy = false;
384
+ process.on("message", async (message) => {
385
+ if (message.config) {
386
+ config = message.config;
387
+ session = new Session(config);
388
+ return;
389
+ }
390
+ if (message.command === "cancel") {
391
+ session?.cancel();
392
+ return;
393
+ }
394
+ if (!session || busy) {
395
+ process.send?.({ id: message.id, error: { code: "WORKER_BUSY", message: "Chat worker is busy" } });
396
+ return;
397
+ }
398
+ busy = true;
399
+ try {
400
+ let result = {};
401
+ if (message.command === "open")
402
+ result = await session.open();
403
+ else if (message.command === "send")
404
+ result = await session.send(message.input, message.timeoutMs, (notice) => process.send?.({ id: message.id, notice }), { deepThink: message.deepThink });
405
+ else if (message.command === "close")
406
+ await session.close();
407
+ else
408
+ throw new RuntimeError("INVALID_REQUEST", "Unknown worker command");
409
+ process.send?.({ id: message.id, result });
410
+ if (message.command === "close")
411
+ process.disconnect();
412
+ }
413
+ catch (error) {
414
+ process.send?.({ id: message.id, error: { code: error.code ?? "WORKER_ERROR", message: String(error.message ?? error), stopConfirmed: error.stopConfirmed } });
415
+ }
416
+ finally {
417
+ busy = false;
418
+ }
419
+ });
420
+ process.on("disconnect", () => { void session?.close().finally(() => process.exit(0)); });
421
+ process.on("SIGTERM", () => { void session?.close().finally(() => process.exit(0)); });
422
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/runtime/worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@love-moon/chat-web",
3
- "version": "0.17.2",
3
+ "version": "0.18.0",
4
4
  "description": "Dedicated chat-web automation runtime for ChatGPT / DeepSeek / Gemini / Kimi and similar web chat products.",
5
5
  "repository": {
6
6
  "type": "git",