@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,54 @@
1
+ import fs from "node:fs/promises";
2
+ import { readFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { randomUUID } from "node:crypto";
5
+ import { RuntimeError } from "./types.js";
6
+ /** Small identity records outlive profile/history GC, so Conductor IDs remain resumable. */
7
+ export class ConversationArchive {
8
+ directory;
9
+ constructor(directory) {
10
+ this.directory = directory;
11
+ }
12
+ file(id) {
13
+ if (!/^[a-zA-Z0-9_-]{1,160}$/.test(id))
14
+ throw new RuntimeError("NOT_FOUND", "Conversation not found");
15
+ return path.join(this.directory, "archive", id + ".json");
16
+ }
17
+ read(id) {
18
+ let text;
19
+ try {
20
+ text = readFileSync(this.file(id), "utf8");
21
+ }
22
+ catch (error) {
23
+ if (error.code === "ENOENT")
24
+ return;
25
+ throw error;
26
+ }
27
+ const record = JSON.parse(text);
28
+ if (record.version !== 1 || record.conversation?.id !== id || typeof record.conversation.provider !== "string" ||
29
+ typeof record.conversation.accountId !== "string")
30
+ throw new RuntimeError("INVALID_ARCHIVE", "Saved conversation identity is invalid");
31
+ return { ...record.conversation, archived: true };
32
+ }
33
+ async save(chat) {
34
+ const file = this.file(chat.id);
35
+ await fs.mkdir(path.dirname(file), { recursive: true, mode: 0o700 });
36
+ const { archived: _archived, ...conversation } = chat;
37
+ const temporary = file + "." + randomUUID() + ".tmp";
38
+ const handle = await fs.open(temporary, "wx", 0o600);
39
+ try {
40
+ try {
41
+ await handle.writeFile(JSON.stringify({ version: 1, conversation }));
42
+ await handle.sync();
43
+ }
44
+ finally {
45
+ await handle.close();
46
+ }
47
+ await fs.rename(temporary, file);
48
+ }
49
+ finally {
50
+ await fs.rm(temporary, { force: true });
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/runtime/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAC;AAE7D,4FAA4F;AAC5F,MAAM,OAAO,mBAAmB;IACV;IAApB,YAAoB,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IACjC,IAAI,CAAC,EAAU;QACrB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;QACtG,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,EAAU;QACb,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC;QACnD,OAAO,KAAK,EAAE,CAAC;YAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;QAC9F,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,KAAK,QAAQ;YAC5G,OAAO,MAAM,CAAC,YAAY,CAAC,SAAS,KAAK,QAAQ;YAAE,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,wCAAwC,CAAC,CAAC;QACzI,OAAO,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,IAAkB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,GAAG,GAAG,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC;YACH,IAAI,CAAC;gBAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;gBAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAAC,CAAC;oBAC1F,CAAC;gBAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YACjC,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;gBAAS,CAAC;YAAC,MAAM,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;IACxD,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import type { ChatWorker, WorkerConfig, WorkerNotice, WorkerResult } from "./types.js";
2
+ export declare class BrowserWorker implements ChatWorker {
3
+ private child;
4
+ private counter;
5
+ private pending;
6
+ constructor(config: WorkerConfig);
7
+ private request;
8
+ open(): Promise<WorkerResult>;
9
+ send(input: string, timeoutMs: number, notify: (notice: WorkerNotice) => void, options?: {
10
+ deepThink?: boolean;
11
+ }): Promise<WorkerResult>;
12
+ cancel(): void;
13
+ close(): Promise<void>;
14
+ }
@@ -0,0 +1,87 @@
1
+ import { runtimeProcessEnv } from "./process-env.js";
2
+ import { fork } from "node:child_process";
3
+ import { createRequire } from "node:module";
4
+ import { existsSync } from "node:fs";
5
+ import { fileURLToPath } from "node:url";
6
+ import { RuntimeError } from "./types.js";
7
+ export class BrowserWorker {
8
+ child;
9
+ counter = 0;
10
+ pending = new Map();
11
+ constructor(config) {
12
+ const js = new URL("./worker.js", import.meta.url);
13
+ const target = existsSync(js) ? js : new URL("./worker.ts", import.meta.url);
14
+ this.child = fork(fileURLToPath(target), [], {
15
+ stdio: ["ignore", "ignore", "ignore", "ipc"],
16
+ execArgv: target.pathname.endsWith(".ts") ? ["--import", createRequire(import.meta.url).resolve("tsx")] : [],
17
+ env: { ...runtimeProcessEnv(), CHAT_WEB_LOG: "silent" },
18
+ });
19
+ this.child.on("message", (message) => {
20
+ const pending = this.pending.get(message?.id);
21
+ if (!pending)
22
+ return;
23
+ if (message.notice) {
24
+ pending.notify?.(message.notice);
25
+ return;
26
+ }
27
+ clearTimeout(pending.timer);
28
+ this.pending.delete(message.id);
29
+ if (message.error)
30
+ pending.reject(Object.assign(new RuntimeError(message.error.code ?? "WORKER_ERROR", message.error.message), { stopConfirmed: message.error.stopConfirmed }));
31
+ else
32
+ pending.resolve(message.result);
33
+ });
34
+ const fail = () => {
35
+ for (const entry of this.pending.values()) {
36
+ clearTimeout(entry.timer);
37
+ entry.reject(new RuntimeError("WORKER_EXITED", "Chat worker exited; submitted turns must be reconciled"));
38
+ }
39
+ this.pending.clear();
40
+ };
41
+ this.child.on("exit", fail);
42
+ this.child.on("error", fail);
43
+ this.child.send({ config });
44
+ }
45
+ request(command, params = {}, timeoutMs = 60_000, notify) {
46
+ if (!this.child.connected)
47
+ return Promise.reject(new RuntimeError("WORKER_EXITED", "Chat worker is disconnected"));
48
+ const id = ++this.counter;
49
+ return new Promise((resolve, reject) => {
50
+ const timer = setTimeout(() => {
51
+ this.pending.delete(id);
52
+ this.child.kill("SIGTERM");
53
+ reject(new RuntimeError("WORKER_TIMEOUT", "Chat worker timed out"));
54
+ }, timeoutMs);
55
+ this.pending.set(id, { resolve, reject, timer, notify });
56
+ this.child.send({ id, command, ...params }, (error) => {
57
+ if (error) {
58
+ clearTimeout(timer);
59
+ this.pending.delete(id);
60
+ reject(new RuntimeError("WORKER_EXITED", error.message));
61
+ }
62
+ });
63
+ });
64
+ }
65
+ open() { return this.request("open"); }
66
+ send(input, timeoutMs, notify, options = {}) {
67
+ return this.request("send", { input, timeoutMs, deepThink: options.deepThink }, timeoutMs + 60_000, notify);
68
+ }
69
+ cancel() {
70
+ if (this.child.connected)
71
+ this.child.send({ command: "cancel" }, () => undefined);
72
+ }
73
+ async close() {
74
+ if (this.child.connected)
75
+ await this.request("close", {}, 5_000).catch(() => undefined);
76
+ if (this.child.exitCode === null && this.child.signalCode === null) {
77
+ const exited = new Promise((resolve) => this.child.once("exit", () => resolve()));
78
+ this.child.kill("SIGTERM");
79
+ await Promise.race([exited, new Promise((resolve) => setTimeout(resolve, 2_000).unref())]);
80
+ if (this.child.exitCode === null && this.child.signalCode === null) {
81
+ this.child.kill("SIGKILL");
82
+ await exited;
83
+ }
84
+ }
85
+ }
86
+ }
87
+ //# sourceMappingURL=browser-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-worker.js","sourceRoot":"","sources":["../../src/runtime/browser-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function runRuntimeCli(argv: string[], write?: (text: string) => void): Promise<number>;
@@ -0,0 +1,141 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { ChatRuntimeClient } from "./client.js";
3
+ import { runtimeDirectory, runtimeSocket, startRuntimeServer } from "./server.js";
4
+ import { RuntimeError } from "./types.js";
5
+ const help = `Isolated chat runtime:
6
+ chat-web serve [--socket PATH] [--max-workers 4] [--per-account-concurrency 2]
7
+ chat-web runtime status|stop [--socket PATH]
8
+ chat-web chat create <chatgpt|deepseek|kimi|claude> [--account ID] [--headed] [--deepthink|--no-deepthink]
9
+ chat-web chat list|get|resume|login|close [CHAT_ID] [--acknowledge]
10
+ chat-web chat send CHAT_ID MESSAGE [--request-id ID] [--timeout MS] [--detach|--jsonl] [--deepthink|--no-deepthink]
11
+ chat-web turn get|events|cancel TURN_ID [--after SEQ]
12
+ All client commands accept --socket PATH. Login opens only this chat's window.
13
+ `;
14
+ export async function runRuntimeCli(argv, write = (text) => { process.stdout.write(text); }) {
15
+ const args = [];
16
+ const flags = new Map();
17
+ const values = new Set(["socket", "max-workers", "per-account-concurrency", "account", "request-id", "timeout", "after", "runtime-dir", "browser-executable", "browser-channel"]);
18
+ const booleans = new Set(["headed", "headless", "acknowledge", "detach", "jsonl", "help", "deepthink", "no-deepthink"]);
19
+ for (let i = 0; i < argv.length; i++) {
20
+ const arg = argv[i];
21
+ if (arg === "--") {
22
+ args.push(...argv.slice(i + 1));
23
+ break;
24
+ }
25
+ if (!arg.startsWith("--")) {
26
+ args.push(arg);
27
+ continue;
28
+ }
29
+ const key = arg.slice(2);
30
+ if (booleans.has(key))
31
+ flags.set(key, true);
32
+ else if (values.has(key) && argv[i + 1] !== undefined)
33
+ flags.set(key, argv[++i]);
34
+ else
35
+ throw new RuntimeError("INVALID_PARAMS", "Unknown option or missing value: " + arg);
36
+ }
37
+ if (flags.has("help")) {
38
+ write(help);
39
+ return 0;
40
+ }
41
+ if (flags.has("deepthink") && flags.has("no-deepthink"))
42
+ throw new RuntimeError("INVALID_PARAMS", "Choose --deepthink or --no-deepthink");
43
+ const deepThink = flags.has("deepthink") ? true : flags.has("no-deepthink") ? false : undefined;
44
+ if (deepThink !== undefined && !(args[0] === "chat" && ["create", "send"].includes(args[1] ?? ""))) {
45
+ throw new RuntimeError("INVALID_PARAMS", "DeepThink options require chat create or chat send");
46
+ }
47
+ const value = (name) => typeof flags.get(name) === "string" ? flags.get(name) : undefined;
48
+ const required = (index) => {
49
+ if (!args[index])
50
+ throw new RuntimeError("INVALID_PARAMS", help);
51
+ return args[index];
52
+ };
53
+ const emit = (result) => write(JSON.stringify(result) + "\n");
54
+ const directory = value("runtime-dir") ?? runtimeDirectory();
55
+ const socketPath = value("socket") ?? runtimeSocket(directory);
56
+ const client = new ChatRuntimeClient(socketPath);
57
+ if (args[0] === "serve") {
58
+ const server = await startRuntimeServer({ directory, socketPath,
59
+ maxWorkers: value("max-workers") === undefined ? undefined : Number(value("max-workers")),
60
+ perAccountConcurrency: value("per-account-concurrency") === undefined ? undefined : Number(value("per-account-concurrency")),
61
+ executablePath: value("browser-executable"), channel: value("browser-channel") });
62
+ emit({ socketPath, ...server.runtime.status() });
63
+ const stop = () => { void server.close(); };
64
+ process.on("SIGINT", stop);
65
+ process.on("SIGTERM", stop);
66
+ try {
67
+ await server.closed;
68
+ }
69
+ finally {
70
+ process.off("SIGINT", stop);
71
+ process.off("SIGTERM", stop);
72
+ }
73
+ return 0;
74
+ }
75
+ const group = required(0);
76
+ const action = required(1);
77
+ if (group === "runtime") {
78
+ if (!["status", "stop"].includes(action))
79
+ throw new RuntimeError("INVALID_PARAMS", help);
80
+ emit(await client.call("runtime." + action));
81
+ }
82
+ else if (group === "chat") {
83
+ switch (action) {
84
+ case "create":
85
+ if (flags.has("headed") && flags.has("headless"))
86
+ throw new RuntimeError("INVALID_PARAMS", "Choose headed or headless");
87
+ emit(await client.create({ provider: required(2), accountId: value("account"), headless: !flags.has("headed"), deepThink }));
88
+ break;
89
+ case "list":
90
+ emit(await client.list());
91
+ break;
92
+ case "get":
93
+ emit(await client.get(required(2)));
94
+ break;
95
+ case "close":
96
+ emit(await client.closeConversation(required(2)));
97
+ break;
98
+ case "login":
99
+ case "resume":
100
+ emit(await client.resume(required(2), { ...(action === "login" ? { headed: true } :
101
+ flags.has("headed") ? { headed: true } : flags.has("headless") ? { headed: false } : {}),
102
+ acknowledgeUncertain: flags.has("acknowledge") }));
103
+ break;
104
+ case "send": {
105
+ const chat = required(2);
106
+ const input = args.slice(3).join(" ");
107
+ const turn = await client.submit({ conversationId: chat, input,
108
+ requestId: value("request-id") ?? randomUUID(), timeoutMs: value("timeout") ? Number(value("timeout")) : undefined, deepThink });
109
+ if (flags.has("detach")) {
110
+ emit(turn);
111
+ break;
112
+ }
113
+ const result = await client.wait(turn.id, flags.has("jsonl") ? emit : undefined);
114
+ if (!flags.has("jsonl"))
115
+ emit(result);
116
+ return result.status === "completed" ? 0 : 1;
117
+ }
118
+ default: throw new RuntimeError("INVALID_PARAMS", help);
119
+ }
120
+ }
121
+ else if (group === "turn") {
122
+ const id = required(2);
123
+ if (action === "get")
124
+ emit(await client.getTurn(id));
125
+ else if (action === "cancel")
126
+ emit(await client.cancel(id));
127
+ else if (action === "events") {
128
+ const after = Number(value("after") ?? 0);
129
+ if (!Number.isInteger(after) || after < 0)
130
+ throw new RuntimeError("INVALID_PARAMS", "Invalid sequence");
131
+ for await (const event of client.events(id, after))
132
+ emit(event);
133
+ }
134
+ else
135
+ throw new RuntimeError("INVALID_PARAMS", help);
136
+ }
137
+ else
138
+ throw new RuntimeError("INVALID_PARAMS", help);
139
+ return 0;
140
+ }
141
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/runtime/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { type Conversation, type Turn, type TurnEvent, type TurnStatus, type WorkerResult } from "./types.js";
2
+ export declare class ChatRuntimeClient {
3
+ readonly socketPath: string;
4
+ private readonly requestTimeoutMs;
5
+ constructor(socketPath?: string, requestTimeoutMs?: number);
6
+ call<T = unknown>(method: string, params?: object): Promise<T>;
7
+ private checkDeepThink;
8
+ create(params: {
9
+ provider: string;
10
+ accountId?: string;
11
+ headless?: boolean;
12
+ deepThink?: boolean;
13
+ providerConversationId?: string;
14
+ }): Promise<Conversation>;
15
+ list(): Promise<Conversation[]>;
16
+ get(id: string): Promise<Conversation>;
17
+ resume(id: string, options?: {
18
+ headed?: boolean;
19
+ acknowledgeUncertain?: boolean;
20
+ allowQueued?: boolean;
21
+ }): Promise<Conversation & WorkerResult>;
22
+ closeConversation(id: string): Promise<Conversation>;
23
+ submit(params: {
24
+ conversationId: string;
25
+ input: string;
26
+ requestId: string;
27
+ timeoutMs?: number;
28
+ deepThink?: boolean;
29
+ }): Promise<Turn>;
30
+ getTurn(id: string): Promise<Turn>;
31
+ cancel(id: string): Promise<Turn>;
32
+ events(turnId: string, after?: number, signal?: AbortSignal): AsyncGenerator<TurnEvent>;
33
+ wait(turnId: string, onEvent?: (event: TurnEvent) => void, signal?: AbortSignal): Promise<Turn>;
34
+ }
35
+ export declare class RuntimeChatSession {
36
+ readonly id: string;
37
+ private deepThink?;
38
+ private releaseOnClose;
39
+ providerConversationId?: string | undefined;
40
+ private managedOptions?;
41
+ readonly client: ChatRuntimeClient;
42
+ readonly provider: string;
43
+ private activeTurnId?;
44
+ private interruptRequested;
45
+ private sending;
46
+ private localWait?;
47
+ private turns;
48
+ private closed;
49
+ private constructor();
50
+ static open(provider: string, options?: {
51
+ socketPath?: string;
52
+ conversationId?: string;
53
+ providerConversationId?: string;
54
+ accountId?: string;
55
+ headless?: boolean;
56
+ deepThink?: boolean;
57
+ releaseOnClose?: boolean;
58
+ launch?: {
59
+ executablePath?: string;
60
+ channel?: string;
61
+ };
62
+ }): Promise<RuntimeChatSession>;
63
+ private ensureAvailable;
64
+ /** Defer browser/auth verification until the queued send owns a worker slot. */
65
+ prepare(): Promise<WorkerResult>;
66
+ isLoggedIn(): Promise<boolean>;
67
+ send(message: string, options?: {
68
+ requestId?: string;
69
+ timeoutMs?: number;
70
+ onProgress?: (text: string) => void;
71
+ onStatus?: (status: TurnStatus) => void;
72
+ signal?: AbortSignal;
73
+ deepThink?: boolean;
74
+ }): Promise<{
75
+ response: string;
76
+ message: string;
77
+ turnIndex: number;
78
+ durationMs: number;
79
+ conversationId: string | undefined;
80
+ runtimeConversationId: string;
81
+ }>;
82
+ interruptCurrentTurn(): Promise<void>;
83
+ close(): Promise<void>;
84
+ }