Procházet zdrojové kódy

feat: add comprehensive debug logging for Claude agent

Added detailed console output to debug Claude agent execution:

1. Allowed Tools Logging (index.ts):
   - Log total count of discovered tools
   - Display complete list of allowed tools in JSON format

2. Query Arguments Logging (claude-client.ts):
   - Working directory path
   - Allowed tools count and full list
   - Configured MCP servers
   - Skip permissions setting
   - Prompt length

3. Claude Output Logging (claude-client.ts):
   - Message number and type for each message
   - Available properties on each message object
   - Message content (string, array, or object format)
   - Tool use details when present
   - Result data when present
   - Stream events with full JSON output

This provides complete visibility into:
- What tools are available to Claude
- What arguments are passed to the agent
- What Claude is actually doing and outputting during execution

Helps diagnose issues with agent behavior and tool availability.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Claude před 9 měsíci
rodič
revize
8c0cb7ab3e
2 změnil soubory, kde provedl 51 přidání a 3 odebrání
  1. 46 3
      client/src/claude-client.ts
  2. 5 0
      client/src/index.ts

+ 46 - 3
client/src/claude-client.ts

@@ -158,6 +158,16 @@ NEVER leave changes uncommitted or unpushed.`;
 
       console.log('Starting Claude agent session...');
 
+      // Log query arguments
+      console.log('\n=== QUERY ARGUMENTS ===');
+      console.log('Working directory:', this.config.workingDirectory);
+      console.log('Allowed tools count:', this.config.allowedTools.length);
+      console.log('Allowed tools:', JSON.stringify(this.config.allowedTools, null, 2));
+      console.log('MCP servers:', Object.keys(mcpServers));
+      console.log('Skip permissions:', this.config.dangerouslySkipPermissions || true);
+      console.log('Prompt length:', prompt.length, 'characters');
+      console.log('=======================\n');
+
       // Create query with options
       const queryInstance = query({
         prompt,
@@ -174,6 +184,8 @@ NEVER leave changes uncommitted or unpushed.`;
       let totalCost = 0;
       let messageCount = 0;
 
+      console.log('\n=== CLAUDE OUTPUT ===\n');
+
       for await (const message of queryInstance) {
         messageCount++;
 
@@ -186,12 +198,43 @@ NEVER leave changes uncommitted or unpushed.`;
           totalCost = message.cost;
         }
 
-        // Log progress
-        if (message.type === 'assistant' || message.type === 'result') {
-          console.log(`Message ${messageCount}: ${message.type}`);
+        // Log message details
+        console.log(`\n--- Message ${messageCount}: ${message.type} ---`);
+
+        // Log all message properties for debugging
+        const messageKeys = Object.keys(message);
+        console.log('Available properties:', messageKeys.join(', '));
+
+        // Try to extract and log content
+        if ('content' in message) {
+          const content = (message as any).content;
+          if (typeof content === 'string') {
+            console.log('Content (string):', content);
+          } else if (Array.isArray(content)) {
+            console.log('Content (array):', JSON.stringify(content, null, 2));
+          } else if (content) {
+            console.log('Content (object):', JSON.stringify(content, null, 2));
+          }
+        }
+
+        // Log tool use if present
+        if ('toolUse' in message) {
+          console.log('Tool use:', JSON.stringify((message as any).toolUse, null, 2));
+        }
+
+        // Log result if present
+        if ('result' in message) {
+          console.log('Result:', JSON.stringify((message as any).result, null, 2));
+        }
+
+        // Log full message for unknown types
+        if (message.type === 'stream_event') {
+          console.log('Stream event:', JSON.stringify(message, null, 2));
         }
       }
 
+      console.log('\n=== END CLAUDE OUTPUT ===\n');
+
       const duration = Date.now() - startTime;
 
       console.log('Claude agent session completed');

+ 5 - 0
client/src/index.ts

@@ -55,6 +55,11 @@ if (import.meta.url === `file://${process.argv[1]}`) {
   console.log('Discovering available tools from MCP servers...');
   const allowedTools = await ToolDiscovery.discoverTools(mcpConfig);
 
+  console.log('\n=== ALLOWED TOOLS ===');
+  console.log(`Total tools: ${allowedTools.length}`);
+  console.log('Tools list:', JSON.stringify(allowedTools, null, 2));
+  console.log('=====================\n');
+
   // Configure Claude client
   const client = new ClaudeClient({
     workingDirectory: repoPath,