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.
@@ -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
- <span className="font-mono text-xs text-gray-600 px-3 py-1 whitespace-nowrap">
474
- {isInitialLoading && !currentLogFile ? (
475
- <div className="h-4 bg-gray-200 rounded animate-pulse" style={{width: '220px'}} />
476
- ) : (
477
- currentLogFile ? currentLogFile.split('/').pop() : 'dev3000.log'
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
- </span>
529
+ </div>
480
530
  )}
481
531
 
482
532
  {logs.length > 0 && (
@@ -28,7 +28,7 @@ export default function HomePage() {
28
28
  </a>
29
29
 
30
30
  <a
31
- href="/api/mcp/http"
31
+ href="/api/mcp/mcp"
32
32
  className="block w-full bg-green-500 text-white text-center py-3 px-4 rounded hover:bg-green-600 transition-colors"
33
33
  >
34
34
  🤖 MCP Endpoint
@@ -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
- "mcp-handler": "^1.0.2",
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
  }