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.
Files changed (108) hide show
  1. package/dist/cdp-monitor.d.ts.map +1 -1
  2. package/dist/cdp-monitor.js +40 -30
  3. package/dist/cdp-monitor.js.map +1 -1
  4. package/dist/cli.js +12 -12
  5. package/dist/cli.js.map +1 -1
  6. package/dist/constants/log-colors.d.ts +20 -23
  7. package/dist/constants/log-colors.d.ts.map +1 -1
  8. package/dist/constants/log-colors.js +25 -26
  9. package/dist/constants/log-colors.js.map +1 -1
  10. package/dist/dev-environment.d.ts.map +1 -1
  11. package/dist/dev-environment.js +15 -20
  12. package/dist/dev-environment.js.map +1 -1
  13. package/dist/screencast-manager.d.ts +0 -1
  14. package/dist/screencast-manager.d.ts.map +1 -1
  15. package/dist/screencast-manager.js +47 -9
  16. package/dist/screencast-manager.js.map +1 -1
  17. package/dist/src/tui-interface-impl.tsx +43 -26
  18. package/dist/tui-interface-impl.d.ts.map +1 -1
  19. package/dist/tui-interface-impl.js +35 -22
  20. package/dist/tui-interface-impl.js.map +1 -1
  21. package/mcp-server/.next/BUILD_ID +1 -1
  22. package/mcp-server/.next/build-manifest.json +5 -5
  23. package/mcp-server/.next/fallback-build-manifest.json +2 -2
  24. package/mcp-server/.next/prerender-manifest.json +3 -3
  25. package/mcp-server/.next/server/app/_global-error/page/build-manifest.json +3 -3
  26. package/mcp-server/.next/server/app/_global-error/page.js.nft.json +1 -1
  27. package/mcp-server/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  28. package/mcp-server/.next/server/app/_global-error.html +2 -2
  29. package/mcp-server/.next/server/app/_global-error.rsc +1 -1
  30. package/mcp-server/.next/server/app/_not-found/page/build-manifest.json +3 -3
  31. package/mcp-server/.next/server/app/_not-found/page.js.nft.json +1 -1
  32. package/mcp-server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  33. package/mcp-server/.next/server/app/_not-found.html +1 -1
  34. package/mcp-server/.next/server/app/_not-found.rsc +2 -2
  35. package/mcp-server/.next/server/app/index.html +1 -1
  36. package/mcp-server/.next/server/app/index.rsc +3 -3
  37. package/mcp-server/.next/server/app/logs/page/build-manifest.json +3 -3
  38. package/mcp-server/.next/server/app/logs/page.js.nft.json +1 -1
  39. package/mcp-server/.next/server/app/logs/page_client-reference-manifest.js +1 -1
  40. package/mcp-server/.next/server/app/mcp/route.js +2 -2
  41. package/mcp-server/.next/server/app/page/build-manifest.json +3 -3
  42. package/mcp-server/.next/server/app/page.js.nft.json +1 -1
  43. package/mcp-server/.next/server/app/page_client-reference-manifest.js +1 -1
  44. package/mcp-server/.next/server/app/video/[session]/page/build-manifest.json +3 -3
  45. package/mcp-server/.next/server/app/video/[session]/page.js.nft.json +1 -1
  46. package/mcp-server/.next/server/app/video/[session]/page_client-reference-manifest.js +1 -1
  47. package/mcp-server/.next/server/chunks/[root-of-the-server]__00592d3f._.js +64 -7
  48. package/mcp-server/.next/server/chunks/[root-of-the-server]__00592d3f._.js.map +1 -1
  49. package/mcp-server/.next/server/chunks/[root-of-the-server]__177c72c6._.js +5 -23
  50. package/mcp-server/.next/server/chunks/[root-of-the-server]__177c72c6._.js.map +1 -1
  51. package/mcp-server/.next/server/chunks/d1d76_next_dist_esm_build_templates_app-route_820fc951.js +1 -1
  52. package/mcp-server/.next/server/chunks/d1d76_next_dist_esm_build_templates_app-route_820fc951.js.map +1 -1
  53. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__22d96eb1._.js +3 -0
  54. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__22d96eb1._.js.map +1 -0
  55. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__63dd19ce._.js +3 -0
  56. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__63dd19ce._.js.map +1 -0
  57. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__94d8e211._.js +3 -0
  58. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__94d8e211._.js.map +1 -0
  59. package/mcp-server/.next/server/chunks/ssr/{[root-of-the-server]__0217e89c._.js → [root-of-the-server]__cf17e26a._.js} +2 -2
  60. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__cf17e26a._.js.map +1 -0
  61. package/mcp-server/.next/server/chunks/ssr/_96ba1d8e._.js +8 -0
  62. package/mcp-server/.next/server/chunks/ssr/_96ba1d8e._.js.map +1 -0
  63. package/mcp-server/.next/server/chunks/ssr/_aa32a659._.js +3 -0
  64. package/mcp-server/.next/server/chunks/ssr/_aa32a659._.js.map +1 -0
  65. package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_b2368b47._.js +3 -0
  66. package/mcp-server/.next/server/chunks/ssr/node_modules__pnpm_b2368b47._.js.map +1 -0
  67. package/mcp-server/.next/server/middleware-build-manifest.js +3 -3
  68. package/mcp-server/.next/server/server-reference-manifest.js +1 -1
  69. package/mcp-server/.next/server/server-reference-manifest.json +1 -1
  70. package/mcp-server/.next/static/chunks/{3d37ed424c6aaf63.css → 0cf268b98f36b0b5.css} +1 -1
  71. package/mcp-server/.next/static/chunks/4b6eda65c6f5aada.js +1 -0
  72. package/mcp-server/.next/static/chunks/55cedb1a993e951c.js +1 -0
  73. package/mcp-server/.next/static/chunks/5fdb882fe407a798.js +1 -0
  74. package/mcp-server/.next/static/chunks/7abbb9a17b62c1fa.js +1 -0
  75. package/mcp-server/.next/static/chunks/98e04adc8a00688a.js +1 -0
  76. package/mcp-server/.next/static/chunks/db42008ac1e97815.js +1 -0
  77. package/mcp-server/.next/static/chunks/f08166f7946c2e06.js +1 -0
  78. package/mcp-server/.next/static/chunks/{turbopack-9656e7304584cab2.js → turbopack-7112e6b6aee1d84f.js} +1 -1
  79. package/mcp-server/app/api/jank/[session]/route.ts +1 -1
  80. package/mcp-server/app/logs/LogsClient.tsx +37 -37
  81. package/mcp-server/app/mcp/route.ts +26 -112
  82. package/mcp-server/app/mcp/tools.ts +455 -20
  83. package/mcp-server/app/video/[session]/page.tsx +4 -2
  84. package/package.json +1 -1
  85. package/src/tui-interface-impl.tsx +43 -26
  86. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__0217e89c._.js.map +0 -1
  87. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__91510608._.js +0 -3
  88. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__91510608._.js.map +0 -1
  89. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__e1bc1b8a._.js +0 -3
  90. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__e1bc1b8a._.js.map +0 -1
  91. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__fb40854a._.js +0 -3
  92. package/mcp-server/.next/server/chunks/ssr/[root-of-the-server]__fb40854a._.js.map +0 -1
  93. package/mcp-server/.next/server/chunks/ssr/_62451611._.js +0 -3
  94. package/mcp-server/.next/server/chunks/ssr/_62451611._.js.map +0 -1
  95. package/mcp-server/.next/server/chunks/ssr/_b15f05ee._.js +0 -3
  96. package/mcp-server/.next/server/chunks/ssr/_b15f05ee._.js.map +0 -1
  97. package/mcp-server/.next/server/chunks/ssr/_bacf0748._.js +0 -8
  98. package/mcp-server/.next/server/chunks/ssr/_bacf0748._.js.map +0 -1
  99. package/mcp-server/.next/static/chunks/274a8d03fad7f819.js +0 -1
  100. package/mcp-server/.next/static/chunks/543e14c771a22442.js +0 -1
  101. package/mcp-server/.next/static/chunks/58fdd5192b305065.js +0 -1
  102. package/mcp-server/.next/static/chunks/6bd684c2018a357c.js +0 -1
  103. package/mcp-server/.next/static/chunks/6d59e588420330ca.js +0 -1
  104. package/mcp-server/.next/static/chunks/9625e4da85a132f3.js +0 -1
  105. package/mcp-server/.next/static/chunks/c36bc797d535a4dc.js +0 -1
  106. /package/mcp-server/.next/static/{xyH2s6kJYyYw2j2TSlqpE → A1zsECiQync8Ag1Q1mulr}/_buildManifest.js +0 -0
  107. /package/mcp-server/.next/static/{xyH2s6kJYyYw2j2TSlqpE → A1zsECiQync8Ag1Q1mulr}/_clientMiddlewareManifest.json +0 -0
  108. /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.CONSOLE_DEBUG,
263
- textColor: getTextColor(LOG_COLORS.CONSOLE_DEBUG)
262
+ backgroundColor: LOG_COLORS.INTERACTION,
263
+ textColor: getTextColor(LOG_COLORS.INTERACTION)
264
264
  }
265
- if (message.includes("[CONSOLE ERROR]"))
265
+ if (message.includes("[ERROR]"))
266
266
  return {
267
- type: "CONSOLE ERROR",
268
- backgroundColor: LOG_COLORS.CONSOLE_ERROR,
269
- textColor: getTextColor(LOG_COLORS.CONSOLE_ERROR)
267
+ type: "ERROR",
268
+ backgroundColor: LOG_COLORS.ERROR,
269
+ textColor: getTextColor(LOG_COLORS.ERROR)
270
270
  }
271
- if (message.includes("[CONSOLE WARN]"))
271
+ if (message.includes("[WARNING]"))
272
272
  return {
273
- type: "CONSOLE WARN",
274
- backgroundColor: LOG_COLORS.CONSOLE_WARN,
275
- textColor: getTextColor(LOG_COLORS.CONSOLE_WARN)
273
+ type: "WARNING",
274
+ backgroundColor: LOG_COLORS.WARNING,
275
+ textColor: getTextColor(LOG_COLORS.WARNING)
276
276
  }
277
- if (message.includes("[CONSOLE INFO]"))
277
+ if (message.includes("[INFO]"))
278
278
  return {
279
- type: "CONSOLE INFO",
280
- backgroundColor: LOG_COLORS.CONSOLE_INFO,
281
- textColor: getTextColor(LOG_COLORS.CONSOLE_INFO)
279
+ type: "INFO",
280
+ backgroundColor: LOG_COLORS.INFO,
281
+ textColor: getTextColor(LOG_COLORS.INFO)
282
282
  }
283
- if (message.includes("[CONSOLE LOG]"))
283
+ if (message.includes("[LOG]"))
284
284
  return {
285
- type: "CONSOLE LOG",
286
- backgroundColor: LOG_COLORS.CONSOLE_LOG,
287
- textColor: getTextColor(LOG_COLORS.CONSOLE_LOG)
285
+ type: "LOG",
286
+ backgroundColor: LOG_COLORS.LOG,
287
+ textColor: getTextColor(LOG_COLORS.LOG)
288
288
  }
289
- if (message.includes("[CONSOLE DEBUG]"))
289
+ if (message.includes("[DEBUG]"))
290
290
  return {
291
- type: "CONSOLE DEBUG",
292
- backgroundColor: LOG_COLORS.CONSOLE_DEBUG,
293
- textColor: getTextColor(LOG_COLORS.CONSOLE_DEBUG)
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("[ERROR]") || message.includes("[PAGE ERROR]") || message.includes("[NETWORK ERROR]"))
319
+ if (message.includes("[CRASH]"))
326
320
  return {
327
- type: "ERROR",
328
- backgroundColor: LOG_COLORS.ERROR,
329
- textColor: getTextColor(LOG_COLORS.ERROR)
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("[CRITICAL ERROR]"))
331
+ if (message.includes("[REPLAY]"))
332
332
  return {
333
- type: "CRITICAL ERROR",
334
- backgroundColor: LOG_COLORS.CRITICAL_ERROR,
335
- textColor: getTextColor(LOG_COLORS.CRITICAL_ERROR)
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
- // CDP URL discovery tool for chrome-devtools MCP coordination
89
+ // Visual diff analysis tool
136
90
  server.tool(
137
- "get_shared_cdp_url",
138
- "🔗 **CDP URL SHARING** - Get the CDP WebSocket URL for dev3000's existing Chrome instance. Use this to connect chrome-devtools MCP to dev3000's browser instead of launching a new one.",
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
- projectName: z.string().optional().describe("Project name to get CDP URL for (if multiple dev3000 instances)")
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 { findActiveSessions } = await import("./tools")
144
- const sessions = findActiveSessions()
145
-
146
- if (sessions.length === 0) {
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
- if (cdpUrl) {
177
- return {
178
- content: [
179
- {
180
- type: "text",
181
- text: `🔗 **SHARED CDP URL FOUND**\n\nProject: ${targetSession.projectName}\nCDP URL: ${cdpUrl}\n\n💡 **Usage**: Configure chrome-devtools MCP to connect to this URL instead of launching its own browser instance.\n\n🎯 **Coordination**: Both dev3000 and chrome-devtools will now use the same Chrome instance for seamless automation.`
182
- }
183
- ]
184
- }
185
- } else {
186
- return {
187
- content: [
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