kagent-ts 0.1.2 → 0.1.4
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/core/agent.d.ts +61 -13
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +55 -14
- package/dist/core/agent.js.map +1 -1
- package/dist/core/hooks.d.ts +8 -2
- package/dist/core/hooks.d.ts.map +1 -1
- package/dist/core/plan-solve-agent.d.ts.map +1 -1
- package/dist/core/plan-solve-agent.js +40 -17
- package/dist/core/plan-solve-agent.js.map +1 -1
- package/dist/core/react-agent.d.ts.map +1 -1
- package/dist/core/react-agent.js +30 -13
- package/dist/core/react-agent.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +8 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/mcp-client-manager.d.ts +64 -0
- package/dist/mcp/mcp-client-manager.d.ts.map +1 -0
- package/dist/mcp/mcp-client-manager.js +224 -0
- package/dist/mcp/mcp-client-manager.js.map +1 -0
- package/dist/mcp/mcp-types.d.ts +58 -0
- package/dist/mcp/mcp-types.d.ts.map +1 -0
- package/dist/mcp/mcp-types.js +20 -0
- package/dist/mcp/mcp-types.js.map +1 -0
- package/dist/skills/file-skill-loader.d.ts +5 -14
- package/dist/skills/file-skill-loader.d.ts.map +1 -1
- package/dist/skills/file-skill-loader.js +28 -146
- package/dist/skills/file-skill-loader.js.map +1 -1
- package/dist/skills/skill-manager.d.ts +6 -23
- package/dist/skills/skill-manager.d.ts.map +1 -1
- package/dist/skills/skill-manager.js +9 -53
- package/dist/skills/skill-manager.js.map +1 -1
- package/dist/skills/types.d.ts +1 -8
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/trace/index.d.ts +4 -0
- package/dist/trace/index.d.ts.map +1 -0
- package/dist/trace/index.js +6 -0
- package/dist/trace/index.js.map +1 -0
- package/dist/trace/trace-logger.d.ts +92 -0
- package/dist/trace/trace-logger.d.ts.map +1 -0
- package/dist/trace/trace-logger.js +463 -0
- package/dist/trace/trace-logger.js.map +1 -0
- package/dist/trace/types.d.ts +20 -0
- package/dist/trace/types.d.ts.map +1 -0
- package/dist/trace/types.js +3 -0
- package/dist/trace/types.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { AgentHooks } from "../core/hooks";
|
|
2
|
+
import { LLMResponse } from "../llm/interface";
|
|
3
|
+
import { LLMNetworkError } from "../llm/openai-provider";
|
|
4
|
+
import { MessageData } from "../messages/types";
|
|
5
|
+
import { Tool } from "../tools/types";
|
|
6
|
+
import { AgentTraceEvent } from "./types";
|
|
7
|
+
/**
|
|
8
|
+
* Configuration for the TraceLogger.
|
|
9
|
+
*/
|
|
10
|
+
export interface TraceLoggerConfig {
|
|
11
|
+
/**
|
|
12
|
+
* Session identifier used in the trace file name.
|
|
13
|
+
* Defaults to `trace-<timestamp>-<random>`.
|
|
14
|
+
*/
|
|
15
|
+
sessionId?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Output directory for trace HTML files.
|
|
18
|
+
* Defaults to `.kagent-traces/`.
|
|
19
|
+
*/
|
|
20
|
+
outputDir?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Optional agent label shown in the trace report header.
|
|
23
|
+
*/
|
|
24
|
+
agentLabel?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Optional model name shown in the trace report header.
|
|
27
|
+
*/
|
|
28
|
+
modelName?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* TraceLogger — records the agent's execution trajectory and generates
|
|
32
|
+
* a self-contained HTML report per session.
|
|
33
|
+
*
|
|
34
|
+
* Implements AgentHooks so it can be plugged directly into an Agent:
|
|
35
|
+
*
|
|
36
|
+
* ```ts
|
|
37
|
+
* const traceLogger = new TraceLogger({ sessionId: "my-session" });
|
|
38
|
+
* const agent = new ReActAgent({
|
|
39
|
+
* llm: provider,
|
|
40
|
+
* hooks: traceLogger, // <-- hooks in as the observer
|
|
41
|
+
* });
|
|
42
|
+
* const answer = await agent.run("...");
|
|
43
|
+
* traceLogger.flush(); // writes .kagent-traces/my-session.html
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* The HTML report is a standalone file with no external dependencies —
|
|
47
|
+
* all CSS and JS are inlined. It shows a vertical timeline of all events
|
|
48
|
+
* (LLM calls, tool executions, thoughts, errors) with expandable details
|
|
49
|
+
* for each.
|
|
50
|
+
*/
|
|
51
|
+
export declare class TraceLogger implements AgentHooks {
|
|
52
|
+
private events;
|
|
53
|
+
private eventId;
|
|
54
|
+
private sessionId;
|
|
55
|
+
private outputDir;
|
|
56
|
+
private agentLabel;
|
|
57
|
+
private modelName;
|
|
58
|
+
private startTime;
|
|
59
|
+
constructor(config?: TraceLoggerConfig);
|
|
60
|
+
/**
|
|
61
|
+
* Get the session identifier for this trace.
|
|
62
|
+
*/
|
|
63
|
+
getSessionId(): string;
|
|
64
|
+
/**
|
|
65
|
+
* Get all recorded events.
|
|
66
|
+
*/
|
|
67
|
+
getEvents(): AgentTraceEvent[];
|
|
68
|
+
/**
|
|
69
|
+
* Flush the trace to an HTML file on disk.
|
|
70
|
+
* Creates the output directory if it doesn't exist.
|
|
71
|
+
*
|
|
72
|
+
* @returns The absolute path to the generated HTML file.
|
|
73
|
+
*/
|
|
74
|
+
flush(): string;
|
|
75
|
+
onLLMStart(messages: MessageData[], tools: Tool[]): void;
|
|
76
|
+
onLLMEnd(response: LLMResponse): void;
|
|
77
|
+
onLLMError(error: LLMNetworkError): void;
|
|
78
|
+
onToolStart(toolName: string, args: Record<string, unknown>): void;
|
|
79
|
+
onToolEnd(toolName: string, result: string): void;
|
|
80
|
+
onToolError(toolName: string, error: string): void;
|
|
81
|
+
onThought(thought: string): void;
|
|
82
|
+
onPlanCreated(plan: string[]): void;
|
|
83
|
+
onPlanRevised(plan: string[]): void;
|
|
84
|
+
onFinish(answer: string): void;
|
|
85
|
+
private addEvent;
|
|
86
|
+
private generateHTML;
|
|
87
|
+
private renderEventCard;
|
|
88
|
+
private eventIcon;
|
|
89
|
+
private escapeHtml;
|
|
90
|
+
private syntaxHighlight;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=trace-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-logger.d.ts","sourceRoot":"","sources":["../../src/trace/trace-logger.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,eAAe,EAAuB,MAAM,SAAS,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,WAAY,YAAW,UAAU;IAC5C,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,CAAC,EAAE,iBAAiB;IAatC;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,SAAS,IAAI,eAAe,EAAE;IAI9B;;;;;OAKG;IACH,KAAK,IAAI,MAAM;IAWf,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAkBxD,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAQrC,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAQxC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAOlE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQjD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOlD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIhC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAInC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAInC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO9B,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,YAAY;IAgJpB,OAAO,CAAC,eAAe;IAsHvB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,eAAe;CAkBxB"}
|
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TraceLogger = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
/**
|
|
40
|
+
* TraceLogger — records the agent's execution trajectory and generates
|
|
41
|
+
* a self-contained HTML report per session.
|
|
42
|
+
*
|
|
43
|
+
* Implements AgentHooks so it can be plugged directly into an Agent:
|
|
44
|
+
*
|
|
45
|
+
* ```ts
|
|
46
|
+
* const traceLogger = new TraceLogger({ sessionId: "my-session" });
|
|
47
|
+
* const agent = new ReActAgent({
|
|
48
|
+
* llm: provider,
|
|
49
|
+
* hooks: traceLogger, // <-- hooks in as the observer
|
|
50
|
+
* });
|
|
51
|
+
* const answer = await agent.run("...");
|
|
52
|
+
* traceLogger.flush(); // writes .kagent-traces/my-session.html
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* The HTML report is a standalone file with no external dependencies —
|
|
56
|
+
* all CSS and JS are inlined. It shows a vertical timeline of all events
|
|
57
|
+
* (LLM calls, tool executions, thoughts, errors) with expandable details
|
|
58
|
+
* for each.
|
|
59
|
+
*/
|
|
60
|
+
class TraceLogger {
|
|
61
|
+
events = [];
|
|
62
|
+
eventId = 0;
|
|
63
|
+
sessionId;
|
|
64
|
+
outputDir;
|
|
65
|
+
agentLabel;
|
|
66
|
+
modelName;
|
|
67
|
+
startTime;
|
|
68
|
+
constructor(config) {
|
|
69
|
+
const ts = Date.now();
|
|
70
|
+
const rand = Math.random().toString(36).slice(2, 6);
|
|
71
|
+
this.sessionId =
|
|
72
|
+
config?.sessionId ?? `trace-${ts}-${rand}`;
|
|
73
|
+
this.outputDir = path.resolve(config?.outputDir ?? ".kagent-traces");
|
|
74
|
+
this.agentLabel = config?.agentLabel ?? "Agent";
|
|
75
|
+
this.modelName = config?.modelName ?? "unknown";
|
|
76
|
+
this.startTime = ts;
|
|
77
|
+
}
|
|
78
|
+
// ─── Public API ──────────────────────────────────────────────────────────
|
|
79
|
+
/**
|
|
80
|
+
* Get the session identifier for this trace.
|
|
81
|
+
*/
|
|
82
|
+
getSessionId() {
|
|
83
|
+
return this.sessionId;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get all recorded events.
|
|
87
|
+
*/
|
|
88
|
+
getEvents() {
|
|
89
|
+
return [...this.events];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Flush the trace to an HTML file on disk.
|
|
93
|
+
* Creates the output directory if it doesn't exist.
|
|
94
|
+
*
|
|
95
|
+
* @returns The absolute path to the generated HTML file.
|
|
96
|
+
*/
|
|
97
|
+
flush() {
|
|
98
|
+
const html = this.generateHTML();
|
|
99
|
+
fs.mkdirSync(this.outputDir, { recursive: true });
|
|
100
|
+
const filePath = path.join(this.outputDir, `${this.sessionId}.html`);
|
|
101
|
+
fs.writeFileSync(filePath, html, "utf-8");
|
|
102
|
+
console.log(`[Trace] Saved session trace → ${filePath}`);
|
|
103
|
+
return filePath;
|
|
104
|
+
}
|
|
105
|
+
// ─── AgentHooks Implementation ─────────────────────────────────────────
|
|
106
|
+
onLLMStart(messages, tools) {
|
|
107
|
+
this.addEvent("llm_start", "LLM Call", {
|
|
108
|
+
messageCount: messages.length,
|
|
109
|
+
toolCount: tools.length,
|
|
110
|
+
messages: messages.map((m) => ({
|
|
111
|
+
role: m.role,
|
|
112
|
+
content: m.content,
|
|
113
|
+
tool_calls: m.tool_calls,
|
|
114
|
+
tool_call_id: m.tool_call_id,
|
|
115
|
+
name: m.name,
|
|
116
|
+
})),
|
|
117
|
+
tools: tools.map((t) => ({
|
|
118
|
+
name: t.name,
|
|
119
|
+
description: t.description,
|
|
120
|
+
})),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
onLLMEnd(response) {
|
|
124
|
+
this.addEvent("llm_end", "LLM Response", {
|
|
125
|
+
content: response.content,
|
|
126
|
+
tool_calls: response.tool_calls,
|
|
127
|
+
usage: response.usage,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
onLLMError(error) {
|
|
131
|
+
this.addEvent("llm_error", "LLM Error", {
|
|
132
|
+
cause: error.cause,
|
|
133
|
+
message: error.message,
|
|
134
|
+
});
|
|
135
|
+
this.flush();
|
|
136
|
+
}
|
|
137
|
+
onToolStart(toolName, args) {
|
|
138
|
+
this.addEvent("tool_start", `Tool: ${toolName}`, {
|
|
139
|
+
toolName,
|
|
140
|
+
args,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
onToolEnd(toolName, result) {
|
|
144
|
+
this.addEvent("tool_end", `Tool Result: ${toolName}`, {
|
|
145
|
+
toolName,
|
|
146
|
+
result: result.length > 2000 ? result.slice(0, 2000) + "\n... (truncated)" : result,
|
|
147
|
+
resultLength: result.length,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
onToolError(toolName, error) {
|
|
151
|
+
this.addEvent("tool_error", `Tool Error: ${toolName}`, {
|
|
152
|
+
toolName,
|
|
153
|
+
error,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
onThought(thought) {
|
|
157
|
+
this.addEvent("thought", "Thought", { thought });
|
|
158
|
+
}
|
|
159
|
+
onPlanCreated(plan) {
|
|
160
|
+
this.addEvent("plan_created", "Plan Created", { plan });
|
|
161
|
+
}
|
|
162
|
+
onPlanRevised(plan) {
|
|
163
|
+
this.addEvent("plan_revised", "Plan Revised", { plan });
|
|
164
|
+
}
|
|
165
|
+
onFinish(answer) {
|
|
166
|
+
this.addEvent("finish", "Final Answer", { answer });
|
|
167
|
+
this.flush();
|
|
168
|
+
}
|
|
169
|
+
// ─── Private Helpers ─────────────────────────────────────────────────────
|
|
170
|
+
addEvent(type, label, data) {
|
|
171
|
+
this.events.push({
|
|
172
|
+
id: ++this.eventId,
|
|
173
|
+
timestamp: new Date().toISOString(),
|
|
174
|
+
type,
|
|
175
|
+
label,
|
|
176
|
+
data,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
// ─── HTML Generation ────────────────────────────────────────────────────
|
|
180
|
+
generateHTML() {
|
|
181
|
+
const duration = ((Date.now() - this.startTime) / 1000).toFixed(1);
|
|
182
|
+
const eventCards = this.events.map((e) => this.renderEventCard(e)).join("\n");
|
|
183
|
+
return `<!DOCTYPE html>
|
|
184
|
+
<html lang="en">
|
|
185
|
+
<head>
|
|
186
|
+
<meta charset="UTF-8">
|
|
187
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
188
|
+
<title>Session Trace — ${this.sessionId}</title>
|
|
189
|
+
<style>
|
|
190
|
+
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
191
|
+
body {
|
|
192
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
193
|
+
background: #0d1117; color: #c9d1d9; line-height: 1.6; padding: 24px;
|
|
194
|
+
}
|
|
195
|
+
.container { max-width: 960px; margin: 0 auto; }
|
|
196
|
+
|
|
197
|
+
/* ── Header ── */
|
|
198
|
+
.header {
|
|
199
|
+
background: linear-gradient(135deg, #161b22, #1c2333);
|
|
200
|
+
border: 1px solid #30363d; border-radius: 12px; padding: 24px 28px;
|
|
201
|
+
margin-bottom: 28px;
|
|
202
|
+
}
|
|
203
|
+
.header h1 { font-size: 20px; margin-bottom: 8px; display: flex; align-items: center; gap: 10px; }
|
|
204
|
+
.header h1 span { background: #238636; color: #fff; font-size: 11px; padding: 2px 8px; border-radius: 20px; }
|
|
205
|
+
.header .meta { display: flex; flex-wrap: wrap; gap: 16px; font-size: 13px; color: #8b949e; }
|
|
206
|
+
.header .meta .item { display: flex; align-items: center; gap: 4px; }
|
|
207
|
+
.header .meta .item strong { color: #c9d1d9; }
|
|
208
|
+
|
|
209
|
+
/* ── Timeline ── */
|
|
210
|
+
.timeline { position: relative; padding-left: 36px; }
|
|
211
|
+
.timeline::before {
|
|
212
|
+
content: ''; position: absolute; left: 14px; top: 8px; bottom: 8px;
|
|
213
|
+
width: 2px; background: #21262d;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* ── Event Card ── */
|
|
217
|
+
.event { position: relative; margin-bottom: 12px; }
|
|
218
|
+
.event-dot {
|
|
219
|
+
position: absolute; left: -26px; top: 14px; width: 12px; height: 12px;
|
|
220
|
+
border-radius: 50%; border: 2px solid #30363d; background: #0d1117; z-index: 1;
|
|
221
|
+
}
|
|
222
|
+
.event-body {
|
|
223
|
+
background: #161b22; border: 1px solid #30363d; border-radius: 8px;
|
|
224
|
+
padding: 12px 16px; cursor: pointer; transition: border-color .15s;
|
|
225
|
+
}
|
|
226
|
+
.event-body:hover { border-color: #58a6ff; }
|
|
227
|
+
.event-header {
|
|
228
|
+
display: flex; align-items: center; gap: 8px; font-size: 13px;
|
|
229
|
+
user-select: none;
|
|
230
|
+
}
|
|
231
|
+
.event-header .icon { font-size: 16px; flex-shrink: 0; }
|
|
232
|
+
.event-header .label { flex: 1; font-weight: 600; color: #e6edf3; }
|
|
233
|
+
.event-header .time { color: #8b949e; font-size: 11px; font-family: monospace; }
|
|
234
|
+
.event-header .toggle { color: #8b949e; font-size: 12px; }
|
|
235
|
+
.event-detail {
|
|
236
|
+
display: none; margin-top: 10px; border-top: 1px solid #21262d;
|
|
237
|
+
padding-top: 10px; font-size: 13px;
|
|
238
|
+
}
|
|
239
|
+
.event.open .event-detail { display: block; }
|
|
240
|
+
.event.open .toggle { transform: rotate(90deg); }
|
|
241
|
+
|
|
242
|
+
/* ── Detail Blocks ── */
|
|
243
|
+
.detail-section { margin-bottom: 10px; }
|
|
244
|
+
.detail-section:last-child { margin-bottom: 0; }
|
|
245
|
+
.detail-section h4 { font-size: 11px; text-transform: uppercase; color: #8b949e; margin-bottom: 4px; letter-spacing: .5px; }
|
|
246
|
+
pre {
|
|
247
|
+
background: #0d1117; border: 1px solid #21262d; border-radius: 6px;
|
|
248
|
+
padding: 10px 12px; font-family: 'JetBrains Mono', 'Fira Code', monospace;
|
|
249
|
+
font-size: 12px; overflow-x: auto; white-space: pre-wrap; word-break: break-all;
|
|
250
|
+
color: #e6edf3; max-height: 400px; overflow-y: auto;
|
|
251
|
+
}
|
|
252
|
+
pre .key { color: #79c0ff; }
|
|
253
|
+
pre .string { color: #a5d6ff; }
|
|
254
|
+
pre .number { color: #79c0ff; }
|
|
255
|
+
pre .null { color: #d2a8ff; }
|
|
256
|
+
pre .bool { color: #d2a8ff; }
|
|
257
|
+
|
|
258
|
+
/* ── Event-type color accents ── */
|
|
259
|
+
.event-type-llm_start .event-dot { border-color: #58a6ff; background: #1f6feb; }
|
|
260
|
+
.event-type-llm_end .event-dot { border-color: #58a6ff; background: #1f6feb; }
|
|
261
|
+
.event-type-llm_error .event-dot { border-color: #f85149; background: #da3633; }
|
|
262
|
+
.event-type-tool_start .event-dot { border-color: #d29922; background: #9e6a03; }
|
|
263
|
+
.event-type-tool_end .event-dot { border-color: #3fb950; background: #238636; }
|
|
264
|
+
.event-type-tool_error .event-dot { border-color: #f85149; background: #da3633; }
|
|
265
|
+
.event-type-thought .event-dot { border-color: #bc8cff; background: #8957e5; }
|
|
266
|
+
.event-type-plan_created .event-dot { border-color: #79c0ff; background: #1f6feb; }
|
|
267
|
+
.event-type-plan_revised .event-dot { border-color: #f0883e; background: #bd6200; }
|
|
268
|
+
.event-type-finish .event-dot { border-color: #3fb950; background: #238636; }
|
|
269
|
+
|
|
270
|
+
.event-type-llm_error .event-body { border-color: #f85149; }
|
|
271
|
+
.event-type-tool_error .event-body { border-color: #f85149; }
|
|
272
|
+
|
|
273
|
+
/* ── Plan steps list ── */
|
|
274
|
+
ol.plan-steps { padding-left: 20px; margin: 4px 0; }
|
|
275
|
+
ol.plan-steps li { margin-bottom: 2px; color: #e6edf3; }
|
|
276
|
+
|
|
277
|
+
/* ── Tool call args table ── */
|
|
278
|
+
.kv-table { width: 100%; border-collapse: collapse; font-size: 12px; }
|
|
279
|
+
.kv-table th, .kv-table td {
|
|
280
|
+
text-align: left; padding: 4px 8px; border: 1px solid #21262d;
|
|
281
|
+
}
|
|
282
|
+
.kv-table th { background: #0d1117; color: #8b949e; font-weight: 500; white-space: nowrap; }
|
|
283
|
+
|
|
284
|
+
@media (max-width: 640px) {
|
|
285
|
+
body { padding: 12px; }
|
|
286
|
+
.timeline { padding-left: 28px; }
|
|
287
|
+
}
|
|
288
|
+
</style>
|
|
289
|
+
</head>
|
|
290
|
+
<body>
|
|
291
|
+
<div class="container">
|
|
292
|
+
|
|
293
|
+
<div class="header">
|
|
294
|
+
<h1>🤖 <span>TRACE</span> ${this.escapeHtml(this.agentLabel)}</h1>
|
|
295
|
+
<div class="meta">
|
|
296
|
+
<span class="item"><strong>Session:</strong> ${this.escapeHtml(this.sessionId)}</span>
|
|
297
|
+
<span class="item"><strong>Model:</strong> ${this.escapeHtml(this.modelName)}</span>
|
|
298
|
+
<span class="item"><strong>Duration:</strong> ${duration}s</span>
|
|
299
|
+
<span class="item"><strong>Events:</strong> ${this.events.length}</span>
|
|
300
|
+
<span class="item"><strong>Generated:</strong> ${new Date().toLocaleString("zh-CN", { hour12: false })}</span>
|
|
301
|
+
</div>
|
|
302
|
+
</div>
|
|
303
|
+
|
|
304
|
+
<div class="timeline">
|
|
305
|
+
${eventCards}
|
|
306
|
+
</div>
|
|
307
|
+
|
|
308
|
+
</div>
|
|
309
|
+
<script>
|
|
310
|
+
document.querySelectorAll('.event-body').forEach(el => {
|
|
311
|
+
el.addEventListener('click', () => {
|
|
312
|
+
el.parentElement.classList.toggle('open');
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
// Auto-open error events and the final answer
|
|
316
|
+
document.querySelectorAll('.event-type-llm_error, .event-type-tool_error, .event-type-finish, .event-type-plan_created, .event-type-plan_revised')
|
|
317
|
+
.forEach(el => el.classList.add('open'));
|
|
318
|
+
</script>
|
|
319
|
+
</body>
|
|
320
|
+
</html>`;
|
|
321
|
+
}
|
|
322
|
+
renderEventCard(event) {
|
|
323
|
+
const cls = `event event-type-${event.type}`;
|
|
324
|
+
const time = new Date(event.timestamp).toLocaleTimeString("en-US", { hour12: false });
|
|
325
|
+
const icon = this.eventIcon(event.type);
|
|
326
|
+
let detail = "";
|
|
327
|
+
switch (event.type) {
|
|
328
|
+
case "llm_start": {
|
|
329
|
+
const msgs = event.data.messages;
|
|
330
|
+
const tools = event.data.tools;
|
|
331
|
+
detail = `<div class="detail-section">
|
|
332
|
+
<h4>Messages (${msgs?.length ?? 0})</h4>
|
|
333
|
+
<pre>${this.syntaxHighlight(JSON.stringify(msgs ?? [], null, 2))}</pre>
|
|
334
|
+
</div>`;
|
|
335
|
+
if (tools && tools.length > 0) {
|
|
336
|
+
detail += `<div class="detail-section">
|
|
337
|
+
<h4>Available Tools (${tools.length})</h4>
|
|
338
|
+
<pre>${this.syntaxHighlight(JSON.stringify(tools, null, 2))}</pre>
|
|
339
|
+
</div>`;
|
|
340
|
+
}
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
case "llm_end": {
|
|
344
|
+
detail = `<div class="detail-section">
|
|
345
|
+
<h4>Content</h4>
|
|
346
|
+
<pre>${this.escapeHtml(String(event.data.content ?? ""))}</pre>
|
|
347
|
+
</div>`;
|
|
348
|
+
const tc = event.data.tool_calls;
|
|
349
|
+
if (tc && tc.length > 0) {
|
|
350
|
+
detail += `<div class="detail-section">
|
|
351
|
+
<h4>Tool Calls</h4>
|
|
352
|
+
<pre>${this.syntaxHighlight(JSON.stringify(tc, null, 2))}</pre>
|
|
353
|
+
</div>`;
|
|
354
|
+
}
|
|
355
|
+
const usage = event.data.usage;
|
|
356
|
+
if (usage) {
|
|
357
|
+
detail += `<div class="detail-section">
|
|
358
|
+
<h4>Usage</h4>
|
|
359
|
+
<table class="kv-table"><tr>
|
|
360
|
+
<th>Prompt</th><th>Completion</th><th>Total</th>
|
|
361
|
+
</tr><tr>
|
|
362
|
+
<td>${usage.prompt_tokens ?? "—"}</td>
|
|
363
|
+
<td>${usage.completion_tokens ?? "—"}</td>
|
|
364
|
+
<td>${usage.total_tokens ?? "—"}</td>
|
|
365
|
+
</tr></table>
|
|
366
|
+
</div>`;
|
|
367
|
+
}
|
|
368
|
+
break;
|
|
369
|
+
}
|
|
370
|
+
case "llm_error": {
|
|
371
|
+
detail = `<div class="detail-section">
|
|
372
|
+
<h4>Error (${this.escapeHtml(String(event.data.cause ?? ""))})</h4>
|
|
373
|
+
<pre>${this.escapeHtml(String(event.data.message ?? ""))}</pre>
|
|
374
|
+
</div>`;
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
377
|
+
case "tool_start": {
|
|
378
|
+
const tblRows = Object.entries(event.data.args ?? {})
|
|
379
|
+
.map(([k, v]) => `<tr><th>${this.escapeHtml(k)}</th><td><pre style="margin:0;padding:4px;background:none;border:none;max-height:200px">${this.escapeHtml(JSON.stringify(v, null, 2))}</pre></td></tr>`)
|
|
380
|
+
.join("");
|
|
381
|
+
detail = `<div class="detail-section">
|
|
382
|
+
<h4>Arguments</h4>
|
|
383
|
+
<table class="kv-table">${tblRows}</table>
|
|
384
|
+
</div>`;
|
|
385
|
+
break;
|
|
386
|
+
}
|
|
387
|
+
case "tool_end": {
|
|
388
|
+
detail = `<div class="detail-section">
|
|
389
|
+
<h4>Result (${event.data.resultLength} chars)</h4>
|
|
390
|
+
<pre>${this.escapeHtml(String(event.data.result ?? ""))}</pre>
|
|
391
|
+
</div>`;
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
394
|
+
case "tool_error": {
|
|
395
|
+
detail = `<div class="detail-section">
|
|
396
|
+
<h4>Error</h4>
|
|
397
|
+
<pre>${this.escapeHtml(String(event.data.error ?? ""))}</pre>
|
|
398
|
+
</div>`;
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
case "thought": {
|
|
402
|
+
detail = `<div class="detail-section">
|
|
403
|
+
<pre>${this.escapeHtml(String(event.data.thought ?? ""))}</pre>
|
|
404
|
+
</div>`;
|
|
405
|
+
break;
|
|
406
|
+
}
|
|
407
|
+
case "plan_created":
|
|
408
|
+
case "plan_revised": {
|
|
409
|
+
const plan = event.data.plan;
|
|
410
|
+
if (plan && plan.length > 0) {
|
|
411
|
+
detail = `<div class="detail-section">
|
|
412
|
+
<ol class="plan-steps">${plan.map((s) => `<li>${this.escapeHtml(s)}</li>`).join("")}</ol>
|
|
413
|
+
</div>`;
|
|
414
|
+
}
|
|
415
|
+
break;
|
|
416
|
+
}
|
|
417
|
+
case "finish": {
|
|
418
|
+
detail = `<div class="detail-section">
|
|
419
|
+
<pre>${this.escapeHtml(String(event.data.answer ?? ""))}</pre>
|
|
420
|
+
</div>`;
|
|
421
|
+
break;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
return ` <div class="${cls}">
|
|
425
|
+
<div class="event-dot"></div>
|
|
426
|
+
<div class="event-body">
|
|
427
|
+
<div class="event-header">
|
|
428
|
+
<span class="icon">${icon}</span>
|
|
429
|
+
<span class="label">${this.escapeHtml(event.label)}</span>
|
|
430
|
+
<span class="time">${time}</span>
|
|
431
|
+
<span class="toggle">▶</span>
|
|
432
|
+
</div>
|
|
433
|
+
<div class="event-detail">${detail}</div>
|
|
434
|
+
</div>
|
|
435
|
+
</div>`;
|
|
436
|
+
}
|
|
437
|
+
eventIcon(type) {
|
|
438
|
+
switch (type) {
|
|
439
|
+
case "llm_start": return "📤";
|
|
440
|
+
case "llm_end": return "📥";
|
|
441
|
+
case "llm_error": return "❌";
|
|
442
|
+
case "tool_start": return "🔧";
|
|
443
|
+
case "tool_end": return "✅";
|
|
444
|
+
case "tool_error": return "⚠️";
|
|
445
|
+
case "thought": return "💭";
|
|
446
|
+
case "plan_created": return "📋";
|
|
447
|
+
case "plan_revised": return "🔄";
|
|
448
|
+
case "finish": return "🏁";
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
escapeHtml(text) {
|
|
452
|
+
return text
|
|
453
|
+
.replace(/&/g, "&")
|
|
454
|
+
.replace(/</g, "<")
|
|
455
|
+
.replace(/>/g, ">")
|
|
456
|
+
.replace(/"/g, """);
|
|
457
|
+
}
|
|
458
|
+
syntaxHighlight(json) {
|
|
459
|
+
return json.replace(/("(?:[^"\\]|\\.)*")\s*:/g, '<span class="key">$1</span>:').replace(/:\s*("(?:[^"\\]|\\.)*")/g, ': <span class="string">$1</span>').replace(/:\s*(\d+(?:\.\d+)?)/g, ': <span class="number">$1</span>').replace(/:\s*(true|false)/g, ': <span class="bool">$1</span>').replace(/:\s*(null)/g, ': <span class="null">$1</span>');
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
exports.TraceLogger = TraceLogger;
|
|
463
|
+
//# sourceMappingURL=trace-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-logger.js","sourceRoot":"","sources":["../../src/trace/trace-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types of events that can occur during agent execution.
|
|
3
|
+
*/
|
|
4
|
+
export type AgentTraceEventType = "llm_start" | "llm_end" | "llm_error" | "tool_start" | "tool_end" | "tool_error" | "thought" | "plan_created" | "plan_revised" | "finish";
|
|
5
|
+
/**
|
|
6
|
+
* A single trace event in the agent's execution timeline.
|
|
7
|
+
*/
|
|
8
|
+
export interface AgentTraceEvent {
|
|
9
|
+
/** Monotonically increasing event sequence number. */
|
|
10
|
+
id: number;
|
|
11
|
+
/** ISO-8601 timestamp of the event. */
|
|
12
|
+
timestamp: string;
|
|
13
|
+
/** Event type category. */
|
|
14
|
+
type: AgentTraceEventType;
|
|
15
|
+
/** Human-readable event label. */
|
|
16
|
+
label: string;
|
|
17
|
+
/** Event-specific payload. */
|
|
18
|
+
data: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/trace/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B,WAAW,GACX,SAAS,GACT,WAAW,GACX,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,SAAS,GACT,cAAc,GACd,cAAc,GACd,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/trace/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kagent-ts",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "A TypeScript agent framework — ReAct / Plan-Solve agent loops, tool management with circuit breaker, session persistence and resume, file-based progressive skills, and user preference injection.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
47
48
|
"openai": "^4.80.0"
|
|
48
49
|
},
|
|
49
50
|
"optionalDependencies": {
|