@love-moon/chat-web 0.17.1 → 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 (98) hide show
  1. package/CHANGELOG.md +97 -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/core/broker-protocol.d.ts +13 -0
  8. package/dist/core/broker-protocol.js +29 -0
  9. package/dist/core/broker-protocol.js.map +1 -0
  10. package/dist/core/broker-worker.d.ts +1 -0
  11. package/dist/core/broker-worker.js +105 -0
  12. package/dist/core/broker-worker.js.map +1 -0
  13. package/dist/core/errors.d.ts +1 -1
  14. package/dist/core/errors.js.map +1 -1
  15. package/dist/core/provider.d.ts +4 -0
  16. package/dist/core/provider.js.map +1 -1
  17. package/dist/core/turn-broker.d.ts +12 -0
  18. package/dist/core/turn-broker.js +331 -0
  19. package/dist/core/turn-broker.js.map +1 -0
  20. package/dist/core/turn-queue.d.ts +12 -0
  21. package/dist/core/turn-queue.js +54 -0
  22. package/dist/core/turn-queue.js.map +1 -0
  23. package/dist/index.d.ts +6 -3
  24. package/dist/index.js +7 -3
  25. package/dist/index.js.map +1 -1
  26. package/dist/providers/chatgpt-sse-collector.d.ts +2 -0
  27. package/dist/providers/chatgpt-sse-collector.js +4 -0
  28. package/dist/providers/chatgpt-sse-collector.js.map +1 -1
  29. package/dist/providers/chatgpt.d.ts +1 -0
  30. package/dist/providers/chatgpt.js +6 -0
  31. package/dist/providers/chatgpt.js.map +1 -1
  32. package/dist/providers/gemini.d.ts +1 -0
  33. package/dist/providers/gemini.js +5 -0
  34. package/dist/providers/gemini.js.map +1 -1
  35. package/dist/providers/index.d.ts +1 -0
  36. package/dist/providers/index.js +3 -0
  37. package/dist/providers/index.js.map +1 -1
  38. package/dist/providers/kimi.d.ts +38 -0
  39. package/dist/providers/kimi.js +270 -0
  40. package/dist/providers/kimi.js.map +1 -0
  41. package/dist/queued-session.d.ts +31 -0
  42. package/dist/queued-session.js +224 -0
  43. package/dist/queued-session.js.map +1 -0
  44. package/dist/runtime/accounts.d.ts +13 -0
  45. package/dist/runtime/accounts.js +86 -0
  46. package/dist/runtime/accounts.js.map +1 -0
  47. package/dist/runtime/archive.d.ts +9 -0
  48. package/dist/runtime/archive.js +54 -0
  49. package/dist/runtime/archive.js.map +1 -0
  50. package/dist/runtime/browser-worker.d.ts +14 -0
  51. package/dist/runtime/browser-worker.js +87 -0
  52. package/dist/runtime/browser-worker.js.map +1 -0
  53. package/dist/runtime/cli.d.ts +1 -0
  54. package/dist/runtime/cli.js +141 -0
  55. package/dist/runtime/cli.js.map +1 -0
  56. package/dist/runtime/client.d.ts +84 -0
  57. package/dist/runtime/client.js +258 -0
  58. package/dist/runtime/client.js.map +1 -0
  59. package/dist/runtime/daemon.d.ts +1 -0
  60. package/dist/runtime/daemon.js +33 -0
  61. package/dist/runtime/daemon.js.map +1 -0
  62. package/dist/runtime/engine.d.ts +105 -0
  63. package/dist/runtime/engine.js +605 -0
  64. package/dist/runtime/engine.js.map +1 -0
  65. package/dist/runtime/index.d.ts +7 -0
  66. package/dist/runtime/index.js +8 -0
  67. package/dist/runtime/index.js.map +1 -0
  68. package/dist/runtime/managed.d.ts +7 -0
  69. package/dist/runtime/managed.js +75 -0
  70. package/dist/runtime/managed.js.map +1 -0
  71. package/dist/runtime/process-env.d.ts +2 -0
  72. package/dist/runtime/process-env.js +5 -0
  73. package/dist/runtime/process-env.js.map +1 -0
  74. package/dist/runtime/retention.d.ts +15 -0
  75. package/dist/runtime/retention.js +62 -0
  76. package/dist/runtime/retention.js.map +1 -0
  77. package/dist/runtime/server.d.ts +12 -0
  78. package/dist/runtime/server.js +246 -0
  79. package/dist/runtime/server.js.map +1 -0
  80. package/dist/runtime/sites.d.ts +2 -0
  81. package/dist/runtime/sites.js +40 -0
  82. package/dist/runtime/sites.js.map +1 -0
  83. package/dist/runtime/store.d.ts +17 -0
  84. package/dist/runtime/store.js +61 -0
  85. package/dist/runtime/store.js.map +1 -0
  86. package/dist/runtime/stream-decoder.d.ts +30 -0
  87. package/dist/runtime/stream-decoder.js +227 -0
  88. package/dist/runtime/stream-decoder.js.map +1 -0
  89. package/dist/runtime/types.d.ts +102 -0
  90. package/dist/runtime/types.js +12 -0
  91. package/dist/runtime/types.js.map +1 -0
  92. package/dist/runtime/worker.d.ts +1 -0
  93. package/dist/runtime/worker.js +422 -0
  94. package/dist/runtime/worker.js.map +1 -0
  95. package/dist/session.d.ts +5 -0
  96. package/dist/session.js +14 -3
  97. package/dist/session.js.map +1 -1
  98. package/package.json +2 -2
@@ -0,0 +1,12 @@
1
+ import type { LaunchedBrowser } from "./browser.js";
2
+ import type { ChatProvider } from "./provider.js";
3
+ /** One profile, one browser, one FIFO; each connection owns a separate tab. */
4
+ export declare function startTurnBroker(options: {
5
+ socketPath: string;
6
+ provider: ChatProvider;
7
+ launch: () => Promise<LaunchedBrowser>;
8
+ idleMs?: number;
9
+ }): Promise<{
10
+ close(): Promise<void>;
11
+ closed: Promise<void>;
12
+ }>;
@@ -0,0 +1,331 @@
1
+ import fs from "node:fs";
2
+ import net from "node:net";
3
+ import readline from "node:readline";
4
+ import { BROKER_PROTOCOL, wireError } from "./broker-protocol.js";
5
+ import { ChatWebError, NotLoggedInError, ResponseTimeoutError } from "./errors.js";
6
+ import { TurnQueue } from "./turn-queue.js";
7
+ import { ChatSession } from "../session.js";
8
+ // Some adapters wait on a network collector that does not observe AbortSignal.
9
+ // The broker must still release a disconnected task after its page is closed.
10
+ async function withTurnDeadline(run, controller, timeoutMs, provider) {
11
+ let timer;
12
+ let abort;
13
+ try {
14
+ return await new Promise((resolve, reject) => {
15
+ abort = () => reject(new DOMException("Aborted", "AbortError"));
16
+ if (controller.signal.aborted) {
17
+ abort();
18
+ return;
19
+ }
20
+ controller.signal.addEventListener("abort", abort, { once: true });
21
+ timer = setTimeout(() => {
22
+ reject(new ResponseTimeoutError(provider, timeoutMs));
23
+ controller.abort();
24
+ }, timeoutMs);
25
+ void Promise.resolve().then(run).then(resolve, reject);
26
+ });
27
+ }
28
+ finally {
29
+ if (timer)
30
+ clearTimeout(timer);
31
+ if (abort)
32
+ controller.signal.removeEventListener("abort", abort);
33
+ }
34
+ }
35
+ /** One profile, one browser, one FIFO; each connection owns a separate tab. */
36
+ export async function startTurnBroker(options) {
37
+ const { provider } = options;
38
+ const queue = new TurnQueue();
39
+ const clients = new Set();
40
+ let browser;
41
+ let idleTimer;
42
+ let stopping = false;
43
+ let closePromise;
44
+ let resolveClosed;
45
+ const closed = new Promise((resolve) => { resolveClosed = resolve; });
46
+ const send = (client, message) => {
47
+ if (!client.socket.destroyed && !client.socket.writableEnded)
48
+ client.socket.write(`${JSON.stringify(message)}\n`);
49
+ };
50
+ // Retire a failed page while keeping the logical conversation/connection.
51
+ // No failed prompt is replayed: only a later user operation restores the URL.
52
+ const retirePage = (client, preserveConversation) => {
53
+ if (client.disposal)
54
+ return client.disposal;
55
+ const session = client.session;
56
+ if (!session)
57
+ return Promise.resolve();
58
+ const previousId = client.recoveryId;
59
+ const recovering = client.needsRecovery;
60
+ client.session = undefined;
61
+ client.needsRecovery = true;
62
+ client.recoveryId = undefined;
63
+ if (preserveConversation) {
64
+ try {
65
+ client.recoveryId = recovering ? previousId : provider.getConversationId?.(session.page) ?? previousId;
66
+ }
67
+ catch { /* Require explicit clear if the ID is unknown. */ }
68
+ }
69
+ client.disposal = (async () => {
70
+ try {
71
+ await provider.stopGeneration?.(session.page);
72
+ }
73
+ catch { /* Close the page regardless. */ }
74
+ await session.close();
75
+ })();
76
+ return client.disposal;
77
+ };
78
+ const dispose = (client) => {
79
+ client.closing = true;
80
+ for (const controller of client.jobs.values())
81
+ controller.abort();
82
+ return retirePage(client, false);
83
+ };
84
+ const assertConnected = (client) => {
85
+ if (client.closing || !client.opened) {
86
+ throw new ChatWebError("BROKER_SESSION_CLOSED", "The shared chat-web session is closed; create a new session.", { provider: provider.name });
87
+ }
88
+ };
89
+ const recoveryRequired = () => new ChatWebError("BROKER_RECOVERY_REQUIRED", "Could not restore the previous conversation safely. No message was sent. Use /clear to explicitly start a new conversation.", { provider: provider.name, hint: "Use newChat() or /clear; the failed message will not be retried." });
90
+ const createSession = async (client, signal) => {
91
+ if (client.disposal)
92
+ await client.disposal;
93
+ browser ??= options.launch().then((launched) => {
94
+ launched.context.once?.("close", () => { void close(); });
95
+ return launched;
96
+ });
97
+ const launched = await browser;
98
+ if (client.closing || signal?.aborted)
99
+ throw new DOMException("Aborted", "AbortError");
100
+ const page = await launched.context.newPage();
101
+ if (client.closing || signal?.aborted) {
102
+ await page.close();
103
+ throw new DOMException("Aborted", "AbortError");
104
+ }
105
+ client.disposal = undefined;
106
+ client.session = ChatSession.fromBrowser({
107
+ provider, page, context: launched.context, userDataDir: launched.userDataDir, closeContext: false,
108
+ });
109
+ if (client.closing) {
110
+ await dispose(client);
111
+ throw new DOMException("Aborted", "AbortError");
112
+ }
113
+ return client.session;
114
+ };
115
+ const ensureSession = async (client, discardConversation = false, signal) => {
116
+ assertConnected(client);
117
+ if (client.session && !client.session.isClosed)
118
+ return client.session;
119
+ const targetId = client.recoveryId;
120
+ if (!discardConversation && (!targetId || !provider.resumeConversation))
121
+ throw recoveryRequired();
122
+ const session = await createSession(client, signal);
123
+ try {
124
+ if (discardConversation)
125
+ await provider.open(session.page);
126
+ else {
127
+ await provider.resumeConversation(session.page, targetId);
128
+ if (!await session.isLoggedIn())
129
+ throw new NotLoggedInError(provider.name);
130
+ if (provider.getConversationId?.(session.page) !== targetId)
131
+ throw recoveryRequired();
132
+ }
133
+ if (signal?.aborted)
134
+ throw new DOMException("Aborted", "AbortError");
135
+ client.needsRecovery = false;
136
+ return session;
137
+ }
138
+ catch (error) {
139
+ // A timed-out restore may finish after the next turn has started.
140
+ // It must never retire that newer page or overwrite its recovery state.
141
+ if (client.session === session) {
142
+ await retirePage(client, false);
143
+ client.recoveryId = discardConversation ? undefined : targetId;
144
+ }
145
+ throw error;
146
+ }
147
+ };
148
+ const perform = async (client, request) => {
149
+ const { id, method } = request;
150
+ const args = request.args ?? {};
151
+ if (method === "close") {
152
+ await dispose(client);
153
+ send(client, { id, result: null });
154
+ return;
155
+ }
156
+ if (client.closing)
157
+ assertConnected(client);
158
+ if (method === "open") {
159
+ if (args.protocol !== BROKER_PROTOCOL)
160
+ throw new Error("Incompatible chat-web broker protocol; close existing chat-web sessions and retry.");
161
+ if (client.opening || client.session)
162
+ throw new Error("This broker connection already owns a session.");
163
+ client.opening = true;
164
+ }
165
+ const controller = new AbortController();
166
+ client.jobs.set(id, controller);
167
+ try {
168
+ let result;
169
+ if (method === "open") {
170
+ result = await queue.run(async () => {
171
+ const session = await createSession(client);
172
+ try {
173
+ if (args.autoOpen !== false)
174
+ await provider.open(session.page);
175
+ client.opened = true;
176
+ return { userDataDir: session.userDataDir };
177
+ }
178
+ catch (error) {
179
+ await dispose(client);
180
+ throw error;
181
+ }
182
+ }, { signal: controller.signal });
183
+ }
184
+ else if (method === "send" || method === "newChat") {
185
+ result = await queue.run(async () => {
186
+ try {
187
+ const timeoutMs = typeof args.timeoutMs === "number" && Number.isFinite(args.timeoutMs) && args.timeoutMs > 0
188
+ ? args.timeoutMs : 180_000;
189
+ const result = await withTurnDeadline(async () => {
190
+ const session = await ensureSession(client, method === "newChat" || args.newChat === true, controller.signal);
191
+ if (controller.signal.aborted)
192
+ throw new DOMException("Aborted", "AbortError");
193
+ await session.page.bringToFront();
194
+ if (controller.signal.aborted)
195
+ throw new DOMException("Aborted", "AbortError");
196
+ if (method === "newChat") {
197
+ await session.newChat();
198
+ return null;
199
+ }
200
+ const sendOptions = {
201
+ timeoutMs,
202
+ stableMs: typeof args.stableMs === "number" ? args.stableMs : undefined,
203
+ newChat: args.newChat === true,
204
+ signal: controller.signal,
205
+ onProgress: (text) => send(client, { id, type: "progress", text }),
206
+ };
207
+ return await session.send(String(args.message ?? ""), sendOptions);
208
+ }, controller, timeoutMs, provider.name);
209
+ // Update logical state only after success, never from a late result
210
+ // of an operation that already timed out or was cancelled.
211
+ if (method === "newChat") {
212
+ client.turnCounter = 0;
213
+ client.recoveryId = undefined;
214
+ }
215
+ else {
216
+ const turn = result;
217
+ if (args.newChat === true)
218
+ client.turnCounter = 0;
219
+ turn.turnIndex = client.turnCounter++;
220
+ client.recoveryId = turn.conversationId;
221
+ }
222
+ return result;
223
+ }
224
+ catch (error) {
225
+ await retirePage(client, method === "send" && args.newChat !== true);
226
+ throw error;
227
+ }
228
+ }, {
229
+ signal: controller.signal,
230
+ onPosition: (position) => send(client, { id, type: "queue", position }),
231
+ });
232
+ }
233
+ else if (method === "isLoggedIn") {
234
+ result = client.session && !client.needsRecovery
235
+ ? await client.session.isLoggedIn()
236
+ : await queue.run(async () => (await ensureSession(client)).isLoggedIn(), { signal: controller.signal });
237
+ }
238
+ else if (method === "diagnose") {
239
+ result = client.session && !client.needsRecovery
240
+ ? await client.session.diagnose()
241
+ : await queue.run(async () => (await ensureSession(client)).diagnose(), { signal: controller.signal });
242
+ }
243
+ else if (method === "snapshot") {
244
+ result = client.session && !client.needsRecovery
245
+ ? await client.session.snapshot()
246
+ : await queue.run(async () => (await ensureSession(client)).snapshot(), { signal: controller.signal });
247
+ }
248
+ else {
249
+ throw new Error(`Unknown chat-web broker method: ${method}`);
250
+ }
251
+ send(client, { id, result });
252
+ }
253
+ finally {
254
+ client.jobs.delete(id);
255
+ }
256
+ };
257
+ const server = net.createServer((socket) => {
258
+ if (stopping) {
259
+ socket.destroy();
260
+ return;
261
+ }
262
+ if (idleTimer)
263
+ clearTimeout(idleTimer);
264
+ const client = { socket, opening: false, opened: false, closing: false, needsRecovery: false, turnCounter: 0, jobs: new Map() };
265
+ clients.add(client);
266
+ socket.on("error", () => { socket.destroy(); });
267
+ const lines = readline.createInterface({ input: socket });
268
+ lines.on("error", () => socket.destroy());
269
+ lines.on("line", (line) => {
270
+ let request;
271
+ try {
272
+ request = JSON.parse(line);
273
+ }
274
+ catch {
275
+ socket.destroy();
276
+ return;
277
+ }
278
+ if (!Number.isSafeInteger(request.id)) {
279
+ socket.destroy();
280
+ return;
281
+ }
282
+ if (request.type === "cancel") {
283
+ client.jobs.get(request.id)?.abort();
284
+ return;
285
+ }
286
+ void perform(client, request).catch((error) => send(client, { id: request.id, error: wireError(error) }));
287
+ });
288
+ socket.once("close", () => {
289
+ lines.close();
290
+ void dispose(client).finally(() => {
291
+ clients.delete(client);
292
+ scheduleIdle();
293
+ });
294
+ });
295
+ });
296
+ const close = () => {
297
+ closePromise ??= (async () => {
298
+ stopping = true;
299
+ if (idleTimer)
300
+ clearTimeout(idleTimer);
301
+ for (const client of clients)
302
+ client.socket.destroy();
303
+ await Promise.all([...clients].map(dispose));
304
+ await new Promise((resolve) => server.close(() => resolve()));
305
+ if (browser) {
306
+ try {
307
+ await (await browser).context.close();
308
+ }
309
+ catch { /* A crashed browser is already closed. */ }
310
+ }
311
+ resolveClosed();
312
+ })();
313
+ return closePromise;
314
+ };
315
+ function scheduleIdle() {
316
+ if (stopping || clients.size)
317
+ return;
318
+ if (idleTimer)
319
+ clearTimeout(idleTimer);
320
+ idleTimer = setTimeout(() => { void close(); }, options.idleMs ?? 5_000);
321
+ }
322
+ await new Promise((resolve, reject) => {
323
+ server.once("error", reject);
324
+ server.listen(options.socketPath, () => { server.removeListener("error", reject); resolve(); });
325
+ });
326
+ if (process.platform !== "win32")
327
+ fs.chmodSync(options.socketPath, 0o600);
328
+ scheduleIdle();
329
+ return { close, closed };
330
+ }
331
+ //# sourceMappingURL=turn-broker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-broker.js","sourceRoot":"","sources":["../../src/core/turn-broker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** One executing turn per profile; idle conversations never hold the queue. */
2
+ export declare class TurnQueue {
3
+ private pending;
4
+ private active;
5
+ run<T>(run: () => Promise<T>, options?: {
6
+ signal?: AbortSignal;
7
+ onPosition?: (position: number) => void;
8
+ }): Promise<T>;
9
+ private notify;
10
+ private position;
11
+ private drain;
12
+ }
@@ -0,0 +1,54 @@
1
+ /** One executing turn per profile; idle conversations never hold the queue. */
2
+ export class TurnQueue {
3
+ pending = [];
4
+ active = false;
5
+ run(run, options = {}) {
6
+ if (options.signal?.aborted)
7
+ return Promise.reject(new DOMException("Aborted", "AbortError"));
8
+ return new Promise((resolve, reject) => {
9
+ const job = { run, resolve: (value) => resolve(value), reject, ...options };
10
+ job.abort = () => {
11
+ const index = this.pending.indexOf(job);
12
+ if (index < 0)
13
+ return; // Active work releases the queue only after it actually stops.
14
+ this.pending.splice(index, 1);
15
+ job.signal?.removeEventListener("abort", job.abort);
16
+ reject(new DOMException("Aborted", "AbortError"));
17
+ this.notify();
18
+ };
19
+ job.signal?.addEventListener("abort", job.abort, { once: true });
20
+ this.pending.push(job);
21
+ this.drain();
22
+ this.notify();
23
+ });
24
+ }
25
+ notify() {
26
+ this.pending.forEach((job, index) => this.position(job, index + (this.active ? 1 : 0)));
27
+ }
28
+ position(job, position) {
29
+ try {
30
+ job.onPosition?.(position);
31
+ }
32
+ catch { /* An observer cannot wedge the queue. */ }
33
+ }
34
+ drain() {
35
+ if (this.active)
36
+ return;
37
+ const job = this.pending.shift();
38
+ if (!job)
39
+ return;
40
+ this.active = true;
41
+ job.signal?.removeEventListener("abort", job.abort);
42
+ this.position(job, 0);
43
+ this.notify();
44
+ void Promise.resolve().then(() => {
45
+ if (job.signal?.aborted)
46
+ throw new DOMException("Aborted", "AbortError");
47
+ return job.run();
48
+ }).then(job.resolve, job.reject).finally(() => {
49
+ this.active = false;
50
+ this.drain();
51
+ });
52
+ }
53
+ }
54
+ //# sourceMappingURL=turn-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-queue.js","sourceRoot":"","sources":["../../src/core/turn-queue.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Public entry point for `@love-moon/chat-web`.
3
3
  *
4
- * The primary SDK surface is `ChatSession` — multi-turn dialogue against
5
- * a persistent browser profile. CLI users get `login`, `doctor`, `info`;
6
- * everything else (ask, daemon, ...) lives at the SDK level.
4
+ * ChatRuntimeClient and RuntimeChatSession connect to an isolated multi-chat
5
+ * daemon. The CLI exposes serve/chat/turn commands.
6
+ * QueuedChatSession shares a browser and turn queue across tasks/processes.
7
+ * ChatSession offers exclusive ownership and direct Playwright Page access.
7
8
  *
8
9
  * @example
9
10
  * import { ChatSession, registerBuiltinProviders } from "@love-moon/chat-web";
@@ -19,6 +20,7 @@
19
20
  * }
20
21
  */
21
22
  export { ChatSession, withSession, type SendOptions, type SendResult, type SessionOpenOptions, } from "./session.js";
23
+ export { QueuedChatSession } from "./queued-session.js";
22
24
  export * from "./core/provider.js";
23
25
  export * from "./providers/index.js";
24
26
  export * from "./core/errors.js";
@@ -31,3 +33,4 @@ export * from "./core/snapshot.js";
31
33
  export * from "./core/locator-score.js";
32
34
  export * from "./core/logger.js";
33
35
  export * from "./commands/index.js";
36
+ export * from "./runtime/index.js";
package/dist/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * Public entry point for `@love-moon/chat-web`.
3
3
  *
4
- * The primary SDK surface is `ChatSession` — multi-turn dialogue against
5
- * a persistent browser profile. CLI users get `login`, `doctor`, `info`;
6
- * everything else (ask, daemon, ...) lives at the SDK level.
4
+ * ChatRuntimeClient and RuntimeChatSession connect to an isolated multi-chat
5
+ * daemon. The CLI exposes serve/chat/turn commands.
6
+ * QueuedChatSession shares a browser and turn queue across tasks/processes.
7
+ * ChatSession offers exclusive ownership and direct Playwright Page access.
7
8
  *
8
9
  * @example
9
10
  * import { ChatSession, registerBuiltinProviders } from "@love-moon/chat-web";
@@ -20,6 +21,7 @@
20
21
  */
21
22
  // Primary session API.
22
23
  export { ChatSession, withSession, } from "./session.js";
24
+ export { QueuedChatSession } from "./queued-session.js";
23
25
  // Provider plumbing.
24
26
  export * from "./core/provider.js";
25
27
  export * from "./providers/index.js";
@@ -37,4 +39,6 @@ export * from "./core/logger.js";
37
39
  // CLI commands as SDK functions, in case callers want to drive them
38
40
  // programmatically (e.g. a UI that runs doctor and renders the report).
39
41
  export * from "./commands/index.js";
42
+ // Isolated multi-chat runtime and local socket client.
43
+ export * from "./runtime/index.js";
40
44
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,uBAAuB;AACvB,OAAO,EACL,WAAW,EACX,WAAW,GAIZ,MAAM,cAAc,CAAC;AAEtB,qBAAqB;AACrB,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AAErC,4EAA4E;AAC5E,8EAA8E;AAC9E,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AAEjC,oEAAoE;AACpE,wEAAwE;AACxE,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,uBAAuB;AACvB,OAAO,EACL,WAAW,EACX,WAAW,GAIZ,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAqB;AACrB,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AAErC,4EAA4E;AAC5E,8EAA8E;AAC9E,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AAEjC,oEAAoE;AACpE,wEAAwE;AACxE,cAAc,qBAAqB,CAAC;AAEpC,uDAAuD;AACvD,cAAc,oBAAoB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { Page } from "playwright";
2
+ import { type SSEEvent } from "../core/sse-parser.js";
2
3
  /**
3
4
  * URL pattern for ChatGPT's streaming conversation endpoint. The exact
4
5
  * path has shifted historically (`/backend-api/conversation`,
@@ -65,6 +66,7 @@ export declare class ChatGPTSSECollector {
65
66
  * Apply a raw SSE body directly. Exposed for tests and for callers that
66
67
  * want to feed in a recorded transcript.
67
68
  */
69
+ ingestEvents(events: SSEEvent[]): void;
68
70
  ingest(body: string): void;
69
71
  private maybeConsume;
70
72
  private applyEvent;
@@ -104,6 +104,10 @@ export class ChatGPTSSECollector {
104
104
  * Apply a raw SSE body directly. Exposed for tests and for callers that
105
105
  * want to feed in a recorded transcript.
106
106
  */
107
+ ingestEvents(events) {
108
+ for (const event of events)
109
+ this.applyEvent(event);
110
+ }
107
111
  ingest(body) {
108
112
  const events = parseSSE(body);
109
113
  for (const ev of events)
@@ -1 +1 @@
1
- {"version":3,"file":"chatgpt-sse-collector.js","sourceRoot":"","sources":["../../src/providers/chatgpt-sse-collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chatgpt-sse-collector.js","sourceRoot":"","sources":["../../src/providers/chatgpt-sse-collector.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,7 @@ export declare class ChatGPTAdapter implements ChatProvider {
28
28
  */
29
29
  private pendingTurns;
30
30
  open(page: Page): Promise<void>;
31
+ resumeConversation(page: Page, conversationId: string): Promise<void>;
31
32
  isLoggedIn(page: Page): Promise<boolean>;
32
33
  findInput(page: Page): Promise<Locator>;
33
34
  findSendButton(page: Page): Promise<Locator | null>;
@@ -42,6 +42,12 @@ export class ChatGPTAdapter {
42
42
  await gotoOrThrowNetworkError(page, this.homeUrl, this.name);
43
43
  await this.waitForComposerReady(page).catch(() => undefined);
44
44
  }
45
+ async resumeConversation(page, conversationId) {
46
+ this.ensureCollector(page);
47
+ await gotoOrThrowNetworkError(page, `${this.homeUrl}c/${encodeURIComponent(conversationId)}`, this.name);
48
+ await this.waitForComposerReady(page);
49
+ await page.locator('[data-message-author-role="user"]').first().waitFor({ state: "visible", timeout: 20_000 });
50
+ }
45
51
  async isLoggedIn(page) {
46
52
  // The signed-in state always exposes the ProseMirror composer.
47
53
  // We probe the strongest identifier first (id=prompt-textarea), then