debug-session.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/usr/bin/env npx tsx
  2. /**
  3. * Debug script to inspect session data
  4. *
  5. * Usage: npx tsx debug-session.ts [sessionId] [baseUrl]
  6. */
  7. import { createOpencodeClient } from '@opencode-ai/sdk';
  8. const sessionId = process.argv[2];
  9. const baseUrl = process.argv[3] || 'http://127.0.0.1:3000';
  10. async function inspect() {
  11. console.log(`Connecting to ${baseUrl}...`);
  12. const client = createOpencodeClient({ baseUrl });
  13. // Get sessions
  14. const sessions = await client.session.list();
  15. console.log('\n=== Sessions ===');
  16. console.log('Total sessions:', sessions.data?.length);
  17. // Find the session to inspect
  18. let targetSession = sessionId
  19. ? sessions.data?.find(s => s.id === sessionId)
  20. : sessions.data?.[0];
  21. if (!targetSession) {
  22. console.log('No session found');
  23. return;
  24. }
  25. console.log('\n=== Session Info ===');
  26. console.log('ID:', targetSession.id);
  27. console.log('Title:', targetSession.title);
  28. // Get messages
  29. const messagesResp = await client.session.messages({ path: { id: targetSession.id } });
  30. const messages = messagesResp.data || [];
  31. console.log('\n=== Messages ===');
  32. console.log('Total messages:', messages.length);
  33. for (let i = 0; i < messages.length; i++) {
  34. const msg = messages[i];
  35. console.log(`\n--- Message ${i + 1} ---`);
  36. console.log('Role:', msg.info?.role);
  37. console.log('Mode (agent):', msg.info?.mode);
  38. console.log('Parts count:', msg.parts?.length);
  39. if (msg.parts) {
  40. for (let j = 0; j < msg.parts.length; j++) {
  41. const part = msg.parts[j];
  42. console.log(`\n Part ${j + 1}:`);
  43. console.log(' Type:', part.type);
  44. console.log(' ID:', part.id);
  45. if (part.type === 'tool') {
  46. console.log(' Tool name:', part.tool);
  47. console.log(' Status:', part.state?.status || part.status);
  48. console.log(' Input:', JSON.stringify(part.state?.input || part.input, null, 2).substring(0, 500));
  49. if (part.state?.output || part.output) {
  50. const output = JSON.stringify(part.state?.output || part.output);
  51. console.log(' Output preview:', output.substring(0, 300));
  52. }
  53. }
  54. if (part.type === 'text') {
  55. console.log(' Text preview:', (part.text || '').substring(0, 300));
  56. }
  57. }
  58. }
  59. }
  60. // Also dump raw structure for first message with parts
  61. const msgWithParts = messages.find(m => m.parts && m.parts.length > 0);
  62. if (msgWithParts) {
  63. console.log('\n=== Raw Part Structure (first message with parts) ===');
  64. console.log(JSON.stringify(msgWithParts.parts?.[0], null, 2));
  65. }
  66. }
  67. inspect().catch(console.error);