dev3000 0.0.80 → 0.0.82
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/cdp-monitor.d.ts.map +1 -1
- package/dist/cdp-monitor.js +40 -30
- package/dist/cdp-monitor.js.map +1 -1
- package/dist/cli.js +12 -12
- package/dist/cli.js.map +1 -1
- package/dist/constants/log-colors.d.ts +20 -23
- package/dist/constants/log-colors.d.ts.map +1 -1
- package/dist/constants/log-colors.js +25 -26
- package/dist/constants/log-colors.js.map +1 -1
- package/dist/dev-environment.d.ts.map +1 -1
- package/dist/dev-environment.js +15 -20
- package/dist/dev-environment.js.map +1 -1
- package/dist/screencast-manager.d.ts +0 -1
- package/dist/screencast-manager.d.ts.map +1 -1
- package/dist/screencast-manager.js +47 -9
- package/dist/screencast-manager.js.map +1 -1
- package/dist/src/tui-interface-impl.tsx +43 -26
- package/dist/tui-interface-impl.d.ts.map +1 -1
- package/dist/tui-interface-impl.js +35 -22
- package/dist/tui-interface-impl.js.map +1 -1
- package/mcp-server/.next/BUILD_ID +1 -1
- package/mcp-server/.next/build-manifest.json +5 -5
- package/mcp-server/.next/fallback-build-manifest.json +2 -2
- package/mcp-server/.next/prerender-manifest.json +3 -3
- package/mcp-server/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/mcp-server/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/mcp-server/.next/server/app/_global-error.html +2 -2
- package/mcp-server/.next/server/app/_global-error.rsc +1 -1
- package/mcp-server/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/mcp-server/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/mcp-server/.next/server/app/_not-found.html +1 -1
- package/mcp-server/.next/server/app/_not-found.rsc +2 -2
- package/mcp-server/.next/server/app/index.html +1 -1
- package/mcp-server/.next/server/app/index.rsc +3 -3
- package/mcp-server/.next/server/app/logs/page/build-manifest.json +3 -3
- package/mcp-server/.next/server/app/logs/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/logs/page_client-reference-manifest.js +1 -1
- package/mcp-server/.next/server/app/mcp/route.js +2 -2
- package/mcp-server/.next/server/app/page/build-manifest.json +3 -3
- package/mcp-server/.next/server/app/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/page_client-reference-manifest.js +1 -1
- package/mcp-server/.next/server/app/video/[session]/page/build-manifest.json +3 -3
- package/mcp-server/.next/server/app/video/[session]/page.js.nft.json +1 -1
- package/mcp-server/.next/server/app/video/[session]/page_client-reference-manifest.js +1 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__00592d3f._.js +64 -7
- package/mcp-server/.next/server/chunks/[root-of-the-server]__00592d3f._.js.map +1 -1
- package/mcp-server/.next/server/chunks/[root-of-the-server]__177c72c6._.js +5 -23
- package/mcp-server/.next/server/chunks/[root-of-the-server]__177c72c6._.js.map +1 -1
- package/mcp-server/.next/server/chunks/d1d76_next_dist_esm_build_templates_app-route_820fc951.js +1 -1
- package/mcp-server/.next/server/chunks/d1d76_next_dist_esm_build_templates_app-route_820fc951.js.map +1 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__22d96eb1._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__22d96eb1._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__63dd19ce._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__63dd19ce._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__94d8e211._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__94d8e211._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/{[root-of-the-server]__0217e89c._.js → [root-of-the-server]__cf17e26a._.js} +2 -2
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__cf17e26a._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/_96ba1d8e._.js +8 -0
- package/mcp-server/.next/server/chunks/ssr/_96ba1d8e._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/_aa32a659._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/_aa32a659._.js.map +1 -0
- package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_b2368b47._.js +3 -0
- package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_b2368b47._.js.map +1 -0
- package/mcp-server/.next/server/middleware-build-manifest.js +3 -3
- package/mcp-server/.next/server/server-reference-manifest.js +1 -1
- package/mcp-server/.next/server/server-reference-manifest.json +1 -1
- package/mcp-server/.next/static/chunks/{3d37ed424c6aaf63.css → 0cf268b98f36b0b5.css} +1 -1
- package/mcp-server/.next/static/chunks/4b6eda65c6f5aada.js +1 -0
- package/mcp-server/.next/static/chunks/55cedb1a993e951c.js +1 -0
- package/mcp-server/.next/static/chunks/5fdb882fe407a798.js +1 -0
- package/mcp-server/.next/static/chunks/7abbb9a17b62c1fa.js +1 -0
- package/mcp-server/.next/static/chunks/98e04adc8a00688a.js +1 -0
- package/mcp-server/.next/static/chunks/db42008ac1e97815.js +1 -0
- package/mcp-server/.next/static/chunks/f08166f7946c2e06.js +1 -0
- package/mcp-server/.next/static/chunks/{turbopack-9656e7304584cab2.js → turbopack-7112e6b6aee1d84f.js} +1 -1
- package/mcp-server/app/api/jank/[session]/route.ts +1 -1
- package/mcp-server/app/logs/LogsClient.tsx +37 -37
- package/mcp-server/app/mcp/route.ts +26 -112
- package/mcp-server/app/mcp/tools.ts +455 -20
- package/mcp-server/app/video/[session]/page.tsx +4 -2
- package/package.json +1 -1
- package/src/tui-interface-impl.tsx +43 -26
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__0217e89c._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__91510608._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__91510608._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__e1bc1b8a._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__e1bc1b8a._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__fb40854a._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__fb40854a._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/_62451611._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/_62451611._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/_b15f05ee._.js +0 -3
- package/mcp-server/.next/server/chunks/ssr/_b15f05ee._.js.map +0 -1
- package/mcp-server/.next/server/chunks/ssr/_bacf0748._.js +0 -8
- package/mcp-server/.next/server/chunks/ssr/_bacf0748._.js.map +0 -1
- package/mcp-server/.next/static/chunks/274a8d03fad7f819.js +0 -1
- package/mcp-server/.next/static/chunks/543e14c771a22442.js +0 -1
- package/mcp-server/.next/static/chunks/58fdd5192b305065.js +0 -1
- package/mcp-server/.next/static/chunks/6bd684c2018a357c.js +0 -1
- package/mcp-server/.next/static/chunks/6d59e588420330ca.js +0 -1
- package/mcp-server/.next/static/chunks/9625e4da85a132f3.js +0 -1
- package/mcp-server/.next/static/chunks/c36bc797d535a4dc.js +0 -1
- /package/mcp-server/.next/static/{xyH2s6kJYyYw2j2TSlqpE → A1zsECiQync8Ag1Q1mulr}/_buildManifest.js +0 -0
- /package/mcp-server/.next/static/{xyH2s6kJYyYw2j2TSlqpE → A1zsECiQync8Ag1Q1mulr}/_clientMiddlewareManifest.json +0 -0
- /package/mcp-server/.next/static/{xyH2s6kJYyYw2j2TSlqpE → A1zsECiQync8Ag1Q1mulr}/_ssgManifest.js +0 -0
|
@@ -259,38 +259,38 @@ function LogEntryComponent({ entry, darkMode }: { entry: LogEntry; darkMode: boo
|
|
|
259
259
|
if (message.includes("[INTERACTION]"))
|
|
260
260
|
return {
|
|
261
261
|
type: "INTERACTION",
|
|
262
|
-
backgroundColor: LOG_COLORS.
|
|
263
|
-
textColor: getTextColor(LOG_COLORS.
|
|
262
|
+
backgroundColor: LOG_COLORS.INTERACTION,
|
|
263
|
+
textColor: getTextColor(LOG_COLORS.INTERACTION)
|
|
264
264
|
}
|
|
265
|
-
if (message.includes("[
|
|
265
|
+
if (message.includes("[ERROR]"))
|
|
266
266
|
return {
|
|
267
|
-
type: "
|
|
268
|
-
backgroundColor: LOG_COLORS.
|
|
269
|
-
textColor: getTextColor(LOG_COLORS.
|
|
267
|
+
type: "ERROR",
|
|
268
|
+
backgroundColor: LOG_COLORS.ERROR,
|
|
269
|
+
textColor: getTextColor(LOG_COLORS.ERROR)
|
|
270
270
|
}
|
|
271
|
-
if (message.includes("[
|
|
271
|
+
if (message.includes("[WARNING]"))
|
|
272
272
|
return {
|
|
273
|
-
type: "
|
|
274
|
-
backgroundColor: LOG_COLORS.
|
|
275
|
-
textColor: getTextColor(LOG_COLORS.
|
|
273
|
+
type: "WARNING",
|
|
274
|
+
backgroundColor: LOG_COLORS.WARNING,
|
|
275
|
+
textColor: getTextColor(LOG_COLORS.WARNING)
|
|
276
276
|
}
|
|
277
|
-
if (message.includes("[
|
|
277
|
+
if (message.includes("[INFO]"))
|
|
278
278
|
return {
|
|
279
|
-
type: "
|
|
280
|
-
backgroundColor: LOG_COLORS.
|
|
281
|
-
textColor: getTextColor(LOG_COLORS.
|
|
279
|
+
type: "INFO",
|
|
280
|
+
backgroundColor: LOG_COLORS.INFO,
|
|
281
|
+
textColor: getTextColor(LOG_COLORS.INFO)
|
|
282
282
|
}
|
|
283
|
-
if (message.includes("[
|
|
283
|
+
if (message.includes("[LOG]"))
|
|
284
284
|
return {
|
|
285
|
-
type: "
|
|
286
|
-
backgroundColor: LOG_COLORS.
|
|
287
|
-
textColor: getTextColor(LOG_COLORS.
|
|
285
|
+
type: "LOG",
|
|
286
|
+
backgroundColor: LOG_COLORS.LOG,
|
|
287
|
+
textColor: getTextColor(LOG_COLORS.LOG)
|
|
288
288
|
}
|
|
289
|
-
if (message.includes("[
|
|
289
|
+
if (message.includes("[DEBUG]"))
|
|
290
290
|
return {
|
|
291
|
-
type: "
|
|
292
|
-
backgroundColor: LOG_COLORS.
|
|
293
|
-
textColor: getTextColor(LOG_COLORS.
|
|
291
|
+
type: "DEBUG",
|
|
292
|
+
backgroundColor: LOG_COLORS.DEBUG,
|
|
293
|
+
textColor: getTextColor(LOG_COLORS.DEBUG)
|
|
294
294
|
}
|
|
295
295
|
if (message.includes("[SCREENSHOT]"))
|
|
296
296
|
return {
|
|
@@ -298,13 +298,7 @@ function LogEntryComponent({ entry, darkMode }: { entry: LogEntry; darkMode: boo
|
|
|
298
298
|
backgroundColor: LOG_COLORS.SCREENSHOT,
|
|
299
299
|
textColor: getTextColor(LOG_COLORS.SCREENSHOT)
|
|
300
300
|
}
|
|
301
|
-
if (message.includes("[NAVIGATION]") || message.includes("[PAGE]"))
|
|
302
|
-
return {
|
|
303
|
-
type: "PAGE",
|
|
304
|
-
backgroundColor: LOG_COLORS.PAGE,
|
|
305
|
-
textColor: getTextColor(LOG_COLORS.PAGE)
|
|
306
|
-
}
|
|
307
|
-
if (message.includes("[DOM]"))
|
|
301
|
+
if (message.includes("[NAVIGATION]") || message.includes("[PAGE]") || message.includes("[DOM]"))
|
|
308
302
|
return {
|
|
309
303
|
type: "DOM",
|
|
310
304
|
backgroundColor: LOG_COLORS.DOM,
|
|
@@ -322,17 +316,23 @@ function LogEntryComponent({ entry, darkMode }: { entry: LogEntry; darkMode: boo
|
|
|
322
316
|
backgroundColor: LOG_COLORS.NETWORK,
|
|
323
317
|
textColor: getTextColor(LOG_COLORS.NETWORK)
|
|
324
318
|
}
|
|
325
|
-
if (message.includes("[
|
|
319
|
+
if (message.includes("[CRASH]"))
|
|
326
320
|
return {
|
|
327
|
-
type: "
|
|
328
|
-
backgroundColor: LOG_COLORS.
|
|
329
|
-
textColor: getTextColor(LOG_COLORS.
|
|
321
|
+
type: "CRASH",
|
|
322
|
+
backgroundColor: LOG_COLORS.CRASH,
|
|
323
|
+
textColor: getTextColor(LOG_COLORS.CRASH)
|
|
324
|
+
}
|
|
325
|
+
if (message.includes("[CHROME]"))
|
|
326
|
+
return {
|
|
327
|
+
type: "CHROME",
|
|
328
|
+
backgroundColor: LOG_COLORS.CHROME,
|
|
329
|
+
textColor: getTextColor(LOG_COLORS.CHROME)
|
|
330
330
|
}
|
|
331
|
-
if (message.includes("[
|
|
331
|
+
if (message.includes("[REPLAY]"))
|
|
332
332
|
return {
|
|
333
|
-
type: "
|
|
334
|
-
backgroundColor: LOG_COLORS.
|
|
335
|
-
textColor: getTextColor(LOG_COLORS.
|
|
333
|
+
type: "REPLAY",
|
|
334
|
+
backgroundColor: LOG_COLORS.REPLAY,
|
|
335
|
+
textColor: getTextColor(LOG_COLORS.REPLAY)
|
|
336
336
|
}
|
|
337
337
|
return {
|
|
338
338
|
type: "DEFAULT",
|
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
import { readFileSync } from "fs"
|
|
2
1
|
import { createMcpHandler } from "mcp-handler"
|
|
3
2
|
import { z } from "zod"
|
|
4
|
-
import {
|
|
5
|
-
createIntegratedWorkflow,
|
|
6
|
-
discoverAvailableMcps,
|
|
7
|
-
executeBrowserAction,
|
|
8
|
-
fixMyApp,
|
|
9
|
-
TOOL_DESCRIPTIONS
|
|
10
|
-
} from "./tools"
|
|
3
|
+
import { executeBrowserAction, findComponentSource, fixMyApp, TOOL_DESCRIPTIONS } from "./tools"
|
|
11
4
|
|
|
12
5
|
const handler = createMcpHandler(
|
|
13
6
|
(server) => {
|
|
@@ -75,45 +68,6 @@ const handler = createMcpHandler(
|
|
|
75
68
|
}
|
|
76
69
|
)
|
|
77
70
|
|
|
78
|
-
// Integrated workflow orchestration tool
|
|
79
|
-
server.tool(
|
|
80
|
-
"create_integrated_workflow",
|
|
81
|
-
TOOL_DESCRIPTIONS.create_integrated_workflow,
|
|
82
|
-
{
|
|
83
|
-
availableMcps: z
|
|
84
|
-
.array(z.string())
|
|
85
|
-
.optional()
|
|
86
|
-
.describe(
|
|
87
|
-
"Array of available MCPs (e.g., ['nextjs-dev', 'chrome-devtools']). If not provided, will auto-discover."
|
|
88
|
-
),
|
|
89
|
-
focusArea: z.string().optional().describe("Debugging focus area: 'build', 'runtime', 'network', 'ui', 'all'"),
|
|
90
|
-
errorContext: z.string().optional().describe("Known error context to help create targeted workflow")
|
|
91
|
-
},
|
|
92
|
-
async (params) => {
|
|
93
|
-
return createIntegratedWorkflow(params)
|
|
94
|
-
}
|
|
95
|
-
)
|
|
96
|
-
|
|
97
|
-
// MCP discovery tool
|
|
98
|
-
server.tool(
|
|
99
|
-
"discover_available_mcps",
|
|
100
|
-
TOOL_DESCRIPTIONS.discover_available_mcps,
|
|
101
|
-
{
|
|
102
|
-
projectName: z.string().optional().describe("Project name to associate with discovery logging")
|
|
103
|
-
},
|
|
104
|
-
async (params) => {
|
|
105
|
-
const discoveredMcps = await discoverAvailableMcps(params.projectName)
|
|
106
|
-
return {
|
|
107
|
-
content: [
|
|
108
|
-
{
|
|
109
|
-
type: "text",
|
|
110
|
-
text: `🔍 **MCP DISCOVERY RESULTS**\n\nDiscovered MCPs: ${discoveredMcps.length > 0 ? discoveredMcps.join(", ") : "none"}\n\n${discoveredMcps.length > 0 ? `✅ Found ${discoveredMcps.length} compatible MCP(s)! These can now be used with create_integrated_workflow for enhanced debugging.` : "⚠️ No MCPs detected. Make sure other MCP servers are running and try again."}\n\n💡 All discovery attempts have been logged to your dev3000 log file with [D3K] tags.`
|
|
111
|
-
}
|
|
112
|
-
]
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
)
|
|
116
|
-
|
|
117
71
|
// Browser interaction tool
|
|
118
72
|
server.tool(
|
|
119
73
|
"execute_browser_action",
|
|
@@ -132,76 +86,36 @@ const handler = createMcpHandler(
|
|
|
132
86
|
}
|
|
133
87
|
)
|
|
134
88
|
|
|
135
|
-
//
|
|
89
|
+
// Visual diff analysis tool
|
|
136
90
|
server.tool(
|
|
137
|
-
"
|
|
138
|
-
"
|
|
91
|
+
"analyze_visual_diff",
|
|
92
|
+
"🔍 **VISUAL DIFF ANALYZER** - Analyzes two screenshots and provides a verbal description of the visual differences. Perfect for understanding what changed between before/after frames in layout shift detection.\n\n💡 This tool loads both images and describes what elements appeared, moved, or changed that could have caused the layout shift.",
|
|
139
93
|
{
|
|
140
|
-
|
|
94
|
+
beforeImageUrl: z.string().describe("URL of the 'before' screenshot"),
|
|
95
|
+
afterImageUrl: z.string().describe("URL of the 'after' screenshot"),
|
|
96
|
+
context: z
|
|
97
|
+
.string()
|
|
98
|
+
.optional()
|
|
99
|
+
.describe("Optional context about what to look for (e.g., 'navigation header shift')")
|
|
141
100
|
},
|
|
142
101
|
async (params) => {
|
|
143
|
-
const {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
return {
|
|
148
|
-
content: [
|
|
149
|
-
{
|
|
150
|
-
type: "text",
|
|
151
|
-
text: "❌ No active dev3000 sessions found. Make sure dev3000 is running with browser monitoring."
|
|
152
|
-
}
|
|
153
|
-
]
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
const targetSession = params.projectName
|
|
158
|
-
? sessions.find((s) => s.projectName === params.projectName)
|
|
159
|
-
: sessions[0]
|
|
160
|
-
|
|
161
|
-
if (!targetSession) {
|
|
162
|
-
return {
|
|
163
|
-
content: [
|
|
164
|
-
{
|
|
165
|
-
type: "text",
|
|
166
|
-
text: `❌ No dev3000 session found for project: ${params.projectName}. Available projects: ${sessions.map((s) => s.projectName).join(", ")}`
|
|
167
|
-
}
|
|
168
|
-
]
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
try {
|
|
173
|
-
const sessionData = JSON.parse(readFileSync(targetSession.sessionFile, "utf-8"))
|
|
174
|
-
const cdpUrl = sessionData.cdpUrl
|
|
102
|
+
const { analyzeVisualDiff } = await import("./tools")
|
|
103
|
+
return analyzeVisualDiff(params)
|
|
104
|
+
}
|
|
105
|
+
)
|
|
175
106
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
{
|
|
189
|
-
type: "text",
|
|
190
|
-
text: `⚠️ **CDP URL NOT READY**\n\nProject: ${targetSession.projectName}\nStatus: Browser may still be initializing\n\n💡 Try again in a few seconds once dev3000's browser is fully started.`
|
|
191
|
-
}
|
|
192
|
-
]
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
} catch (error) {
|
|
196
|
-
return {
|
|
197
|
-
content: [
|
|
198
|
-
{
|
|
199
|
-
type: "text",
|
|
200
|
-
text: `❌ Error reading session data: ${error instanceof Error ? error.message : String(error)}`
|
|
201
|
-
}
|
|
202
|
-
]
|
|
203
|
-
}
|
|
204
|
-
}
|
|
107
|
+
// Component source finder tool
|
|
108
|
+
server.tool(
|
|
109
|
+
"find_component_source",
|
|
110
|
+
TOOL_DESCRIPTIONS.find_component_source,
|
|
111
|
+
{
|
|
112
|
+
selector: z
|
|
113
|
+
.string()
|
|
114
|
+
.describe("CSS selector for the DOM element (e.g., 'nav', '.header', '#main'). Use lowercase for tag names."),
|
|
115
|
+
projectName: z.string().optional().describe("Project name (if multiple dev3000 instances are running)")
|
|
116
|
+
},
|
|
117
|
+
async (params) => {
|
|
118
|
+
return findComponentSource(params)
|
|
205
119
|
}
|
|
206
120
|
)
|
|
207
121
|
|