bajaclaw 0.19.14 → 0.20.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.
- package/README.md +1 -1
- package/dist/agent.d.ts +3 -2
- package/dist/agent.js +92 -83
- package/dist/agent.js.map +1 -1
- package/dist/channels/gateway.d.ts +9 -0
- package/dist/channels/gateway.js +125 -0
- package/dist/channels/gateway.js.map +1 -1
- package/dist/commands/chat-ui.js +11 -0
- package/dist/commands/chat-ui.js.map +1 -1
- package/dist/commands/dashboard.js +6 -1
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/setup.js +28 -0
- package/dist/commands/setup.js.map +1 -1
- package/dist/config.js +4 -0
- package/dist/config.js.map +1 -1
- package/dist/dashboard.html +14 -0
- package/dist/progress-narrator.d.ts +48 -0
- package/dist/progress-narrator.js +307 -0
- package/dist/progress-narrator.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
██╔══██╗██╔══██║██ ██║██╔══██║ ██║ ██║ ██╔══██║██║███╗██║
|
|
8
8
|
██████╔╝██║ ██║╚█████╔╝██║ ██║ ╚██████╗███████╗██║ ██║╚███╔███╔╝
|
|
9
9
|
╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝
|
|
10
|
-
autonomous agents on your terms · MIT · v0.
|
|
10
|
+
autonomous agents on your terms · MIT · v0.20.0
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
## What BajaClaw is
|
package/dist/agent.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type NarrationUpdate } from "./progress-narrator.js";
|
|
1
2
|
import type { AgentConfig, ChatTurn } from "./types.js";
|
|
2
3
|
export interface CycleInput {
|
|
3
4
|
profile: string;
|
|
@@ -7,6 +8,7 @@ export interface CycleInput {
|
|
|
7
8
|
sessionHistory?: ChatTurn[];
|
|
8
9
|
attachments?: string[];
|
|
9
10
|
onPartialText?: (delta: string, accumulated: string) => void;
|
|
11
|
+
onNarration?: (u: NarrationUpdate) => void;
|
|
10
12
|
}
|
|
11
13
|
export interface CycleOutput {
|
|
12
14
|
cycleId: number;
|
|
@@ -24,6 +26,7 @@ export interface CycleOutput {
|
|
|
24
26
|
command?: string[];
|
|
25
27
|
error?: string;
|
|
26
28
|
source?: string;
|
|
29
|
+
narrationSummary?: string;
|
|
27
30
|
}
|
|
28
31
|
export declare function runCycle(input: CycleInput): Promise<CycleOutput>;
|
|
29
32
|
interface AssembleInput {
|
|
@@ -35,8 +38,6 @@ interface AssembleInput {
|
|
|
35
38
|
heartbeat: string;
|
|
36
39
|
skills: string;
|
|
37
40
|
recentChat?: string;
|
|
38
|
-
progressInstructions?: string;
|
|
39
41
|
}
|
|
40
|
-
export declare function buildProgressInstructions(): string;
|
|
41
42
|
export declare function assemblePrompt(input: AssembleInput): string;
|
|
42
43
|
export type { AgentConfig };
|
package/dist/agent.js
CHANGED
|
@@ -28,10 +28,11 @@ import { shouldCompact, compact as compactMemory } from "./memory/compact.js";
|
|
|
28
28
|
import { loadAllSkills } from "./skills/loader.js";
|
|
29
29
|
import { matchSkills } from "./skills/matcher.js";
|
|
30
30
|
import { synthesize as synthesizeSkill } from "./skills/auto-skiller.js";
|
|
31
|
-
import { broadcastToProfile } from "./channels/gateway.js";
|
|
31
|
+
import { broadcastToProfile, openProgressMessage, editProgressMessage, deleteProgressMessage, } from "./channels/gateway.js";
|
|
32
32
|
import { buildMcpConfig } from "./mcp/consumer.js";
|
|
33
33
|
import { pickModel, budgetFor } from "./model-picker.js";
|
|
34
34
|
import { serialize } from "./concurrency.js";
|
|
35
|
+
import { ProgressNarrator } from "./progress-narrator.js";
|
|
35
36
|
export async function runCycle(input) {
|
|
36
37
|
// Serialize cycles per-profile within this process. Prevents the HTTP
|
|
37
38
|
// API from spawning parallel `claude` subprocesses under load.
|
|
@@ -103,31 +104,22 @@ async function runCycleInner(input) {
|
|
|
103
104
|
// that takes precedence.
|
|
104
105
|
const sessionHistory = input.sessionHistory
|
|
105
106
|
?? (popped?.source ? loadSourceHistory(db, popped.source, popped.id, 8) : undefined);
|
|
106
|
-
//
|
|
107
|
-
// from a channel (telegram, discord), the agent gets a prompt
|
|
108
|
-
// block telling it to call `bajaclaw say "..."` for intake + mid-
|
|
109
|
-
// flight progress. Skipped for haiku (short+trivial tasks stay
|
|
110
|
-
// snappy) and heartbeat cycles. Also skipped on dry runs.
|
|
107
|
+
// Source routing.
|
|
111
108
|
const source = popped?.source;
|
|
112
|
-
const
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
//
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
// Instead, the progress-instructions block below tells the main
|
|
124
|
-
// agent (which HAS full session history) to emit its own plan
|
|
125
|
-
// ack via `bajaclaw say` as its first action on multi-part
|
|
126
|
-
// tasks. One cycle, one voice, one source of truth.
|
|
109
|
+
const editableSource = Boolean(source) && (source.startsWith("telegram:") || source.startsWith("discord:"));
|
|
110
|
+
const iMessageSource = Boolean(source) && source.startsWith("imessage:");
|
|
111
|
+
// Mid-cycle narration. Driven by cfg.verbosity ("off" | "medium" | "full"),
|
|
112
|
+
// runs entirely in BajaClaw (no extra prompt tokens, no agent output
|
|
113
|
+
// tokens). See progress-narrator.ts.
|
|
114
|
+
// - Telegram / Discord: open a single progress message, edit in place.
|
|
115
|
+
// - iMessage: no edit API - collect a summary and prepend to final reply.
|
|
116
|
+
// - In-process callers (chat REPL, dashboard): route to input.onNarration.
|
|
117
|
+
// - Dry runs and heartbeat cycles: no narration.
|
|
118
|
+
const verbosity = cfg.verbosity ?? "medium";
|
|
119
|
+
const narrateEnabled = verbosity !== "off" && !isHeartbeat && !input.dryRun;
|
|
127
120
|
const prompt = assemblePrompt({
|
|
128
121
|
task,
|
|
129
122
|
attachments,
|
|
130
|
-
progressInstructions: liveFeedback ? buildProgressInstructions() : "",
|
|
131
123
|
memories: memories
|
|
132
124
|
.map((m) => `- [${m.kind}] ${m.content.slice(0, budget.memoryCharsEach)}`)
|
|
133
125
|
.join("\n"),
|
|
@@ -155,16 +147,15 @@ async function runCycleInner(input) {
|
|
|
155
147
|
// claude's --effort level is the real knob for "how much runway
|
|
156
148
|
// does the agent get". No --max-turns flag exists in claude CLI;
|
|
157
149
|
// `effort: "max"` gives the biggest internal turn budget.
|
|
158
|
-
// Env vars injected into the spawned claude subprocess
|
|
159
|
-
//
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
// daemon, which forwards to the channel.
|
|
150
|
+
// Env vars injected into the spawned claude subprocess. BAJACLAW_SOURCE
|
|
151
|
+
// is still set for channel cycles so manual callers of `bajaclaw say`
|
|
152
|
+
// inside skills have somewhere to route; the main progress path is
|
|
153
|
+
// now orchestrator-driven (progress-narrator.ts) and doesn't need it.
|
|
163
154
|
const spawnEnv = {
|
|
164
155
|
BAJACLAW_PROFILE: input.profile,
|
|
165
156
|
BAJACLAW_DASHBOARD_PORT: String(cfg.dashboardPort ?? 7337),
|
|
166
157
|
};
|
|
167
|
-
if (
|
|
158
|
+
if (source && (editableSource || iMessageSource))
|
|
168
159
|
spawnEnv.BAJACLAW_SOURCE = source;
|
|
169
160
|
const opts = {
|
|
170
161
|
model: picked.model,
|
|
@@ -195,13 +186,61 @@ async function runCycleInner(input) {
|
|
|
195
186
|
else
|
|
196
187
|
log.warn("snapshot.pre.fail", { cycleId, error: r.error });
|
|
197
188
|
}
|
|
198
|
-
//
|
|
199
|
-
//
|
|
200
|
-
//
|
|
201
|
-
|
|
202
|
-
|
|
189
|
+
// Mid-cycle narrator. Built after the prompt is assembled so the
|
|
190
|
+
// initial skill list can be seeded. Passes events from runStream
|
|
191
|
+
// to the narrator; live updates route to the right sink.
|
|
192
|
+
let progressHandle = null;
|
|
193
|
+
let narrator = null;
|
|
194
|
+
if (narrateEnabled) {
|
|
195
|
+
// Pick the live sink based on the cycle's source.
|
|
196
|
+
let liveSink;
|
|
197
|
+
if (editableSource && source) {
|
|
198
|
+
// Open a single progress message on Telegram / Discord; we
|
|
199
|
+
// edit it in place as the narrator reports tool use. Null
|
|
200
|
+
// handle (adapter refused / not loaded) means the open failed
|
|
201
|
+
// and we degrade silently to no live narration.
|
|
202
|
+
progressHandle = await openProgressMessage(input.profile, source, verbosity === "full" ? "🔄 starting" : "🔄 starting");
|
|
203
|
+
if (progressHandle) {
|
|
204
|
+
const srcRef = source;
|
|
205
|
+
const handleRef = progressHandle;
|
|
206
|
+
liveSink = (u) => {
|
|
207
|
+
void editProgressMessage(input.profile, srcRef, handleRef, formatLiveBody(u));
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
else if (input.onNarration) {
|
|
212
|
+
// In-process caller (chat REPL, dashboard chat). Route to
|
|
213
|
+
// their callback verbatim - they pick the rendering.
|
|
214
|
+
liveSink = input.onNarration;
|
|
215
|
+
}
|
|
216
|
+
// iMessage and no-source cycles: no live sink. The summary is
|
|
217
|
+
// prepended to the final reply below.
|
|
218
|
+
narrator = new ProgressNarrator({ verbosity, onUpdate: liveSink });
|
|
219
|
+
for (const s of matched)
|
|
220
|
+
narrator.addSkill(s.name);
|
|
221
|
+
}
|
|
222
|
+
// Stream when the caller asked for partial-text callbacks OR when
|
|
223
|
+
// narration is enabled (narrator needs tool_use events). Falls
|
|
224
|
+
// back to the blocking JSON path for dry runs, heartbeats, and
|
|
225
|
+
// other non-interactive cycles to keep them lean.
|
|
226
|
+
const useStream = Boolean(input.onPartialText) || narrator !== null;
|
|
227
|
+
const result = useStream
|
|
228
|
+
? await runStream(prompt, opts, {
|
|
229
|
+
onPartialText: input.onPartialText,
|
|
230
|
+
onEvent: narrator ? (ev) => narrator.handleEvent(ev) : undefined,
|
|
231
|
+
})
|
|
203
232
|
: await runOnce(prompt, opts);
|
|
204
233
|
const finished = new Date().toISOString();
|
|
234
|
+
// Finalize the narrator: flush any debounced update and clean up
|
|
235
|
+
// the progress message so the final reply stands alone.
|
|
236
|
+
if (narrator)
|
|
237
|
+
narrator.finalize();
|
|
238
|
+
if (progressHandle && source) {
|
|
239
|
+
// Best-effort delete so the final reply doesn't trail a stale
|
|
240
|
+
// progress line. If the delete fails (rate limit, already gone),
|
|
241
|
+
// the user just sees both messages - not broken, just noisier.
|
|
242
|
+
await deleteProgressMessage(input.profile, source, progressHandle);
|
|
243
|
+
}
|
|
205
244
|
// Optional post-snapshot. Captures the diff for later inspection
|
|
206
245
|
// even when the user never rewinds.
|
|
207
246
|
let postSha = null;
|
|
@@ -217,6 +256,7 @@ async function runCycleInner(input) {
|
|
|
217
256
|
db.prepare("UPDATE cycles SET pre_sha=?, post_sha=?, snapshot_root=? WHERE id=?")
|
|
218
257
|
.run(preSha, postSha, snapshotRoot, cycleId);
|
|
219
258
|
}
|
|
259
|
+
const narrationSummary = narrator?.summary() ?? "";
|
|
220
260
|
if (!result.ok) {
|
|
221
261
|
recordFailure(db);
|
|
222
262
|
db.prepare("UPDATE cycles SET finished_at=?, status=?, error=?, response_preview=? WHERE id=?").run(finished, "error", result.error ?? "unknown", result.text.slice(0, 500), cycleId);
|
|
@@ -235,6 +275,7 @@ async function runCycleInner(input) {
|
|
|
235
275
|
command: result.command,
|
|
236
276
|
error: result.error,
|
|
237
277
|
source: popped?.source,
|
|
278
|
+
narrationSummary: narrationSummary || undefined,
|
|
238
279
|
};
|
|
239
280
|
}
|
|
240
281
|
recordSuccess(db);
|
|
@@ -276,10 +317,17 @@ async function runCycleInner(input) {
|
|
|
276
317
|
}
|
|
277
318
|
}
|
|
278
319
|
log.info("cycle.ok", { cycleId, costUsd: result.costUsd, turns: result.turns });
|
|
320
|
+
// iMessage cannot edit sent messages, so we prepend a short
|
|
321
|
+
// narration summary to the final reply instead. On other sources
|
|
322
|
+
// the live progress message already showed this; repeating it
|
|
323
|
+
// would be spammy.
|
|
324
|
+
const outText = (iMessageSource && narrationSummary)
|
|
325
|
+
? `${narrationSummary}\n\n${result.text}`
|
|
326
|
+
: result.text;
|
|
279
327
|
return {
|
|
280
328
|
cycleId,
|
|
281
329
|
ok: true,
|
|
282
|
-
text:
|
|
330
|
+
text: outText,
|
|
283
331
|
costUsd: result.costUsd,
|
|
284
332
|
inputTokens: result.inputTokens,
|
|
285
333
|
outputTokens: result.outputTokens,
|
|
@@ -291,12 +339,22 @@ async function runCycleInner(input) {
|
|
|
291
339
|
prompt,
|
|
292
340
|
command: result.command,
|
|
293
341
|
source: popped?.source,
|
|
342
|
+
narrationSummary: narrationSummary || undefined,
|
|
294
343
|
};
|
|
295
344
|
}
|
|
296
345
|
finally {
|
|
297
346
|
db.close();
|
|
298
347
|
}
|
|
299
348
|
}
|
|
349
|
+
/** Format a narrator update for an edit-in-place progress message.
|
|
350
|
+
* Prefixes a subtle header so the user understands what the live
|
|
351
|
+
* message is, keeps the full body below. Short bodies render clean
|
|
352
|
+
* in both Telegram and Discord. */
|
|
353
|
+
function formatLiveBody(u) {
|
|
354
|
+
if (!u.body)
|
|
355
|
+
return "🔄 working";
|
|
356
|
+
return `🔄 working\n\n${u.body}`;
|
|
357
|
+
}
|
|
300
358
|
function formatRecentChat(history) {
|
|
301
359
|
if (!history || history.length === 0)
|
|
302
360
|
return "";
|
|
@@ -366,53 +424,6 @@ function loadSystemDocs(profile) {
|
|
|
366
424
|
heartbeat: read("HEARTBEAT.md"),
|
|
367
425
|
};
|
|
368
426
|
}
|
|
369
|
-
export function buildProgressInstructions() {
|
|
370
|
-
return `# Side-channel chat tool (do not let this distract from the actual task)
|
|
371
|
-
|
|
372
|
-
CRITICAL: Your job is to fully complete the task in "# Current Task" below. If it has multiple parts (a AND b AND c), finish all of them before your final reply. Do not stop halfway and summarize, do not defer parts to a follow-up, do not treat the chat as a substitute for doing the work.
|
|
373
|
-
|
|
374
|
-
You have one extra tool: \`bajaclaw say "<short text>"\` via your Bash tool. It sends a line to the user's chat mid-flight without blocking or ending the typing indicator.
|
|
375
|
-
|
|
376
|
-
## When to send the first ping (plan ack)
|
|
377
|
-
|
|
378
|
-
ONLY if the task is genuinely multi-part or will take noticeable time to complete. Examples:
|
|
379
|
-
- "add X, then test Y, then ship Z"
|
|
380
|
-
- "investigate this bug, find the root cause, and fix it"
|
|
381
|
-
- "scaffold a new agent named Shirty, run the dev server, tell me when ready"
|
|
382
|
-
|
|
383
|
-
For multi-part tasks: before your first real tool call, send ONE short ping acknowledging the plan in your own voice. Natural, under 20 words. Look at Recent Chat to understand what the user means (e.g. if they say "that" or "the model", figure out what they're referring to from context).
|
|
384
|
-
|
|
385
|
-
For single-question tasks, do NOT ack. The typing indicator is enough; go straight to your final reply. Examples that need NO ack:
|
|
386
|
-
- "what model are you using?"
|
|
387
|
-
- "is the server up?"
|
|
388
|
-
- "summarize what you just did"
|
|
389
|
-
|
|
390
|
-
## When to send mid-flight pings
|
|
391
|
-
|
|
392
|
-
Only for genuine milestones on long tasks:
|
|
393
|
-
- You hit something unexpected the user should know ("heads up, migration is dirty, fixing first")
|
|
394
|
-
- A long step is about to start and silence would look like a hang ("running the full test suite")
|
|
395
|
-
- You crossed a real phase boundary ("scaffolding done, wiring up the handler")
|
|
396
|
-
|
|
397
|
-
## When to stay quiet
|
|
398
|
-
|
|
399
|
-
- Announcing what you're about to do ("on it!", "starting now", "let me take a look"). Just do it.
|
|
400
|
-
- Every tool call, file edit, or search.
|
|
401
|
-
- Thinking out loud.
|
|
402
|
-
- Short or simple tasks.
|
|
403
|
-
- Filling silence when you don't have something real to say.
|
|
404
|
-
|
|
405
|
-
Hard cap: at most 3 \`bajaclaw say\` calls per cycle (including the plan ack if you send one). Zero is fine. If you're tempted to ping a fourth time, you're chatting instead of working - stop and finish the task.
|
|
406
|
-
|
|
407
|
-
## Style for pings
|
|
408
|
-
|
|
409
|
-
- Under 20 words, one line of prose
|
|
410
|
-
- Same voice as your final reply
|
|
411
|
-
- No "Update:", "Status:", "Plan:" prefixes - just say the thing
|
|
412
|
-
- No em dashes, no emojis
|
|
413
|
-
|
|
414
|
-
Your final reply at cycle end is the deliverable. It must cover every part the user asked about: findings, results, file paths, errors, whatever they need. Pings are bonuses on top of that, never a replacement.`;
|
|
415
|
-
}
|
|
416
427
|
export function assemblePrompt(input) {
|
|
417
428
|
const sections = [];
|
|
418
429
|
if (input.soulMd.trim())
|
|
@@ -421,8 +432,6 @@ export function assemblePrompt(input) {
|
|
|
421
432
|
sections.push(`# Operating Guide\n${input.agentMd.trim()}`);
|
|
422
433
|
if (input.heartbeat.trim())
|
|
423
434
|
sections.push(`# Heartbeat Schedule\n${input.heartbeat.trim()}`);
|
|
424
|
-
if (input.progressInstructions?.trim())
|
|
425
|
-
sections.push(input.progressInstructions.trim());
|
|
426
435
|
if (input.memories.trim())
|
|
427
436
|
sections.push(`# Recalled Memories\n${input.memories.trim()}`);
|
|
428
437
|
if (input.skills.trim())
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,SAAS;AACT,0BAA0B;AAC1B,6BAA6B;AAC7B,wCAAwC;AACxC,kDAAkD;AAClD,sCAAsC;AACtC,2CAA2C;AAC3C,8CAA8C;AAC9C,sCAAsC;AACtC,4BAA4B;AAC5B,uDAAuD;AACvD,wCAAwC;AACxC,4CAA4C;AAC5C,0FAA0F;AAE1F,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAwB,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA+C7C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAiB;IAC9C,sEAAsE;IACtE,+DAA+D;IAC/D,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,KAAiB;IAC5C,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC;QAE5E,MAAM,gBAAgB,GAAG,wFAAwF,CAAC;QAClH,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM,EAAE,IAAI,IAAI,gBAAgB,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,KAAK,gBAAgB,CAAC;QAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,MAAM,EAAE,WAAW,CAAC;QAE7D,IAAI,GAAG,CAAC,UAAU;YAAE,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAE5C,iEAAiE;QACjE,iEAAiE;QACjE,6DAA6D;QAC7D,0DAA0D;QAC1D,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACjB,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACzD,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;oBACvD,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE;wBACvB,MAAM,EAAE,CAAC,CAAC,cAAc;wBACxB,KAAK,EAAE,CAAC,CAAC,aAAa;wBACtB,YAAY,EAAE,CAAC,CAAC,YAAY;wBAC5B,UAAU,EAAE,CAAC,CAAC,UAAU;qBACzB,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAG,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;QAED,iEAAiE;QACjE,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,IAAI,GAAG,CAAC,KAAK,CAAC;QACxD,MAAM,MAAM,GAAG,SAAS,CAAC;YACvB,eAAe,EAAE,cAAc;YAC/B,IAAI;YACJ,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEtC,wEAAwE;QACxE,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QACpG,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QAC3D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEhD,kEAAkE;QAClE,kEAAkE;QAClE,gEAAgE;QAChE,oEAAoE;QACpE,yBAAyB;QACzB,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc;eACtC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEvF,8DAA8D;QAC9D,8DAA8D;QAC9D,kEAAkE;QAClE,+DAA+D;QAC/D,0DAA0D;QAC1D,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC;QAC9B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QAClG,MAAM,YAAY,GAAG,CAAC,WAAW;eAC5B,CAAC,KAAK,CAAC,MAAM;eACb,aAAa;eACb,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAE1D,gEAAgE;QAChE,+DAA+D;QAC/D,+DAA+D;QAC/D,8DAA8D;QAC9D,gEAAgE;QAChE,4DAA4D;QAC5D,gEAAgE;QAChE,8DAA8D;QAC9D,2DAA2D;QAC3D,oDAAoD;QAEpD,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,IAAI;YACJ,WAAW;YACX,oBAAoB,EAAE,YAAY,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC,EAAE;YACrE,QAAQ,EAAE,QAAQ;iBACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;iBACzE,IAAI,CAAC,IAAI,CAAC;YACb,OAAO,EAAE,UAAU,CAAC,KAAK;YACzB,MAAM,EAAE,UAAU,CAAC,IAAI;YACvB,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YAClD,MAAM,EAAE,OAAO;iBACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC5C,IAAI,CAAC,MAAM,CAAC;YACf,UAAU,EAAE,gBAAgB,CAAC,cAAc,CAAC;SAC7C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE;YAC9B,UAAU,EAAE,OAAO;YACnB,MAAM,EAAE,SAAS;YACjB,IAAI;YACJ,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SACrC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE;YACtB,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,gEAAgE;QAChE,iEAAiE;QACjE,0DAA0D;QAC1D,8DAA8D;QAC9D,iEAAiE;QACjE,gEAAgE;QAChE,iEAAiE;QACjE,yCAAyC;QACzC,MAAM,QAAQ,GAA2B;YACvC,gBAAgB,EAAE,KAAK,CAAC,OAAO;YAC/B,uBAAuB,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC;SAC3D,CAAC;QACF,IAAI,YAAY,IAAI,MAAM;YAAE,QAAQ,CAAC,eAAe,GAAG,MAAM,CAAC;QAE9D,MAAM,IAAI,GAAyC;YACjD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,eAAe,EAAE,GAAG,CAAC,eAAe;YACpC,SAAS;YACT,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;YAClC,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,SAAS,EAAE,GAAG,CAAC,aAAa,KAAK,IAAI;YACrC,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,OAAO,EAAE,GAAG,CAAC,cAAc;YAC3B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,EAAE,QAAQ;SACd,CAAC;QAEF,4EAA4E;QAC5E,yEAAyE;QACzE,qDAAqD;QACrD,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,IAAI,YAAY,GAAkB,IAAI,CAAC;QACvC,IAAI,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;YAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACpD,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACnE,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,OAAO,EAAE,CAAC,CAAC;YAC9E,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG;gBAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;;gBAC7B,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,2DAA2D;QAC3D,+DAA+D;QAC/D,mEAAmE;QACnE,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa;YAChC,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;YACvE,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE1C,iEAAiE;QACjE,oCAAoC;QACpC,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,GAAG,CAAC,SAAS,EAAE,OAAO,IAAI,YAAY,EAAE,CAAC;YAC3C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACpD,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,cAAc,OAAO,EAAE,CAAC,CAAC;YAC/E,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG;gBAAE,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC;;gBAC9B,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YACtB,EAAE,CAAC,OAAO,CAAC,qEAAqE,CAAC;iBAC9E,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,aAAa,CAAC,EAAE,CAAC,CAAC;YAClB,EAAE,CAAC,OAAO,CACR,mFAAmF,CACpF,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YACxF,IAAI,MAAM,EAAE,CAAC;gBACX,EAAE,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/F,CAAC;YACD,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1D,OAAO;gBACL,OAAO;gBACP,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM;gBACN,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,EAAE,MAAM;aACvB,CAAC;QACJ,CAAC;QAED,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,kEAAkE;QAClE,gEAAgE;QAChE,iEAAiE;QACjE,oDAAoD;QACpD,EAAE,CAAC,OAAO,CACR,gIAAgI,CACjI,CAAC,GAAG,CACH,QAAQ,EACR,IAAI,EACJ,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAC1B,MAAM,CAAC,OAAO,IAAI,IAAI,EACtB,MAAM,CAAC,WAAW,IAAI,IAAI,EAC1B,MAAM,CAAC,YAAY,IAAI,IAAI,EAC3B,MAAM,CAAC,KAAK,IAAI,IAAI,EACpB,OAAO,CACR,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,EAAE,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,sEAAsE;QACtE,qEAAqE;QACrE,6CAA6C;QAC7C,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;QAChG,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC;gBAAC,MAAM,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAAC,CAAC;YAC3D,OAAO,CAAC,EAAE,CAAC;gBAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAG,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAAC,CAAC;YAE/E,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC;oBAC/B,OAAO;oBACP,IAAI;oBACJ,QAAQ,EAAE,MAAM,CAAC,IAAI;oBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,GAAG,EAAE,GAAG,CAAC,SAAS;iBACnB,EAAE,GAAG,CAAC,CAAC;gBACR,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;oBACb,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC1D,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;oBACpE,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,sBAAsB,SAAS,EAAE,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAG,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAEhF,OAAO;YACL,OAAO;YACP,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,EAAE,MAAM;SACvB,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAoB;IAC5C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChD,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;QACtD,OAAO,KAAK,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IACpD,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,OAAO,CAAC,EAAwB;IACvC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CACpB,0KAA0K,CAC3K,CAAC,GAAG,EAAiG,CAAC;IACvG,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,EAAE,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvE,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;QAC/B,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAa,CAAC,CAAC,CAAC,SAAS;KACnF,CAAC;AACJ,CAAC;AAED;;;;;kDAKkD;AAClD,SAAS,iBAAiB,CACxB,EAAwB,EACxB,MAAc,EACd,aAAqB,EACrB,KAAa;IAEb,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;GAWvB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAMhC,CAAC;IAEJ,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,EAAwB,EAAE,CAE9C;IACC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,2EAA2E,CAC5E,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,eAAyB,CAAC;AACxC,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1B,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,CAAC,CAAC;IACF,uEAAuE;IACvE,qBAAqB;IACrB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO;QACL,KAAK;QACL,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;QACrB,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC;KAChC,CAAC;AACJ,CAAC;AAcD,MAAM,UAAU,yBAAyB;IACvC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mNA4C0M,CAAC;AACpN,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnF,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtF,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,yBAAyB,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7F,IAAI,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC;IACzF,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1F,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAClF,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEzF,IAAI,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,WAAW,IAAI,gEAAgE,KAAK,KAAK,CAAC;IAC5F,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAC;IAChD,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export type ChannelKind = "telegram" | "discord" | "imessage";
|
|
2
|
+
export type ProgressHandle = {
|
|
3
|
+
messageId: string | number;
|
|
4
|
+
} | null;
|
|
2
5
|
/** Start all configured channel adapters for a profile. Returns once
|
|
3
6
|
* adapters are wired; they then run in the background for the lifetime
|
|
4
7
|
* of the process. Idempotent: re-running swaps adapters in place. */
|
|
@@ -40,6 +43,12 @@ export declare function endTyping(source: string): void;
|
|
|
40
43
|
* clears typing. No-ops if source is not a channel or no adapter is
|
|
41
44
|
* registered. */
|
|
42
45
|
export declare function sendProgressToSource(profile: string, source: string, text: string): Promise<void>;
|
|
46
|
+
/** Open an edit-in-place progress message for the narrator.
|
|
47
|
+
* Returns null when the adapter does not support edits (iMessage)
|
|
48
|
+
* or is not loaded; callers must fall back to the summary path. */
|
|
49
|
+
export declare function openProgressMessage(profile: string, source: string, initialText: string): Promise<ProgressHandle>;
|
|
50
|
+
export declare function editProgressMessage(profile: string, source: string, handle: ProgressHandle, text: string): Promise<void>;
|
|
51
|
+
export declare function deleteProgressMessage(profile: string, source: string, handle: ProgressHandle): Promise<void>;
|
|
43
52
|
/** Send a proactive notification to all active channels for a profile.
|
|
44
53
|
* Uses the last seen chat/channel ID per adapter. No-ops if no messages
|
|
45
54
|
* have arrived yet (no chatId to target). Fire-and-forget. */
|
package/dist/channels/gateway.js
CHANGED
|
@@ -262,6 +262,63 @@ export async function sendProgressToSource(profile, source, text) {
|
|
|
262
262
|
return;
|
|
263
263
|
await a.send(id, text);
|
|
264
264
|
}
|
|
265
|
+
/** Open an edit-in-place progress message for the narrator.
|
|
266
|
+
* Returns null when the adapter does not support edits (iMessage)
|
|
267
|
+
* or is not loaded; callers must fall back to the summary path. */
|
|
268
|
+
export async function openProgressMessage(profile, source, initialText) {
|
|
269
|
+
const colon = source.indexOf(":");
|
|
270
|
+
if (colon < 0)
|
|
271
|
+
return null;
|
|
272
|
+
const kind = source.slice(0, colon);
|
|
273
|
+
const id = source.slice(colon + 1);
|
|
274
|
+
if (kind !== "telegram" && kind !== "discord" && kind !== "imessage")
|
|
275
|
+
return null;
|
|
276
|
+
const a = adapters.get(key(profile, kind));
|
|
277
|
+
if (!a || !a.openProgressMessage)
|
|
278
|
+
return null;
|
|
279
|
+
try {
|
|
280
|
+
return await a.openProgressMessage(id, initialText);
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
export async function editProgressMessage(profile, source, handle, text) {
|
|
287
|
+
if (!handle)
|
|
288
|
+
return;
|
|
289
|
+
const colon = source.indexOf(":");
|
|
290
|
+
if (colon < 0)
|
|
291
|
+
return;
|
|
292
|
+
const kind = source.slice(0, colon);
|
|
293
|
+
const id = source.slice(colon + 1);
|
|
294
|
+
if (kind !== "telegram" && kind !== "discord" && kind !== "imessage")
|
|
295
|
+
return;
|
|
296
|
+
const a = adapters.get(key(profile, kind));
|
|
297
|
+
if (!a || !a.editProgressMessage)
|
|
298
|
+
return;
|
|
299
|
+
try {
|
|
300
|
+
await a.editProgressMessage(id, handle, text);
|
|
301
|
+
}
|
|
302
|
+
catch { /* swallow: edits are best-effort */ }
|
|
303
|
+
}
|
|
304
|
+
export async function deleteProgressMessage(profile, source, handle) {
|
|
305
|
+
if (!handle)
|
|
306
|
+
return;
|
|
307
|
+
const colon = source.indexOf(":");
|
|
308
|
+
if (colon < 0)
|
|
309
|
+
return;
|
|
310
|
+
const kind = source.slice(0, colon);
|
|
311
|
+
const id = source.slice(colon + 1);
|
|
312
|
+
if (kind !== "telegram" && kind !== "discord" && kind !== "imessage")
|
|
313
|
+
return;
|
|
314
|
+
const a = adapters.get(key(profile, kind));
|
|
315
|
+
if (!a || !a.deleteProgressMessage)
|
|
316
|
+
return;
|
|
317
|
+
try {
|
|
318
|
+
await a.deleteProgressMessage(id, handle);
|
|
319
|
+
}
|
|
320
|
+
catch { /* swallow */ }
|
|
321
|
+
}
|
|
265
322
|
/** Send a proactive notification to all active channels for a profile.
|
|
266
323
|
* Uses the last seen chat/channel ID per adapter. No-ops if no messages
|
|
267
324
|
* have arrived yet (no chatId to target). Fire-and-forget. */
|
|
@@ -453,6 +510,39 @@ async function startTelegram(profile, c, log) {
|
|
|
453
510
|
await bot.sendDocument(Number(chatId), path, caption ? { caption } : {});
|
|
454
511
|
}
|
|
455
512
|
},
|
|
513
|
+
openProgressMessage: async (chatId, initialText) => {
|
|
514
|
+
// Telegram rejects empty messages. Fall back to a thin marker so
|
|
515
|
+
// the handle is valid and editProgressMessage can replace it.
|
|
516
|
+
const body = initialText.trim().length > 0 ? initialText : "…";
|
|
517
|
+
const msg = await bot.sendMessage(Number(chatId), body);
|
|
518
|
+
return { messageId: msg.message_id };
|
|
519
|
+
},
|
|
520
|
+
editProgressMessage: async (chatId, handle, text) => {
|
|
521
|
+
if (!handle)
|
|
522
|
+
return;
|
|
523
|
+
const body = text.trim().length > 0 ? text : "…";
|
|
524
|
+
try {
|
|
525
|
+
await bot.editMessageText(body, {
|
|
526
|
+
chat_id: Number(chatId),
|
|
527
|
+
message_id: Number(handle.messageId),
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
catch (e) {
|
|
531
|
+
// Telegram throws on "message is not modified" (no-op edits)
|
|
532
|
+
// and on rate limit. Both are non-fatal for a progress UI.
|
|
533
|
+
const msg = e.message ?? "";
|
|
534
|
+
if (!/not modified|Too Many Requests/i.test(msg))
|
|
535
|
+
throw e;
|
|
536
|
+
}
|
|
537
|
+
},
|
|
538
|
+
deleteProgressMessage: async (chatId, handle) => {
|
|
539
|
+
if (!handle)
|
|
540
|
+
return;
|
|
541
|
+
try {
|
|
542
|
+
await bot.deleteMessage(Number(chatId), Number(handle.messageId));
|
|
543
|
+
}
|
|
544
|
+
catch { /* ignore */ }
|
|
545
|
+
},
|
|
456
546
|
startTyping: (chatId) => {
|
|
457
547
|
// Telegram's typing indicator auto-clears after 5s, so re-send
|
|
458
548
|
// every 4s until stopped. `sendChatAction` errors are swallowed
|
|
@@ -549,6 +639,41 @@ async function startDiscord(profile, c, log) {
|
|
|
549
639
|
await ch.send(text);
|
|
550
640
|
}
|
|
551
641
|
},
|
|
642
|
+
openProgressMessage: async (channelId, initialText) => {
|
|
643
|
+
const ch = await client.channels.fetch(String(channelId));
|
|
644
|
+
if (!ch || !("send" in ch) || typeof ch.send !== "function")
|
|
645
|
+
return null;
|
|
646
|
+
const body = initialText.trim().length > 0 ? initialText : "…";
|
|
647
|
+
const sent = await ch.send(body);
|
|
648
|
+
return { messageId: sent.id };
|
|
649
|
+
},
|
|
650
|
+
editProgressMessage: async (channelId, handle, text) => {
|
|
651
|
+
if (!handle)
|
|
652
|
+
return;
|
|
653
|
+
const ch = await client.channels.fetch(String(channelId));
|
|
654
|
+
if (!ch || !("messages" in ch))
|
|
655
|
+
return;
|
|
656
|
+
try {
|
|
657
|
+
const m = await ch
|
|
658
|
+
.messages.fetch(String(handle.messageId));
|
|
659
|
+
const body = text.trim().length > 0 ? text : "…";
|
|
660
|
+
await m.edit(body);
|
|
661
|
+
}
|
|
662
|
+
catch { /* rate-limited or gone - ignore */ }
|
|
663
|
+
},
|
|
664
|
+
deleteProgressMessage: async (channelId, handle) => {
|
|
665
|
+
if (!handle)
|
|
666
|
+
return;
|
|
667
|
+
const ch = await client.channels.fetch(String(channelId));
|
|
668
|
+
if (!ch || !("messages" in ch))
|
|
669
|
+
return;
|
|
670
|
+
try {
|
|
671
|
+
const m = await ch
|
|
672
|
+
.messages.fetch(String(handle.messageId));
|
|
673
|
+
await m.delete();
|
|
674
|
+
}
|
|
675
|
+
catch { /* ignore */ }
|
|
676
|
+
},
|
|
552
677
|
sendFile: async (channelId, path, caption) => {
|
|
553
678
|
const ch = await client.channels.fetch(String(channelId));
|
|
554
679
|
if (ch && "send" in ch && typeof ch.send === "function") {
|