aibroker 0.23.1 → 0.25.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/daemon/sessions.d.ts +11 -0
- package/dist/daemon/sessions.d.ts.map +1 -1
- package/dist/daemon/sessions.js +75 -1
- package/dist/daemon/sessions.js.map +1 -1
- package/hooks/aibroker-hook-lib.mjs +223 -0
- package/hooks/aibroker-progress.mjs +53 -0
- package/hooks/aibroker-route-guard.mjs +62 -0
- package/hooks/drain-mailbox.mjs +93 -0
- package/package.json +3 -2
|
@@ -5,6 +5,17 @@ interface Entry {
|
|
|
5
5
|
lastSeen?: string;
|
|
6
6
|
/** ISO timestamp of the first snapshot that ever saw it. */
|
|
7
7
|
addedAt?: string;
|
|
8
|
+
/**
|
|
9
|
+
* The cwd was set deliberately and must not be overwritten by a sighting.
|
|
10
|
+
*
|
|
11
|
+
* A session's live directory is where it happens to be running, which is not
|
|
12
|
+
* always where it belongs: Solar was started in the home directory and later
|
|
13
|
+
* repointed at its real project. Without this the next snapshot sees the live
|
|
14
|
+
* process still in `~`, fails to match the corrected entry — the key is
|
|
15
|
+
* name+cwd — and adds a SECOND Solar. The correction would undo itself within
|
|
16
|
+
* five minutes, with nothing reporting that it had.
|
|
17
|
+
*/
|
|
18
|
+
pinned?: boolean;
|
|
8
19
|
}
|
|
9
20
|
/**
|
|
10
21
|
* Union `fresh` (what is open right now) into `existing` (the restore list).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/daemon/sessions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/daemon/sessions.ts"],"names":[],"mappings":"AAoDA,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAyHD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,CA0BpF;AAiHD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAErE,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACvC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjD;AAED,eAAO,MAAM,OAAO,MAAM,CAAC;AAC3B,uEAAuE;AACvE,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,oFAAoF;AACpF,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC5C,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,SAAS,CAAC,CAoCpB;AA+JD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAU/D"}
|
package/dist/daemon/sessions.js
CHANGED
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
* checkpoint [--message M] [--only NAME] [--dry-run] [--timeout S]
|
|
25
25
|
* ask each to save state, VERIFIED
|
|
26
26
|
* list [--verbose] show the manifest
|
|
27
|
+
* repoint NAME PATH set where a session should reopen
|
|
27
28
|
* forget NAME drop an entry
|
|
28
29
|
* prune [--older-than DAYS] [--dry-run] drop entries not seen in a while
|
|
29
30
|
* install | uninstall manage the 5-min snapshot LaunchAgent
|
|
@@ -31,7 +32,7 @@
|
|
|
31
32
|
import { execFileSync, execSync } from "node:child_process";
|
|
32
33
|
import { writeFileSync, readFileSync, existsSync, mkdirSync, copyFileSync } from "node:fs";
|
|
33
34
|
import { homedir } from "node:os";
|
|
34
|
-
import { join, basename, dirname } from "node:path";
|
|
35
|
+
import { join, basename, dirname, resolve } from "node:path";
|
|
35
36
|
import { createHash } from "node:crypto";
|
|
36
37
|
import { WatcherClient } from "../ipc/client.js";
|
|
37
38
|
import { captureSession, typeIntoSession } from "../transport/sync-facade.js";
|
|
@@ -181,7 +182,23 @@ export function mergeEntries(existing, fresh, now) {
|
|
|
181
182
|
const pending = new Map();
|
|
182
183
|
for (const e of fresh)
|
|
183
184
|
pending.set(keyOf(e.name, e.cwd), e);
|
|
185
|
+
// A pinned entry answers to its NAME, not to name+cwd. Its whole purpose is
|
|
186
|
+
// that the live directory disagrees with the intended one, so keying on cwd
|
|
187
|
+
// would never match and the sighting would arrive as a duplicate.
|
|
188
|
+
const pinnedByName = new Map();
|
|
189
|
+
for (const e of existing)
|
|
190
|
+
if (e.pinned)
|
|
191
|
+
pinnedByName.set(e.name, e);
|
|
192
|
+
for (const [k, f] of [...pending]) {
|
|
193
|
+
if (pinnedByName.has(f.name))
|
|
194
|
+
pending.delete(k);
|
|
195
|
+
}
|
|
184
196
|
const merged = existing.map((e) => {
|
|
197
|
+
if (e.pinned) {
|
|
198
|
+
// Seen or not, the recorded cwd stands. Only the sighting is recorded.
|
|
199
|
+
const seen = fresh.some((f) => f.name === e.name);
|
|
200
|
+
return seen ? { ...e, lastSeen: now } : e;
|
|
201
|
+
}
|
|
185
202
|
const k = keyOf(e.name, e.cwd);
|
|
186
203
|
if (!pending.has(k))
|
|
187
204
|
return e; // not open now — keep it; that IS the point
|
|
@@ -192,6 +209,47 @@ export function mergeEntries(existing, fresh, now) {
|
|
|
192
209
|
merged.push(e);
|
|
193
210
|
return merged;
|
|
194
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Point a session at where it belongs, and hold it there.
|
|
214
|
+
*
|
|
215
|
+
* The live directory is where a session happens to be running. Solar was
|
|
216
|
+
* started in the home directory and later given a real project, and every
|
|
217
|
+
* snapshot would otherwise have re-added it at `~` — the correction undoing
|
|
218
|
+
* itself within five minutes, silently, which is the failure this whole
|
|
219
|
+
* manifest was written to avoid.
|
|
220
|
+
*/
|
|
221
|
+
function doRepoint(name, dir) {
|
|
222
|
+
const resolved = resolve(dir);
|
|
223
|
+
if (!existsSync(resolved)) {
|
|
224
|
+
console.error(`No such directory: ${resolved}`);
|
|
225
|
+
console.error("Refusing to point a session at a path that does not exist — a restore would");
|
|
226
|
+
console.error("open a tab in the wrong place and look like it worked.");
|
|
227
|
+
process.exit(1);
|
|
228
|
+
}
|
|
229
|
+
const manifest = readManifest();
|
|
230
|
+
let entries = manifest.entries;
|
|
231
|
+
const matches = entries.filter((e) => e.name === name);
|
|
232
|
+
if (matches.length === 0) {
|
|
233
|
+
console.error(`No session named "${name}" in the manifest.`);
|
|
234
|
+
console.error(`Known: ${entries.map((e) => e.name).join(", ") || "(none)"}`);
|
|
235
|
+
process.exit(1);
|
|
236
|
+
}
|
|
237
|
+
// More than one entry can share a name when the same session has been seen at
|
|
238
|
+
// different paths — exactly the state this command exists to clean up.
|
|
239
|
+
const kept = matches[0];
|
|
240
|
+
const dropped = matches.slice(1);
|
|
241
|
+
const before = kept.cwd;
|
|
242
|
+
kept.cwd = resolved;
|
|
243
|
+
kept.pinned = true;
|
|
244
|
+
if (dropped.length) {
|
|
245
|
+
entries = entries.filter((e) => e === kept || e.name !== name);
|
|
246
|
+
}
|
|
247
|
+
writeManifest(entries);
|
|
248
|
+
console.log(`${name}: ${before} -> ${resolved}`);
|
|
249
|
+
console.log("Pinned — snapshots will record that it was seen without moving it back.");
|
|
250
|
+
for (const d of dropped)
|
|
251
|
+
console.log(` dropped a duplicate entry at ${d.cwd}`);
|
|
252
|
+
}
|
|
195
253
|
function ago(iso) {
|
|
196
254
|
if (!iso)
|
|
197
255
|
return "never";
|
|
@@ -492,6 +550,7 @@ function usage() {
|
|
|
492
550
|
for each to finish (default message: "pause session",
|
|
493
551
|
default timeout: 120s per session)
|
|
494
552
|
list [--verbose] show the current manifest
|
|
553
|
+
repoint NAME PATH set where a session should reopen
|
|
495
554
|
forget NAME drop an entry from the manifest
|
|
496
555
|
prune [--older-than DAYS] [--dry-run] drop entries not seen in DAYS (default ${DEFAULT_PRUNE_DAYS})
|
|
497
556
|
install | uninstall manage the 5-min auto-snapshot LaunchAgent (${AGENT_LABEL})
|
|
@@ -564,6 +623,21 @@ async function dispatch(args) {
|
|
|
564
623
|
}
|
|
565
624
|
break;
|
|
566
625
|
}
|
|
626
|
+
case "repoint": {
|
|
627
|
+
const args = rest.filter((a) => !a.startsWith("--"));
|
|
628
|
+
const [name, ...pathParts] = args;
|
|
629
|
+
const dir = pathParts.join(" ");
|
|
630
|
+
if (!name || !dir) {
|
|
631
|
+
console.error("Usage: aibroker sessions repoint NAME /path/to/project");
|
|
632
|
+
console.error("");
|
|
633
|
+
console.error("Sets where a session should be REOPENED, which is not always where it");
|
|
634
|
+
console.error("happens to be running. The entry is pinned, so a snapshot records that");
|
|
635
|
+
console.error("it was seen without moving it back.");
|
|
636
|
+
process.exit(1);
|
|
637
|
+
}
|
|
638
|
+
doRepoint(name, dir);
|
|
639
|
+
break;
|
|
640
|
+
}
|
|
567
641
|
case "forget": {
|
|
568
642
|
const name = rest.find((a) => !a.startsWith("--"));
|
|
569
643
|
if (!name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/daemon/sessions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/daemon/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* aibroker-hook-lib.mjs — shared helpers for AIBroker Claude Code hooks.
|
|
3
|
+
*
|
|
4
|
+
* These hooks make channel routing DETERMINISTIC instead of relying on the LLM
|
|
5
|
+
* to remember to call pailot_tts / pailot_send. They are pure IPC clients:
|
|
6
|
+
* they talk to the running AIBroker daemon over /tmp/aibroker.sock using the
|
|
7
|
+
* exact same wire protocol as src/ipc/client.ts — no daemon changes required.
|
|
8
|
+
*
|
|
9
|
+
* Everything here is defensive: any failure resolves to a safe no-op so a hook
|
|
10
|
+
* can never block or crash a Claude Code turn.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { connect } from "node:net";
|
|
14
|
+
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
15
|
+
import { randomUUID, createHash } from "node:crypto";
|
|
16
|
+
import { tmpdir } from "node:os";
|
|
17
|
+
import { join } from "node:path";
|
|
18
|
+
|
|
19
|
+
export const AIBROKER_SOCKET = "/tmp/aibroker.sock";
|
|
20
|
+
const IPC_TIMEOUT_MS = 8_000;
|
|
21
|
+
|
|
22
|
+
// ── stdin / hook payload ──────────────────────────────────────────────────
|
|
23
|
+
|
|
24
|
+
/** Read all of stdin as a string. */
|
|
25
|
+
export async function readStdin() {
|
|
26
|
+
let input = "";
|
|
27
|
+
const decoder = new TextDecoder();
|
|
28
|
+
try {
|
|
29
|
+
for await (const chunk of process.stdin) {
|
|
30
|
+
input += decoder.decode(chunk, { stream: true });
|
|
31
|
+
}
|
|
32
|
+
} catch {
|
|
33
|
+
/* ignore */
|
|
34
|
+
}
|
|
35
|
+
return input;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Parse the Claude Code hook payload (Stop / PreToolUse share these fields). */
|
|
39
|
+
export function parseHookInput(raw) {
|
|
40
|
+
try {
|
|
41
|
+
const p = JSON.parse(raw);
|
|
42
|
+
return {
|
|
43
|
+
transcriptPath: p.transcript_path ?? "",
|
|
44
|
+
cwd: p.cwd ?? process.cwd(),
|
|
45
|
+
sessionId: p.session_id ?? "",
|
|
46
|
+
toolName: p.tool_name ?? "",
|
|
47
|
+
toolInput: p.tool_input ?? {},
|
|
48
|
+
stopHookActive: p.stop_hook_active === true,
|
|
49
|
+
};
|
|
50
|
+
} catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// ── transcript parsing ────────────────────────────────────────────────────
|
|
56
|
+
|
|
57
|
+
export function readTranscriptLines(path) {
|
|
58
|
+
try {
|
|
59
|
+
return readFileSync(path, "utf-8").trim().split("\n");
|
|
60
|
+
} catch {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function parseLine(line) {
|
|
66
|
+
try {
|
|
67
|
+
return JSON.parse(line);
|
|
68
|
+
} catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Return the text blocks of a message's content as a string array.
|
|
75
|
+
* String content → [string]. Array content → the `text` blocks only
|
|
76
|
+
* (tool_use / tool_result / image blocks are ignored).
|
|
77
|
+
*/
|
|
78
|
+
function textBlocks(content) {
|
|
79
|
+
if (typeof content === "string") return content.trim() ? [content] : [];
|
|
80
|
+
if (Array.isArray(content)) {
|
|
81
|
+
const out = [];
|
|
82
|
+
for (const c of content) {
|
|
83
|
+
if (typeof c === "string" && c.trim()) out.push(c);
|
|
84
|
+
else if (c && c.type === "text" && typeof c.text === "string" && c.text.trim()) out.push(c.text);
|
|
85
|
+
}
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Find the MOST RECENT genuine human prompt (a user-role message that carries
|
|
93
|
+
* real text, not a bare tool_result). Returns { index, blocks } or null.
|
|
94
|
+
*
|
|
95
|
+
* Only the latest human prompt decides routing — this enforces per-message
|
|
96
|
+
* independence (an earlier PAILot turn must not affect a later terminal turn).
|
|
97
|
+
*/
|
|
98
|
+
export function findLastHumanPrompt(lines) {
|
|
99
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
100
|
+
const e = parseLine(lines[i]);
|
|
101
|
+
if (!e || e.type !== "user" || e.message?.role !== "user") continue;
|
|
102
|
+
const blocks = textBlocks(e.message.content);
|
|
103
|
+
if (blocks.length > 0) return { index: i, blocks };
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const PREFIX_RE = /^\s*\[(PAILot|Whazaa|Telex)(:voice)?\]/i;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Detect a channel prefix, anchored to the START of a text block. AIBroker
|
|
112
|
+
* string-prepends the prefix (e.g. "[PAILot:voice] …"), so anchoring means a
|
|
113
|
+
* terminal message that merely *mentions* the token cannot trigger delivery.
|
|
114
|
+
* Returns { channel: 'pailot'|'whazaa'|'telex', voice: boolean } or null.
|
|
115
|
+
*/
|
|
116
|
+
export function detectChannel(blocks) {
|
|
117
|
+
for (const b of blocks) {
|
|
118
|
+
const m = b.match(PREFIX_RE);
|
|
119
|
+
if (m) return { channel: m[1].toLowerCase(), voice: !!m[2] };
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Scan the current turn (lines AFTER the prompt) for which reply tools the
|
|
126
|
+
* assistant actually called. Matches by tool-name substring so it works for the
|
|
127
|
+
* fully-qualified MCP names (e.g. "mcp__aibroker__pailot_tts").
|
|
128
|
+
*/
|
|
129
|
+
export function scanReplyTools(lines, fromIdx) {
|
|
130
|
+
let tts = false;
|
|
131
|
+
let send = false;
|
|
132
|
+
for (let i = fromIdx + 1; i < lines.length; i++) {
|
|
133
|
+
const e = parseLine(lines[i]);
|
|
134
|
+
if (!e || e.type !== "assistant" || !Array.isArray(e.message?.content)) continue;
|
|
135
|
+
for (const c of e.message.content) {
|
|
136
|
+
if (c && c.type === "tool_use" && typeof c.name === "string") {
|
|
137
|
+
if (c.name.includes("pailot_tts")) tts = true;
|
|
138
|
+
if (c.name.includes("pailot_send")) send = true;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return { tts, send };
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/** The last non-empty assistant text in the current turn (the final answer). */
|
|
146
|
+
export function lastAssistantText(lines, fromIdx) {
|
|
147
|
+
for (let i = lines.length - 1; i > fromIdx; i--) {
|
|
148
|
+
const e = parseLine(lines[i]);
|
|
149
|
+
if (!e || e.type !== "assistant") continue;
|
|
150
|
+
const blocks = textBlocks(e.message?.content);
|
|
151
|
+
if (blocks.length > 0) return blocks.join("\n\n").trim();
|
|
152
|
+
}
|
|
153
|
+
return "";
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// ── IPC to the AIBroker daemon ────────────────────────────────────────────
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Call a daemon method over the Unix socket. Mirrors src/ipc/client.ts framing
|
|
160
|
+
* (one JSON line in, one JSON line out). Passes through the terminal's session
|
|
161
|
+
* identifiers so the daemon can resolve the correct target session. Resolves
|
|
162
|
+
* { ok, result?, error? }; never rejects.
|
|
163
|
+
*/
|
|
164
|
+
export function ipcCall(method, params) {
|
|
165
|
+
return new Promise((resolve) => {
|
|
166
|
+
let done = false;
|
|
167
|
+
let buffer = "";
|
|
168
|
+
let timer = null;
|
|
169
|
+
const finish = (v) => {
|
|
170
|
+
if (done) return;
|
|
171
|
+
done = true;
|
|
172
|
+
if (timer) clearTimeout(timer);
|
|
173
|
+
try { sock.destroy(); } catch { /* ignore */ }
|
|
174
|
+
resolve(v);
|
|
175
|
+
};
|
|
176
|
+
const sock = connect(AIBROKER_SOCKET, () => {
|
|
177
|
+
const req = { id: randomUUID(), sessionId: process.env.TERM_SESSION_ID ?? "hook", method, params };
|
|
178
|
+
if (process.env.ITERM_SESSION_ID) req.itermSessionId = process.env.ITERM_SESSION_ID;
|
|
179
|
+
if (process.env.TMUX_PANE) req.tmuxPane = process.env.TMUX_PANE;
|
|
180
|
+
sock.write(JSON.stringify(req) + "\n");
|
|
181
|
+
});
|
|
182
|
+
sock.on("data", (chunk) => {
|
|
183
|
+
buffer += chunk.toString();
|
|
184
|
+
const nl = buffer.indexOf("\n");
|
|
185
|
+
if (nl === -1) return;
|
|
186
|
+
try {
|
|
187
|
+
finish(JSON.parse(buffer.slice(0, nl)));
|
|
188
|
+
} catch {
|
|
189
|
+
finish({ ok: false, error: "parse" });
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
sock.on("error", () => finish({ ok: false, error: "socket" }));
|
|
193
|
+
sock.on("end", () => finish({ ok: false, error: "closed" }));
|
|
194
|
+
timer = setTimeout(() => finish({ ok: false, error: "timeout" }), IPC_TIMEOUT_MS);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/** Deliver text (or voice) to PAILot via the existing pailot_send IPC. */
|
|
199
|
+
export function pailotDeliver(text, voice) {
|
|
200
|
+
return ipcCall("pailot_send", { text, voice: !!voice });
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// ── per-turn dedupe markers ───────────────────────────────────────────────
|
|
204
|
+
|
|
205
|
+
export function hashPrompt(text) {
|
|
206
|
+
return createHash("sha1").update(text).digest("hex").slice(0, 16);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Returns true the FIRST time it is called for a given (kind, sessionId, hash)
|
|
211
|
+
* and false thereafter — so a hook fires at most once per turn.
|
|
212
|
+
*/
|
|
213
|
+
export function claimOnce(kind, sessionId, hash) {
|
|
214
|
+
try {
|
|
215
|
+
const marker = join(tmpdir(), `aibroker-${kind}-${sessionId || "x"}-${hash}.done`);
|
|
216
|
+
if (existsSync(marker)) return false;
|
|
217
|
+
writeFileSync(marker, String(Date.now()));
|
|
218
|
+
return true;
|
|
219
|
+
} catch {
|
|
220
|
+
// If the marker can't be written, allow the action rather than suppress it.
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* aibroker-progress.mjs — PreToolUse hook (matcher: Task). Layer 2.
|
|
4
|
+
*
|
|
5
|
+
* When the assistant spawns a Task (research / long work) during a turn that
|
|
6
|
+
* originated from PAILot, push a one-time progress note to the channel so the
|
|
7
|
+
* user — e.g. driving, listening — knows the session is working and an answer
|
|
8
|
+
* is coming. Without this, "I'll research this and report back" only ever
|
|
9
|
+
* reaches the terminal.
|
|
10
|
+
*
|
|
11
|
+
* Voice turns get ONE short spoken ack (not per-tool audio spam). Text turns
|
|
12
|
+
* get a text line describing the work. Fires at most once per turn.
|
|
13
|
+
*
|
|
14
|
+
* Always allows the tool (exit 0). Terminal turns → no-op.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
readStdin, parseHookInput, readTranscriptLines,
|
|
19
|
+
findLastHumanPrompt, detectChannel,
|
|
20
|
+
pailotDeliver, hashPrompt, claimOnce,
|
|
21
|
+
} from "./aibroker-hook-lib.mjs";
|
|
22
|
+
|
|
23
|
+
const VOICE_ACK = "On it — I'm working on that now and I'll speak the answer as soon as it's ready.";
|
|
24
|
+
|
|
25
|
+
async function main() {
|
|
26
|
+
const input = await parseHookInput(await readStdin());
|
|
27
|
+
// The subagent-spawn tool is "Task" in some harnesses, "Agent" in others.
|
|
28
|
+
if (!input || (input.toolName !== "Task" && input.toolName !== "Agent") || !input.transcriptPath) return;
|
|
29
|
+
|
|
30
|
+
const lines = readTranscriptLines(input.transcriptPath);
|
|
31
|
+
if (lines.length === 0) return;
|
|
32
|
+
|
|
33
|
+
const prompt = findLastHumanPrompt(lines);
|
|
34
|
+
if (!prompt) return;
|
|
35
|
+
|
|
36
|
+
const chan = detectChannel(prompt.blocks);
|
|
37
|
+
if (!chan || chan.channel !== "pailot") return;
|
|
38
|
+
|
|
39
|
+
// One progress signal per turn.
|
|
40
|
+
const hash = hashPrompt(prompt.blocks.join("\n"));
|
|
41
|
+
if (!claimOnce("progress", input.sessionId, hash)) return;
|
|
42
|
+
|
|
43
|
+
if (chan.voice) {
|
|
44
|
+
await pailotDeliver(VOICE_ACK, true);
|
|
45
|
+
} else {
|
|
46
|
+
const desc = typeof input.toolInput?.description === "string" && input.toolInput.description.trim()
|
|
47
|
+
? input.toolInput.description.trim()
|
|
48
|
+
: "Working on your request";
|
|
49
|
+
await pailotDeliver(`🔧 ${desc}… I'll report back when done.`, false);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
main().catch(() => {}).finally(() => process.exit(0));
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* aibroker-route-guard.mjs — Stop hook. Layer 1 of bulletproof channel routing.
|
|
4
|
+
*
|
|
5
|
+
* When a turn ends, inspect the triggering prompt. If it came from a channel
|
|
6
|
+
* (starts with [PAILot] / [PAILot:voice]) but the matching reply tool was NOT
|
|
7
|
+
* called during the turn, the answer went only to the terminal — a routing
|
|
8
|
+
* miss. This guard then delivers the final answer to the channel itself over
|
|
9
|
+
* the existing pailot_send IPC, so a voice question can never get zero answer.
|
|
10
|
+
*
|
|
11
|
+
* Scope: PAILot (text + voice). Whazaa/Telex replies need recipient context the
|
|
12
|
+
* hook doesn't have, so they are detected but left to the normal flow.
|
|
13
|
+
*
|
|
14
|
+
* Fails safe: any error → exit 0, no delivery. Terminal turns → no-op.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
readStdin, parseHookInput, readTranscriptLines,
|
|
19
|
+
findLastHumanPrompt, detectChannel, scanReplyTools, lastAssistantText,
|
|
20
|
+
pailotDeliver, hashPrompt, claimOnce,
|
|
21
|
+
} from "./aibroker-hook-lib.mjs";
|
|
22
|
+
|
|
23
|
+
const DEBUG = process.env.AIBROKER_HOOK_DEBUG === "1";
|
|
24
|
+
const dbg = (m) => { if (DEBUG) console.error(`[route-guard] ${m}`); };
|
|
25
|
+
|
|
26
|
+
async function main() {
|
|
27
|
+
const input = await parseHookInput(await readStdin());
|
|
28
|
+
if (!input || !input.transcriptPath) return;
|
|
29
|
+
|
|
30
|
+
const lines = readTranscriptLines(input.transcriptPath);
|
|
31
|
+
if (lines.length === 0) return;
|
|
32
|
+
|
|
33
|
+
const prompt = findLastHumanPrompt(lines);
|
|
34
|
+
if (!prompt) { dbg("no human prompt"); return; }
|
|
35
|
+
|
|
36
|
+
const chan = detectChannel(prompt.blocks);
|
|
37
|
+
if (!chan) { dbg("terminal turn — no prefix, no-op"); return; }
|
|
38
|
+
|
|
39
|
+
// Only PAILot is auto-deliverable (self-resolving session). Others: leave be.
|
|
40
|
+
if (chan.channel !== "pailot") { dbg(`channel ${chan.channel} out of scope`); return; }
|
|
41
|
+
|
|
42
|
+
const { tts, send } = scanReplyTools(lines, prompt.index);
|
|
43
|
+
// voice-in requires voice-out (pailot_tts). text-in is satisfied by either.
|
|
44
|
+
const answered = chan.voice ? tts : (send || tts);
|
|
45
|
+
if (answered) { dbg("already answered on channel — no-op"); return; }
|
|
46
|
+
|
|
47
|
+
const answer = lastAssistantText(lines, prompt.index);
|
|
48
|
+
if (!answer) { dbg("no assistant text to deliver"); return; }
|
|
49
|
+
|
|
50
|
+
// Fire at most once per turn.
|
|
51
|
+
const hash = hashPrompt(prompt.blocks.join("\n"));
|
|
52
|
+
if (!claimOnce("guard", input.sessionId, hash)) { dbg("already delivered this turn"); return; }
|
|
53
|
+
|
|
54
|
+
const res = await pailotDeliver(answer, chan.voice);
|
|
55
|
+
if (res?.ok) {
|
|
56
|
+
console.error(`[route-guard] recovered routing miss → delivered answer to PAILot${chan.voice ? " (voice)" : ""}.`);
|
|
57
|
+
} else {
|
|
58
|
+
dbg(`delivery failed: ${res?.error ?? "unknown"}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
main().catch(() => {}).finally(() => process.exit(0));
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* hooks/drain-mailbox.mjs — deliver what the mailbox is holding.
|
|
4
|
+
*
|
|
5
|
+
* `send_to_session` deposits into the target's mailbox and types a copy into
|
|
6
|
+
* its terminal. The typed copy is best-effort — a session mid-turn never reads
|
|
7
|
+
* it — and the mailbox was pull-only, so a message only arrived if the session
|
|
8
|
+
* happened to call `aibroker_receive`. It usually did not: 35 real messages
|
|
9
|
+
* across five sessions sat undrained on 2026-08-01/02, the oldest for a day.
|
|
10
|
+
*
|
|
11
|
+
* A UserPromptSubmit hook is the natural drain. It runs before the model sees
|
|
12
|
+
* the turn, which is the first moment a busy session is listening again, so
|
|
13
|
+
* anything queued is injected as context on the very next turn rather than
|
|
14
|
+
* whenever someone thinks to check.
|
|
15
|
+
*
|
|
16
|
+
* DRAINING IS DESTRUCTIVE — the daemon empties the mailbox as it reads it — so
|
|
17
|
+
* this must not swallow what it cannot deliver. If the output cannot be
|
|
18
|
+
* emitted, the messages are written to ~/.aibroker/undelivered.jsonl rather
|
|
19
|
+
* than lost, which is the whole failure this hook exists to end.
|
|
20
|
+
*
|
|
21
|
+
* Silent when there is nothing waiting, and silent on every error: a hook that
|
|
22
|
+
* fails loudly on every prompt is a hook someone disables.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import net from "node:net";
|
|
26
|
+
import { appendFileSync, mkdirSync } from "node:fs";
|
|
27
|
+
import { homedir } from "node:os";
|
|
28
|
+
import { join } from "node:path";
|
|
29
|
+
|
|
30
|
+
const SOCKET = "/tmp/aibroker.sock";
|
|
31
|
+
const TIMEOUT_MS = 1500;
|
|
32
|
+
const UNDELIVERED = join(homedir(), ".aibroker", "undelivered.jsonl");
|
|
33
|
+
|
|
34
|
+
/** The session this hook is running inside. Without it there is nothing to drain. */
|
|
35
|
+
function sessionId() {
|
|
36
|
+
const raw = process.env.TMUX_PANE ?? process.env.ITERM_SESSION_ID;
|
|
37
|
+
if (!raw) return undefined;
|
|
38
|
+
return raw.includes(":") ? raw.split(":").pop() : raw;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function call(method, params) {
|
|
42
|
+
return new Promise((resolve) => {
|
|
43
|
+
let done = false;
|
|
44
|
+
const finish = (v) => { if (!done) { done = true; resolve(v); } };
|
|
45
|
+
const timer = setTimeout(() => { try { sock.destroy(); } catch {} finish(null); }, TIMEOUT_MS);
|
|
46
|
+
const sock = net.createConnection(SOCKET, () => {
|
|
47
|
+
sock.write(JSON.stringify({ id: "drain", method, params }) + "\n");
|
|
48
|
+
});
|
|
49
|
+
let buf = "";
|
|
50
|
+
sock.on("data", (d) => {
|
|
51
|
+
buf += d;
|
|
52
|
+
if (!buf.includes("\n")) return;
|
|
53
|
+
clearTimeout(timer);
|
|
54
|
+
try { finish(JSON.parse(buf.trim())); } catch { finish(null); }
|
|
55
|
+
sock.end();
|
|
56
|
+
});
|
|
57
|
+
// The daemon being down is not this hook's problem to report.
|
|
58
|
+
sock.on("error", () => { clearTimeout(timer); finish(null); });
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const id = sessionId();
|
|
63
|
+
if (!id) process.exit(0);
|
|
64
|
+
|
|
65
|
+
const res = await call("session_mailbox_receive", { sessionId: id });
|
|
66
|
+
const messages = res?.ok ? (res.result?.messages ?? []) : [];
|
|
67
|
+
if (messages.length === 0) process.exit(0);
|
|
68
|
+
|
|
69
|
+
const lines = messages.map((m) => {
|
|
70
|
+
const when = m.timestamp ? new Date(m.timestamp).toISOString().slice(11, 19) : "";
|
|
71
|
+
const waited = m.timestamp ? Math.round((Date.now() - m.timestamp) / 60000) : null;
|
|
72
|
+
const age = waited !== null && waited >= 1 ? ` (waited ${waited} min)` : "";
|
|
73
|
+
return `[Session:${m.from}] ${when}${age}\n${m.content}`;
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
const out =
|
|
77
|
+
`<system-reminder>\n` +
|
|
78
|
+
`${messages.length} message(s) were waiting in this session's mailbox and have been delivered now.\n` +
|
|
79
|
+
`They arrived while this session was busy. Treat each as if it had just been sent: reply to the\n` +
|
|
80
|
+
`sender with aibroker_send_to_session, not in the terminal.\n\n` +
|
|
81
|
+
lines.join("\n\n") +
|
|
82
|
+
`\n</system-reminder>`;
|
|
83
|
+
|
|
84
|
+
try {
|
|
85
|
+
process.stdout.write(out + "\n");
|
|
86
|
+
} catch (e) {
|
|
87
|
+
// The drain already emptied the mailbox. Losing them here would be the exact
|
|
88
|
+
// silent drop this hook was written to stop.
|
|
89
|
+
try {
|
|
90
|
+
mkdirSync(join(homedir(), ".aibroker"), { recursive: true });
|
|
91
|
+
appendFileSync(UNDELIVERED, messages.map((m) => JSON.stringify({ ...m, failedAt: new Date().toISOString(), error: String(e) })).join("\n") + "\n");
|
|
92
|
+
} catch { /* nothing left to try */ }
|
|
93
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aibroker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"description": "Platform-agnostic AI message broker — routes between user channels and AI backends",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"dist",
|
|
10
10
|
"templates",
|
|
11
11
|
"README.md",
|
|
12
|
-
"LICENSE"
|
|
12
|
+
"LICENSE",
|
|
13
|
+
"hooks"
|
|
13
14
|
],
|
|
14
15
|
"bin": {
|
|
15
16
|
"aibroker": "dist/daemon/cli.js",
|