aibroker 0.58.1 → 0.59.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 (49) hide show
  1. package/dist/adapters/iterm/core.d.ts +12 -1
  2. package/dist/adapters/iterm/core.d.ts.map +1 -1
  3. package/dist/adapters/iterm/core.js +32 -5
  4. package/dist/adapters/iterm/core.js.map +1 -1
  5. package/dist/adapters/iterm/sessions.d.ts.map +1 -1
  6. package/dist/adapters/iterm/sessions.js +36 -4
  7. package/dist/adapters/iterm/sessions.js.map +1 -1
  8. package/dist/core/state.d.ts +7 -1
  9. package/dist/core/state.d.ts.map +1 -1
  10. package/dist/core/state.js +13 -3
  11. package/dist/core/state.js.map +1 -1
  12. package/dist/daemon/core-handlers.d.ts +28 -0
  13. package/dist/daemon/core-handlers.d.ts.map +1 -1
  14. package/dist/daemon/core-handlers.js +150 -50
  15. package/dist/daemon/core-handlers.js.map +1 -1
  16. package/dist/daemon/dispatch.d.ts +39 -0
  17. package/dist/daemon/dispatch.d.ts.map +1 -1
  18. package/dist/daemon/dispatch.js +331 -2
  19. package/dist/daemon/dispatch.js.map +1 -1
  20. package/dist/daemon/index.d.ts.map +1 -1
  21. package/dist/daemon/index.js +10 -0
  22. package/dist/daemon/index.js.map +1 -1
  23. package/dist/daemon/manage.d.ts +37 -0
  24. package/dist/daemon/manage.d.ts.map +1 -1
  25. package/dist/daemon/manage.js +157 -12
  26. package/dist/daemon/manage.js.map +1 -1
  27. package/dist/daemon/todoist-pending.d.ts +45 -0
  28. package/dist/daemon/todoist-pending.d.ts.map +1 -0
  29. package/dist/daemon/todoist-pending.js +58 -0
  30. package/dist/daemon/todoist-pending.js.map +1 -0
  31. package/dist/daemon/todoist-reply.d.ts +10 -0
  32. package/dist/daemon/todoist-reply.d.ts.map +1 -1
  33. package/dist/daemon/todoist-reply.js +1 -0
  34. package/dist/daemon/todoist-reply.js.map +1 -1
  35. package/dist/daemon/todoist-webhook.d.ts +29 -0
  36. package/dist/daemon/todoist-webhook.d.ts.map +1 -1
  37. package/dist/daemon/todoist-webhook.js +331 -208
  38. package/dist/daemon/todoist-webhook.js.map +1 -1
  39. package/dist/ipc/client.d.ts.map +1 -1
  40. package/dist/ipc/client.js +24 -3
  41. package/dist/ipc/client.js.map +1 -1
  42. package/dist/mcp/index.js +19 -2
  43. package/dist/mcp/index.js.map +1 -1
  44. package/dist/transport/sync-facade.d.ts +15 -2
  45. package/dist/transport/sync-facade.d.ts.map +1 -1
  46. package/dist/transport/sync-facade.js +16 -3
  47. package/dist/transport/sync-facade.js.map +1 -1
  48. package/hooks/drain-mailbox.mjs +34 -8
  49. package/package.json +1 -1
@@ -63,6 +63,13 @@ export interface DispatchOptions {
63
63
  * adjust what it already has.
64
64
  */
65
65
  prefix?: string;
66
+ /**
67
+ * INTERNAL — set only by redriveQueuedDispatches. Marks this dispatch as the
68
+ * one redrive a queued record gets, so the fresh record a `queued` outcome
69
+ * writes is generation-counted and never redriven again. Not part of the
70
+ * public surface.
71
+ */
72
+ redriveCount?: number;
66
73
  }
67
74
  /**
68
75
  * Everything dispatch() touches outside itself, injected so the outcome matrix
@@ -76,6 +83,12 @@ export interface DispatchDeps {
76
83
  name: string;
77
84
  paiName: string | null;
78
85
  }[];
86
+ /**
87
+ * Did `sessions()` actually enumerate, or fall back to `[]` after a failed
88
+ * osascript call? An empty array means two different things and only this
89
+ * tells them apart — see the spawn-gate below.
90
+ */
91
+ sessionsReliable: () => boolean;
79
92
  deliver: (sessionId: string, body: string, timeoutMs: number, io?: TerminalIO, retries?: number) => Promise<AckResult>;
80
93
  launch: (project: PaiProject, opts?: {
81
94
  initialPrompt?: string;
@@ -83,6 +96,11 @@ export interface DispatchDeps {
83
96
  itermSessionId: string;
84
97
  }>;
85
98
  waitReady: (sessionId: string, timeoutMs: number) => Promise<boolean>;
99
+ /**
100
+ * INTERNAL — Todoist fetch used only by the redrive freshness gate, so tests
101
+ * can drive it without the network. Defaults to the global fetch.
102
+ */
103
+ todoistFetch?: typeof fetch;
86
104
  /** Read a session's screen, to confirm Claude still owns the tty. */
87
105
  capture: (sessionId: string) => string | null;
88
106
  /** Clock for the shared budget; injectable so budget maths is testable. */
@@ -163,4 +181,25 @@ export declare function submitAndConfirm(sessionId: string, body: string, timeou
163
181
  * Never throws for a routing outcome — see the module comment.
164
182
  */
165
183
  export declare function dispatch(projectName: string, message: string, opts?: DispatchOptions, deps?: DispatchDeps): Promise<DispatchResult>;
184
+ /**
185
+ * Re-attempt every queued dispatch still on disk from before this start.
186
+ * Call once, at daemon startup.
187
+ *
188
+ * Not provably exactly-once: if the original typed input was in fact consumed
189
+ * moments after its own delivery window closed, this can deliver a second
190
+ * copy — the same risk `dispatch()`'s single-attempt rule accepts for a normal
191
+ * retry. The alternative is what actually happened: a dispatch typed into a
192
+ * live session, never run, nothing anywhere to say so, and no way to recover
193
+ * it. A record aged past the grace period is stronger evidence of loss than of
194
+ * a slow turn.
195
+ *
196
+ * Bounded, not a retry loop: a record whose todoist task has since closed or
197
+ * completed is dropped as stale, a record whose transcript shows the session
198
+ * already received it is deleted as consumed, a record that has already had
199
+ * its one redrive is dropped without sending, and whatever this pass leaves
200
+ * behind (still `queued`, `unreachable`, `unlaunchable`) is dropped after one
201
+ * audited attempt rather than kept for the next restart, so a daemon that
202
+ * restarts repeatedly cannot turn this into a duplicate-dispatch storm.
203
+ */
204
+ export declare function redriveQueuedDispatches(deps?: DispatchDeps): Promise<void>;
166
205
  //# sourceMappingURL=dispatch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/daemon/dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/daemon/dispatch.ts"],"names":[],"mappings":"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"}
@@ -28,9 +28,12 @@
28
28
  * them sends whoever reads the result looking in the wrong place.
29
29
  */
30
30
  import { mkdirSync, writeFileSync, readdirSync, statSync, unlinkSync } from "node:fs";
31
+ import { execFileSync } from "node:child_process";
31
32
  import { homedir } from "node:os";
32
33
  import { join } from "node:path";
33
- import { snapshotAllSessions } from "../transport/sync-facade.js";
34
+ import { saveJson, loadJson } from "../core/json-store.js";
35
+ import { audit } from "./audit.js";
36
+ import { snapshotAllSessions, wasLastEnumerationReliable } from "../transport/sync-facade.js";
34
37
  import { findCuratedPaiProject, launchResolvedPaiProject, invalidatePaiProjectCache, } from "./pai-projects.js";
35
38
  import { getAllPersistentSessionNames, lookupPersistentName } from "../core/persistence.js";
36
39
  import { flatten, isClaudeReady, isInputBoxEmpty, hasBeenSubmitted, realIO, } from "./terminal-screen.js";
@@ -158,6 +161,7 @@ export async function submitAndConfirm(sessionId, body, timeoutMs, io = realIO,
158
161
  const realDeps = {
159
162
  resolve: findCuratedPaiProject,
160
163
  sessions: liveSessions,
164
+ sessionsReliable: wasLastEnumerationReliable,
161
165
  deliver: submitAndConfirm,
162
166
  capture: (id) => realIO.capture(id),
163
167
  now: () => Date.now(),
@@ -223,15 +227,26 @@ export async function dispatch(projectName, message, opts = {}, deps = realDeps)
223
227
  `prompt. Nothing was sent, because a shell would execute the message rather than read it.`,
224
228
  };
225
229
  }
230
+ // Write-ahead: a record on disk BEFORE the type, not after. `queued` means
231
+ // the text left our hands for Claude Code's own in-terminal queue, which we
232
+ // cannot see into — if that queue drops it (pane closed, session killed
233
+ // mid-turn, daemon restarted and nobody re-checked) there was previously
234
+ // NOTHING anywhere recording that this dispatch ever happened. Deleted
235
+ // below the moment delivery is actually confirmed; kept otherwise so
236
+ // redriveQueuedDispatches() has something to find.
237
+ const queuedRecordPath = writeQueuedRecord(projectName, label, message, opts.prefix, opts.redriveCount);
226
238
  // One attempt, never three. The text is already in a live session's input
227
239
  // box; typing it again does not retry, it duplicates — one trigger became
228
240
  // three full job sweeps on 2026-08-01. Retries belong to the spawn path
229
241
  // below, where an earlier attempt may genuinely never have landed.
230
242
  const res = await deps.deliver(existing.id, body, deliverTimeoutMs(), undefined, 1);
231
243
  if (res === "ok") {
244
+ deleteQueuedRecord(queuedRecordPath);
232
245
  return { outcome: "delivered", project: label, session: existing.label, reason: "" };
233
246
  }
234
247
  if (res === "unreadable") {
248
+ // Never typed — nothing was queued anywhere, so there is nothing to redrive.
249
+ deleteQueuedRecord(queuedRecordPath);
235
250
  return {
236
251
  outcome: "unreachable",
237
252
  project: label,
@@ -249,7 +264,25 @@ export async function dispatch(projectName, message, opts = {}, deps = realDeps)
249
264
  project: label,
250
265
  session: existing.label,
251
266
  reason: `Typed into live session "${existing.label}", which was still working and had not read it ` +
252
- `within the window. This is delivery, not failure — do NOT retry.`,
267
+ `within the window. This is delivery, not failure — do NOT retry. Recorded at ${queuedRecordPath} ` +
268
+ `in case it turns out to have been lost; redriven once on the next daemon start.`,
269
+ };
270
+ }
271
+ // Enumeration itself may have failed rather than truthfully found nothing —
272
+ // an osascript hiccup returns `[]` indistinguishable from an empty machine.
273
+ // Reading that as "target absent" spawns a session next to one that already
274
+ // exists, or — worse — the write for that spawn can land on whatever pane
275
+ // happened to be current, which is exactly how a launch command ends up
276
+ // typed into a live Claude pane instead of a fresh shell. Unknown is not
277
+ // absent: report it as a transient failure so the caller retries instead of
278
+ // either giving up (`unlaunchable`) or launching blind.
279
+ if (!deps.sessionsReliable()) {
280
+ return {
281
+ outcome: "unreachable",
282
+ project: label,
283
+ session: "",
284
+ reason: `Session enumeration failed, so whether "${label}" already has a live session could not be ` +
285
+ `confirmed. Not launching one on an unverified "no session" — retry once enumeration recovers.`,
253
286
  };
254
287
  }
255
288
  if (opts.noSpawn) {
@@ -404,4 +437,300 @@ function pruneWorkOrders(dir) {
404
437
  // is a reason to skip the sweep, not to fail the work order.
405
438
  }
406
439
  }
440
+ const QUEUED_DIR = join(homedir(), ".aibroker", "queued-dispatches");
441
+ /** Persist a queued dispatch before it is typed. Returns the record's path. */
442
+ function writeQueuedRecord(project, label, message, prefix, redriveCount) {
443
+ const path = join(QUEUED_DIR, `${Date.now()}-${Math.random().toString(36).slice(2, 8)}.json`);
444
+ const record = { project, label, message, prefix, createdAt: Date.now() };
445
+ if (redriveCount !== undefined)
446
+ record.redriveCount = redriveCount;
447
+ try {
448
+ saveJson(path, record, { backup: false });
449
+ }
450
+ catch (err) {
451
+ log(`dispatch: could not persist queued-dispatch record for "${label}": ${err instanceof Error ? err.message : String(err)}`);
452
+ }
453
+ return path;
454
+ }
455
+ function deleteQueuedRecord(path) {
456
+ try {
457
+ unlinkSync(path);
458
+ }
459
+ catch { /* already gone, or never written */ }
460
+ }
461
+ /**
462
+ * How long a queued (typed-but-unacked) dispatch is left alone before it is
463
+ * treated as possibly lost. Long enough that a genuinely busy Claude turn has
464
+ * finished and consumed it — the sweeps this exists for run for minutes, not
465
+ * hours — short enough to catch a same-morning daemon restart like 2026-09-23's
466
+ * (07:37 dispatch, 07:42/07:44 restarts, never redriven because nothing
467
+ * persisted the attempt).
468
+ */
469
+ const QUEUED_REDRIVE_GRACE_MS = 5 * 60 * 1000;
470
+ // ── was a queued dispatch in fact consumed? ────────────────────────────────
471
+ //
472
+ // Real fault, 2026-09-24: a dispatch typed into a busy session at 06:56 was
473
+ // read and handled by that session minutes later — it is in its transcript —
474
+ // but the queued record stayed on disk, because nothing marks a record
475
+ // consumed. Every daemon restart then re-typed the same message into the same
476
+ // session (the 11:02 restart delivered it a second time), and THAT delivery
477
+ // wrote its own record, so each restart meant one more duplicate, forever.
478
+ // The transcript is the ground truth of what a session actually received, so
479
+ // it is what decides whether a redrive is a recovery or a duplicate.
480
+ /**
481
+ * Substrings that identify `message` inside a transcript entry.
482
+ *
483
+ * Both ends, not just the head: a long body delivered into a busy input box
484
+ * can lose its head (measured 2026-09-24: ~700 of ~5000 chars survived, and
485
+ * they were the tail), so a head-only needle would miss exactly the deliveries
486
+ * that most need finding. Drawn from single lines and capped, so a needle
487
+ * never spans a newline.
488
+ */
489
+ function transcriptNeedles(message) {
490
+ const lines = message.split("\n").map((l) => l.trim()).filter((l) => l.length > 0);
491
+ if (!lines.length)
492
+ return [];
493
+ return [...new Set([lines[0].slice(0, 80), lines[lines.length - 1].slice(-80)])];
494
+ }
495
+ /**
496
+ * Does the target project's transcript already hold this message?
497
+ *
498
+ * true — a user message created after the record contains a distinctive
499
+ * slice of it: the session received it, redelivering duplicates.
500
+ * false — transcript resolvable, message absent: a redrive is warranted.
501
+ * undefined — no transcript could be resolved (no curated project, no
502
+ * rootPath, no ~/.claude/projects dir for it): cannot tell.
503
+ */
504
+ async function queuedDispatchConsumed(record, deps) {
505
+ if (typeof record.createdAt !== "number")
506
+ return undefined;
507
+ const needles = transcriptNeedles(record.message);
508
+ if (!needles.length)
509
+ return undefined;
510
+ const project = await deps.resolve(record.project).catch(() => undefined);
511
+ const rootPath = project?.rootPath;
512
+ if (!rootPath)
513
+ return undefined;
514
+ // Same encoding Claude Code uses for ~/.claude/projects/<dir>: every
515
+ // non-alphanumeric in the cwd becomes a dash — measured against real dirs
516
+ // ("/Users/x/.claude" -> "-Users-x--claude"). The five newest transcripts
517
+ // cover every session that could have consumed it recently.
518
+ const dir = join(homedir(), ".claude", "projects", rootPath.replace(/[^a-zA-Z0-9]/g, "-"));
519
+ let files;
520
+ try {
521
+ files = readdirSync(dir)
522
+ .filter((f) => f.endsWith(".jsonl"))
523
+ .map((f) => ({ f, m: statSync(join(dir, f)).mtimeMs }))
524
+ .sort((a, b) => b.m - a.m)
525
+ .slice(0, 5)
526
+ .map((e) => e.f);
527
+ }
528
+ catch {
529
+ return undefined;
530
+ }
531
+ if (!files.length)
532
+ return undefined;
533
+ // grep for the JSON-ESCAPED spelling: a needle containing a quote never
534
+ // appears verbatim in a JSONL line, only as its escaped form. Whole-file
535
+ // scans, because the consumed entry can sit far above a busy session's tail.
536
+ const patterns = needles.flatMap((n) => ["-e", JSON.stringify(n).slice(1, -1)]);
537
+ for (const f of files) {
538
+ let hits;
539
+ try {
540
+ hits = execFileSync("/usr/bin/grep", ["-F", ...patterns, join(dir, f)], {
541
+ encoding: "utf8",
542
+ timeout: 10_000,
543
+ maxBuffer: 32 * 1024 * 1024,
544
+ });
545
+ }
546
+ catch {
547
+ continue; // no match in this file (grep exits 1) — next transcript
548
+ }
549
+ for (const line of hits.split("\n")) {
550
+ if (!line.trim())
551
+ continue;
552
+ let entry;
553
+ try {
554
+ entry = JSON.parse(line);
555
+ }
556
+ catch {
557
+ continue; // truncated by a concurrent write — skip it
558
+ }
559
+ // Typed-in text only. Tool results are user-type entries too and can
560
+ // echo the body (a session reading the record file itself), which is
561
+ // a mention, not a delivery.
562
+ if (entry?.type !== "user")
563
+ continue;
564
+ const content = entry.message?.content;
565
+ const text = typeof content === "string"
566
+ ? content
567
+ : Array.isArray(content)
568
+ ? content.filter((c) => c?.type === "text").map((c) => c.text).join("\n")
569
+ : "";
570
+ if (!text)
571
+ continue;
572
+ const at = entry.timestamp ? Date.parse(entry.timestamp) : NaN;
573
+ if (Number.isNaN(at) || at < record.createdAt)
574
+ continue;
575
+ if (needles.some((n) => text.includes(n)))
576
+ return true;
577
+ }
578
+ }
579
+ return false;
580
+ }
581
+ // ── a queued todoist dispatch must still be current ─────────────────────────
582
+ //
583
+ // Real fault, 2026-09-24 (records 1790226222101/1790226253580): a dispatch sat
584
+ // queued for 4h and was then re-driven, long after the run it asked for had
585
+ // happened and been completed. A todoist dispatch's `[todoist:<id>` trailer
586
+ // names the task it came from, and that task says whether the order is still
587
+ // wanted: unfetchable means the trigger is closed, and a due date moved far
588
+ // past the queueing moment means the occurrence was completed since.
589
+ /** How far the due date may legitimately sit past queueing: a trigger fires ON its due time, so anything further is a new occurrence. */
590
+ const REDRIVE_DUE_TOLERANCE_MS = 60 * 60 * 1000;
591
+ const TODOIST_TRAILER = /\[todoist:(\d+)(?:\s+in:[^\]]*)?\]/;
592
+ /**
593
+ * Why this record's todoist task makes a redrive stale, or undefined when the
594
+ * dispatch is still current — or cannot be judged, which must NOT drop it.
595
+ */
596
+ async function staleTodoistTrailer(record, fetchImpl) {
597
+ const taskId = TODOIST_TRAILER.exec(record.message)?.[1];
598
+ if (!taskId)
599
+ return undefined;
600
+ try {
601
+ const { fetchParentTask } = await import("./todoist-reply.js");
602
+ const parent = await fetchParentTask(taskId, fetchImpl);
603
+ const due = parent.due?.date ? Date.parse(parent.due.date) : NaN;
604
+ if (Number.isFinite(due) && due > record.createdAt + REDRIVE_DUE_TOLERANCE_MS) {
605
+ return `task ${taskId} is due ${parent.due?.date}, well past the ${new Date(record.createdAt).toISOString()} it was queued at — the occurrence advanced, the run already happened`;
606
+ }
607
+ return undefined;
608
+ }
609
+ catch (err) {
610
+ // A fetch that never got an answer says nothing about the task: keep the
611
+ // record. Only a definitive "gone" (404/401/…, per the webhook's own
612
+ // transient/permanent classifier) is evidence the trigger is closed.
613
+ const { isTransientTodoistError } = await import("./todoist-webhook.js");
614
+ if (isTransientTodoistError(err))
615
+ return undefined;
616
+ return `task ${taskId} is no longer fetchable (${err instanceof Error ? err.message : String(err)}) — closed since the dispatch was queued`;
617
+ }
618
+ }
619
+ /**
620
+ * Re-attempt every queued dispatch still on disk from before this start.
621
+ * Call once, at daemon startup.
622
+ *
623
+ * Not provably exactly-once: if the original typed input was in fact consumed
624
+ * moments after its own delivery window closed, this can deliver a second
625
+ * copy — the same risk `dispatch()`'s single-attempt rule accepts for a normal
626
+ * retry. The alternative is what actually happened: a dispatch typed into a
627
+ * live session, never run, nothing anywhere to say so, and no way to recover
628
+ * it. A record aged past the grace period is stronger evidence of loss than of
629
+ * a slow turn.
630
+ *
631
+ * Bounded, not a retry loop: a record whose todoist task has since closed or
632
+ * completed is dropped as stale, a record whose transcript shows the session
633
+ * already received it is deleted as consumed, a record that has already had
634
+ * its one redrive is dropped without sending, and whatever this pass leaves
635
+ * behind (still `queued`, `unreachable`, `unlaunchable`) is dropped after one
636
+ * audited attempt rather than kept for the next restart, so a daemon that
637
+ * restarts repeatedly cannot turn this into a duplicate-dispatch storm.
638
+ */
639
+ export async function redriveQueuedDispatches(deps = realDeps) {
640
+ let names;
641
+ try {
642
+ names = readdirSync(QUEUED_DIR).filter((n) => n.endsWith(".json"));
643
+ }
644
+ catch {
645
+ return; // directory does not exist yet — nothing was ever queued
646
+ }
647
+ const cutoff = Date.now() - QUEUED_REDRIVE_GRACE_MS;
648
+ for (const name of names) {
649
+ const path = join(QUEUED_DIR, name);
650
+ let record;
651
+ try {
652
+ if (statSync(path).mtimeMs >= cutoff)
653
+ continue; // still inside its own delivery window
654
+ const loaded = loadJson(path);
655
+ if (loaded.status !== "ok") {
656
+ deleteQueuedRecord(path);
657
+ continue;
658
+ }
659
+ record = loaded.data;
660
+ }
661
+ catch {
662
+ continue;
663
+ }
664
+ // Second generation, one chance only. This record was written BY a redrive
665
+ // whose transcript could not be checked; sending it again would make every
666
+ // restart one more duplicate of the same work order.
667
+ if ((record.redriveCount ?? 0) >= 1) {
668
+ log(`dispatch: dropping queued dispatch for "${record.label}" — already redriven once ` +
669
+ `(from ${new Date(record.createdAt).toISOString()}) and never confirmed, not sending it again`);
670
+ audit({
671
+ action: "dispatch-redrive",
672
+ actor: "aibroker:daemon-start",
673
+ target: record.project,
674
+ outcome: "dropped",
675
+ body: record.message,
676
+ reason: "already redriven once and never confirmed — dropped rather than risk another duplicate",
677
+ meta: { project: record.project, originallyQueuedAt: record.createdAt, redriveCount: record.redriveCount },
678
+ });
679
+ deleteQueuedRecord(path);
680
+ continue;
681
+ }
682
+ // Still current? A todoist-trailer dispatch names its task; if that task
683
+ // has since been completed (due advanced) or closed, re-driving would
684
+ // resurrect a run that already happened. Checked before the transcript
685
+ // scan: one task lookup is cheaper than grepping five transcripts, and it
686
+ // answers first when both would apply.
687
+ const stale = await staleTodoistTrailer(record, deps.todoistFetch ?? fetch);
688
+ if (stale) {
689
+ log(`dispatch: dropping queued dispatch for "${record.label}" — ${stale}`);
690
+ audit({
691
+ action: "dispatch-redrive",
692
+ actor: "aibroker:daemon-start",
693
+ target: record.project,
694
+ outcome: "dropped",
695
+ body: record.message,
696
+ reason: stale,
697
+ meta: { project: record.project, originallyQueuedAt: record.createdAt },
698
+ });
699
+ deleteQueuedRecord(path);
700
+ continue;
701
+ }
702
+ // Consumed already? The transcript says whether the session ever read it.
703
+ const consumed = await queuedDispatchConsumed(record, deps);
704
+ if (consumed) {
705
+ log(`dispatch: queued dispatch for "${record.label}" already consumed, not redriving`);
706
+ audit({
707
+ action: "dispatch-redrive",
708
+ actor: "aibroker:daemon-start",
709
+ target: record.project,
710
+ outcome: "consumed",
711
+ body: record.message,
712
+ reason: "found in the target project's transcript after the record was written — the first delivery landed",
713
+ meta: { project: record.project, originallyQueuedAt: record.createdAt },
714
+ });
715
+ deleteQueuedRecord(path);
716
+ continue;
717
+ }
718
+ log(`dispatch: redriving queued dispatch for "${record.label}" left over from ` +
719
+ `${new Date(record.createdAt).toISOString()} (${path})`);
720
+ const result = await dispatch(record.project, record.message, { prefix: record.prefix, redriveCount: 1 }, deps);
721
+ audit({
722
+ action: "dispatch-redrive",
723
+ actor: "aibroker:daemon-start",
724
+ target: result.session || record.project,
725
+ outcome: result.outcome,
726
+ body: record.message,
727
+ reason: result.reason || undefined,
728
+ meta: { project: result.project, originallyQueuedAt: record.createdAt },
729
+ });
730
+ // Delete unconditionally: `delivered`/`spawned` need no further record, and
731
+ // a fresh `queued` result already wrote ITS OWN record above — marked
732
+ // redriveCount so the next start drops it instead of redelivering.
733
+ deleteQueuedRecord(path);
734
+ }
735
+ }
407
736
  //# sourceMappingURL=dispatch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/daemon/dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/daemon/dispatch.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgDH,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAyBvD,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsgBhB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgDH,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAyBvD,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAihBhB"}
@@ -301,6 +301,16 @@ export async function startDaemon(options) {
301
301
  const { startManagerLoop } = await import("./manage.js");
302
302
  startManagerLoop();
303
303
  }
304
+ // A dispatch typed into a live session but never confirmed ("queued") is
305
+ // recorded on disk before the type happens — see dispatch.ts. Redrive them
306
+ // once here, deferred so iTerm enumeration has a chance to warm up first
307
+ // rather than racing the very osascript flakiness that can cause a lost
308
+ // dispatch in the first place.
309
+ setTimeout(() => {
310
+ import("./dispatch.js")
311
+ .then(({ redriveQueuedDispatches }) => redriveQueuedDispatches())
312
+ .catch((err) => log(`dispatch: queued-redrive failed to start — ${err instanceof Error ? err.message : String(err)}`));
313
+ }, 10_000).unref();
304
314
  startTodoistWebhook({
305
315
  deliver: async (project, body, opts) => {
306
316
  const { dispatch } = await import("./dispatch.js");