@kb-labs/agent-entry 2.93.0 → 2.96.0

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.
Files changed (79) hide show
  1. package/dist/cli/commands/diff.js +4 -4
  2. package/dist/cli/commands/diff.js.map +1 -1
  3. package/dist/cli/commands/history.js +6 -6
  4. package/dist/cli/commands/history.js.map +1 -1
  5. package/dist/cli/commands/quality-report.js +3 -3
  6. package/dist/cli/commands/quality-report.js.map +1 -1
  7. package/dist/cli/commands/rollback.js +1 -1
  8. package/dist/cli/commands/rollback.js.map +1 -1
  9. package/dist/cli/commands/run.js +24 -7
  10. package/dist/cli/commands/run.js.map +1 -1
  11. package/dist/cli/commands/trace-context.js +3 -3
  12. package/dist/cli/commands/trace-context.js.map +1 -1
  13. package/dist/cli/commands/trace-diagnose.js +3 -3
  14. package/dist/cli/commands/trace-diagnose.js.map +1 -1
  15. package/dist/cli/commands/trace-stats.js +3 -3
  16. package/dist/cli/commands/trace-stats.js.map +1 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.js +40 -35
  19. package/dist/index.js.map +1 -1
  20. package/dist/manifest.d.ts +62 -7
  21. package/dist/manifest.js +40 -35
  22. package/dist/manifest.js.map +1 -1
  23. package/dist/rest/handlers/approve-handler.js +51 -47
  24. package/dist/rest/handlers/approve-handler.js.map +1 -1
  25. package/dist/rest/handlers/approve-session-plan-handler.js +38 -34
  26. package/dist/rest/handlers/approve-session-plan-handler.js.map +1 -1
  27. package/dist/rest/handlers/correct-handler.js +49 -45
  28. package/dist/rest/handlers/correct-handler.js.map +1 -1
  29. package/dist/rest/handlers/create-session-handler.js +17 -13
  30. package/dist/rest/handlers/create-session-handler.js.map +1 -1
  31. package/dist/rest/handlers/execute-session-plan-handler.js +216 -208
  32. package/dist/rest/handlers/execute-session-plan-handler.js.map +1 -1
  33. package/dist/rest/handlers/generate-spec-handler.js +103 -98
  34. package/dist/rest/handlers/generate-spec-handler.js.map +1 -1
  35. package/dist/rest/handlers/get-file-diff-handler.js +35 -31
  36. package/dist/rest/handlers/get-file-diff-handler.js.map +1 -1
  37. package/dist/rest/handlers/get-session-handler.js +15 -11
  38. package/dist/rest/handlers/get-session-handler.js.map +1 -1
  39. package/dist/rest/handlers/get-session-plan-handler.js +28 -24
  40. package/dist/rest/handlers/get-session-plan-handler.js.map +1 -1
  41. package/dist/rest/handlers/get-session-turns-handler.js +27 -23
  42. package/dist/rest/handlers/get-session-turns-handler.js.map +1 -1
  43. package/dist/rest/handlers/get-spec-handler.js +22 -18
  44. package/dist/rest/handlers/get-spec-handler.js.map +1 -1
  45. package/dist/rest/handlers/list-file-changes-handler.js +25 -21
  46. package/dist/rest/handlers/list-file-changes-handler.js.map +1 -1
  47. package/dist/rest/handlers/list-sessions-handler.js +16 -12
  48. package/dist/rest/handlers/list-sessions-handler.js.map +1 -1
  49. package/dist/rest/handlers/rollback-handler.js +73 -69
  50. package/dist/rest/handlers/rollback-handler.js.map +1 -1
  51. package/dist/rest/handlers/run-handler.js +151 -147
  52. package/dist/rest/handlers/run-handler.js.map +1 -1
  53. package/dist/rest/handlers/sessions-handler.js +47 -35
  54. package/dist/rest/handlers/sessions-handler.js.map +1 -1
  55. package/dist/rest/handlers/status-handler.js +33 -29
  56. package/dist/rest/handlers/status-handler.js.map +1 -1
  57. package/dist/rest/handlers/stop-handler.js +37 -33
  58. package/dist/rest/handlers/stop-handler.js.map +1 -1
  59. package/dist/widgets/117.js +24 -1
  60. package/dist/widgets/{300.js → 215.js} +1 -1
  61. package/dist/widgets/370.js +1 -1
  62. package/dist/widgets/{805.js → 46.js} +92 -92
  63. package/dist/widgets/50.js +1 -1
  64. package/dist/widgets/62.js +96 -0
  65. package/dist/widgets/648.js +1 -0
  66. package/dist/widgets/669.js +1 -1
  67. package/dist/widgets/775.js +1 -1
  68. package/dist/widgets/78.js +1 -0
  69. package/dist/widgets/968.js +2 -2
  70. package/dist/widgets/__federation_expose_AgentsPage.js +1 -1
  71. package/dist/widgets/mf-manifest.json +31 -31
  72. package/dist/widgets/mf-stats.json +39 -39
  73. package/dist/widgets/remoteEntry.js +2 -2
  74. package/dist/ws/session-stream-handler.js +17 -6
  75. package/dist/ws/session-stream-handler.js.map +1 -1
  76. package/package.json +16 -15
  77. package/dist/widgets/418.js +0 -38
  78. package/dist/widgets/451.js +0 -1
  79. package/dist/widgets/694.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/commands/trace-event-normalizer.ts","../../../src/cli/commands/trace-diagnose.ts"],"names":["e","success"],"mappings":"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","file":"trace-diagnose.js","sourcesContent":["import type { DetailedTraceEntry } from '@kb-labs/agent-contracts';\n\nexport type NormalizedTraceEvent = {\n raw: DetailedTraceEntry;\n type: string;\n data: Record<string, unknown>;\n iteration: number;\n};\n\nexport function normalizeTraceEvents(events: DetailedTraceEntry[]): NormalizedTraceEvent[] {\n const out: NormalizedTraceEvent[] = [];\n let currentIteration = 0;\n\n for (const raw of events) {\n const type = String(raw.type ?? '');\n const data = getEventData(raw);\n\n const explicitIteration = asNumber(raw.iteration) ?? asNumber(data.iteration);\n if (type === 'iteration:start') {\n currentIteration = explicitIteration ?? Math.max(1, currentIteration + 1);\n }\n\n const iteration = explicitIteration ?? currentIteration;\n out.push({ raw, type, data, iteration });\n }\n\n return out;\n}\n\nexport function getEventData(event: DetailedTraceEntry): Record<string, unknown> {\n const data = (event as unknown as Record<string, unknown>).data;\n if (data && typeof data === 'object') {\n return data as Record<string, unknown>;\n }\n return {};\n}\n\nexport function asNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string') {\n const n = Number(value);\n if (Number.isFinite(n)) {\n return n;\n }\n }\n return undefined;\n}\n","/**\n * agent:trace:diagnose - Quick diagnostic analysis of agent execution\n *\n * One command to answer \"what went wrong?\" — shows errors, context drops,\n * tool failures, loop detection, LLM reasoning, and quality indicators.\n *\n * Usage:\n * pnpm kb agent trace diagnose --task-id=<id>\n * pnpm kb agent trace diagnose --task-id=<id> --json\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport type { TraceCommandResponse, TraceErrorCode, DetailedTraceEntry } from '@kb-labs/agent-contracts';\nimport { loadTrace, formatTraceLoadError } from '@kb-labs/agent-tracing';\nimport { normalizeTraceEvents } from './trace-event-normalizer.js';\n\n/** Shape of raw data in llm:end / llm:call events (legacy + new formats) */\ninterface LLMRawEvent {\n response?: { usage?: { inputTokens?: number; outputTokens?: number } };\n cost?: { totalCost?: number };\n content?: string;\n hasToolCalls?: boolean;\n tokensUsed?: number;\n durationMs?: number;\n iteration?: number;\n}\n\n/** Shape of raw data in tool:end / tool:execution events */\ninterface ToolRawEvent {\n tool?: { name?: string };\n output?: { success?: boolean; error?: { message?: string } };\n toolName?: string;\n durationMs?: number;\n timing?: { durationMs?: number };\n success?: boolean;\n input?: unknown;\n error?: string | { message?: string; stack?: string };\n iteration?: number;\n}\n\n/** Shape of raw data in error:captured / agent:error events */\ninterface ErrorRawEvent {\n error?: string | { message?: string; stack?: string };\n agentStack?: unknown;\n iteration?: number;\n}\n\n/** Raw data accessed on arbitrary events via data or raw fallback */\ninterface GenericRawData {\n toolName?: string;\n tool?: { name?: string };\n durationMs?: number;\n timing?: { durationMs?: number };\n success?: boolean;\n output?: { success?: boolean; error?: { message?: string } };\n input?: unknown;\n error?: string | { message?: string; stack?: string };\n iteration?: number;\n content?: string;\n hasToolCalls?: boolean;\n}\n\ntype TraceDiagnoseInput = {\n taskId?: string;\n 'task-id'?: string;\n json?: boolean;\n};\n\ninterface DiagnosticReport {\n taskId: string;\n summary: {\n totalEvents: number;\n iterations: number;\n totalTokens: number;\n durationMs: number;\n success: boolean;\n confidence: number;\n };\n issues: DiagnosticIssue[];\n contextHealth: {\n maxContextChars: number;\n maxContextTokens: number;\n totalDroppedMessages: number;\n truncatedToolOutputs: number;\n contextGrowthHistory: Array<{\n iteration: number;\n messageCount: number;\n totalChars: number;\n droppedMessages: number;\n }>;\n tokenGrowth: Array<{\n iteration: number;\n cumulativeTokens: number;\n }>;\n systemPromptChanges: Array<{\n iteration: number;\n charsDelta: number;\n }>;\n };\n toolUsage: {\n totalCalls: number;\n failures: number;\n toolBreakdown: Record<string, { calls: number; failures: number; avgDurationMs: number }>;\n slowCalls: Array<{ tool: string; durationMs: number; iteration: number; args: string }>;\n };\n llmBehavior: {\n totalCalls: number;\n emptyResponses: number;\n reasoningTexts: Array<{\n iteration: number;\n preview: string;\n }>;\n stoppingReasons: string[];\n };\n loopDetection: {\n detected: boolean;\n repeatedPatterns: string[];\n };\n}\n\ninterface DiagnosticIssue {\n severity: 'critical' | 'warning' | 'info';\n category: 'error' | 'context' | 'tool' | 'llm' | 'loop' | 'quality';\n message: string;\n iteration?: number;\n details?: string;\n}\n\nexport default defineCommand({\n id: 'trace:diagnose',\n description: 'Quick diagnostic analysis — answers \"what went wrong?\" in one command',\n\n handler: {\n async execute(ctx: PluginContextV3, input: TraceDiagnoseInput): Promise<{ exitCode: number }> {\n const flags: TraceDiagnoseInput =\n (typeof input === 'object' && input !== null && 'flags' in input)\n ? (input as { flags: TraceDiagnoseInput }).flags\n : input;\n const taskId = (flags['task-id'] ?? flags.taskId) as string | undefined;\n\n try {\n const loaded = await loadTrace(taskId);\n if (!loaded.ok) {\n ctx.ui.write(JSON.stringify(mkError('INVALID_TASK_ID', formatTraceLoadError(loaded.error)), null, 2) + '\\n');\n return { exitCode: 1 };\n }\n const events = loaded.events;\n\n const report = analyzeDiagnostics(taskId ?? '', events);\n\n if (flags.json) {\n ctx.ui.write(JSON.stringify({ success: true, report }, null, 2) + '\\n');\n } else {\n printReport(ctx, report);\n }\n\n return { exitCode: report.issues.some(i => i.severity === 'critical') ? 1 : 0 };\n } catch {\n ctx.ui.write(JSON.stringify(mkError('TRACE_NOT_FOUND', `Trace not found: ${taskId}`), null, 2) + '\\n');\n return { exitCode: 1 };\n }\n },\n },\n});\n\nfunction analyzeDiagnostics(taskId: string, events: DetailedTraceEntry[]): DiagnosticReport {\n const normalized = normalizeTraceEvents(events);\n const issues: DiagnosticIssue[] = [];\n\n // === Summary ===\n // Use normalized events (type: string, data: Record<string,unknown>) to avoid\n // union type narrowing on the raw DetailedTraceEntry discriminated union.\n const taskStart = normalized[0];\n const agentEnd = [...normalized].reverse().find(e => e.type === 'agent:end');\n const iterationStarts = normalized.filter(e => e.type === 'iteration:start');\n const iterations = iterationStarts.length || Math.max(0, ...normalized.map(e => e.iteration));\n const llmEndTokens = normalized\n .filter(e => e.type === 'llm:end')\n .reduce((sum, e) => sum + (Number(e.data.tokensUsed) || 0), 0);\n const totalTokens = Number(agentEnd?.data?.tokensUsed) || llmEndTokens;\n const lastNormalized = normalized[normalized.length - 1];\n const durationMs = Number(agentEnd?.data?.durationMs)\n || (taskStart && lastNormalized\n ? new Date(lastNormalized.raw.timestamp).getTime() - new Date(taskStart.raw.timestamp).getTime()\n : 0);\n const success = Boolean(agentEnd?.data?.success ?? true);\n\n // Confidence from report_to_orchestrator\n let confidence = 0;\n const toolResults = normalized.filter(e =>\n e.type === 'tool:end' || e.type === 'tool_result' || e.type === 'tool:execution'\n );\n for (const tr of toolResults) {\n const rawTool = tr.raw as ToolRawEvent;\n const data = tr.data || rawTool.output || tr.raw;\n const output = typeof (data as GenericRawData)?.output === 'string'\n ? (data as GenericRawData).output as string\n : JSON.stringify((data as GenericRawData)?.output || '');\n if (output.includes('\"confidence\"')) {\n try {\n const match = output.match(/\"confidence\"\\s*:\\s*([\\d.]+)/);\n if (match?.[1]) {confidence = parseFloat(match[1]);}\n } catch { /* ignore */ }\n }\n }\n\n // === Context Health ===\n // Access all events through normalized (type: string, data: Record<string,unknown>)\n // to avoid TypeScript narrowing on the DetailedTraceEntry discriminated union.\n const contextSnapshots = normalized.filter(e => e.type === 'context:snapshot');\n const contextDiffs = normalized.filter(e => e.type === 'context:diff');\n const contextTrims = normalized.filter(e => e.type === 'context:trim');\n let maxContextChars = 0;\n let totalDroppedMessages = 0;\n let truncatedToolOutputs = 0;\n\n const contextGrowthHistory: DiagnosticReport['contextHealth']['contextGrowthHistory'] = [];\n\n for (const snap of contextSnapshots) {\n const chars = Number(snap.data.totalChars) || 0;\n const slidingWindow = snap.data.slidingWindow as { droppedMessages?: number } | undefined;\n const dropped = slidingWindow?.droppedMessages || 0;\n if (chars > maxContextChars) {maxContextChars = chars;}\n totalDroppedMessages += dropped;\n contextGrowthHistory.push({\n iteration: snap.iteration,\n messageCount: Number(snap.data.messageCount) || 0,\n totalChars: chars,\n droppedMessages: dropped,\n });\n }\n\n truncatedToolOutputs = contextTrims.length;\n\n // Token growth per iteration (from iteration:end cumulativeTokens)\n const tokenGrowth: Array<{ iteration: number; cumulativeTokens: number }> = [];\n let cumulative = 0;\n for (const e of normalized.filter(e => e.type === 'llm:end')) {\n cumulative += Number(e.data.tokensUsed) || 0;\n tokenGrowth.push({ iteration: e.iteration, cumulativeTokens: cumulative });\n }\n\n // System prompt changes (from context:diff)\n const systemPromptChanges: Array<{ iteration: number; charsDelta: number }> = [];\n for (const cd of contextDiffs) {\n const diff = cd.data.diff as { systemPromptChanged?: boolean; systemPromptCharsDelta?: number; droppedMessages?: number } | undefined;\n if (diff?.systemPromptChanged) {\n const delta = diff.systemPromptCharsDelta || 0;\n systemPromptChanges.push({\n iteration: cd.iteration,\n charsDelta: delta,\n });\n issues.push({\n severity: 'warning',\n category: 'context',\n message: `System prompt changed at iteration ${cd.iteration} (${delta > 0 ? '+' : ''}${delta} chars)`,\n });\n }\n }\n\n // Context issues\n if (totalDroppedMessages > 0) {\n issues.push({\n severity: 'warning',\n category: 'context',\n message: `${totalDroppedMessages} messages dropped by sliding window — agent lost earlier context`,\n details: contextDiffs\n .filter(d => {\n const df = d.data.diff as { droppedMessages?: number } | undefined;\n return (df?.droppedMessages ?? 0) > 0;\n })\n .map(d => {\n const df = d.data.diff as { droppedMessages?: number } | undefined;\n return `Iteration ${d.iteration}: ${df?.droppedMessages ?? 0} dropped`;\n })\n .join(', '),\n });\n }\n\n if (truncatedToolOutputs > 0) {\n issues.push({\n severity: 'info',\n category: 'context',\n message: `${truncatedToolOutputs} tool outputs were truncated (>8KB) before sending to LLM`,\n });\n }\n\n // === Tool Usage ===\n const toolStarts = normalized.filter(e => e.type === 'tool:start' || e.type === 'tool_call');\n const toolEnds = normalized.filter(e => e.type === 'tool:end' || e.type === 'tool:execution' || e.type === 'tool_result');\n const toolErrors = normalized.filter(e =>\n e.type === 'tool:error'\n || (e.type === 'tool:end' && e.data?.success === false)\n || (e.type === 'tool:execution' && (e.raw as ToolRawEvent).output?.success === false)\n || (e.type === 'tool_result' && e.data?.success === false)\n );\n\n const toolBreakdown: Record<string, { calls: number; failures: number; totalDurationMs: number }> = {};\n const slowCalls: Array<{ tool: string; durationMs: number; iteration: number; args: string }> = [];\n const SLOW_THRESHOLD_MS = 5000; // 5s threshold for \"slow\" calls\n\n for (const te of toolEnds) {\n const data = (te.data || te.raw) as GenericRawData;\n const name = data.toolName || data.tool?.name || 'unknown';\n const dur = Number(data.durationMs) || Number(data.timing?.durationMs) || 0;\n const success = data.success ?? data.output?.success ?? true;\n\n if (!toolBreakdown[name]) {\n toolBreakdown[name] = { calls: 0, failures: 0, totalDurationMs: 0 };\n }\n toolBreakdown[name].calls++;\n toolBreakdown[name].totalDurationMs += dur;\n if (!success) {toolBreakdown[name].failures++;}\n\n // Track slow calls (>5s)\n if (dur > SLOW_THRESHOLD_MS) {\n const args = data.input ? JSON.stringify(data.input).slice(0, 100) : '';\n slowCalls.push({\n tool: name,\n durationMs: dur,\n iteration: te.iteration || Number(data.iteration) || 0,\n args,\n });\n }\n }\n\n const toolBreakdownFinal: Record<string, { calls: number; failures: number; avgDurationMs: number }> = {};\n for (const [name, stats] of Object.entries(toolBreakdown)) {\n toolBreakdownFinal[name] = {\n calls: stats.calls,\n failures: stats.failures,\n avgDurationMs: stats.calls > 0 ? Math.round(stats.totalDurationMs / stats.calls) : 0,\n };\n }\n\n // Tool failure issues\n for (const err of toolErrors) {\n const data = (err.data || err.raw) as GenericRawData;\n const name = data.toolName || data.tool?.name || 'unknown';\n const rawErr = data.error;\n const errMsg = typeof rawErr === 'string' ? rawErr : rawErr?.message || data.output?.error?.message || '';\n issues.push({\n severity: 'warning',\n category: 'tool',\n message: `Tool \"${name}\" failed: ${typeof errMsg === 'string' ? errMsg.slice(0, 200) : JSON.stringify(errMsg).slice(0, 200)}`,\n iteration: Number(data.iteration) || err.iteration,\n });\n }\n\n // === LLM Behavior ===\n const llmResponses = normalized.filter(e => e.type === 'llm:end' || e.type === 'llm_response');\n const llmCalls = normalized.filter(e => e.type === 'llm:start' || e.type === 'llm:call' || e.type === 'llm_call');\n let emptyResponses = 0;\n const reasoningTexts: DiagnosticReport['llmBehavior']['reasoningTexts'] = [];\n\n for (const lr of llmResponses) {\n const data = (lr.data || lr.raw) as LLMRawEvent;\n const content = data.content || '';\n const hasToolCalls = data.hasToolCalls || false;\n\n if (!content && !hasToolCalls) {\n emptyResponses++;\n issues.push({\n severity: 'warning',\n category: 'llm',\n message: 'LLM returned empty response (no text, no tool calls)',\n iteration: lr.iteration || Number(data.iteration) || 0,\n });\n }\n\n // Capture reasoning text (text before tool calls)\n if (content && content.length > 5 && content !== '[Executing tools...]') {\n reasoningTexts.push({\n iteration: lr.iteration || Number(data.iteration) || 0,\n preview: content.slice(0, 300),\n });\n }\n }\n\n // Stopping analysis\n const stoppingAnalyses = normalized.filter(e => e.type === 'stopping:analysis');\n const stoppingReasons = stoppingAnalyses\n .map(e => String(e.data.reasoning ?? ''))\n .filter(Boolean);\n\n // === Error Detection ===\n const errors = normalized.filter(e => e.type === 'error:captured' || e.type === 'agent:error');\n for (const err of errors) {\n const data = (err.data || err.raw) as ErrorRawEvent;\n const rawErr = data.error;\n const msg = typeof rawErr === 'string' ? rawErr : rawErr?.message || '';\n const errStack = typeof rawErr === 'object' && rawErr !== null ? rawErr.stack : undefined;\n issues.push({\n severity: 'critical',\n category: 'error',\n message: msg.slice(0, 300),\n iteration: Number(data.iteration) || err.iteration,\n details: errStack || data.agentStack ? JSON.stringify(data.agentStack ?? {}).slice(0, 200) : undefined,\n });\n }\n\n // === Loop Detection ===\n let loopDetected = false;\n const repeatedPatterns: string[] = [];\n\n // Check for repeated tool call patterns\n const toolCallSequence = toolStarts\n .map(e => {\n const data = (e.data || e.raw) as GenericRawData;\n return data.toolName || data.tool?.name || 'unknown';\n });\n\n if (toolCallSequence.length >= 6) {\n // Check last 6 calls for repeating patterns of 3\n for (let windowSize = 2; windowSize <= 3; windowSize++) {\n const lastN = toolCallSequence.slice(-windowSize * 2);\n const first = lastN.slice(0, windowSize).join(',');\n const second = lastN.slice(windowSize).join(',');\n if (first === second) {\n loopDetected = true;\n repeatedPatterns.push(first);\n issues.push({\n severity: 'warning',\n category: 'loop',\n message: `Repeated tool pattern detected: ${first} (called ${windowSize} times in a row)`,\n });\n }\n }\n }\n\n // === Quality Issues ===\n if (!success) {\n issues.push({\n severity: 'critical',\n category: 'quality',\n message: 'Task failed — agent did not produce a successful result',\n });\n }\n\n if (confidence > 0 && confidence < 0.5) {\n issues.push({\n severity: 'warning',\n category: 'quality',\n message: `Low confidence: ${confidence} — agent was not confident in its answer`,\n });\n }\n\n if (iterations >= 20) {\n issues.push({\n severity: 'warning',\n category: 'quality',\n message: `Used ${iterations} iterations — may indicate difficulty finding answer`,\n });\n }\n\n // Sort issues: critical first, then warning, then info\n const severityOrder = { critical: 0, warning: 1, info: 2 };\n issues.sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);\n\n return {\n taskId,\n summary: {\n totalEvents: events.length,\n iterations,\n totalTokens,\n durationMs,\n success,\n confidence,\n },\n issues,\n contextHealth: {\n maxContextChars,\n maxContextTokens: Math.round(maxContextChars / 4),\n totalDroppedMessages,\n truncatedToolOutputs,\n contextGrowthHistory,\n tokenGrowth,\n systemPromptChanges,\n },\n toolUsage: {\n totalCalls: Object.values(toolBreakdownFinal).reduce((sum, t) => sum + t.calls, 0),\n failures: Object.values(toolBreakdownFinal).reduce((sum, t) => sum + t.failures, 0),\n toolBreakdown: toolBreakdownFinal,\n slowCalls: slowCalls.sort((a, b) => b.durationMs - a.durationMs),\n },\n llmBehavior: {\n totalCalls: llmCalls.length,\n emptyResponses,\n reasoningTexts,\n stoppingReasons,\n },\n loopDetection: {\n detected: loopDetected,\n repeatedPatterns,\n },\n };\n}\n\nfunction printReport(ctx: PluginContextV3, report: DiagnosticReport): void {\n const { summary, issues, contextHealth, toolUsage, llmBehavior, loopDetection } = report;\n\n ctx.ui.write('\\n');\n ctx.ui.write('=' .repeat(60) + '\\n');\n ctx.ui.write(` DIAGNOSTIC REPORT: ${report.taskId}\\n`);\n ctx.ui.write('=' .repeat(60) + '\\n');\n\n // Summary\n const status = summary.success ? ' OK' : ' FAILED';\n ctx.ui.write(`\\n${status}\\n`);\n ctx.ui.write(` Iterations: ${summary.iterations} | Tokens: ${summary.totalTokens} | Time: ${(summary.durationMs / 1000).toFixed(1)}s`);\n if (summary.confidence > 0) {ctx.ui.write(` | Confidence: ${summary.confidence}`);}\n ctx.ui.write('\\n');\n\n // Issues\n if (issues.length > 0) {\n ctx.ui.write('\\n--- Issues (' + issues.length + ') ---\\n');\n for (const issue of issues) {\n const icon = issue.severity === 'critical' ? 'X' : issue.severity === 'warning' ? '!' : 'i';\n const iter = issue.iteration ? ` [iter ${issue.iteration}]` : '';\n ctx.ui.write(` [${icon}] ${issue.category}: ${issue.message}${iter}\\n`);\n if (issue.details) {\n ctx.ui.write(` ${issue.details.slice(0, 150)}\\n`);\n }\n }\n } else {\n ctx.ui.write('\\n No issues detected.\\n');\n }\n\n // Context Health\n ctx.ui.write('\\n--- Context Window ---\\n');\n ctx.ui.write(` Max context: ~${contextHealth.maxContextTokens} tokens (${contextHealth.maxContextChars} chars)\\n`);\n ctx.ui.write(` Dropped messages: ${contextHealth.totalDroppedMessages}\\n`);\n ctx.ui.write(` Truncated outputs: ${contextHealth.truncatedToolOutputs}\\n`);\n\n if (contextHealth.contextGrowthHistory.length > 0) {\n ctx.ui.write(' Growth: ');\n ctx.ui.write(contextHealth.contextGrowthHistory\n .map(g => `iter${g.iteration}=${g.messageCount}msg/${Math.round(g.totalChars/1000)}K` +\n (g.droppedMessages > 0 ? `(-${g.droppedMessages})` : ''))\n .join(' -> '));\n ctx.ui.write('\\n');\n }\n\n if (contextHealth.tokenGrowth.length > 0) {\n ctx.ui.write(' Tokens: ');\n ctx.ui.write(contextHealth.tokenGrowth\n .map(t => `iter${t.iteration}=${t.cumulativeTokens}`)\n .join(' -> '));\n ctx.ui.write('\\n');\n }\n\n if (contextHealth.systemPromptChanges.length > 0) {\n ctx.ui.write(' System prompt changes:\\n');\n for (const sp of contextHealth.systemPromptChanges) {\n ctx.ui.write(` iter${sp.iteration}: ${sp.charsDelta > 0 ? '+' : ''}${sp.charsDelta} chars\\n`);\n }\n }\n\n // Tool Usage\n ctx.ui.write('\\n--- Tools ---\\n');\n ctx.ui.write(` Total calls: ${toolUsage.totalCalls} | Failures: ${toolUsage.failures}\\n`);\n const entries = Object.entries(toolUsage.toolBreakdown)\n .sort((a, b) => b[1].calls - a[1].calls);\n for (const [name, stats] of entries) {\n const fail = stats.failures > 0 ? ` (${stats.failures} failed)` : '';\n ctx.ui.write(` ${name}: ${stats.calls}x avg ${stats.avgDurationMs}ms${fail}\\n`);\n }\n\n // Slow calls\n if (toolUsage.slowCalls.length > 0) {\n ctx.ui.write(' Slow calls (>5s):\\n');\n for (const sc of toolUsage.slowCalls) {\n const durStr = sc.durationMs >= 60000\n ? `${(sc.durationMs / 60000).toFixed(1)}min`\n : `${(sc.durationMs / 1000).toFixed(1)}s`;\n ctx.ui.write(` [iter ${sc.iteration}] ${sc.tool} ${durStr}${sc.args ? ` args=${sc.args}` : ''}\\n`);\n }\n }\n\n // LLM Behavior\n ctx.ui.write('\\n--- LLM ---\\n');\n ctx.ui.write(` Calls: ${llmBehavior.totalCalls} | Empty responses: ${llmBehavior.emptyResponses}\\n`);\n\n if (llmBehavior.reasoningTexts.length > 0) {\n ctx.ui.write(' Reasoning:\\n');\n for (const rt of llmBehavior.reasoningTexts.slice(0, 5)) {\n const preview = rt.preview.replace(/\\n/g, ' ').slice(0, 120);\n ctx.ui.write(` [iter ${rt.iteration}] \"${preview}\"\\n`);\n }\n }\n\n if (llmBehavior.stoppingReasons.length > 0) {\n ctx.ui.write(' Stop reasons: ' + [...new Set(llmBehavior.stoppingReasons)].join(', ') + '\\n');\n }\n\n // Loop Detection\n if (loopDetection.detected) {\n ctx.ui.write('\\n--- Loop Detection ---\\n');\n ctx.ui.write(` LOOP DETECTED: ${loopDetection.repeatedPatterns.join('; ')}\\n`);\n }\n\n ctx.ui.write('\\n' + '=' .repeat(60) + '\\n\\n');\n}\n\nfunction mkError(code: TraceErrorCode, message: string): TraceCommandResponse {\n return {\n success: false,\n command: 'trace:diagnose',\n taskId: '',\n error: { code, message },\n summary: { message, severity: 'error', actionable: true },\n };\n}\n"]}
1
+ {"version":3,"sources":["../../../src/cli/commands/trace-event-normalizer.ts","../../../src/cli/commands/trace-diagnose.ts"],"names":["e","success"],"mappings":"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","file":"trace-diagnose.js","sourcesContent":["import type { DetailedTraceEntry } from '@kb-labs/agent-contracts';\n\nexport type NormalizedTraceEvent = {\n raw: DetailedTraceEntry;\n type: string;\n data: Record<string, unknown>;\n iteration: number;\n};\n\nexport function normalizeTraceEvents(events: DetailedTraceEntry[]): NormalizedTraceEvent[] {\n const out: NormalizedTraceEvent[] = [];\n let currentIteration = 0;\n\n for (const raw of events) {\n const type = String(raw.type ?? '');\n const data = getEventData(raw);\n\n const explicitIteration = asNumber(raw.iteration) ?? asNumber(data.iteration);\n if (type === 'iteration:start') {\n currentIteration = explicitIteration ?? Math.max(1, currentIteration + 1);\n }\n\n const iteration = explicitIteration ?? currentIteration;\n out.push({ raw, type, data, iteration });\n }\n\n return out;\n}\n\nexport function getEventData(event: DetailedTraceEntry): Record<string, unknown> {\n const data = (event as unknown as Record<string, unknown>).data;\n if (data && typeof data === 'object') {\n return data as Record<string, unknown>;\n }\n return {};\n}\n\nexport function asNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string') {\n const n = Number(value);\n if (Number.isFinite(n)) {\n return n;\n }\n }\n return undefined;\n}\n","/**\n * agent:trace:diagnose - Quick diagnostic analysis of agent execution\n *\n * One command to answer \"what went wrong?\" — shows errors, context drops,\n * tool failures, loop detection, LLM reasoning, and quality indicators.\n *\n * Usage:\n * pnpm kb agent trace diagnose --task-id=<id>\n * pnpm kb agent trace diagnose --task-id=<id> --json\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport type { TraceCommandResponse, TraceErrorCode, DetailedTraceEntry } from '@kb-labs/agent-contracts';\nimport { loadTrace, formatTraceLoadError } from '@kb-labs/agent-tracing';\nimport { normalizeTraceEvents } from './trace-event-normalizer.js';\n\n/** Shape of raw data in llm:end / llm:call events (legacy + new formats) */\ninterface LLMRawEvent {\n response?: { usage?: { inputTokens?: number; outputTokens?: number } };\n cost?: { totalCost?: number };\n content?: string;\n hasToolCalls?: boolean;\n tokensUsed?: number;\n durationMs?: number;\n iteration?: number;\n}\n\n/** Shape of raw data in tool:end / tool:execution events */\ninterface ToolRawEvent {\n tool?: { name?: string };\n output?: { success?: boolean; error?: { message?: string } };\n toolName?: string;\n durationMs?: number;\n timing?: { durationMs?: number };\n success?: boolean;\n input?: unknown;\n error?: string | { message?: string; stack?: string };\n iteration?: number;\n}\n\n/** Shape of raw data in error:captured / agent:error events */\ninterface ErrorRawEvent {\n error?: string | { message?: string; stack?: string };\n agentStack?: unknown;\n iteration?: number;\n}\n\n/** Raw data accessed on arbitrary events via data or raw fallback */\ninterface GenericRawData {\n toolName?: string;\n tool?: { name?: string };\n durationMs?: number;\n timing?: { durationMs?: number };\n success?: boolean;\n output?: { success?: boolean; error?: { message?: string } };\n input?: unknown;\n error?: string | { message?: string; stack?: string };\n iteration?: number;\n content?: string;\n hasToolCalls?: boolean;\n}\n\ntype TraceDiagnoseInput = {\n taskId?: string;\n 'task-id'?: string;\n json?: boolean;\n};\n\ninterface DiagnosticReport {\n taskId: string;\n summary: {\n totalEvents: number;\n iterations: number;\n totalTokens: number;\n durationMs: number;\n success: boolean;\n confidence: number;\n };\n issues: DiagnosticIssue[];\n contextHealth: {\n maxContextChars: number;\n maxContextTokens: number;\n totalDroppedMessages: number;\n truncatedToolOutputs: number;\n contextGrowthHistory: Array<{\n iteration: number;\n messageCount: number;\n totalChars: number;\n droppedMessages: number;\n }>;\n tokenGrowth: Array<{\n iteration: number;\n cumulativeTokens: number;\n }>;\n systemPromptChanges: Array<{\n iteration: number;\n charsDelta: number;\n }>;\n };\n toolUsage: {\n totalCalls: number;\n failures: number;\n toolBreakdown: Record<string, { calls: number; failures: number; avgDurationMs: number }>;\n slowCalls: Array<{ tool: string; durationMs: number; iteration: number; args: string }>;\n };\n llmBehavior: {\n totalCalls: number;\n emptyResponses: number;\n reasoningTexts: Array<{\n iteration: number;\n preview: string;\n }>;\n stoppingReasons: string[];\n };\n loopDetection: {\n detected: boolean;\n repeatedPatterns: string[];\n };\n}\n\ninterface DiagnosticIssue {\n severity: 'critical' | 'warning' | 'info';\n category: 'error' | 'context' | 'tool' | 'llm' | 'loop' | 'quality';\n message: string;\n iteration?: number;\n details?: string;\n}\n\nexport default defineCommand({\n id: 'trace:diagnose',\n description: 'Quick diagnostic analysis — answers \"what went wrong?\" in one command',\n\n handler: {\n async execute(ctx: PluginContextV3, input: TraceDiagnoseInput): Promise<{ exitCode: number }> {\n const flags: TraceDiagnoseInput =\n (typeof input === 'object' && input !== null && 'flags' in input)\n ? (input as { flags: TraceDiagnoseInput }).flags\n : input;\n const taskId = (flags['task-id'] ?? flags.taskId) as string | undefined;\n\n try {\n const loaded = await loadTrace(taskId);\n if (!loaded.ok) {\n ctx.ui?.json?.(mkError('INVALID_TASK_ID', formatTraceLoadError(loaded.error)));\n return { exitCode: 1 };\n }\n const events = loaded.events;\n\n const report = analyzeDiagnostics(taskId ?? '', events);\n\n if (flags.json) {\n ctx.ui?.json?.({ success: true, report });\n } else {\n printReport(ctx, report);\n }\n\n return { exitCode: report.issues.some(i => i.severity === 'critical') ? 1 : 0 };\n } catch {\n ctx.ui?.json?.(mkError('TRACE_NOT_FOUND', `Trace not found: ${taskId}`));\n return { exitCode: 1 };\n }\n },\n },\n});\n\nfunction analyzeDiagnostics(taskId: string, events: DetailedTraceEntry[]): DiagnosticReport {\n const normalized = normalizeTraceEvents(events);\n const issues: DiagnosticIssue[] = [];\n\n // === Summary ===\n // Use normalized events (type: string, data: Record<string,unknown>) to avoid\n // union type narrowing on the raw DetailedTraceEntry discriminated union.\n const taskStart = normalized[0];\n const agentEnd = [...normalized].reverse().find(e => e.type === 'agent:end');\n const iterationStarts = normalized.filter(e => e.type === 'iteration:start');\n const iterations = iterationStarts.length || Math.max(0, ...normalized.map(e => e.iteration));\n const llmEndTokens = normalized\n .filter(e => e.type === 'llm:end')\n .reduce((sum, e) => sum + (Number(e.data.tokensUsed) || 0), 0);\n const totalTokens = Number(agentEnd?.data?.tokensUsed) || llmEndTokens;\n const lastNormalized = normalized[normalized.length - 1];\n const durationMs = Number(agentEnd?.data?.durationMs)\n || (taskStart && lastNormalized\n ? new Date(lastNormalized.raw.timestamp).getTime() - new Date(taskStart.raw.timestamp).getTime()\n : 0);\n const success = Boolean(agentEnd?.data?.success ?? true);\n\n // Confidence from report_to_orchestrator\n let confidence = 0;\n const toolResults = normalized.filter(e =>\n e.type === 'tool:end' || e.type === 'tool_result' || e.type === 'tool:execution'\n );\n for (const tr of toolResults) {\n const rawTool = tr.raw as ToolRawEvent;\n const data = tr.data || rawTool.output || tr.raw;\n const output = typeof (data as GenericRawData)?.output === 'string'\n ? (data as GenericRawData).output as string\n : JSON.stringify((data as GenericRawData)?.output || '');\n if (output.includes('\"confidence\"')) {\n try {\n const match = output.match(/\"confidence\"\\s*:\\s*([\\d.]+)/);\n if (match?.[1]) {confidence = parseFloat(match[1]);}\n } catch { /* ignore */ }\n }\n }\n\n // === Context Health ===\n // Access all events through normalized (type: string, data: Record<string,unknown>)\n // to avoid TypeScript narrowing on the DetailedTraceEntry discriminated union.\n const contextSnapshots = normalized.filter(e => e.type === 'context:snapshot');\n const contextDiffs = normalized.filter(e => e.type === 'context:diff');\n const contextTrims = normalized.filter(e => e.type === 'context:trim');\n let maxContextChars = 0;\n let totalDroppedMessages = 0;\n let truncatedToolOutputs = 0;\n\n const contextGrowthHistory: DiagnosticReport['contextHealth']['contextGrowthHistory'] = [];\n\n for (const snap of contextSnapshots) {\n const chars = Number(snap.data.totalChars) || 0;\n const slidingWindow = snap.data.slidingWindow as { droppedMessages?: number } | undefined;\n const dropped = slidingWindow?.droppedMessages || 0;\n if (chars > maxContextChars) {maxContextChars = chars;}\n totalDroppedMessages += dropped;\n contextGrowthHistory.push({\n iteration: snap.iteration,\n messageCount: Number(snap.data.messageCount) || 0,\n totalChars: chars,\n droppedMessages: dropped,\n });\n }\n\n truncatedToolOutputs = contextTrims.length;\n\n // Token growth per iteration (from iteration:end cumulativeTokens)\n const tokenGrowth: Array<{ iteration: number; cumulativeTokens: number }> = [];\n let cumulative = 0;\n for (const e of normalized.filter(e => e.type === 'llm:end')) {\n cumulative += Number(e.data.tokensUsed) || 0;\n tokenGrowth.push({ iteration: e.iteration, cumulativeTokens: cumulative });\n }\n\n // System prompt changes (from context:diff)\n const systemPromptChanges: Array<{ iteration: number; charsDelta: number }> = [];\n for (const cd of contextDiffs) {\n const diff = cd.data.diff as { systemPromptChanged?: boolean; systemPromptCharsDelta?: number; droppedMessages?: number } | undefined;\n if (diff?.systemPromptChanged) {\n const delta = diff.systemPromptCharsDelta || 0;\n systemPromptChanges.push({\n iteration: cd.iteration,\n charsDelta: delta,\n });\n issues.push({\n severity: 'warning',\n category: 'context',\n message: `System prompt changed at iteration ${cd.iteration} (${delta > 0 ? '+' : ''}${delta} chars)`,\n });\n }\n }\n\n // Context issues\n if (totalDroppedMessages > 0) {\n issues.push({\n severity: 'warning',\n category: 'context',\n message: `${totalDroppedMessages} messages dropped by sliding window — agent lost earlier context`,\n details: contextDiffs\n .filter(d => {\n const df = d.data.diff as { droppedMessages?: number } | undefined;\n return (df?.droppedMessages ?? 0) > 0;\n })\n .map(d => {\n const df = d.data.diff as { droppedMessages?: number } | undefined;\n return `Iteration ${d.iteration}: ${df?.droppedMessages ?? 0} dropped`;\n })\n .join(', '),\n });\n }\n\n if (truncatedToolOutputs > 0) {\n issues.push({\n severity: 'info',\n category: 'context',\n message: `${truncatedToolOutputs} tool outputs were truncated (>8KB) before sending to LLM`,\n });\n }\n\n // === Tool Usage ===\n const toolStarts = normalized.filter(e => e.type === 'tool:start' || e.type === 'tool_call');\n const toolEnds = normalized.filter(e => e.type === 'tool:end' || e.type === 'tool:execution' || e.type === 'tool_result');\n const toolErrors = normalized.filter(e =>\n e.type === 'tool:error'\n || (e.type === 'tool:end' && e.data?.success === false)\n || (e.type === 'tool:execution' && (e.raw as ToolRawEvent).output?.success === false)\n || (e.type === 'tool_result' && e.data?.success === false)\n );\n\n const toolBreakdown: Record<string, { calls: number; failures: number; totalDurationMs: number }> = {};\n const slowCalls: Array<{ tool: string; durationMs: number; iteration: number; args: string }> = [];\n const SLOW_THRESHOLD_MS = 5000; // 5s threshold for \"slow\" calls\n\n for (const te of toolEnds) {\n const data = (te.data || te.raw) as GenericRawData;\n const name = data.toolName || data.tool?.name || 'unknown';\n const dur = Number(data.durationMs) || Number(data.timing?.durationMs) || 0;\n const success = data.success ?? data.output?.success ?? true;\n\n if (!toolBreakdown[name]) {\n toolBreakdown[name] = { calls: 0, failures: 0, totalDurationMs: 0 };\n }\n toolBreakdown[name].calls++;\n toolBreakdown[name].totalDurationMs += dur;\n if (!success) {toolBreakdown[name].failures++;}\n\n // Track slow calls (>5s)\n if (dur > SLOW_THRESHOLD_MS) {\n const args = data.input ? JSON.stringify(data.input).slice(0, 100) : '';\n slowCalls.push({\n tool: name,\n durationMs: dur,\n iteration: te.iteration || Number(data.iteration) || 0,\n args,\n });\n }\n }\n\n const toolBreakdownFinal: Record<string, { calls: number; failures: number; avgDurationMs: number }> = {};\n for (const [name, stats] of Object.entries(toolBreakdown)) {\n toolBreakdownFinal[name] = {\n calls: stats.calls,\n failures: stats.failures,\n avgDurationMs: stats.calls > 0 ? Math.round(stats.totalDurationMs / stats.calls) : 0,\n };\n }\n\n // Tool failure issues\n for (const err of toolErrors) {\n const data = (err.data || err.raw) as GenericRawData;\n const name = data.toolName || data.tool?.name || 'unknown';\n const rawErr = data.error;\n const errMsg = typeof rawErr === 'string' ? rawErr : rawErr?.message || data.output?.error?.message || '';\n issues.push({\n severity: 'warning',\n category: 'tool',\n message: `Tool \"${name}\" failed: ${typeof errMsg === 'string' ? errMsg.slice(0, 200) : JSON.stringify(errMsg).slice(0, 200)}`,\n iteration: Number(data.iteration) || err.iteration,\n });\n }\n\n // === LLM Behavior ===\n const llmResponses = normalized.filter(e => e.type === 'llm:end' || e.type === 'llm_response');\n const llmCalls = normalized.filter(e => e.type === 'llm:start' || e.type === 'llm:call' || e.type === 'llm_call');\n let emptyResponses = 0;\n const reasoningTexts: DiagnosticReport['llmBehavior']['reasoningTexts'] = [];\n\n for (const lr of llmResponses) {\n const data = (lr.data || lr.raw) as LLMRawEvent;\n const content = data.content || '';\n const hasToolCalls = data.hasToolCalls || false;\n\n if (!content && !hasToolCalls) {\n emptyResponses++;\n issues.push({\n severity: 'warning',\n category: 'llm',\n message: 'LLM returned empty response (no text, no tool calls)',\n iteration: lr.iteration || Number(data.iteration) || 0,\n });\n }\n\n // Capture reasoning text (text before tool calls)\n if (content && content.length > 5 && content !== '[Executing tools...]') {\n reasoningTexts.push({\n iteration: lr.iteration || Number(data.iteration) || 0,\n preview: content.slice(0, 300),\n });\n }\n }\n\n // Stopping analysis\n const stoppingAnalyses = normalized.filter(e => e.type === 'stopping:analysis');\n const stoppingReasons = stoppingAnalyses\n .map(e => String(e.data.reasoning ?? ''))\n .filter(Boolean);\n\n // === Error Detection ===\n const errors = normalized.filter(e => e.type === 'error:captured' || e.type === 'agent:error');\n for (const err of errors) {\n const data = (err.data || err.raw) as ErrorRawEvent;\n const rawErr = data.error;\n const msg = typeof rawErr === 'string' ? rawErr : rawErr?.message || '';\n const errStack = typeof rawErr === 'object' && rawErr !== null ? rawErr.stack : undefined;\n issues.push({\n severity: 'critical',\n category: 'error',\n message: msg.slice(0, 300),\n iteration: Number(data.iteration) || err.iteration,\n details: errStack || data.agentStack ? JSON.stringify(data.agentStack ?? {}).slice(0, 200) : undefined,\n });\n }\n\n // === Loop Detection ===\n let loopDetected = false;\n const repeatedPatterns: string[] = [];\n\n // Check for repeated tool call patterns\n const toolCallSequence = toolStarts\n .map(e => {\n const data = (e.data || e.raw) as GenericRawData;\n return data.toolName || data.tool?.name || 'unknown';\n });\n\n if (toolCallSequence.length >= 6) {\n // Check last 6 calls for repeating patterns of 3\n for (let windowSize = 2; windowSize <= 3; windowSize++) {\n const lastN = toolCallSequence.slice(-windowSize * 2);\n const first = lastN.slice(0, windowSize).join(',');\n const second = lastN.slice(windowSize).join(',');\n if (first === second) {\n loopDetected = true;\n repeatedPatterns.push(first);\n issues.push({\n severity: 'warning',\n category: 'loop',\n message: `Repeated tool pattern detected: ${first} (called ${windowSize} times in a row)`,\n });\n }\n }\n }\n\n // === Quality Issues ===\n if (!success) {\n issues.push({\n severity: 'critical',\n category: 'quality',\n message: 'Task failed — agent did not produce a successful result',\n });\n }\n\n if (confidence > 0 && confidence < 0.5) {\n issues.push({\n severity: 'warning',\n category: 'quality',\n message: `Low confidence: ${confidence} — agent was not confident in its answer`,\n });\n }\n\n if (iterations >= 20) {\n issues.push({\n severity: 'warning',\n category: 'quality',\n message: `Used ${iterations} iterations — may indicate difficulty finding answer`,\n });\n }\n\n // Sort issues: critical first, then warning, then info\n const severityOrder = { critical: 0, warning: 1, info: 2 };\n issues.sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);\n\n return {\n taskId,\n summary: {\n totalEvents: events.length,\n iterations,\n totalTokens,\n durationMs,\n success,\n confidence,\n },\n issues,\n contextHealth: {\n maxContextChars,\n maxContextTokens: Math.round(maxContextChars / 4),\n totalDroppedMessages,\n truncatedToolOutputs,\n contextGrowthHistory,\n tokenGrowth,\n systemPromptChanges,\n },\n toolUsage: {\n totalCalls: Object.values(toolBreakdownFinal).reduce((sum, t) => sum + t.calls, 0),\n failures: Object.values(toolBreakdownFinal).reduce((sum, t) => sum + t.failures, 0),\n toolBreakdown: toolBreakdownFinal,\n slowCalls: slowCalls.sort((a, b) => b.durationMs - a.durationMs),\n },\n llmBehavior: {\n totalCalls: llmCalls.length,\n emptyResponses,\n reasoningTexts,\n stoppingReasons,\n },\n loopDetection: {\n detected: loopDetected,\n repeatedPatterns,\n },\n };\n}\n\nfunction printReport(ctx: PluginContextV3, report: DiagnosticReport): void {\n const { summary, issues, contextHealth, toolUsage, llmBehavior, loopDetection } = report;\n\n ctx.ui.write('\\n');\n ctx.ui.write('=' .repeat(60) + '\\n');\n ctx.ui.write(` DIAGNOSTIC REPORT: ${report.taskId}\\n`);\n ctx.ui.write('=' .repeat(60) + '\\n');\n\n // Summary\n const status = summary.success ? ' OK' : ' FAILED';\n ctx.ui.write(`\\n${status}\\n`);\n ctx.ui.write(` Iterations: ${summary.iterations} | Tokens: ${summary.totalTokens} | Time: ${(summary.durationMs / 1000).toFixed(1)}s`);\n if (summary.confidence > 0) {ctx.ui.write(` | Confidence: ${summary.confidence}`);}\n ctx.ui.write('\\n');\n\n // Issues\n if (issues.length > 0) {\n ctx.ui.write('\\n--- Issues (' + issues.length + ') ---\\n');\n for (const issue of issues) {\n const icon = issue.severity === 'critical' ? 'X' : issue.severity === 'warning' ? '!' : 'i';\n const iter = issue.iteration ? ` [iter ${issue.iteration}]` : '';\n ctx.ui.write(` [${icon}] ${issue.category}: ${issue.message}${iter}\\n`);\n if (issue.details) {\n ctx.ui.write(` ${issue.details.slice(0, 150)}\\n`);\n }\n }\n } else {\n ctx.ui.write('\\n No issues detected.\\n');\n }\n\n // Context Health\n ctx.ui.write('\\n--- Context Window ---\\n');\n ctx.ui.write(` Max context: ~${contextHealth.maxContextTokens} tokens (${contextHealth.maxContextChars} chars)\\n`);\n ctx.ui.write(` Dropped messages: ${contextHealth.totalDroppedMessages}\\n`);\n ctx.ui.write(` Truncated outputs: ${contextHealth.truncatedToolOutputs}\\n`);\n\n if (contextHealth.contextGrowthHistory.length > 0) {\n ctx.ui.write(' Growth: ');\n ctx.ui.write(contextHealth.contextGrowthHistory\n .map(g => `iter${g.iteration}=${g.messageCount}msg/${Math.round(g.totalChars/1000)}K` +\n (g.droppedMessages > 0 ? `(-${g.droppedMessages})` : ''))\n .join(' -> '));\n ctx.ui.write('\\n');\n }\n\n if (contextHealth.tokenGrowth.length > 0) {\n ctx.ui.write(' Tokens: ');\n ctx.ui.write(contextHealth.tokenGrowth\n .map(t => `iter${t.iteration}=${t.cumulativeTokens}`)\n .join(' -> '));\n ctx.ui.write('\\n');\n }\n\n if (contextHealth.systemPromptChanges.length > 0) {\n ctx.ui.write(' System prompt changes:\\n');\n for (const sp of contextHealth.systemPromptChanges) {\n ctx.ui.write(` iter${sp.iteration}: ${sp.charsDelta > 0 ? '+' : ''}${sp.charsDelta} chars\\n`);\n }\n }\n\n // Tool Usage\n ctx.ui.write('\\n--- Tools ---\\n');\n ctx.ui.write(` Total calls: ${toolUsage.totalCalls} | Failures: ${toolUsage.failures}\\n`);\n const entries = Object.entries(toolUsage.toolBreakdown)\n .sort((a, b) => b[1].calls - a[1].calls);\n for (const [name, stats] of entries) {\n const fail = stats.failures > 0 ? ` (${stats.failures} failed)` : '';\n ctx.ui.write(` ${name}: ${stats.calls}x avg ${stats.avgDurationMs}ms${fail}\\n`);\n }\n\n // Slow calls\n if (toolUsage.slowCalls.length > 0) {\n ctx.ui.write(' Slow calls (>5s):\\n');\n for (const sc of toolUsage.slowCalls) {\n const durStr = sc.durationMs >= 60000\n ? `${(sc.durationMs / 60000).toFixed(1)}min`\n : `${(sc.durationMs / 1000).toFixed(1)}s`;\n ctx.ui.write(` [iter ${sc.iteration}] ${sc.tool} ${durStr}${sc.args ? ` args=${sc.args}` : ''}\\n`);\n }\n }\n\n // LLM Behavior\n ctx.ui.write('\\n--- LLM ---\\n');\n ctx.ui.write(` Calls: ${llmBehavior.totalCalls} | Empty responses: ${llmBehavior.emptyResponses}\\n`);\n\n if (llmBehavior.reasoningTexts.length > 0) {\n ctx.ui.write(' Reasoning:\\n');\n for (const rt of llmBehavior.reasoningTexts.slice(0, 5)) {\n const preview = rt.preview.replace(/\\n/g, ' ').slice(0, 120);\n ctx.ui.write(` [iter ${rt.iteration}] \"${preview}\"\\n`);\n }\n }\n\n if (llmBehavior.stoppingReasons.length > 0) {\n ctx.ui.write(' Stop reasons: ' + [...new Set(llmBehavior.stoppingReasons)].join(', ') + '\\n');\n }\n\n // Loop Detection\n if (loopDetection.detected) {\n ctx.ui.write('\\n--- Loop Detection ---\\n');\n ctx.ui.write(` LOOP DETECTED: ${loopDetection.repeatedPatterns.join('; ')}\\n`);\n }\n\n ctx.ui.write('\\n' + '=' .repeat(60) + '\\n\\n');\n}\n\nfunction mkError(code: TraceErrorCode, message: string): TraceCommandResponse {\n return {\n success: false,\n command: 'trace:diagnose',\n taskId: '',\n error: { code, message },\n summary: { message, severity: 'error', actionable: true },\n };\n}\n"]}
@@ -53,7 +53,7 @@ var trace_stats_default = defineCommand({
53
53
  if (!loaded.ok) {
54
54
  const code = loaded.error.kind === "invalid_task_id" ? "INVALID_TASK_ID" : loaded.error.kind === "not_found" ? "TRACE_NOT_FOUND" : loaded.error.kind === "too_large" ? "FILE_TOO_LARGE" : "CORRUPTED_TRACE";
55
55
  const err = error(code, formatTraceLoadError(loaded.error));
56
- ctx.ui.write(JSON.stringify(err, null, 2) + "\n");
56
+ ctx.ui?.json?.(err);
57
57
  return { exitCode: 1, response: err };
58
58
  }
59
59
  const { events } = loaded;
@@ -70,7 +70,7 @@ var trace_stats_default = defineCommand({
70
70
  }
71
71
  };
72
72
  if (flags.json) {
73
- ctx.ui.write(JSON.stringify(response, null, 2) + "\n");
73
+ ctx.ui?.json?.(response);
74
74
  } else {
75
75
  printHumanReadable(ctx, stats);
76
76
  }
@@ -78,7 +78,7 @@ var trace_stats_default = defineCommand({
78
78
  } catch (err) {
79
79
  logger.error("trace:stats error:", err instanceof Error ? err : void 0);
80
80
  const errResponse = error("IO_ERROR", err instanceof Error ? err.message : String(err));
81
- ctx.ui.write(JSON.stringify(errResponse, null, 2) + "\n");
81
+ ctx.ui?.json?.(errResponse);
82
82
  return { exitCode: 1, response: errResponse };
83
83
  }
84
84
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/commands/trace-event-normalizer.ts","../../../src/cli/commands/trace-stats.ts"],"names":[],"mappings":"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","file":"trace-stats.js","sourcesContent":["import type { DetailedTraceEntry } from '@kb-labs/agent-contracts';\n\nexport type NormalizedTraceEvent = {\n raw: DetailedTraceEntry;\n type: string;\n data: Record<string, unknown>;\n iteration: number;\n};\n\nexport function normalizeTraceEvents(events: DetailedTraceEntry[]): NormalizedTraceEvent[] {\n const out: NormalizedTraceEvent[] = [];\n let currentIteration = 0;\n\n for (const raw of events) {\n const type = String(raw.type ?? '');\n const data = getEventData(raw);\n\n const explicitIteration = asNumber(raw.iteration) ?? asNumber(data.iteration);\n if (type === 'iteration:start') {\n currentIteration = explicitIteration ?? Math.max(1, currentIteration + 1);\n }\n\n const iteration = explicitIteration ?? currentIteration;\n out.push({ raw, type, data, iteration });\n }\n\n return out;\n}\n\nexport function getEventData(event: DetailedTraceEntry): Record<string, unknown> {\n const data = (event as unknown as Record<string, unknown>).data;\n if (data && typeof data === 'object') {\n return data as Record<string, unknown>;\n }\n return {};\n}\n\nexport function asNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string') {\n const n = Number(value);\n if (Number.isFinite(n)) {\n return n;\n }\n }\n return undefined;\n}\n","/**\n * agent:trace:stats - Show trace statistics (AI-friendly)\n *\n * Usage:\n * pnpm kb agent:trace:stats <taskId>\n * pnpm kb agent:trace:stats <taskId> --json\n */\n\nimport { defineCommand, useLogger } from '@kb-labs/sdk';\nimport type { PluginContextV3 } from '@kb-labs/sdk';\nimport type {\n TraceCommandResponse,\n StatsResponse,\n TraceErrorCode,\n DetailedTraceEntry,\n} from '@kb-labs/agent-contracts';\nimport { loadTrace, formatTraceLoadError } from '@kb-labs/agent-tracing';\nimport { normalizeTraceEvents } from './trace-event-normalizer.js';\n\n/** Raw shape of llm:call / llm:end events */\ninterface LLMCallRaw {\n response?: { usage?: { inputTokens?: number; outputTokens?: number } };\n cost?: { totalCost?: number };\n}\n\n/** Raw shape of tool:end / tool:execution events */\ninterface ToolEndRaw {\n tool?: { name?: string };\n output?: { success?: boolean };\n}\n\ntype TraceStatsInput = {\n taskId?: string;\n 'task-id'?: string;\n json?: boolean;\n};\n\ntype TraceStatsResult = { exitCode: number; response?: TraceCommandResponse };\n\nexport default defineCommand({\n id: 'trace:stats',\n description: 'Show trace statistics with cost and performance metrics',\n\n handler: {\n async execute(ctx: PluginContextV3, input: TraceStatsInput): Promise<TraceStatsResult> {\n const logger = useLogger();\n const flags: TraceStatsInput =\n (typeof input === 'object' && input !== null && 'flags' in input)\n ? (input as { flags: TraceStatsInput }).flags\n : input;\n const taskId = (flags['task-id'] ?? flags.taskId) as string | undefined;\n\n try {\n const loaded = await loadTrace(taskId);\n if (!loaded.ok) {\n const code: TraceErrorCode =\n loaded.error.kind === 'invalid_task_id' ? 'INVALID_TASK_ID' :\n loaded.error.kind === 'not_found' ? 'TRACE_NOT_FOUND' :\n loaded.error.kind === 'too_large' ? 'FILE_TOO_LARGE' :\n 'CORRUPTED_TRACE';\n const err = error(code, formatTraceLoadError(loaded.error));\n ctx.ui.write(JSON.stringify(err, null, 2) + '\\n');\n return { exitCode: 1, response: err };\n }\n\n const { events } = loaded;\n\n // Calculate stats\n const stats = calculateStats(events, taskId);\n\n // Build response\n const response: TraceCommandResponse<StatsResponse> = {\n success: true,\n command: 'trace:stats',\n taskId: taskId ?? '',\n data: stats,\n summary: {\n message: `${stats.iterations.total} iterations, ${stats.llm.calls} LLM calls, $${stats.cost.total.toFixed(4)} cost`,\n severity: stats.errors > 0 ? 'warning' : 'info',\n actionable: stats.errors > 5,\n },\n };\n\n // Output\n if (flags.json) {\n ctx.ui.write(JSON.stringify(response, null, 2) + '\\n');\n } else {\n printHumanReadable(ctx, stats);\n }\n\n return { exitCode: 0, response };\n } catch (err) {\n logger.error('trace:stats error:', err instanceof Error ? err : undefined);\n const errResponse = error('IO_ERROR', err instanceof Error ? err.message : String(err));\n ctx.ui.write(JSON.stringify(errResponse, null, 2) + '\\n');\n return { exitCode: 1, response: errResponse };\n }\n },\n },\n});\n\n/**\n * Calculate statistics from trace events\n */\nfunction calculateStats(events: DetailedTraceEntry[], taskId?: string): StatsResponse {\n const normalized = normalizeTraceEvents(events);\n const iterationSet = new Set<number>();\n for (const e of normalized) {\n if (e.iteration > 0) {\n iterationSet.add(e.iteration);\n }\n }\n\n const llmStartEvents = normalized.filter((e) => e.type === 'llm:start' || e.type === 'llm:call' || e.type === 'llm_call');\n const llmEndEvents = normalized.filter((e) => e.type === 'llm:end' || e.type === 'llm:call');\n const toolEndEvents = normalized.filter((e) => e.type === 'tool:end' || e.type === 'tool:execution' || e.type === 'tool_result');\n const errorEvents = normalized.filter((e) => e.type === 'error:captured' || e.type === 'agent:error' || e.type === 'tool:error');\n\n // Calculate LLM stats (handle both new and legacy data structures)\n const inputTokens = llmEndEvents.reduce((sum, e) => {\n const tokens = (e.raw as LLMCallRaw).response?.usage?.inputTokens || 0;\n return sum + tokens;\n }, 0);\n\n const outputTokens = llmEndEvents.reduce((sum, e) => {\n const tokens = (e.raw as LLMCallRaw).response?.usage?.outputTokens || 0;\n return sum + tokens;\n }, 0);\n\n const legacyTotalTokens = llmEndEvents.reduce((sum, e) => {\n const tokens = (e.data.tokensUsed as number | undefined) || 0;\n return sum + tokens;\n }, 0);\n\n const totalCost = llmEndEvents.reduce((sum, e) => {\n const cost = (e.raw as LLMCallRaw).cost?.totalCost || 0;\n return sum + cost;\n }, 0);\n\n // Calculate tool stats (handle both new and legacy formats)\n const toolCounts: Record<string, number> = {};\n let successfulTools = 0;\n let failedTools = 0;\n\n for (const tool of toolEndEvents) {\n const toolName = (tool.raw as ToolEndRaw).tool?.name || (tool.data.toolName as string | undefined) || 'unknown';\n toolCounts[toolName] = (toolCounts[toolName] || 0) + 1;\n\n const success = (tool.raw as ToolEndRaw).output?.success ?? (tool.data.success as boolean | undefined) ?? true;\n if (success) {\n successfulTools++;\n } else {\n failedTools++;\n }\n }\n\n // Calculate timing\n const firstEvent = events[0];\n const lastEvent = events[events.length - 1];\n const startedAt = firstEvent?.timestamp || new Date().toISOString();\n const completedAt = lastEvent?.timestamp || new Date().toISOString();\n const totalDurationMs = new Date(completedAt).getTime() - new Date(startedAt).getTime();\n\n return {\n taskId: taskId || 'unknown',\n status: errorEvents.length > 0 ? 'failed' : 'success',\n\n iterations: {\n total: iterationSet.size,\n completed: iterationSet.size,\n },\n\n llm: {\n calls: llmStartEvents.length,\n inputTokens,\n outputTokens,\n // Use explicit tokens if available, otherwise fall back to legacy total\n totalTokens: (inputTokens + outputTokens) || legacyTotalTokens,\n },\n\n tools: {\n totalCalls: toolEndEvents.length,\n byTool: toolCounts,\n successful: successfulTools,\n failed: failedTools,\n },\n\n timing: {\n startedAt,\n completedAt,\n totalDurationMs,\n durationFormatted: formatDuration(totalDurationMs),\n },\n\n cost: {\n total: totalCost,\n currency: 'USD',\n },\n\n errors: errorEvents.length,\n };\n}\n\n/**\n * Format duration in human-readable format\n */\nfunction formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n}\n\n/**\n * Print human-readable output\n */\nfunction printHumanReadable(ctx: PluginContextV3, stats: StatsResponse): void {\n ctx.ui.write('\\n');\n ctx.ui.write('📊 Trace Statistics\\n');\n ctx.ui.write('\\n');\n\n ctx.ui.write(`Status: ${stats.status === 'success' ? '✅ Success' : '❌ Failed'}\\n`);\n ctx.ui.write(`Iterations: ${stats.iterations.total}\\n`);\n ctx.ui.write('\\n');\n\n ctx.ui.write('🤖 LLM Usage:\\n');\n ctx.ui.write(` Calls: ${stats.llm.calls}\\n`);\n ctx.ui.write(` Input tokens: ${stats.llm.inputTokens.toLocaleString()}\\n`);\n ctx.ui.write(` Output tokens: ${stats.llm.outputTokens.toLocaleString()}\\n`);\n ctx.ui.write(` Total tokens: ${stats.llm.totalTokens.toLocaleString()}\\n`);\n ctx.ui.write('\\n');\n\n ctx.ui.write('🔧 Tool Usage:\\n');\n ctx.ui.write(` Total calls: ${stats.tools.totalCalls}\\n`);\n ctx.ui.write(` Successful: ${stats.tools.successful}\\n`);\n ctx.ui.write(` Failed: ${stats.tools.failed}\\n`);\n ctx.ui.write(' By tool:\\n');\n for (const [tool, count] of Object.entries(stats.tools.byTool)) {\n ctx.ui.write(` ${tool}: ${count}\\n`);\n }\n ctx.ui.write('\\n');\n\n ctx.ui.write('⏱️ Timing:\\n');\n ctx.ui.write(` Started: ${stats.timing.startedAt}\\n`);\n ctx.ui.write(` Completed: ${stats.timing.completedAt}\\n`);\n ctx.ui.write(` Duration: ${stats.timing.durationFormatted}\\n`);\n ctx.ui.write('\\n');\n\n ctx.ui.write('💰 Cost:\\n');\n ctx.ui.write(` Total: $${stats.cost.total.toFixed(4)} ${stats.cost.currency}\\n`);\n ctx.ui.write('\\n');\n\n if (stats.errors > 0) {\n ctx.ui.write(`⚠️ Errors: ${stats.errors}\\n`);\n ctx.ui.write('\\n');\n }\n}\n\n/**\n * Create error response\n */\nfunction error(code: TraceErrorCode, message: string): TraceCommandResponse {\n return {\n success: false,\n command: 'trace:stats',\n taskId: '',\n error: {\n code,\n message,\n },\n summary: {\n message,\n severity: 'error',\n actionable: true,\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../../../src/cli/commands/trace-event-normalizer.ts","../../../src/cli/commands/trace-stats.ts"],"names":[],"mappings":"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","file":"trace-stats.js","sourcesContent":["import type { DetailedTraceEntry } from '@kb-labs/agent-contracts';\n\nexport type NormalizedTraceEvent = {\n raw: DetailedTraceEntry;\n type: string;\n data: Record<string, unknown>;\n iteration: number;\n};\n\nexport function normalizeTraceEvents(events: DetailedTraceEntry[]): NormalizedTraceEvent[] {\n const out: NormalizedTraceEvent[] = [];\n let currentIteration = 0;\n\n for (const raw of events) {\n const type = String(raw.type ?? '');\n const data = getEventData(raw);\n\n const explicitIteration = asNumber(raw.iteration) ?? asNumber(data.iteration);\n if (type === 'iteration:start') {\n currentIteration = explicitIteration ?? Math.max(1, currentIteration + 1);\n }\n\n const iteration = explicitIteration ?? currentIteration;\n out.push({ raw, type, data, iteration });\n }\n\n return out;\n}\n\nexport function getEventData(event: DetailedTraceEntry): Record<string, unknown> {\n const data = (event as unknown as Record<string, unknown>).data;\n if (data && typeof data === 'object') {\n return data as Record<string, unknown>;\n }\n return {};\n}\n\nexport function asNumber(value: unknown): number | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string') {\n const n = Number(value);\n if (Number.isFinite(n)) {\n return n;\n }\n }\n return undefined;\n}\n","/**\n * agent:trace:stats - Show trace statistics (AI-friendly)\n *\n * Usage:\n * pnpm kb agent:trace:stats <taskId>\n * pnpm kb agent:trace:stats <taskId> --json\n */\n\nimport { defineCommand, useLogger } from '@kb-labs/sdk';\nimport type { PluginContextV3 } from '@kb-labs/sdk';\nimport type {\n TraceCommandResponse,\n StatsResponse,\n TraceErrorCode,\n DetailedTraceEntry,\n} from '@kb-labs/agent-contracts';\nimport { loadTrace, formatTraceLoadError } from '@kb-labs/agent-tracing';\nimport { normalizeTraceEvents } from './trace-event-normalizer.js';\n\n/** Raw shape of llm:call / llm:end events */\ninterface LLMCallRaw {\n response?: { usage?: { inputTokens?: number; outputTokens?: number } };\n cost?: { totalCost?: number };\n}\n\n/** Raw shape of tool:end / tool:execution events */\ninterface ToolEndRaw {\n tool?: { name?: string };\n output?: { success?: boolean };\n}\n\ntype TraceStatsInput = {\n taskId?: string;\n 'task-id'?: string;\n json?: boolean;\n};\n\ntype TraceStatsResult = { exitCode: number; response?: TraceCommandResponse };\n\nexport default defineCommand({\n id: 'trace:stats',\n description: 'Show trace statistics with cost and performance metrics',\n\n handler: {\n async execute(ctx: PluginContextV3, input: TraceStatsInput): Promise<TraceStatsResult> {\n const logger = useLogger();\n const flags: TraceStatsInput =\n (typeof input === 'object' && input !== null && 'flags' in input)\n ? (input as { flags: TraceStatsInput }).flags\n : input;\n const taskId = (flags['task-id'] ?? flags.taskId) as string | undefined;\n\n try {\n const loaded = await loadTrace(taskId);\n if (!loaded.ok) {\n const code: TraceErrorCode =\n loaded.error.kind === 'invalid_task_id' ? 'INVALID_TASK_ID' :\n loaded.error.kind === 'not_found' ? 'TRACE_NOT_FOUND' :\n loaded.error.kind === 'too_large' ? 'FILE_TOO_LARGE' :\n 'CORRUPTED_TRACE';\n const err = error(code, formatTraceLoadError(loaded.error));\n ctx.ui?.json?.(err);\n return { exitCode: 1, response: err };\n }\n\n const { events } = loaded;\n\n // Calculate stats\n const stats = calculateStats(events, taskId);\n\n // Build response\n const response: TraceCommandResponse<StatsResponse> = {\n success: true,\n command: 'trace:stats',\n taskId: taskId ?? '',\n data: stats,\n summary: {\n message: `${stats.iterations.total} iterations, ${stats.llm.calls} LLM calls, $${stats.cost.total.toFixed(4)} cost`,\n severity: stats.errors > 0 ? 'warning' : 'info',\n actionable: stats.errors > 5,\n },\n };\n\n // Output\n if (flags.json) {\n ctx.ui?.json?.(response);\n } else {\n printHumanReadable(ctx, stats);\n }\n\n return { exitCode: 0, response };\n } catch (err) {\n logger.error('trace:stats error:', err instanceof Error ? err : undefined);\n const errResponse = error('IO_ERROR', err instanceof Error ? err.message : String(err));\n ctx.ui?.json?.(errResponse);\n return { exitCode: 1, response: errResponse };\n }\n },\n },\n});\n\n/**\n * Calculate statistics from trace events\n */\nfunction calculateStats(events: DetailedTraceEntry[], taskId?: string): StatsResponse {\n const normalized = normalizeTraceEvents(events);\n const iterationSet = new Set<number>();\n for (const e of normalized) {\n if (e.iteration > 0) {\n iterationSet.add(e.iteration);\n }\n }\n\n const llmStartEvents = normalized.filter((e) => e.type === 'llm:start' || e.type === 'llm:call' || e.type === 'llm_call');\n const llmEndEvents = normalized.filter((e) => e.type === 'llm:end' || e.type === 'llm:call');\n const toolEndEvents = normalized.filter((e) => e.type === 'tool:end' || e.type === 'tool:execution' || e.type === 'tool_result');\n const errorEvents = normalized.filter((e) => e.type === 'error:captured' || e.type === 'agent:error' || e.type === 'tool:error');\n\n // Calculate LLM stats (handle both new and legacy data structures)\n const inputTokens = llmEndEvents.reduce((sum, e) => {\n const tokens = (e.raw as LLMCallRaw).response?.usage?.inputTokens || 0;\n return sum + tokens;\n }, 0);\n\n const outputTokens = llmEndEvents.reduce((sum, e) => {\n const tokens = (e.raw as LLMCallRaw).response?.usage?.outputTokens || 0;\n return sum + tokens;\n }, 0);\n\n const legacyTotalTokens = llmEndEvents.reduce((sum, e) => {\n const tokens = (e.data.tokensUsed as number | undefined) || 0;\n return sum + tokens;\n }, 0);\n\n const totalCost = llmEndEvents.reduce((sum, e) => {\n const cost = (e.raw as LLMCallRaw).cost?.totalCost || 0;\n return sum + cost;\n }, 0);\n\n // Calculate tool stats (handle both new and legacy formats)\n const toolCounts: Record<string, number> = {};\n let successfulTools = 0;\n let failedTools = 0;\n\n for (const tool of toolEndEvents) {\n const toolName = (tool.raw as ToolEndRaw).tool?.name || (tool.data.toolName as string | undefined) || 'unknown';\n toolCounts[toolName] = (toolCounts[toolName] || 0) + 1;\n\n const success = (tool.raw as ToolEndRaw).output?.success ?? (tool.data.success as boolean | undefined) ?? true;\n if (success) {\n successfulTools++;\n } else {\n failedTools++;\n }\n }\n\n // Calculate timing\n const firstEvent = events[0];\n const lastEvent = events[events.length - 1];\n const startedAt = firstEvent?.timestamp || new Date().toISOString();\n const completedAt = lastEvent?.timestamp || new Date().toISOString();\n const totalDurationMs = new Date(completedAt).getTime() - new Date(startedAt).getTime();\n\n return {\n taskId: taskId || 'unknown',\n status: errorEvents.length > 0 ? 'failed' : 'success',\n\n iterations: {\n total: iterationSet.size,\n completed: iterationSet.size,\n },\n\n llm: {\n calls: llmStartEvents.length,\n inputTokens,\n outputTokens,\n // Use explicit tokens if available, otherwise fall back to legacy total\n totalTokens: (inputTokens + outputTokens) || legacyTotalTokens,\n },\n\n tools: {\n totalCalls: toolEndEvents.length,\n byTool: toolCounts,\n successful: successfulTools,\n failed: failedTools,\n },\n\n timing: {\n startedAt,\n completedAt,\n totalDurationMs,\n durationFormatted: formatDuration(totalDurationMs),\n },\n\n cost: {\n total: totalCost,\n currency: 'USD',\n },\n\n errors: errorEvents.length,\n };\n}\n\n/**\n * Format duration in human-readable format\n */\nfunction formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n}\n\n/**\n * Print human-readable output\n */\nfunction printHumanReadable(ctx: PluginContextV3, stats: StatsResponse): void {\n ctx.ui.write('\\n');\n ctx.ui.write('📊 Trace Statistics\\n');\n ctx.ui.write('\\n');\n\n ctx.ui.write(`Status: ${stats.status === 'success' ? '✅ Success' : '❌ Failed'}\\n`);\n ctx.ui.write(`Iterations: ${stats.iterations.total}\\n`);\n ctx.ui.write('\\n');\n\n ctx.ui.write('🤖 LLM Usage:\\n');\n ctx.ui.write(` Calls: ${stats.llm.calls}\\n`);\n ctx.ui.write(` Input tokens: ${stats.llm.inputTokens.toLocaleString()}\\n`);\n ctx.ui.write(` Output tokens: ${stats.llm.outputTokens.toLocaleString()}\\n`);\n ctx.ui.write(` Total tokens: ${stats.llm.totalTokens.toLocaleString()}\\n`);\n ctx.ui.write('\\n');\n\n ctx.ui.write('🔧 Tool Usage:\\n');\n ctx.ui.write(` Total calls: ${stats.tools.totalCalls}\\n`);\n ctx.ui.write(` Successful: ${stats.tools.successful}\\n`);\n ctx.ui.write(` Failed: ${stats.tools.failed}\\n`);\n ctx.ui.write(' By tool:\\n');\n for (const [tool, count] of Object.entries(stats.tools.byTool)) {\n ctx.ui.write(` ${tool}: ${count}\\n`);\n }\n ctx.ui.write('\\n');\n\n ctx.ui.write('⏱️ Timing:\\n');\n ctx.ui.write(` Started: ${stats.timing.startedAt}\\n`);\n ctx.ui.write(` Completed: ${stats.timing.completedAt}\\n`);\n ctx.ui.write(` Duration: ${stats.timing.durationFormatted}\\n`);\n ctx.ui.write('\\n');\n\n ctx.ui.write('💰 Cost:\\n');\n ctx.ui.write(` Total: $${stats.cost.total.toFixed(4)} ${stats.cost.currency}\\n`);\n ctx.ui.write('\\n');\n\n if (stats.errors > 0) {\n ctx.ui.write(`⚠️ Errors: ${stats.errors}\\n`);\n ctx.ui.write('\\n');\n }\n}\n\n/**\n * Create error response\n */\nfunction error(code: TraceErrorCode, message: string): TraceCommandResponse {\n return {\n success: false,\n command: 'trace:stats',\n taskId: '',\n error: {\n code,\n message,\n },\n summary: {\n message,\n severity: 'error',\n actionable: true,\n },\n };\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { manifest } from './manifest.js';
2
- import '@kb-labs/perm-presets';
2
+ import '@kb-labs/plugin-contracts';
package/dist/index.js CHANGED
@@ -88,7 +88,7 @@ var manifest = {
88
88
  version: "0.1.0",
89
89
  display: {
90
90
  name: "Agent System",
91
- description: "Autonomous agent system with LLM tool calling, task orchestration, and tier escalation.",
91
+ description: "Autonomous agents, tool calling, and task orchestration",
92
92
  tags: ["agent", "autonomous", "llm", "orchestration"]
93
93
  },
94
94
  // Configuration lives under kb.config.json -> agents
@@ -98,14 +98,19 @@ var manifest = {
98
98
  optional: ["cache", "analytics", "logger"]
99
99
  },
100
100
  cli: {
101
+ groupMeta: [
102
+ { path: "agent", describe: "Autonomous agent commands" },
103
+ { path: "agent trace", describe: "Agent trace debugging commands" },
104
+ { path: "agent quality", describe: "Agent quality control commands" }
105
+ ],
101
106
  commands: [
102
107
  {
103
- id: "run",
104
- group: "agent",
105
- describe: "Run agent with specified mode (execute/plan/edit/debug)",
108
+ path: "agent run",
109
+ category: "Run",
110
+ describe: "Run agent task (execute, plan, edit, or debug)",
111
+ operationType: "execute",
106
112
  longDescription: "Unified agent command with multiple modes: execute (default) - run task immediately, plan - generate execution plan without running, edit - modify existing files, debug - analyze errors with trace context. Supports filesystem, search, shell, memory, and user interaction tools.",
107
113
  handler: "./cli/commands/run.js#default",
108
- handlerPath: "./cli/commands/run.js",
109
114
  flags: defineCommandFlags(runFlags),
110
115
  examples: [
111
116
  'kb agent run --task="Create analytics system"',
@@ -119,12 +124,12 @@ var manifest = {
119
124
  },
120
125
  // Trace debugging commands (AI-friendly)
121
126
  {
122
- id: "trace:stats",
123
- group: "agent",
124
- describe: "Show trace statistics with cost and performance metrics",
127
+ path: "agent trace stats",
128
+ category: "Trace",
129
+ describe: "Show trace statistics: tokens, cost, timing",
130
+ operationType: "read",
125
131
  longDescription: "Analyze trace file to show comprehensive statistics: iterations, LLM calls, token usage, tool usage, timing, and cost. Supports --json flag for AI agent consumption.",
126
132
  handler: "./cli/commands/trace-stats.js#default",
127
- handlerPath: "./cli/commands/trace-stats.js",
128
133
  flags: defineCommandFlags({
129
134
  "task-id": { type: "string", description: "Task ID or trace filename" },
130
135
  json: { type: "boolean", description: "Output JSON for AI agents", default: false }
@@ -135,12 +140,12 @@ var manifest = {
135
140
  ]
136
141
  },
137
142
  {
138
- id: "trace:filter",
139
- group: "agent",
143
+ path: "agent trace filter",
144
+ category: "Trace",
140
145
  describe: "Filter trace events by type for debugging",
146
+ operationType: "read",
141
147
  longDescription: "Filter trace events by type (llm:call, tool:execution, error:captured, etc.). Use this to debug specific aspects of agent execution. Supports --json flag for programmatic access.",
142
148
  handler: "./cli/commands/trace-filter.js#default",
143
- handlerPath: "./cli/commands/trace-filter.js",
144
149
  flags: defineCommandFlags({
145
150
  "task-id": { type: "string", description: "Task ID or trace filename" },
146
151
  type: { type: "string", description: "Event type to filter (llm:call, tool:execution, etc.)" },
@@ -152,12 +157,12 @@ var manifest = {
152
157
  ]
153
158
  },
154
159
  {
155
- id: "trace:iteration",
156
- group: "agent",
160
+ path: "agent trace iteration",
161
+ category: "Trace",
157
162
  describe: "View all events for a specific iteration",
163
+ operationType: "read",
158
164
  longDescription: "Show all trace events for a specific iteration number. Useful for debugging what happened in a particular loop iteration. Includes summary statistics and event timeline.",
159
165
  handler: "./cli/commands/trace-iteration.js#default",
160
- handlerPath: "./cli/commands/trace-iteration.js",
161
166
  flags: defineCommandFlags({
162
167
  "task-id": { type: "string", description: "Task ID or trace filename" },
163
168
  iteration: { type: "number", description: "Iteration number (1-based)" },
@@ -169,12 +174,12 @@ var manifest = {
169
174
  ]
170
175
  },
171
176
  {
172
- id: "trace:context",
173
- group: "agent",
174
- describe: "View what the LLM sees at each iteration \u2014 context window, truncations, responses",
177
+ path: "agent trace context",
178
+ category: "Trace",
179
+ describe: "Inspect context window and truncations per iteration",
180
+ operationType: "read",
175
181
  longDescription: "Shows the full context timeline for debugging agent behavior. For each LLM call: what messages are in the sliding window, what was truncated/dropped, and what the LLM responded with.",
176
182
  handler: "./cli/commands/trace-context.js#default",
177
- handlerPath: "./cli/commands/trace-context.js",
178
183
  flags: defineCommandFlags({
179
184
  "task-id": { type: "string", description: "Task ID or trace filename" },
180
185
  iteration: { type: "number", description: "Filter to specific iteration" },
@@ -187,12 +192,12 @@ var manifest = {
187
192
  ]
188
193
  },
189
194
  {
190
- id: "trace:diagnose",
191
- group: "agent",
192
- describe: 'Quick diagnostic analysis \u2014 answers "what went wrong?" in one command',
195
+ path: "agent trace diagnose",
196
+ category: "Trace",
197
+ describe: "Diagnose what went wrong in an agent run",
198
+ operationType: "analyze",
193
199
  longDescription: "Comprehensive diagnostic report for agent execution. Analyzes errors, context window health (drops, truncations), tool failures, LLM reasoning text, loop detection, and quality indicators. One command to understand any agent issue.",
194
200
  handler: "./cli/commands/trace-diagnose.js#default",
195
- handlerPath: "./cli/commands/trace-diagnose.js",
196
201
  flags: defineCommandFlags({
197
202
  "task-id": { type: "string", description: "Task ID or trace filename" },
198
203
  json: { type: "boolean", description: "Output JSON for AI agents", default: false }
@@ -203,12 +208,12 @@ var manifest = {
203
208
  ]
204
209
  },
205
210
  {
206
- id: "quality:report",
207
- group: "agent",
211
+ path: "agent quality report",
212
+ category: "Quality",
208
213
  describe: "Show quality control report for recent agent runs",
214
+ operationType: "analyze",
209
215
  longDescription: "Aggregates agent KPI telemetry from analytics buffer and shows quality, token usage, tool efficiency, drift, and regression alerts. Useful for continuous quality control and cost/performance monitoring.",
210
216
  handler: "./cli/commands/quality-report.js#default",
211
- handlerPath: "./cli/commands/quality-report.js",
212
217
  flags: defineCommandFlags({
213
218
  days: { type: "number", description: "Lookback period in days", default: 1 },
214
219
  limit: { type: "number", description: "Max KPI runs to analyze", default: 200 },
@@ -224,12 +229,12 @@ var manifest = {
224
229
  },
225
230
  // File change history commands
226
231
  {
227
- id: "history",
228
- group: "agent",
232
+ path: "agent history",
233
+ category: "History",
229
234
  describe: "Show file change history for agent sessions",
235
+ operationType: "read",
230
236
  longDescription: "View file changes made by agents during execution. Filter by session, file, or agent. Shows timestamps, operations, and change metadata.",
231
237
  handler: "./cli/commands/history.js#default",
232
- handlerPath: "./cli/commands/history.js",
233
238
  flags: defineCommandFlags({
234
239
  "session-id": { type: "string", description: "Session ID to filter by" },
235
240
  file: { type: "string", description: "File path to filter by" },
@@ -244,12 +249,12 @@ var manifest = {
244
249
  ]
245
250
  },
246
251
  {
247
- id: "diff",
248
- group: "agent",
252
+ path: "agent diff",
253
+ category: "History",
249
254
  describe: "Show diff for specific file change",
255
+ operationType: "read",
250
256
  longDescription: "Display line-by-line diff for a specific file change. Shows additions, deletions, and modifications with context.",
251
257
  handler: "./cli/commands/diff.js#default",
252
- handlerPath: "./cli/commands/diff.js",
253
258
  flags: defineCommandFlags({
254
259
  "change-id": { type: "string", description: "Change ID to show diff for" },
255
260
  json: { type: "boolean", description: "Output JSON for AI agents", default: false }
@@ -260,12 +265,12 @@ var manifest = {
260
265
  ]
261
266
  },
262
267
  {
263
- id: "rollback",
264
- group: "agent",
268
+ path: "agent rollback",
269
+ category: "History",
265
270
  describe: "Rollback file changes made by agents",
271
+ operationType: "mutate",
266
272
  longDescription: "Rollback file changes made by agents. Supports rollback by change ID, file path, agent ID, session, or timestamp. Use --dry-run to preview changes before applying.",
267
273
  handler: "./cli/commands/rollback.js#default",
268
- handlerPath: "./cli/commands/rollback.js",
269
274
  flags: defineCommandFlags({
270
275
  "change-id": { type: "string", description: "Change ID to rollback" },
271
276
  file: { type: "string", description: "File path to rollback all changes for" },