@agent-beam/beam 0.2.22 → 0.2.24

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.
@@ -0,0 +1,459 @@
1
+ // `beam monitor`: 24x7 watch over a running application's logs and traffic. Lines are matched
2
+ // against monitor-rules.ts on this machine; only redacted, deduplicated findings are sent to the
3
+ // workspace, which stores them, meters them and delivers them to the workspace's webhooks.
4
+ //
5
+ // It never blocks or alters the application: it reads log files (or a pipe it echoes straight
6
+ // through) and does nothing else to the app. It is also inert until the workspace turns App
7
+ // monitoring on in the dashboard -- before that, and whenever it is turned off again or the
8
+ // monthly allowance runs out, lines are read and discarded.
9
+ import { createHash } from "node:crypto";
10
+ import { open } from "node:fs/promises";
11
+ import { resolve } from "node:path";
12
+ import { createInterface } from "node:readline";
13
+ import { StringDecoder } from "node:string_decoder";
14
+ import { readIdentity } from "./enroll.js";
15
+ import { readPolicy } from "./policy.js";
16
+ import { readInstalledPackages } from "./lockfiles.js";
17
+ import { checkPackages, fetchMonitorConfig, sendFindings, } from "./monitor-client.js";
18
+ import { clientIp, isAuthFailure, lineSource, matchLine, redactLine } from "./monitor-rules.js";
19
+ import { judgeWithOwnLlm, ownLlmConfig } from "./monitor-llm.js";
20
+ const RANK = { critical: 3, high: 2, medium: 1, low: 0 };
21
+ const MIN_RANK = { light: 3, standard: 2, strict: 1 };
22
+ /** light: critical only · standard: high and up · strict: medium and up (same thresholds as the server). */
23
+ export const meetsLevel = (severity, level) => RANK[severity] >= MIN_RANK[level];
24
+ // One finding absorbs repeats (its `count` goes up) for this long before a new one is raised.
25
+ export const DEDUPE_WINDOW_MS = { light: 60 * 60_000, standard: 15 * 60_000, strict: 5 * 60_000 };
26
+ // Failed sign-ins from one address within five minutes before it counts as brute forcing.
27
+ export const BRUTE_FORCE_THRESHOLD = { light: 50, standard: 20, strict: 10 };
28
+ const BRUTE_FORCE_WINDOW_MS = 5 * 60_000;
29
+ // A scan or a log loop can match thousands of distinct lines; past this many new findings in ten
30
+ // minutes the rest are folded into one summary finding so a flood can't spend the month's allowance.
31
+ export const MAX_NEW_FINDINGS_PER_10_MIN = 200;
32
+ const FLOOD_WINDOW_MS = 10 * 60_000;
33
+ const MAX_QUEUE = 1000;
34
+ const BATCH_SIZE = 100;
35
+ /** Groups lines that differ only in ids, numbers, addresses or timestamps. */
36
+ function normalizeForGrouping(line) {
37
+ return line.toLowerCase()
38
+ .replace(/\b(?:\d{1,3}\.){3}\d{1,3}\b/g, "<ip>")
39
+ .replace(/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/g, "<id>")
40
+ .replace(/\b[0-9a-f]{16,}\b/g, "<hex>")
41
+ .replace(/\d+/g, "0")
42
+ .replace(/\s+/g, " ")
43
+ .slice(0, 300);
44
+ }
45
+ export class MonitorPipeline {
46
+ opts;
47
+ seen = new Map();
48
+ queue = [];
49
+ queued = new Set();
50
+ authFailures = new Map();
51
+ floodBucket = -1;
52
+ floodCount = 0;
53
+ suppressed = null;
54
+ constructor(opts) {
55
+ this.opts = opts;
56
+ }
57
+ now() { return this.opts.now?.() ?? Date.now(); }
58
+ get pending() { return [...this.queue]; }
59
+ /** Matches one line and queues any findings at or above the level. Returns the rule ids raised. */
60
+ ingestLine(line, file) {
61
+ const level = this.opts.level();
62
+ if (!level || !line.trim())
63
+ return [];
64
+ const custom = this.opts.customDetectors?.() ?? [];
65
+ const source = lineSource(line);
66
+ const ip = source === "http" ? clientIp(line) : undefined;
67
+ const raised = [];
68
+ for (const rule of matchLine(line, source)) {
69
+ if (!meetsLevel(rule.severity, level))
70
+ continue;
71
+ // Traffic groups by client address (one scan = one finding); app logs group by line shape.
72
+ this.raise(level, ip ?? normalizeForGrouping(line), {
73
+ ruleId: rule.id, title: ip ? `${rule.title} from ${ip}` : rule.title, severity: rule.severity,
74
+ category: rule.category, source, file, evidence: redactLine(line, custom),
75
+ });
76
+ raised.push(rule.id);
77
+ }
78
+ if (isAuthFailure(line, source) && meetsLevel("high", level)) {
79
+ const key = clientIp(line) ?? "unknown address";
80
+ const now = this.now();
81
+ const recent = (this.authFailures.get(key) ?? []).filter(t => now - t < BRUTE_FORCE_WINDOW_MS);
82
+ recent.push(now);
83
+ this.authFailures.set(key, recent);
84
+ if (this.authFailures.size > 10_000)
85
+ this.authFailures.delete(this.authFailures.keys().next().value);
86
+ if (recent.length >= BRUTE_FORCE_THRESHOLD[level]) {
87
+ this.raise(level, key, {
88
+ ruleId: "app.auth_bruteforce", title: `Repeated failed sign-ins from ${key}`, severity: "high", category: "recon",
89
+ source, file, evidence: `${recent.length} failures in 5 minutes. Latest: ${redactLine(line, custom)}`.slice(0, 600),
90
+ });
91
+ raised.push("app.auth_bruteforce");
92
+ }
93
+ }
94
+ return raised;
95
+ }
96
+ /** Queues a finding produced elsewhere (dependency checks) under its own stable id, once. */
97
+ addFinding(finding) {
98
+ const level = this.opts.level();
99
+ if (!level || !meetsLevel(finding.severity, level) || this.queued.has(finding.id))
100
+ return false;
101
+ this.queued.add(finding.id);
102
+ this.enqueue(finding);
103
+ return true;
104
+ }
105
+ raise(level, groupKey, partial) {
106
+ const now = this.now();
107
+ const bucket = Math.floor(now / DEDUPE_WINDOW_MS[level]);
108
+ const fp = createHash("sha256").update(`${partial.ruleId}\0${groupKey}`).digest("hex").slice(0, 24);
109
+ const existing = this.seen.get(fp);
110
+ if (existing && existing.bucket === bucket) {
111
+ existing.finding.count++; // still queued: the batch carries the new count
112
+ return;
113
+ }
114
+ const flood = Math.floor(now / FLOOD_WINDOW_MS);
115
+ if (flood !== this.floodBucket) {
116
+ this.emitSuppressed();
117
+ this.floodBucket = flood;
118
+ this.floodCount = 0;
119
+ }
120
+ if (this.floodCount >= MAX_NEW_FINDINGS_PER_10_MIN) {
121
+ const worst = this.suppressed && RANK[this.suppressed.severity] >= RANK[partial.severity] ? this.suppressed.severity : partial.severity;
122
+ this.suppressed = { count: (this.suppressed?.count ?? 0) + 1, severity: worst };
123
+ return;
124
+ }
125
+ this.floodCount++;
126
+ const finding = { id: `${fp}-${bucket}`, ...partial, count: 1, firstSeen: new Date(now).toISOString() };
127
+ this.seen.set(fp, { bucket, finding, at: now });
128
+ this.enqueue(finding);
129
+ }
130
+ emitSuppressed() {
131
+ if (!this.suppressed)
132
+ return;
133
+ const { count, severity } = this.suppressed;
134
+ this.suppressed = null;
135
+ this.enqueue({
136
+ id: `flood-${this.floodBucket}`, ruleId: "beam.monitor.flood", title: "Too many findings to send individually", severity,
137
+ category: "integrity", source: "log", count,
138
+ evidence: `${count} more findings within 10 minutes were not sent one by one, to protect the monthly allowance. Check this server's logs.`,
139
+ firstSeen: new Date(this.floodBucket * FLOOD_WINDOW_MS).toISOString(),
140
+ });
141
+ }
142
+ enqueue(finding) {
143
+ if (this.queue.length >= MAX_QUEUE) {
144
+ // Full (usually: the workspace is unreachable). Make room by dropping the least severe, oldest.
145
+ let drop = 0;
146
+ for (let i = 1; i < this.queue.length; i++)
147
+ if (RANK[this.queue[i].severity] < RANK[this.queue[drop].severity])
148
+ drop = i;
149
+ this.queue.splice(drop, 1);
150
+ }
151
+ this.queue.push(finding);
152
+ }
153
+ /** Sends queued findings in batches; a "retry" outcome keeps the batch for the next flush. */
154
+ async flush(send) {
155
+ if (this.suppressed && Math.floor(this.now() / FLOOD_WINDOW_MS) !== this.floodBucket)
156
+ this.emitSuppressed();
157
+ while (this.queue.length) {
158
+ const batch = this.queue.splice(0, BATCH_SIZE);
159
+ if ((await send(batch)) === "retry") {
160
+ this.queue.unshift(...batch);
161
+ break;
162
+ }
163
+ }
164
+ const cutoff = this.now() - 2 * DEDUPE_WINDOW_MS.light;
165
+ for (const [fp, entry] of this.seen)
166
+ if (entry.at < cutoff)
167
+ this.seen.delete(fp);
168
+ }
169
+ }
170
+ /** Follows a log file like `tail -F`: survives rotation (new inode) and truncation (copytruncate). */
171
+ export class FileTailer {
172
+ path;
173
+ onLine;
174
+ fromStart;
175
+ offset = 0;
176
+ ino = -1;
177
+ tracking = false;
178
+ firstPoll = true;
179
+ partial = "";
180
+ decoder = new StringDecoder("utf8");
181
+ // The last bytes read. If they're no longer at the same position, the file was truncated and
182
+ // rewritten past our offset between polls (copytruncate under load), which size alone can't show.
183
+ signature = Buffer.alloc(0);
184
+ timer;
185
+ busy = false;
186
+ constructor(path, onLine, fromStart = false) {
187
+ this.path = path;
188
+ this.onLine = onLine;
189
+ this.fromStart = fromStart;
190
+ }
191
+ start(intervalMs = 1000) {
192
+ void this.poll();
193
+ this.timer = setInterval(() => void this.poll(), intervalMs);
194
+ }
195
+ stop() { if (this.timer)
196
+ clearInterval(this.timer); }
197
+ reset(offset, ino) {
198
+ this.offset = offset;
199
+ this.ino = ino;
200
+ this.partial = "";
201
+ this.decoder = new StringDecoder("utf8");
202
+ this.signature = Buffer.alloc(0);
203
+ }
204
+ async poll() {
205
+ if (this.busy)
206
+ return;
207
+ this.busy = true;
208
+ let handle;
209
+ try {
210
+ try {
211
+ handle = await open(this.path, "r");
212
+ }
213
+ catch {
214
+ this.firstPoll = false;
215
+ return;
216
+ } // not there (yet): keep waiting
217
+ const info = await handle.stat();
218
+ if (!this.tracking) {
219
+ // Existing file at start: begin at the end, like tail. A file that appears later is read whole.
220
+ this.reset(this.firstPoll && !this.fromStart ? info.size : 0, info.ino);
221
+ this.tracking = true;
222
+ const keep = Math.min(SIGNATURE_BYTES, this.offset);
223
+ if (keep)
224
+ this.signature = await readAt(handle, this.offset - keep, keep);
225
+ }
226
+ else if (info.ino !== this.ino || info.size < this.offset || !(await this.signatureHolds(handle))) {
227
+ this.reset(0, info.ino);
228
+ }
229
+ this.firstPoll = false;
230
+ while (info.size > this.offset) {
231
+ const chunk = await readAt(handle, this.offset, Math.min(info.size - this.offset, 4 * 1024 * 1024));
232
+ if (!chunk.length)
233
+ break;
234
+ this.offset += chunk.length;
235
+ this.signature = Buffer.concat([this.signature, chunk.subarray(-SIGNATURE_BYTES)]).subarray(-SIGNATURE_BYTES);
236
+ const lines = (this.partial + this.decoder.write(chunk)).split(/\r?\n/);
237
+ this.partial = lines.pop() ?? "";
238
+ if (this.partial.length > 65_536) {
239
+ lines.push(this.partial.slice(0, 65_536));
240
+ this.partial = "";
241
+ }
242
+ for (const line of lines)
243
+ this.onLine(line);
244
+ }
245
+ }
246
+ finally {
247
+ await handle?.close();
248
+ this.busy = false;
249
+ }
250
+ }
251
+ async signatureHolds(handle) {
252
+ if (!this.signature.length)
253
+ return true;
254
+ return (await readAt(handle, this.offset - this.signature.length, this.signature.length)).equals(this.signature);
255
+ }
256
+ }
257
+ const SIGNATURE_BYTES = 64;
258
+ async function readAt(handle, position, length) {
259
+ const buffer = Buffer.alloc(length);
260
+ const { bytesRead } = await handle.read(buffer, 0, length, position);
261
+ return buffer.subarray(0, bytesRead);
262
+ }
263
+ const SEVERITIES = ["critical", "high", "medium", "low"];
264
+ /** A dependency vulnerability as a monitor finding. CISA KEV (exploited in the wild) is raised to critical. */
265
+ export function vulnerabilityFinding(v) {
266
+ const severity = v.kev ? "critical" : SEVERITIES.includes(v.severity) ? v.severity : "medium";
267
+ const id = createHash("sha256").update(`${v.id}\0${v.ecosystem}\0${v.name}\0${v.version}`).digest("hex").slice(0, 24);
268
+ return {
269
+ id: `cve-${id}`, ruleId: v.id, title: `${v.id} in ${v.name} ${v.version}${v.kev ? " (actively exploited)" : ""}`, severity,
270
+ category: "cve", source: "cve", file: v.files[0], count: 1, firstSeen: new Date().toISOString(),
271
+ evidence: `${v.name} ${v.version} (${v.ecosystem}) is in the affected range ${v.vulnerable}; ${v.patched ? `fixed in ${v.patched}` : "no fixed version yet"}. ${v.title} ${v.url}`.slice(0, 600),
272
+ };
273
+ }
274
+ const sleep = (ms) => new Promise(r => setTimeout(r, ms));
275
+ export async function runMonitor(options, log = m => console.error(`[beam monitor] ${m}`)) {
276
+ const files = (options.files ?? []).map(f => resolve(f));
277
+ const appDir = options.app ? resolve(options.app) : undefined;
278
+ if (!files.length && !options.stdin && !appDir)
279
+ throw new Error("Tell beam monitor what to watch: --file <path> (repeatable) for log files, --stdin to read piped output, and/or --app <dir> for dependency checks.");
280
+ const identity = await readIdentity();
281
+ if (!identity)
282
+ throw new Error("Connect this server to your Beam workspace first: run 'beam connect'. App monitoring is then turned on for the workspace in the dashboard.");
283
+ const custom = (await readPolicy())?.rules.customDetectors ?? [];
284
+ const ownLlm = ownLlmConfig();
285
+ let config = null;
286
+ let lastRefresh = 0;
287
+ let pausedUntil = 0;
288
+ let offNotice = false;
289
+ let fatal = null;
290
+ const refresh = async () => {
291
+ lastRefresh = Date.now();
292
+ const result = await fetchMonitorConfig(identity);
293
+ if (result.ok) {
294
+ if (!config) {
295
+ log(`App monitoring is on (${result.config.level} level). Findings go to your workspace${result.config.webhooks ? ` and ${result.config.webhooks} webhook${result.config.webhooks === 1 ? "" : "s"}` : ""}.`);
296
+ log(ownLlm
297
+ ? `LLM checks: your own model, ${ownLlm.model} at ${new URL(ownLlm.baseUrl).host}.`
298
+ : `LLM checks: ${result.config.llm ? "Beam's model (set in the dashboard)" : "off"}.`);
299
+ }
300
+ else if (config.level !== result.config.level)
301
+ log(`Level changed to ${result.config.level}.`);
302
+ config = result.config;
303
+ offNotice = false;
304
+ return;
305
+ }
306
+ if (result.status === "disabled") {
307
+ if (!offNotice)
308
+ log(`${result.message}${options.wait === false ? "" : " Nothing is captured until then; checking again every minute."}`);
309
+ offNotice = true;
310
+ config = null;
311
+ return;
312
+ }
313
+ if (result.status === "revoked" || result.status === "unsupported")
314
+ throw new Error(result.message);
315
+ log(`${result.message} Retrying.`); // unreachable: keep the last known settings
316
+ };
317
+ await refresh();
318
+ while (!config) {
319
+ if (options.wait === false)
320
+ throw new Error("App monitoring is not on for this workspace.");
321
+ await sleep(60_000);
322
+ await refresh();
323
+ }
324
+ const pipeline = new MonitorPipeline({
325
+ level: () => (config && Date.now() >= pausedUntil ? config.level : null),
326
+ customDetectors: () => custom,
327
+ });
328
+ const send = async (batch) => {
329
+ if (ownLlm && config)
330
+ await judgeWithOwnLlm(batch, config.level, ownLlm);
331
+ const result = await sendFindings(identity, batch);
332
+ if (result.ok)
333
+ return "sent";
334
+ if (result.status === "disabled") {
335
+ log(`${result.message} Capture paused.`);
336
+ config = null;
337
+ offNotice = true;
338
+ return "drop";
339
+ }
340
+ if (result.status === "quota") {
341
+ pausedUntil = result.resetAt ? Date.parse(result.resetAt) : Date.now() + 60 * 60_000;
342
+ log(`${result.message} Capture paused until then.`);
343
+ return "drop";
344
+ }
345
+ if (result.status === "revoked" || result.status === "unsupported") {
346
+ fatal = new Error(result.message);
347
+ return "drop";
348
+ }
349
+ return "retry";
350
+ };
351
+ const checkDependencies = async () => {
352
+ if (!appDir || !config)
353
+ return;
354
+ const scan = await readInstalledPackages(appDir);
355
+ if (!scan.packages.length) {
356
+ log(`No pinned dependencies found under ${appDir}; skipping the dependency check.`);
357
+ return;
358
+ }
359
+ const result = await checkPackages(identity, scan.packages);
360
+ if (!result.ok) {
361
+ log(`Dependency check skipped: ${result.message}`);
362
+ return;
363
+ }
364
+ const { vulnerabilities, checked } = result.result;
365
+ log(`Dependency check: ${vulnerabilities.length} known vulnerabilit${vulnerabilities.length === 1 ? "y" : "ies"} in ${checked} packages under ${appDir}.`);
366
+ for (const v of vulnerabilities)
367
+ pipeline.addFinding(vulnerabilityFinding(v));
368
+ };
369
+ const tailers = files.map(path => new FileTailer(path, line => pipeline.ingestLine(line, path), options.fromStart));
370
+ for (const tailer of tailers)
371
+ tailer.start();
372
+ if (files.length)
373
+ log(`Watching ${files.join(", ")}.`);
374
+ let flushing = false;
375
+ const flush = async () => {
376
+ if (flushing)
377
+ return;
378
+ flushing = true;
379
+ try {
380
+ await pipeline.flush(send);
381
+ }
382
+ finally {
383
+ flushing = false;
384
+ }
385
+ };
386
+ const timers = [
387
+ setInterval(() => void flush(), 5_000),
388
+ setInterval(() => {
389
+ if (Date.now() - lastRefresh >= (config ? 5 * 60_000 : 60_000))
390
+ void refresh().catch(e => { fatal = e; });
391
+ }, 15_000),
392
+ setInterval(() => void checkDependencies(), 24 * 60 * 60_000),
393
+ ];
394
+ void checkDependencies();
395
+ let stdinDone = !options.stdin;
396
+ if (options.stdin) {
397
+ if (options.echo !== false)
398
+ process.stdout.on("error", () => { });
399
+ const lines = createInterface({ input: process.stdin, crlfDelay: Infinity });
400
+ lines.on("line", line => {
401
+ if (options.echo !== false)
402
+ process.stdout.write(`${line}\n`);
403
+ pipeline.ingestLine(line, "stdin");
404
+ });
405
+ lines.on("close", () => { stdinDone = true; });
406
+ }
407
+ let stopping = false;
408
+ const stop = () => { stopping = true; };
409
+ process.once("SIGINT", stop);
410
+ process.once("SIGTERM", stop);
411
+ // Runs until stopped or revoked; when reading only a pipe, also until the piped app exits.
412
+ const endsWithStdin = Boolean(options.stdin) && !files.length;
413
+ while (!stopping && !fatal && !(endsWithStdin && stdinDone))
414
+ await sleep(250);
415
+ for (const timer of timers)
416
+ clearInterval(timer);
417
+ for (const tailer of tailers)
418
+ tailer.stop();
419
+ process.removeListener("SIGINT", stop);
420
+ process.removeListener("SIGTERM", stop);
421
+ // Last flush, bounded so a dead network can't hold up shutdown.
422
+ let giveUp;
423
+ await Promise.race([flush(), new Promise(r => { giveUp = setTimeout(r, 5_000); })]);
424
+ clearTimeout(giveUp);
425
+ if (fatal)
426
+ throw fatal;
427
+ }
428
+ const fmt = (n) => (n >= 2_147_483_647 ? "unlimited" : n.toLocaleString("en-US"));
429
+ export async function monitorStatus(write = console.log) {
430
+ const identity = await readIdentity();
431
+ if (!identity) {
432
+ write("Not connected to a Beam workspace. Run 'beam connect' first.");
433
+ return 1;
434
+ }
435
+ const result = await fetchMonitorConfig(identity);
436
+ if (!result.ok) {
437
+ write(result.status === "disabled" ? `App monitoring: off\n${result.message}` : result.message);
438
+ return result.status === "disabled" ? 0 : 1;
439
+ }
440
+ const { level, llm, webhooks, usage, limits, resetAt, settingsUrl } = result.config;
441
+ let own = null;
442
+ let ownError = "";
443
+ try {
444
+ own = ownLlmConfig();
445
+ }
446
+ catch (error) {
447
+ ownError = error.message;
448
+ }
449
+ write([
450
+ "App monitoring: on",
451
+ `Level: ${level}`,
452
+ `LLM checks: ${own ? `your own model, ${own.model} at ${new URL(own.baseUrl).host}` : ownError ? `misconfigured: ${ownError}` : llm ? "Beam's model" : "off"}`,
453
+ `Webhooks: ${webhooks}`,
454
+ `This month: ${fmt(usage.findings)} / ${fmt(limits.findings)} findings · ${fmt(usage.cveChecks)} / ${fmt(limits.cveChecks)} dependency checks · ${fmt(usage.llmChecks)} / ${fmt(limits.llmChecks)} LLM checks (resets ${resetAt.slice(0, 10)})`,
455
+ `Settings: ${settingsUrl}`,
456
+ ].join("\n"));
457
+ return 0;
458
+ }
459
+ //# sourceMappingURL=monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../src/monitor.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,iGAAiG;AACjG,2FAA2F;AAC3F,EAAE;AACF,8FAA8F;AAC9F,4FAA4F;AAC5F,4FAA4F;AAC5F,4DAA4D;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAmB,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,aAAa,EAAE,kBAAkB,EAAE,YAAY,GAEhD,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGjE,MAAM,IAAI,GAAoC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC1F,MAAM,QAAQ,GAAiC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACpF,4GAA4G;AAC5G,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAyB,EAAE,KAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEhH,8FAA8F;AAC9F,MAAM,CAAC,MAAM,gBAAgB,GAAiC,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;AAChI,0FAA0F;AAC1F,MAAM,CAAC,MAAM,qBAAqB,GAAiC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC3G,MAAM,qBAAqB,GAAG,CAAC,GAAG,MAAM,CAAC;AACzC,iGAAiG;AACjG,qGAAqG;AACrG,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAC/C,MAAM,eAAe,GAAG,EAAE,GAAG,MAAM,CAAC;AACpC,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,UAAU,GAAG,GAAG,CAAC;AAIvB,8EAA8E;AAC9E,SAAS,oBAAoB,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,WAAW,EAAE;SACtB,OAAO,CAAC,8BAA8B,EAAE,MAAM,CAAC;SAC/C,OAAO,CAAC,mEAAmE,EAAE,MAAM,CAAC;SACpF,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACnB,CAAC;AASD,MAAM,OAAO,eAAe;IASG;IARrB,IAAI,GAAG,IAAI,GAAG,EAAmE,CAAC;IAClF,KAAK,GAAqB,EAAE,CAAC;IAC7B,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3B,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,WAAW,GAAG,CAAC,CAAC,CAAC;IACjB,UAAU,GAAG,CAAC,CAAC;IACf,UAAU,GAAwD,IAAI,CAAC;IAE/E,YAA6B,IAAqB;QAArB,SAAI,GAAJ,IAAI,CAAiB;IAAG,CAAC;IAE9C,GAAG,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAEjE,IAAI,OAAO,KAAuB,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3D,mGAAmG;IACnG,UAAU,CAAC,IAAY,EAAE,IAAa;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAAE,SAAS;YAChD,2FAA2F;YAC3F,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE;gBAClD,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBAC7F,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;aAC1E,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC;YAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,qBAAqB,CAAC,CAAC;YAC/F,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,MAAM;gBAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAC;YACtG,IAAI,MAAM,CAAC,MAAM,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE;oBACrB,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,iCAAiC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO;oBACjH,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,mCAAmC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;iBACpH,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6FAA6F;IAC7F,UAAU,CAAC,OAAuB;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAChG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,KAAmB,EAAE,QAAgB,EAAE,OAA2D;QAC9G,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3C,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,gDAAgD;YAC1E,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,eAAe,CAAC,CAAC;QAChD,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,IAAI,2BAA2B,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACxI,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAChF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,OAAO,GAAmB,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACxH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC;YACX,EAAE,EAAE,SAAS,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,wCAAwC,EAAE,QAAQ;YACxH,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;YAC3C,QAAQ,EAAE,GAAG,KAAK,wHAAwH;YAC1I,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,WAAW,EAAE;SACtE,CAAC,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,OAAuB;QACrC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YACnC,gGAAgG;YAChG,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,QAAQ,CAAC;oBAAE,IAAI,GAAG,CAAC,CAAC;YAC3H,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,8FAA8F;IAC9F,KAAK,CAAC,KAAK,CAAC,IAAuD;QACjE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC,KAAK,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5G,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;gBACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;gBAC7B,MAAM;YACR,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC;QACvD,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,KAAK,CAAC,EAAE,GAAG,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;CACF;AAED,sGAAsG;AACtG,MAAM,OAAO,UAAU;IAaQ;IAA+B;IAAiD;IAZrG,MAAM,GAAG,CAAC,CAAC;IACX,GAAG,GAAG,CAAC,CAAC,CAAC;IACT,QAAQ,GAAG,KAAK,CAAC;IACjB,SAAS,GAAG,IAAI,CAAC;IACjB,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,6FAA6F;IAC7F,kGAAkG;IAC1F,SAAS,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,KAAK,CAA6B;IAClC,IAAI,GAAG,KAAK,CAAC;IAErB,YAA6B,IAAY,EAAmB,MAA8B,EAAmB,YAAY,KAAK;QAAjG,SAAI,GAAJ,IAAI,CAAQ;QAAmB,WAAM,GAAN,MAAM,CAAwB;QAAmB,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAElI,KAAK,CAAC,UAAU,GAAG,IAAI;QACrB,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,KAAW,IAAI,IAAI,CAAC,KAAK;QAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnD,KAAK,CAAC,MAAc,EAAE,GAAW;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,MAA8B,CAAC;QACnC,IAAI,CAAC;YACH,IAAI,CAAC;gBAAC,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBAAC,OAAO;YAAC,CAAC,CAAC,gCAAgC;YACvH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,gGAAgG;gBAChG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpD,IAAI,IAAI;oBAAE,IAAI,CAAC,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5E,CAAC;iBAAM,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACpG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;gBACpG,IAAI,CAAC,KAAK,CAAC,MAAM;oBAAE,MAAM;gBACzB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC5B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC;gBAC9G,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACxE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;oBAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAAC,CAAC;gBACnG,KAAK,MAAM,IAAI,IAAI,KAAK;oBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,MAAkB;QAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACxC,OAAO,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnH,CAAC;CACF;AAED,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,KAAK,UAAU,MAAM,CAAC,MAAkB,EAAE,QAAgB,EAAE,MAAc;IACxE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,GAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC5E,+GAA+G;AAC/G,MAAM,UAAU,oBAAoB,CAAC,CAAgB;IACnD,MAAM,QAAQ,GAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,QAA2B,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,QAA4B,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvJ,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtH,OAAO;QACL,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ;QAC1H,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC/F,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,8BAA8B,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,sBAAsB,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;KACjM,CAAC;AACJ,CAAC;AAcD,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAuB,EAAE,MAAiC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAClI,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM;QAC5C,MAAM,IAAI,KAAK,CAAC,oJAAoJ,CAAC,CAAC;IACxK,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,4IAA4I,CAAC,CAAC;IAC7K,MAAM,MAAM,GAAG,CAAC,MAAM,UAAU,EAAE,CAAC,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B,IAAI,MAAM,GAAyB,IAAI,CAAC;IACxC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,KAAK,GAAiB,IAAI,CAAC;IAE/B,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACxC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,GAAG,CAAC,yBAAyB,MAAM,CAAC,MAAM,CAAC,KAAK,yCAAyC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,QAAQ,WAAW,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC9M,GAAG,CAAC,MAAM;oBACR,CAAC,CAAC,+BAA+B,MAAM,CAAC,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG;oBACnF,CAAC,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAC3F,CAAC;iBACI,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK;gBAAE,GAAG,CAAC,oBAAoB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;YAC/F,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,SAAS,GAAG,KAAK,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS;gBAAE,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,+DAA+D,EAAE,CAAC,CAAC;YACzI,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,GAAG,IAAI,CAAC;YACd,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpG,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,4CAA4C;IAClF,CAAC,CAAC;IAEF,MAAM,OAAO,EAAE,CAAC;IAChB,OAAO,CAAC,MAAM,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC5F,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC;QACnC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM;KAC9B,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,KAAK,EAAE,KAAuB,EAAwB,EAAE;QACnE,IAAI,MAAM,IAAI,MAAM;YAAE,MAAM,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC;QAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;YACzC,MAAM,GAAG,IAAI,CAAC;YACd,SAAS,GAAG,IAAI,CAAC;YACjB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;YACrF,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACnE,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,IAAI,EAAE;QACnC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;YAAE,OAAO;QAC/B,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAAC,GAAG,CAAC,sCAAsC,MAAM,kCAAkC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3H,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC/E,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;QACnD,GAAG,CAAC,qBAAqB,eAAe,CAAC,MAAM,sBAAsB,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,OAAO,mBAAmB,MAAM,GAAG,CAAC,CAAC;QAC3J,KAAK,MAAM,CAAC,IAAI,eAAe;YAAE,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACpH,KAAK,MAAM,MAAM,IAAI,OAAO;QAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM;QAAE,GAAG,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEvD,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC;YAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,QAAQ,GAAG,KAAK,CAAC;QAAC,CAAC;IACnE,CAAC,CAAC;IACF,MAAM,MAAM,GAAG;QACb,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE,EAAE,KAAK,CAAC;QACtC,WAAW,CAAC,GAAG,EAAE;YACf,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;gBAAE,KAAK,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GAAG,CAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACrH,CAAC,EAAE,MAAM,CAAC;QACV,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,iBAAiB,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;KAC9D,CAAC;IACF,KAAK,iBAAiB,EAAE,CAAC;IAEzB,IAAI,SAAS,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;IAC/B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAA4C,CAAC,CAAC,CAAC;QAC3G,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7E,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;YACtB,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YAC9D,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9B,2FAA2F;IAC3F,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9D,OAAO,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,aAAa,IAAI,SAAS,CAAC;QAAE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9E,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,KAAK,MAAM,MAAM,IAAI,OAAO;QAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5C,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACvC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,gEAAgE;IAChE,IAAI,MAAkC,CAAC;IACvC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,YAAY,CAAC,MAAM,CAAC,CAAC;IACrB,IAAI,KAAK;QAAE,MAAM,KAAK,CAAC;AACzB,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AAE1F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgC,OAAO,CAAC,GAAG;IAC7E,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACnG,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,wBAAwB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChG,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IACpF,IAAI,GAAG,GAAoC,IAAI,CAAC;IAChD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QAAC,GAAG,GAAG,YAAY,EAAE,CAAC;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,QAAQ,GAAI,KAAe,CAAC,OAAO,CAAC;IAAC,CAAC;IACpF,KAAK,CAAC;QACJ,oBAAoB;QACpB,mBAAmB,KAAK,EAAE;QAC1B,mBAAmB,GAAG,CAAC,CAAC,CAAC,mBAAmB,GAAG,CAAC,KAAK,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE;QAClK,mBAAmB,QAAQ,EAAE;QAC7B,mBAAmB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,wBAAwB,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,uBAAuB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;QACnP,mBAAmB,WAAW,EAAE;KACjC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACd,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,25 @@
1
+ export type SessionContext = {
2
+ title: string;
3
+ titleSource: "prompt" | "agent";
4
+ turn: number;
5
+ topic: string;
6
+ shift: boolean;
7
+ };
8
+ export declare function sessionTitlesEnabled(): boolean;
9
+ /** First line of the prompt, secrets redacted, whitespace collapsed, capped at TITLE_MAX. */
10
+ export declare function titleFromPrompt(prompt: string): string;
11
+ /**
12
+ * Called for a prompt.submit event, before the prompt is stripped. The first prompt fixes the
13
+ * session title (never changed by later prompts); every prompt starts a new turn and, when it is
14
+ * substantive, becomes the "now working on" topic and is checked for a topic/directory shift.
15
+ */
16
+ export declare function notePrompt(sessionId: string, prompt: string, cwd?: string): Promise<void>;
17
+ /**
18
+ * The locked title plus the current turn for a session, or null if none is known yet. A prompt-derived title gets a few
19
+ * chances (AGENT_TITLE_ATTEMPTS) to be replaced by the agent's own title; after that, or once an
20
+ * agent title is in, the answer comes straight from the small local state file.
21
+ */
22
+ export declare function sessionContextFor(agent: string, sessionId: string, options?: {
23
+ home?: string;
24
+ transcriptPath?: string;
25
+ }): Promise<SessionContext | null>;