chat-recall 0.7.21 → 0.7.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,9 +15,30 @@
15
15
  * messages to stderr and exits 2, and Claude Code wakes the
16
16
  * session with them, also a session that is idle and waits for
17
17
  * its user. One waiter runs per session.
18
+ *
19
+ * The other tools run the turn hooks with `--tool <id>`. normalizePayload maps
20
+ * each payload to Claude's shape, and renderRun writes the output each tool
21
+ * reads. A tool adds text only at the events in DELIVERS.
18
22
  */
19
23
  import { type WireMessage } from '@chat-recall/engine/core/session-messages.js';
20
24
  export declare const TURN_EVENTS: Set<string>;
25
+ /** The AI tools the message hook runs in. */
26
+ export type HookTool = 'claude' | 'codex' | 'agy' | 'cursor' | 'opencode' | 'pi';
27
+ export declare const HOOK_TOOLS: readonly HookTool[];
28
+ /** The session-id prefix of each tool, as its backend writes it. */
29
+ export declare const SESSION_PREFIX: Record<HookTool, string>;
30
+ export declare function isHookTool(v: unknown): v is HookTool;
31
+ /**
32
+ * One tool's hook payload in the shape planRun reads, or null for an event
33
+ * this hook does not handle.
34
+ *
35
+ * Antigravity names no event in its payload, so its registration passes the
36
+ * event as `--event`. It runs PreInvocation before every model call of a turn;
37
+ * only the first one (`invocationNum` 0) is the prompt. A Cursor stop with
38
+ * `loop_count` above 0 comes after a follow-up, as Claude's `stop_hook_active`
39
+ * does.
40
+ */
41
+ export declare function normalizePayload(tool: HookTool, raw: Record<string, unknown>, event?: string): HookPayload | null;
21
42
  /** Per-session state the hook keeps on disk between runs. */
22
43
  export interface HookState {
23
44
  /** The session has been told its own id. */
@@ -54,14 +75,19 @@ export interface HookPlan {
54
75
  * A Stop continues the agent at most once per turn. Two sessions that answer
55
76
  * each other at every turn end would otherwise keep each other running.
56
77
  */
57
- export declare function planRun(payload: HookPayload, state: HookState): HookPlan | null;
78
+ export declare function planRun(payload: HookPayload, state: HookState, tool?: HookTool): HookPlan | null;
58
79
  export interface HookResult {
59
80
  /** What to write to stdout; empty for nothing. */
60
81
  stdout: string;
61
82
  state: HookState;
62
83
  }
84
+ /**
85
+ * What a run prints when it has nothing to add. Cursor reads a JSON object
86
+ * from every hook, and `beforeSubmitPrompt` must allow the prompt.
87
+ */
88
+ export declare function emptyOutput(tool: HookTool, event: string): string;
63
89
  /** The output for one turn-hook run, given the messages the server returned. */
64
- export declare function renderRun(plan: HookPlan, messages: readonly WireMessage[], state: HookState, now: number, labels?: ReadonlyMap<string, string | null>): HookResult;
90
+ export declare function renderRun(plan: HookPlan, messages: readonly WireMessage[], state: HookState, now: number, labels?: ReadonlyMap<string, string | null>, tool?: HookTool): HookResult;
65
91
  /** The waiter's stderr when messages arrive. Claude Code shows it as a system reminder. */
66
92
  export declare function renderWake(sessionId: string, messages: readonly WireMessage[], now: number, labels?: ReadonlyMap<string, string | null>): string;
67
93
  //# sourceMappingURL=message-hook-core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-hook-core.d.ts","sourceRoot":"","sources":["../src/message-hook-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAoC,KAAK,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAElH,eAAO,MAAM,WAAW,aAAsE,CAAC;AAE/F,6DAA6D;AAC7D,MAAM,WAAW,SAAS;IACxB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,WAAW,EAAE,OAAO,CAAC;IACrB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,EAAE,SAAqD,CAAC;AAEhF,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAKD,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAS/E;AAED,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,gFAAgF;AAChF,wBAAgB,SAAS,CACvB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAa,GACrD,UAAU,CAsBZ;AAED,2FAA2F;AAC3F,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAa,GACrD,MAAM,CAER"}
1
+ {"version":3,"file":"message-hook-core.d.ts","sourceRoot":"","sources":["../src/message-hook-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAoC,KAAK,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAElH,eAAO,MAAM,WAAW,aAAsE,CAAC;AAE/F,6CAA6C;AAC7C,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;AACjF,eAAO,MAAM,UAAU,EAAE,SAAS,QAAQ,EAA2D,CAAC;AAEtG,oEAAoE;AACpE,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAEnD,CAAC;AAoBF,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,QAAQ,CAEpD;AAgBD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAuBjH;AAED,6DAA6D;AAC7D,MAAM,WAAW,SAAS;IACxB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,WAAW,EAAE,OAAO,CAAC;IACrB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,EAAE,SAAqD,CAAC;AAEhF,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAKD,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,GAAE,QAAmB,GAAG,QAAQ,GAAG,IAAI,CAS1G;AAED,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;CAClB;AAUD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,gFAAgF;AAChF,wBAAgB,SAAS,CACvB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAa,EACtD,IAAI,GAAE,QAAmB,GACxB,UAAU,CAqBZ;AAED,2FAA2F;AAC3F,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAa,GACrD,MAAM,CAER"}
@@ -15,9 +15,87 @@
15
15
  * messages to stderr and exits 2, and Claude Code wakes the
16
16
  * session with them, also a session that is idle and waits for
17
17
  * its user. One waiter runs per session.
18
+ *
19
+ * The other tools run the turn hooks with `--tool <id>`. normalizePayload maps
20
+ * each payload to Claude's shape, and renderRun writes the output each tool
21
+ * reads. A tool adds text only at the events in DELIVERS.
18
22
  */
19
23
  import { formatDelivery, selfIntroduction } from '@chat-recall/engine/core/session-messages.js';
20
24
  export const TURN_EVENTS = new Set(['SessionStart', 'UserPromptSubmit', 'Stop', 'SessionEnd']);
25
+ export const HOOK_TOOLS = ['claude', 'codex', 'agy', 'cursor', 'opencode', 'pi'];
26
+ /** The session-id prefix of each tool, as its backend writes it. */
27
+ export const SESSION_PREFIX = {
28
+ claude: '', codex: 'codex_', agy: 'agy_', cursor: 'cursor_', opencode: 'opencode_', pi: 'pi_',
29
+ };
30
+ /**
31
+ * The events at which each tool adds the hook's text to the session. A Stop in
32
+ * the set continues the agent with the messages.
33
+ *
34
+ * Antigravity injects steps at SessionStart and before a model call, and its
35
+ * Stop has no continuation. Cursor adds context at sessionStart and submits a
36
+ * follow-up at stop; beforeSubmitPrompt can only allow or refuse the prompt.
37
+ * The opencode plugin and the pi extension add text to the prompt.
38
+ */
39
+ const DELIVERS = {
40
+ claude: new Set(['SessionStart', 'UserPromptSubmit', 'Stop']),
41
+ codex: new Set(['SessionStart', 'UserPromptSubmit', 'Stop']),
42
+ agy: new Set(['SessionStart', 'UserPromptSubmit']),
43
+ cursor: new Set(['SessionStart', 'Stop']),
44
+ opencode: new Set(['SessionStart', 'UserPromptSubmit']),
45
+ pi: new Set(['SessionStart', 'UserPromptSubmit']),
46
+ };
47
+ export function isHookTool(v) {
48
+ return typeof v === 'string' && HOOK_TOOLS.includes(v);
49
+ }
50
+ const str = (v) => (typeof v === 'string' && v ? v : undefined);
51
+ const first = (v) => (Array.isArray(v) ? str(v[0]) : undefined);
52
+ function prefixed(tool, id) {
53
+ const raw = str(id);
54
+ if (!raw)
55
+ return undefined;
56
+ return raw.startsWith(SESSION_PREFIX[tool]) ? raw : SESSION_PREFIX[tool] + raw;
57
+ }
58
+ const AGY_EVENTS = { SessionStart: 'SessionStart', PreInvocation: 'UserPromptSubmit', Stop: 'Stop' };
59
+ const CURSOR_EVENTS = {
60
+ sessionStart: 'SessionStart', beforeSubmitPrompt: 'UserPromptSubmit', stop: 'Stop', sessionEnd: 'SessionEnd',
61
+ };
62
+ /**
63
+ * One tool's hook payload in the shape planRun reads, or null for an event
64
+ * this hook does not handle.
65
+ *
66
+ * Antigravity names no event in its payload, so its registration passes the
67
+ * event as `--event`. It runs PreInvocation before every model call of a turn;
68
+ * only the first one (`invocationNum` 0) is the prompt. A Cursor stop with
69
+ * `loop_count` above 0 comes after a follow-up, as Claude's `stop_hook_active`
70
+ * does.
71
+ */
72
+ export function normalizePayload(tool, raw, event) {
73
+ switch (tool) {
74
+ case 'claude':
75
+ return raw;
76
+ case 'agy': {
77
+ const ev = AGY_EVENTS[event ?? ''];
78
+ if (!ev)
79
+ return null;
80
+ if (ev === 'UserPromptSubmit' && raw.invocationNum !== 0)
81
+ return null;
82
+ return { session_id: prefixed(tool, raw.conversationId), hook_event_name: ev, cwd: first(raw.workspacePaths) };
83
+ }
84
+ case 'cursor': {
85
+ const ev = CURSOR_EVENTS[String(raw.hook_event_name ?? '')];
86
+ if (!ev)
87
+ return null;
88
+ return {
89
+ session_id: prefixed(tool, raw.conversation_id ?? raw.session_id),
90
+ hook_event_name: ev,
91
+ cwd: first(raw.workspace_roots),
92
+ stop_hook_active: typeof raw.loop_count === 'number' && raw.loop_count > 0,
93
+ };
94
+ }
95
+ default:
96
+ return { ...raw, session_id: prefixed(tool, raw.session_id) };
97
+ }
98
+ }
21
99
  export const EMPTY_STATE = { introduced: false, stopBlocked: false };
22
100
  /** A Claude session id, or another tool's prefixed id. Also safe as a file name. */
23
101
  const SESSION_ID = /^[A-Za-z0-9._:-]{1,128}$/;
@@ -34,7 +112,7 @@ export function sessionIdOf(payload) {
34
112
  * A Stop continues the agent at most once per turn. Two sessions that answer
35
113
  * each other at every turn end would otherwise keep each other running.
36
114
  */
37
- export function planRun(payload, state) {
115
+ export function planRun(payload, state, tool = 'claude') {
38
116
  const sessionId = sessionIdOf(payload);
39
117
  const event = typeof payload.hook_event_name === 'string' ? payload.hook_event_name : '';
40
118
  if (!sessionId || !TURN_EVENTS.has(event))
@@ -42,11 +120,30 @@ export function planRun(payload, state) {
42
120
  const cwd = typeof payload.cwd === 'string' && payload.cwd ? payload.cwd : undefined;
43
121
  const inSubagent = typeof payload.agent_id === 'string' && payload.agent_id !== '';
44
122
  const stopSpent = event === 'Stop' && (state.stopBlocked || payload.stop_hook_active === true);
45
- const take = !inSubagent && !stopSpent && event !== 'SessionEnd';
123
+ const take = !inSubagent && !stopSpent && DELIVERS[tool].has(event);
46
124
  return { sessionId, event, cwd, take };
47
125
  }
126
+ /** The text in the form each tool reads from a hook's stdout. */
127
+ function wrapFor(tool, event, text) {
128
+ if (tool === 'agy')
129
+ return JSON.stringify({ injectSteps: [{ userMessage: text }] });
130
+ if (tool === 'cursor')
131
+ return JSON.stringify(event === 'Stop' ? { followup_message: text } : { additional_context: text });
132
+ if (event === 'Stop')
133
+ return JSON.stringify({ decision: 'block', reason: text });
134
+ return text + '\n';
135
+ }
136
+ /**
137
+ * What a run prints when it has nothing to add. Cursor reads a JSON object
138
+ * from every hook, and `beforeSubmitPrompt` must allow the prompt.
139
+ */
140
+ export function emptyOutput(tool, event) {
141
+ if (tool !== 'cursor')
142
+ return '';
143
+ return event === 'UserPromptSubmit' ? '{"continue":true}' : '{}';
144
+ }
48
145
  /** The output for one turn-hook run, given the messages the server returned. */
49
- export function renderRun(plan, messages, state, now, labels = new Map()) {
146
+ export function renderRun(plan, messages, state, now, labels = new Map(), tool = 'claude') {
50
147
  const next = { ...state, ...(plan.cwd ? { cwd: plan.cwd } : {}) };
51
148
  if (plan.event === 'UserPromptSubmit' || plan.event === 'SessionStart')
52
149
  next.stopBlocked = false;
@@ -66,9 +163,8 @@ export function renderRun(plan, messages, state, now, labels = new Map()) {
66
163
  return { stdout: '', state: next };
67
164
  if (plan.event === 'Stop') {
68
165
  next.stopBlocked = true;
69
- return { stdout: JSON.stringify({ decision: 'block', reason: text }), state: next };
70
166
  }
71
- return { stdout: text + '\n', state: next };
167
+ return { stdout: wrapFor(tool, plan.event, text), state: next };
72
168
  }
73
169
  /** The waiter's stderr when messages arrive. Claude Code shows it as a system reminder. */
74
170
  export function renderWake(sessionId, messages, now, labels = new Map()) {
@@ -1 +1 @@
1
- {"version":3,"file":"message-hook-core.js","sourceRoot":"","sources":["../src/message-hook-core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-hook-core.js","sourceRoot":"","sources":["../src/message-hook-core.ts"],"names":[],"mappings":"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"}
@@ -65,7 +65,7 @@ try {
65
65
  CLI_VERSION = JSON.parse(readFileSync2(new URL("../package.json", import.meta.url), "utf-8")).version || CLI_VERSION;
66
66
  } catch {
67
67
  try {
68
- if (true) CLI_VERSION = "0.7.21";
68
+ if (true) CLI_VERSION = "0.7.24";
69
69
  } catch {
70
70
  }
71
71
  }
@@ -128,32 +128,100 @@ function formatDelivery(recipient, messages, opts = {}) {
128
128
  lines.push(`> ${l}`);
129
129
  lines.push("");
130
130
  }
131
- const first = messages.find((m) => m.fromSession);
132
- if (first) {
133
- lines.push(`To answer, call recall_message_send with from: "${recipient}", to: "${first.fromSession}", reply_to: "${first.id}".`);
131
+ const first2 = messages.find((m) => m.fromSession);
132
+ if (first2) {
133
+ lines.push(`To answer, call recall_message_send with from: "${recipient}", to: "${first2.fromSession}", reply_to: "${first2.id}".`);
134
134
  }
135
135
  return lines.join("\n").trimEnd();
136
136
  }
137
137
 
138
138
  // src/message-hook-core.ts
139
139
  var TURN_EVENTS = /* @__PURE__ */ new Set(["SessionStart", "UserPromptSubmit", "Stop", "SessionEnd"]);
140
+ var HOOK_TOOLS = ["claude", "codex", "agy", "cursor", "opencode", "pi"];
141
+ var SESSION_PREFIX = {
142
+ claude: "",
143
+ codex: "codex_",
144
+ agy: "agy_",
145
+ cursor: "cursor_",
146
+ opencode: "opencode_",
147
+ pi: "pi_"
148
+ };
149
+ var DELIVERS = {
150
+ claude: /* @__PURE__ */ new Set(["SessionStart", "UserPromptSubmit", "Stop"]),
151
+ codex: /* @__PURE__ */ new Set(["SessionStart", "UserPromptSubmit", "Stop"]),
152
+ agy: /* @__PURE__ */ new Set(["SessionStart", "UserPromptSubmit"]),
153
+ cursor: /* @__PURE__ */ new Set(["SessionStart", "Stop"]),
154
+ opencode: /* @__PURE__ */ new Set(["SessionStart", "UserPromptSubmit"]),
155
+ pi: /* @__PURE__ */ new Set(["SessionStart", "UserPromptSubmit"])
156
+ };
157
+ function isHookTool(v) {
158
+ return typeof v === "string" && HOOK_TOOLS.includes(v);
159
+ }
160
+ var str = (v) => typeof v === "string" && v ? v : void 0;
161
+ var first = (v) => Array.isArray(v) ? str(v[0]) : void 0;
162
+ function prefixed(tool, id) {
163
+ const raw = str(id);
164
+ if (!raw) return void 0;
165
+ return raw.startsWith(SESSION_PREFIX[tool]) ? raw : SESSION_PREFIX[tool] + raw;
166
+ }
167
+ var AGY_EVENTS = { SessionStart: "SessionStart", PreInvocation: "UserPromptSubmit", Stop: "Stop" };
168
+ var CURSOR_EVENTS = {
169
+ sessionStart: "SessionStart",
170
+ beforeSubmitPrompt: "UserPromptSubmit",
171
+ stop: "Stop",
172
+ sessionEnd: "SessionEnd"
173
+ };
174
+ function normalizePayload(tool, raw, event) {
175
+ switch (tool) {
176
+ case "claude":
177
+ return raw;
178
+ case "agy": {
179
+ const ev = AGY_EVENTS[event ?? ""];
180
+ if (!ev) return null;
181
+ if (ev === "UserPromptSubmit" && raw.invocationNum !== 0) return null;
182
+ return { session_id: prefixed(tool, raw.conversationId), hook_event_name: ev, cwd: first(raw.workspacePaths) };
183
+ }
184
+ case "cursor": {
185
+ const ev = CURSOR_EVENTS[String(raw.hook_event_name ?? "")];
186
+ if (!ev) return null;
187
+ return {
188
+ session_id: prefixed(tool, raw.conversation_id ?? raw.session_id),
189
+ hook_event_name: ev,
190
+ cwd: first(raw.workspace_roots),
191
+ stop_hook_active: typeof raw.loop_count === "number" && raw.loop_count > 0
192
+ };
193
+ }
194
+ default:
195
+ return { ...raw, session_id: prefixed(tool, raw.session_id) };
196
+ }
197
+ }
140
198
  var EMPTY_STATE = { introduced: false, stopBlocked: false };
141
199
  var SESSION_ID = /^[A-Za-z0-9._:-]{1,128}$/;
142
200
  function sessionIdOf(payload) {
143
201
  const id = typeof payload.session_id === "string" ? payload.session_id : "";
144
202
  return SESSION_ID.test(id) ? id : null;
145
203
  }
146
- function planRun(payload, state) {
204
+ function planRun(payload, state, tool = "claude") {
147
205
  const sessionId = sessionIdOf(payload);
148
206
  const event = typeof payload.hook_event_name === "string" ? payload.hook_event_name : "";
149
207
  if (!sessionId || !TURN_EVENTS.has(event)) return null;
150
208
  const cwd = typeof payload.cwd === "string" && payload.cwd ? payload.cwd : void 0;
151
209
  const inSubagent = typeof payload.agent_id === "string" && payload.agent_id !== "";
152
210
  const stopSpent = event === "Stop" && (state.stopBlocked || payload.stop_hook_active === true);
153
- const take = !inSubagent && !stopSpent && event !== "SessionEnd";
211
+ const take = !inSubagent && !stopSpent && DELIVERS[tool].has(event);
154
212
  return { sessionId, event, cwd, take };
155
213
  }
156
- function renderRun(plan, messages, state, now, labels = /* @__PURE__ */ new Map()) {
214
+ function wrapFor(tool, event, text) {
215
+ if (tool === "agy") return JSON.stringify({ injectSteps: [{ userMessage: text }] });
216
+ if (tool === "cursor") return JSON.stringify(event === "Stop" ? { followup_message: text } : { additional_context: text });
217
+ if (event === "Stop") return JSON.stringify({ decision: "block", reason: text });
218
+ return text + "\n";
219
+ }
220
+ function emptyOutput(tool, event) {
221
+ if (tool !== "cursor") return "";
222
+ return event === "UserPromptSubmit" ? '{"continue":true}' : "{}";
223
+ }
224
+ function renderRun(plan, messages, state, now, labels = /* @__PURE__ */ new Map(), tool = "claude") {
157
225
  const next = { ...state, ...plan.cwd ? { cwd: plan.cwd } : {} };
158
226
  if (plan.event === "UserPromptSubmit" || plan.event === "SessionStart") next.stopBlocked = false;
159
227
  const parts = [];
@@ -167,9 +235,8 @@ function renderRun(plan, messages, state, now, labels = /* @__PURE__ */ new Map(
167
235
  if (!text) return { stdout: "", state: next };
168
236
  if (plan.event === "Stop") {
169
237
  next.stopBlocked = true;
170
- return { stdout: JSON.stringify({ decision: "block", reason: text }), state: next };
171
238
  }
172
- return { stdout: text + "\n", state: next };
239
+ return { stdout: wrapFor(tool, plan.event, text), state: next };
173
240
  }
174
241
  function renderWake(sessionId, messages, now, labels = /* @__PURE__ */ new Map()) {
175
242
  return formatDelivery(sessionId, messages, { now, labels });
@@ -253,11 +320,11 @@ async function ack(target, sessionId, messages) {
253
320
  function writeOut(stream, text) {
254
321
  return new Promise((resolve) => stream.write(text, () => resolve()));
255
322
  }
256
- async function turn(payload, target) {
323
+ async function turn(payload, target, tool) {
257
324
  setTimeout(() => process.exit(0), 6e3).unref();
258
325
  const sessionId = sessionIdOf(payload);
259
326
  const state = sessionId ? readState(sessionId) : { ...EMPTY_STATE };
260
- const plan = planRun(payload, state);
327
+ const plan = planRun(payload, state, tool);
261
328
  if (!plan) return debug("no session id, or an event this hook does not handle");
262
329
  const link = plan.event === "SessionStart" ? {
263
330
  parent: process.env.CHAT_RECALL_PARENT_SESSION || void 0,
@@ -286,10 +353,14 @@ async function turn(payload, target) {
286
353
  return;
287
354
  }
288
355
  if (plan.event === "SessionStart") pruneStates(now);
289
- const result = renderRun(plan, messages, state, now, new Map(Object.entries(labels)));
290
- result.state.configDir = process.env.CLAUDE_CONFIG_DIR ?? "";
356
+ const result = renderRun(plan, messages, state, now, new Map(Object.entries(labels)), tool);
357
+ if (tool === "claude") result.state.configDir = process.env.CLAUDE_CONFIG_DIR ?? "";
291
358
  writeState(plan.sessionId, result.state);
292
- if (!result.stdout) return;
359
+ if (!result.stdout) {
360
+ const empty = emptyOutput(tool, plan.event);
361
+ if (empty) await writeOut(process.stdout, empty);
362
+ return;
363
+ }
293
364
  await writeOut(process.stdout, result.stdout);
294
365
  if (messages.length) await ack(target, plan.sessionId, messages);
295
366
  }
@@ -338,7 +409,8 @@ function releaseWaiter(sessionId) {
338
409
  } catch {
339
410
  }
340
411
  }
341
- async function wait(payload, target) {
412
+ var PLUGIN_WAITERS = /* @__PURE__ */ new Set(["opencode", "pi"]);
413
+ async function wait(payload, target, tool = "claude") {
342
414
  const sessionId = sessionIdOf(payload);
343
415
  if (!sessionId) {
344
416
  debug("waiter: no session id");
@@ -387,31 +459,53 @@ async function wait(payload, target) {
387
459
  }
388
460
  const messages = r.body.messages ?? [];
389
461
  if (!messages.length) continue;
390
- await writeOut(process.stderr, renderWake(sessionId, messages, Date.now(), new Map(Object.entries(r.body.labels ?? {}))) + "\n");
462
+ const text = renderWake(sessionId, messages, Date.now(), new Map(Object.entries(r.body.labels ?? {}))) + "\n";
463
+ if (tool === "claude") {
464
+ await writeOut(process.stderr, text);
465
+ await ack(target, sessionId, messages);
466
+ return 2;
467
+ }
468
+ await writeOut(process.stdout, text);
391
469
  await ack(target, sessionId, messages);
392
- return 2;
470
+ return 0;
393
471
  }
394
472
  } finally {
395
473
  releaseWaiter(sessionId);
396
474
  }
397
475
  }
476
+ function argValue(name) {
477
+ const i = process.argv.indexOf(name);
478
+ return i >= 0 ? process.argv[i + 1] : void 0;
479
+ }
398
480
  async function main() {
399
481
  if (process.env.CHAT_RECALL_MESSAGE_HOOK === "0") return 0;
482
+ const toolArg = argValue("--tool") ?? "claude";
483
+ if (!isHookTool(toolArg)) {
484
+ debug(`unknown tool ${toolArg}`);
485
+ return 0;
486
+ }
400
487
  const raw = await readStdin();
401
- let payload;
488
+ let parsed;
402
489
  try {
403
- payload = JSON.parse(raw);
490
+ parsed = JSON.parse(raw);
404
491
  } catch {
405
492
  debug("stdin is not JSON");
406
493
  return 0;
407
494
  }
495
+ const payload = normalizePayload(toolArg, parsed, argValue("--event"));
496
+ if (!payload) {
497
+ debug(`${toolArg}: an event this hook does not handle`);
498
+ return 0;
499
+ }
408
500
  const target = recallTarget();
409
501
  if (!target) {
410
502
  debug("no login: run `chat-recall login`");
411
503
  return 0;
412
504
  }
413
- if (process.argv.includes("--wait")) return wait(payload, target);
414
- await turn(payload, target);
505
+ if (process.argv.includes("--wait")) {
506
+ return toolArg === "claude" || PLUGIN_WAITERS.has(toolArg) ? wait(payload, target, toolArg) : 0;
507
+ }
508
+ await turn(payload, target, toolArg);
415
509
  return 0;
416
510
  }
417
511
  main().then(
@@ -1 +1 @@
1
- {"version":3,"file":"message-hook.js","sourceRoot":"","sources":["../src/message-hook.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-hook.js","sourceRoot":"","sources":["../src/message-hook.ts"],"names":[],"mappings":"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"}