dev3000 0.0.26 → 0.0.30
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/README.md +15 -5
- package/dist/dev-environment.d.ts +1 -0
- package/dist/dev-environment.d.ts.map +1 -1
- package/dist/dev-environment.js +34 -13
- package/dist/dev-environment.js.map +1 -1
- package/mcp-server/app/api/logs/rotate/route.ts +63 -0
- package/mcp-server/app/api/mcp/[transport]/route.ts +221 -0
- package/mcp-server/app/api/replay/route.ts +4 -4
- package/mcp-server/app/logs/LogsClient.tsx +56 -6
- package/mcp-server/app/page.tsx +1 -1
- package/mcp-server/package.json +3 -1
- package/mcp-server/pnpm-lock.yaml +1491 -0
- package/package.json +4 -2
|
@@ -164,6 +164,7 @@ export default function LogsClient({ version }: LogsClientProps) {
|
|
|
164
164
|
const [showFilters, setShowFilters] = useState(false);
|
|
165
165
|
const [showReplayPreview, setShowReplayPreview] = useState(false);
|
|
166
166
|
const [replayEvents, setReplayEvents] = useState<any[]>([]);
|
|
167
|
+
const [isRotatingLog, setIsRotatingLog] = useState(false);
|
|
167
168
|
const [filters, setFilters] = useState({
|
|
168
169
|
browser: true,
|
|
169
170
|
server: true,
|
|
@@ -381,6 +382,43 @@ export default function LogsClient({ version }: LogsClientProps) {
|
|
|
381
382
|
}
|
|
382
383
|
};
|
|
383
384
|
|
|
385
|
+
const handleRotateLog = async () => {
|
|
386
|
+
if (!currentLogFile || isRotatingLog) return;
|
|
387
|
+
|
|
388
|
+
setIsRotatingLog(true);
|
|
389
|
+
try {
|
|
390
|
+
const response = await fetch('/api/logs/rotate', {
|
|
391
|
+
method: 'POST',
|
|
392
|
+
headers: {
|
|
393
|
+
'Content-Type': 'application/json',
|
|
394
|
+
},
|
|
395
|
+
body: JSON.stringify({ currentLogPath: currentLogFile }),
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
if (response.ok) {
|
|
399
|
+
// Clear current logs from UI
|
|
400
|
+
setLogs([]);
|
|
401
|
+
setLastLogCount(0);
|
|
402
|
+
setLastFetched(null);
|
|
403
|
+
|
|
404
|
+
// Reload available logs to show the new archived file
|
|
405
|
+
await loadAvailableLogs();
|
|
406
|
+
|
|
407
|
+
// Start fresh polling
|
|
408
|
+
await loadInitialLogs();
|
|
409
|
+
} else {
|
|
410
|
+
const error = await response.json();
|
|
411
|
+
console.error('Failed to rotate log:', error);
|
|
412
|
+
alert('Failed to rotate log: ' + error.error);
|
|
413
|
+
}
|
|
414
|
+
} catch (error) {
|
|
415
|
+
console.error('Error rotating log:', error);
|
|
416
|
+
alert('Error rotating log');
|
|
417
|
+
} finally {
|
|
418
|
+
setIsRotatingLog(false);
|
|
419
|
+
}
|
|
420
|
+
};
|
|
421
|
+
|
|
384
422
|
const filteredLogs = useMemo(() => {
|
|
385
423
|
return logs.filter(entry => {
|
|
386
424
|
// Check specific message types first (these override source filtering)
|
|
@@ -470,13 +508,25 @@ export default function LogsClient({ version }: LogsClientProps) {
|
|
|
470
508
|
)}
|
|
471
509
|
</div>
|
|
472
510
|
) : (
|
|
473
|
-
<
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
511
|
+
<div className="flex items-center gap-2">
|
|
512
|
+
<span className="font-mono text-xs text-gray-600 px-3 py-1 whitespace-nowrap">
|
|
513
|
+
{isInitialLoading && !currentLogFile ? (
|
|
514
|
+
<div className="h-4 bg-gray-200 rounded animate-pulse" style={{width: '220px'}} />
|
|
515
|
+
) : (
|
|
516
|
+
currentLogFile ? currentLogFile.split('/').pop() : 'dev3000.log'
|
|
517
|
+
)}
|
|
518
|
+
</span>
|
|
519
|
+
{currentLogFile && !isInitialLoading && (
|
|
520
|
+
<button
|
|
521
|
+
onClick={handleRotateLog}
|
|
522
|
+
disabled={isRotatingLog}
|
|
523
|
+
className="px-2 py-1 text-xs bg-orange-100 text-orange-700 hover:bg-orange-200 rounded transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
|
|
524
|
+
title="Clear logs (rotate current log to archive and start fresh)"
|
|
525
|
+
>
|
|
526
|
+
{isRotatingLog ? '...' : 'Clear'}
|
|
527
|
+
</button>
|
|
478
528
|
)}
|
|
479
|
-
</
|
|
529
|
+
</div>
|
|
480
530
|
)}
|
|
481
531
|
|
|
482
532
|
{logs.length > 0 && (
|
package/mcp-server/app/page.tsx
CHANGED
package/mcp-server/package.json
CHANGED
|
@@ -8,16 +8,18 @@
|
|
|
8
8
|
"start": "next start"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
+
"mcp-handler": "^1.0.2",
|
|
11
12
|
"next": "^15.5.1-canary.13",
|
|
12
13
|
"react": "^18.0.0",
|
|
13
14
|
"react-dom": "^18.0.0",
|
|
14
|
-
"
|
|
15
|
+
"ws": "^8.18.3",
|
|
15
16
|
"zod": "^3.22.4"
|
|
16
17
|
},
|
|
17
18
|
"devDependencies": {
|
|
18
19
|
"@types/node": "^22.0.0",
|
|
19
20
|
"@types/react": "^18.0.0",
|
|
20
21
|
"@types/react-dom": "^18.0.0",
|
|
22
|
+
"@types/ws": "^8.5.12",
|
|
21
23
|
"typescript": "^5.0.0"
|
|
22
24
|
}
|
|
23
25
|
}
|