neuron-inspector 0.3.2 → 0.4.1

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.
@@ -0,0 +1,361 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import * as os from "os";
4
+ import YAML from "yaml";
5
+ const timers = new Map();
6
+ function schedulesPath() {
7
+ const neuronDir = path.join(os.homedir(), ".neuron");
8
+ if (!fs.existsSync(neuronDir)) {
9
+ fs.mkdirSync(neuronDir, { recursive: true });
10
+ }
11
+ return path.join(neuronDir, "schedules.yaml");
12
+ }
13
+ function pendingRunsPath() {
14
+ const neuronDir = path.join(os.homedir(), ".neuron");
15
+ return path.join(neuronDir, "pending-runs.yaml");
16
+ }
17
+ function loadSchedules() {
18
+ const p = schedulesPath();
19
+ if (!fs.existsSync(p)) {
20
+ return { schedules: [] };
21
+ }
22
+ const content = fs.readFileSync(p, "utf-8");
23
+ const data = YAML.parse(content);
24
+ return data || { schedules: [] };
25
+ }
26
+ function saveSchedules(data) {
27
+ const p = schedulesPath();
28
+ fs.writeFileSync(p, YAML.stringify(data), "utf-8");
29
+ }
30
+ function loadPendingRuns() {
31
+ const p = pendingRunsPath();
32
+ if (!fs.existsSync(p)) {
33
+ return { pending: [] };
34
+ }
35
+ const content = fs.readFileSync(p, "utf-8");
36
+ const data = YAML.parse(content);
37
+ return data || { pending: [] };
38
+ }
39
+ function savePendingRuns(data) {
40
+ const p = pendingRunsPath();
41
+ fs.writeFileSync(p, YAML.stringify(data), "utf-8");
42
+ }
43
+ function generateId() {
44
+ return `sched_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
45
+ }
46
+ function computeNextCronRun(hour, days) {
47
+ const now = new Date();
48
+ let next = new Date(now);
49
+ next.setHours(hour, 0, 0, 0);
50
+ if (next <= now) {
51
+ next.setDate(next.getDate() + 1);
52
+ }
53
+ if (days && days.length > 0) {
54
+ const maxIterations = 7;
55
+ let iterations = 0;
56
+ while (!days.includes(next.getDay()) && iterations < maxIterations) {
57
+ next.setDate(next.getDate() + 1);
58
+ iterations++;
59
+ }
60
+ }
61
+ return next;
62
+ }
63
+ function scheduleJob(entry) {
64
+ if (!entry.enabled)
65
+ return;
66
+ clearSchedule(entry.id);
67
+ if (entry.interval_minutes !== undefined) {
68
+ const intervalMs = entry.interval_minutes * 60 * 1000;
69
+ const timer = setInterval(() => {
70
+ triggerRun(entry);
71
+ }, intervalMs);
72
+ timers.set(entry.id, timer);
73
+ const nextRun = new Date(Date.now() + intervalMs);
74
+ updateNextRun(entry.id, nextRun.toISOString());
75
+ }
76
+ else if (entry.cron_hour !== undefined) {
77
+ const scheduleNextCron = () => {
78
+ const nextRun = computeNextCronRun(entry.cron_hour, entry.cron_days);
79
+ const delayMs = nextRun.getTime() - Date.now();
80
+ updateNextRun(entry.id, nextRun.toISOString());
81
+ const timer = setTimeout(() => {
82
+ triggerRun(entry);
83
+ scheduleNextCron();
84
+ }, delayMs);
85
+ timers.set(entry.id, timer);
86
+ };
87
+ scheduleNextCron();
88
+ }
89
+ }
90
+ function clearSchedule(id) {
91
+ const timer = timers.get(id);
92
+ if (timer) {
93
+ clearTimeout(timer);
94
+ clearInterval(timer);
95
+ timers.delete(id);
96
+ }
97
+ }
98
+ function triggerRun(entry) {
99
+ const now = new Date().toISOString();
100
+ console.error(`[scheduler] Triggering scheduled run: ${entry.slug} (schedule_id: ${entry.id})`);
101
+ const pendingData = loadPendingRuns();
102
+ pendingData.pending.push({
103
+ slug: entry.slug,
104
+ variables: entry.variables,
105
+ rules: entry.rules,
106
+ scheduled_at: now,
107
+ schedule_id: entry.id,
108
+ });
109
+ savePendingRuns(pendingData);
110
+ const data = loadSchedules();
111
+ const idx = data.schedules.findIndex((s) => s.id === entry.id);
112
+ if (idx !== -1) {
113
+ data.schedules[idx].last_run_at = now;
114
+ data.schedules[idx].run_count = (data.schedules[idx].run_count || 0) + 1;
115
+ saveSchedules(data);
116
+ }
117
+ }
118
+ function updateNextRun(id, nextRunAt) {
119
+ const data = loadSchedules();
120
+ const idx = data.schedules.findIndex((s) => s.id === id);
121
+ if (idx !== -1) {
122
+ data.schedules[idx].next_run_at = nextRunAt;
123
+ saveSchedules(data);
124
+ }
125
+ }
126
+ export function startScheduler() {
127
+ const data = loadSchedules();
128
+ for (const entry of data.schedules) {
129
+ if (entry.enabled) {
130
+ scheduleJob(entry);
131
+ }
132
+ }
133
+ console.error(`[scheduler] Started ${data.schedules.filter((s) => s.enabled).length} schedule(s)`);
134
+ }
135
+ export const SCHEDULER_TOOLS = [
136
+ {
137
+ name: "neuron_schedule_recipe",
138
+ description: "Schedule a recipe to run on an interval or at a specific time",
139
+ inputSchema: {
140
+ type: "object",
141
+ properties: {
142
+ slug: {
143
+ type: "string",
144
+ description: "Recipe slug to schedule",
145
+ },
146
+ interval_minutes: {
147
+ type: "number",
148
+ description: "Run every N minutes (mutually exclusive with cron_hour)",
149
+ },
150
+ cron_hour: {
151
+ type: "number",
152
+ description: "Run daily at this hour 0-23 (mutually exclusive with interval_minutes)",
153
+ minimum: 0,
154
+ maximum: 23,
155
+ },
156
+ cron_days: {
157
+ type: "array",
158
+ items: {
159
+ type: "number",
160
+ minimum: 0,
161
+ maximum: 6,
162
+ },
163
+ description: "Days of week to run (0=Sunday, 6=Saturday). Only valid with cron_hour.",
164
+ },
165
+ variables: {
166
+ type: "object",
167
+ description: "Variables to pass to the recipe",
168
+ },
169
+ rules: {
170
+ type: "array",
171
+ items: { type: "string" },
172
+ description: "Rules to pass to the recipe",
173
+ },
174
+ enabled: {
175
+ type: "boolean",
176
+ description: "Whether the schedule is enabled",
177
+ default: true,
178
+ },
179
+ },
180
+ required: ["slug"],
181
+ },
182
+ },
183
+ {
184
+ name: "neuron_schedule_list",
185
+ description: "List all scheduled recipes with their next run time, last run time, run count, and enabled status",
186
+ inputSchema: {
187
+ type: "object",
188
+ properties: {},
189
+ },
190
+ },
191
+ {
192
+ name: "neuron_schedule_remove",
193
+ description: "Remove a scheduled recipe",
194
+ inputSchema: {
195
+ type: "object",
196
+ properties: {
197
+ schedule_id: {
198
+ type: "string",
199
+ description: "ID of the schedule to remove",
200
+ },
201
+ },
202
+ required: ["schedule_id"],
203
+ },
204
+ },
205
+ {
206
+ name: "neuron_schedule_toggle",
207
+ description: "Enable or disable a schedule without removing it",
208
+ inputSchema: {
209
+ type: "object",
210
+ properties: {
211
+ schedule_id: {
212
+ type: "string",
213
+ description: "ID of the schedule to toggle",
214
+ },
215
+ enabled: {
216
+ type: "boolean",
217
+ description: "Whether to enable or disable the schedule",
218
+ },
219
+ },
220
+ required: ["schedule_id", "enabled"],
221
+ },
222
+ },
223
+ ];
224
+ export async function handleSchedulerTool(name, args) {
225
+ switch (name) {
226
+ case "neuron_schedule_recipe": {
227
+ const { slug, interval_minutes, cron_hour, cron_days, variables, rules, enabled } = args;
228
+ if (typeof slug !== "string") {
229
+ throw new Error("slug must be a string");
230
+ }
231
+ if (interval_minutes !== undefined && cron_hour !== undefined) {
232
+ throw new Error("Cannot specify both interval_minutes and cron_hour");
233
+ }
234
+ if (interval_minutes === undefined && cron_hour === undefined) {
235
+ throw new Error("Must specify either interval_minutes or cron_hour");
236
+ }
237
+ if (cron_days !== undefined && cron_hour === undefined) {
238
+ throw new Error("cron_days can only be used with cron_hour");
239
+ }
240
+ const entry = {
241
+ id: generateId(),
242
+ slug,
243
+ interval_minutes: interval_minutes,
244
+ cron_hour: cron_hour,
245
+ cron_days: cron_days,
246
+ variables: variables,
247
+ rules: rules,
248
+ enabled: enabled !== undefined ? enabled : true,
249
+ created_at: new Date().toISOString(),
250
+ run_count: 0,
251
+ };
252
+ const data = loadSchedules();
253
+ data.schedules.push(entry);
254
+ saveSchedules(data);
255
+ if (entry.enabled) {
256
+ scheduleJob(entry);
257
+ }
258
+ return {
259
+ content: [
260
+ {
261
+ type: "text",
262
+ text: JSON.stringify({
263
+ success: true,
264
+ schedule_id: entry.id,
265
+ message: `Scheduled recipe ${slug}${entry.interval_minutes
266
+ ? ` to run every ${entry.interval_minutes} minutes`
267
+ : entry.cron_hour !== undefined
268
+ ? ` to run daily at ${entry.cron_hour}:00${entry.cron_days ? ` on days ${entry.cron_days.join(", ")}` : ""}`
269
+ : ""}`,
270
+ }, null, 2),
271
+ },
272
+ ],
273
+ };
274
+ }
275
+ case "neuron_schedule_list": {
276
+ const data = loadSchedules();
277
+ return {
278
+ content: [
279
+ {
280
+ type: "text",
281
+ text: JSON.stringify({
282
+ schedules: data.schedules.map((s) => ({
283
+ id: s.id,
284
+ slug: s.slug,
285
+ interval_minutes: s.interval_minutes,
286
+ cron_hour: s.cron_hour,
287
+ cron_days: s.cron_days,
288
+ enabled: s.enabled,
289
+ created_at: s.created_at,
290
+ last_run_at: s.last_run_at,
291
+ next_run_at: s.next_run_at,
292
+ run_count: s.run_count,
293
+ })),
294
+ }, null, 2),
295
+ },
296
+ ],
297
+ };
298
+ }
299
+ case "neuron_schedule_remove": {
300
+ const { schedule_id } = args;
301
+ if (typeof schedule_id !== "string") {
302
+ throw new Error("schedule_id must be a string");
303
+ }
304
+ const data = loadSchedules();
305
+ const idx = data.schedules.findIndex((s) => s.id === schedule_id);
306
+ if (idx === -1) {
307
+ throw new Error(`Schedule ${schedule_id} not found`);
308
+ }
309
+ clearSchedule(schedule_id);
310
+ data.schedules.splice(idx, 1);
311
+ saveSchedules(data);
312
+ return {
313
+ content: [
314
+ {
315
+ type: "text",
316
+ text: JSON.stringify({
317
+ success: true,
318
+ message: `Removed schedule ${schedule_id}`,
319
+ }, null, 2),
320
+ },
321
+ ],
322
+ };
323
+ }
324
+ case "neuron_schedule_toggle": {
325
+ const { schedule_id, enabled } = args;
326
+ if (typeof schedule_id !== "string") {
327
+ throw new Error("schedule_id must be a string");
328
+ }
329
+ if (typeof enabled !== "boolean") {
330
+ throw new Error("enabled must be a boolean");
331
+ }
332
+ const data = loadSchedules();
333
+ const idx = data.schedules.findIndex((s) => s.id === schedule_id);
334
+ if (idx === -1) {
335
+ throw new Error(`Schedule ${schedule_id} not found`);
336
+ }
337
+ data.schedules[idx].enabled = enabled;
338
+ saveSchedules(data);
339
+ if (enabled) {
340
+ scheduleJob(data.schedules[idx]);
341
+ }
342
+ else {
343
+ clearSchedule(schedule_id);
344
+ }
345
+ return {
346
+ content: [
347
+ {
348
+ type: "text",
349
+ text: JSON.stringify({
350
+ success: true,
351
+ message: `Schedule ${schedule_id} ${enabled ? "enabled" : "disabled"}`,
352
+ }, null, 2),
353
+ },
354
+ ],
355
+ };
356
+ }
357
+ default:
358
+ throw new Error(`Unknown scheduler tool: ${name}`);
359
+ }
360
+ }
361
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -6,6 +6,9 @@ import { PendingCalls } from "./correlation.js";
6
6
  import { TOOLS, toolToPrimitive } from "./tools.js";
7
7
  import { RECIPE_TOOLS, handleRecipeTool } from "./recipe-tools.js";
8
8
  import { COMPOUND_TOOLS, handleCompoundTool } from "./compound-tools.js";
9
+ import { SCHEDULER_TOOLS, handleSchedulerTool, startScheduler } from "./scheduler.js";
10
+ import { SESSION_TOOLS, handleSessionTool } from "./session-state.js";
11
+ import { MONITOR_TOOLS, handleMonitorTool, startMonitor } from "./monitor.js";
9
12
  function propToZod(p) {
10
13
  let zt;
11
14
  if (Array.isArray(p?.enum) && p.enum.length > 0) {
@@ -58,13 +61,10 @@ wss.on("connection", (ws) => {
58
61
  ws.on("message", (data) => {
59
62
  try {
60
63
  const msg = JSON.parse(data.toString());
61
- // Handle tool-call responses from the extension
62
64
  if (msg.type === "response" && msg.requestId) {
63
65
  pending.onResponse(msg);
64
66
  return;
65
67
  }
66
- // Other messages (state_snapshot, credentials_updated, flow, heartbeat)
67
- // are push events — log and ignore for MCP purposes
68
68
  }
69
69
  catch {
70
70
  // ignore unparseable messages
@@ -81,9 +81,48 @@ console.error(`[bridge] WebSocket server listening on 127.0.0.1:${PORT}`);
81
81
  // ── MCP server (Claude Code / Cursor connects via stdio) ────
82
82
  const mcp = new McpServer({
83
83
  name: "neuron-inspector",
84
- version: "0.2.0",
84
+ version: "0.4.0",
85
85
  });
86
- // Browser tools (forwarded to extension via WebSocket)
86
+ function registerLocalTools(tools, handler) {
87
+ for (const tool of tools) {
88
+ mcp.tool(tool.name, tool.description, shapeFromSchema(tool.inputSchema), async (args) => {
89
+ try {
90
+ const result = await handler(tool.name, args);
91
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
92
+ }
93
+ catch (err) {
94
+ return {
95
+ content: [{ type: "text", text: `Error: ${err.message}` }],
96
+ isError: true,
97
+ };
98
+ }
99
+ });
100
+ }
101
+ }
102
+ function registerBrowserTools(tools, handler) {
103
+ for (const tool of tools) {
104
+ mcp.tool(tool.name, tool.description, shapeFromSchema(tool.inputSchema), async (args) => {
105
+ if (!extensionWs || extensionWs.readyState !== WebSocket.OPEN) {
106
+ return {
107
+ content: [{ type: "text", text: "Extension not connected. Open Chrome with the Neuron extension and enable developer mode." }],
108
+ isError: true,
109
+ };
110
+ }
111
+ try {
112
+ const result = await handler(tool.name, args, { ws: extensionWs, pending });
113
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
114
+ }
115
+ catch (err) {
116
+ return {
117
+ content: [{ type: "text", text: `Error: ${err.message}` }],
118
+ isError: true,
119
+ };
120
+ }
121
+ });
122
+ }
123
+ }
124
+ // ── Register all tool groups ────────────────────────────────
125
+ // Browser primitives (forwarded to extension via WebSocket)
87
126
  for (const tool of TOOLS) {
88
127
  mcp.tool(tool.name, tool.description, shapeFromSchema(tool.inputSchema), async (args) => {
89
128
  if (!extensionWs || extensionWs.readyState !== WebSocket.OPEN) {
@@ -95,51 +134,54 @@ for (const tool of TOOLS) {
95
134
  try {
96
135
  const primitiveName = toolToPrimitive(tool.name);
97
136
  const result = await pending.call(extensionWs, primitiveName, args);
98
- return {
99
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
100
- };
101
- }
102
- catch (err) {
103
- return {
104
- content: [{ type: "text", text: `Error: ${err.message}` }],
105
- isError: true,
106
- };
107
- }
108
- });
109
- }
110
- // Recipe tools (local, no extension needed)
111
- for (const tool of RECIPE_TOOLS) {
112
- mcp.tool(tool.name, tool.description, shapeFromSchema(tool.inputSchema), async (args) => {
113
- try {
114
- const result = await handleRecipeTool(tool.name, args);
115
137
  return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
116
138
  }
117
139
  catch (err) {
118
- return {
119
- content: [{ type: "text", text: `Error: ${err.message}` }],
120
- isError: true,
121
- };
140
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
122
141
  }
123
142
  });
124
143
  }
125
- // Compound tools (bridge-side orchestration, forward to extension)
126
- for (const tool of COMPOUND_TOOLS) {
144
+ // Compound tools (bridge-side orchestration extension)
145
+ registerBrowserTools(COMPOUND_TOOLS, handleCompoundTool);
146
+ // Recipe + rules tools (local filesystem)
147
+ registerLocalTools(RECIPE_TOOLS, handleRecipeTool);
148
+ // Scheduler tools (local filesystem + timers)
149
+ registerLocalTools(SCHEDULER_TOOLS, handleSchedulerTool);
150
+ // Session state tools (local filesystem)
151
+ registerLocalTools(SESSION_TOOLS, handleSessionTool);
152
+ // Monitor tools (local filesystem + extension for checks)
153
+ for (const tool of MONITOR_TOOLS) {
127
154
  mcp.tool(tool.name, tool.description, shapeFromSchema(tool.inputSchema), async (args) => {
128
- if (!extensionWs || extensionWs.readyState !== WebSocket.OPEN) {
129
- return {
130
- content: [{ type: "text", text: "Extension not connected. Open Chrome with the Neuron extension and enable developer mode." }],
131
- isError: true,
132
- };
133
- }
134
155
  try {
135
- const result = await handleCompoundTool(tool.name, args, { ws: extensionWs, pending });
156
+ // Build a check function that uses the extension to visit pages
157
+ const checkFn = async (url, selector) => {
158
+ if (!extensionWs || extensionWs.readyState !== WebSocket.OPEN) {
159
+ throw new Error("Extension not connected");
160
+ }
161
+ const tab = (await pending.call(extensionWs, "openTab", { url }));
162
+ const tabId = tab?.tabId;
163
+ if (!tabId)
164
+ throw new Error("Failed to open tab");
165
+ await new Promise((r) => setTimeout(r, 3000));
166
+ // Scroll to load content
167
+ await pending.call(extensionWs, "scrollPage", { tabId, deltaY: 600, smooth: true });
168
+ await new Promise((r) => setTimeout(r, 500));
169
+ const extractArgs = { tabId };
170
+ if (selector)
171
+ extractArgs.selector = selector;
172
+ const data = await pending.call(extensionWs, "extractData", extractArgs);
173
+ // Close tab
174
+ try {
175
+ await pending.call(extensionWs, "evaluateJS", { tabId, expression: "window.close()" });
176
+ }
177
+ catch { /* ok */ }
178
+ return { text: JSON.stringify(data), items: Array.isArray(data) ? data : undefined };
179
+ };
180
+ const result = await handleMonitorTool(tool.name, args, checkFn);
136
181
  return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
137
182
  }
138
183
  catch (err) {
139
- return {
140
- content: [{ type: "text", text: `Error: ${err.message}` }],
141
- isError: true,
142
- };
184
+ return { content: [{ type: "text", text: `Error: ${err.message}` }], isError: true };
143
185
  }
144
186
  });
145
187
  }
@@ -147,8 +189,35 @@ for (const tool of COMPOUND_TOOLS) {
147
189
  async function main() {
148
190
  const transport = new StdioServerTransport();
149
191
  await mcp.connect(transport);
150
- const total = TOOLS.length + COMPOUND_TOOLS.length + RECIPE_TOOLS.length;
151
- console.error(`[bridge] MCP server ready on stdio (${total} tools: ${TOOLS.length} browser + ${COMPOUND_TOOLS.length} compound + ${RECIPE_TOOLS.length} recipe)`);
192
+ const total = TOOLS.length + COMPOUND_TOOLS.length + RECIPE_TOOLS.length +
193
+ SCHEDULER_TOOLS.length + SESSION_TOOLS.length + MONITOR_TOOLS.length;
194
+ console.error(`[bridge] MCP server ready on stdio (${total} tools: ` +
195
+ `${TOOLS.length} browser + ${COMPOUND_TOOLS.length} compound + ` +
196
+ `${RECIPE_TOOLS.length} recipe + ${SCHEDULER_TOOLS.length} scheduler + ` +
197
+ `${SESSION_TOOLS.length} session + ${MONITOR_TOOLS.length} monitor)`);
198
+ // Start background services
199
+ startScheduler();
200
+ startMonitor(async (url, selector) => {
201
+ if (!extensionWs || extensionWs.readyState !== WebSocket.OPEN) {
202
+ throw new Error("Extension not connected — monitor check skipped");
203
+ }
204
+ const tab = (await pending.call(extensionWs, "openTab", { url }));
205
+ const tabId = tab?.tabId;
206
+ if (!tabId)
207
+ throw new Error("Failed to open tab for monitor");
208
+ await new Promise((r) => setTimeout(r, 3000));
209
+ await pending.call(extensionWs, "scrollPage", { tabId, deltaY: 600, smooth: true });
210
+ await new Promise((r) => setTimeout(r, 500));
211
+ const args = { tabId };
212
+ if (selector)
213
+ args.selector = selector;
214
+ const data = await pending.call(extensionWs, "extractData", args);
215
+ try {
216
+ await pending.call(extensionWs, "evaluateJS", { tabId, expression: "window.close()" });
217
+ }
218
+ catch { /* ok */ }
219
+ return { text: JSON.stringify(data), items: Array.isArray(data) ? data : undefined };
220
+ });
152
221
  }
153
222
  main().catch((err) => {
154
223
  console.error("[bridge] Fatal:", err);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,CAAC,EAAmB,MAAM,KAAK,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAK9E,SAAS,SAAS,CAAC,CAAW;IAC5B,IAAI,EAAc,CAAC;IACnB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAA6B,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;YAChB,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;gBAAC,MAAM;YACvC,KAAK,SAAS;gBAAE,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBAAC,MAAM;YACxC,KAAK,OAAO;gBAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAAC,MAAM;YAC1E,KAAK,QAAQ;gBAAE,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAAC,MAAM;YACvG,KAAK,QAAQ;gBAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;gBAAC,MAAM;YACtC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IACD,IAAI,CAAC,EAAE,WAAW;QAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,eAAe,CAAC,MAAgB;IACvC,MAAM,KAAK,GAAG,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,MAAM,KAAK,GAA+B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxB,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAEpE,gEAAgE;AAEhE,IAAI,WAAW,GAAqB,IAAI,CAAC;AACzC,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;AAEnC,+DAA+D;AAE/D,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAEnE,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;IAC1B,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC9C,WAAW,GAAG,EAAE,CAAC;IAEjB,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxC,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAC7C,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACxB,OAAO;YACT,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAClB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,IAAI,WAAW,KAAK,EAAE;YAAE,WAAW,GAAG,IAAI,CAAC;QAC3C,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,CAAC,oDAAoD,IAAI,EAAE,CAAC,CAAC;AAE1E,+DAA+D;AAE/D,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC;IACxB,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAMH,SAAS,kBAAkB,CAAC,KAAoF,EAAE,OAAoB;IACpI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAClG,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAA+B,CAAC,CAAC;gBACzE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAChF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;oBACrE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAoF,EAAE,OAAyH;IAC3O,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAClG,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC9D,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2FAA2F,EAAE,CAAC;oBAC9H,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAA+B,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;gBACvG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAChF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;oBACrE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,+DAA+D;AAE/D,4DAA4D;AAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;IACzB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClG,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2FAA2F,EAAE,CAAC;gBAC9H,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,IAA+B,CAAC,CAAC;YAC/F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAClG,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,yDAAyD;AACzD,oBAAoB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;AAEzD,0CAA0C;AAC1C,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;AAEnD,8CAA8C;AAC9C,kBAAkB,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;AAEzD,yCAAyC;AACzC,kBAAkB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;AAErD,0DAA0D;AAC1D,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;IACjC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClG,IAAI,CAAC;YACH,gEAAgE;YAChE,MAAM,OAAO,GAAG,KAAK,EAAE,GAAW,EAAE,QAAiB,EAAgD,EAAE;gBACrG,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;oBAC9D,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBAC7C,CAAC;gBACD,MAAM,GAAG,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAuB,CAAC;gBACxF,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,CAAC;gBACzB,IAAI,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAClD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC9C,yBAAyB;gBACzB,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpF,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC7C,MAAM,WAAW,GAA4B,EAAE,KAAK,EAAE,CAAC;gBACvD,IAAI,QAAQ;oBAAE,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC9C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;gBACzE,YAAY;gBACZ,IAAI,CAAC;oBAAC,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAClH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACvF,CAAC,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAA+B,EAAE,OAAO,CAAC,CAAC;YAC5F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAClG,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gEAAgE;AAEhE,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM;QACtE,eAAe,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;IACvE,OAAO,CAAC,KAAK,CACX,uCAAuC,KAAK,UAAU;QACtD,GAAG,KAAK,CAAC,MAAM,cAAc,cAAc,CAAC,MAAM,cAAc;QAChE,GAAG,YAAY,CAAC,MAAM,aAAa,eAAe,CAAC,MAAM,eAAe;QACxE,GAAG,aAAa,CAAC,MAAM,cAAc,aAAa,CAAC,MAAM,WAAW,CACrE,CAAC;IAEF,4BAA4B;IAC5B,cAAc,EAAE,CAAC;IACjB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;QACnC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,CAAuB,CAAC;QACxF,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC9D,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,IAAI,GAA4B,EAAE,KAAK,EAAE,CAAC;QAChD,IAAI,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC;YAAC,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;QAClH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACvF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDef } from "./tools.js";
2
+ export declare const SESSION_TOOLS: ToolDef[];
3
+ export declare function handleSessionTool(toolName: string, args: Record<string, unknown>): Promise<unknown>;