a24z 1.0.4 → 1.0.6
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/index.js +367 -114
- package/dist/index.js.map +1 -1
- package/package.json +8 -6
- package/templates/universal-collector.sh +35 -0
- package/templates/post-hook.sh +0 -104
- package/templates/pre-hook.sh +0 -111
package/dist/index.js
CHANGED
|
@@ -9,6 +9,11 @@ import os from 'os';
|
|
|
9
9
|
import { fileURLToPath } from 'url';
|
|
10
10
|
import axios from 'axios';
|
|
11
11
|
import open from 'open';
|
|
12
|
+
import dotenv from "dotenv";
|
|
13
|
+
dotenv.config();
|
|
14
|
+
// Single source of truth for WorkOS client ID.
|
|
15
|
+
// If you change the client, update this constant and publish.
|
|
16
|
+
const WORKOS_CLIENT_ID = "client_01K4ZPKST26YPKMQBGQW7HZ4SB";
|
|
12
17
|
const __filename = fileURLToPath(import.meta.url);
|
|
13
18
|
const __dirname = path.dirname(__filename);
|
|
14
19
|
// Configuration constants
|
|
@@ -29,14 +34,13 @@ class A24zCLI {
|
|
|
29
34
|
catch (error) {
|
|
30
35
|
console.error(chalk.red('Error loading configuration:'), error);
|
|
31
36
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
organizationId: null,
|
|
36
|
-
userId: null,
|
|
37
|
+
const defaultConfig = {
|
|
38
|
+
apiUrl: 'https://app.a24z.ai',
|
|
39
|
+
clientId: WORKOS_CLIENT_ID,
|
|
37
40
|
accessToken: null,
|
|
38
41
|
installedAt: null
|
|
39
42
|
};
|
|
43
|
+
return defaultConfig;
|
|
40
44
|
}
|
|
41
45
|
saveConfig() {
|
|
42
46
|
try {
|
|
@@ -48,12 +52,16 @@ class A24zCLI {
|
|
|
48
52
|
}
|
|
49
53
|
}
|
|
50
54
|
async install(options = {}) {
|
|
55
|
+
console.log('api url', options.apiUrl);
|
|
51
56
|
const spinner = ora('Installing A24Z Claude Code hooks...').start();
|
|
52
57
|
try {
|
|
53
|
-
// Update
|
|
58
|
+
// Update configuration if provided
|
|
54
59
|
if (options.apiUrl) {
|
|
55
60
|
this.config.apiUrl = options.apiUrl;
|
|
56
61
|
}
|
|
62
|
+
if (options.clientId) {
|
|
63
|
+
this.config.clientId = options.clientId;
|
|
64
|
+
}
|
|
57
65
|
// Ensure directories exist
|
|
58
66
|
fs.mkdirSync(HOOKS_DIR, { recursive: true });
|
|
59
67
|
// Copy hook scripts from templates
|
|
@@ -73,6 +81,7 @@ class A24zCLI {
|
|
|
73
81
|
console.log(chalk.white(` • Hooks directory: ${HOOKS_DIR}`));
|
|
74
82
|
console.log(chalk.white(` • Settings file: ${CLAUDE_SETTINGS_FILE}`));
|
|
75
83
|
console.log(chalk.white(` • API URL: ${this.config.apiUrl}`));
|
|
84
|
+
console.log(chalk.white(` • Client ID: ${this.config.clientId}`));
|
|
76
85
|
}
|
|
77
86
|
catch (error) {
|
|
78
87
|
spinner.fail('Installation failed');
|
|
@@ -82,24 +91,45 @@ class A24zCLI {
|
|
|
82
91
|
}
|
|
83
92
|
async copyHookScripts() {
|
|
84
93
|
const templatesDir = path.join(__dirname, '..', 'templates');
|
|
85
|
-
//
|
|
86
|
-
const
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
.
|
|
91
|
-
.
|
|
92
|
-
|
|
93
|
-
.
|
|
94
|
-
.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
94
|
+
// Use single universal collector for all hook types - much more maintainable!
|
|
95
|
+
const universalTemplate = 'universal-collector.sh';
|
|
96
|
+
const hookDestinations = [
|
|
97
|
+
'a24z-pre-hook.sh',
|
|
98
|
+
'a24z-post-hook.sh',
|
|
99
|
+
'a24z-user-prompt-submit-hook.sh',
|
|
100
|
+
'a24z-session-start-hook.sh',
|
|
101
|
+
'a24z-session-end-hook.sh',
|
|
102
|
+
'a24z-subagent-stop-hook.sh',
|
|
103
|
+
'a24z-notification-hook.sh',
|
|
104
|
+
'a24z-stop-hook.sh',
|
|
105
|
+
'a24z-precompact-hook.sh'
|
|
106
|
+
];
|
|
107
|
+
try {
|
|
108
|
+
// Read the universal template once
|
|
109
|
+
const templatePath = path.join(templatesDir, universalTemplate);
|
|
110
|
+
const templateContent = fs.readFileSync(templatePath, 'utf8');
|
|
111
|
+
// Replace placeholders with actual values
|
|
112
|
+
const hookContent = templateContent
|
|
113
|
+
.replace(/\{\{API_URL\}\}/g, this.config.apiUrl)
|
|
114
|
+
.replace(/\{\{ACCESS_TOKEN\}\}/g, this.config.accessToken || '');
|
|
115
|
+
// Copy the same universal script to all hook locations
|
|
116
|
+
// The script auto-detects its hook type at runtime
|
|
117
|
+
for (const destination of hookDestinations) {
|
|
118
|
+
try {
|
|
119
|
+
const hookPath = path.join(HOOKS_DIR, destination);
|
|
120
|
+
fs.writeFileSync(hookPath, hookContent);
|
|
121
|
+
fs.chmodSync(hookPath, '755');
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error(chalk.yellow(`Warning: Could not create ${destination}:`, error));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
console.log(chalk.green(`✅ Universal collector deployed to ${hookDestinations.length} hook locations`));
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.error(chalk.red(`❌ Failed to read universal template ${universalTemplate}:`, error));
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
103
133
|
}
|
|
104
134
|
updateClaudeSettings() {
|
|
105
135
|
let settings = {};
|
|
@@ -113,41 +143,87 @@ class A24zCLI {
|
|
|
113
143
|
}
|
|
114
144
|
}
|
|
115
145
|
// Ensure hooks object exists
|
|
116
|
-
if (
|
|
146
|
+
if (typeof settings.hooks !== 'object' || settings.hooks === null) {
|
|
117
147
|
settings.hooks = {};
|
|
118
148
|
}
|
|
119
|
-
// Configure hooks
|
|
120
|
-
settings
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
settings.
|
|
128
|
-
|
|
129
|
-
hooks: [{
|
|
130
|
-
type: "command",
|
|
131
|
-
command: path.join(HOOKS_DIR, 'a24z-post-hook.sh')
|
|
132
|
-
}]
|
|
133
|
-
}];
|
|
149
|
+
// Configure all A24Z hooks for comprehensive observability using "dumb" collectors
|
|
150
|
+
this.addOrUpdateHook(settings, 'PreToolUse', path.join(HOOKS_DIR, 'a24z-pre-hook.sh'));
|
|
151
|
+
this.addOrUpdateHook(settings, 'PostToolUse', path.join(HOOKS_DIR, 'a24z-post-hook.sh'));
|
|
152
|
+
this.addOrUpdateHook(settings, 'UserPromptSubmit', path.join(HOOKS_DIR, 'a24z-user-prompt-submit-hook.sh'));
|
|
153
|
+
this.addOrUpdateHook(settings, 'SessionStart', path.join(HOOKS_DIR, 'a24z-session-start-hook.sh'));
|
|
154
|
+
this.addOrUpdateHook(settings, 'SessionEnd', path.join(HOOKS_DIR, 'a24z-session-end-hook.sh'));
|
|
155
|
+
this.addOrUpdateHook(settings, 'SubagentStop', path.join(HOOKS_DIR, 'a24z-subagent-stop-hook.sh'));
|
|
156
|
+
this.addOrUpdateHook(settings, 'Notification', path.join(HOOKS_DIR, 'a24z-notification-hook.sh'));
|
|
157
|
+
this.addOrUpdateHook(settings, 'Stop', path.join(HOOKS_DIR, 'a24z-stop-hook.sh'));
|
|
158
|
+
this.addOrUpdateHook(settings, 'PreCompact', path.join(HOOKS_DIR, 'a24z-precompact-hook.sh'));
|
|
134
159
|
// Create directory and write settings
|
|
135
160
|
fs.mkdirSync(path.dirname(CLAUDE_SETTINGS_FILE), { recursive: true });
|
|
136
161
|
fs.writeFileSync(CLAUDE_SETTINGS_FILE, JSON.stringify(settings, null, 2));
|
|
137
162
|
}
|
|
163
|
+
// No binary helper shim; hooks will call `a24z hook` directly for transparency.
|
|
164
|
+
/**
|
|
165
|
+
* Merge-safe helper: adds our command without duplicating or overwriting others.
|
|
166
|
+
* - Creates the hook type array if missing
|
|
167
|
+
* - Adds a new entry with matcher "*" if our command is not present
|
|
168
|
+
* - De-duplicates exact command path if somehow repeated
|
|
169
|
+
*/
|
|
170
|
+
addOrUpdateHook(settings, hookType, commandPath) {
|
|
171
|
+
if (!settings.hooks)
|
|
172
|
+
settings.hooks = {};
|
|
173
|
+
const existing = settings.hooks[hookType];
|
|
174
|
+
const newEntry = {
|
|
175
|
+
matcher: "*",
|
|
176
|
+
hooks: [{ type: "command", command: commandPath }]
|
|
177
|
+
};
|
|
178
|
+
if (!Array.isArray(existing)) {
|
|
179
|
+
settings.hooks[hookType] = [newEntry];
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const hasOurCommand = existing.some(e => e.hooks.some(h => typeof h.command === 'string' && h.command.includes('a24z-')));
|
|
183
|
+
if (!hasOurCommand) {
|
|
184
|
+
existing.push(newEntry);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
// Ensure no duplicates of exact command path
|
|
188
|
+
for (const entry of existing) {
|
|
189
|
+
const seen = new Set();
|
|
190
|
+
entry.hooks = entry.hooks.filter(h => {
|
|
191
|
+
if (typeof h.command !== 'string')
|
|
192
|
+
return true;
|
|
193
|
+
if (h.command !== commandPath)
|
|
194
|
+
return true;
|
|
195
|
+
if (seen.has(h.command))
|
|
196
|
+
return false;
|
|
197
|
+
seen.add(h.command);
|
|
198
|
+
return true;
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
138
202
|
async login() {
|
|
139
203
|
console.log(chalk.blue('🔐 Logging in to A24Z Observability...'));
|
|
140
204
|
try {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
console.log(chalk.
|
|
148
|
-
console.log(chalk.
|
|
149
|
-
|
|
150
|
-
|
|
205
|
+
// Ensure we have the latest client ID from environment
|
|
206
|
+
if (!this.config.clientId || this.config.clientId === 'client_01K4ZPKST26YPKMQBGQW7HZ4SB') {
|
|
207
|
+
this.config.clientId = process.env.WORKOS_CLIENT_ID || this.config.clientId;
|
|
208
|
+
this.saveConfig(); // Save the updated config
|
|
209
|
+
}
|
|
210
|
+
// Step 1: Request device authorization (OAuth 2.1 Device Flow)
|
|
211
|
+
console.log(chalk.gray(`Requesting device auth from: ${this.config.apiUrl}/api/auth/device`));
|
|
212
|
+
console.log(chalk.gray(`Using client_id: ${this.config.clientId}`));
|
|
213
|
+
const deviceResponse = await axios.post(`${this.config.apiUrl}/api/auth/device`, {
|
|
214
|
+
client_id: this.config.clientId
|
|
215
|
+
});
|
|
216
|
+
console.log(chalk.gray('Device response:', JSON.stringify(deviceResponse.data, null, 2)));
|
|
217
|
+
const { device_code, user_code, verification_uri, verification_uri_complete, expires_in, interval } = deviceResponse.data.data;
|
|
218
|
+
// Step 2: Display user code and instructions
|
|
219
|
+
console.log(chalk.green('\\n📱 Complete authentication in your browser:'));
|
|
220
|
+
console.log(chalk.cyan(` Go to: ${verification_uri}`));
|
|
221
|
+
console.log(chalk.yellow(` Enter code: ${user_code}`));
|
|
222
|
+
if (verification_uri_complete) {
|
|
223
|
+
console.log(chalk.gray(` Or visit: ${verification_uri_complete}`));
|
|
224
|
+
}
|
|
225
|
+
console.log(chalk.white(` Code expires in ${Math.floor(expires_in / 60)} minutes`));
|
|
226
|
+
// Optional: Auto-open browser
|
|
151
227
|
const { openBrowser } = await inquirer.prompt([{
|
|
152
228
|
type: 'confirm',
|
|
153
229
|
name: 'openBrowser',
|
|
@@ -155,22 +231,21 @@ class A24zCLI {
|
|
|
155
231
|
default: true
|
|
156
232
|
}]);
|
|
157
233
|
if (openBrowser) {
|
|
158
|
-
await open(
|
|
234
|
+
await open(verification_uri_complete || verification_uri);
|
|
159
235
|
}
|
|
160
|
-
// Poll for
|
|
161
|
-
const
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
// Store
|
|
165
|
-
this.config.accessToken =
|
|
166
|
-
this.config.userId = auth.user.id;
|
|
167
|
-
this.config.organizationId = auth.organization_id;
|
|
236
|
+
// Step 3: Poll for tokens
|
|
237
|
+
const spinner = ora('Waiting for authentication...').start();
|
|
238
|
+
const tokens = await this.pollForTokens(device_code, interval, expires_in);
|
|
239
|
+
spinner.succeed('Authentication successful!');
|
|
240
|
+
// Step 4: Store tokens
|
|
241
|
+
this.config.accessToken = tokens.access_token;
|
|
168
242
|
this.saveConfig();
|
|
169
|
-
// Reinstall hooks with auth
|
|
243
|
+
// Reinstall hooks with updated auth
|
|
170
244
|
await this.install();
|
|
171
245
|
console.log(chalk.green('\\n✅ Login successful!'));
|
|
172
|
-
|
|
173
|
-
|
|
246
|
+
if (tokens.user?.email) {
|
|
247
|
+
console.log(chalk.white('👤 User:'), chalk.cyan(tokens.user.email));
|
|
248
|
+
}
|
|
174
249
|
console.log(chalk.green('\\nYour tool calls will now be associated with your organization.'));
|
|
175
250
|
}
|
|
176
251
|
catch (error) {
|
|
@@ -179,63 +254,111 @@ class A24zCLI {
|
|
|
179
254
|
process.exit(1);
|
|
180
255
|
}
|
|
181
256
|
}
|
|
182
|
-
async
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
|
|
257
|
+
async pollForTokens(deviceCode, interval, expiresIn) {
|
|
258
|
+
const startTime = Date.now();
|
|
259
|
+
const timeoutMs = expiresIn * 1000;
|
|
260
|
+
let currentInterval = interval;
|
|
261
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
186
262
|
try {
|
|
187
|
-
const response = await axios.
|
|
188
|
-
|
|
263
|
+
const response = await axios.post(`${this.config.apiUrl}/api/auth/device/token`, {
|
|
264
|
+
device_code: deviceCode,
|
|
265
|
+
client_id: this.config.clientId
|
|
266
|
+
});
|
|
267
|
+
if (response.data.success) {
|
|
189
268
|
return response.data.data;
|
|
190
269
|
}
|
|
191
270
|
}
|
|
192
271
|
catch (error) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
272
|
+
const status = error.response?.status;
|
|
273
|
+
const errorCode = error.response?.data?.error;
|
|
274
|
+
if (status === 428 && errorCode === 'authorization_pending') {
|
|
275
|
+
// Continue polling - user hasn't authorized yet
|
|
276
|
+
await new Promise(resolve => setTimeout(resolve, currentInterval * 1000));
|
|
197
277
|
continue;
|
|
198
278
|
}
|
|
199
|
-
if (
|
|
200
|
-
|
|
279
|
+
if (status === 429 && errorCode === 'slow_down') {
|
|
280
|
+
// Slow down polling per RFC 8628
|
|
281
|
+
currentInterval += 5;
|
|
282
|
+
await new Promise(resolve => setTimeout(resolve, currentInterval * 1000));
|
|
283
|
+
continue;
|
|
201
284
|
}
|
|
285
|
+
if (status === 403 && errorCode === 'access_denied') {
|
|
286
|
+
throw new Error('User denied authorization');
|
|
287
|
+
}
|
|
288
|
+
if (status === 400 && errorCode === 'expired_token') {
|
|
289
|
+
throw new Error('Device code expired');
|
|
290
|
+
}
|
|
291
|
+
// For other errors, continue polling unless it's clearly a permanent failure
|
|
292
|
+
if (status >= 500) {
|
|
293
|
+
await new Promise(resolve => setTimeout(resolve, currentInterval * 1000));
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
throw error;
|
|
202
297
|
}
|
|
203
|
-
await new Promise(resolve => setTimeout(resolve,
|
|
204
|
-
attempts++;
|
|
298
|
+
await new Promise(resolve => setTimeout(resolve, currentInterval * 1000));
|
|
205
299
|
}
|
|
206
300
|
throw new Error('Authentication timeout');
|
|
207
301
|
}
|
|
208
302
|
async uninstall() {
|
|
209
303
|
const spinner = ora('Uninstalling A24Z hooks...').start();
|
|
210
304
|
try {
|
|
211
|
-
// Remove hook scripts
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
305
|
+
// Remove all A24Z hook scripts
|
|
306
|
+
const hookFiles = [
|
|
307
|
+
'a24z-pre-hook.sh',
|
|
308
|
+
'a24z-post-hook.sh',
|
|
309
|
+
'a24z-user-prompt-submit-hook.sh',
|
|
310
|
+
'a24z-session-start-hook.sh',
|
|
311
|
+
'a24z-session-end-hook.sh',
|
|
312
|
+
'a24z-subagent-stop-hook.sh',
|
|
313
|
+
'a24z-notification-hook.sh',
|
|
314
|
+
'a24z-stop-hook.sh',
|
|
315
|
+
'a24z-precompact-hook.sh'
|
|
316
|
+
];
|
|
317
|
+
for (const hookFile of hookFiles) {
|
|
318
|
+
const hookPath = path.join(HOOKS_DIR, hookFile);
|
|
319
|
+
if (fs.existsSync(hookPath)) {
|
|
320
|
+
try {
|
|
321
|
+
fs.unlinkSync(hookPath);
|
|
322
|
+
}
|
|
323
|
+
catch (error) {
|
|
324
|
+
console.warn(chalk.yellow(`Warning: Could not remove ${hookFile}`));
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// Update Claude settings: remove only our hooks, preserve all other user hooks/settings
|
|
219
329
|
if (fs.existsSync(CLAUDE_SETTINGS_FILE)) {
|
|
220
330
|
try {
|
|
221
|
-
const
|
|
222
|
-
if (
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
331
|
+
const parsed = JSON.parse(fs.readFileSync(CLAUDE_SETTINGS_FILE, 'utf8'));
|
|
332
|
+
if (parsed && typeof parsed === 'object') {
|
|
333
|
+
if (typeof parsed.hooks === 'object' && parsed.hooks !== null) {
|
|
334
|
+
const hookTypes = ['PreToolUse', 'PostToolUse', 'UserPromptSubmit', 'SessionStart', 'SessionEnd', 'SubagentStop', 'Notification', 'Stop', 'PreCompact'];
|
|
335
|
+
for (const hookType of hookTypes) {
|
|
336
|
+
const entries = parsed.hooks[hookType];
|
|
337
|
+
if (Array.isArray(entries)) {
|
|
338
|
+
// Remove our commands from each entry's hooks list
|
|
339
|
+
for (const entry of entries) {
|
|
340
|
+
if (Array.isArray(entry.hooks)) {
|
|
341
|
+
entry.hooks = entry.hooks.filter(h => {
|
|
342
|
+
if (typeof h.command !== 'string')
|
|
343
|
+
return true;
|
|
344
|
+
return !h.command.includes('a24z-');
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// Remove entries that no longer have any hooks
|
|
349
|
+
const remaining = entries.filter(e => Array.isArray(e.hooks) && e.hooks.length > 0);
|
|
350
|
+
if (remaining.length > 0) {
|
|
351
|
+
parsed.hooks[hookType] = remaining;
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
delete parsed.hooks[hookType];
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
// Keep hooks object even if empty to avoid surprising deletions
|
|
226
359
|
}
|
|
227
|
-
if (settings.hooks.PostToolUse) {
|
|
228
|
-
settings.hooks.PostToolUse = settings.hooks.PostToolUse.filter((hook) => !hook.hooks?.[0]?.command?.includes('a24z-post-hook.sh'));
|
|
229
|
-
}
|
|
230
|
-
// Clean up empty arrays
|
|
231
|
-
if (settings.hooks.PreToolUse?.length === 0)
|
|
232
|
-
delete settings.hooks.PreToolUse;
|
|
233
|
-
if (settings.hooks.PostToolUse?.length === 0)
|
|
234
|
-
delete settings.hooks.PostToolUse;
|
|
235
|
-
if (Object.keys(settings.hooks).length === 0)
|
|
236
|
-
delete settings.hooks;
|
|
237
360
|
}
|
|
238
|
-
fs.writeFileSync(CLAUDE_SETTINGS_FILE, JSON.stringify(
|
|
361
|
+
fs.writeFileSync(CLAUDE_SETTINGS_FILE, JSON.stringify(parsed, null, 2));
|
|
239
362
|
}
|
|
240
363
|
catch (error) {
|
|
241
364
|
console.warn(chalk.yellow('Warning: Could not update settings.json'));
|
|
@@ -256,27 +379,48 @@ class A24zCLI {
|
|
|
256
379
|
}
|
|
257
380
|
async status() {
|
|
258
381
|
console.log(chalk.blue('📊 A24Z Observability Status\\n'));
|
|
259
|
-
// Check installation
|
|
260
|
-
const
|
|
261
|
-
|
|
382
|
+
// Check installation of all hook types
|
|
383
|
+
const hookChecks = [
|
|
384
|
+
{ name: 'PreToolUse', file: 'a24z-pre-hook.sh' },
|
|
385
|
+
{ name: 'PostToolUse', file: 'a24z-post-hook.sh' },
|
|
386
|
+
{ name: 'UserPromptSubmit', file: 'a24z-user-prompt-submit-hook.sh' },
|
|
387
|
+
{ name: 'SessionStart', file: 'a24z-session-start-hook.sh' },
|
|
388
|
+
{ name: 'SessionEnd', file: 'a24z-session-end-hook.sh' },
|
|
389
|
+
{ name: 'SubagentStop', file: 'a24z-subagent-stop-hook.sh' },
|
|
390
|
+
{ name: 'Notification', file: 'a24z-notification-hook.sh' },
|
|
391
|
+
{ name: 'Stop', file: 'a24z-stop-hook.sh' },
|
|
392
|
+
{ name: 'PreCompact', file: 'a24z-precompact-hook.sh' }
|
|
393
|
+
];
|
|
262
394
|
const settingsExists = fs.existsSync(CLAUDE_SETTINGS_FILE);
|
|
263
|
-
|
|
264
|
-
console.log(
|
|
265
|
-
|
|
395
|
+
let installedHooks = 0;
|
|
396
|
+
console.log(chalk.white('🔧 Hook Installation Status:'));
|
|
397
|
+
for (const hook of hookChecks) {
|
|
398
|
+
const exists = fs.existsSync(path.join(HOOKS_DIR, hook.file));
|
|
399
|
+
if (exists)
|
|
400
|
+
installedHooks++;
|
|
401
|
+
console.log(` • ${hook.name}: ${exists ? chalk.green('✅ Installed') : chalk.red('❌ Not installed')}`);
|
|
402
|
+
}
|
|
403
|
+
console.log(`\\n • Total hooks installed: ${chalk.cyan(`${installedHooks}/9`)}`);
|
|
266
404
|
console.log(` • Claude settings: ${settingsExists ? chalk.green('✅ Configured') : chalk.red('❌ Not configured')}`);
|
|
405
|
+
console.log(` • Collector type: ${chalk.cyan('Universal (auto-detecting)')}`);
|
|
406
|
+
console.log(` • Collector version: ${chalk.cyan('2.1-universal-enhanced')}`);
|
|
267
407
|
if (this.config.installedAt) {
|
|
268
408
|
console.log(` • Installed at: ${chalk.cyan(new Date(this.config.installedAt).toLocaleString())}`);
|
|
269
409
|
}
|
|
410
|
+
// Show universal collector benefits
|
|
411
|
+
if (installedHooks > 0) {
|
|
412
|
+
console.log(chalk.white('\\n🎯 Universal Collector Features:'));
|
|
413
|
+
console.log(` • Auto-detects hook type from environment`);
|
|
414
|
+
console.log(` • Tool version detection (Claude Code, Cursor, VS Code)`);
|
|
415
|
+
console.log(` • Schema versioning support`);
|
|
416
|
+
console.log(` • Single codebase for all hooks (maintainable)`);
|
|
417
|
+
console.log(` • Enhanced/basic endpoint routing`);
|
|
418
|
+
}
|
|
270
419
|
console.log(chalk.white('\\n🔐 Authentication Status:'));
|
|
271
420
|
console.log(` • Logged in: ${this.config.accessToken ? chalk.green('✅ Yes') : chalk.red('❌ No')}`);
|
|
272
|
-
if (this.config.userId) {
|
|
273
|
-
console.log(` • User ID: ${chalk.cyan(this.config.userId)}`);
|
|
274
|
-
}
|
|
275
|
-
if (this.config.organizationId) {
|
|
276
|
-
console.log(` • Organization: ${chalk.cyan(this.config.organizationId)}`);
|
|
277
|
-
}
|
|
278
421
|
console.log(chalk.white('\\n⚙️ Configuration:'));
|
|
279
422
|
console.log(` • API URL: ${chalk.cyan(this.config.apiUrl)}`);
|
|
423
|
+
console.log(` • Client ID: ${chalk.cyan(this.config.clientId)}`);
|
|
280
424
|
console.log(` • Hooks directory: ${chalk.cyan(HOOKS_DIR)}`);
|
|
281
425
|
console.log(` • Settings file: ${chalk.cyan(CLAUDE_SETTINGS_FILE)}`);
|
|
282
426
|
// Test API connectivity
|
|
@@ -308,20 +452,122 @@ class A24zCLI {
|
|
|
308
452
|
}
|
|
309
453
|
}
|
|
310
454
|
}
|
|
455
|
+
async hook(hookTypeArg) {
|
|
456
|
+
// Read stdin fully
|
|
457
|
+
const readStdin = async () => new Promise((resolve) => {
|
|
458
|
+
let data = '';
|
|
459
|
+
process.stdin.setEncoding('utf8');
|
|
460
|
+
process.stdin.on('data', (chunk) => { data += chunk; });
|
|
461
|
+
process.stdin.on('end', () => resolve(data));
|
|
462
|
+
setTimeout(() => resolve(data), 5000);
|
|
463
|
+
});
|
|
464
|
+
try {
|
|
465
|
+
const raw = await readStdin();
|
|
466
|
+
const hookType = hookTypeArg || process.env.CLAUDE_HOOK_EVENT_NAME || 'Unknown';
|
|
467
|
+
// Build environment snapshot
|
|
468
|
+
const safe = (v) => (v && v.length > 0 ? v : null);
|
|
469
|
+
const environment = {
|
|
470
|
+
CLAUDE_USER: safe(process.env.CLAUDE_USER),
|
|
471
|
+
CLAUDE_SESSION_ID: safe(process.env.CLAUDE_SESSION_ID),
|
|
472
|
+
CLAUDE_PROJECT_DIR: safe(process.env.CLAUDE_PROJECT_DIR),
|
|
473
|
+
CLAUDE_TRANSCRIPT_PATH: safe(process.env.CLAUDE_TRANSCRIPT_PATH),
|
|
474
|
+
CLAUDE_WORKING_DIR: safe(process.env.CLAUDE_WORKING_DIR),
|
|
475
|
+
CLAUDE_HOOK_EVENT_NAME: hookType,
|
|
476
|
+
CLAUDE_VERSION: safe(process.env.CLAUDE_VERSION),
|
|
477
|
+
CLAUDE_BUILD: safe(process.env.CLAUDE_BUILD),
|
|
478
|
+
PWD: safe(process.env.PWD),
|
|
479
|
+
USER: safe(process.env.USER),
|
|
480
|
+
HOME: safe(process.env.HOME),
|
|
481
|
+
HOSTNAME: safe(process.env.HOSTNAME),
|
|
482
|
+
SHELL: safe(process.env.SHELL),
|
|
483
|
+
LANG: safe(process.env.LANG),
|
|
484
|
+
TZ: safe(process.env.TZ),
|
|
485
|
+
TERM: safe(process.env.TERM),
|
|
486
|
+
NODE_VERSION: process.version,
|
|
487
|
+
captured_at: new Date().toISOString(),
|
|
488
|
+
};
|
|
489
|
+
const enhanced = typeof environment.CLAUDE_VERSION === 'string' && environment.CLAUDE_VERSION !== null;
|
|
490
|
+
const endpoint = enhanced
|
|
491
|
+
? `${this.config.apiUrl}/api/hooks/enhanced/ingest`
|
|
492
|
+
: `${this.config.apiUrl}/api/hooks/ingest`;
|
|
493
|
+
let rawInput = raw;
|
|
494
|
+
try {
|
|
495
|
+
rawInput = JSON.parse(raw);
|
|
496
|
+
}
|
|
497
|
+
catch { /* raw passthrough */ }
|
|
498
|
+
const payload = enhanced
|
|
499
|
+
? {
|
|
500
|
+
source_tool: { name: 'claude-code', version: environment.CLAUDE_VERSION, build: environment.CLAUDE_BUILD },
|
|
501
|
+
hook_schema: { version: 'v1.0', format: 'anthropic_official', detected_at: new Date().toISOString() },
|
|
502
|
+
hook_type: hookType,
|
|
503
|
+
timestamp: new Date().toISOString(),
|
|
504
|
+
raw_input: rawInput,
|
|
505
|
+
environment,
|
|
506
|
+
collector_metadata: {
|
|
507
|
+
version: '2.1-cli-helper',
|
|
508
|
+
deployment_mode: 'cli_subcommand',
|
|
509
|
+
configuration_version: '1.0',
|
|
510
|
+
enhanced_features: ['thin_wrapper', 'env_snapshot'],
|
|
511
|
+
hook_type_detection_method: 'arg_or_env'
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
: {
|
|
515
|
+
hook_type: hookType,
|
|
516
|
+
timestamp: new Date().toISOString(),
|
|
517
|
+
raw_input: rawInput,
|
|
518
|
+
environment,
|
|
519
|
+
collector_version: '2.1-cli-basic'
|
|
520
|
+
};
|
|
521
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
522
|
+
if (this.config.accessToken)
|
|
523
|
+
headers.Authorization = `Bearer ${this.config.accessToken}`;
|
|
524
|
+
await axios.post(endpoint, payload, { headers, timeout: 10000 });
|
|
525
|
+
}
|
|
526
|
+
catch (error) {
|
|
527
|
+
// Log to stderr but don't fail the hook
|
|
528
|
+
console.error('[a24z hook] Error:', error instanceof Error ? error.message : error);
|
|
529
|
+
}
|
|
530
|
+
finally {
|
|
531
|
+
// Always pass through stdin unchanged
|
|
532
|
+
process.stdin.resume();
|
|
533
|
+
}
|
|
534
|
+
}
|
|
311
535
|
}
|
|
312
536
|
// CLI setup
|
|
313
537
|
const program = new Command();
|
|
314
538
|
const cli = new A24zCLI();
|
|
539
|
+
/**
|
|
540
|
+
* Read CLI version from this package's package.json.
|
|
541
|
+
* Falls back to "0.0.0" if reading/parsing fails.
|
|
542
|
+
*/
|
|
543
|
+
function getCliVersion() {
|
|
544
|
+
try {
|
|
545
|
+
const pkgPath = path.resolve(__dirname, "..", "package.json");
|
|
546
|
+
const raw = fs.readFileSync(pkgPath, "utf8");
|
|
547
|
+
const pkg = JSON.parse(raw);
|
|
548
|
+
if (typeof pkg.version === "string" && pkg.version.length > 0) {
|
|
549
|
+
return pkg.version;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
catch {
|
|
553
|
+
// ignore and fall through
|
|
554
|
+
}
|
|
555
|
+
return "0.0.0";
|
|
556
|
+
}
|
|
315
557
|
program
|
|
316
558
|
.name('a24z')
|
|
317
559
|
.description('Claude Code Observability CLI - Monitor and analyze your AI tool performance')
|
|
318
|
-
.version(
|
|
560
|
+
.version(getCliVersion());
|
|
319
561
|
program
|
|
320
562
|
.command('install')
|
|
321
563
|
.description('Install A24Z observability hooks for Claude Code')
|
|
322
564
|
.option('--api-url <url>', 'Set the A24Z API URL')
|
|
565
|
+
.option('--client-id <id>', 'Set the WorkOS client ID for authentication')
|
|
323
566
|
.action(async (options) => {
|
|
324
|
-
await cli.install(
|
|
567
|
+
await cli.install({
|
|
568
|
+
apiUrl: options.apiUrl,
|
|
569
|
+
clientId: options.clientId,
|
|
570
|
+
});
|
|
325
571
|
});
|
|
326
572
|
program
|
|
327
573
|
.command('login')
|
|
@@ -341,6 +587,13 @@ program
|
|
|
341
587
|
.action(async () => {
|
|
342
588
|
await cli.uninstall();
|
|
343
589
|
});
|
|
590
|
+
program
|
|
591
|
+
.command('hook')
|
|
592
|
+
.description('Internal: process a Claude hook payload from stdin and send to A24Z')
|
|
593
|
+
.option('--type <hookType>', 'Hook type (e.g., PreToolUse, PostToolUse)')
|
|
594
|
+
.action(async (options) => {
|
|
595
|
+
await cli.hook(options.type);
|
|
596
|
+
});
|
|
344
597
|
// Parse command line arguments
|
|
345
598
|
program.parse();
|
|
346
599
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "a24z",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "AI Agent Observability CLI - Monitor and analyze your AI tool performance",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -37,16 +37,18 @@
|
|
|
37
37
|
},
|
|
38
38
|
"homepage": "https://a24z.ai",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"
|
|
40
|
+
"axios": "^1.6.2",
|
|
41
41
|
"chalk": "^5.3.0",
|
|
42
|
-
"
|
|
42
|
+
"commander": "^11.1.0",
|
|
43
|
+
"dotenv": "^17.2.2",
|
|
43
44
|
"inquirer": "^9.2.12",
|
|
44
|
-
"
|
|
45
|
-
"
|
|
45
|
+
"open": "^9.1.0",
|
|
46
|
+
"ora": "^7.0.1"
|
|
46
47
|
},
|
|
47
48
|
"devDependencies": {
|
|
48
|
-
"@types
|
|
49
|
+
"@repo/types": "workspace:*",
|
|
49
50
|
"@types/inquirer": "^9.0.7",
|
|
51
|
+
"@types/node": "^20.10.0",
|
|
50
52
|
"typescript": "^5.3.2"
|
|
51
53
|
},
|
|
52
54
|
"engines": {
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
CMD="a24z hook"
|
|
7
|
+
|
|
8
|
+
# Derive hook type from env or script name
|
|
9
|
+
HOOK_NAME="$(basename "$0")"
|
|
10
|
+
HOOK_TYPE="${CLAUDE_HOOK_EVENT_NAME:-}"
|
|
11
|
+
if [ -z "$HOOK_TYPE" ]; then
|
|
12
|
+
case "$HOOK_NAME" in
|
|
13
|
+
*pre-hook*) HOOK_TYPE="PreToolUse" ;;
|
|
14
|
+
*post-hook*) HOOK_TYPE="PostToolUse" ;;
|
|
15
|
+
*user-prompt-submit*) HOOK_TYPE="UserPromptSubmit" ;;
|
|
16
|
+
*session-start*) HOOK_TYPE="SessionStart" ;;
|
|
17
|
+
*session-end*) HOOK_TYPE="SessionEnd" ;;
|
|
18
|
+
*subagent-stop*) HOOK_TYPE="SubagentStop" ;;
|
|
19
|
+
*notification*) HOOK_TYPE="Notification" ;;
|
|
20
|
+
*stop-hook*) HOOK_TYPE="Stop" ;;
|
|
21
|
+
*precompact*) HOOK_TYPE="PreCompact" ;;
|
|
22
|
+
*) HOOK_TYPE="Unknown" ;;
|
|
23
|
+
esac
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
# Read stdin and pass through to CLI subcommand
|
|
27
|
+
STDIN_DATA=$(cat)
|
|
28
|
+
|
|
29
|
+
if command -v a24z >/dev/null 2>&1; then
|
|
30
|
+
printf "%s" "$STDIN_DATA" | a24z hook --type "$HOOK_TYPE" || true
|
|
31
|
+
else
|
|
32
|
+
echo "[a24z] CLI not found in PATH; passing through input" >&2
|
|
33
|
+
# If CLI not found, pass-through so Claude continues unaffected
|
|
34
|
+
printf "%s" "$STDIN_DATA"
|
|
35
|
+
fi
|
package/templates/post-hook.sh
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# A24Z Claude Code Post-Hook Script
|
|
4
|
-
# This script captures data after tool execution and sends it to A24Z Observability
|
|
5
|
-
|
|
6
|
-
# Configuration
|
|
7
|
-
OBSERVABILITY_URL="{{API_URL}}/api/hooks/post"
|
|
8
|
-
LOG_FILE="$HOME/.claude/a24z.log"
|
|
9
|
-
DEBUG_MODE="${DEBUG_HOOKS:-false}"
|
|
10
|
-
|
|
11
|
-
# Ensure log directory exists
|
|
12
|
-
mkdir -p "$(dirname "$LOG_FILE")"
|
|
13
|
-
|
|
14
|
-
# Function for debug logging
|
|
15
|
-
debug_log() {
|
|
16
|
-
if [ "$DEBUG_MODE" = "true" ]; then
|
|
17
|
-
echo "$(date '+%Y-%m-%d %H:%M:%S') [DEBUG] $1" >> "$LOG_FILE" 2>/dev/null
|
|
18
|
-
fi
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
# Function for info logging
|
|
22
|
-
info_log() {
|
|
23
|
-
echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] $1" >> "$LOG_FILE" 2>/dev/null
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
# Function for error logging
|
|
27
|
-
error_log() {
|
|
28
|
-
echo "$(date '+%Y-%m-%d %H:%M:%S') [ERROR] $1" >> "$LOG_FILE" 2>/dev/null
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
# Read input from Claude Code
|
|
32
|
-
input=$(cat)
|
|
33
|
-
|
|
34
|
-
# Validate input is not empty
|
|
35
|
-
if [ -z "$input" ]; then
|
|
36
|
-
error_log "Post-hook received empty input"
|
|
37
|
-
exit 0
|
|
38
|
-
fi
|
|
39
|
-
|
|
40
|
-
debug_log "Post-hook received input: $input"
|
|
41
|
-
|
|
42
|
-
# Extract tool information using jq
|
|
43
|
-
tool_call_id=$(echo "$input" | jq -r '.tool_call_id // empty')
|
|
44
|
-
tool_output=$(echo "$input" | jq -c '.tool_output // {}')
|
|
45
|
-
success=$(echo "$input" | jq -r '.success // false')
|
|
46
|
-
error_message=$(echo "$input" | jq -r '.error_message // empty')
|
|
47
|
-
output_tokens=$(echo "$input" | jq -r '.output_tokens // empty')
|
|
48
|
-
|
|
49
|
-
# Validate required fields
|
|
50
|
-
if [ -z "$tool_call_id" ] || [ "$tool_call_id" = "null" ]; then
|
|
51
|
-
error_log "No tool_call_id found in input"
|
|
52
|
-
echo "$input" # Pass through unchanged
|
|
53
|
-
exit 0
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
# Convert success to boolean
|
|
57
|
-
if [ "$success" = "true" ]; then
|
|
58
|
-
success_bool=true
|
|
59
|
-
else
|
|
60
|
-
success_bool=false
|
|
61
|
-
fi
|
|
62
|
-
|
|
63
|
-
# Build JSON payload
|
|
64
|
-
payload=$(jq -n \
|
|
65
|
-
--arg tool_call_id "$tool_call_id" \
|
|
66
|
-
--argjson tool_output "$tool_output" \
|
|
67
|
-
--argjson success "$success_bool" \
|
|
68
|
-
--arg error_message "$error_message" \
|
|
69
|
-
--arg output_tokens "$output_tokens" \
|
|
70
|
-
'{
|
|
71
|
-
tool_call_id: $tool_call_id,
|
|
72
|
-
tool_output: $tool_output,
|
|
73
|
-
success: $success,
|
|
74
|
-
error_message: (if $error_message != "" then $error_message else null end),
|
|
75
|
-
output_tokens: (if $output_tokens != "" and $output_tokens != "null" then ($output_tokens | tonumber) else null end)
|
|
76
|
-
}')
|
|
77
|
-
|
|
78
|
-
# Prepare headers
|
|
79
|
-
headers=(-H "Content-Type: application/json")
|
|
80
|
-
if [ -n "{{ACCESS_TOKEN}}" ]; then
|
|
81
|
-
headers+=(-H "Authorization: Bearer {{ACCESS_TOKEN}}")
|
|
82
|
-
fi
|
|
83
|
-
|
|
84
|
-
# Send data to A24Z observability
|
|
85
|
-
response=$(curl -s -X POST "$OBSERVABILITY_URL" \
|
|
86
|
-
"${headers[@]}" \
|
|
87
|
-
-d "$payload" \
|
|
88
|
-
-w "HTTP_STATUS:%{http_code}" 2>/dev/null)
|
|
89
|
-
|
|
90
|
-
# Extract HTTP status and response body
|
|
91
|
-
http_status=$(echo "$response" | grep -o "HTTP_STATUS:[0-9]*" | cut -d: -f2)
|
|
92
|
-
response_body=$(echo "$response" | sed 's/HTTP_STATUS:[0-9]*$//')
|
|
93
|
-
|
|
94
|
-
# Log the result
|
|
95
|
-
if [ "$http_status" = "200" ]; then
|
|
96
|
-
status=$(echo "$response_body" | jq -r '.data.status // empty')
|
|
97
|
-
duration=$(echo "$response_body" | jq -r '.data.duration // empty')
|
|
98
|
-
info_log "Post-hook sent successfully for $tool_call_id (Status: $status, Duration: ${duration}ms)"
|
|
99
|
-
else
|
|
100
|
-
error_log "Post-hook failed for $tool_call_id (HTTP $http_status): $response_body"
|
|
101
|
-
fi
|
|
102
|
-
|
|
103
|
-
# Always pass through the input unchanged
|
|
104
|
-
echo "$input"
|
package/templates/pre-hook.sh
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# A24Z Claude Code Pre-Hook Script
|
|
4
|
-
# This script captures data before tool execution and sends it to A24Z Observability
|
|
5
|
-
|
|
6
|
-
# Configuration
|
|
7
|
-
OBSERVABILITY_URL="{{API_URL}}/api/hooks/pre"
|
|
8
|
-
LOG_FILE="$HOME/.claude/a24z.log"
|
|
9
|
-
DEBUG_MODE="${DEBUG_HOOKS:-false}"
|
|
10
|
-
|
|
11
|
-
# Ensure log directory exists
|
|
12
|
-
mkdir -p "$(dirname "$LOG_FILE")"
|
|
13
|
-
|
|
14
|
-
# Function for debug logging
|
|
15
|
-
debug_log() {
|
|
16
|
-
if [ "$DEBUG_MODE" = "true" ]; then
|
|
17
|
-
echo "$(date '+%Y-%m-%d %H:%M:%S') [DEBUG] $1" >> "$LOG_FILE" 2>/dev/null
|
|
18
|
-
fi
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
# Function for info logging
|
|
22
|
-
info_log() {
|
|
23
|
-
echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] $1" >> "$LOG_FILE" 2>/dev/null
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
# Function for error logging
|
|
27
|
-
error_log() {
|
|
28
|
-
echo "$(date '+%Y-%m-%d %H:%M:%S') [ERROR] $1" >> "$LOG_FILE" 2>/dev/null
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
# Read input from Claude Code
|
|
32
|
-
input=$(cat)
|
|
33
|
-
|
|
34
|
-
# Validate input is not empty
|
|
35
|
-
if [ -z "$input" ]; then
|
|
36
|
-
error_log "Pre-hook received empty input"
|
|
37
|
-
exit 0
|
|
38
|
-
fi
|
|
39
|
-
|
|
40
|
-
debug_log "Pre-hook received input: $input"
|
|
41
|
-
|
|
42
|
-
# Extract tool information using jq
|
|
43
|
-
tool_name=$(echo "$input" | jq -r '.tool_name // empty')
|
|
44
|
-
tool_input=$(echo "$input" | jq -c '.tool_input // {}')
|
|
45
|
-
prompt=$(echo "$input" | jq -r '.prompt // empty')
|
|
46
|
-
context=$(echo "$input" | jq -c '.context // {}')
|
|
47
|
-
session_id=$(echo "$input" | jq -r '.session_id // empty')
|
|
48
|
-
|
|
49
|
-
# Validate required fields
|
|
50
|
-
if [ -z "$tool_name" ] || [ "$tool_name" = "null" ]; then
|
|
51
|
-
error_log "No tool_name found in input"
|
|
52
|
-
echo "$input" # Pass through unchanged
|
|
53
|
-
exit 0
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
# Build JSON payload
|
|
57
|
-
payload=$(jq -n \
|
|
58
|
-
--arg tool_name "$tool_name" \
|
|
59
|
-
--argjson tool_input "$tool_input" \
|
|
60
|
-
--arg prompt "$prompt" \
|
|
61
|
-
--argjson context "$context" \
|
|
62
|
-
--arg session_id "$session_id" \
|
|
63
|
-
'{
|
|
64
|
-
tool_name: $tool_name,
|
|
65
|
-
tool_input: $tool_input,
|
|
66
|
-
prompt: (if $prompt != "" then $prompt else null end),
|
|
67
|
-
context: (if ($context | length) > 0 then $context else null end),
|
|
68
|
-
session_id: (if $session_id != "" then $session_id else null end)
|
|
69
|
-
}')
|
|
70
|
-
|
|
71
|
-
# Prepare headers
|
|
72
|
-
headers=(-H "Content-Type: application/json")
|
|
73
|
-
if [ -n "{{ACCESS_TOKEN}}" ]; then
|
|
74
|
-
headers+=(-H "Authorization: Bearer {{ACCESS_TOKEN}}")
|
|
75
|
-
fi
|
|
76
|
-
|
|
77
|
-
# Send data to A24Z observability
|
|
78
|
-
response=$(curl -s -X POST "$OBSERVABILITY_URL" \
|
|
79
|
-
"${headers[@]}" \
|
|
80
|
-
-d "$payload" \
|
|
81
|
-
-w "HTTP_STATUS:%{http_code}" 2>/dev/null)
|
|
82
|
-
|
|
83
|
-
# Extract HTTP status and response body
|
|
84
|
-
http_status=$(echo "$response" | grep -o "HTTP_STATUS:[0-9]*" | cut -d: -f2)
|
|
85
|
-
response_body=$(echo "$response" | sed 's/HTTP_STATUS:[0-9]*$//')
|
|
86
|
-
|
|
87
|
-
# Log the result
|
|
88
|
-
if [ "$http_status" = "200" ]; then
|
|
89
|
-
tool_call_id=$(echo "$response_body" | jq -r '.data.tool_call_id // empty')
|
|
90
|
-
session_id=$(echo "$response_body" | jq -r '.data.session_id // empty')
|
|
91
|
-
info_log "Pre-hook sent successfully for $tool_name (ID: $tool_call_id, Session: $session_id)"
|
|
92
|
-
|
|
93
|
-
# Add tool_call_id and other metadata to the input for the post-hook
|
|
94
|
-
enhanced_input=$(echo "$input" | jq \
|
|
95
|
-
--arg tool_call_id "$tool_call_id" \
|
|
96
|
-
--arg session_id "$session_id" \
|
|
97
|
-
--arg observability_timestamp "$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ)" \
|
|
98
|
-
'. + {
|
|
99
|
-
tool_call_id: $tool_call_id,
|
|
100
|
-
session_id: $session_id,
|
|
101
|
-
a24z_metadata: {
|
|
102
|
-
timestamp: $observability_timestamp,
|
|
103
|
-
hook_version: "2.0",
|
|
104
|
-
source: "a24z-observability"
|
|
105
|
-
}
|
|
106
|
-
}')
|
|
107
|
-
echo "$enhanced_input"
|
|
108
|
-
else
|
|
109
|
-
error_log "Pre-hook failed for $tool_name (HTTP $http_status): $response_body"
|
|
110
|
-
echo "$input" # Pass through unchanged if API call fails
|
|
111
|
-
fi
|