@diggerhq/anyware 0.7.0 → 0.7.1
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/claude/claudeLocalLauncher.d.ts.map +1 -1
- package/dist/claude/claudeLocalLauncher.js +24 -2
- package/dist/claude/claudeLocalLauncher.js.map +1 -1
- package/dist/hooks/generateHookSettings.d.ts.map +1 -1
- package/dist/hooks/generateHookSettings.js +52 -0
- package/dist/hooks/generateHookSettings.js.map +1 -1
- package/dist/hooks/hookServer.d.ts +20 -8
- package/dist/hooks/hookServer.d.ts.map +1 -1
- package/dist/hooks/hookServer.js +16 -8
- package/dist/hooks/hookServer.js.map +1 -1
- package/package.json +1 -1
- package/scripts/session_hook_forwarder.cjs +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeLocalLauncher.d.ts","sourceRoot":"","sources":["../../src/claude/claudeLocalLauncher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"claudeLocalLauncher.d.ts","sourceRoot":"","sources":["../../src/claude/claudeLocalLauncher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAiKpF"}
|
|
@@ -7,17 +7,39 @@ import { generateHookSettingsFile, cleanupHookSettingsFile } from '../hooks/gene
|
|
|
7
7
|
* Returns 'switch' if we should switch to remote mode, 'exit' if we should exit
|
|
8
8
|
*/
|
|
9
9
|
export async function claudeLocalLauncher(session) {
|
|
10
|
+
// Variable to hold scanner reference (needed in onHookEvent before scanner is created)
|
|
11
|
+
let scanner = null;
|
|
10
12
|
// Start hook server to receive session notifications from Claude
|
|
11
13
|
const hookServer = await startHookServer({
|
|
12
14
|
onSessionHook: (sessionId) => {
|
|
13
15
|
session.setClaudeSessionId(sessionId);
|
|
14
|
-
scanner
|
|
16
|
+
if (scanner) {
|
|
17
|
+
scanner.onNewSession(sessionId);
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
onHookEvent: (eventType, _sessionId, data) => {
|
|
21
|
+
// Forward hook events to the WebSocket as claude_event
|
|
22
|
+
// Transform hook data to the expected format
|
|
23
|
+
const claudeEvent = {
|
|
24
|
+
type: eventType,
|
|
25
|
+
hook_data: {
|
|
26
|
+
tool_name: data.tool_name,
|
|
27
|
+
tool_input: data.tool_input,
|
|
28
|
+
tool_response: data.tool_response,
|
|
29
|
+
prompt: data.prompt,
|
|
30
|
+
stop_reason: data.stop_reason,
|
|
31
|
+
response: data.response,
|
|
32
|
+
cwd: data.cwd,
|
|
33
|
+
},
|
|
34
|
+
session_id: data.session_id,
|
|
35
|
+
};
|
|
36
|
+
session.sendClaudeEvent(claudeEvent);
|
|
15
37
|
},
|
|
16
38
|
});
|
|
17
39
|
// Generate hook settings file for Claude
|
|
18
40
|
const hookSettingsPath = generateHookSettingsFile(hookServer.port);
|
|
19
41
|
// Create scanner to watch session file and forward messages to server
|
|
20
|
-
|
|
42
|
+
scanner = await createSessionScanner({
|
|
21
43
|
sessionId: session.claudeSessionId,
|
|
22
44
|
workingDirectory: session.path,
|
|
23
45
|
onMessage: (message) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeLocalLauncher.js","sourceRoot":"","sources":["../../src/claude/claudeLocalLauncher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"claudeLocalLauncher.js","sourceRoot":"","sources":["../../src/claude/claudeLocalLauncher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateHookSettings.d.ts","sourceRoot":"","sources":["../../src/hooks/generateHookSettings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyBH;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"generateHookSettings.d.ts","sourceRoot":"","sources":["../../src/hooks/generateHookSettings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyBH;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmF7D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQ9D"}
|
|
@@ -51,6 +51,58 @@ export function generateHookSettingsFile(port) {
|
|
|
51
51
|
],
|
|
52
52
|
},
|
|
53
53
|
],
|
|
54
|
+
UserPromptSubmit: [
|
|
55
|
+
{
|
|
56
|
+
hooks: [
|
|
57
|
+
{
|
|
58
|
+
type: 'command',
|
|
59
|
+
command: hookCommand,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
PostToolUse: [
|
|
65
|
+
{
|
|
66
|
+
matcher: '*',
|
|
67
|
+
hooks: [
|
|
68
|
+
{
|
|
69
|
+
type: 'command',
|
|
70
|
+
command: hookCommand,
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
PermissionRequest: [
|
|
76
|
+
{
|
|
77
|
+
matcher: '*',
|
|
78
|
+
hooks: [
|
|
79
|
+
{
|
|
80
|
+
type: 'command',
|
|
81
|
+
command: hookCommand,
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
Stop: [
|
|
87
|
+
{
|
|
88
|
+
hooks: [
|
|
89
|
+
{
|
|
90
|
+
type: 'command',
|
|
91
|
+
command: hookCommand,
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
SessionEnd: [
|
|
97
|
+
{
|
|
98
|
+
hooks: [
|
|
99
|
+
{
|
|
100
|
+
type: 'command',
|
|
101
|
+
command: hookCommand,
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
],
|
|
54
106
|
},
|
|
55
107
|
};
|
|
56
108
|
writeFileSync(filepath, JSON.stringify(settings, null, 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateHookSettings.js","sourceRoot":"","sources":["../../src/hooks/generateHookSettings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;GAEG;AACH,SAAS,cAAc;IACrB,yDAAyD;IACzD,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,iDAAiD;IACjD,MAAM,QAAQ,GAAG,gBAAgB,OAAO,CAAC,GAAG,OAAO,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE1C,oCAAoC;IACpC,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,4BAA4B,CAAC,CAAC;IACxF,MAAM,WAAW,GAAG,SAAS,eAAe,KAAK,IAAI,EAAE,CAAC;IAExD,MAAM,QAAQ,GAAG;QACf,KAAK,EAAE;YACL,YAAY,EAAE;gBACZ;oBACE,OAAO,EAAE,GAAG;oBACZ,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,WAAW;yBACrB;qBACF;iBACF;aACF;SACF;KACF,CAAC;IAEF,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"generateHookSettings.js","sourceRoot":"","sources":["../../src/hooks/generateHookSettings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;GAEG;AACH,SAAS,cAAc;IACrB,yDAAyD;IACzD,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,iDAAiD;IACjD,MAAM,QAAQ,GAAG,gBAAgB,OAAO,CAAC,GAAG,OAAO,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE1C,oCAAoC;IACpC,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,4BAA4B,CAAC,CAAC;IACxF,MAAM,WAAW,GAAG,SAAS,eAAe,KAAK,IAAI,EAAE,CAAC;IAExD,MAAM,QAAQ,GAAG;QACf,KAAK,EAAE;YACL,YAAY,EAAE;gBACZ;oBACE,OAAO,EAAE,GAAG;oBACZ,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,WAAW;yBACrB;qBACF;iBACF;aACF;YACD,gBAAgB,EAAE;gBAChB;oBACE,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,WAAW;yBACrB;qBACF;iBACF;aACF;YACD,WAAW,EAAE;gBACX;oBACE,OAAO,EAAE,GAAG;oBACZ,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,WAAW;yBACrB;qBACF;iBACF;aACF;YACD,iBAAiB,EAAE;gBACjB;oBACE,OAAO,EAAE,GAAG;oBACZ,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,WAAW;yBACrB;qBACF;iBACF;aACF;YACD,IAAI,EAAE;gBACJ;oBACE,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,WAAW;yBACrB;qBACF;iBACF;aACF;YACD,UAAU,EAAE;gBACV;oBACE,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,WAAW;yBACrB;qBACF;iBACF;aACF;SACF;KACF,CAAC;IAEF,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;AACH,CAAC"}
|
|
@@ -1,24 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* HTTP server for receiving Claude
|
|
2
|
+
* HTTP server for receiving Claude hooks
|
|
3
3
|
*
|
|
4
|
-
* Claude's SessionStart
|
|
5
|
-
*
|
|
4
|
+
* Claude's hooks (SessionStart, PermissionRequest, PostToolUse, etc.)
|
|
5
|
+
* notify us of events during the session.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Hook event types from Claude
|
|
9
9
|
*/
|
|
10
|
-
export
|
|
10
|
+
export type HookEventType = 'SessionStart' | 'UserPromptSubmit' | 'PostToolUse' | 'PermissionRequest' | 'Stop' | 'SessionEnd';
|
|
11
|
+
/**
|
|
12
|
+
* Data received from Claude hooks
|
|
13
|
+
*/
|
|
14
|
+
export interface HookData {
|
|
11
15
|
session_id?: string;
|
|
12
16
|
sessionId?: string;
|
|
17
|
+
hook_event_name?: HookEventType;
|
|
13
18
|
transcript_path?: string;
|
|
14
19
|
cwd?: string;
|
|
15
|
-
hook_event_name?: string;
|
|
16
20
|
source?: string;
|
|
21
|
+
tool_name?: string;
|
|
22
|
+
tool_input?: unknown;
|
|
23
|
+
tool_response?: string;
|
|
24
|
+
prompt?: string;
|
|
25
|
+
stop_reason?: string;
|
|
26
|
+
response?: string;
|
|
17
27
|
[key: string]: unknown;
|
|
18
28
|
}
|
|
19
29
|
export interface HookServerOptions {
|
|
20
30
|
/** Called when a session hook is received with a valid session ID */
|
|
21
|
-
onSessionHook: (sessionId: string, data:
|
|
31
|
+
onSessionHook: (sessionId: string, data: HookData) => void;
|
|
32
|
+
/** Called when any hook event is received (for forwarding to WebSocket) */
|
|
33
|
+
onHookEvent?: (eventType: HookEventType, sessionId: string, data: HookData) => void;
|
|
22
34
|
}
|
|
23
35
|
export interface HookServer {
|
|
24
36
|
/** The port the server is listening on */
|
|
@@ -27,7 +39,7 @@ export interface HookServer {
|
|
|
27
39
|
stop: () => void;
|
|
28
40
|
}
|
|
29
41
|
/**
|
|
30
|
-
* Start a dedicated HTTP server for receiving Claude
|
|
42
|
+
* Start a dedicated HTTP server for receiving Claude hooks
|
|
31
43
|
*/
|
|
32
44
|
export declare function startHookServer(options: HookServerOptions): Promise<HookServer>;
|
|
33
45
|
//# sourceMappingURL=hookServer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hookServer.d.ts","sourceRoot":"","sources":["../../src/hooks/hookServer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"hookServer.d.ts","sourceRoot":"","sources":["../../src/hooks/hookServer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,kBAAkB,GAClB,aAAa,GACb,mBAAmB,GACnB,MAAM,GACN,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3D,2EAA2E;IAC3E,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;CACrF;AAED,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAkFrF"}
|
package/dist/hooks/hookServer.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* HTTP server for receiving Claude
|
|
2
|
+
* HTTP server for receiving Claude hooks
|
|
3
3
|
*
|
|
4
|
-
* Claude's SessionStart
|
|
5
|
-
*
|
|
4
|
+
* Claude's hooks (SessionStart, PermissionRequest, PostToolUse, etc.)
|
|
5
|
+
* notify us of events during the session.
|
|
6
6
|
*/
|
|
7
7
|
import { createServer } from 'node:http';
|
|
8
8
|
/**
|
|
9
|
-
* Start a dedicated HTTP server for receiving Claude
|
|
9
|
+
* Start a dedicated HTTP server for receiving Claude hooks
|
|
10
10
|
*/
|
|
11
11
|
export async function startHookServer(options) {
|
|
12
|
-
const { onSessionHook } = options;
|
|
12
|
+
const { onSessionHook, onHookEvent } = options;
|
|
13
13
|
return new Promise((resolve, reject) => {
|
|
14
14
|
const server = createServer(async (req, res) => {
|
|
15
|
-
//
|
|
16
|
-
if (req.method === 'POST' && req.url === '/hook/session-start') {
|
|
15
|
+
// Handle POST to /hook (all hook types) or /hook/session-start (legacy)
|
|
16
|
+
if (req.method === 'POST' && (req.url === '/hook' || req.url === '/hook/session-start')) {
|
|
17
17
|
// Set timeout to prevent hanging
|
|
18
18
|
const timeout = setTimeout(() => {
|
|
19
19
|
if (!res.headersSent) {
|
|
@@ -36,8 +36,16 @@ export async function startHookServer(options) {
|
|
|
36
36
|
}
|
|
37
37
|
// Support both snake_case (from Claude) and camelCase
|
|
38
38
|
const sessionId = data.session_id || data.sessionId;
|
|
39
|
+
const eventType = data.hook_event_name;
|
|
39
40
|
if (sessionId) {
|
|
40
|
-
|
|
41
|
+
// For SessionStart, call the session hook handler
|
|
42
|
+
if (eventType === 'SessionStart' || req.url === '/hook/session-start') {
|
|
43
|
+
onSessionHook(sessionId, data);
|
|
44
|
+
}
|
|
45
|
+
// Forward all events via onHookEvent callback
|
|
46
|
+
if (onHookEvent && eventType) {
|
|
47
|
+
onHookEvent(eventType, sessionId, data);
|
|
48
|
+
}
|
|
41
49
|
}
|
|
42
50
|
res.writeHead(200, { 'Content-Type': 'text/plain' }).end('ok');
|
|
43
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hookServer.js","sourceRoot":"","sources":["../../src/hooks/hookServer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAA2C,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"hookServer.js","sourceRoot":"","sources":["../../src/hooks/hookServer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Hook Forwarder
|
|
4
4
|
*
|
|
5
|
-
* This script is executed by Claude's SessionStart
|
|
5
|
+
* This script is executed by Claude's hooks (SessionStart, PermissionRequest, etc.)
|
|
6
6
|
* It reads JSON data from stdin and forwards it to the CLI's hook server.
|
|
7
7
|
*
|
|
8
|
-
* Usage: echo '{"session_id":"..."}' | node session_hook_forwarder.cjs <port>
|
|
8
|
+
* Usage: echo '{"session_id":"...","hook_event_name":"SessionStart"}' | node session_hook_forwarder.cjs <port>
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
const http = require('http');
|
|
@@ -30,7 +30,7 @@ process.stdin.on('end', () => {
|
|
|
30
30
|
host: '127.0.0.1',
|
|
31
31
|
port: port,
|
|
32
32
|
method: 'POST',
|
|
33
|
-
path: '/hook
|
|
33
|
+
path: '/hook',
|
|
34
34
|
headers: {
|
|
35
35
|
'Content-Type': 'application/json',
|
|
36
36
|
'Content-Length': body.length,
|