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

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

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;
@ -171,4 +171,4 @@ export class StatefulAnsiFilter {
return Buffer.from(filtered, 'utf8');
}
}
}