aibroker 0.58.1 → 0.60.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/dist/adapters/iterm/core.d.ts +12 -1
- package/dist/adapters/iterm/core.d.ts.map +1 -1
- package/dist/adapters/iterm/core.js +32 -5
- package/dist/adapters/iterm/core.js.map +1 -1
- package/dist/adapters/iterm/sessions.d.ts +28 -0
- package/dist/adapters/iterm/sessions.d.ts.map +1 -1
- package/dist/adapters/iterm/sessions.js +101 -4
- package/dist/adapters/iterm/sessions.js.map +1 -1
- package/dist/adapters/pailot/gateway.d.ts.map +1 -1
- package/dist/adapters/pailot/gateway.js +46 -11
- package/dist/adapters/pailot/gateway.js.map +1 -1
- package/dist/core/hybrid.d.ts +10 -1
- package/dist/core/hybrid.d.ts.map +1 -1
- package/dist/core/hybrid.js +50 -15
- package/dist/core/hybrid.js.map +1 -1
- package/dist/core/persistence.d.ts +51 -2
- package/dist/core/persistence.d.ts.map +1 -1
- package/dist/core/persistence.js +45 -1
- package/dist/core/persistence.js.map +1 -1
- package/dist/core/session-match.d.ts +23 -0
- package/dist/core/session-match.d.ts.map +1 -1
- package/dist/core/session-match.js +25 -11
- package/dist/core/session-match.js.map +1 -1
- package/dist/core/state.d.ts +7 -1
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +13 -3
- package/dist/core/state.js.map +1 -1
- package/dist/daemon/cli.js +3 -0
- package/dist/daemon/cli.js.map +1 -1
- package/dist/daemon/commands.d.ts.map +1 -1
- package/dist/daemon/commands.js +8 -0
- package/dist/daemon/commands.js.map +1 -1
- package/dist/daemon/core-handlers.d.ts +28 -0
- package/dist/daemon/core-handlers.d.ts.map +1 -1
- package/dist/daemon/core-handlers.js +215 -59
- package/dist/daemon/core-handlers.js.map +1 -1
- package/dist/daemon/dispatch.d.ts +60 -1
- package/dist/daemon/dispatch.d.ts.map +1 -1
- package/dist/daemon/dispatch.js +389 -18
- package/dist/daemon/dispatch.js.map +1 -1
- package/dist/daemon/inbound.d.ts +4 -0
- package/dist/daemon/inbound.d.ts.map +1 -1
- package/dist/daemon/inbound.js +134 -29
- package/dist/daemon/inbound.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +42 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/manage.d.ts +37 -0
- package/dist/daemon/manage.d.ts.map +1 -1
- package/dist/daemon/manage.js +179 -13
- package/dist/daemon/manage.js.map +1 -1
- package/dist/daemon/session-content.d.ts.map +1 -1
- package/dist/daemon/session-content.js +4 -2
- package/dist/daemon/session-content.js.map +1 -1
- package/dist/daemon/todoist-pending.d.ts +45 -0
- package/dist/daemon/todoist-pending.d.ts.map +1 -0
- package/dist/daemon/todoist-pending.js +58 -0
- package/dist/daemon/todoist-pending.js.map +1 -0
- package/dist/daemon/todoist-reply.d.ts +10 -0
- package/dist/daemon/todoist-reply.d.ts.map +1 -1
- package/dist/daemon/todoist-reply.js +1 -0
- package/dist/daemon/todoist-reply.js.map +1 -1
- package/dist/daemon/todoist-webhook.d.ts +29 -0
- package/dist/daemon/todoist-webhook.d.ts.map +1 -1
- package/dist/daemon/todoist-webhook.js +334 -209
- package/dist/daemon/todoist-webhook.js.map +1 -1
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +24 -3
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/validate.d.ts +2 -0
- package/dist/ipc/validate.d.ts.map +1 -1
- package/dist/ipc/validate.js +6 -1
- package/dist/ipc/validate.js.map +1 -1
- package/dist/mcp/index.js +19 -2
- package/dist/mcp/index.js.map +1 -1
- package/dist/transport/screen.d.ts.map +1 -1
- package/dist/transport/screen.js +30 -4
- package/dist/transport/screen.js.map +1 -1
- package/dist/transport/sync-facade.d.ts +15 -2
- package/dist/transport/sync-facade.d.ts.map +1 -1
- package/dist/transport/sync-facade.js +16 -3
- package/dist/transport/sync-facade.js.map +1 -1
- package/hooks/drain-mailbox.mjs +34 -8
- package/package.json +2 -2
package/dist/daemon/dispatch.js
CHANGED
|
@@ -28,14 +28,17 @@
|
|
|
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 {
|
|
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";
|
|
37
40
|
import { log } from "../core/log.js";
|
|
38
|
-
import {
|
|
41
|
+
import { matchAllSessions } from "../core/session-match.js";
|
|
39
42
|
/** A spawned Claude needs to boot and run its `/Name … go` preamble first. */
|
|
40
43
|
const DEFAULT_SPAWN_TIMEOUT_MS = 90_000;
|
|
41
44
|
const DEFAULT_DELIVER_TIMEOUT_MS = 120_000;
|
|
@@ -57,18 +60,33 @@ export const TASK_PREFIX = "[Task]";
|
|
|
57
60
|
// here because these were dispatch's before `ask` needed them too.
|
|
58
61
|
export { isClaudeReady, hasBeenSubmitted, flatten, realIO, } from "./terminal-screen.js";
|
|
59
62
|
/**
|
|
60
|
-
*
|
|
63
|
+
* Every running session for `project`, the one most likely to receive first.
|
|
61
64
|
*
|
|
62
65
|
* Matches the project's display name, canonical name and every curated alias,
|
|
63
66
|
* case-insensitively — session labels and aliases disagree on capitalisation
|
|
64
67
|
* often enough that an exact match silently spawns a duplicate tab.
|
|
68
|
+
*
|
|
69
|
+
* More than one session can legitimately carry the name: a stale tab that
|
|
70
|
+
* registered the name while the real session held it keeps answering to it
|
|
71
|
+
* until its binding is pruned (2026-09-26: both daily sweeps parked on exactly
|
|
72
|
+
* that corpse while the live session was never probed). So this returns ALL
|
|
73
|
+
* same-name hits, a measured-Claude one first, and the caller works down the
|
|
74
|
+
* list until a session answers.
|
|
65
75
|
*/
|
|
66
|
-
export function
|
|
76
|
+
export function findSessionsForProject(project, sessions) {
|
|
67
77
|
// Exact and separator-folded only — never substring. A project called `sl`
|
|
68
78
|
// would otherwise match any session whose title contains those letters, and
|
|
69
79
|
// here a wrong match does not spawn, it delivers work to the wrong session.
|
|
70
|
-
|
|
71
|
-
|
|
80
|
+
return matchAllSessions([project.displayName, project.name, project.slug, ...project.names], sessions, {
|
|
81
|
+
kinds: ["exact", "normalised"],
|
|
82
|
+
// A measured Claude pane outranks a measured shell; no measurement is a
|
|
83
|
+
// tie broken by enumeration order, which is the old single-hit behavior.
|
|
84
|
+
prefer: (s) => (s.isClaude === true ? 2 : s.isClaude === false ? 0 : 1),
|
|
85
|
+
}).map((h) => ({ id: h.session.id, label: h.label }));
|
|
86
|
+
}
|
|
87
|
+
/** The single best session for `project` — see findSessionsForProject. */
|
|
88
|
+
export function findSessionForProject(project, sessions) {
|
|
89
|
+
return findSessionsForProject(project, sessions)[0] ?? null;
|
|
72
90
|
}
|
|
73
91
|
/** Enumerate live sessions with their persistent (PAI) names resolved. */
|
|
74
92
|
function liveSessions() {
|
|
@@ -78,6 +96,7 @@ function liveSessions() {
|
|
|
78
96
|
id: s.id,
|
|
79
97
|
name: s.name,
|
|
80
98
|
paiName: lookupPersistentName(persistent, s.id, s.aibrokerId),
|
|
99
|
+
isClaude: s.isClaude,
|
|
81
100
|
}));
|
|
82
101
|
}
|
|
83
102
|
/**
|
|
@@ -158,6 +177,7 @@ export async function submitAndConfirm(sessionId, body, timeoutMs, io = realIO,
|
|
|
158
177
|
const realDeps = {
|
|
159
178
|
resolve: findCuratedPaiProject,
|
|
160
179
|
sessions: liveSessions,
|
|
180
|
+
sessionsReliable: wasLastEnumerationReliable,
|
|
161
181
|
deliver: submitAndConfirm,
|
|
162
182
|
capture: (id) => realIO.capture(id),
|
|
163
183
|
now: () => Date.now(),
|
|
@@ -197,7 +217,8 @@ export async function dispatch(projectName, message, opts = {}, deps = realDeps)
|
|
|
197
217
|
const label = project.displayName || project.name;
|
|
198
218
|
const body = `${opts.prefix ?? TASK_PREFIX} ${message}`;
|
|
199
219
|
// ── already running? ──
|
|
200
|
-
const
|
|
220
|
+
const candidates = findSessionsForProject(project, deps.sessions());
|
|
221
|
+
const existing = candidates[0] ?? null;
|
|
201
222
|
if (existing) {
|
|
202
223
|
if (left() <= 0) {
|
|
203
224
|
return {
|
|
@@ -213,29 +234,65 @@ export async function dispatch(projectName, message, opts = {}, deps = realDeps)
|
|
|
213
234
|
// EXECUTES what it is sent. Task bodies are multi-line and full of
|
|
214
235
|
// backticks, so this is the difference between a failed delivery and
|
|
215
236
|
// running fragments of a task description as commands.
|
|
216
|
-
|
|
217
|
-
|
|
237
|
+
//
|
|
238
|
+
// Several sessions can answer to one name (a stale tab that stole it, a
|
|
239
|
+
// leftover binding), and on 2026-09-26/27 the first one being a corpse was
|
|
240
|
+
// read as the name itself being dead — the caller parked both daily sweeps
|
|
241
|
+
// while the live holder of the name was never probed. So EVERY same-name
|
|
242
|
+
// session is probed and the first one showing a live Claude takes the work;
|
|
243
|
+
// only "none of them is running Claude" is the final verdict.
|
|
244
|
+
let ready = null;
|
|
245
|
+
let sawShell = null;
|
|
246
|
+
for (const c of candidates) {
|
|
247
|
+
const frame = deps.capture(c.id);
|
|
248
|
+
if (frame === null)
|
|
249
|
+
continue; // unreadable: not evidence either way
|
|
250
|
+
if (isClaudeReady(frame)) {
|
|
251
|
+
ready = c;
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
sawShell ??= c;
|
|
255
|
+
}
|
|
256
|
+
if (!ready && sawShell) {
|
|
218
257
|
return {
|
|
219
258
|
outcome: "unreachable",
|
|
220
259
|
project: label,
|
|
221
|
-
session:
|
|
222
|
-
reason: `Session "${
|
|
223
|
-
`prompt. Nothing was sent, because a shell would execute the message rather than read it
|
|
260
|
+
session: sawShell.label,
|
|
261
|
+
reason: `Session "${sawShell.label}" is no longer running Claude — its terminal is at a shell ` +
|
|
262
|
+
`prompt. Nothing was sent, because a shell would execute the message rather than read it.` +
|
|
263
|
+
(candidates.length > 1
|
|
264
|
+
? ` All ${candidates.length} sessions answering to "${existing.label}" were probed; none is running Claude.`
|
|
265
|
+
: ""),
|
|
224
266
|
};
|
|
225
267
|
}
|
|
268
|
+
// Every probe unreadable: fall through and attempt delivery to the first
|
|
269
|
+
// candidate, as the single-hit guard always did — its own unreadable
|
|
270
|
+
// outcome is the honest report then.
|
|
271
|
+
const target = ready ?? existing;
|
|
272
|
+
// Write-ahead: a record on disk BEFORE the type, not after. `queued` means
|
|
273
|
+
// the text left our hands for Claude Code's own in-terminal queue, which we
|
|
274
|
+
// cannot see into — if that queue drops it (pane closed, session killed
|
|
275
|
+
// mid-turn, daemon restarted and nobody re-checked) there was previously
|
|
276
|
+
// NOTHING anywhere recording that this dispatch ever happened. Deleted
|
|
277
|
+
// below the moment delivery is actually confirmed; kept otherwise so
|
|
278
|
+
// redriveQueuedDispatches() has something to find.
|
|
279
|
+
const queuedRecordPath = writeQueuedRecord(projectName, label, message, opts.prefix, opts.redriveCount);
|
|
226
280
|
// One attempt, never three. The text is already in a live session's input
|
|
227
281
|
// box; typing it again does not retry, it duplicates — one trigger became
|
|
228
282
|
// three full job sweeps on 2026-08-01. Retries belong to the spawn path
|
|
229
283
|
// below, where an earlier attempt may genuinely never have landed.
|
|
230
|
-
const res = await deps.deliver(
|
|
284
|
+
const res = await deps.deliver(target.id, body, deliverTimeoutMs(), undefined, 1);
|
|
231
285
|
if (res === "ok") {
|
|
232
|
-
|
|
286
|
+
deleteQueuedRecord(queuedRecordPath);
|
|
287
|
+
return { outcome: "delivered", project: label, session: target.label, reason: "" };
|
|
233
288
|
}
|
|
234
289
|
if (res === "unreadable") {
|
|
290
|
+
// Never typed — nothing was queued anywhere, so there is nothing to redrive.
|
|
291
|
+
deleteQueuedRecord(queuedRecordPath);
|
|
235
292
|
return {
|
|
236
293
|
outcome: "unreachable",
|
|
237
294
|
project: label,
|
|
238
|
-
session:
|
|
295
|
+
session: target.label,
|
|
239
296
|
reason: `Live session found but ${ackReason(res)}.`,
|
|
240
297
|
};
|
|
241
298
|
}
|
|
@@ -247,9 +304,27 @@ export async function dispatch(projectName, message, opts = {}, deps = realDeps)
|
|
|
247
304
|
return {
|
|
248
305
|
outcome: "queued",
|
|
249
306
|
project: label,
|
|
250
|
-
session:
|
|
251
|
-
reason: `Typed into live session "${
|
|
252
|
-
`within the window. This is delivery, not failure — do NOT retry
|
|
307
|
+
session: target.label,
|
|
308
|
+
reason: `Typed into live session "${target.label}", which was still working and had not read it ` +
|
|
309
|
+
`within the window. This is delivery, not failure — do NOT retry. Recorded at ${queuedRecordPath} ` +
|
|
310
|
+
`in case it turns out to have been lost; redriven once on the next daemon start.`,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
// Enumeration itself may have failed rather than truthfully found nothing —
|
|
314
|
+
// an osascript hiccup returns `[]` indistinguishable from an empty machine.
|
|
315
|
+
// Reading that as "target absent" spawns a session next to one that already
|
|
316
|
+
// exists, or — worse — the write for that spawn can land on whatever pane
|
|
317
|
+
// happened to be current, which is exactly how a launch command ends up
|
|
318
|
+
// typed into a live Claude pane instead of a fresh shell. Unknown is not
|
|
319
|
+
// absent: report it as a transient failure so the caller retries instead of
|
|
320
|
+
// either giving up (`unlaunchable`) or launching blind.
|
|
321
|
+
if (!deps.sessionsReliable()) {
|
|
322
|
+
return {
|
|
323
|
+
outcome: "unreachable",
|
|
324
|
+
project: label,
|
|
325
|
+
session: "",
|
|
326
|
+
reason: `Session enumeration failed, so whether "${label}" already has a live session could not be ` +
|
|
327
|
+
`confirmed. Not launching one on an unverified "no session" — retry once enumeration recovers.`,
|
|
253
328
|
};
|
|
254
329
|
}
|
|
255
330
|
if (opts.noSpawn) {
|
|
@@ -404,4 +479,300 @@ function pruneWorkOrders(dir) {
|
|
|
404
479
|
// is a reason to skip the sweep, not to fail the work order.
|
|
405
480
|
}
|
|
406
481
|
}
|
|
482
|
+
const QUEUED_DIR = join(homedir(), ".aibroker", "queued-dispatches");
|
|
483
|
+
/** Persist a queued dispatch before it is typed. Returns the record's path. */
|
|
484
|
+
function writeQueuedRecord(project, label, message, prefix, redriveCount) {
|
|
485
|
+
const path = join(QUEUED_DIR, `${Date.now()}-${Math.random().toString(36).slice(2, 8)}.json`);
|
|
486
|
+
const record = { project, label, message, prefix, createdAt: Date.now() };
|
|
487
|
+
if (redriveCount !== undefined)
|
|
488
|
+
record.redriveCount = redriveCount;
|
|
489
|
+
try {
|
|
490
|
+
saveJson(path, record, { backup: false });
|
|
491
|
+
}
|
|
492
|
+
catch (err) {
|
|
493
|
+
log(`dispatch: could not persist queued-dispatch record for "${label}": ${err instanceof Error ? err.message : String(err)}`);
|
|
494
|
+
}
|
|
495
|
+
return path;
|
|
496
|
+
}
|
|
497
|
+
function deleteQueuedRecord(path) {
|
|
498
|
+
try {
|
|
499
|
+
unlinkSync(path);
|
|
500
|
+
}
|
|
501
|
+
catch { /* already gone, or never written */ }
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* How long a queued (typed-but-unacked) dispatch is left alone before it is
|
|
505
|
+
* treated as possibly lost. Long enough that a genuinely busy Claude turn has
|
|
506
|
+
* finished and consumed it — the sweeps this exists for run for minutes, not
|
|
507
|
+
* hours — short enough to catch a same-morning daemon restart like 2026-09-23's
|
|
508
|
+
* (07:37 dispatch, 07:42/07:44 restarts, never redriven because nothing
|
|
509
|
+
* persisted the attempt).
|
|
510
|
+
*/
|
|
511
|
+
const QUEUED_REDRIVE_GRACE_MS = 5 * 60 * 1000;
|
|
512
|
+
// ── was a queued dispatch in fact consumed? ────────────────────────────────
|
|
513
|
+
//
|
|
514
|
+
// Real fault, 2026-09-24: a dispatch typed into a busy session at 06:56 was
|
|
515
|
+
// read and handled by that session minutes later — it is in its transcript —
|
|
516
|
+
// but the queued record stayed on disk, because nothing marks a record
|
|
517
|
+
// consumed. Every daemon restart then re-typed the same message into the same
|
|
518
|
+
// session (the 11:02 restart delivered it a second time), and THAT delivery
|
|
519
|
+
// wrote its own record, so each restart meant one more duplicate, forever.
|
|
520
|
+
// The transcript is the ground truth of what a session actually received, so
|
|
521
|
+
// it is what decides whether a redrive is a recovery or a duplicate.
|
|
522
|
+
/**
|
|
523
|
+
* Substrings that identify `message` inside a transcript entry.
|
|
524
|
+
*
|
|
525
|
+
* Both ends, not just the head: a long body delivered into a busy input box
|
|
526
|
+
* can lose its head (measured 2026-09-24: ~700 of ~5000 chars survived, and
|
|
527
|
+
* they were the tail), so a head-only needle would miss exactly the deliveries
|
|
528
|
+
* that most need finding. Drawn from single lines and capped, so a needle
|
|
529
|
+
* never spans a newline.
|
|
530
|
+
*/
|
|
531
|
+
function transcriptNeedles(message) {
|
|
532
|
+
const lines = message.split("\n").map((l) => l.trim()).filter((l) => l.length > 0);
|
|
533
|
+
if (!lines.length)
|
|
534
|
+
return [];
|
|
535
|
+
return [...new Set([lines[0].slice(0, 80), lines[lines.length - 1].slice(-80)])];
|
|
536
|
+
}
|
|
537
|
+
/**
|
|
538
|
+
* Does the target project's transcript already hold this message?
|
|
539
|
+
*
|
|
540
|
+
* true — a user message created after the record contains a distinctive
|
|
541
|
+
* slice of it: the session received it, redelivering duplicates.
|
|
542
|
+
* false — transcript resolvable, message absent: a redrive is warranted.
|
|
543
|
+
* undefined — no transcript could be resolved (no curated project, no
|
|
544
|
+
* rootPath, no ~/.claude/projects dir for it): cannot tell.
|
|
545
|
+
*/
|
|
546
|
+
async function queuedDispatchConsumed(record, deps) {
|
|
547
|
+
if (typeof record.createdAt !== "number")
|
|
548
|
+
return undefined;
|
|
549
|
+
const needles = transcriptNeedles(record.message);
|
|
550
|
+
if (!needles.length)
|
|
551
|
+
return undefined;
|
|
552
|
+
const project = await deps.resolve(record.project).catch(() => undefined);
|
|
553
|
+
const rootPath = project?.rootPath;
|
|
554
|
+
if (!rootPath)
|
|
555
|
+
return undefined;
|
|
556
|
+
// Same encoding Claude Code uses for ~/.claude/projects/<dir>: every
|
|
557
|
+
// non-alphanumeric in the cwd becomes a dash — measured against real dirs
|
|
558
|
+
// ("/Users/x/.claude" -> "-Users-x--claude"). The five newest transcripts
|
|
559
|
+
// cover every session that could have consumed it recently.
|
|
560
|
+
const dir = join(homedir(), ".claude", "projects", rootPath.replace(/[^a-zA-Z0-9]/g, "-"));
|
|
561
|
+
let files;
|
|
562
|
+
try {
|
|
563
|
+
files = readdirSync(dir)
|
|
564
|
+
.filter((f) => f.endsWith(".jsonl"))
|
|
565
|
+
.map((f) => ({ f, m: statSync(join(dir, f)).mtimeMs }))
|
|
566
|
+
.sort((a, b) => b.m - a.m)
|
|
567
|
+
.slice(0, 5)
|
|
568
|
+
.map((e) => e.f);
|
|
569
|
+
}
|
|
570
|
+
catch {
|
|
571
|
+
return undefined;
|
|
572
|
+
}
|
|
573
|
+
if (!files.length)
|
|
574
|
+
return undefined;
|
|
575
|
+
// grep for the JSON-ESCAPED spelling: a needle containing a quote never
|
|
576
|
+
// appears verbatim in a JSONL line, only as its escaped form. Whole-file
|
|
577
|
+
// scans, because the consumed entry can sit far above a busy session's tail.
|
|
578
|
+
const patterns = needles.flatMap((n) => ["-e", JSON.stringify(n).slice(1, -1)]);
|
|
579
|
+
for (const f of files) {
|
|
580
|
+
let hits;
|
|
581
|
+
try {
|
|
582
|
+
hits = execFileSync("/usr/bin/grep", ["-F", ...patterns, join(dir, f)], {
|
|
583
|
+
encoding: "utf8",
|
|
584
|
+
timeout: 10_000,
|
|
585
|
+
maxBuffer: 32 * 1024 * 1024,
|
|
586
|
+
});
|
|
587
|
+
}
|
|
588
|
+
catch {
|
|
589
|
+
continue; // no match in this file (grep exits 1) — next transcript
|
|
590
|
+
}
|
|
591
|
+
for (const line of hits.split("\n")) {
|
|
592
|
+
if (!line.trim())
|
|
593
|
+
continue;
|
|
594
|
+
let entry;
|
|
595
|
+
try {
|
|
596
|
+
entry = JSON.parse(line);
|
|
597
|
+
}
|
|
598
|
+
catch {
|
|
599
|
+
continue; // truncated by a concurrent write — skip it
|
|
600
|
+
}
|
|
601
|
+
// Typed-in text only. Tool results are user-type entries too and can
|
|
602
|
+
// echo the body (a session reading the record file itself), which is
|
|
603
|
+
// a mention, not a delivery.
|
|
604
|
+
if (entry?.type !== "user")
|
|
605
|
+
continue;
|
|
606
|
+
const content = entry.message?.content;
|
|
607
|
+
const text = typeof content === "string"
|
|
608
|
+
? content
|
|
609
|
+
: Array.isArray(content)
|
|
610
|
+
? content.filter((c) => c?.type === "text").map((c) => c.text).join("\n")
|
|
611
|
+
: "";
|
|
612
|
+
if (!text)
|
|
613
|
+
continue;
|
|
614
|
+
const at = entry.timestamp ? Date.parse(entry.timestamp) : NaN;
|
|
615
|
+
if (Number.isNaN(at) || at < record.createdAt)
|
|
616
|
+
continue;
|
|
617
|
+
if (needles.some((n) => text.includes(n)))
|
|
618
|
+
return true;
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
return false;
|
|
622
|
+
}
|
|
623
|
+
// ── a queued todoist dispatch must still be current ─────────────────────────
|
|
624
|
+
//
|
|
625
|
+
// Real fault, 2026-09-24 (records 1790226222101/1790226253580): a dispatch sat
|
|
626
|
+
// queued for 4h and was then re-driven, long after the run it asked for had
|
|
627
|
+
// happened and been completed. A todoist dispatch's `[todoist:<id>` trailer
|
|
628
|
+
// names the task it came from, and that task says whether the order is still
|
|
629
|
+
// wanted: unfetchable means the trigger is closed, and a due date moved far
|
|
630
|
+
// past the queueing moment means the occurrence was completed since.
|
|
631
|
+
/** How far the due date may legitimately sit past queueing: a trigger fires ON its due time, so anything further is a new occurrence. */
|
|
632
|
+
const REDRIVE_DUE_TOLERANCE_MS = 60 * 60 * 1000;
|
|
633
|
+
const TODOIST_TRAILER = /\[todoist:(\d+)(?:\s+in:[^\]]*)?\]/;
|
|
634
|
+
/**
|
|
635
|
+
* Why this record's todoist task makes a redrive stale, or undefined when the
|
|
636
|
+
* dispatch is still current — or cannot be judged, which must NOT drop it.
|
|
637
|
+
*/
|
|
638
|
+
async function staleTodoistTrailer(record, fetchImpl) {
|
|
639
|
+
const taskId = TODOIST_TRAILER.exec(record.message)?.[1];
|
|
640
|
+
if (!taskId)
|
|
641
|
+
return undefined;
|
|
642
|
+
try {
|
|
643
|
+
const { fetchParentTask } = await import("./todoist-reply.js");
|
|
644
|
+
const parent = await fetchParentTask(taskId, fetchImpl);
|
|
645
|
+
const due = parent.due?.date ? Date.parse(parent.due.date) : NaN;
|
|
646
|
+
if (Number.isFinite(due) && due > record.createdAt + REDRIVE_DUE_TOLERANCE_MS) {
|
|
647
|
+
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`;
|
|
648
|
+
}
|
|
649
|
+
return undefined;
|
|
650
|
+
}
|
|
651
|
+
catch (err) {
|
|
652
|
+
// A fetch that never got an answer says nothing about the task: keep the
|
|
653
|
+
// record. Only a definitive "gone" (404/401/…, per the webhook's own
|
|
654
|
+
// transient/permanent classifier) is evidence the trigger is closed.
|
|
655
|
+
const { isTransientTodoistError } = await import("./todoist-webhook.js");
|
|
656
|
+
if (isTransientTodoistError(err))
|
|
657
|
+
return undefined;
|
|
658
|
+
return `task ${taskId} is no longer fetchable (${err instanceof Error ? err.message : String(err)}) — closed since the dispatch was queued`;
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* Re-attempt every queued dispatch still on disk from before this start.
|
|
663
|
+
* Call once, at daemon startup.
|
|
664
|
+
*
|
|
665
|
+
* Not provably exactly-once: if the original typed input was in fact consumed
|
|
666
|
+
* moments after its own delivery window closed, this can deliver a second
|
|
667
|
+
* copy — the same risk `dispatch()`'s single-attempt rule accepts for a normal
|
|
668
|
+
* retry. The alternative is what actually happened: a dispatch typed into a
|
|
669
|
+
* live session, never run, nothing anywhere to say so, and no way to recover
|
|
670
|
+
* it. A record aged past the grace period is stronger evidence of loss than of
|
|
671
|
+
* a slow turn.
|
|
672
|
+
*
|
|
673
|
+
* Bounded, not a retry loop: a record whose todoist task has since closed or
|
|
674
|
+
* completed is dropped as stale, a record whose transcript shows the session
|
|
675
|
+
* already received it is deleted as consumed, a record that has already had
|
|
676
|
+
* its one redrive is dropped without sending, and whatever this pass leaves
|
|
677
|
+
* behind (still `queued`, `unreachable`, `unlaunchable`) is dropped after one
|
|
678
|
+
* audited attempt rather than kept for the next restart, so a daemon that
|
|
679
|
+
* restarts repeatedly cannot turn this into a duplicate-dispatch storm.
|
|
680
|
+
*/
|
|
681
|
+
export async function redriveQueuedDispatches(deps = realDeps) {
|
|
682
|
+
let names;
|
|
683
|
+
try {
|
|
684
|
+
names = readdirSync(QUEUED_DIR).filter((n) => n.endsWith(".json"));
|
|
685
|
+
}
|
|
686
|
+
catch {
|
|
687
|
+
return; // directory does not exist yet — nothing was ever queued
|
|
688
|
+
}
|
|
689
|
+
const cutoff = Date.now() - QUEUED_REDRIVE_GRACE_MS;
|
|
690
|
+
for (const name of names) {
|
|
691
|
+
const path = join(QUEUED_DIR, name);
|
|
692
|
+
let record;
|
|
693
|
+
try {
|
|
694
|
+
if (statSync(path).mtimeMs >= cutoff)
|
|
695
|
+
continue; // still inside its own delivery window
|
|
696
|
+
const loaded = loadJson(path);
|
|
697
|
+
if (loaded.status !== "ok") {
|
|
698
|
+
deleteQueuedRecord(path);
|
|
699
|
+
continue;
|
|
700
|
+
}
|
|
701
|
+
record = loaded.data;
|
|
702
|
+
}
|
|
703
|
+
catch {
|
|
704
|
+
continue;
|
|
705
|
+
}
|
|
706
|
+
// Second generation, one chance only. This record was written BY a redrive
|
|
707
|
+
// whose transcript could not be checked; sending it again would make every
|
|
708
|
+
// restart one more duplicate of the same work order.
|
|
709
|
+
if ((record.redriveCount ?? 0) >= 1) {
|
|
710
|
+
log(`dispatch: dropping queued dispatch for "${record.label}" — already redriven once ` +
|
|
711
|
+
`(from ${new Date(record.createdAt).toISOString()}) and never confirmed, not sending it again`);
|
|
712
|
+
audit({
|
|
713
|
+
action: "dispatch-redrive",
|
|
714
|
+
actor: "aibroker:daemon-start",
|
|
715
|
+
target: record.project,
|
|
716
|
+
outcome: "dropped",
|
|
717
|
+
body: record.message,
|
|
718
|
+
reason: "already redriven once and never confirmed — dropped rather than risk another duplicate",
|
|
719
|
+
meta: { project: record.project, originallyQueuedAt: record.createdAt, redriveCount: record.redriveCount },
|
|
720
|
+
});
|
|
721
|
+
deleteQueuedRecord(path);
|
|
722
|
+
continue;
|
|
723
|
+
}
|
|
724
|
+
// Still current? A todoist-trailer dispatch names its task; if that task
|
|
725
|
+
// has since been completed (due advanced) or closed, re-driving would
|
|
726
|
+
// resurrect a run that already happened. Checked before the transcript
|
|
727
|
+
// scan: one task lookup is cheaper than grepping five transcripts, and it
|
|
728
|
+
// answers first when both would apply.
|
|
729
|
+
const stale = await staleTodoistTrailer(record, deps.todoistFetch ?? fetch);
|
|
730
|
+
if (stale) {
|
|
731
|
+
log(`dispatch: dropping queued dispatch for "${record.label}" — ${stale}`);
|
|
732
|
+
audit({
|
|
733
|
+
action: "dispatch-redrive",
|
|
734
|
+
actor: "aibroker:daemon-start",
|
|
735
|
+
target: record.project,
|
|
736
|
+
outcome: "dropped",
|
|
737
|
+
body: record.message,
|
|
738
|
+
reason: stale,
|
|
739
|
+
meta: { project: record.project, originallyQueuedAt: record.createdAt },
|
|
740
|
+
});
|
|
741
|
+
deleteQueuedRecord(path);
|
|
742
|
+
continue;
|
|
743
|
+
}
|
|
744
|
+
// Consumed already? The transcript says whether the session ever read it.
|
|
745
|
+
const consumed = await queuedDispatchConsumed(record, deps);
|
|
746
|
+
if (consumed) {
|
|
747
|
+
log(`dispatch: queued dispatch for "${record.label}" already consumed, not redriving`);
|
|
748
|
+
audit({
|
|
749
|
+
action: "dispatch-redrive",
|
|
750
|
+
actor: "aibroker:daemon-start",
|
|
751
|
+
target: record.project,
|
|
752
|
+
outcome: "consumed",
|
|
753
|
+
body: record.message,
|
|
754
|
+
reason: "found in the target project's transcript after the record was written — the first delivery landed",
|
|
755
|
+
meta: { project: record.project, originallyQueuedAt: record.createdAt },
|
|
756
|
+
});
|
|
757
|
+
deleteQueuedRecord(path);
|
|
758
|
+
continue;
|
|
759
|
+
}
|
|
760
|
+
log(`dispatch: redriving queued dispatch for "${record.label}" left over from ` +
|
|
761
|
+
`${new Date(record.createdAt).toISOString()} (${path})`);
|
|
762
|
+
const result = await dispatch(record.project, record.message, { prefix: record.prefix, redriveCount: 1 }, deps);
|
|
763
|
+
audit({
|
|
764
|
+
action: "dispatch-redrive",
|
|
765
|
+
actor: "aibroker:daemon-start",
|
|
766
|
+
target: result.session || record.project,
|
|
767
|
+
outcome: result.outcome,
|
|
768
|
+
body: record.message,
|
|
769
|
+
reason: result.reason || undefined,
|
|
770
|
+
meta: { project: result.project, originallyQueuedAt: record.createdAt },
|
|
771
|
+
});
|
|
772
|
+
// Delete unconditionally: `delivered`/`spawned` need no further record, and
|
|
773
|
+
// a fresh `queued` result already wrote ITS OWN record above — marked
|
|
774
|
+
// redriveCount so the next start drops it instead of redelivering.
|
|
775
|
+
deleteQueuedRecord(path);
|
|
776
|
+
}
|
|
777
|
+
}
|
|
407
778
|
//# 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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"}
|
package/dist/daemon/inbound.d.ts
CHANGED
|
@@ -185,6 +185,8 @@ export interface DeliveryResult {
|
|
|
185
185
|
ok: boolean;
|
|
186
186
|
/** What happened, for the audit trail and the caller's 200 body. */
|
|
187
187
|
detail: string;
|
|
188
|
+
/** Set when the failure is an absent owner session — queue it, don't give up. */
|
|
189
|
+
retry?: boolean;
|
|
188
190
|
}
|
|
189
191
|
/**
|
|
190
192
|
* Record that this machine just wrote to an issue, so its echo can be known.
|
|
@@ -217,4 +219,6 @@ export declare function shouldIgnore(route: InboundRoute, payload: unknown): str
|
|
|
217
219
|
*/
|
|
218
220
|
export declare function isTrusted(route: InboundRoute, payload: unknown): boolean;
|
|
219
221
|
export declare function deliverInbound(route: InboundRoute, payload: unknown): Promise<DeliveryResult>;
|
|
222
|
+
/** For tests: run one retry pass immediately, without waiting for the timer. */
|
|
223
|
+
export declare function __retryPendingNow(): Promise<void>;
|
|
220
224
|
//# sourceMappingURL=inbound.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../src/daemon/inbound.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../src/daemon/inbound.ts"],"names":[],"mappings":"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"}
|