From 0bcf3f40f42f77f83342dcc43f89629fbb485a29 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Thu, 8 Jan 2026 03:49:19 +0000 Subject: [PATCH] fix(ci): sync logs tail protocol artifacts --- .../ClawdbotProtocol/GatewayModels.swift | 54 +++++++++++++++++++ src/gateway/server-methods/logs.ts | 10 ++-- 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/apps/macos/Sources/ClawdbotProtocol/GatewayModels.swift b/apps/macos/Sources/ClawdbotProtocol/GatewayModels.swift index 2e2900e98..9a4761215 100644 --- a/apps/macos/Sources/ClawdbotProtocol/GatewayModels.swift +++ b/apps/macos/Sources/ClawdbotProtocol/GatewayModels.swift @@ -1417,6 +1417,60 @@ public struct CronRunLogEntry: Codable, Sendable { } } +public struct LogsTailParams: Codable, Sendable { + public let cursor: Int? + public let limit: Int? + public let maxbytes: Int? + + public init( + cursor: Int?, + limit: Int?, + maxbytes: Int? + ) { + self.cursor = cursor + self.limit = limit + self.maxbytes = maxbytes + } + private enum CodingKeys: String, CodingKey { + case cursor + case limit + case maxbytes = "maxBytes" + } +} + +public struct LogsTailResult: Codable, Sendable { + public let file: String + public let cursor: Int + public let size: Int + public let lines: [String] + public let truncated: Bool? + public let reset: Bool? + + public init( + file: String, + cursor: Int, + size: Int, + lines: [String], + truncated: Bool?, + reset: Bool? + ) { + self.file = file + self.cursor = cursor + self.size = size + self.lines = lines + self.truncated = truncated + self.reset = reset + } + private enum CodingKeys: String, CodingKey { + case file + case cursor + case size + case lines + case truncated + case reset + } +} + public struct ChatHistoryParams: Codable, Sendable { public let sessionkey: String public let limit: Int? diff --git a/src/gateway/server-methods/logs.ts b/src/gateway/server-methods/logs.ts index 4d227ed5e..dff1bee6f 100644 --- a/src/gateway/server-methods/logs.ts +++ b/src/gateway/server-methods/logs.ts @@ -1,12 +1,11 @@ import fs from "node:fs/promises"; - +import { getResolvedLoggerSettings } from "../../logging.js"; import { ErrorCodes, errorShape, formatValidationErrors, validateLogsTailParams, } from "../protocol/index.js"; -import { getResolvedLoggerSettings } from "../../logging.js"; import type { GatewayRequestHandlers } from "./types.js"; const DEFAULT_LIMIT = 500; @@ -86,7 +85,7 @@ async function readLogSlice(params: { const length = Math.max(0, size - start); const buffer = Buffer.alloc(length); const readResult = await handle.read(buffer, 0, length, start); - let text = buffer.toString("utf8", 0, readResult.bytesRead); + const text = buffer.toString("utf8", 0, readResult.bytesRead); let lines = text.split("\n"); if (start > 0 && prefix !== "\n") { lines = lines.slice(1); @@ -140,10 +139,7 @@ export const logsHandlers: GatewayRequestHandlers = { respond( false, undefined, - errorShape( - ErrorCodes.UNAVAILABLE, - `log read failed: ${String(err)}`, - ), + errorShape(ErrorCodes.UNAVAILABLE, `log read failed: ${String(err)}`), ); } },