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,271 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ import { readFile, writeFile, mkdir, readdir, unlink } from "node:fs/promises";
4
+ import { existsSync } from "node:fs";
5
+ import * as YAML from "yaml";
6
+ /** Returns the sessions directory, creating it if needed */
7
+ function sessionsDir() {
8
+ const dir = join(homedir(), ".neuron", "sessions");
9
+ if (!existsSync(dir)) {
10
+ mkdir(dir, { recursive: true }).catch(() => { });
11
+ }
12
+ return dir;
13
+ }
14
+ /** Returns the path to a session file */
15
+ function sessionPath(sessionId) {
16
+ return join(sessionsDir(), `${sessionId}.yaml`);
17
+ }
18
+ /** Load a session from disk, returns null if not found */
19
+ async function loadSession(sessionId) {
20
+ const path = sessionPath(sessionId);
21
+ if (!existsSync(path)) {
22
+ return null;
23
+ }
24
+ try {
25
+ const content = await readFile(path, "utf-8");
26
+ return YAML.parse(content);
27
+ }
28
+ catch (error) {
29
+ console.error(`Failed to load session ${sessionId}:`, error);
30
+ return null;
31
+ }
32
+ }
33
+ /** Save a session to disk */
34
+ async function saveSession(state) {
35
+ const path = sessionPath(state.session_id);
36
+ const content = YAML.stringify(state);
37
+ await writeFile(path, content, "utf-8");
38
+ }
39
+ /** Extract recipe slug from session_id (format: slug or slug-label) */
40
+ function extractRecipeSlug(sessionId) {
41
+ // If session_id contains a hyphen, take everything before the last hyphen as the slug
42
+ // Otherwise, the whole session_id is the slug
43
+ const parts = sessionId.split("-");
44
+ if (parts.length > 1) {
45
+ return parts.slice(0, -1).join("-");
46
+ }
47
+ return sessionId;
48
+ }
49
+ export const SESSION_TOOLS = [
50
+ {
51
+ name: "neuron_session_save",
52
+ description: "Save or update session state. Merges with existing state to support resumption across MCP sessions.",
53
+ inputSchema: {
54
+ type: "object",
55
+ properties: {
56
+ session_id: {
57
+ type: "string",
58
+ description: "Session identifier (typically recipe slug or slug-label, e.g. 'instagram-scrape' or 'instagram-scrape-batch1')",
59
+ },
60
+ cursor: {
61
+ description: "Where to resume — typically an index into working_set, a page number, or an ID",
62
+ },
63
+ working_set: {
64
+ type: "array",
65
+ description: "The full list of items to process",
66
+ },
67
+ completed: {
68
+ type: "array",
69
+ description: "Items already processed",
70
+ },
71
+ progress: {
72
+ type: "object",
73
+ description: "Arbitrary progress data (e.g. {sent: 23, total: 50, failed: 2})",
74
+ },
75
+ metadata: {
76
+ type: "object",
77
+ description: "Any extra context (e.g. target username, config)",
78
+ },
79
+ },
80
+ required: ["session_id"],
81
+ },
82
+ },
83
+ {
84
+ name: "neuron_session_load",
85
+ description: "Load session state. Returns null if no session exists, allowing recipes to decide whether to resume or start fresh.",
86
+ inputSchema: {
87
+ type: "object",
88
+ properties: {
89
+ session_id: {
90
+ type: "string",
91
+ description: "Session identifier",
92
+ },
93
+ },
94
+ required: ["session_id"],
95
+ },
96
+ },
97
+ {
98
+ name: "neuron_session_list",
99
+ description: "List all active sessions with progress summaries. Useful for resuming interrupted work or cleaning up stale sessions.",
100
+ inputSchema: {
101
+ type: "object",
102
+ properties: {},
103
+ },
104
+ },
105
+ {
106
+ name: "neuron_session_delete",
107
+ description: "Delete a session (mark it complete). The session file is removed from disk.",
108
+ inputSchema: {
109
+ type: "object",
110
+ properties: {
111
+ session_id: {
112
+ type: "string",
113
+ description: "Session identifier to delete",
114
+ },
115
+ },
116
+ required: ["session_id"],
117
+ },
118
+ },
119
+ {
120
+ name: "neuron_session_checkpoint",
121
+ description: "Quick progress update — increment cursor and move an item from working_set to completed. This is the hot-path call that recipes use after each action (e.g. after scraping one profile, sending one message, etc).",
122
+ inputSchema: {
123
+ type: "object",
124
+ properties: {
125
+ session_id: {
126
+ type: "string",
127
+ description: "Session identifier",
128
+ },
129
+ completed_item: {
130
+ description: "The item just processed. Will be appended to the completed array.",
131
+ },
132
+ },
133
+ required: ["session_id", "completed_item"],
134
+ },
135
+ },
136
+ ];
137
+ export async function handleSessionTool(toolName, args) {
138
+ switch (toolName) {
139
+ case "neuron_session_save": {
140
+ const sessionId = args.session_id;
141
+ if (!sessionId) {
142
+ throw new Error("session_id is required");
143
+ }
144
+ // Load existing session or create new
145
+ let state = await loadSession(sessionId);
146
+ const now = new Date().toISOString();
147
+ if (!state) {
148
+ // New session
149
+ state = {
150
+ session_id: sessionId,
151
+ recipe_slug: extractRecipeSlug(sessionId),
152
+ cursor: args.cursor ?? 0,
153
+ working_set: args.working_set ?? [],
154
+ completed: args.completed ?? [],
155
+ progress: args.progress ?? {},
156
+ metadata: args.metadata ?? {},
157
+ created_at: now,
158
+ updated_at: now,
159
+ checkpoints: 0,
160
+ };
161
+ }
162
+ else {
163
+ // Merge with existing
164
+ if (args.cursor !== undefined)
165
+ state.cursor = args.cursor;
166
+ if (args.working_set !== undefined)
167
+ state.working_set = args.working_set;
168
+ if (args.completed !== undefined)
169
+ state.completed = args.completed;
170
+ if (args.progress !== undefined)
171
+ state.progress = {
172
+ ...state.progress,
173
+ ...args.progress,
174
+ };
175
+ if (args.metadata !== undefined)
176
+ state.metadata = {
177
+ ...state.metadata,
178
+ ...args.metadata,
179
+ };
180
+ state.updated_at = now;
181
+ }
182
+ await saveSession(state);
183
+ return {
184
+ status: "saved",
185
+ session_id: sessionId,
186
+ updated_at: state.updated_at,
187
+ };
188
+ }
189
+ case "neuron_session_load": {
190
+ const sessionId = args.session_id;
191
+ if (!sessionId) {
192
+ throw new Error("session_id is required");
193
+ }
194
+ const state = await loadSession(sessionId);
195
+ return state; // Returns null if not found
196
+ }
197
+ case "neuron_session_list": {
198
+ const dir = sessionsDir();
199
+ if (!existsSync(dir)) {
200
+ return { sessions: [] };
201
+ }
202
+ const files = await readdir(dir);
203
+ const yamlFiles = files.filter((f) => f.endsWith(".yaml"));
204
+ const sessions = await Promise.all(yamlFiles.map(async (file) => {
205
+ const sessionId = file.replace(".yaml", "");
206
+ const state = await loadSession(sessionId);
207
+ if (!state)
208
+ return null;
209
+ return {
210
+ session_id: state.session_id,
211
+ recipe_slug: state.recipe_slug,
212
+ created_at: state.created_at,
213
+ updated_at: state.updated_at,
214
+ checkpoints: state.checkpoints,
215
+ progress: state.progress,
216
+ working_set_size: state.working_set.length,
217
+ completed_size: state.completed.length,
218
+ };
219
+ }));
220
+ return {
221
+ sessions: sessions.filter((s) => s !== null),
222
+ };
223
+ }
224
+ case "neuron_session_delete": {
225
+ const sessionId = args.session_id;
226
+ if (!sessionId) {
227
+ throw new Error("session_id is required");
228
+ }
229
+ const path = sessionPath(sessionId);
230
+ if (existsSync(path)) {
231
+ await unlink(path);
232
+ return { status: "deleted", session_id: sessionId };
233
+ }
234
+ return { status: "not_found", session_id: sessionId };
235
+ }
236
+ case "neuron_session_checkpoint": {
237
+ const sessionId = args.session_id;
238
+ const completedItem = args.completed_item;
239
+ if (!sessionId) {
240
+ throw new Error("session_id is required");
241
+ }
242
+ if (completedItem === undefined) {
243
+ throw new Error("completed_item is required");
244
+ }
245
+ // Fast path — load, update, save
246
+ const state = await loadSession(sessionId);
247
+ if (!state) {
248
+ throw new Error(`Session ${sessionId} not found. Call neuron_session_save first.`);
249
+ }
250
+ // Increment cursor (assume it's numeric, but handle any type)
251
+ if (typeof state.cursor === "number") {
252
+ state.cursor = state.cursor + 1;
253
+ }
254
+ // Move item to completed
255
+ state.completed.push(completedItem);
256
+ state.checkpoints += 1;
257
+ state.updated_at = new Date().toISOString();
258
+ await saveSession(state);
259
+ return {
260
+ status: "checkpoint_saved",
261
+ session_id: sessionId,
262
+ cursor: state.cursor,
263
+ completed_count: state.completed.length,
264
+ checkpoints: state.checkpoints,
265
+ };
266
+ }
267
+ default:
268
+ throw new Error(`Unknown session tool: ${toolName}`);
269
+ }
270
+ }
271
+ //# sourceMappingURL=session-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../src/session-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAgB7B,4DAA4D;AAC5D,SAAS,WAAW;IAClB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,yCAAyC;AACzC,SAAS,WAAW,CAAC,SAAiB;IACpC,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,0DAA0D;AAC1D,KAAK,UAAU,WAAW,CAAC,SAAiB;IAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,6BAA6B;AAC7B,KAAK,UAAU,WAAW,CAAC,KAAmB;IAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,uEAAuE;AACvE,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,sFAAsF;IACtF,8CAA8C;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAc;IACtC;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,qGAAqG;QACvG,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,gHAAgH;iBACnH;gBACD,MAAM,EAAE;oBACN,WAAW,EACT,gFAAgF;iBACnF;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,mCAAmC;iBACjD;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,yBAAyB;iBACvC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,iEAAiE;iBACpE;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kDAAkD;iBAChE;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,qHAAqH;QACvH,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oBAAoB;iBAClC;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,uHAAuH;QACzH,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,6EAA6E;QAC/E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;iBAC5C;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB;KACF;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,oNAAoN;QACtN,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oBAAoB;iBAClC;gBACD,cAAc,EAAE;oBACd,WAAW,EACT,mEAAmE;iBACtE;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC;SAC3C;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,IAA6B;IAE7B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAoB,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;YAED,sCAAsC;YACtC,IAAI,KAAK,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAErC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,cAAc;gBACd,KAAK,GAAG;oBACN,UAAU,EAAE,SAAS;oBACrB,WAAW,EAAE,iBAAiB,CAAC,SAAS,CAAC;oBACzC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;oBACxB,WAAW,EAAG,IAAI,CAAC,WAAyB,IAAI,EAAE;oBAClD,SAAS,EAAG,IAAI,CAAC,SAAuB,IAAI,EAAE;oBAC9C,QAAQ,EAAG,IAAI,CAAC,QAAoC,IAAI,EAAE;oBAC1D,QAAQ,EAAG,IAAI,CAAC,QAAoC,IAAI,EAAE;oBAC1D,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,GAAG;oBACf,WAAW,EAAE,CAAC;iBACf,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,sBAAsB;gBACtB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;oBAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC1D,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;oBAChC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAwB,CAAC;gBACpD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;oBAC9B,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAsB,CAAC;gBAChD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;oBAC7B,KAAK,CAAC,QAAQ,GAAG;wBACf,GAAG,KAAK,CAAC,QAAQ;wBACjB,GAAI,IAAI,CAAC,QAAoC;qBAC9C,CAAC;gBACJ,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;oBAC7B,KAAK,CAAC,QAAQ,GAAG;wBACf,GAAG,KAAK,CAAC,QAAQ;wBACjB,GAAI,IAAI,CAAC,QAAoC;qBAC9C,CAAC;gBACJ,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;YACzB,CAAC;YAED,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,SAAS;gBACrB,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC;QACJ,CAAC;QAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAoB,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;YAC3C,OAAO,KAAK,CAAC,CAAC,4BAA4B;QAC5C,CAAC;QAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YAC1B,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAE3D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC;gBAExB,OAAO;oBACL,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,gBAAgB,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM;oBAC1C,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM;iBACvC,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;YAEF,OAAO;gBACL,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;aAC7C,CAAC;QACJ,CAAC;QAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAoB,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;YACtD,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QACxD,CAAC;QAED,KAAK,2BAA2B,CAAC,CAAC,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAoB,CAAC;YAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;YAE1C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,CAAC;YAED,iCAAiC;YACjC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,WAAW,SAAS,6CAA6C,CAClE,CAAC;YACJ,CAAC;YAED,8DAA8D;YAC9D,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACrC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAClC,CAAC;YAED,yBAAyB;YACzB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACpC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;YACvB,KAAK,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAE5C,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;YAEzB,OAAO;gBACL,MAAM,EAAE,kBAAkB;gBAC1B,UAAU,EAAE,SAAS;gBACrB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM;gBACvC,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC;QACJ,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "neuron-inspector",
3
- "version": "0.3.2",
4
- "description": "64 tools for AI agents. Turn Chrome into an MCP server — inspect DOM, automate clicks, audit security, mock APIs, extract data, record demos, self-improving recipes.",
3
+ "version": "0.4.1",
4
+ "description": "91 tools for AI agents. Turn Chrome into an MCP server — inspect DOM, automate clicks, audit security, mock APIs, extract data, download videos, schedule agents, monitor pages, self-improving recipes.",
5
5
  "type": "module",
6
6
  "main": "dist/server.js",
7
7
  "bin": {