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 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
- return {
33
- // apiUrl: 'https://app.a24z.ai', // Default to production
34
- apiUrl: 'http://localhost:3002',
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 API URL if provided
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
- // Read template files
86
- const preHookTemplate = fs.readFileSync(path.join(templatesDir, 'pre-hook.sh'), 'utf8');
87
- const postHookTemplate = fs.readFileSync(path.join(templatesDir, 'post-hook.sh'), 'utf8');
88
- // Replace placeholders with actual values
89
- let preHookContent = preHookTemplate
90
- .replace('{{API_URL}}', this.config.apiUrl)
91
- .replace('{{ACCESS_TOKEN}}', this.config.accessToken || '');
92
- let postHookContent = postHookTemplate
93
- .replace('{{API_URL}}', this.config.apiUrl)
94
- .replace('{{ACCESS_TOKEN}}', this.config.accessToken || '');
95
- // Write scripts
96
- const preHookPath = path.join(HOOKS_DIR, 'a24z-pre-hook.sh');
97
- const postHookPath = path.join(HOOKS_DIR, 'a24z-post-hook.sh');
98
- fs.writeFileSync(preHookPath, preHookContent);
99
- fs.writeFileSync(postHookPath, postHookContent);
100
- // Make executable
101
- fs.chmodSync(preHookPath, '755');
102
- fs.chmodSync(postHookPath, '755');
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 (!settings.hooks) {
146
+ if (typeof settings.hooks !== 'object' || settings.hooks === null) {
117
147
  settings.hooks = {};
118
148
  }
119
- // Configure hooks
120
- settings.hooks.PreToolUse = [{
121
- matcher: "*",
122
- hooks: [{
123
- type: "command",
124
- command: path.join(HOOKS_DIR, 'a24z-pre-hook.sh')
125
- }]
126
- }];
127
- settings.hooks.PostToolUse = [{
128
- matcher: "*",
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
- const spinner = ora('Starting authentication...').start();
142
- // Start device authorization
143
- const authResponse = await axios.post(`${this.config.apiUrl}/api/auth/device`);
144
- const deviceAuth = authResponse.data.data;
145
- spinner.stop();
146
- console.log(chalk.green('\\n📱 Please complete authentication in your browser:'));
147
- console.log(chalk.cyan(` ${deviceAuth.verification_uri_complete}`));
148
- console.log(chalk.white('\\n📝 Or visit:'), chalk.cyan(deviceAuth.verification_uri));
149
- console.log(chalk.white(' Enter code:'), chalk.yellow(deviceAuth.user_code));
150
- // Open browser automatically
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(deviceAuth.verification_uri_complete);
234
+ await open(verification_uri_complete || verification_uri);
159
235
  }
160
- // Poll for completion
161
- const authSpinner = ora('Waiting for authentication...').start();
162
- const auth = await this.pollForAuthentication(deviceAuth.device_code);
163
- authSpinner.succeed('Authentication successful!');
164
- // Store auth data
165
- this.config.accessToken = auth.access_token;
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
- console.log(chalk.white('👤 User:'), chalk.cyan(auth.user.email));
173
- console.log(chalk.white('🏢 Organization:'), chalk.cyan(auth.organization_id));
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 pollForAuthentication(deviceCode) {
183
- const maxAttempts = 60;
184
- let attempts = 0;
185
- while (attempts < maxAttempts) {
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.get(`${this.config.apiUrl}/api/auth/device?device_code=${encodeURIComponent(deviceCode)}`);
188
- if (response.status === 200 && response.data.success) {
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
- if (error.response?.status === 202) {
194
- // Still pending
195
- await new Promise(resolve => setTimeout(resolve, 5000));
196
- attempts++;
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 (error.response?.status === 400) {
200
- throw new Error(error.response.data.error || 'Authentication failed');
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, 5000));
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 preHookPath = path.join(HOOKS_DIR, 'a24z-pre-hook.sh');
213
- const postHookPath = path.join(HOOKS_DIR, 'a24z-post-hook.sh');
214
- if (fs.existsSync(preHookPath))
215
- fs.unlinkSync(preHookPath);
216
- if (fs.existsSync(postHookPath))
217
- fs.unlinkSync(postHookPath);
218
- // Update Claude settings
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 settings = JSON.parse(fs.readFileSync(CLAUDE_SETTINGS_FILE, 'utf8'));
222
- if (settings.hooks) {
223
- // Remove our hooks but keep others
224
- if (settings.hooks.PreToolUse) {
225
- settings.hooks.PreToolUse = settings.hooks.PreToolUse.filter((hook) => !hook.hooks?.[0]?.command?.includes('a24z-pre-hook.sh'));
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(settings, null, 2));
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 preHookExists = fs.existsSync(path.join(HOOKS_DIR, 'a24z-pre-hook.sh'));
261
- const postHookExists = fs.existsSync(path.join(HOOKS_DIR, 'a24z-post-hook.sh'));
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
- console.log(chalk.white('🔧 Installation Status:'));
264
- console.log(` • Pre-hook script: ${preHookExists ? chalk.green(' Installed') : chalk.red('❌ Not installed')}`);
265
- console.log(` • Post-hook script: ${postHookExists ? chalk.green('✅ Installed') : chalk.red('❌ Not installed')}`);
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('1.0.0');
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(options);
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":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAChB,+CAA+C;AAC/C,8DAA8D;AAC9D,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;AAiB7D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,0BAA0B;AAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACtD,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AACpE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AAS9D,MAAM,OAAO;IAGX;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,aAAa,GAAG;YACpB,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI;SAClB,CAAC;QAEF,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAkD,EAAE;QAChE,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,GAAG,CAAC,sCAAsC,CAAC,CAAC,KAAK,EAAE,CAAC;QAEpE,IAAI,CAAC;YACH,mCAAmC;YACnC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACtC,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAC1C,CAAC;YAED,2BAA2B;YAC3B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE7C,mCAAmC;YACnC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAG7B,8BAA8B;YAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAE5B,uBAAuB;YACvB,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACnD,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,OAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;YAEtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uDAAuD,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;YAC9G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;YAC1F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC,CAAC;YACvG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,SAAS,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,oBAAoB,EAAE,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAE7D,8EAA8E;QAC9E,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;QACnD,MAAM,gBAAgB,GAAG;YACvB,kBAAkB;YAClB,mBAAmB;YACnB,iCAAiC;YACjC,4BAA4B;YAC5B,0BAA0B;YAC1B,4BAA4B;YAC5B,2BAA2B;YAC3B,mBAAmB;YACnB,yBAAyB;SAC1B,CAAC;QAEF,IAAI,CAAC;YACH,mCAAmC;YACnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;YAChE,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAE9D,0CAA0C;YAC1C,MAAM,WAAW,GAAG,eAAe;iBAChC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;iBAC/C,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YAEnE,uDAAuD;YACvD,mDAAmD;YACnD,KAAK,MAAM,WAAW,IAAI,gBAAgB,EAAE,CAAC;gBAC3C,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;oBACnD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;oBACxC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAChC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,WAAW,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;gBAClF,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,gBAAgB,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAC;QAE1G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,iBAAiB,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAC7F,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,oBAAoB;QAC1B,IAAI,QAAQ,GAAmB,EAAE,CAAC;QAElC,yBAAyB;QACzB,IAAI,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC;YACvE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,mEAAmE,CAAC,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAClE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;QACtB,CAAC;QAED,mFAAmF;QACnF,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAEvF,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAEzF,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC,CAAC;QAE5G,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC,CAAC;QAEnG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC,CAAC;QAE/F,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC,CAAC;QAEnG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,2BAA2B,CAAC,CAAC,CAAC;QAElG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAElF,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC,CAAC;QAE9F,sCAAsC;QACtC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,EAAE,CAAC,aAAa,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,gFAAgF;IAEhF;;;;;OAKG;IACK,eAAe,CAAC,QAAwB,EAAE,QAAgB,EAAE,WAAmB;QACrF,IAAI,CAAC,QAAQ,CAAC,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAoB;YAChC,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;SACnD,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1H,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,6CAA6C;QAC7C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBACnC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;oBAAE,OAAO,IAAI,CAAC;gBAC/C,IAAI,CAAC,CAAC,OAAO,KAAK,WAAW;oBAAE,OAAO,IAAI,CAAC;gBAC3C,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACtC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAElE,IAAI,CAAC;YACH,uDAAuD;YACvD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,mCAAmC,EAAE,CAAC;gBAC1F,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAC5E,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,0BAA0B;YAC/C,CAAC;YAED,+DAA+D;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,IAAI,CAAC,MAAM,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC;YAC9F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAEpE,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,kBAAkB,EAAE;gBAC/E,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;aAChC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAE1F,MAAM,EACJ,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,yBAAyB,EACzB,UAAU,EACV,QAAQ,EACT,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAE7B,6CAA6C;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,gBAAgB,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC,CAAC;YACzD,IAAI,yBAAyB,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,yBAAyB,EAAE,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAEtF,8BAA8B;YAC9B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC7C,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,6BAA6B;oBACtC,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC,CAAC;YAEJ,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,IAAI,CAAC,yBAAyB,IAAI,gBAAgB,CAAC,CAAC;YAC5D,CAAC;YAED,0BAA0B;YAC1B,MAAM,OAAO,GAAG,GAAG,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC3E,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;YAE9C,uBAAuB;YACvB,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;YAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,oCAAoC;YACpC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAErB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC,CAAC;QAEhG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2DAA2D,CAAC,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,QAAgB,EAAE,SAAiB;QACjF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC;QACnC,IAAI,eAAe,GAAG,QAAQ,CAAC;QAE/B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,wBAAwB,EAAE;oBAC/E,WAAW,EAAE,UAAU;oBACvB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;iBAChC,CAAC,CAAC;gBAEH,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC1B,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5B,CAAC;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACtC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC;gBAE9C,IAAI,MAAM,KAAK,GAAG,IAAI,SAAS,KAAK,uBAAuB,EAAE,CAAC;oBAC5D,gDAAgD;oBAChD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;oBAC1E,SAAS;gBACX,CAAC;gBAED,IAAI,MAAM,KAAK,GAAG,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;oBAChD,iCAAiC;oBACjC,eAAe,IAAI,CAAC,CAAC;oBACrB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;oBAC1E,SAAS;gBACX,CAAC;gBAED,IAAI,MAAM,KAAK,GAAG,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;oBACpD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAC/C,CAAC;gBAED,IAAI,MAAM,KAAK,GAAG,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;oBACpD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACzC,CAAC;gBAED,6EAA6E;gBAC7E,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;oBAClB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;oBAC1E,SAAS;gBACX,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAGD,KAAK,CAAC,SAAS;QACb,MAAM,OAAO,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;QAE1D,IAAI,CAAC;YACH,+BAA+B;YAC/B,MAAM,SAAS,GAAG;gBAChB,kBAAkB;gBAClB,mBAAmB;gBACnB,iCAAiC;gBACjC,4BAA4B;gBAC5B,0BAA0B;gBAC1B,4BAA4B;gBAC5B,2BAA2B;gBAC3B,mBAAmB;gBACnB,yBAAyB;aAC1B,CAAC;YAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBAChD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACH,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBAC1B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,wFAAwF;YACxF,IAAI,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAmB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAmB,CAAC;oBAC3G,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;wBACzC,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;4BAC9D,MAAM,SAAS,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;4BAExJ,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gCACjC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gCACvC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oCAC3B,mDAAmD;oCACnD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wCAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;4CAC/B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gDACnC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;oDAAE,OAAO,IAAI,CAAC;gDAC/C,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;4CACtC,CAAC,CAAC,CAAC;wCACL,CAAC;oCACH,CAAC;oCAED,+CAA+C;oCAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oCACpF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wCACzB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;oCACrC,CAAC;yCAAM,CAAC;wCACN,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oCAChC,CAAC;gCACH,CAAC;4BACH,CAAC;4BAED,gEAAgE;wBAClE,CAAC;oBACH,CAAC;oBAED,EAAE,CAAC,aAAa,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1E,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;YAED,gBAAgB;YAChB,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/B,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC7B,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC,CAAC;QAErF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAE3D,uCAAuC;QACvC,MAAM,UAAU,GAAG;YACjB,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAChD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,EAAE;YAClD,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,iCAAiC,EAAE;YACrE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,4BAA4B,EAAE;YAC5D,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,0BAA0B,EAAE;YACxD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,4BAA4B,EAAE;YAC5D,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,2BAA2B,EAAE;YAC3D,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE;YAC3C,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,yBAAyB,EAAE;SACxD,CAAC;QAEF,MAAM,cAAc,GAAG,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QAC3D,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9D,IAAI,MAAM;gBAAE,cAAc,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC1G,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,IAAI,CAAC,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,yBAAyB,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACrH,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;QAE/E,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;QAED,oCAAoC;QACpC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAErG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAEvE,wBAAwB;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC;YACH,MAAM,OAAO,GAAQ,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC5B,OAAO,CAAC,aAAa,GAAG,UAAU,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC9D,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAErF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;gBACvD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;oBAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,gDAAgD,CAAC,EAAE,CAAC,CAAC;gBACpF,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAoB;QAC7B,mBAAmB;QACnB,MAAM,SAAS,GAAG,KAAK,IAAqB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACrE,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,SAAS,CAAC;YAEhF,6BAA6B;YAC7B,MAAM,IAAI,GAAG,CAAC,CAAU,EAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3E,MAAM,WAAW,GAAG;gBAClB,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC1C,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;gBACtD,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;gBACxD,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;gBAChE,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;gBACxD,sBAAsB,EAAE,QAAQ;gBAChC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;gBAChD,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;gBAC5C,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC1B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACpC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC9B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5B,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5B,YAAY,EAAE,OAAO,CAAC,OAAO;gBAC7B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtC,CAAC;YAEF,MAAM,QAAQ,GAAG,OAAO,WAAW,CAAC,cAAc,KAAK,QAAQ,IAAI,WAAW,CAAC,cAAc,KAAK,IAAI,CAAC;YACvG,MAAM,QAAQ,GAAG,QAAQ;gBACvB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,4BAA4B;gBACnD,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,mBAAmB,CAAC;YAE7C,IAAI,QAAQ,GAAY,GAAG,CAAC;YAC5B,IAAI,CAAC;gBAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;YAE9E,MAAM,OAAO,GAAG,QAAQ;gBACtB,CAAC,CAAC;oBACE,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,cAAc,EAAE,KAAK,EAAE,WAAW,CAAC,YAAY,EAAE;oBAC1G,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;oBACrG,SAAS,EAAE,QAAQ;oBACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,SAAS,EAAE,QAAQ;oBACnB,WAAW;oBACX,kBAAkB,EAAE;wBAClB,OAAO,EAAE,gBAAgB;wBACzB,eAAe,EAAE,gBAAgB;wBACjC,qBAAqB,EAAE,KAAK;wBAC5B,iBAAiB,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;wBACnD,0BAA0B,EAAE,YAAY;qBACzC;iBACF;gBACH,CAAC,CAAC;oBACE,SAAS,EAAE,QAAQ;oBACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,SAAS,EAAE,QAAQ;oBACnB,WAAW;oBACX,iBAAiB,EAAE,eAAe;iBACnC,CAAC;YAEN,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;YAC/E,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW;gBAAE,OAAO,CAAC,aAAa,GAAG,UAAU,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAEzF,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wCAAwC;YACxC,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACtF,CAAC;gBAAS,CAAC;YACT,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAED,YAAY;AACZ,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;AAE1B;;;GAGG;AACH,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QACpD,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,OAAO,GAAG,CAAC,OAAO,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,8EAA8E,CAAC;KAC3F,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;KACjD,MAAM,CAAC,kBAAkB,EAAE,6CAA6C,CAAC;KACzE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,GAAG,CAAC,OAAO,CAAC;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qEAAqE,CAAC;KAClF,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,CAAC;KACxE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEL,+BAA+B;AAC/B,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "a24z",
3
- "version": "1.0.4",
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
- "commander": "^11.1.0",
40
+ "axios": "^1.6.2",
41
41
  "chalk": "^5.3.0",
42
- "ora": "^7.0.1",
42
+ "commander": "^11.1.0",
43
+ "dotenv": "^17.2.2",
43
44
  "inquirer": "^9.2.12",
44
- "axios": "^1.6.2",
45
- "open": "^9.1.0"
45
+ "open": "^9.1.0",
46
+ "ora": "^7.0.1"
46
47
  },
47
48
  "devDependencies": {
48
- "@types/node": "^20.10.0",
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
@@ -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"
@@ -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