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:
Peter Steinberger 2025-07-01 19:37:02 +01:00
parent a6488b5ad9
commit c2f0b79cec
4 changed files with 17 additions and 3 deletions

View file

@ -139,6 +139,8 @@ final class WindowTracker {
return []
}
let logger = Logger(subsystem: "sh.vibetunnel.vibetunnel", category: "WindowTracker")
return windowList.compactMap { windowDict in
// Extract window properties
guard let ownerPID = windowDict[kCGWindowOwnerPID as String] as? pid_t,
@ -148,6 +150,11 @@ final class WindowTracker {
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
// Match by process name, app name, or bundle identifier parts

View file

@ -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

View file

@ -82,6 +82,7 @@ export function createLogRoutes(_config?: LogRoutesConfig): Router {
return res.json({
exists: false,
size: 0,
lastModified: null,
path: logPath,
});
}

View file

@ -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;