genbox-agent 1.0.39 → 1.0.41
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/hook.d.ts +6 -5
- package/dist/hook.d.ts.map +1 -1
- package/dist/hook.js +200 -81
- package/dist/hook.js.map +1 -1
- package/dist/hooks/daemon-client.d.ts +39 -0
- package/dist/hooks/daemon-client.d.ts.map +1 -0
- package/dist/hooks/daemon-client.js +238 -0
- package/dist/hooks/daemon-client.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +23 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/server/auth.d.ts +51 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/auth.js +154 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/index.d.ts +156 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +595 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/port-finder.d.ts +45 -0
- package/dist/server/port-finder.d.ts.map +1 -0
- package/dist/server/port-finder.js +267 -0
- package/dist/server/port-finder.js.map +1 -0
- package/dist/storage/index.d.ts +82 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +209 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/manager.d.ts +112 -0
- package/dist/storage/manager.d.ts.map +1 -0
- package/dist/storage/manager.js +200 -0
- package/dist/storage/manager.js.map +1 -0
- package/dist/storage/repositories/events.d.ts +101 -0
- package/dist/storage/repositories/events.d.ts.map +1 -0
- package/dist/storage/repositories/events.js +258 -0
- package/dist/storage/repositories/events.js.map +1 -0
- package/dist/storage/repositories/index.d.ts +9 -0
- package/dist/storage/repositories/index.d.ts.map +1 -0
- package/dist/storage/repositories/index.js +25 -0
- package/dist/storage/repositories/index.js.map +1 -0
- package/dist/storage/repositories/messages.d.ts +123 -0
- package/dist/storage/repositories/messages.d.ts.map +1 -0
- package/dist/storage/repositories/messages.js +209 -0
- package/dist/storage/repositories/messages.js.map +1 -0
- package/dist/storage/repositories/sessions.d.ts +158 -0
- package/dist/storage/repositories/sessions.d.ts.map +1 -0
- package/dist/storage/repositories/sessions.js +342 -0
- package/dist/storage/repositories/sessions.js.map +1 -0
- package/dist/storage/schema.d.ts +42 -0
- package/dist/storage/schema.d.ts.map +1 -0
- package/dist/storage/schema.js +278 -0
- package/dist/storage/schema.js.map +1 -0
- package/dist/sync/background-sync.d.ts +83 -0
- package/dist/sync/background-sync.d.ts.map +1 -0
- package/dist/sync/background-sync.js +367 -0
- package/dist/sync/background-sync.js.map +1 -0
- package/dist/sync/index.d.ts +7 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +23 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/unified-daemon.js +219 -0
- package/dist/unified-daemon.js.map +1 -1
- package/dist/unified-hook.d.ts +4 -3
- package/dist/unified-hook.d.ts.map +1 -1
- package/dist/unified-hook.js +155 -31
- package/dist/unified-hook.js.map +1 -1
- package/package.json +4 -1
package/dist/hook.d.ts
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Claude Code Hook Script
|
|
4
4
|
*
|
|
5
|
-
* Called by Claude Code hooks to report all interactions to the
|
|
6
|
-
* This script reads from stdin (hook input) and POSTs to the
|
|
5
|
+
* Called by Claude Code hooks to report all interactions to the local daemon.
|
|
6
|
+
* This script reads from stdin (hook input) and POSTs to the local daemon,
|
|
7
|
+
* which handles storage and background sync to the cloud API.
|
|
8
|
+
*
|
|
9
|
+
* The daemon auto-starts if not running (lazy start).
|
|
7
10
|
*
|
|
8
11
|
* Environment variables:
|
|
9
|
-
* - GENBOX_ID: Unique identifier for this genbox
|
|
10
|
-
* - GENBOX_TOKEN: Authentication token for the API
|
|
11
|
-
* - MONITORING_API_URL: Base URL for the monitoring API
|
|
12
|
+
* - GENBOX_ID: Unique identifier for this genbox (optional for native sessions)
|
|
12
13
|
* - CLAUDE_HOOK_TYPE: The type of hook being called (set by Claude Code)
|
|
13
14
|
*/
|
|
14
15
|
export {};
|
package/dist/hook.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG"}
|
package/dist/hook.js
CHANGED
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* Claude Code Hook Script
|
|
5
5
|
*
|
|
6
|
-
* Called by Claude Code hooks to report all interactions to the
|
|
7
|
-
* This script reads from stdin (hook input) and POSTs to the
|
|
6
|
+
* Called by Claude Code hooks to report all interactions to the local daemon.
|
|
7
|
+
* This script reads from stdin (hook input) and POSTs to the local daemon,
|
|
8
|
+
* which handles storage and background sync to the cloud API.
|
|
9
|
+
*
|
|
10
|
+
* The daemon auto-starts if not running (lazy start).
|
|
8
11
|
*
|
|
9
12
|
* Environment variables:
|
|
10
|
-
* - GENBOX_ID: Unique identifier for this genbox
|
|
11
|
-
* - GENBOX_TOKEN: Authentication token for the API
|
|
12
|
-
* - MONITORING_API_URL: Base URL for the monitoring API
|
|
13
|
+
* - GENBOX_ID: Unique identifier for this genbox (optional for native sessions)
|
|
13
14
|
* - CLAUDE_HOOK_TYPE: The type of hook being called (set by Claude Code)
|
|
14
15
|
*/
|
|
15
16
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
@@ -50,14 +51,31 @@ const fs = __importStar(require("fs"));
|
|
|
50
51
|
const path = __importStar(require("path"));
|
|
51
52
|
const crypto = __importStar(require("crypto"));
|
|
52
53
|
const http = __importStar(require("http"));
|
|
53
|
-
const
|
|
54
|
+
const childProcess = __importStar(require("child_process"));
|
|
54
55
|
// Configuration
|
|
55
56
|
const GENBOX_ID = process.env.GENBOX_ID || '';
|
|
56
|
-
const GENBOX_TOKEN = process.env.GENBOX_TOKEN || '';
|
|
57
|
-
const MONITORING_API_URL = process.env.MONITORING_API_URL || 'http://localhost:3001';
|
|
58
57
|
const HOOK_TYPE = process.env.CLAUDE_HOOK_TYPE || 'Unknown';
|
|
59
|
-
//
|
|
58
|
+
// Local daemon configuration
|
|
59
|
+
const BASE_PORT = 47191;
|
|
60
|
+
const MAX_PORT_OFFSET = 10;
|
|
61
|
+
const PORT_FILE = path.join(process.env.HOME || '/tmp', '.genbox-daemon-port');
|
|
60
62
|
const SESSION_FILE = path.join(process.env.HOME || '/tmp', '.claude-session-id');
|
|
63
|
+
/**
|
|
64
|
+
* Map Claude hook types to unified event types
|
|
65
|
+
*/
|
|
66
|
+
function mapHookType(hookType) {
|
|
67
|
+
const mapping = {
|
|
68
|
+
'SessionStart': 'session_start',
|
|
69
|
+
'SessionEnd': 'session_end',
|
|
70
|
+
'UserPromptSubmit': 'prompt_submitted',
|
|
71
|
+
'Stop': 'response_completed',
|
|
72
|
+
'SubagentStop': 'response_completed',
|
|
73
|
+
'PreToolUse': 'tool_started',
|
|
74
|
+
'PostToolUse': 'tool_completed',
|
|
75
|
+
'Notification': 'notification',
|
|
76
|
+
};
|
|
77
|
+
return mapping[hookType] || hookType.toLowerCase();
|
|
78
|
+
}
|
|
61
79
|
function getOrCreateSessionId() {
|
|
62
80
|
try {
|
|
63
81
|
if (fs.existsSync(SESSION_FILE)) {
|
|
@@ -67,12 +85,8 @@ function getOrCreateSessionId() {
|
|
|
67
85
|
catch {
|
|
68
86
|
// Ignore read errors
|
|
69
87
|
}
|
|
70
|
-
// Generate new session ID
|
|
71
|
-
const sessionId = crypto
|
|
72
|
-
.createHash('sha256')
|
|
73
|
-
.update(`${GENBOX_ID}-${Date.now()}-${process.pid}`)
|
|
74
|
-
.digest('hex')
|
|
75
|
-
.slice(0, 32);
|
|
88
|
+
// Generate new session ID (UUID format)
|
|
89
|
+
const sessionId = crypto.randomUUID();
|
|
76
90
|
try {
|
|
77
91
|
fs.writeFileSync(SESSION_FILE, sessionId);
|
|
78
92
|
}
|
|
@@ -91,67 +105,144 @@ function clearSessionId() {
|
|
|
91
105
|
// Ignore errors
|
|
92
106
|
}
|
|
93
107
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Read the daemon port from the port file
|
|
110
|
+
*/
|
|
111
|
+
function readDaemonPort() {
|
|
112
|
+
try {
|
|
113
|
+
if (fs.existsSync(PORT_FILE)) {
|
|
114
|
+
const content = fs.readFileSync(PORT_FILE, 'utf-8').trim();
|
|
115
|
+
const port = parseInt(content, 10);
|
|
116
|
+
if (!isNaN(port) && port > 0) {
|
|
117
|
+
return port;
|
|
118
|
+
}
|
|
104
119
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Ignore errors
|
|
123
|
+
}
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check if daemon is running on a port (quick check)
|
|
128
|
+
*/
|
|
129
|
+
function isDaemonRunning(port) {
|
|
130
|
+
return new Promise((resolve) => {
|
|
131
|
+
const req = http.request({
|
|
132
|
+
hostname: '127.0.0.1',
|
|
133
|
+
port,
|
|
134
|
+
path: '/health',
|
|
135
|
+
method: 'GET',
|
|
136
|
+
timeout: 500,
|
|
137
|
+
}, (res) => {
|
|
138
|
+
resolve(res.statusCode === 200);
|
|
139
|
+
});
|
|
140
|
+
req.on('error', () => resolve(false));
|
|
141
|
+
req.on('timeout', () => {
|
|
142
|
+
req.destroy();
|
|
143
|
+
resolve(false);
|
|
144
|
+
});
|
|
145
|
+
req.end();
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Find the daemon port by checking the port file or scanning ports
|
|
150
|
+
*/
|
|
151
|
+
async function findDaemonPort() {
|
|
152
|
+
// First check the port file
|
|
153
|
+
const savedPort = readDaemonPort();
|
|
154
|
+
if (savedPort && (await isDaemonRunning(savedPort))) {
|
|
155
|
+
return savedPort;
|
|
156
|
+
}
|
|
157
|
+
// Quick scan of base ports
|
|
158
|
+
for (let offset = 0; offset < MAX_PORT_OFFSET; offset++) {
|
|
159
|
+
const port = BASE_PORT + offset;
|
|
160
|
+
if (await isDaemonRunning(port)) {
|
|
161
|
+
return port;
|
|
108
162
|
}
|
|
109
163
|
}
|
|
110
|
-
return
|
|
164
|
+
return null;
|
|
111
165
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
166
|
+
/**
|
|
167
|
+
* Start the daemon if not running (lazy start)
|
|
168
|
+
*/
|
|
169
|
+
async function startDaemon() {
|
|
170
|
+
// Find the daemon executable
|
|
171
|
+
const possiblePaths = [
|
|
172
|
+
path.join(__dirname, '../dist/unified-daemon.js'),
|
|
173
|
+
path.join(__dirname, 'unified-daemon.js'),
|
|
174
|
+
path.join(__dirname, '../../dist/unified-daemon.js'),
|
|
175
|
+
];
|
|
176
|
+
let daemonPath = null;
|
|
177
|
+
for (const p of possiblePaths) {
|
|
178
|
+
if (fs.existsSync(p)) {
|
|
179
|
+
daemonPath = p;
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (!daemonPath) {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
// Start daemon in background for native mode
|
|
188
|
+
const proc = childProcess.spawn('node', [daemonPath, '--mode', 'native', '--server'], {
|
|
189
|
+
detached: true,
|
|
190
|
+
stdio: 'ignore',
|
|
191
|
+
env: {
|
|
192
|
+
...process.env,
|
|
193
|
+
GENBOX_DAEMON_BACKGROUND: '1',
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
proc.unref();
|
|
197
|
+
// Wait for daemon to start (up to 2 seconds)
|
|
198
|
+
for (let i = 0; i < 20; i++) {
|
|
199
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
200
|
+
const port = await findDaemonPort();
|
|
201
|
+
if (port) {
|
|
202
|
+
return port;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
// Ignore spawn errors
|
|
208
|
+
}
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Send event to local daemon
|
|
213
|
+
*/
|
|
214
|
+
async function sendEventToLocalDaemon(eventData) {
|
|
215
|
+
// Find running daemon
|
|
216
|
+
let port = await findDaemonPort();
|
|
217
|
+
// If no daemon running, try to start one (lazy start)
|
|
218
|
+
if (!port) {
|
|
219
|
+
port = await startDaemon();
|
|
220
|
+
}
|
|
221
|
+
if (!port) {
|
|
222
|
+
// Daemon not available - silently fail (don't block Claude)
|
|
115
223
|
return false;
|
|
116
224
|
}
|
|
117
|
-
const
|
|
118
|
-
// Add metadata (using snake_case to match DTO)
|
|
119
|
-
// Use Claude's session_id if provided in hook input, otherwise generate one
|
|
120
|
-
eventData.genbox_id = GENBOX_ID;
|
|
121
|
-
eventData.genbox_token = GENBOX_TOKEN;
|
|
122
|
-
eventData.session_id = inputSessionId || getOrCreateSessionId();
|
|
123
|
-
eventData.tmux_session = getTmuxSession();
|
|
124
|
-
eventData.cwd = process.cwd();
|
|
125
|
-
eventData.timestamp = new Date().toISOString();
|
|
126
|
-
const data = JSON.stringify(eventData);
|
|
127
|
-
const isHttps = url.protocol === 'https:';
|
|
225
|
+
const body = JSON.stringify(eventData);
|
|
128
226
|
return new Promise((resolve) => {
|
|
129
|
-
const
|
|
130
|
-
hostname:
|
|
131
|
-
port
|
|
132
|
-
path:
|
|
227
|
+
const req = http.request({
|
|
228
|
+
hostname: '127.0.0.1',
|
|
229
|
+
port,
|
|
230
|
+
path: '/api/events',
|
|
133
231
|
method: 'POST',
|
|
134
232
|
headers: {
|
|
135
233
|
'Content-Type': 'application/json',
|
|
136
|
-
'Content-Length': Buffer.byteLength(
|
|
137
|
-
'X-Genbox-Id': GENBOX_ID,
|
|
138
|
-
'X-Genbox-Token': GENBOX_TOKEN,
|
|
234
|
+
'Content-Length': Buffer.byteLength(body),
|
|
139
235
|
},
|
|
140
|
-
timeout:
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
resolve(res.statusCode === 200 || res.statusCode === 201 || res.statusCode === 202);
|
|
144
|
-
});
|
|
145
|
-
req.on('error', (error) => {
|
|
146
|
-
console.error(`Warning: Failed to send event: ${error.message}`);
|
|
147
|
-
resolve(false);
|
|
236
|
+
timeout: 2000,
|
|
237
|
+
}, (res) => {
|
|
238
|
+
resolve(res.statusCode === 200 || res.statusCode === 201);
|
|
148
239
|
});
|
|
240
|
+
req.on('error', () => resolve(false));
|
|
149
241
|
req.on('timeout', () => {
|
|
150
242
|
req.destroy();
|
|
151
|
-
console.error('Warning: Request timeout');
|
|
152
243
|
resolve(false);
|
|
153
244
|
});
|
|
154
|
-
req.write(
|
|
245
|
+
req.write(body);
|
|
155
246
|
req.end();
|
|
156
247
|
});
|
|
157
248
|
}
|
|
@@ -163,7 +254,7 @@ function parseHookInput(input) {
|
|
|
163
254
|
return JSON.parse(input);
|
|
164
255
|
}
|
|
165
256
|
catch {
|
|
166
|
-
return {
|
|
257
|
+
return { rawInput: input };
|
|
167
258
|
}
|
|
168
259
|
}
|
|
169
260
|
async function main() {
|
|
@@ -173,53 +264,81 @@ async function main() {
|
|
|
173
264
|
input = fs.readFileSync(0, 'utf-8');
|
|
174
265
|
}
|
|
175
266
|
const hookInput = parseHookInput(input);
|
|
176
|
-
//
|
|
267
|
+
// Get or use session ID from hook input
|
|
268
|
+
const sessionId = hookInput.session_id || getOrCreateSessionId();
|
|
269
|
+
// Build event data for local daemon
|
|
177
270
|
const eventData = {
|
|
178
|
-
|
|
271
|
+
eventType: mapHookType(HOOK_TYPE),
|
|
272
|
+
sessionId,
|
|
273
|
+
provider: 'claude',
|
|
274
|
+
projectPath: process.cwd(),
|
|
275
|
+
data: {},
|
|
179
276
|
};
|
|
180
277
|
switch (HOOK_TYPE) {
|
|
181
278
|
case 'PreToolUse':
|
|
182
|
-
eventData.
|
|
183
|
-
|
|
279
|
+
eventData.data = {
|
|
280
|
+
toolName: hookInput.tool_name || '',
|
|
281
|
+
toolInput: hookInput.tool_input || {},
|
|
282
|
+
};
|
|
184
283
|
break;
|
|
185
284
|
case 'PostToolUse':
|
|
186
|
-
eventData.
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
285
|
+
eventData.data = {
|
|
286
|
+
toolName: hookInput.tool_name || '',
|
|
287
|
+
toolInput: hookInput.tool_input || {},
|
|
288
|
+
toolResponse: hookInput.tool_response || {},
|
|
289
|
+
success: hookInput.tool_response?.success !== false,
|
|
290
|
+
};
|
|
190
291
|
break;
|
|
191
292
|
case 'UserPromptSubmit':
|
|
192
293
|
const prompt = hookInput.prompt || '';
|
|
193
|
-
eventData.
|
|
194
|
-
|
|
294
|
+
eventData.data = {
|
|
295
|
+
prompt,
|
|
296
|
+
promptLength: prompt.length,
|
|
297
|
+
};
|
|
195
298
|
break;
|
|
196
299
|
case 'Stop':
|
|
197
|
-
eventData.
|
|
300
|
+
eventData.data = {
|
|
301
|
+
stopReason: hookInput.stop_reason || '',
|
|
302
|
+
};
|
|
303
|
+
// Extract token metrics if available
|
|
304
|
+
if (hookInput.usage) {
|
|
305
|
+
eventData.inputTokens = hookInput.usage.input_tokens;
|
|
306
|
+
eventData.outputTokens = hookInput.usage.output_tokens;
|
|
307
|
+
eventData.cacheReadTokens = hookInput.usage.cache_read_input_tokens;
|
|
308
|
+
eventData.cacheWriteTokens = hookInput.usage.cache_creation_input_tokens;
|
|
309
|
+
}
|
|
198
310
|
break;
|
|
199
311
|
case 'SubagentStop':
|
|
200
|
-
eventData.
|
|
201
|
-
|
|
312
|
+
eventData.data = {
|
|
313
|
+
subagentType: hookInput.subagent_type || '',
|
|
314
|
+
stopReason: hookInput.stop_reason || '',
|
|
315
|
+
};
|
|
202
316
|
break;
|
|
203
317
|
case 'Notification':
|
|
204
|
-
eventData.
|
|
318
|
+
eventData.data = {
|
|
319
|
+
message: hookInput.message || '',
|
|
320
|
+
};
|
|
205
321
|
break;
|
|
206
322
|
case 'SessionStart':
|
|
207
|
-
eventData.
|
|
323
|
+
eventData.data = {
|
|
324
|
+
cliVersion: hookInput.cli_version || '',
|
|
325
|
+
};
|
|
208
326
|
break;
|
|
209
327
|
case 'SessionEnd':
|
|
210
328
|
clearSessionId();
|
|
211
|
-
eventData.
|
|
329
|
+
eventData.data = {
|
|
330
|
+
durationMs: hookInput.duration_ms || 0,
|
|
331
|
+
};
|
|
212
332
|
break;
|
|
213
333
|
}
|
|
214
|
-
// Send
|
|
215
|
-
// Pass Claude's session_id if provided in input
|
|
334
|
+
// Send to local daemon (fire and forget - don't block Claude)
|
|
216
335
|
try {
|
|
217
|
-
await
|
|
336
|
+
await sendEventToLocalDaemon(eventData);
|
|
218
337
|
}
|
|
219
338
|
catch {
|
|
220
339
|
// Ignore errors - hooks should not block Claude
|
|
221
340
|
}
|
|
222
|
-
// Exit
|
|
341
|
+
// Exit immediately
|
|
223
342
|
process.exit(0);
|
|
224
343
|
}
|
|
225
344
|
main().catch(() => process.exit(0));
|
package/dist/hook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":";;AACA
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../src/hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Daemon Client
|
|
3
|
+
*
|
|
4
|
+
* Client for hooks to communicate with the local daemon.
|
|
5
|
+
* Handles posting events to localhost and lazy daemon start.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Post event data to the local daemon
|
|
9
|
+
*/
|
|
10
|
+
export declare function postToLocalDaemon(endpoint: string, data: Record<string, any>): Promise<{
|
|
11
|
+
success: boolean;
|
|
12
|
+
data?: any;
|
|
13
|
+
error?: string;
|
|
14
|
+
}>;
|
|
15
|
+
/**
|
|
16
|
+
* Post a hook event to the local daemon
|
|
17
|
+
*/
|
|
18
|
+
export declare function postHookEvent(eventData: {
|
|
19
|
+
eventType: string;
|
|
20
|
+
sessionId: string;
|
|
21
|
+
provider?: string;
|
|
22
|
+
projectPath?: string;
|
|
23
|
+
data?: Record<string, any>;
|
|
24
|
+
inputTokens?: number;
|
|
25
|
+
outputTokens?: number;
|
|
26
|
+
cacheReadTokens?: number;
|
|
27
|
+
cacheWriteTokens?: number;
|
|
28
|
+
contextTokens?: number;
|
|
29
|
+
costCents?: number;
|
|
30
|
+
}): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Check if daemon is available (running or can be started)
|
|
33
|
+
*/
|
|
34
|
+
export declare function isDaemonAvailable(): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* Get daemon port if running
|
|
37
|
+
*/
|
|
38
|
+
export declare function getDaemonPort(): Promise<number | null>;
|
|
39
|
+
//# sourceMappingURL=daemon-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-client.d.ts","sourceRoot":"","sources":["../../src/hooks/daemon-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8IH;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA4D3D;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGnB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG1D;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAE5D"}
|