@kb-labs/agent-entry 2.15.0 → 2.16.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.
- package/dist/cli/commands/diff.js.map +1 -1
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/quality-report.js.map +1 -1
- package/dist/cli/commands/rollback.js.map +1 -1
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/trace-context.js.map +1 -1
- package/dist/cli/commands/trace-diagnose.js.map +1 -1
- package/dist/cli/commands/trace-event-normalizer.js.map +1 -1
- package/dist/cli/commands/trace-filter.js.map +1 -1
- package/dist/cli/commands/trace-iteration.js.map +1 -1
- package/dist/cli/commands/trace-stats.js.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/manifest.js +10 -10
- package/dist/manifest.js.map +1 -1
- package/dist/rest/handlers/approve-handler.js.map +1 -1
- package/dist/rest/handlers/approve-session-plan-handler.js.map +1 -1
- package/dist/rest/handlers/correct-handler.js.map +1 -1
- package/dist/rest/handlers/create-session-handler.js.map +1 -1
- package/dist/rest/handlers/execute-session-plan-handler.js.map +1 -1
- package/dist/rest/handlers/generate-spec-handler.js.map +1 -1
- package/dist/rest/handlers/get-file-diff-handler.js.map +1 -1
- package/dist/rest/handlers/get-session-handler.js.map +1 -1
- package/dist/rest/handlers/get-session-plan-handler.js.map +1 -1
- package/dist/rest/handlers/get-session-turns-handler.js.map +1 -1
- package/dist/rest/handlers/get-spec-handler.js.map +1 -1
- package/dist/rest/handlers/list-file-changes-handler.js.map +1 -1
- package/dist/rest/handlers/list-sessions-handler.js.map +1 -1
- package/dist/rest/handlers/rollback-handler.js.map +1 -1
- package/dist/rest/handlers/run-handler.js.map +1 -1
- package/dist/rest/handlers/sessions-handler.js.map +1 -1
- package/dist/rest/handlers/status-handler.js.map +1 -1
- package/dist/rest/handlers/stop-handler.js.map +1 -1
- package/dist/ws/session-stream-handler.js.map +1 -1
- package/package.json +14 -14
- package/dist/widgets/117.js +0 -2
- package/dist/widgets/117.js.map +0 -1
- package/dist/widgets/297.js +0 -2
- package/dist/widgets/297.js.map +0 -1
- package/dist/widgets/338.js +0 -2
- package/dist/widgets/338.js.map +0 -1
- package/dist/widgets/370.js +0 -2
- package/dist/widgets/370.js.map +0 -1
- package/dist/widgets/451.js +0 -2
- package/dist/widgets/451.js.map +0 -1
- package/dist/widgets/50.js +0 -2
- package/dist/widgets/50.js.map +0 -1
- package/dist/widgets/586.js +0 -39
- package/dist/widgets/586.js.map +0 -1
- package/dist/widgets/59.js +0 -2
- package/dist/widgets/59.js.map +0 -1
- package/dist/widgets/607.js +0 -2
- package/dist/widgets/607.js.map +0 -1
- package/dist/widgets/626.js +0 -2
- package/dist/widgets/626.js.map +0 -1
- package/dist/widgets/669.js +0 -2
- package/dist/widgets/669.js.map +0 -1
- package/dist/widgets/678.js +0 -2
- package/dist/widgets/678.js.map +0 -1
- package/dist/widgets/781.js +0 -2
- package/dist/widgets/781.js.map +0 -1
- package/dist/widgets/842.js +0 -446
- package/dist/widgets/842.js.map +0 -1
- package/dist/widgets/968.js +0 -10
- package/dist/widgets/968.js.map +0 -1
- package/dist/widgets/997.js +0 -35
- package/dist/widgets/997.js.map +0 -1
- package/dist/widgets/@mf-types.d.ts +0 -3
- package/dist/widgets/@mf-types.zip +0 -0
- package/dist/widgets/__federation_expose_AgentsPage.js +0 -2
- package/dist/widgets/__federation_expose_AgentsPage.js.map +0 -1
- package/dist/widgets/mf-manifest.json +0 -262
- package/dist/widgets/mf-stats.json +0 -307
- package/dist/widgets/remoteEntry.js +0 -7
- package/dist/widgets/remoteEntry.js.map +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 as any).type ?? '');\n const data = getEventData(raw);\n\n const explicitIteration = asNumber((raw as any).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 any).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 } from '@kb-labs/agent-contracts';\nimport { loadTrace, formatTraceLoadError } from '@kb-labs/agent-tracing';\nimport { normalizeTraceEvents } from './trace-event-normalizer.js';\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 = (input as any).flags ?? 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: any[]): DiagnosticReport {\n const normalized = normalizeTraceEvents(events as any[]);\n const issues: DiagnosticIssue[] = [];\n\n // === Summary ===\n const taskStart = events[0];\n const agentEnd = [...events].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 durationMs = Number(agentEnd?.data?.durationMs)\n || (taskStart && events[events.length - 1]\n ? new Date(events[events.length - 1].timestamp).getTime() - new Date(taskStart.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 data = tr.data || (tr.raw as any).output || tr.raw;\n const output = typeof data?.output === 'string' ? data.output : JSON.stringify(data?.result || '');\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 const contextSnapshots = events.filter(e => e.type === 'context:snapshot');\n const contextDiffs = events.filter(e => e.type === 'context:diff');\n const contextTrims = events.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 data = snap.data || snap;\n const chars = data.totalChars || 0;\n const dropped = data.slidingWindow?.droppedMessages || 0;\n if (chars > maxContextChars) {maxContextChars = chars;}\n totalDroppedMessages += dropped;\n contextGrowthHistory.push({\n iteration: data.iteration || 0,\n messageCount: 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 || cd).diff;\n if (diff?.systemPromptChanged) {\n systemPromptChanges.push({\n iteration: (cd.data || cd).iteration || 0,\n charsDelta: diff.systemPromptCharsDelta || 0,\n });\n issues.push({\n severity: 'warning',\n category: 'context',\n message: `System prompt changed at iteration ${(cd.data || cd).iteration} (${diff.systemPromptCharsDelta > 0 ? '+' : ''}${diff.systemPromptCharsDelta} 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 => (d.data || d).diff?.droppedMessages > 0)\n .map(d => `Iteration ${(d.data || d).iteration}: ${(d.data || d).diff?.droppedMessages} dropped`)\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 any).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 any)) as any;\n const name = (data.toolName as string | undefined) || (data.tool?.name as string | undefined) || 'unknown';\n const dur = Number(data.durationMs) || Number(data.timing?.durationMs) || 0;\n const success = (data.success as boolean | undefined) ?? (data.output?.success as boolean | undefined) ?? 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 any)) as any;\n const name = data.toolName || data.tool?.name || 'unknown';\n const errMsg = data.error || 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 any)) as any;\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 = events.filter(e => e.type === 'stopping:analysis');\n const stoppingReasons = stoppingAnalyses\n .map(e => (e.data || e).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 any)) as any;\n const msg = data.error?.message || data.error || '';\n issues.push({\n severity: 'critical',\n category: 'error',\n message: typeof msg === 'string' ? msg.slice(0, 300) : JSON.stringify(msg).slice(0, 300),\n iteration: Number(data.iteration) || err.iteration,\n details: data.error?.stack || 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 any)) as any;\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":["../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/agents/entry/src/cli/commands/trace-event-normalizer.ts","../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/agents/entry/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 as any).type ?? '');\n const data = getEventData(raw);\n\n const explicitIteration = asNumber((raw as any).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 any).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 } from '@kb-labs/agent-contracts';\nimport { loadTrace, formatTraceLoadError } from '@kb-labs/agent-tracing';\nimport { normalizeTraceEvents } from './trace-event-normalizer.js';\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 = (input as any).flags ?? 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: any[]): DiagnosticReport {\n const normalized = normalizeTraceEvents(events as any[]);\n const issues: DiagnosticIssue[] = [];\n\n // === Summary ===\n const taskStart = events[0];\n const agentEnd = [...events].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 durationMs = Number(agentEnd?.data?.durationMs)\n || (taskStart && events[events.length - 1]\n ? new Date(events[events.length - 1].timestamp).getTime() - new Date(taskStart.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 data = tr.data || (tr.raw as any).output || tr.raw;\n const output = typeof data?.output === 'string' ? data.output : JSON.stringify(data?.result || '');\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 const contextSnapshots = events.filter(e => e.type === 'context:snapshot');\n const contextDiffs = events.filter(e => e.type === 'context:diff');\n const contextTrims = events.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 data = snap.data || snap;\n const chars = data.totalChars || 0;\n const dropped = data.slidingWindow?.droppedMessages || 0;\n if (chars > maxContextChars) {maxContextChars = chars;}\n totalDroppedMessages += dropped;\n contextGrowthHistory.push({\n iteration: data.iteration || 0,\n messageCount: 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 || cd).diff;\n if (diff?.systemPromptChanged) {\n systemPromptChanges.push({\n iteration: (cd.data || cd).iteration || 0,\n charsDelta: diff.systemPromptCharsDelta || 0,\n });\n issues.push({\n severity: 'warning',\n category: 'context',\n message: `System prompt changed at iteration ${(cd.data || cd).iteration} (${diff.systemPromptCharsDelta > 0 ? '+' : ''}${diff.systemPromptCharsDelta} 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 => (d.data || d).diff?.droppedMessages > 0)\n .map(d => `Iteration ${(d.data || d).iteration}: ${(d.data || d).diff?.droppedMessages} dropped`)\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 any).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 any)) as any;\n const name = (data.toolName as string | undefined) || (data.tool?.name as string | undefined) || 'unknown';\n const dur = Number(data.durationMs) || Number(data.timing?.durationMs) || 0;\n const success = (data.success as boolean | undefined) ?? (data.output?.success as boolean | undefined) ?? 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 any)) as any;\n const name = data.toolName || data.tool?.name || 'unknown';\n const errMsg = data.error || 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 any)) as any;\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 = events.filter(e => e.type === 'stopping:analysis');\n const stoppingReasons = stoppingAnalyses\n .map(e => (e.data || e).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 any)) as any;\n const msg = data.error?.message || data.error || '';\n issues.push({\n severity: 'critical',\n category: 'error',\n message: typeof msg === 'string' ? msg.slice(0, 300) : JSON.stringify(msg).slice(0, 300),\n iteration: Number(data.iteration) || err.iteration,\n details: data.error?.stack || 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 any)) as any;\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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/agents/entry/src/cli/commands/trace-event-normalizer.ts"],"names":[],"mappings":";AASO,SAAS,qBAAqB,MAAA,EAAsD;AACzF,EAAA,MAAM,MAA8B,EAAC;AACrC,EAAA,IAAI,gBAAA,GAAmB,CAAA;AAEvB,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,MAAM,IAAA,GAAO,MAAA,CAAQ,GAAA,CAAY,IAAA,IAAQ,EAAE,CAAA;AAC3C,IAAA,MAAM,IAAA,GAAO,aAAa,GAAG,CAAA;AAE7B,IAAA,MAAM,oBAAoB,QAAA,CAAU,GAAA,CAAY,SAAS,CAAA,IAAK,QAAA,CAAS,KAAK,SAAS,CAAA;AACrF,IAAA,IAAI,SAAS,iBAAA,EAAmB;AAC9B,MAAA,gBAAA,GAAmB,iBAAA,IAAqB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,mBAAmB,CAAC,CAAA;AAAA,IAC1E;AAEA,IAAA,MAAM,YAAY,iBAAA,IAAqB,gBAAA;AACvC,IAAA,GAAA,CAAI,KAAK,EAAE,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM,WAAW,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,aAAa,KAAA,EAAoD;AAC/E,EAAA,MAAM,OAAQ,KAAA,CAAc,IAAA;AAC5B,EAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAC;AACV;AAEO,SAAS,SAAS,KAAA,EAAoC;AAC3D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AACvD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,CAAA,GAAI,OAAO,KAAK,CAAA;AACtB,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG;AACtB,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT","file":"trace-event-normalizer.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 as any).type ?? '');\n const data = getEventData(raw);\n\n const explicitIteration = asNumber((raw as any).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 any).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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/commands/trace-filter.ts"],"names":[],"mappings":"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","file":"trace-filter.js","sourcesContent":["/**\n * agent:trace:filter - Filter trace events by type (AI-friendly)\n *\n * Usage:\n * pnpm kb agent:trace:filter <taskId> --type=llm:call\n * pnpm kb agent:trace:filter <taskId> --type=tool:execution --json\n * pnpm kb agent:trace:filter <taskId> --type=error:captured\n */\n\nimport { defineCommand, useLogger, type PluginContextV3 } from '@kb-labs/sdk';\nimport type {\n TraceCommandResponse,\n FilterResponse,\n TraceErrorCode,\n} from '@kb-labs/agent-contracts';\nimport type { DetailedTraceEntry } from '@kb-labs/agent-contracts';\nimport { loadTrace, formatTraceLoadError } from '@kb-labs/agent-tracing';\n\n// Valid event types (includes both new colon-separated and legacy snake_case formats)\nconst VALID_EVENT_TYPES: string[] = [\n // New format (detailed trace)\n 'iteration:detail',\n 'llm:call',\n 'tool:execution',\n 'memory:snapshot',\n 'decision:point',\n 'synthesis:forced',\n 'error:captured',\n 'prompt:diff',\n 'tool:filter',\n 'context:trim',\n 'stopping:analysis',\n 'llm:validation',\n // Legacy format (simple trace)\n 'llm_call',\n 'llm_response',\n 'tool_call',\n 'tool_result',\n 'tool_cache_hit',\n 'task_start',\n 'task_end',\n];\n\ntype TraceFilterInput = {\n taskId?: string;\n 'task-id'?: string;\n type?: string;\n json?: boolean;\n};\n\ntype TraceFilterResult = { exitCode: number; response?: TraceCommandResponse };\n\nexport default defineCommand({\n id: 'trace:filter',\n description: 'Filter trace events by type for debugging',\n\n handler: {\n async execute(ctx: PluginContextV3, input: TraceFilterInput): Promise<TraceFilterResult> {\n const logger = useLogger();\n const flags = (input as any).flags ?? input;\n const taskId = (flags['task-id'] ?? flags.taskId) as string | undefined;\n const eventType = flags.type as string | undefined;\n\n if (!eventType) {\n const err = error('INVALID_EVENT_TYPE', 'Missing required --type flag');\n ctx.ui.write(JSON.stringify(err, null, 2) + '\\n');\n return { exitCode: 1, response: err };\n }\n\n if (!VALID_EVENT_TYPES.includes(eventType)) {\n const err = error(\n 'INVALID_EVENT_TYPE',\n `Invalid event type: ${eventType}. Valid types: ${VALID_EVENT_TYPES.join(', ')}`\n );\n ctx.ui.write(JSON.stringify(err, null, 2) + '\\n');\n return { exitCode: 1, response: err };\n }\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 // Filter by type\n const filtered = events.filter((e) => e.type === eventType);\n\n // Build response\n const response: TraceCommandResponse<FilterResponse> = {\n success: true,\n command: 'trace:filter',\n taskId: taskId ?? '',\n data: {\n taskId: taskId ?? '',\n eventType: eventType,\n events: filtered,\n count: filtered.length,\n },\n summary: {\n message: `Found ${filtered.length} ${eventType} events`,\n severity: 'info',\n actionable: false,\n },\n };\n\n // Output\n if (flags.json) {\n ctx.ui.write(JSON.stringify(response, null, 2) + '\\n');\n } else {\n printHumanReadable(ctx, eventType, filtered);\n }\n\n return { exitCode: 0, response };\n } catch (err) {\n logger.error('trace:filter 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 * Print human-readable output\n */\nfunction printHumanReadable(ctx: PluginContextV3, eventType: string, events: DetailedTraceEntry[]): void {\n ctx.ui.write('\\n');\n ctx.ui.write(`🔍 Filtered Events: ${eventType}\\n`);\n ctx.ui.write(`Found ${events.length} events\\n`);\n ctx.ui.write('\\n');\n\n if (events.length === 0) {\n ctx.ui.write('No events found.\\n');\n return;\n }\n\n // Show first 10 events\n const showCount = Math.min(10, events.length);\n ctx.ui.write(`Showing first ${showCount}/${events.length}:\\n`);\n ctx.ui.write('\\n');\n\n for (let i = 0; i < showCount; i++) {\n const event = events[i];\n if (!event) {continue;}\n\n ctx.ui.write(`[${event.seq}] ${event.timestamp} (iteration ${(event as any).iteration || 'N/A'})\\n`);\n\n // Show event-specific summary\n if (event.type === 'llm:call') {\n const e = event as any;\n ctx.ui.write(` Model: ${e.request.model}, Tokens: ${e.response.usage.totalTokens}, Cost: $${e.cost.totalCost.toFixed(6)}\\n`);\n } else if (event.type === 'tool:execution') {\n const e = event as any;\n ctx.ui.write(` Tool: ${e.tool.name}, Success: ${e.output.success}, Duration: ${e.timing.durationMs}ms\\n`);\n } else if (event.type === 'error:captured') {\n const e = event as any;\n ctx.ui.write(` Error: ${e.error.message.substring(0, 100)}\\n`);\n }\n\n ctx.ui.write('\\n');\n }\n\n if (events.length > showCount) {\n ctx.ui.write(`... and ${events.length - showCount} more events\\n`);\n ctx.ui.write('Use --json flag to see all events\\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:filter',\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":["../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/agents/entry/src/cli/commands/trace-filter.ts"],"names":[],"mappings":"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","file":"trace-filter.js","sourcesContent":["/**\n * agent:trace:filter - Filter trace events by type (AI-friendly)\n *\n * Usage:\n * pnpm kb agent:trace:filter <taskId> --type=llm:call\n * pnpm kb agent:trace:filter <taskId> --type=tool:execution --json\n * pnpm kb agent:trace:filter <taskId> --type=error:captured\n */\n\nimport { defineCommand, useLogger, type PluginContextV3 } from '@kb-labs/sdk';\nimport type {\n TraceCommandResponse,\n FilterResponse,\n TraceErrorCode,\n} from '@kb-labs/agent-contracts';\nimport type { DetailedTraceEntry } from '@kb-labs/agent-contracts';\nimport { loadTrace, formatTraceLoadError } from '@kb-labs/agent-tracing';\n\n// Valid event types (includes both new colon-separated and legacy snake_case formats)\nconst VALID_EVENT_TYPES: string[] = [\n // New format (detailed trace)\n 'iteration:detail',\n 'llm:call',\n 'tool:execution',\n 'memory:snapshot',\n 'decision:point',\n 'synthesis:forced',\n 'error:captured',\n 'prompt:diff',\n 'tool:filter',\n 'context:trim',\n 'stopping:analysis',\n 'llm:validation',\n // Legacy format (simple trace)\n 'llm_call',\n 'llm_response',\n 'tool_call',\n 'tool_result',\n 'tool_cache_hit',\n 'task_start',\n 'task_end',\n];\n\ntype TraceFilterInput = {\n taskId?: string;\n 'task-id'?: string;\n type?: string;\n json?: boolean;\n};\n\ntype TraceFilterResult = { exitCode: number; response?: TraceCommandResponse };\n\nexport default defineCommand({\n id: 'trace:filter',\n description: 'Filter trace events by type for debugging',\n\n handler: {\n async execute(ctx: PluginContextV3, input: TraceFilterInput): Promise<TraceFilterResult> {\n const logger = useLogger();\n const flags = (input as any).flags ?? input;\n const taskId = (flags['task-id'] ?? flags.taskId) as string | undefined;\n const eventType = flags.type as string | undefined;\n\n if (!eventType) {\n const err = error('INVALID_EVENT_TYPE', 'Missing required --type flag');\n ctx.ui.write(JSON.stringify(err, null, 2) + '\\n');\n return { exitCode: 1, response: err };\n }\n\n if (!VALID_EVENT_TYPES.includes(eventType)) {\n const err = error(\n 'INVALID_EVENT_TYPE',\n `Invalid event type: ${eventType}. Valid types: ${VALID_EVENT_TYPES.join(', ')}`\n );\n ctx.ui.write(JSON.stringify(err, null, 2) + '\\n');\n return { exitCode: 1, response: err };\n }\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 // Filter by type\n const filtered = events.filter((e) => e.type === eventType);\n\n // Build response\n const response: TraceCommandResponse<FilterResponse> = {\n success: true,\n command: 'trace:filter',\n taskId: taskId ?? '',\n data: {\n taskId: taskId ?? '',\n eventType: eventType,\n events: filtered,\n count: filtered.length,\n },\n summary: {\n message: `Found ${filtered.length} ${eventType} events`,\n severity: 'info',\n actionable: false,\n },\n };\n\n // Output\n if (flags.json) {\n ctx.ui.write(JSON.stringify(response, null, 2) + '\\n');\n } else {\n printHumanReadable(ctx, eventType, filtered);\n }\n\n return { exitCode: 0, response };\n } catch (err) {\n logger.error('trace:filter 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 * Print human-readable output\n */\nfunction printHumanReadable(ctx: PluginContextV3, eventType: string, events: DetailedTraceEntry[]): void {\n ctx.ui.write('\\n');\n ctx.ui.write(`🔍 Filtered Events: ${eventType}\\n`);\n ctx.ui.write(`Found ${events.length} events\\n`);\n ctx.ui.write('\\n');\n\n if (events.length === 0) {\n ctx.ui.write('No events found.\\n');\n return;\n }\n\n // Show first 10 events\n const showCount = Math.min(10, events.length);\n ctx.ui.write(`Showing first ${showCount}/${events.length}:\\n`);\n ctx.ui.write('\\n');\n\n for (let i = 0; i < showCount; i++) {\n const event = events[i];\n if (!event) {continue;}\n\n ctx.ui.write(`[${event.seq}] ${event.timestamp} (iteration ${(event as any).iteration || 'N/A'})\\n`);\n\n // Show event-specific summary\n if (event.type === 'llm:call') {\n const e = event as any;\n ctx.ui.write(` Model: ${e.request.model}, Tokens: ${e.response.usage.totalTokens}, Cost: $${e.cost.totalCost.toFixed(6)}\\n`);\n } else if (event.type === 'tool:execution') {\n const e = event as any;\n ctx.ui.write(` Tool: ${e.tool.name}, Success: ${e.output.success}, Duration: ${e.timing.durationMs}ms\\n`);\n } else if (event.type === 'error:captured') {\n const e = event as any;\n ctx.ui.write(` Error: ${e.error.message.substring(0, 100)}\\n`);\n }\n\n ctx.ui.write('\\n');\n }\n\n if (events.length > showCount) {\n ctx.ui.write(`... and ${events.length - showCount} more events\\n`);\n ctx.ui.write('Use --json flag to see all events\\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:filter',\n taskId: '',\n error: {\n code,\n message,\n },\n summary: {\n message,\n severity: 'error',\n actionable: true,\n },\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/commands/trace-event-normalizer.ts","../../../src/cli/commands/trace-iteration.ts"],"names":[],"mappings":"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","file":"trace-iteration.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 as any).type ?? '');\n const data = getEventData(raw);\n\n const explicitIteration = asNumber((raw as any).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 any).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:iteration - View specific iteration details (AI-friendly)\n *\n * Usage:\n * pnpm kb agent:trace:iteration <taskId> --iteration=3\n * pnpm kb agent:trace:iteration <taskId> --iteration=5 --json\n */\n\nimport { defineCommand, useLogger, type PluginContextV3 } from '@kb-labs/sdk';\nimport type {\n TraceCommandResponse,\n IterationResponse,\n TraceErrorCode,\n} from '@kb-labs/agent-contracts';\nimport type { DetailedTraceEntry } from '@kb-labs/agent-contracts';\nimport { loadTrace, formatTraceLoadError } from '@kb-labs/agent-tracing';\nimport { normalizeTraceEvents } from './trace-event-normalizer.js';\n\ntype TraceIterationInput = {\n taskId?: string;\n 'task-id'?: string;\n iteration?: number;\n json?: boolean;\n};\n\ntype TraceIterationResult = { exitCode: number; response?: TraceCommandResponse };\n\nexport default defineCommand({\n id: 'trace:iteration',\n description: 'View all events for a specific iteration',\n\n handler: {\n async execute(ctx: PluginContextV3, input: TraceIterationInput): Promise<TraceIterationResult> {\n const logger = useLogger();\n const flags = (input as any).flags ?? input;\n const taskId = (flags['task-id'] ?? flags.taskId) as string | undefined;\n const iteration = typeof flags.iteration === 'string' ? parseInt(flags.iteration, 10) : (flags.iteration as number | undefined);\n\n if (iteration === undefined || iteration < 1) {\n const err = error('INVALID_ITERATION', 'Missing or invalid --iteration flag (must be >= 1)');\n ctx.ui.write(JSON.stringify(err, null, 2) + '\\n');\n return { exitCode: 1, response: err };\n }\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 normalized = normalizeTraceEvents(loaded.events);\n const filtered = normalized.filter((e) => e.iteration === iteration).map((e) => e.raw);\n\n if (filtered.length === 0) {\n const err = error('INVALID_ITERATION', `No events found for iteration ${iteration}`);\n ctx.ui.write(JSON.stringify(err, null, 2) + '\\n');\n return { exitCode: 1, response: err };\n }\n\n // Calculate summary\n const summary = calculateIterationSummary(filtered);\n\n // Build response\n const response: TraceCommandResponse<IterationResponse> = {\n success: true,\n command: 'trace:iteration',\n taskId: taskId ?? '',\n data: {\n taskId: taskId ?? '',\n iteration,\n events: filtered,\n summary,\n },\n summary: {\n message: `Iteration ${iteration}: ${summary.eventCount} events, ${summary.llmCalls} LLM calls, ${summary.toolCalls} tool calls`,\n severity: summary.errors > 0 ? 'warning' : 'info',\n actionable: summary.errors > 0,\n },\n };\n\n // Output\n if (flags.json) {\n ctx.ui.write(JSON.stringify(response, null, 2) + '\\n');\n } else {\n printHumanReadable(ctx, iteration, filtered, summary);\n }\n\n return { exitCode: 0, response };\n } catch (err) {\n logger.error('trace:iteration 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 iteration summary\n */\nfunction calculateIterationSummary(events: DetailedTraceEntry[]): IterationResponse['summary'] {\n const llmEvents = events.filter((e) => {\n const type = String((e as { type?: unknown }).type ?? '');\n return type === 'llm:start' || type === 'llm:call' || type === 'llm_call';\n });\n const toolEvents = events.filter((e) => {\n const type = String((e as { type?: unknown }).type ?? '');\n return type === 'tool:start' || type === 'tool:execution' || type === 'tool_call';\n });\n const errorEvents = events.filter((e) => {\n const type = String((e as { type?: unknown }).type ?? '');\n return type === 'error:captured' || type === 'agent:error' || type === 'tool:error';\n });\n\n // Calculate duration (from first to last event timestamp)\n const timestamps = events.map((e) => new Date(e.timestamp).getTime());\n const durationMs = timestamps.length > 0 ? Math.max(...timestamps) - Math.min(...timestamps) : 0;\n\n return {\n eventCount: events.length,\n llmCalls: llmEvents.length,\n toolCalls: toolEvents.length,\n errors: errorEvents.length,\n durationMs,\n };\n}\n\n/**\n * Print human-readable output\n */\nfunction printHumanReadable(\n ctx: PluginContextV3,\n iteration: number,\n events: DetailedTraceEntry[],\n summary: IterationResponse['summary']\n): void {\n ctx.ui.write('\\n');\n ctx.ui.write(`🔄 Iteration ${iteration}\\n`);\n ctx.ui.write('\\n');\n\n ctx.ui.write('📊 Summary:\\n');\n ctx.ui.write(` Total events: ${summary.eventCount}\\n`);\n ctx.ui.write(` LLM calls: ${summary.llmCalls}\\n`);\n ctx.ui.write(` Tool calls: ${summary.toolCalls}\\n`);\n ctx.ui.write(` Errors: ${summary.errors}\\n`);\n ctx.ui.write(` Duration: ${summary.durationMs}ms\\n`);\n ctx.ui.write('\\n');\n\n ctx.ui.write('📝 Events Timeline:\\n');\n ctx.ui.write('\\n');\n\n // Group events by type for better readability\n const grouped = new Map<string, DetailedTraceEntry[]>();\n for (const event of events) {\n const existing = grouped.get(event.type) || [];\n existing.push(event);\n grouped.set(event.type, existing);\n }\n\n // Show event counts\n for (const [type, typeEvents] of grouped) {\n ctx.ui.write(` ${type}: ${typeEvents.length}\\n`);\n\n // Show details for important events\n if ((type === 'llm:end' || type === 'llm:call') && typeEvents.length > 0) {\n const llmEvent = typeEvents[0] as any;\n const tokens = llmEvent?.data?.tokensUsed ?? llmEvent?.response?.usage?.totalTokens ?? 0;\n ctx.ui.write(` Tokens: ${tokens}\\n`);\n } else if (type === 'tool:end' || type === 'tool:start' || type === 'tool:execution') {\n const toolNames = (typeEvents as any[]).map((e) => e?.data?.toolName || e?.tool?.name || 'unknown');\n ctx.ui.write(` Tools: ${[...new Set(toolNames)].join(', ')}\\n`);\n } else if (type === 'error:captured' && typeEvents.length > 0) {\n const errorEvent = typeEvents[0] as any;\n ctx.ui.write(` ⚠️ ${errorEvent.error.message.substring(0, 100)}\\n`);\n }\n }\n\n ctx.ui.write('\\n');\n ctx.ui.write('Use --json flag to see full event details\\n');\n}\n\n/**\n * Create error response\n */\nfunction error(code: TraceErrorCode, message: string): TraceCommandResponse {\n return {\n success: false,\n command: 'trace:iteration',\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":["../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/agents/entry/src/cli/commands/trace-event-normalizer.ts","../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/agents/entry/src/cli/commands/trace-iteration.ts"],"names":[],"mappings":"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","file":"trace-iteration.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 as any).type ?? '');\n const data = getEventData(raw);\n\n const explicitIteration = asNumber((raw as any).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 any).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:iteration - View specific iteration details (AI-friendly)\n *\n * Usage:\n * pnpm kb agent:trace:iteration <taskId> --iteration=3\n * pnpm kb agent:trace:iteration <taskId> --iteration=5 --json\n */\n\nimport { defineCommand, useLogger, type PluginContextV3 } from '@kb-labs/sdk';\nimport type {\n TraceCommandResponse,\n IterationResponse,\n TraceErrorCode,\n} from '@kb-labs/agent-contracts';\nimport type { DetailedTraceEntry } from '@kb-labs/agent-contracts';\nimport { loadTrace, formatTraceLoadError } from '@kb-labs/agent-tracing';\nimport { normalizeTraceEvents } from './trace-event-normalizer.js';\n\ntype TraceIterationInput = {\n taskId?: string;\n 'task-id'?: string;\n iteration?: number;\n json?: boolean;\n};\n\ntype TraceIterationResult = { exitCode: number; response?: TraceCommandResponse };\n\nexport default defineCommand({\n id: 'trace:iteration',\n description: 'View all events for a specific iteration',\n\n handler: {\n async execute(ctx: PluginContextV3, input: TraceIterationInput): Promise<TraceIterationResult> {\n const logger = useLogger();\n const flags = (input as any).flags ?? input;\n const taskId = (flags['task-id'] ?? flags.taskId) as string | undefined;\n const iteration = typeof flags.iteration === 'string' ? parseInt(flags.iteration, 10) : (flags.iteration as number | undefined);\n\n if (iteration === undefined || iteration < 1) {\n const err = error('INVALID_ITERATION', 'Missing or invalid --iteration flag (must be >= 1)');\n ctx.ui.write(JSON.stringify(err, null, 2) + '\\n');\n return { exitCode: 1, response: err };\n }\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 normalized = normalizeTraceEvents(loaded.events);\n const filtered = normalized.filter((e) => e.iteration === iteration).map((e) => e.raw);\n\n if (filtered.length === 0) {\n const err = error('INVALID_ITERATION', `No events found for iteration ${iteration}`);\n ctx.ui.write(JSON.stringify(err, null, 2) + '\\n');\n return { exitCode: 1, response: err };\n }\n\n // Calculate summary\n const summary = calculateIterationSummary(filtered);\n\n // Build response\n const response: TraceCommandResponse<IterationResponse> = {\n success: true,\n command: 'trace:iteration',\n taskId: taskId ?? '',\n data: {\n taskId: taskId ?? '',\n iteration,\n events: filtered,\n summary,\n },\n summary: {\n message: `Iteration ${iteration}: ${summary.eventCount} events, ${summary.llmCalls} LLM calls, ${summary.toolCalls} tool calls`,\n severity: summary.errors > 0 ? 'warning' : 'info',\n actionable: summary.errors > 0,\n },\n };\n\n // Output\n if (flags.json) {\n ctx.ui.write(JSON.stringify(response, null, 2) + '\\n');\n } else {\n printHumanReadable(ctx, iteration, filtered, summary);\n }\n\n return { exitCode: 0, response };\n } catch (err) {\n logger.error('trace:iteration 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 iteration summary\n */\nfunction calculateIterationSummary(events: DetailedTraceEntry[]): IterationResponse['summary'] {\n const llmEvents = events.filter((e) => {\n const type = String((e as { type?: unknown }).type ?? '');\n return type === 'llm:start' || type === 'llm:call' || type === 'llm_call';\n });\n const toolEvents = events.filter((e) => {\n const type = String((e as { type?: unknown }).type ?? '');\n return type === 'tool:start' || type === 'tool:execution' || type === 'tool_call';\n });\n const errorEvents = events.filter((e) => {\n const type = String((e as { type?: unknown }).type ?? '');\n return type === 'error:captured' || type === 'agent:error' || type === 'tool:error';\n });\n\n // Calculate duration (from first to last event timestamp)\n const timestamps = events.map((e) => new Date(e.timestamp).getTime());\n const durationMs = timestamps.length > 0 ? Math.max(...timestamps) - Math.min(...timestamps) : 0;\n\n return {\n eventCount: events.length,\n llmCalls: llmEvents.length,\n toolCalls: toolEvents.length,\n errors: errorEvents.length,\n durationMs,\n };\n}\n\n/**\n * Print human-readable output\n */\nfunction printHumanReadable(\n ctx: PluginContextV3,\n iteration: number,\n events: DetailedTraceEntry[],\n summary: IterationResponse['summary']\n): void {\n ctx.ui.write('\\n');\n ctx.ui.write(`🔄 Iteration ${iteration}\\n`);\n ctx.ui.write('\\n');\n\n ctx.ui.write('📊 Summary:\\n');\n ctx.ui.write(` Total events: ${summary.eventCount}\\n`);\n ctx.ui.write(` LLM calls: ${summary.llmCalls}\\n`);\n ctx.ui.write(` Tool calls: ${summary.toolCalls}\\n`);\n ctx.ui.write(` Errors: ${summary.errors}\\n`);\n ctx.ui.write(` Duration: ${summary.durationMs}ms\\n`);\n ctx.ui.write('\\n');\n\n ctx.ui.write('📝 Events Timeline:\\n');\n ctx.ui.write('\\n');\n\n // Group events by type for better readability\n const grouped = new Map<string, DetailedTraceEntry[]>();\n for (const event of events) {\n const existing = grouped.get(event.type) || [];\n existing.push(event);\n grouped.set(event.type, existing);\n }\n\n // Show event counts\n for (const [type, typeEvents] of grouped) {\n ctx.ui.write(` ${type}: ${typeEvents.length}\\n`);\n\n // Show details for important events\n if ((type === 'llm:end' || type === 'llm:call') && typeEvents.length > 0) {\n const llmEvent = typeEvents[0] as any;\n const tokens = llmEvent?.data?.tokensUsed ?? llmEvent?.response?.usage?.totalTokens ?? 0;\n ctx.ui.write(` Tokens: ${tokens}\\n`);\n } else if (type === 'tool:end' || type === 'tool:start' || type === 'tool:execution') {\n const toolNames = (typeEvents as any[]).map((e) => e?.data?.toolName || e?.tool?.name || 'unknown');\n ctx.ui.write(` Tools: ${[...new Set(toolNames)].join(', ')}\\n`);\n } else if (type === 'error:captured' && typeEvents.length > 0) {\n const errorEvent = typeEvents[0] as any;\n ctx.ui.write(` ⚠️ ${errorEvent.error.message.substring(0, 100)}\\n`);\n }\n }\n\n ctx.ui.write('\\n');\n ctx.ui.write('Use --json flag to see full event details\\n');\n}\n\n/**\n * Create error response\n */\nfunction error(code: TraceErrorCode, message: string): TraceCommandResponse {\n return {\n success: false,\n command: 'trace:iteration',\n taskId: '',\n error: {\n code,\n message,\n },\n summary: {\n message,\n severity: 'error',\n actionable: true,\n },\n };\n}\n"]}
|
|
@@ -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 as any).type ?? '');\n const data = getEventData(raw);\n\n const explicitIteration = asNumber((raw as any).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 any).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\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 = (input as any).flags ?? 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 any).response?.usage?.inputTokens || 0;\n return sum + tokens;\n }, 0);\n\n const outputTokens = llmEndEvents.reduce((sum, e) => {\n const tokens = (e.raw as any).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 any).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 any).tool?.name || (tool.data.toolName as string | undefined) || 'unknown';\n toolCounts[toolName] = (toolCounts[toolName] || 0) + 1;\n\n const success = (tool.raw as any).output?.success ?? tool.data.success ?? 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":["../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/agents/entry/src/cli/commands/trace-event-normalizer.ts","../../../../../../../../Users/kirillbaranov/Desktop/kb-labs-workspace/plugins/agents/entry/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 as any).type ?? '');\n const data = getEventData(raw);\n\n const explicitIteration = asNumber((raw as any).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 any).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\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 = (input as any).flags ?? 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 any).response?.usage?.inputTokens || 0;\n return sum + tokens;\n }, 0);\n\n const outputTokens = llmEndEvents.reduce((sum, e) => {\n const tokens = (e.raw as any).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 any).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 any).tool?.name || (tool.data.toolName as string | undefined) || 'unknown';\n toolCounts[toolName] = (toolCounts[toolName] || 0) + 1;\n\n const success = (tool.raw as any).output?.success ?? tool.data.success ?? 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.js
CHANGED
|
@@ -100,7 +100,7 @@ var manifest = {
|
|
|
100
100
|
cli: {
|
|
101
101
|
commands: [
|
|
102
102
|
{
|
|
103
|
-
id: "
|
|
103
|
+
id: "run",
|
|
104
104
|
group: "agent",
|
|
105
105
|
describe: "Run agent with specified mode (execute/plan/edit/debug)",
|
|
106
106
|
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.",
|
|
@@ -119,7 +119,7 @@ var manifest = {
|
|
|
119
119
|
},
|
|
120
120
|
// Trace debugging commands (AI-friendly)
|
|
121
121
|
{
|
|
122
|
-
id: "
|
|
122
|
+
id: "trace:stats",
|
|
123
123
|
group: "agent",
|
|
124
124
|
describe: "Show trace statistics with cost and performance metrics",
|
|
125
125
|
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.",
|
|
@@ -135,7 +135,7 @@ var manifest = {
|
|
|
135
135
|
]
|
|
136
136
|
},
|
|
137
137
|
{
|
|
138
|
-
id: "
|
|
138
|
+
id: "trace:filter",
|
|
139
139
|
group: "agent",
|
|
140
140
|
describe: "Filter trace events by type for debugging",
|
|
141
141
|
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.",
|
|
@@ -152,7 +152,7 @@ var manifest = {
|
|
|
152
152
|
]
|
|
153
153
|
},
|
|
154
154
|
{
|
|
155
|
-
id: "
|
|
155
|
+
id: "trace:iteration",
|
|
156
156
|
group: "agent",
|
|
157
157
|
describe: "View all events for a specific iteration",
|
|
158
158
|
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.",
|
|
@@ -169,7 +169,7 @@ var manifest = {
|
|
|
169
169
|
]
|
|
170
170
|
},
|
|
171
171
|
{
|
|
172
|
-
id: "
|
|
172
|
+
id: "trace:context",
|
|
173
173
|
group: "agent",
|
|
174
174
|
describe: "View what the LLM sees at each iteration \u2014 context window, truncations, responses",
|
|
175
175
|
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.",
|
|
@@ -187,7 +187,7 @@ var manifest = {
|
|
|
187
187
|
]
|
|
188
188
|
},
|
|
189
189
|
{
|
|
190
|
-
id: "
|
|
190
|
+
id: "trace:diagnose",
|
|
191
191
|
group: "agent",
|
|
192
192
|
describe: 'Quick diagnostic analysis \u2014 answers "what went wrong?" in one command',
|
|
193
193
|
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.",
|
|
@@ -203,7 +203,7 @@ var manifest = {
|
|
|
203
203
|
]
|
|
204
204
|
},
|
|
205
205
|
{
|
|
206
|
-
id: "
|
|
206
|
+
id: "quality:report",
|
|
207
207
|
group: "agent",
|
|
208
208
|
describe: "Show quality control report for recent agent runs",
|
|
209
209
|
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.",
|
|
@@ -224,7 +224,7 @@ var manifest = {
|
|
|
224
224
|
},
|
|
225
225
|
// File change history commands
|
|
226
226
|
{
|
|
227
|
-
id: "
|
|
227
|
+
id: "history",
|
|
228
228
|
group: "agent",
|
|
229
229
|
describe: "Show file change history for agent sessions",
|
|
230
230
|
longDescription: "View file changes made by agents during execution. Filter by session, file, or agent. Shows timestamps, operations, and change metadata.",
|
|
@@ -244,7 +244,7 @@ var manifest = {
|
|
|
244
244
|
]
|
|
245
245
|
},
|
|
246
246
|
{
|
|
247
|
-
id: "
|
|
247
|
+
id: "diff",
|
|
248
248
|
group: "agent",
|
|
249
249
|
describe: "Show diff for specific file change",
|
|
250
250
|
longDescription: "Display line-by-line diff for a specific file change. Shows additions, deletions, and modifications with context.",
|
|
@@ -260,7 +260,7 @@ var manifest = {
|
|
|
260
260
|
]
|
|
261
261
|
},
|
|
262
262
|
{
|
|
263
|
-
id: "
|
|
263
|
+
id: "rollback",
|
|
264
264
|
group: "agent",
|
|
265
265
|
describe: "Rollback file changes made by agents",
|
|
266
266
|
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.",
|