vibecheck-agent 1.0.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/agent.d.ts +32 -0
- package/dist/agent.js +431 -0
- package/dist/agent.js.map +1 -0
- package/dist/claude.d.ts +52 -0
- package/dist/claude.js +246 -0
- package/dist/claude.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -0
- package/dist/images.d.ts +19 -0
- package/dist/images.js +101 -0
- package/dist/images.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol.d.ts +163 -0
- package/dist/protocol.js +3 -0
- package/dist/protocol.js.map +1 -0
- package/dist/scheduler.d.ts +33 -0
- package/dist/scheduler.js +132 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/screenshot.d.ts +28 -0
- package/dist/screenshot.js +356 -0
- package/dist/screenshot.js.map +1 -0
- package/dist/security.d.ts +25 -0
- package/dist/security.js +117 -0
- package/dist/security.js.map +1 -0
- package/dist/session.d.ts +4 -0
- package/dist/session.js +55 -0
- package/dist/session.js.map +1 -0
- package/dist/skills.d.ts +25 -0
- package/dist/skills.js +91 -0
- package/dist/skills.js.map +1 -0
- package/package.json +43 -0
- package/src/agent.ts +557 -0
- package/src/claude.ts +322 -0
- package/src/config.ts +61 -0
- package/src/images.ts +122 -0
- package/src/index.ts +73 -0
- package/src/protocol.ts +229 -0
- package/src/scheduler.ts +173 -0
- package/src/screenshot.ts +387 -0
- package/src/security.ts +158 -0
- package/src/session.ts +68 -0
- package/src/skills.ts +122 -0
- package/tsconfig.json +18 -0
package/dist/agent.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare class VibeAgent {
|
|
2
|
+
private apiKey;
|
|
3
|
+
private workDir;
|
|
4
|
+
private serverUrl;
|
|
5
|
+
private ws;
|
|
6
|
+
private claude;
|
|
7
|
+
private security;
|
|
8
|
+
private scheduler;
|
|
9
|
+
private processing;
|
|
10
|
+
/** Scheduled tasks that arrived while a user query was in progress */
|
|
11
|
+
private pendingScheduledTasks;
|
|
12
|
+
private pingInterval;
|
|
13
|
+
private lastProjectPath;
|
|
14
|
+
constructor(apiKey: string, workDir: string, serverUrl?: string, newSession?: boolean);
|
|
15
|
+
/**
|
|
16
|
+
* Connect to WebSocket server and start message loop.
|
|
17
|
+
*/
|
|
18
|
+
connect(): Promise<void>;
|
|
19
|
+
private handleMessage;
|
|
20
|
+
private handleQuery;
|
|
21
|
+
/** Run a scheduled task, respecting the processing guard */
|
|
22
|
+
private runScheduledTask;
|
|
23
|
+
/** Process any tasks that queued up while a query was in progress */
|
|
24
|
+
private drainScheduledQueue;
|
|
25
|
+
private handleInterrupt;
|
|
26
|
+
private generateScreenshot;
|
|
27
|
+
private syncSession;
|
|
28
|
+
private handleSessionInfo;
|
|
29
|
+
private send;
|
|
30
|
+
private startPingLoop;
|
|
31
|
+
private stopPingLoop;
|
|
32
|
+
}
|
package/dist/agent.js
ADDED
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
import WebSocket from "ws";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { ClaudeSession, AbortError } from "./claude.js";
|
|
4
|
+
import { SecurityManager } from "./security.js";
|
|
5
|
+
import { getImagesWithMtime, findNewOrModifiedImages, imageToBase64, extractImagePathsFromText, } from "./images.js";
|
|
6
|
+
import { screenshotProject, findProjectDir, getScreenshotPath, } from "./screenshot.js";
|
|
7
|
+
import { saveSessionId, loadSessionId, clearSessionId, } from "./session.js";
|
|
8
|
+
import { DEFAULT_SERVER, PING_INTERVAL_MS, IMAGE_SCAN_TIMEOUT_MS, MAX_IMAGES_PER_RESPONSE, SCREENSHOT_KEYWORDS, } from "./config.js";
|
|
9
|
+
import { getSkill, getAllSkills } from "./skills.js";
|
|
10
|
+
import { TaskScheduler } from "./scheduler.js";
|
|
11
|
+
export class VibeAgent {
|
|
12
|
+
apiKey;
|
|
13
|
+
workDir;
|
|
14
|
+
serverUrl;
|
|
15
|
+
ws = null;
|
|
16
|
+
claude;
|
|
17
|
+
security;
|
|
18
|
+
scheduler;
|
|
19
|
+
processing = false;
|
|
20
|
+
/** Scheduled tasks that arrived while a user query was in progress */
|
|
21
|
+
pendingScheduledTasks = [];
|
|
22
|
+
pingInterval = null;
|
|
23
|
+
lastProjectPath = null;
|
|
24
|
+
constructor(apiKey, workDir, serverUrl = DEFAULT_SERVER, newSession = false) {
|
|
25
|
+
this.apiKey = apiKey;
|
|
26
|
+
this.workDir = workDir;
|
|
27
|
+
this.serverUrl = serverUrl;
|
|
28
|
+
this.security = new SecurityManager(workDir);
|
|
29
|
+
// Wire security approval → WebSocket
|
|
30
|
+
this.security.onApprovalNeeded = (paths, toolName, input) => {
|
|
31
|
+
this.send({
|
|
32
|
+
type: "approval_required",
|
|
33
|
+
paths,
|
|
34
|
+
message: `${toolName}: ${JSON.stringify(input).slice(0, 200)}`,
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
// Scheduler — fires tasks automatically and sends results via WebSocket
|
|
38
|
+
this.scheduler = new TaskScheduler();
|
|
39
|
+
this.scheduler.onTaskFire = async (task) => {
|
|
40
|
+
if (this.processing) {
|
|
41
|
+
// User query in progress: queue and run after it finishes
|
|
42
|
+
console.log(`[scheduler] User query in progress, queuing task: "${task.message.slice(0, 40)}"`);
|
|
43
|
+
this.pendingScheduledTasks.push(task);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
await this.runScheduledTask(task);
|
|
47
|
+
};
|
|
48
|
+
this.scheduler.start();
|
|
49
|
+
// Session management
|
|
50
|
+
let sessionId = null;
|
|
51
|
+
if (newSession) {
|
|
52
|
+
clearSessionId(workDir);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
sessionId = loadSessionId(workDir);
|
|
56
|
+
}
|
|
57
|
+
this.claude = new ClaudeSession({
|
|
58
|
+
workDir,
|
|
59
|
+
sessionId,
|
|
60
|
+
security: this.security,
|
|
61
|
+
});
|
|
62
|
+
// When SDK provides new session ID
|
|
63
|
+
this.claude.onSessionId = (id) => {
|
|
64
|
+
saveSessionId(workDir, id);
|
|
65
|
+
this.send({
|
|
66
|
+
type: "session_update",
|
|
67
|
+
work_dir: workDir,
|
|
68
|
+
session_id: id,
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
// Forward streaming text chunks to web UI
|
|
72
|
+
this.claude.onStreamingChunk = (delta, index) => {
|
|
73
|
+
this.send({ type: "streaming_chunk", delta, index });
|
|
74
|
+
};
|
|
75
|
+
// Forward tool usage events to web UI as tool_status messages
|
|
76
|
+
this.claude.onToolStatus = (tool, status, detail) => {
|
|
77
|
+
const label = toolLabel(tool, status);
|
|
78
|
+
const toolMsg = {
|
|
79
|
+
type: "tool_status",
|
|
80
|
+
tool,
|
|
81
|
+
status,
|
|
82
|
+
label,
|
|
83
|
+
...(detail ? { detail } : {}),
|
|
84
|
+
};
|
|
85
|
+
this.send(toolMsg);
|
|
86
|
+
};
|
|
87
|
+
// Log system init info
|
|
88
|
+
this.claude.onSystemInit = (msg) => {
|
|
89
|
+
console.log(`[agent] Claude Code initialized`);
|
|
90
|
+
console.log(` Model: ${msg.model}`);
|
|
91
|
+
console.log(` Auth: ${msg.apiKeySource}`);
|
|
92
|
+
console.log(` Permission: ${msg.permissionMode}`);
|
|
93
|
+
console.log(` Tools: ${msg.tools.length}`);
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Connect to WebSocket server and start message loop.
|
|
98
|
+
*/
|
|
99
|
+
async connect() {
|
|
100
|
+
const url = `${this.serverUrl}?key=${this.apiKey}`;
|
|
101
|
+
return new Promise((resolve, reject) => {
|
|
102
|
+
this.ws = new WebSocket(url, {
|
|
103
|
+
perMessageDeflate: false,
|
|
104
|
+
});
|
|
105
|
+
this.ws.on("open", async () => {
|
|
106
|
+
console.log("[agent] Connected to server");
|
|
107
|
+
// Start ping loop
|
|
108
|
+
this.startPingLoop();
|
|
109
|
+
// Sync session with server
|
|
110
|
+
await this.syncSession();
|
|
111
|
+
console.log("[agent] Waiting for messages...");
|
|
112
|
+
});
|
|
113
|
+
this.ws.on("message", async (data) => {
|
|
114
|
+
try {
|
|
115
|
+
const msg = JSON.parse(data.toString());
|
|
116
|
+
await this.handleMessage(msg);
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
console.error("[agent] Message handling error:", e);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
this.ws.on("close", (code, reason) => {
|
|
123
|
+
console.log(`[agent] Connection closed: ${code} ${reason.toString()}`);
|
|
124
|
+
this.stopPingLoop();
|
|
125
|
+
resolve();
|
|
126
|
+
});
|
|
127
|
+
this.ws.on("error", (error) => {
|
|
128
|
+
console.error("[agent] WebSocket error:", error.message);
|
|
129
|
+
this.stopPingLoop();
|
|
130
|
+
reject(error);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
async handleMessage(msg) {
|
|
135
|
+
switch (msg.type) {
|
|
136
|
+
case "query":
|
|
137
|
+
await this.handleQuery(msg.message, msg.model, msg.skill_id, msg.system_prompt, msg.agents);
|
|
138
|
+
break;
|
|
139
|
+
case "approval":
|
|
140
|
+
this.security.resolveApproval(msg.approved, msg.permanent ?? false);
|
|
141
|
+
break;
|
|
142
|
+
case "add_trusted_path":
|
|
143
|
+
this.security.addTrustedPath(msg.path);
|
|
144
|
+
break;
|
|
145
|
+
case "interrupt":
|
|
146
|
+
await this.handleInterrupt();
|
|
147
|
+
break;
|
|
148
|
+
case "ping":
|
|
149
|
+
this.send({ type: "pong" });
|
|
150
|
+
break;
|
|
151
|
+
case "pong":
|
|
152
|
+
break;
|
|
153
|
+
case "session_info":
|
|
154
|
+
this.handleSessionInfo(msg);
|
|
155
|
+
break;
|
|
156
|
+
case "error":
|
|
157
|
+
console.error(`[agent] Server error: ${msg.message}`);
|
|
158
|
+
break;
|
|
159
|
+
// ── Skill messages ────────────────────────────────────────────────────
|
|
160
|
+
case "skill_list": {
|
|
161
|
+
const skillList = {
|
|
162
|
+
type: "skill_list_response",
|
|
163
|
+
skills: getAllSkills().map((s) => ({
|
|
164
|
+
id: s.id,
|
|
165
|
+
name: s.name,
|
|
166
|
+
icon: s.icon,
|
|
167
|
+
description: s.description,
|
|
168
|
+
})),
|
|
169
|
+
};
|
|
170
|
+
this.send(skillList);
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
// ── Schedule messages ─────────────────────────────────────────────────
|
|
174
|
+
case "schedule_list": {
|
|
175
|
+
const scheduleList = {
|
|
176
|
+
type: "schedule_list_response",
|
|
177
|
+
tasks: this.scheduler.getAll(),
|
|
178
|
+
};
|
|
179
|
+
this.send(scheduleList);
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
case "schedule_add": {
|
|
183
|
+
const result = this.scheduler.addTask(msg.cron, msg.message, msg.skill_id);
|
|
184
|
+
const addResp = "error" in result
|
|
185
|
+
? { type: "schedule_add_response", success: false, error: result.error }
|
|
186
|
+
: { type: "schedule_add_response", success: true, task: result };
|
|
187
|
+
this.send(addResp);
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
case "schedule_remove":
|
|
191
|
+
this.scheduler.removeTask(msg.id);
|
|
192
|
+
break;
|
|
193
|
+
case "schedule_toggle":
|
|
194
|
+
this.scheduler.toggleTask(msg.id, msg.enabled);
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async handleQuery(message, model, skillId, systemPrompt, agents) {
|
|
199
|
+
if (this.processing) {
|
|
200
|
+
this.send({
|
|
201
|
+
type: "response",
|
|
202
|
+
result: "A previous task is still running. Please wait.",
|
|
203
|
+
});
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
this.processing = true;
|
|
207
|
+
console.log(`[agent] Query received: ${message.slice(0, 80)}...`);
|
|
208
|
+
try {
|
|
209
|
+
// Before-images snapshot
|
|
210
|
+
const beforeImages = await withTimeout(() => getImagesWithMtime(this.workDir), IMAGE_SCAN_TIMEOUT_MS, {});
|
|
211
|
+
// Execute Claude query (with optional skill preset)
|
|
212
|
+
const skill = skillId ? getSkill(skillId) : undefined;
|
|
213
|
+
if (skill)
|
|
214
|
+
console.log(`[agent] Skill applied: ${skill.icon} ${skill.name}`);
|
|
215
|
+
const execResult = await this.claude.execute(message, model, skill, systemPrompt, agents);
|
|
216
|
+
// Collect images
|
|
217
|
+
const images = [];
|
|
218
|
+
// Screenshot generation (keyword detection)
|
|
219
|
+
const wantsScreenshot = SCREENSHOT_KEYWORDS.some((kw) => message.toLowerCase().includes(kw));
|
|
220
|
+
if (wantsScreenshot) {
|
|
221
|
+
const screenshot = await this.generateScreenshot(message, execResult.text);
|
|
222
|
+
if (screenshot)
|
|
223
|
+
images.push(screenshot);
|
|
224
|
+
}
|
|
225
|
+
// Detect new/modified images
|
|
226
|
+
const newImages = findNewOrModifiedImages(this.workDir, beforeImages);
|
|
227
|
+
for (const imgPath of newImages.slice(0, MAX_IMAGES_PER_RESPONSE - images.length)) {
|
|
228
|
+
const b64 = imageToBase64(imgPath);
|
|
229
|
+
if (b64) {
|
|
230
|
+
images.push({
|
|
231
|
+
filename: path.basename(imgPath),
|
|
232
|
+
data: b64,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Extract image paths from response text
|
|
237
|
+
if (images.length === 0) {
|
|
238
|
+
const referenced = extractImagePathsFromText(execResult.text, this.workDir);
|
|
239
|
+
for (const imgPath of referenced.slice(0, MAX_IMAGES_PER_RESPONSE)) {
|
|
240
|
+
const b64 = imageToBase64(imgPath);
|
|
241
|
+
if (b64) {
|
|
242
|
+
images.push({
|
|
243
|
+
filename: path.basename(imgPath),
|
|
244
|
+
data: b64,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// Send response (with cost + turns + usage metadata)
|
|
250
|
+
const response = {
|
|
251
|
+
type: "response",
|
|
252
|
+
result: execResult.text,
|
|
253
|
+
...(images.length > 0 ? { images } : {}),
|
|
254
|
+
...(execResult.cost_usd !== undefined ? { cost_usd: execResult.cost_usd } : {}),
|
|
255
|
+
...(execResult.num_turns !== undefined ? { num_turns: execResult.num_turns } : {}),
|
|
256
|
+
...(execResult.usage ? { usage: execResult.usage } : {}),
|
|
257
|
+
};
|
|
258
|
+
this.send(response);
|
|
259
|
+
if (execResult.cost_usd !== undefined) {
|
|
260
|
+
console.log(`[agent] Response sent (${execResult.text.length} chars, ${images.length} images, $${execResult.cost_usd.toFixed(4)}, ${execResult.num_turns} turns)`);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
console.log(`[agent] Response sent (${execResult.text.length} chars, ${images.length} images)`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
catch (e) {
|
|
267
|
+
// AbortError from interrupt is handled by handleInterrupt which sends the response
|
|
268
|
+
// → silently exit here
|
|
269
|
+
if (e instanceof AbortError)
|
|
270
|
+
return;
|
|
271
|
+
const errMsg = e instanceof Error ? e.message : String(e);
|
|
272
|
+
console.error("[agent] Query execution error:", errMsg);
|
|
273
|
+
this.send({
|
|
274
|
+
type: "response",
|
|
275
|
+
result: `Error: ${errMsg}`,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
finally {
|
|
279
|
+
this.processing = false;
|
|
280
|
+
// Drain queued scheduled tasks (one at a time)
|
|
281
|
+
void this.drainScheduledQueue();
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/** Run a scheduled task, respecting the processing guard */
|
|
285
|
+
async runScheduledTask(task) {
|
|
286
|
+
if (this.processing) {
|
|
287
|
+
this.pendingScheduledTasks.push(task);
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
this.processing = true;
|
|
291
|
+
try {
|
|
292
|
+
const skill = task.skill_id ? getSkill(task.skill_id) : undefined;
|
|
293
|
+
const execResult = await this.claude.execute(task.message, undefined, skill);
|
|
294
|
+
this.scheduler.recordResult(task.id, execResult.text);
|
|
295
|
+
this.send({
|
|
296
|
+
type: "response",
|
|
297
|
+
result: `⏰ [${task.cron}] ${execResult.text}`,
|
|
298
|
+
...(execResult.cost_usd !== undefined ? { cost_usd: execResult.cost_usd } : {}),
|
|
299
|
+
...(execResult.num_turns !== undefined ? { num_turns: execResult.num_turns } : {}),
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
catch (e) {
|
|
303
|
+
if (!(e instanceof AbortError)) {
|
|
304
|
+
console.error("[scheduler] Task execution error:", e);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
finally {
|
|
308
|
+
this.processing = false;
|
|
309
|
+
void this.drainScheduledQueue();
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/** Process any tasks that queued up while a query was in progress */
|
|
313
|
+
async drainScheduledQueue() {
|
|
314
|
+
const next = this.pendingScheduledTasks.shift();
|
|
315
|
+
if (next) {
|
|
316
|
+
console.log(`[scheduler] Draining queue: "${next.message.slice(0, 40)}"`);
|
|
317
|
+
await this.runScheduledTask(next);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
async handleInterrupt() {
|
|
321
|
+
console.log("[agent] Interrupt request received");
|
|
322
|
+
if (this.processing) {
|
|
323
|
+
const interrupted = await this.claude.interrupt();
|
|
324
|
+
if (interrupted) {
|
|
325
|
+
this.send({
|
|
326
|
+
type: "response",
|
|
327
|
+
result: "⏹️ Task interrupted. Waiting for next message...",
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
async generateScreenshot(message, result) {
|
|
333
|
+
try {
|
|
334
|
+
const projectDir = findProjectDir(message + "\n" + result, this.workDir);
|
|
335
|
+
if (!projectDir)
|
|
336
|
+
return null;
|
|
337
|
+
this.lastProjectPath = projectDir;
|
|
338
|
+
const outputPath = getScreenshotPath();
|
|
339
|
+
const screenshotPath = await screenshotProject(projectDir, outputPath);
|
|
340
|
+
if (!screenshotPath)
|
|
341
|
+
return null;
|
|
342
|
+
const b64 = imageToBase64(screenshotPath);
|
|
343
|
+
if (!b64)
|
|
344
|
+
return null;
|
|
345
|
+
return {
|
|
346
|
+
filename: "screenshot.png",
|
|
347
|
+
data: b64,
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
catch (e) {
|
|
351
|
+
console.error("[agent] Screenshot generation failed:", e);
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
async syncSession() {
|
|
356
|
+
const sessionId = this.claude.currentSessionId;
|
|
357
|
+
this.send({
|
|
358
|
+
type: "session_sync",
|
|
359
|
+
work_dir: this.workDir,
|
|
360
|
+
session_id: sessionId ?? null,
|
|
361
|
+
});
|
|
362
|
+
// Wait for session_info from server (with timeout)
|
|
363
|
+
// The response is handled in handleSessionInfo
|
|
364
|
+
console.log("[agent] Session sync request sent");
|
|
365
|
+
}
|
|
366
|
+
handleSessionInfo(msg) {
|
|
367
|
+
if (msg.session_id && msg.source === "server") {
|
|
368
|
+
// Server has a session, use it if we don't have one
|
|
369
|
+
if (!this.claude.currentSessionId) {
|
|
370
|
+
this.claude.currentSessionIdOverride = msg.session_id;
|
|
371
|
+
saveSessionId(this.workDir, msg.session_id);
|
|
372
|
+
console.log(`[agent] Server session synced: ${msg.session_id.slice(0, 20)}...`);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
send(msg) {
|
|
377
|
+
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
378
|
+
this.ws.send(JSON.stringify(msg));
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
startPingLoop() {
|
|
382
|
+
this.pingInterval = setInterval(() => {
|
|
383
|
+
this.send({ type: "ping" });
|
|
384
|
+
}, PING_INTERVAL_MS);
|
|
385
|
+
}
|
|
386
|
+
stopPingLoop() {
|
|
387
|
+
if (this.pingInterval) {
|
|
388
|
+
clearInterval(this.pingInterval);
|
|
389
|
+
this.pingInterval = null;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Run a function (sync or async) with a timeout.
|
|
395
|
+
* Returns fallback value if it times out or throws.
|
|
396
|
+
*/
|
|
397
|
+
async function withTimeout(fn, timeoutMs, fallback) {
|
|
398
|
+
return new Promise((resolve) => {
|
|
399
|
+
const timer = setTimeout(() => resolve(fallback), timeoutMs);
|
|
400
|
+
Promise.resolve()
|
|
401
|
+
.then(() => fn())
|
|
402
|
+
.then((result) => {
|
|
403
|
+
clearTimeout(timer);
|
|
404
|
+
resolve(result);
|
|
405
|
+
})
|
|
406
|
+
.catch(() => {
|
|
407
|
+
clearTimeout(timer);
|
|
408
|
+
resolve(fallback);
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
/** Map SDK tool names to human-readable labels for the web UI */
|
|
413
|
+
function toolLabel(tool, status) {
|
|
414
|
+
const labels = {
|
|
415
|
+
Read: ["📖 Reading file...", "📖 File read complete"],
|
|
416
|
+
Write: ["✏️ Writing file...", "✏️ File write complete"],
|
|
417
|
+
Edit: ["✂️ Editing code...", "✂️ Code edit complete"],
|
|
418
|
+
Bash: ["⚙️ Running command...", "⚙️ Command complete"],
|
|
419
|
+
Glob: ["🔍 Searching files...", "🔍 File search complete"],
|
|
420
|
+
Grep: ["🔍 Searching code...", "🔍 Code search complete"],
|
|
421
|
+
WebFetch: ["🌐 Fetching web...", "🌐 Web fetch complete"],
|
|
422
|
+
WebSearch: ["🌐 Searching web...", "🌐 Web search complete"],
|
|
423
|
+
TodoWrite: ["📝 Saving todo...", "📝 Todo saved"],
|
|
424
|
+
NotebookEdit: ["📓 Editing notebook...", "📓 Notebook edit complete"],
|
|
425
|
+
};
|
|
426
|
+
const pair = labels[tool];
|
|
427
|
+
if (!pair)
|
|
428
|
+
return status === "start" ? `🔧 ${tool} running...` : `🔧 ${tool} complete`;
|
|
429
|
+
return status === "start" ? pair[0] : pair[1];
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/claude.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type SDKSystemMessage, AbortError } from "@anthropic-ai/claude-agent-sdk";
|
|
2
|
+
export { AbortError };
|
|
3
|
+
import type { SecurityManager } from "./security.js";
|
|
4
|
+
import type { Skill } from "./skills.js";
|
|
5
|
+
import type { AgentDef } from "./protocol.js";
|
|
6
|
+
export interface ClaudeSessionOptions {
|
|
7
|
+
workDir: string;
|
|
8
|
+
sessionId: string | null;
|
|
9
|
+
security: SecurityManager;
|
|
10
|
+
}
|
|
11
|
+
/** Result returned from execute() — text + metadata */
|
|
12
|
+
export interface ExecuteResult {
|
|
13
|
+
text: string;
|
|
14
|
+
cost_usd?: number;
|
|
15
|
+
num_turns?: number;
|
|
16
|
+
usage?: {
|
|
17
|
+
input_tokens: number;
|
|
18
|
+
output_tokens: number;
|
|
19
|
+
cache_read_input_tokens: number;
|
|
20
|
+
cache_creation_input_tokens: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export declare class ClaudeSession {
|
|
24
|
+
private currentQuery;
|
|
25
|
+
private abortController;
|
|
26
|
+
private sessionId;
|
|
27
|
+
private sessionStarted;
|
|
28
|
+
private workDir;
|
|
29
|
+
private security;
|
|
30
|
+
/** Called when a new session ID is obtained from SDK */
|
|
31
|
+
onSessionId?: (sessionId: string) => void;
|
|
32
|
+
/** Called when SDKSystemMessage (init) is received */
|
|
33
|
+
onSystemInit?: (msg: SDKSystemMessage) => void;
|
|
34
|
+
/** Called when SDK emits a streaming text delta */
|
|
35
|
+
onStreamingChunk?: (delta: string, index: number) => void;
|
|
36
|
+
/** Called when Claude starts or finishes using a tool */
|
|
37
|
+
onToolStatus?: (tool: string, status: "start" | "end", detail?: string) => void;
|
|
38
|
+
constructor(options: ClaudeSessionOptions);
|
|
39
|
+
get currentSessionId(): string | null;
|
|
40
|
+
set currentSessionIdOverride(id: string | null);
|
|
41
|
+
/**
|
|
42
|
+
* Execute a query and return the result with metadata.
|
|
43
|
+
* - Streams text chunks via onStreamingChunk (stream_event)
|
|
44
|
+
* - Tool usage events via onToolStatus
|
|
45
|
+
* - Skill/systemPrompt/agents applied to SDK options
|
|
46
|
+
*/
|
|
47
|
+
execute(message: string, model?: string, skill?: Skill, systemPrompt?: string, agents?: Record<string, AgentDef>): Promise<ExecuteResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Interrupt the currently running query.
|
|
50
|
+
*/
|
|
51
|
+
interrupt(): Promise<boolean>;
|
|
52
|
+
}
|