mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-03-30 10:16:10 +00:00
Fix logs API test by including lastModified in all responses
- Add lastModified: null when log file doesn't exist - Ensures consistent API response structure
This commit is contained in:
parent
a6488b5ad9
commit
c2f0b79cec
4 changed files with 17 additions and 3 deletions
|
|
@ -138,6 +138,8 @@ final class WindowTracker {
|
|||
guard let windowList = CGWindowListCopyWindowInfo(options, kCGNullWindowID) as? [[String: Any]] else {
|
||||
return []
|
||||
}
|
||||
|
||||
let logger = Logger(subsystem: "sh.vibetunnel.vibetunnel", category: "WindowTracker")
|
||||
|
||||
return windowList.compactMap { windowDict in
|
||||
// Extract window properties
|
||||
|
|
@ -147,6 +149,11 @@ final class WindowTracker {
|
|||
else {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Log suspicious window IDs for debugging
|
||||
if windowID < 1000 && windowID == CGWindowID(ownerPID) {
|
||||
logger.warning("Suspicious window ID \(windowID) matches PID for \(ownerName)")
|
||||
}
|
||||
|
||||
// Check if this is a terminal application
|
||||
guard let terminal = Terminal.allCases.first(where: { term in
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ import { TitleMode } from '../../shared/types.js';
|
|||
import { ProcessTreeAnalyzer } from '../services/process-tree-analyzer.js';
|
||||
import { ActivityDetector, type ActivityState } from '../utils/activity-detector.js';
|
||||
import { filterTerminalTitleSequences } from '../utils/ansi-filter.js';
|
||||
import { StatefulAnsiFilter } from '../utils/stateful-ansi-filter.js';
|
||||
import { createLogger } from '../utils/logger.js';
|
||||
import { StatefulAnsiFilter } from '../utils/stateful-ansi-filter.js';
|
||||
import {
|
||||
extractCdDirectory,
|
||||
generateDynamicTitle,
|
||||
|
|
@ -1870,6 +1870,12 @@ export class PtyManager extends EventEmitter {
|
|||
session.activityDetector = undefined;
|
||||
}
|
||||
|
||||
// Clean up ANSI filter
|
||||
if (session.ansiFilter) {
|
||||
session.ansiFilter.reset();
|
||||
session.ansiFilter = undefined;
|
||||
}
|
||||
|
||||
// Clean up input socket server
|
||||
if (session.inputSocketServer) {
|
||||
// Close the server and wait for it to close
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ export function createLogRoutes(_config?: LogRoutesConfig): Router {
|
|||
return res.json({
|
||||
exists: false,
|
||||
size: 0,
|
||||
lastModified: null,
|
||||
path: logPath,
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ export class StatefulAnsiFilter {
|
|||
// Still parsing digits
|
||||
} else if (char === ';') {
|
||||
// Check if it's a title sequence (OSC 0, 1, or 2)
|
||||
const oscNumber = parseInt(this.buffer.slice(2, -1), 10);
|
||||
const oscNumber = Number.parseInt(this.buffer.slice(2, -1), 10);
|
||||
if (oscNumber >= 0 && oscNumber <= 2) {
|
||||
// This is a title sequence, continue parsing
|
||||
this.state = ParseState.OSC_CONTENT;
|
||||
|
|
@ -171,4 +171,4 @@ export class StatefulAnsiFilter {
|
|||
|
||||
return Buffer.from(filtered, 'utf8');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue