chat-recall 0.7.21 → 0.7.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -1
- package/dist/cli.js +807 -372
- package/dist/cli.js.map +1 -1
- package/dist/install-hooks.d.ts +10 -0
- package/dist/install-hooks.d.ts.map +1 -1
- package/dist/install-hooks.js +74 -2
- package/dist/install-hooks.js.map +1 -1
- package/dist/mcp-relay.js +1 -1
- package/dist/mcp.js +704 -294
- package/dist/message-hook-core.d.ts +28 -2
- package/dist/message-hook-core.d.ts.map +1 -1
- package/dist/message-hook-core.js +101 -5
- package/dist/message-hook-core.js.map +1 -1
- package/dist/message-hook.js +103 -18
- package/dist/message-hook.js.map +1 -1
- package/dist/scan-worker.js +4 -0
- package/dist/watch.js +9 -5
- package/package.json +2 -2
- package/skills/chat-recall-sessions/SKILL.md +6 -0
|
@@ -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
|
|
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
|
|
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
|
|
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:
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"message-hook-core.js","sourceRoot":"","sources":["../src/message-hook-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAoB,MAAM,8CAA8C,CAAC;AAElH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AAI/F,MAAM,CAAC,MAAM,UAAU,GAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAEtG,oEAAoE;AACpE,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK;CAC9F,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,QAAQ,GAA0C;IACtD,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAC7D,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAC5D,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAClD,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IACvD,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,CAAU;IACnC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAK,UAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,GAAG,GAAG,CAAC,CAAU,EAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC7F,MAAM,KAAK,GAAG,CAAC,CAAU,EAAsB,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAE7F,SAAS,QAAQ,CAAC,IAAc,EAAE,EAAW;IAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,OAAO,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,GAA2B,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC7H,MAAM,aAAa,GAA2B;IAC5C,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY;CAC7G,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,GAA4B,EAAE,KAAc;IAC3F,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC;QACb,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC;YACrB,IAAI,EAAE,KAAK,kBAAkB,IAAI,GAAG,CAAC,aAAa,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACjH,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC;YACrB,OAAO;gBACL,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,UAAU,CAAC;gBACjE,eAAe,EAAE,EAAE;gBACnB,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC;gBAC/B,gBAAgB,EAAE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,GAAG,CAAC;aAC3E,CAAC;QACJ,CAAC;QACD;YACE,OAAO,EAAE,GAAG,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAcD,MAAM,CAAC,MAAM,WAAW,GAAc,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAUhF,oFAAoF;AACpF,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C,MAAM,UAAU,WAAW,CAAC,OAAoB;IAC9C,MAAM,EAAE,GAAG,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC;AAUD;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CAAC,OAAoB,EAAE,KAAgB,EAAE,OAAiB,QAAQ;IACvF,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,GAAG,GAAG,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,MAAM,UAAU,GAAG,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE,CAAC;IACnF,MAAM,SAAS,GAAG,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACzC,CAAC;AAQD,iEAAiE;AACjE,SAAS,OAAO,CAAC,IAAc,EAAE,KAAa,EAAE,IAAY;IAC1D,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACpF,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3H,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,OAAO,IAAI,GAAG,IAAI,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,KAAa;IACvD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,KAAK,KAAK,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,SAAS,CACvB,IAAc,EACd,QAAgC,EAChC,KAAgB,EAChB,GAAW,EACX,SAA6C,IAAI,GAAG,EAAE,EACtD,OAAiB,QAAQ;IAEzB,MAAM,IAAI,GAAc,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7E,IAAI,IAAI,CAAC,KAAK,KAAK,kBAAkB,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc;QAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAEjG,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,6EAA6E;IAC7E,4EAA4E;IAC5E,8DAA8D;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,cAAc,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7G,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAE9C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClE,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,UAAU,CACxB,SAAiB,EACjB,QAAgC,EAChC,GAAW,EACX,SAA6C,IAAI,GAAG,EAAE;IAEtD,OAAO,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9D,CAAC"}
|
package/dist/message-hook.js
CHANGED
|
@@ -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.
|
|
68
|
+
if (true) CLI_VERSION = "0.7.23";
|
|
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
|
|
132
|
-
if (
|
|
133
|
-
lines.push(`To answer, call recall_message_send with from: "${recipient}", to: "${
|
|
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
|
|
211
|
+
const take = !inSubagent && !stopSpent && DELIVERS[tool].has(event);
|
|
154
212
|
return { sessionId, event, cwd, take };
|
|
155
213
|
}
|
|
156
|
-
function
|
|
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:
|
|
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)
|
|
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
|
}
|
|
@@ -395,23 +466,37 @@ async function wait(payload, target) {
|
|
|
395
466
|
releaseWaiter(sessionId);
|
|
396
467
|
}
|
|
397
468
|
}
|
|
469
|
+
function argValue(name) {
|
|
470
|
+
const i = process.argv.indexOf(name);
|
|
471
|
+
return i >= 0 ? process.argv[i + 1] : void 0;
|
|
472
|
+
}
|
|
398
473
|
async function main() {
|
|
399
474
|
if (process.env.CHAT_RECALL_MESSAGE_HOOK === "0") return 0;
|
|
475
|
+
const toolArg = argValue("--tool") ?? "claude";
|
|
476
|
+
if (!isHookTool(toolArg)) {
|
|
477
|
+
debug(`unknown tool ${toolArg}`);
|
|
478
|
+
return 0;
|
|
479
|
+
}
|
|
400
480
|
const raw = await readStdin();
|
|
401
|
-
let
|
|
481
|
+
let parsed;
|
|
402
482
|
try {
|
|
403
|
-
|
|
483
|
+
parsed = JSON.parse(raw);
|
|
404
484
|
} catch {
|
|
405
485
|
debug("stdin is not JSON");
|
|
406
486
|
return 0;
|
|
407
487
|
}
|
|
488
|
+
const payload = normalizePayload(toolArg, parsed, argValue("--event"));
|
|
489
|
+
if (!payload) {
|
|
490
|
+
debug(`${toolArg}: an event this hook does not handle`);
|
|
491
|
+
return 0;
|
|
492
|
+
}
|
|
408
493
|
const target = recallTarget();
|
|
409
494
|
if (!target) {
|
|
410
495
|
debug("no login: run `chat-recall login`");
|
|
411
496
|
return 0;
|
|
412
497
|
}
|
|
413
|
-
if (process.argv.includes("--wait")) return wait(payload, target);
|
|
414
|
-
await turn(payload, target);
|
|
498
|
+
if (process.argv.includes("--wait")) return toolArg === "claude" ? wait(payload, target) : 0;
|
|
499
|
+
await turn(payload, target, toolArg);
|
|
415
500
|
return 0;
|
|
416
501
|
}
|
|
417
502
|
main().then(
|
package/dist/message-hook.js.map
CHANGED
|
@@ -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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"}
|
package/dist/scan-worker.js
CHANGED
|
@@ -8137,6 +8137,10 @@ var init_agy = __esm({
|
|
|
8137
8137
|
sharedSettingsFile() {
|
|
8138
8138
|
return join7(this.sharedRootDir(), "settings.json");
|
|
8139
8139
|
}
|
|
8140
|
+
/** The global hooks file the CLI reads. It does not read hooks from its own home directory. */
|
|
8141
|
+
sharedHooksFile() {
|
|
8142
|
+
return join7(this.sharedRootDir(), "config", "hooks.json");
|
|
8143
|
+
}
|
|
8140
8144
|
sharedProjectsJson() {
|
|
8141
8145
|
return join7(this.sharedRootDir(), "projects.json");
|
|
8142
8146
|
}
|
package/dist/watch.js
CHANGED
|
@@ -10823,6 +10823,10 @@ var init_agy = __esm({
|
|
|
10823
10823
|
sharedSettingsFile() {
|
|
10824
10824
|
return join14(this.sharedRootDir(), "settings.json");
|
|
10825
10825
|
}
|
|
10826
|
+
/** The global hooks file the CLI reads. It does not read hooks from its own home directory. */
|
|
10827
|
+
sharedHooksFile() {
|
|
10828
|
+
return join14(this.sharedRootDir(), "config", "hooks.json");
|
|
10829
|
+
}
|
|
10826
10830
|
sharedProjectsJson() {
|
|
10827
10831
|
return join14(this.sharedRootDir(), "projects.json");
|
|
10828
10832
|
}
|
|
@@ -27526,7 +27530,7 @@ var init_http = __esm({
|
|
|
27526
27530
|
CLI_VERSION = JSON.parse(readFileSync35(new URL("../package.json", import.meta.url), "utf-8")).version || CLI_VERSION;
|
|
27527
27531
|
} catch {
|
|
27528
27532
|
try {
|
|
27529
|
-
if (true) CLI_VERSION = "0.7.
|
|
27533
|
+
if (true) CLI_VERSION = "0.7.23";
|
|
27530
27534
|
} catch {
|
|
27531
27535
|
}
|
|
27532
27536
|
}
|
|
@@ -28020,7 +28024,7 @@ var init_telemetry = __esm({
|
|
|
28020
28024
|
init_sync_client();
|
|
28021
28025
|
cliVersion = () => {
|
|
28022
28026
|
try {
|
|
28023
|
-
return true ? "0.7.
|
|
28027
|
+
return true ? "0.7.23" : "dev";
|
|
28024
28028
|
} catch {
|
|
28025
28029
|
return "dev";
|
|
28026
28030
|
}
|
|
@@ -30385,7 +30389,7 @@ var init_sync_client = __esm({
|
|
|
30385
30389
|
ownVersion = JSON.parse(readFileSync39(join46(dir, "../package.json"), "utf-8")).version || ownVersion;
|
|
30386
30390
|
} catch {
|
|
30387
30391
|
try {
|
|
30388
|
-
if (true) ownVersion = "0.7.
|
|
30392
|
+
if (true) ownVersion = "0.7.23";
|
|
30389
30393
|
} catch {
|
|
30390
30394
|
}
|
|
30391
30395
|
}
|
|
@@ -33749,7 +33753,7 @@ try {
|
|
|
33749
33753
|
ownVersion2 = JSON.parse(readFileSync43(join52(dir, "../package.json"), "utf-8")).version || ownVersion2;
|
|
33750
33754
|
} catch {
|
|
33751
33755
|
try {
|
|
33752
|
-
if (true) ownVersion2 = "0.7.
|
|
33756
|
+
if (true) ownVersion2 = "0.7.23";
|
|
33753
33757
|
} catch {
|
|
33754
33758
|
}
|
|
33755
33759
|
}
|
|
@@ -34134,7 +34138,7 @@ async function runCollectorMigration(opts) {
|
|
|
34134
34138
|
init_sync_ledger();
|
|
34135
34139
|
init_collector_health();
|
|
34136
34140
|
import { existsSync as existsSync52, readFileSync as readFileSync49, statSync as statSync49 } from "fs";
|
|
34137
|
-
var CLI_VERSION3 = true ? "0.7.
|
|
34141
|
+
var CLI_VERSION3 = true ? "0.7.23" : "0.0.0";
|
|
34138
34142
|
var DEBOUNCE_MS = 5e3;
|
|
34139
34143
|
var PLANS_DIR = claudeBackend.plansDir();
|
|
34140
34144
|
var TASKS_DIR = claudeBackend.tasksDir();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chat-recall",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.23",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/munhq/chat-recall.git"
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"typecheck:daemon": "tsc -p tsconfig.daemon.json"
|
|
63
63
|
},
|
|
64
64
|
"dependencies": {
|
|
65
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
65
|
+
"@modelcontextprotocol/sdk": "^1.32.2",
|
|
66
66
|
"@noble/ciphers": "^2.2.0",
|
|
67
67
|
"@noble/hashes": "^2.2.0",
|
|
68
68
|
"chalk": "^5.3.0",
|
|
@@ -19,6 +19,12 @@ hook holds a connection to the server. When a message arrives, it wakes the
|
|
|
19
19
|
session within about a second, also a session that is idle and waits for its
|
|
20
20
|
user.
|
|
21
21
|
|
|
22
|
+
Codex, Antigravity, Cursor, opencode and pi sessions get the same hook. They
|
|
23
|
+
report at start and at each prompt, and the hook adds waiting messages to the
|
|
24
|
+
next prompt. Cursor adds them when the agent stops, as a follow-up prompt. These
|
|
25
|
+
tools have no waiter: an idle session reads its messages when its user types
|
|
26
|
+
next. Their ids carry the tool's prefix, for example `agy_…` or `opencode_ses_…`.
|
|
27
|
+
|
|
22
28
|
A session reaches only the sessions of the same person. A teammate's sessions
|
|
23
29
|
are not addressable.
|
|
24
30
|
|