@heyditto/cli 2.11.0 → 2.12.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 (47) hide show
  1. package/README.md +74 -0
  2. package/dist/agents/launch.d.ts +11 -0
  3. package/dist/agents/launch.js +207 -9
  4. package/dist/agents/launch.js.map +1 -1
  5. package/dist/cli.js +2 -0
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands.js +5 -1
  8. package/dist/commands.js.map +1 -1
  9. package/dist/remote/attachments.d.ts +22 -0
  10. package/dist/remote/attachments.js +0 -0
  11. package/dist/remote/attachments.js.map +1 -0
  12. package/dist/remote/catalog.d.ts +18 -0
  13. package/dist/remote/catalog.js +309 -0
  14. package/dist/remote/catalog.js.map +1 -0
  15. package/dist/remote/controller.d.ts +76 -0
  16. package/dist/remote/controller.js +352 -0
  17. package/dist/remote/controller.js.map +1 -0
  18. package/dist/remote/fork-command.d.ts +8 -0
  19. package/dist/remote/fork-command.js +50 -0
  20. package/dist/remote/fork-command.js.map +1 -0
  21. package/dist/remote/fork.d.ts +22 -0
  22. package/dist/remote/fork.js +113 -0
  23. package/dist/remote/fork.js.map +1 -0
  24. package/dist/remote/headless.d.ts +30 -0
  25. package/dist/remote/headless.js +75 -0
  26. package/dist/remote/headless.js.map +1 -0
  27. package/dist/remote/hook.d.ts +2 -0
  28. package/dist/remote/hook.js +69 -0
  29. package/dist/remote/hook.js.map +1 -0
  30. package/dist/remote/hooks.d.ts +30 -0
  31. package/dist/remote/hooks.js +95 -0
  32. package/dist/remote/hooks.js.map +1 -0
  33. package/dist/remote/host.d.ts +63 -0
  34. package/dist/remote/host.js +240 -0
  35. package/dist/remote/host.js.map +1 -0
  36. package/dist/remote/protocol.d.ts +163 -0
  37. package/dist/remote/protocol.js +11 -0
  38. package/dist/remote/protocol.js.map +1 -0
  39. package/dist/remote/pty.d.ts +56 -0
  40. package/dist/remote/pty.js +100 -0
  41. package/dist/remote/pty.js.map +1 -0
  42. package/dist/store.d.ts +2 -0
  43. package/dist/store.js.map +1 -1
  44. package/dist/teleport/commands.d.ts +6 -0
  45. package/dist/teleport/commands.js +11 -0
  46. package/dist/teleport/commands.js.map +1 -1
  47. package/package.json +9 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/remote/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import type { Harness } from "../agents/types.js";
2
+ import type { HeadlessTurn } from "./headless.js";
3
+ import { HostClient, type HostClientOptions } from "./host.js";
4
+ import type { HookServer } from "./hooks.js";
5
+ import type { PtySession } from "./pty.js";
6
+ import type { CommandEntry, HarnessName, SessionMode } from "./protocol.js";
7
+ /**
8
+ * Glue between the host socket and the harness this process runs: turns
9
+ * arrive from the app, get typed into the harness (TUI) or run as one
10
+ * headless invocation, and the turn's lifecycle is reported back. One turn at
11
+ * a time; later turns queue. Answers to a pending harness prompt bypass the
12
+ * queue, since the running turn is what is waiting for them.
13
+ */
14
+ export interface RemoteSessionContext {
15
+ harness: Harness;
16
+ sessionId: string;
17
+ cwd: string;
18
+ mode: SessionMode;
19
+ baseUrl: string;
20
+ apiKey: string;
21
+ log: (line: string) => void;
22
+ /** Pushes a teleport checkpoint for the session; resolves with the generation. */
23
+ checkpoint?: (cwd: string) => Promise<number>;
24
+ /** Milliseconds of screen silence after which a TUI turn counts as finished when no hook fired. */
25
+ quietFallbackMs?: number;
26
+ hostOptions?: Partial<HostClientOptions>;
27
+ }
28
+ export declare function harnessName(harness: Harness): HarnessName;
29
+ export declare class RemoteSession {
30
+ readonly host: HostClient;
31
+ private readonly ctx;
32
+ private readonly hooks?;
33
+ private pty?;
34
+ private runHeadless?;
35
+ private readonly queue;
36
+ private current?;
37
+ private draining;
38
+ private stopped;
39
+ private catalog;
40
+ private stopWatching?;
41
+ private pending?;
42
+ constructor(ctx: RemoteSessionContext, hooks?: HookServer);
43
+ attachTui(pty: PtySession): void;
44
+ attachHeadless(run: (prompt: string) => HeadlessTurn): void;
45
+ /** The catalog last announced (tests and diagnostics). */
46
+ get commands(): CommandEntry[];
47
+ /** Connects (best effort), announces the session and its command catalog. Returns whether the backend answered in time. */
48
+ start(): Promise<boolean>;
49
+ stop(): void;
50
+ refreshCatalog(): Promise<void>;
51
+ private finish;
52
+ private onTurn;
53
+ private onInterrupt;
54
+ private onCheckpoint;
55
+ private onHook;
56
+ private turnEnded;
57
+ private requestQuestion;
58
+ private requestPrompt;
59
+ private clearPending;
60
+ /** `prompt.answer` frame: inject the keystrokes for the pending prompt. */
61
+ private answerPrompt;
62
+ /** `turn.deliver {kind: "answer"}`: same as a `prompt.answer`, reported as an instant turn. */
63
+ private deliverAnswer;
64
+ private drain;
65
+ private lookupCommand;
66
+ /** The text that goes into the harness for a turn, or a reason it cannot run here. */
67
+ private resolveText;
68
+ private runTurn;
69
+ /**
70
+ * Safety net when a harness never reports its turn end (older builds, hooks
71
+ * disabled, builtin commands): once the screen has been quiet for the limit
72
+ * after the prompt went in, the turn counts as finished. Hooks are the
73
+ * primary signal; a pending prompt never times out this way.
74
+ */
75
+ private quietFallback;
76
+ }
@@ -0,0 +1,352 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { buildPrompt, downloadAttachments } from "./attachments.js";
3
+ import { commandInvocation, discoverCommands, watchCatalog } from "./catalog.js";
4
+ import { HostClient } from "./host.js";
5
+ export function harnessName(harness) {
6
+ return harness === "claude" ? "claude-code" : "codex";
7
+ }
8
+ const CLAUDE_PERMISSION_OPTIONS = [
9
+ { id: "1", label: "Yes" },
10
+ { id: "2", label: "Yes, and don't ask again this session" },
11
+ { id: "3", label: "No, and tell Claude what to do differently" },
12
+ ];
13
+ export class RemoteSession {
14
+ host;
15
+ ctx;
16
+ hooks;
17
+ pty;
18
+ runHeadless;
19
+ queue = [];
20
+ current;
21
+ draining = false;
22
+ stopped = false;
23
+ catalog = [];
24
+ stopWatching;
25
+ pending;
26
+ constructor(ctx, hooks) {
27
+ this.ctx = ctx;
28
+ this.hooks = hooks;
29
+ this.host = new HostClient({
30
+ baseUrl: ctx.baseUrl,
31
+ apiKey: ctx.apiKey,
32
+ capabilities: {
33
+ harnesses: ["claude-code", "codex"],
34
+ attachments: true,
35
+ headless: true,
36
+ teleport: Boolean(ctx.checkpoint),
37
+ },
38
+ log: ctx.log,
39
+ handlers: {
40
+ onTurn: (frame) => this.onTurn(frame),
41
+ onInterrupt: (turnId) => this.onInterrupt(turnId),
42
+ onCheckpoint: (request) => void this.onCheckpoint(request),
43
+ onPromptAnswer: (answer) => this.answerPrompt(answer),
44
+ },
45
+ ...ctx.hostOptions,
46
+ });
47
+ hooks?.events.on("hook", (event) => this.onHook(event));
48
+ }
49
+ attachTui(pty) {
50
+ this.pty = pty;
51
+ }
52
+ attachHeadless(run) {
53
+ this.runHeadless = run;
54
+ }
55
+ /** The catalog last announced (tests and diagnostics). */
56
+ get commands() {
57
+ return this.catalog;
58
+ }
59
+ /** Connects (best effort), announces the session and its command catalog. Returns whether the backend answered in time. */
60
+ async start() {
61
+ const ok = await this.host.start();
62
+ this.host.announce({
63
+ sessionId: this.ctx.sessionId,
64
+ harness: harnessName(this.ctx.harness),
65
+ cwd: this.ctx.cwd,
66
+ mode: this.ctx.mode,
67
+ status: "idle",
68
+ });
69
+ await this.refreshCatalog();
70
+ this.stopWatching = watchCatalog(this.ctx.harness, this.ctx.cwd, () => void this.refreshCatalog());
71
+ return ok;
72
+ }
73
+ stop() {
74
+ this.stopped = true;
75
+ this.stopWatching?.();
76
+ this.host.close();
77
+ }
78
+ async refreshCatalog() {
79
+ try {
80
+ this.catalog = await discoverCommands(this.ctx.harness, this.ctx.cwd);
81
+ }
82
+ catch (err) {
83
+ this.ctx.log(`remote control: could not read the command catalog (${err instanceof Error ? err.message : String(err)})`);
84
+ return;
85
+ }
86
+ this.host.commands({
87
+ sessionId: this.ctx.sessionId,
88
+ harness: harnessName(this.ctx.harness),
89
+ commands: this.catalog,
90
+ });
91
+ }
92
+ finish(turnId, fields = {}) {
93
+ this.host.send({ type: "turn.finished", turnId, ...fields });
94
+ }
95
+ onTurn(frame) {
96
+ this.host.send({ type: "turn.ack", turnId: frame.turnId });
97
+ if (frame.sessionId !== this.ctx.sessionId) {
98
+ this.finish(frame.turnId, { error: "unknown session on this host" });
99
+ return;
100
+ }
101
+ if ((frame.kind ?? "prompt") === "answer") {
102
+ // Not a turn of its own: the running turn is waiting on this.
103
+ this.deliverAnswer(frame);
104
+ return;
105
+ }
106
+ this.queue.push(frame);
107
+ void this.drain();
108
+ }
109
+ onInterrupt(turnId) {
110
+ const current = this.current;
111
+ if (!current || current.turnId !== turnId)
112
+ return;
113
+ current.interrupted = true;
114
+ if (current.headless)
115
+ current.headless.interrupt();
116
+ else
117
+ this.pty?.interrupt(this.ctx.harness);
118
+ }
119
+ async onCheckpoint(request) {
120
+ if (!this.ctx.checkpoint) {
121
+ this.host.send({ type: "checkpoint.failed", sessionId: request.sessionId, error: "teleport is not available on this host" });
122
+ return;
123
+ }
124
+ try {
125
+ const generation = await this.ctx.checkpoint(this.ctx.cwd);
126
+ this.host.send({ type: "checkpoint.done", sessionId: request.sessionId, generation });
127
+ }
128
+ catch (err) {
129
+ this.host.send({ type: "checkpoint.failed", sessionId: request.sessionId, error: err instanceof Error ? err.message : String(err) });
130
+ }
131
+ }
132
+ // ---------------------------------------------------------------------
133
+ // Harness prompts (permission dialogs, questions)
134
+ // ---------------------------------------------------------------------
135
+ onHook(event) {
136
+ const payload = event.payload ?? {};
137
+ if (event.source === "claude") {
138
+ switch (event.event) {
139
+ case "UserPromptSubmit":
140
+ // Local typing also moves the session between running and idle, so
141
+ // the app sees the same state whether the prompt came from the
142
+ // phone or the keyboard.
143
+ this.clearPending();
144
+ this.host.status(this.ctx.sessionId, "running");
145
+ return;
146
+ case "Notification":
147
+ if (payload.notification_type === "permission_prompt") {
148
+ this.requestPrompt({
149
+ kind: "permission",
150
+ text: String(payload.message ?? payload.title ?? "Claude Code is asking for permission"),
151
+ options: CLAUDE_PERMISSION_OPTIONS,
152
+ default: "1",
153
+ });
154
+ }
155
+ return;
156
+ case "PreToolUse":
157
+ if (payload.tool_name === "AskUserQuestion")
158
+ this.requestQuestion(payload.tool_input);
159
+ return;
160
+ case "Stop":
161
+ this.turnEnded();
162
+ return;
163
+ default:
164
+ return;
165
+ }
166
+ }
167
+ if (/turn-complete|turn-ended|agent-turn/.test(event.event))
168
+ this.turnEnded();
169
+ }
170
+ turnEnded() {
171
+ this.clearPending();
172
+ if (!this.current)
173
+ this.host.status(this.ctx.sessionId, "idle");
174
+ this.current?.done();
175
+ }
176
+ requestQuestion(toolInput) {
177
+ const input = (toolInput ?? {});
178
+ const q = input.questions?.[0];
179
+ if (!q)
180
+ return;
181
+ const options = (q.options ?? []).map((o, i) => ({ id: String(i + 1), label: o.label ?? `option ${i + 1}` }));
182
+ this.requestPrompt({
183
+ kind: options.length > 0 ? "choice" : "question",
184
+ text: [q.header, q.question].filter(Boolean).join(": "),
185
+ ...(options.length > 0 ? { options } : {}),
186
+ });
187
+ }
188
+ requestPrompt(prompt) {
189
+ const pending = { promptId: randomUUID(), sessionId: this.ctx.sessionId, ...prompt };
190
+ this.pending = pending;
191
+ const { keys: _keys, ...frame } = pending;
192
+ this.host.send({ type: "prompt.request", ...frame });
193
+ }
194
+ clearPending() {
195
+ this.pending = undefined;
196
+ }
197
+ /** `prompt.answer` frame: inject the keystrokes for the pending prompt. */
198
+ answerPrompt(answer) {
199
+ const pending = this.pending;
200
+ if (!pending || pending.promptId !== answer.promptId)
201
+ return false;
202
+ if (!this.pty)
203
+ return false;
204
+ const option = pending.options?.find((o) => o.id === answer.value || o.label.toLowerCase() === answer.value.trim().toLowerCase());
205
+ const keys = option ? (pending.keys?.[option.id] ?? option.id) : answer.value;
206
+ this.pty.write(keys);
207
+ // A digit hotkey confirms on its own in Claude Code; the extra Enter is a
208
+ // no-op there and submits typed text everywhere else.
209
+ setTimeout(() => this.pty?.write("\r"), 150).unref?.();
210
+ this.pending = undefined;
211
+ return true;
212
+ }
213
+ /** `turn.deliver {kind: "answer"}`: same as a `prompt.answer`, reported as an instant turn. */
214
+ deliverAnswer(frame) {
215
+ if (!frame.answer)
216
+ return this.finish(frame.turnId, { error: "answer turn without an answer" });
217
+ if (!this.pty)
218
+ return this.finish(frame.turnId, { exitCode: 0, unsupported: "headless sessions cannot answer harness prompts" });
219
+ if (!this.pending)
220
+ return this.finish(frame.turnId, { error: "no prompt is pending" });
221
+ if (!this.answerPrompt({ type: "prompt.answer", ...frame.answer }))
222
+ return this.finish(frame.turnId, { error: `prompt ${frame.answer.promptId} is not pending` });
223
+ this.finish(frame.turnId, { exitCode: 0 });
224
+ }
225
+ // ---------------------------------------------------------------------
226
+ // Turns
227
+ // ---------------------------------------------------------------------
228
+ async drain() {
229
+ if (this.draining)
230
+ return;
231
+ this.draining = true;
232
+ try {
233
+ while (this.queue.length > 0 && !this.stopped) {
234
+ const frame = this.queue.shift();
235
+ await this.runTurn(frame);
236
+ }
237
+ }
238
+ finally {
239
+ this.draining = false;
240
+ }
241
+ }
242
+ lookupCommand(name) {
243
+ const bare = name.replace(/^[/$]/, "");
244
+ return this.catalog.find((c) => c.name === name || c.name === bare || c.name === `$${bare}` || c.name === `/${bare}`);
245
+ }
246
+ /** The text that goes into the harness for a turn, or a reason it cannot run here. */
247
+ async resolveText(frame) {
248
+ const attachments = await downloadAttachments(this.ctx.cwd, frame.turnId, frame.attachments);
249
+ if (attachments.length > 0) {
250
+ this.ctx.log(`remote control: ${attachments.length} attachment(s) saved under .tmp/ditto/attachments/${frame.turnId}`);
251
+ }
252
+ if ((frame.kind ?? "prompt") !== "command")
253
+ return { text: buildPrompt(frame.text, attachments) };
254
+ const name = frame.command?.name?.trim() || frame.text.trim().replace(/^[/$]/, "").split(/\s+/)[0];
255
+ if (!name)
256
+ return { unsupported: "command turn without a command name" };
257
+ const entry = this.lookupCommand(name);
258
+ const args = frame.command?.args ?? (frame.command ? undefined : frame.text.trim().split(/\s+/).slice(1).join(" "));
259
+ const invocation = commandInvocation(this.ctx.harness, entry, entry?.name ?? name, args);
260
+ if (this.ctx.mode === "headless") {
261
+ const headlessOk = entry ? entry.headless : false;
262
+ if (!headlessOk) {
263
+ return { unsupported: `${invocation.split(" ")[0]} only works in a terminal session (${entry ? "TUI-only builtin" : "not in this session's catalog"})` };
264
+ }
265
+ }
266
+ return { text: buildPrompt(invocation, attachments), entry };
267
+ }
268
+ async runTurn(frame) {
269
+ const { turnId } = frame;
270
+ this.host.status(this.ctx.sessionId, "running");
271
+ let resolved;
272
+ try {
273
+ resolved = await this.resolveText(frame);
274
+ }
275
+ catch (err) {
276
+ this.finish(turnId, { error: err instanceof Error ? err.message : String(err) });
277
+ this.host.status(this.ctx.sessionId, "idle");
278
+ return;
279
+ }
280
+ if ("unsupported" in resolved) {
281
+ this.finish(turnId, { exitCode: 0, unsupported: resolved.unsupported });
282
+ this.host.status(this.ctx.sessionId, "idle");
283
+ return;
284
+ }
285
+ const { text, entry } = resolved;
286
+ let finish = () => undefined;
287
+ const finished = new Promise((resolve) => {
288
+ finish = resolve;
289
+ });
290
+ this.current = { turnId, interrupted: false, done: finish };
291
+ try {
292
+ if (this.pty) {
293
+ this.ctx.log(`remote control: ${entry ? `command ${text.split("\n")[0]}` : "prompt"} received from the app (turn ${turnId.slice(0, 8)})`);
294
+ await this.pty.inject(text);
295
+ this.host.send({ type: "turn.started", turnId });
296
+ // Builtins (/model, /clear …) run no model turn, so no Stop hook
297
+ // fires; a short quiet period ends them.
298
+ const quiet = entry?.source === "builtin" ? Math.min(this.ctx.quietFallbackMs ?? 8000, 1500) : undefined;
299
+ await Promise.race([finished, this.pty.exit, this.quietFallback(finished, quiet)]);
300
+ this.finish(turnId, { exitCode: 0, ...(this.current.interrupted ? { interrupted: true } : {}) });
301
+ }
302
+ else if (this.runHeadless) {
303
+ const turn = this.runHeadless(text);
304
+ this.current.headless = turn;
305
+ this.host.send({ type: "turn.started", turnId });
306
+ const exitCode = await turn.exit;
307
+ this.finish(turnId, { exitCode, ...(this.current.interrupted ? { interrupted: true } : {}) });
308
+ }
309
+ else {
310
+ this.finish(turnId, { error: "no harness attached" });
311
+ }
312
+ }
313
+ catch (err) {
314
+ this.finish(turnId, { error: err instanceof Error ? err.message : String(err) });
315
+ }
316
+ finally {
317
+ this.current = undefined;
318
+ this.clearPending();
319
+ this.host.status(this.ctx.sessionId, "idle");
320
+ }
321
+ }
322
+ /**
323
+ * Safety net when a harness never reports its turn end (older builds, hooks
324
+ * disabled, builtin commands): once the screen has been quiet for the limit
325
+ * after the prompt went in, the turn counts as finished. Hooks are the
326
+ * primary signal; a pending prompt never times out this way.
327
+ */
328
+ quietFallback(finished, limitMs) {
329
+ const limit = limitMs ?? this.ctx.quietFallbackMs ?? 8000;
330
+ return new Promise((resolve) => {
331
+ let settled = false;
332
+ void finished.then(() => {
333
+ settled = true;
334
+ resolve();
335
+ });
336
+ const started = Date.now();
337
+ const timer = setInterval(() => {
338
+ if (settled)
339
+ return clearInterval(timer);
340
+ const pty = this.pty;
341
+ if (!pty || this.pending)
342
+ return;
343
+ if (Date.now() - started > Math.min(2000, limit) && pty.quietFor() >= limit) {
344
+ clearInterval(timer);
345
+ resolve();
346
+ }
347
+ }, 250);
348
+ timer.unref?.();
349
+ });
350
+ }
351
+ }
352
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/remote/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjF,OAAO,EAAE,UAAU,EAA0B,MAAM,WAAW,CAAC;AAqC/D,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;AACxD,CAAC;AAOD,MAAM,yBAAyB,GAAG;IAChC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;IACzB,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,uCAAuC,EAAE;IAC3D,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,4CAA4C,EAAE;CACjE,CAAC;AAEF,MAAM,OAAO,aAAa;IACf,IAAI,CAAa;IACT,GAAG,CAAuB;IAC1B,KAAK,CAAc;IAC5B,GAAG,CAAc;IACjB,WAAW,CAAoC;IACtC,KAAK,GAAuB,EAAE,CAAC;IACxC,OAAO,CAAuF;IAC9F,QAAQ,GAAG,KAAK,CAAC;IACjB,OAAO,GAAG,KAAK,CAAC;IAChB,OAAO,GAAmB,EAAE,CAAC;IAC7B,YAAY,CAAc;IAC1B,OAAO,CAAiB;IAEhC,YAAY,GAAyB,EAAE,KAAkB;QACvD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC;YACzB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,YAAY,EAAE;gBACZ,SAAS,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC;gBACnC,WAAW,EAAE,IAAI;gBACjB,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;aAClC;YACD,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,QAAQ,EAAE;gBACR,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBACrC,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACjD,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;gBAC1D,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;aACtD;YACD,GAAG,GAAG,CAAC,WAAW;SACnB,CAAC,CAAC;QACH,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,SAAS,CAAC,GAAe;QACvB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,cAAc,CAAC,GAAqC;QAClD,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;IACzB,CAAC;IAED,0DAA0D;IAC1D,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,2HAA2H;IAC3H,KAAK,CAAC,KAAK;QACT,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;YAC7B,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YACtC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG;YACjB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;YACnB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACnG,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,uDAAuD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACzH,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;YAC7B,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YACtC,QAAQ,EAAE,IAAI,CAAC,OAAO;SACvB,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,MAAc,EAAE,SAAqD,EAAE;QACpF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC;IAEO,MAAM,CAAC,KAAuB;QACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1C,8DAA8D;YAC9D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAEO,WAAW,CAAC,MAAc;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO;QAClD,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;QAC3B,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;;YAC9C,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAA+B;QACxD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,wCAAwC,EAAE,CAAC,CAAC;YAC7H,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QACxF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvI,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,kDAAkD;IAClD,wEAAwE;IAEhE,MAAM,CAAC,KAAgB;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC9B,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC;gBACpB,KAAK,kBAAkB;oBACrB,mEAAmE;oBACnE,+DAA+D;oBAC/D,yBAAyB;oBACzB,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;oBAChD,OAAO;gBACT,KAAK,cAAc;oBACjB,IAAI,OAAO,CAAC,iBAAiB,KAAK,mBAAmB,EAAE,CAAC;wBACtD,IAAI,CAAC,aAAa,CAAC;4BACjB,IAAI,EAAE,YAAY;4BAClB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,IAAI,sCAAsC,CAAC;4BACxF,OAAO,EAAE,yBAAyB;4BAClC,OAAO,EAAE,GAAG;yBACb,CAAC,CAAC;oBACL,CAAC;oBACD,OAAO;gBACT,KAAK,YAAY;oBACf,IAAI,OAAO,CAAC,SAAS,KAAK,iBAAiB;wBAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBACtF,OAAO;gBACT,KAAK,MAAM;oBACT,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,OAAO;gBACT;oBACE,OAAO;YACX,CAAC;QACH,CAAC;QACD,IAAI,qCAAqC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAChF,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IACvB,CAAC;IAEO,eAAe,CAAC,SAAkB;QACxC,MAAM,KAAK,GAAG,CAAC,SAAS,IAAI,EAAE,CAAuG,CAAC;QACtI,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9G,IAAI,CAAC,aAAa,CAAC;YACjB,IAAI,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;YAChD,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACvD,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,MAAqD;QACzE,MAAM,OAAO,GAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC;QACpG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;IAED,2EAA2E;IACnE,YAAY,CAAC,MAAyB;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAClI,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC9E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,0EAA0E;QAC1E,sDAAsD;QACtD,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+FAA+F;IACvF,aAAa,CAAC,KAAuB;QAC3C,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,iDAAiD,EAAE,CAAC,CAAC;QACjI,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,KAAK,CAAC,MAAM,CAAC,QAAQ,iBAAiB,EAAE,CAAC,CAAC;QAClK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,wEAAwE;IACxE,QAAQ;IACR,wEAAwE;IAEhE,KAAK,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAsB,CAAC;gBACrD,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;IACxH,CAAC;IAED,sFAAsF;IAC9E,KAAK,CAAC,WAAW,CAAC,KAAuB;QAC/C,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7F,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,MAAM,qDAAqD,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACzH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;QAClG,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACpH,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;QACzF,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YAClD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,sCAAsC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,+BAA+B,GAAG,EAAE,CAAC;YAC3J,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,KAAuB;QAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,IAAI,QAA2D,CAAC;QAChE,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,IAAI,aAAa,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QAEjC,IAAI,MAAM,GAAe,GAAG,EAAE,CAAC,SAAS,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC7C,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAE5D,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,gCAAgC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC1I,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC;gBACjD,iEAAiE;gBACjE,yCAAyC;gBACzC,MAAM,KAAK,GAAG,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACzG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACnG,CAAC;iBAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAChG,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,aAAa,CAAC,QAAuB,EAAE,OAAgB;QAC7D,MAAM,KAAK,GAAG,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC;QAC1D,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;gBACtB,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC7B,IAAI,OAAO;oBAAE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;gBACrB,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACjC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC;oBAC5E,aAAa,CAAC,KAAK,CAAC,CAAC;oBACrB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { Command } from "commander";
2
+ import { type ForkOptions } from "./fork.js";
3
+ /**
4
+ * `heyditto fork <session>`: copy a coding session's conversation into a new
5
+ * session (optionally in a new worktree), locally or straight into Ditto Cloud.
6
+ */
7
+ export declare function cmdFork(ref: string, options: ForkOptions): Promise<void>;
8
+ export declare function registerForkCommand(program: Command, addExamples: (c: Command, ex: string) => Command): void;
@@ -0,0 +1,50 @@
1
+ import { cmdTeleport } from "../teleport/commands.js";
2
+ import { forkSession } from "./fork.js";
3
+ /**
4
+ * `heyditto fork <session>`: copy a coding session's conversation into a new
5
+ * session (optionally in a new worktree), locally or straight into Ditto Cloud.
6
+ */
7
+ export async function cmdFork(ref, options) {
8
+ const result = await forkSession(ref, options);
9
+ const { session } = result;
10
+ const asJson = options.output === "json";
11
+ if (options.cloud) {
12
+ const root = session.worktree ?? session.cwd;
13
+ process.stderr.write(`Forked ${result.from} → ${session.id}; teleporting ${root} to Ditto Cloud…\n`);
14
+ await cmdTeleport(root, {
15
+ cloud: true,
16
+ endpoint: options.endpoint,
17
+ prompt: options.prompt,
18
+ session: session.harnessSessionId,
19
+ harness: session.harness,
20
+ output: options.output,
21
+ });
22
+ return;
23
+ }
24
+ if (asJson) {
25
+ process.stdout.write(`${JSON.stringify({ from: result.from, session, transcript: result.transcript }, null, 2)}\n`);
26
+ return;
27
+ }
28
+ process.stdout.write(`Forked ${result.from} → ${session.id} (${session.harness}${session.worktree ? `, worktree ${session.worktree}` : ""}).\n`);
29
+ process.stdout.write(`Open it with: heyditto ${session.harness} --resume ${session.id}\n`);
30
+ }
31
+ export function registerForkCommand(program, addExamples) {
32
+ const fork = program
33
+ .command("fork <session>")
34
+ .description("start a new session from a copy of an existing conversation, locally or in Ditto Cloud")
35
+ .summary("fork a coding session")
36
+ .option("-w, --worktree [name]", "put the fork in <repo>/.worktrees/<name> (a fresh branch of the same name)")
37
+ .option("--cloud", "teleport the fork and resume it in a Ditto Code cloud job")
38
+ .option("-e, --endpoint <slug>", "inference endpoint for the cloud session (with --cloud)")
39
+ .option("--prompt <text>", "first instruction for the cloud session (with --cloud)")
40
+ .option("-o, --output <format>", "text (default) or json")
41
+ .option("--json", "print machine-readable output")
42
+ .action(async (ref, options) => {
43
+ await cmdFork(ref, { ...options, output: options.json ? "json" : options.output });
44
+ });
45
+ addExamples(fork, ` heyditto fork 3f1c… copy the conversation into a new local session
46
+ heyditto fork 3f1c… --worktree try-b same, on a fresh branch in .worktrees/try-b
47
+ heyditto fork 3f1c… --cloud continue the copy in Ditto Cloud
48
+ heyditto sessions find session ids`);
49
+ }
50
+ //# sourceMappingURL=fork-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork-command.js","sourceRoot":"","sources":["../../src/remote/fork-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAoB,WAAW,EAAE,MAAM,WAAW,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,OAAoB;IAC7D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;IACzC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,IAAI,MAAM,OAAO,CAAC,EAAE,iBAAiB,IAAI,oBAAoB,CAAC,CAAC;QACrG,MAAM,WAAW,CAAC,IAAI,EAAE;YACtB,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,gBAAgB;YACjC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACpH,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,IAAI,MAAM,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACjJ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,OAAO,CAAC,OAAO,aAAa,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,WAAgD;IACpG,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,wFAAwF,CAAC;SACrG,OAAO,CAAC,uBAAuB,CAAC;SAChC,MAAM,CAAC,uBAAuB,EAAE,4EAA4E,CAAC;SAC7G,MAAM,CAAC,SAAS,EAAE,2DAA2D,CAAC;SAC9E,MAAM,CAAC,uBAAuB,EAAE,yDAAyD,CAAC;SAC1F,MAAM,CAAC,iBAAiB,EAAE,wDAAwD,CAAC;SACnF,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;SACzD,MAAM,CAAC,QAAQ,EAAE,+BAA+B,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAAyC,EAAE,EAAE;QACvE,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IACL,WAAW,CACT,IAAI,EACJ;;;2DAGuD,CACxD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type SessionRecord } from "../agents/sessions.js";
2
+ /**
3
+ * `heyditto fork <session>`: a new session that starts from a copy of an
4
+ * existing conversation. Locally that is a copy of the harness transcript
5
+ * under a fresh id (optionally in a new git worktree); `--cloud` then
6
+ * teleports the fork and resumes it in Ditto Code.
7
+ */
8
+ export interface ForkOptions {
9
+ worktree?: string | boolean;
10
+ cloud?: boolean;
11
+ endpoint?: string;
12
+ prompt?: string;
13
+ output?: string;
14
+ }
15
+ export interface ForkResult {
16
+ from: string;
17
+ session: SessionRecord;
18
+ transcript?: string;
19
+ }
20
+ export declare function forkSession(ref: string, options: ForkOptions): Promise<ForkResult>;
21
+ /** Lists transcripts present for a project dir; used by tests and diagnostics. */
22
+ export declare function listClaudeTranscripts(cwd: string): Promise<string[]>;