diff --git a/agents/claude.ts b/agents/claude.ts index 8bf82cb..9bc5934 100644 --- a/agents/claude.ts +++ b/agents/claude.ts @@ -173,8 +173,7 @@ export const claude = agent({ onStderr: (chunk) => { const trimmed = chunk.trim(); if (trimmed) { - log.debug(`[claude stderr] ${trimmed}`); - log.warning(trimmed); + log.info(`[claude stderr] ${trimmed}`); finalOutput += trimmed + "\n"; } }, @@ -267,7 +266,7 @@ const messageHandlers: SDKMessageHandlers = { // Log bash output in a collapsed group log.startGroup(`bash output`); if (content.is_error) { - log.warning(outputContent); + log.info(outputContent); } else { log.info(outputContent); } @@ -275,7 +274,7 @@ const messageHandlers: SDKMessageHandlers = { // Clean up the tracked ID bashToolIds.delete(toolUseId); } else if (content.is_error) { - log.warning(`Tool error: ${outputContent}`); + log.info(`Tool error: ${outputContent}`); } else { // log successful non-bash tool result at debug level log.debug(`tool output: ${outputContent}`); @@ -310,11 +309,11 @@ const messageHandlers: SDKMessageHandlers = { ], ]); } else if (data.subtype === "error_max_turns") { - log.error(`Max turns reached: ${JSON.stringify(data)}`); + log.info(`Max turns reached: ${JSON.stringify(data)}`); } else if (data.subtype === "error_during_execution") { - log.error(`Execution error: ${JSON.stringify(data)}`); + log.info(`Execution error: ${JSON.stringify(data)}`); } else { - log.error(`Failed: ${JSON.stringify(data)}`); + log.info(`Failed: ${JSON.stringify(data)}`); } }, system: () => {}, diff --git a/agents/codex.ts b/agents/codex.ts index d228362..7635179 100644 --- a/agents/codex.ts +++ b/agents/codex.ts @@ -43,7 +43,7 @@ async function isModelAvailable(ctx: { apiKey: string; model: string }): Promise signal: AbortSignal.timeout(10_000), }); if (!response.ok) { - log.warning( + log.info( `failed to list models (HTTP ${response.status}), falling back to ${FALLBACK_MODEL}` ); return false; @@ -51,7 +51,7 @@ async function isModelAvailable(ctx: { apiKey: string; model: string }): Promise const body = (await response.json()) as { data: Array<{ id: string }> }; return body.data.some((m) => m.id === ctx.model); } catch (err) { - log.warning(`failed to list models: ${err}, falling back to ${FALLBACK_MODEL}`); + log.info(`failed to list models: ${err}, falling back to ${FALLBACK_MODEL}`); return false; } } @@ -262,8 +262,7 @@ export const codex = agent({ onStderr: (chunk) => { const trimmed = chunk.trim(); if (trimmed) { - log.debug(`[codex stderr] ${trimmed}`); - log.warning(trimmed); + log.info(`[codex stderr] ${trimmed}`); finalOutput += trimmed + "\n"; } }, @@ -319,7 +318,7 @@ const messageHandlers: { ]); }, "turn.failed": (event) => { - log.error(`Turn failed: ${event.error.message}`); + log.info(`Turn failed: ${event.error.message}`); }, "item.started": (event, commandExecutionIds, thinkingTimer) => { const item = event.item; @@ -362,7 +361,7 @@ const messageHandlers: { thinkingTimer.markToolResult(); log.startGroup(`bash output`); if (item.status === "failed" || (item.exit_code !== undefined && item.exit_code !== 0)) { - log.warning(item.aggregated_output || "Command failed"); + log.info(item.aggregated_output || "Command failed"); } else { log.info(item.aggregated_output || ""); } @@ -372,7 +371,7 @@ const messageHandlers: { } else if (item.type === "mcp_tool_call") { thinkingTimer.markToolResult(); if (item.status === "failed" && item.error) { - log.warning(`MCP tool call failed: ${item.error.message}`); + log.info(`MCP tool call failed: ${item.error.message}`); } else if ((item as any).output) { // log successful MCP tool call output so it appears in captured output const output = (item as any).output; @@ -388,6 +387,6 @@ const messageHandlers: { } }, error: (event) => { - log.error(`Error: ${event.message}`); + log.info(`Error: ${event.message}`); }, }; diff --git a/agents/cursor.ts b/agents/cursor.ts index f72ec8a..55e1467 100644 --- a/agents/cursor.ts +++ b/agents/cursor.ts @@ -210,7 +210,7 @@ export const cursor = agent({ const result = event.tool_call?.mcpToolCall?.result?.success; const isError = result?.isError; if (isError) { - log.warning("Tool call failed"); + log.info("Tool call failed"); } else { // log successful tool result so it appears in output // handle both formats: { text: string } or { text: { text: string } } @@ -320,12 +320,12 @@ export const cursor = agent({ const text = data.toString(); stderr += text; process.stderr.write(text); - log.warning(text); + log.info(text); }); child.on("close", async (code, signal) => { if (signal) { - log.warning(`Cursor CLI terminated by signal: ${signal}`); + log.info(`Cursor CLI terminated by signal: ${signal}`); } const duration = ((performance.now() - startTime) / 1000).toFixed(1); diff --git a/agents/gemini.ts b/agents/gemini.ts index b28bc06..5bd99d4 100644 --- a/agents/gemini.ts +++ b/agents/gemini.ts @@ -149,7 +149,7 @@ const messageHandlers = { if (event.status === "error") { const errorMsg = typeof event.output === "string" ? event.output : JSON.stringify(event.output); - log.warning(`Tool call failed: ${errorMsg}`); + log.info(`Tool call failed: ${errorMsg}`); } else if (event.output) { // log successful tool result so it appears in output const outputStr = @@ -270,8 +270,7 @@ export const gemini = agent({ onStderr: (chunk) => { const trimmed = chunk.trim(); if (trimmed) { - log.debug(`[gemini stderr] ${trimmed}`); - log.warning(trimmed); + log.info(`[gemini stderr] ${trimmed}`); finalOutput += trimmed + "\n"; } }, @@ -286,7 +285,7 @@ export const gemini = agent({ // retry on transient API errors (500, 503, INTERNAL, etc.) if (attempt < MAX_ATTEMPTS && isTransientApiError(errorMessage)) { - log.warning( + log.info( `» transient Gemini API error on attempt ${attempt}/${MAX_ATTEMPTS}, retrying in ${RETRY_DELAY_MS / 1000}s...` ); await new Promise((resolve) => setTimeout(resolve, RETRY_DELAY_MS)); @@ -313,7 +312,7 @@ export const gemini = agent({ // retry on transient API errors from spawn exceptions too if (attempt < MAX_ATTEMPTS && isTransientApiError(errorMessage)) { - log.warning( + log.info( `» transient Gemini API error on attempt ${attempt}/${MAX_ATTEMPTS}, retrying in ${RETRY_DELAY_MS / 1000}s...` ); await new Promise((resolve) => setTimeout(resolve, RETRY_DELAY_MS)); diff --git a/agents/opencode.ts b/agents/opencode.ts index b399cb9..0e908b5 100644 --- a/agents/opencode.ts +++ b/agents/opencode.ts @@ -154,7 +154,7 @@ export const opencode = agent({ activeToolCalls > 0 ? ` (waiting for ${activeToolCalls} tool call${activeToolCalls > 1 ? "s" : ""})` : " (OpenCode may be processing internally - LLM calls, planning, etc.)"; - log.warning( + log.info( `» no activity for ${(timeSinceLastActivity / 1000).toFixed(1)}s${toolCallInfo} (${eventCount} events processed so far)` ); } @@ -186,7 +186,7 @@ export const opencode = agent({ const providerError = detectProviderError(trimmed); if (providerError) { lastProviderError = providerError; - log.error(`» provider error detected (${providerError}): ${trimmed.substring(0, 500)}`); + log.info(`» provider error detected (${providerError}): ${trimmed.substring(0, 500)}`); } else { // OpenCode's --print-logs output goes to stderr. demote internal // INFO/DEBUG bus traffic to debug so it doesn't drown out tool @@ -207,9 +207,9 @@ export const opencode = agent({ const diagnosis = lastProviderError ? `provider error: ${lastProviderError}` : "unknown cause (no stdout events received)"; - log.error(`» OpenCode produced 0 events (${diagnosis})`); + log.info(`» OpenCode produced 0 events (${diagnosis})`); if (stderrContext) { - log.error(`» last stderr output:\n${stderrContext}`); + log.info(`» last stderr output:\n${stderrContext}`); } } @@ -263,12 +263,12 @@ export const opencode = agent({ ? "OpenCode produced 0 stdout events - check if the model provider is reachable" : `${eventCount} events were processed before the hang`; - log.error( + log.info( `» OpenCode ${isActivityTimeout ? "hung" : "failed"} after ${(duration / 1000).toFixed(1)}s: ${errorMessage}` ); - log.error(`» diagnosis: ${diagnosis}`); + log.info(`» diagnosis: ${diagnosis}`); if (stderrContext) { - log.error( + log.info( `» recent stderr (last ${Math.min(recentStderr.length, 10)} lines):\n${stderrContext}` ); } @@ -600,7 +600,7 @@ const messageHandlers = { log.debug(` output: ${typeof output === "string" ? output : JSON.stringify(output)}`); } if (toolDuration > 5000) { - log.warning( + log.info( `» ⚠️ tool call took ${(toolDuration / 1000).toFixed(1)}s - this may indicate network latency or slow processing` ); } @@ -608,7 +608,7 @@ const messageHandlers = { } if (status === "error") { const errorMsg = typeof output === "string" ? output : JSON.stringify(output); - log.error(`» ❌ tool call failed: ${errorMsg}`); + log.info(`» ❌ tool call failed: ${errorMsg}`); } else if (output) { // log successful tool result so it appears in captured output const outputStr = typeof output === "string" ? output : JSON.stringify(output); @@ -624,7 +624,7 @@ const messageHandlers = { ); if (event.status === "error") { - log.error(`» OpenCode CLI failed: ${JSON.stringify(event)}`); + log.info(`» OpenCode CLI failed: ${JSON.stringify(event)}`); } else { // log tokens once at the end (use stats from result if available, otherwise use accumulated from step_finish) const inputTokens = event.stats?.input_tokens || accumulatedTokens.input || 0; diff --git a/entry b/entry index a31527e..1492b53 100755 --- a/entry +++ b/entry @@ -451,7 +451,7 @@ var require_tunnel = __commonJS({ connectOptions.headers = connectOptions.headers || {}; connectOptions.headers["Proxy-Authorization"] = "Basic " + new Buffer(connectOptions.proxyAuth).toString("base64"); } - debug2("making CONNECT request"); + debug3("making CONNECT request"); var connectReq = self2.request(connectOptions); connectReq.useChunkedEncodingByDefault = false; connectReq.once("response", onResponse); @@ -471,7 +471,7 @@ var require_tunnel = __commonJS({ connectReq.removeAllListeners(); socket.removeAllListeners(); if (res.statusCode !== 200) { - debug2( + debug3( "tunneling socket could not be established, statusCode=%d", res.statusCode ); @@ -483,7 +483,7 @@ var require_tunnel = __commonJS({ return; } if (head.length > 0) { - debug2("got illegal response body from proxy"); + debug3("got illegal response body from proxy"); socket.destroy(); var error49 = new Error("got illegal response body from proxy"); error49.code = "ECONNRESET"; @@ -491,13 +491,13 @@ var require_tunnel = __commonJS({ self2.removeSocket(placeholder); return; } - debug2("tunneling connection has established"); + debug3("tunneling connection has established"); self2.sockets[self2.sockets.indexOf(placeholder)] = socket; return cb(socket); } function onError(cause) { connectReq.removeAllListeners(); - debug2( + debug3( "tunneling socket could not be established, cause=%s\n", cause.message, cause.stack @@ -559,9 +559,9 @@ var require_tunnel = __commonJS({ } return target; } - var debug2; + var debug3; if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug2 = function() { + debug3 = function() { var args2 = Array.prototype.slice.call(arguments); if (typeof args2[0] === "string") { args2[0] = "TUNNEL: " + args2[0]; @@ -571,10 +571,10 @@ var require_tunnel = __commonJS({ console.error.apply(console, args2); }; } else { - debug2 = function() { + debug3 = function() { }; } - exports.debug = debug2; + exports.debug = debug3; } }); @@ -19785,10 +19785,10 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); return process.env["RUNNER_DEBUG"] === "1"; } exports.isDebug = isDebug2; - function debug2(message) { + function debug3(message) { (0, command_1.issueCommand)("debug", {}, message); } - exports.debug = debug2; + exports.debug = debug3; function error49(message, properties = {}) { (0, command_1.issueCommand)("error", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message); } @@ -75490,11 +75490,11 @@ var require_common = __commonJS({ let enableOverride = null; let namespacesCache; let enabledCache; - function debug2(...args2) { - if (!debug2.enabled) { + function debug3(...args2) { + if (!debug3.enabled) { return; } - const self2 = debug2; + const self2 = debug3; const curr = Number(/* @__PURE__ */ new Date()); const ms = curr - (prevTime || curr); self2.diff = ms; @@ -75524,12 +75524,12 @@ var require_common = __commonJS({ const logFn = self2.log || createDebug.log; logFn.apply(self2, args2); } - debug2.namespace = namespace; - debug2.useColors = createDebug.useColors(); - debug2.color = createDebug.selectColor(namespace); - debug2.extend = extend3; - debug2.destroy = createDebug.destroy; - Object.defineProperty(debug2, "enabled", { + debug3.namespace = namespace; + debug3.useColors = createDebug.useColors(); + debug3.color = createDebug.selectColor(namespace); + debug3.extend = extend3; + debug3.destroy = createDebug.destroy; + Object.defineProperty(debug3, "enabled", { enumerable: true, configurable: false, get: () => { @@ -75547,9 +75547,9 @@ var require_common = __commonJS({ } }); if (typeof createDebug.init === "function") { - createDebug.init(debug2); + createDebug.init(debug3); } - return debug2; + return debug3; } function extend3(namespace, delimiter) { const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace); @@ -75959,11 +75959,11 @@ var require_node = __commonJS({ function load() { return process.env.DEBUG; } - function init(debug2) { - debug2.inspectOpts = {}; + function init(debug3) { + debug3.inspectOpts = {}; const keys = Object.keys(exports.inspectOpts); for (let i = 0; i < keys.length; i++) { - debug2.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + debug3.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; } } module.exports = require_common()(exports); @@ -76100,13 +76100,13 @@ function mergeArrays(chunks) { } return mergedArray; } -var import_debug, debug, syncBufferSize, ddSignatureArray, eocdSignatureBytes, ZipHandler; +var import_debug, debug2, syncBufferSize, ddSignatureArray, eocdSignatureBytes, ZipHandler; var init_ZipHandler = __esm({ "node_modules/.pnpm/@tokenizer+inflate@0.4.1/node_modules/@tokenizer/inflate/lib/ZipHandler.js"() { init_lib3(); import_debug = __toESM(require_src2(), 1); init_ZipToken(); - debug = (0, import_debug.default)("tokenizer:inflate"); + debug2 = (0, import_debug.default)("tokenizer:inflate"); syncBufferSize = 256 * 1024; ddSignatureArray = signatureToArray(Signature.DataDescriptor); eocdSignatureBytes = signatureToArray(Signature.EndOfCentralDirectory); @@ -76135,14 +76135,14 @@ var init_ZipHandler = __esm({ } async readCentralDirectory() { if (!this.tokenizer.supportsRandomAccess()) { - debug("Cannot reading central-directory without random-read support"); + debug2("Cannot reading central-directory without random-read support"); return; } - debug("Reading central-directory..."); + debug2("Reading central-directory..."); const pos = this.tokenizer.position; const offset = await this.findEndOfCentralDirectoryLocator(); if (offset > 0) { - debug("Central-directory 32-bit signature found"); + debug2("Central-directory 32-bit signature found"); const eocdHeader = await this.tokenizer.readToken(EndOfCentralDirectoryRecordToken, offset); const files = []; this.tokenizer.setPosition(eocdHeader.offsetOfStartOfCd); @@ -76155,7 +76155,7 @@ var init_ZipHandler = __esm({ await this.tokenizer.ignore(entry.extraFieldLength); await this.tokenizer.ignore(entry.fileCommentLength); files.push(entry); - debug(`Add central-directory file-entry: n=${n + 1}/${files.length}: filename=${files[n].filename}`); + debug2(`Add central-directory file-entry: n=${n + 1}/${files.length}: filename=${files[n].filename}`); } this.tokenizer.setPosition(pos); return files; @@ -76179,7 +76179,7 @@ var init_ZipHandler = __esm({ if (zipHeader.dataDescriptor && zipHeader.compressedSize === 0) { const chunks = []; let len = syncBufferSize; - debug("Compressed-file-size unknown, scanning for next data-descriptor-signature...."); + debug2("Compressed-file-size unknown, scanning for next data-descriptor-signature...."); let nextHeaderIndex = -1; while (nextHeaderIndex < 0 && len === syncBufferSize) { len = await this.tokenizer.peekBuffer(this.syncBuffer, { mayBeLess: true }); @@ -76193,22 +76193,22 @@ var init_ZipHandler = __esm({ await this.tokenizer.ignore(size); } } - debug(`Found data-descriptor-signature at pos=${this.tokenizer.position}`); + debug2(`Found data-descriptor-signature at pos=${this.tokenizer.position}`); if (next2.handler) { await this.inflate(zipHeader, mergeArrays(chunks), next2.handler); } } else { if (next2.handler) { - debug(`Reading compressed-file-data: ${zipHeader.compressedSize} bytes`); + debug2(`Reading compressed-file-data: ${zipHeader.compressedSize} bytes`); fileData = new Uint8Array(zipHeader.compressedSize); await this.tokenizer.readBuffer(fileData); await this.inflate(zipHeader, fileData, next2.handler); } else { - debug(`Ignoring compressed-file-data: ${zipHeader.compressedSize} bytes`); + debug2(`Ignoring compressed-file-data: ${zipHeader.compressedSize} bytes`); await this.tokenizer.ignore(zipHeader.compressedSize); } } - debug(`Reading data-descriptor at pos=${this.tokenizer.position}`); + debug2(`Reading data-descriptor at pos=${this.tokenizer.position}`); if (zipHeader.dataDescriptor) { const dataDescriptor = await this.tokenizer.readToken(DataDescriptor); if (dataDescriptor.signature !== 134695760) { @@ -76241,7 +76241,7 @@ var init_ZipHandler = __esm({ if (zipHeader.compressedMethod !== 8) { throw new Error(`Unsupported ZIP compression method: ${zipHeader.compressedMethod}`); } - debug(`Decompress filename=${zipHeader.filename}, compressed-size=${fileData.length}`); + debug2(`Decompress filename=${zipHeader.filename}, compressed-size=${fileData.length}`); const uncompressedData = await _ZipHandler.decompressDeflateRaw(fileData); return cb(uncompressedData); } @@ -95716,9 +95716,9 @@ var require_constants11 = __commonJS({ var require_debug = __commonJS({ "node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.js"(exports, module) { "use strict"; - var debug2 = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args2) => console.error("SEMVER", ...args2) : () => { + var debug3 = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args2) => console.error("SEMVER", ...args2) : () => { }; - module.exports = debug2; + module.exports = debug3; } }); @@ -95731,7 +95731,7 @@ var require_re = __commonJS({ MAX_SAFE_BUILD_LENGTH, MAX_LENGTH } = require_constants11(); - var debug2 = require_debug(); + var debug3 = require_debug(); exports = module.exports = {}; var re = exports.re = []; var safeRe = exports.safeRe = []; @@ -95754,7 +95754,7 @@ var require_re = __commonJS({ var createToken = (name, value2, isGlobal) => { const safe = makeSafeRegex(value2); const index = R++; - debug2(name, index, value2); + debug3(name, index, value2); t[name] = index; src[index] = value2; safeSrc[index] = safe; @@ -95858,7 +95858,7 @@ var require_identifiers = __commonJS({ var require_semver = __commonJS({ "node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.js"(exports, module) { "use strict"; - var debug2 = require_debug(); + var debug3 = require_debug(); var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants11(); var { safeRe: re, t } = require_re(); var parseOptions = require_parse_options(); @@ -95880,7 +95880,7 @@ var require_semver = __commonJS({ `version is longer than ${MAX_LENGTH} characters` ); } - debug2("SemVer", version3, options); + debug3("SemVer", version3, options); this.options = options; this.loose = !!options.loose; this.includePrerelease = !!options.includePrerelease; @@ -95928,7 +95928,7 @@ var require_semver = __commonJS({ return this.version; } compare(other) { - debug2("SemVer.compare", this.version, this.options, other); + debug3("SemVer.compare", this.version, this.options, other); if (!(other instanceof _SemVer)) { if (typeof other === "string" && other === this.version) { return 0; @@ -95979,7 +95979,7 @@ var require_semver = __commonJS({ do { const a = this.prerelease[i]; const b = other.prerelease[i]; - debug2("prerelease compare", i, a, b); + debug3("prerelease compare", i, a, b); if (a === void 0 && b === void 0) { return 0; } else if (b === void 0) { @@ -96001,7 +96001,7 @@ var require_semver = __commonJS({ do { const a = this.build[i]; const b = other.build[i]; - debug2("build compare", i, a, b); + debug3("build compare", i, a, b); if (a === void 0 && b === void 0) { return 0; } else if (b === void 0) { @@ -96629,21 +96629,21 @@ var require_range = __commonJS({ const loose = this.options.loose; const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]; range2 = range2.replace(hr, hyphenReplace(this.options.includePrerelease)); - debug2("hyphen replace", range2); + debug3("hyphen replace", range2); range2 = range2.replace(re[t.COMPARATORTRIM], comparatorTrimReplace); - debug2("comparator trim", range2); + debug3("comparator trim", range2); range2 = range2.replace(re[t.TILDETRIM], tildeTrimReplace); - debug2("tilde trim", range2); + debug3("tilde trim", range2); range2 = range2.replace(re[t.CARETTRIM], caretTrimReplace); - debug2("caret trim", range2); + debug3("caret trim", range2); let rangeList = range2.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options)); if (loose) { rangeList = rangeList.filter((comp) => { - debug2("loose invalid filter", comp, this.options); + debug3("loose invalid filter", comp, this.options); return !!comp.match(re[t.COMPARATORLOOSE]); }); } - debug2("range list", rangeList); + debug3("range list", rangeList); const rangeMap = /* @__PURE__ */ new Map(); const comparators = rangeList.map((comp) => new Comparator(comp, this.options)); for (const comp of comparators) { @@ -96698,7 +96698,7 @@ var require_range = __commonJS({ var cache = new LRU(); var parseOptions = require_parse_options(); var Comparator = require_comparator(); - var debug2 = require_debug(); + var debug3 = require_debug(); var SemVer = require_semver(); var { safeRe: re, @@ -96724,15 +96724,15 @@ var require_range = __commonJS({ }; var parseComparator = (comp, options) => { comp = comp.replace(re[t.BUILD], ""); - debug2("comp", comp, options); + debug3("comp", comp, options); comp = replaceCarets(comp, options); - debug2("caret", comp); + debug3("caret", comp); comp = replaceTildes(comp, options); - debug2("tildes", comp); + debug3("tildes", comp); comp = replaceXRanges(comp, options); - debug2("xrange", comp); + debug3("xrange", comp); comp = replaceStars(comp, options); - debug2("stars", comp); + debug3("stars", comp); return comp; }; var isX = (id) => !id || id.toLowerCase() === "x" || id === "*"; @@ -96742,7 +96742,7 @@ var require_range = __commonJS({ var replaceTilde = (comp, options) => { const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]; return comp.replace(r, (_, M, m, p, pr) => { - debug2("tilde", comp, _, M, m, p, pr); + debug3("tilde", comp, _, M, m, p, pr); let ret; if (isX(M)) { ret = ""; @@ -96751,12 +96751,12 @@ var require_range = __commonJS({ } else if (isX(p)) { ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`; } else if (pr) { - debug2("replaceTilde pr", pr); + debug3("replaceTilde pr", pr); ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; } else { ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`; } - debug2("tilde return", ret); + debug3("tilde return", ret); return ret; }); }; @@ -96764,11 +96764,11 @@ var require_range = __commonJS({ return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" "); }; var replaceCaret = (comp, options) => { - debug2("caret", comp, options); + debug3("caret", comp, options); const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]; const z2 = options.includePrerelease ? "-0" : ""; return comp.replace(r, (_, M, m, p, pr) => { - debug2("caret", comp, _, M, m, p, pr); + debug3("caret", comp, _, M, m, p, pr); let ret; if (isX(M)) { ret = ""; @@ -96781,7 +96781,7 @@ var require_range = __commonJS({ ret = `>=${M}.${m}.0${z2} <${+M + 1}.0.0-0`; } } else if (pr) { - debug2("replaceCaret pr", pr); + debug3("replaceCaret pr", pr); if (M === "0") { if (m === "0") { ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`; @@ -96792,7 +96792,7 @@ var require_range = __commonJS({ ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`; } } else { - debug2("no pr"); + debug3("no pr"); if (M === "0") { if (m === "0") { ret = `>=${M}.${m}.${p}${z2} <${M}.${m}.${+p + 1}-0`; @@ -96803,19 +96803,19 @@ var require_range = __commonJS({ ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`; } } - debug2("caret return", ret); + debug3("caret return", ret); return ret; }); }; var replaceXRanges = (comp, options) => { - debug2("replaceXRanges", comp, options); + debug3("replaceXRanges", comp, options); return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" "); }; var replaceXRange = (comp, options) => { comp = comp.trim(); const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]; return comp.replace(r, (ret, gtlt, M, m, p, pr) => { - debug2("xRange", comp, ret, gtlt, M, m, p, pr); + debug3("xRange", comp, ret, gtlt, M, m, p, pr); const xM = isX(M); const xm = xM || isX(m); const xp = xm || isX(p); @@ -96862,16 +96862,16 @@ var require_range = __commonJS({ } else if (xp) { ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`; } - debug2("xRange return", ret); + debug3("xRange return", ret); return ret; }); }; var replaceStars = (comp, options) => { - debug2("replaceStars", comp, options); + debug3("replaceStars", comp, options); return comp.trim().replace(re[t.STAR], ""); }; var replaceGTE0 = (comp, options) => { - debug2("replaceGTE0", comp, options); + debug3("replaceGTE0", comp, options); return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], ""); }; var hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => { @@ -96909,7 +96909,7 @@ var require_range = __commonJS({ } if (version3.prerelease.length && !options.includePrerelease) { for (let i = 0; i < set2.length; i++) { - debug2(set2[i].semver); + debug3(set2[i].semver); if (set2[i].semver === Comparator.ANY) { continue; } @@ -96946,7 +96946,7 @@ var require_comparator = __commonJS({ } } comp = comp.trim().split(/\s+/).join(" "); - debug2("comparator", comp, options); + debug3("comparator", comp, options); this.options = options; this.loose = !!options.loose; this.parse(comp); @@ -96955,7 +96955,7 @@ var require_comparator = __commonJS({ } else { this.value = this.operator + this.semver.version; } - debug2("comp", this); + debug3("comp", this); } parse(comp) { const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]; @@ -96977,7 +96977,7 @@ var require_comparator = __commonJS({ return this.value; } test(version3) { - debug2("Comparator.test", version3, this.options.loose); + debug3("Comparator.test", version3, this.options.loose); if (this.semver === ANY || version3 === ANY) { return true; } @@ -97034,7 +97034,7 @@ var require_comparator = __commonJS({ var parseOptions = require_parse_options(); var { safeRe: re, t } = require_re(); var cmp = require_cmp(); - var debug2 = require_debug(); + var debug3 = require_debug(); var SemVer = require_semver(); var Range = require_range(); } @@ -135596,7 +135596,12 @@ var isGitHubActions = !!process.env.GITHUB_ACTIONS; var isInsideDocker = existsSync("/.dockerenv"); // utils/log.ts -var isDebugEnabled = () => process.env.LOG_LEVEL === "debug" || process.env.ACTIONS_STEP_DEBUG === "true" || core.isDebug(); +var isRunnerDebugEnabled = () => core.isDebug(); +var isLocalDebugEnabled = () => process.env.LOG_LEVEL === "debug" || process.env.ACTIONS_STEP_DEBUG === "true"; +var isDebugEnabled = () => isLocalDebugEnabled() || isRunnerDebugEnabled(); +function ts() { + return isDebugEnabled() ? `[${(/* @__PURE__ */ new Date()).toISOString()}] ` : ""; +} function formatArgs(args2) { return args2.map((arg) => { if (typeof arg === "string") return arg; @@ -135713,19 +135718,16 @@ function separator(length = 50) { const separatorText = "\u2500".repeat(length); core.info(separatorText); } -function ts() { - return isDebugEnabled() ? `[${(/* @__PURE__ */ new Date()).toISOString()}] ` : ""; -} var log = { /** Print info message */ info: (...args2) => { core.info(`${ts()}${formatArgs(args2)}`); }, - /** Print warning message */ + /** Print a warning message. Use only for warnings that should be displayed in the job summary. */ warning: (...args2) => { core.warning(`${ts()}${formatArgs(args2)}`); }, - /** Print error message */ + /** Print an error message. Use only for errors that should be displayed in the job summary. */ error: (...args2) => { core.error(`${ts()}${formatArgs(args2)}`); }, @@ -135733,10 +135735,14 @@ var log = { success: (...args2) => { core.info(`${ts()}\xBB ${formatArgs(args2)}`); }, - /** Print debug message (only if LOG_LEVEL=debug) */ + /** Print debug message (only when debug mode is enabled) */ debug: (...args2) => { - if (isDebugEnabled()) { - core.info(`[${(/* @__PURE__ */ new Date()).toISOString()}] [DEBUG] ${formatArgs(args2)}`); + if (isRunnerDebugEnabled()) { + core.debug(formatArgs(args2)); + return; + } + if (isLocalDebugEnabled()) { + core.info(`${ts()}[DEBUG] ${formatArgs(args2)}`); } }, /** Print a formatted box with text */ @@ -139476,9 +139482,7 @@ async function retry(fn2, options = {}) { throw error49; } const delay2 = delayMs * attempt; - log.warning( - `\xBB ${label} failed (attempt ${attempt}/${maxAttempts}), retrying in ${delay2}ms...` - ); + log.info(`\xBB ${label} failed (attempt ${attempt}/${maxAttempts}), retrying in ${delay2}ms...`); await new Promise((resolve3) => setTimeout(resolve3, delay2)); } } @@ -139754,7 +139758,7 @@ async function revokeGitHubInstallationToken(token) { }); log.debug("\xBB installation token revoked"); } catch (error49) { - log.warning( + log.info( `Failed to revoke installation token: ${error49 instanceof Error ? error49.message : String(error49)}` ); } @@ -140173,7 +140177,7 @@ var execute = (fn2, toolName) => { } catch (error49) { const errorMessage = error49 instanceof Error ? error49.message : String(error49); const prefix = toolName ? `[${toolName}]` : "tool"; - log.error(`${prefix} error: ${errorMessage}`); + log.info(`${prefix} error: ${errorMessage}`); log.debug(`${prefix} params: ${formatJsonValue(params)}`); return handleToolError(error49); } @@ -140312,7 +140316,7 @@ function detectSandboxMethod() { } catch { } detectedSandboxMethod = "none"; - log.warning("PID namespace isolation not available - falling back to env filtering only"); + log.info("PID namespace isolation not available - falling back to env filtering only"); return "none"; } function spawnBash(params) { @@ -140452,8 +140456,8 @@ ${stderr}` : stderr : stdout; [timed out after ${timeout}ms]` : `[timed out after ${timeout}ms]`; const finalExitCode = exitCode ?? (timedOut ? 124 : -1); if (finalExitCode !== 0) { - log.error(`bash command failed with exit code ${finalExitCode}: ${params.command}`); - if (output) log.error(`output: ${output.trim()}`); + log.info(`bash command failed with exit code ${finalExitCode}: ${params.command}`); + if (output) log.info(`output: ${output.trim()}`); } return { output: output.trim(), @@ -140556,7 +140560,7 @@ function $git(subcommand, args2, options) { }); if (result.status !== 0) { const stderr = result.stderr?.trim() ?? ""; - log.error(`git ${subcommand} failed: ${stderr}`); + log.info(`git ${subcommand} failed: ${stderr}`); throw new Error(`git ${subcommand} failed: ${stderr}`); } return { @@ -140729,7 +140733,7 @@ async function spawn2(options) { if (idleMs > activityTimeoutMs) { isActivityTimedOut = true; const idleSec = Math.round(idleMs / 1e3); - log.error(`no output for ${idleSec}s from pid=${child.pid} (${cmd}), killing process`); + log.info(`no output for ${idleSec}s from pid=${child.pid} (${cmd}), killing process`); child.kill("SIGKILL"); clearInterval(activityCheckIntervalId); } @@ -141231,7 +141235,7 @@ function GetCheckSuiteLogsTool(ctx) { }); log.debug(`analyzed logs for job ${job.name}: ${analysis.index.length} indexed lines`); } catch (error49) { - log.error(`failed to fetch logs for job ${job.id}: ${error49}`); + log.info(`failed to fetch logs for job ${job.id}: ${error49}`); } } } @@ -142010,7 +142014,7 @@ function DelegateTool(ctx) { }; } catch (err) { const errorMessage = err instanceof Error ? err.message : String(err); - log.error(`\xBB delegation to ${selectedMode.name} crashed: ${errorMessage}`); + log.info(`\xBB delegation to ${selectedMode.name} crashed: ${errorMessage}`); return { success: false, mode: selectedMode.name, @@ -144046,7 +144050,7 @@ function ResolveReviewThreadTool(ctx) { const errorMessage = error49 instanceof Error ? error49.message : String(error49); const isResolved = errorMessage.includes("already resolved") || errorMessage.includes("isResolved"); const message = isResolved ? `thread ${params.thread_id} was already resolved` : `failed to resolve thread ${params.thread_id}: ${errorMessage}`; - log.warning(message); + log.info(message); return { thread_id: params.thread_id, is_resolved: isResolved, @@ -144965,8 +144969,7 @@ var claude = agent({ onStderr: (chunk) => { const trimmed = chunk.trim(); if (trimmed) { - log.debug(`[claude stderr] ${trimmed}`); - log.warning(trimmed); + log.info(`[claude stderr] ${trimmed}`); finalOutput2 += trimmed + "\n"; } } @@ -145022,14 +145025,14 @@ var messageHandlers = { if (isBashTool) { log.startGroup(`bash output`); if (content.is_error) { - log.warning(outputContent); + log.info(outputContent); } else { log.info(outputContent); } log.endGroup(); bashToolIds.delete(toolUseId); } else if (content.is_error) { - log.warning(`Tool error: ${outputContent}`); + log.info(`Tool error: ${outputContent}`); } else { log.debug(`tool output: ${outputContent}`); } @@ -145062,11 +145065,11 @@ var messageHandlers = { ] ]); } else if (data.subtype === "error_max_turns") { - log.error(`Max turns reached: ${JSON.stringify(data)}`); + log.info(`Max turns reached: ${JSON.stringify(data)}`); } else if (data.subtype === "error_during_execution") { - log.error(`Execution error: ${JSON.stringify(data)}`); + log.info(`Execution error: ${JSON.stringify(data)}`); } else { - log.error(`Failed: ${JSON.stringify(data)}`); + log.info(`Failed: ${JSON.stringify(data)}`); } }, system: () => { @@ -145101,7 +145104,7 @@ async function isModelAvailable(ctx) { signal: AbortSignal.timeout(1e4) }); if (!response.ok) { - log.warning( + log.info( `failed to list models (HTTP ${response.status}), falling back to ${FALLBACK_MODEL}` ); return false; @@ -145109,7 +145112,7 @@ async function isModelAvailable(ctx) { const body = await response.json(); return body.data.some((m) => m.id === ctx.model); } catch (err) { - log.warning(`failed to list models: ${err}, falling back to ${FALLBACK_MODEL}`); + log.info(`failed to list models: ${err}, falling back to ${FALLBACK_MODEL}`); return false; } } @@ -145252,8 +145255,7 @@ var codex = agent({ onStderr: (chunk) => { const trimmed = chunk.trim(); if (trimmed) { - log.debug(`[codex stderr] ${trimmed}`); - log.warning(trimmed); + log.info(`[codex stderr] ${trimmed}`); finalOutput2 += trimmed + "\n"; } } @@ -145294,7 +145296,7 @@ var messageHandlers2 = { ]); }, "turn.failed": (event) => { - log.error(`Turn failed: ${event.error.message}`); + log.info(`Turn failed: ${event.error.message}`); }, "item.started": (event, commandExecutionIds, thinkingTimer) => { const item = event.item; @@ -145334,7 +145336,7 @@ var messageHandlers2 = { thinkingTimer.markToolResult(); log.startGroup(`bash output`); if (item.status === "failed" || item.exit_code !== void 0 && item.exit_code !== 0) { - log.warning(item.aggregated_output || "Command failed"); + log.info(item.aggregated_output || "Command failed"); } else { log.info(item.aggregated_output || ""); } @@ -145344,7 +145346,7 @@ var messageHandlers2 = { } else if (item.type === "mcp_tool_call") { thinkingTimer.markToolResult(); if (item.status === "failed" && item.error) { - log.warning(`MCP tool call failed: ${item.error.message}`); + log.info(`MCP tool call failed: ${item.error.message}`); } else if (item.output) { const output = item.output; const outputStr = typeof output === "string" ? output : JSON.stringify(output); @@ -145357,7 +145359,7 @@ var messageHandlers2 = { } }, error: (event) => { - log.error(`Error: ${event.message}`); + log.info(`Error: ${event.message}`); } }; @@ -145458,7 +145460,7 @@ var cursor = agent({ const result = event.tool_call?.mcpToolCall?.result?.success; const isError = result?.isError; if (isError) { - log.warning("Tool call failed"); + log.info("Tool call failed"); } else { const contentItem = result?.content?.[0]; const textValue = contentItem?.text; @@ -145534,11 +145536,11 @@ var cursor = agent({ const text = data.toString(); stderr += text; process.stderr.write(text); - log.warning(text); + log.info(text); }); child.on("close", async (code, signal) => { if (signal) { - log.warning(`Cursor CLI terminated by signal: ${signal}`); + log.info(`Cursor CLI terminated by signal: ${signal}`); } const duration4 = ((performance6.now() - startTime) / 1e3).toFixed(1); if (code === 0) { @@ -145683,7 +145685,7 @@ var messageHandlers3 = { thinkingTimer.markToolResult(); if (event.status === "error") { const errorMsg = typeof event.output === "string" ? event.output : JSON.stringify(event.output); - log.warning(`Tool call failed: ${errorMsg}`); + log.info(`Tool call failed: ${errorMsg}`); } else if (event.output) { const outputStr = typeof event.output === "string" ? event.output : JSON.stringify(event.output); log.debug(`tool output: ${outputStr}`); @@ -145783,8 +145785,7 @@ var gemini = agent({ onStderr: (chunk) => { const trimmed = chunk.trim(); if (trimmed) { - log.debug(`[gemini stderr] ${trimmed}`); - log.warning(trimmed); + log.info(`[gemini stderr] ${trimmed}`); finalOutput2 += trimmed + "\n"; } } @@ -145792,7 +145793,7 @@ var gemini = agent({ if (result.exitCode !== 0) { const errorMessage = result.stderr || finalOutput2 || result.stdout || "Unknown error - no output from Gemini CLI"; if (attempt < MAX_ATTEMPTS && isTransientApiError(errorMessage)) { - log.warning( + log.info( `\xBB transient Gemini API error on attempt ${attempt}/${MAX_ATTEMPTS}, retrying in ${RETRY_DELAY_MS / 1e3}s...` ); await new Promise((resolve3) => setTimeout(resolve3, RETRY_DELAY_MS)); @@ -145814,7 +145815,7 @@ var gemini = agent({ } catch (error49) { const errorMessage = error49 instanceof Error ? error49.message : String(error49); if (attempt < MAX_ATTEMPTS && isTransientApiError(errorMessage)) { - log.warning( + log.info( `\xBB transient Gemini API error on attempt ${attempt}/${MAX_ATTEMPTS}, retrying in ${RETRY_DELAY_MS / 1e3}s...` ); await new Promise((resolve3) => setTimeout(resolve3, RETRY_DELAY_MS)); @@ -145983,7 +145984,7 @@ var opencode = agent({ if (timeSinceLastActivity > 1e4) { const activeToolCalls = toolCallTimings.size; const toolCallInfo = activeToolCalls > 0 ? ` (waiting for ${activeToolCalls} tool call${activeToolCalls > 1 ? "s" : ""})` : " (OpenCode may be processing internally - LLM calls, planning, etc.)"; - log.warning( + log.info( `\xBB no activity for ${(timeSinceLastActivity / 1e3).toFixed(1)}s${toolCallInfo} (${eventCount} events processed so far)` ); } @@ -146009,7 +146010,7 @@ var opencode = agent({ const providerError = detectProviderError(trimmed); if (providerError) { lastProviderError = providerError; - log.error(`\xBB provider error detected (${providerError}): ${trimmed.substring(0, 500)}`); + log.info(`\xBB provider error detected (${providerError}): ${trimmed.substring(0, 500)}`); } else { log.debug(trimmed); } @@ -146022,9 +146023,9 @@ var opencode = agent({ if (eventCount === 0) { const stderrContext = recentStderr.join("\n"); const diagnosis = lastProviderError ? `provider error: ${lastProviderError}` : "unknown cause (no stdout events received)"; - log.error(`\xBB OpenCode produced 0 events (${diagnosis})`); + log.info(`\xBB OpenCode produced 0 events (${diagnosis})`); if (stderrContext) { - log.error(`\xBB last stderr output: + log.info(`\xBB last stderr output: ${stderrContext}`); } } @@ -146063,12 +146064,12 @@ ${stderrContext}`); const isActivityTimeout = errorMessage.includes("activity timeout"); const stderrContext = recentStderr.slice(-10).join("\n"); const diagnosis = lastProviderError ? `likely cause: ${lastProviderError}` : eventCount === 0 ? "OpenCode produced 0 stdout events - check if the model provider is reachable" : `${eventCount} events were processed before the hang`; - log.error( + log.info( `\xBB OpenCode ${isActivityTimeout ? "hung" : "failed"} after ${(duration4 / 1e3).toFixed(1)}s: ${errorMessage}` ); - log.error(`\xBB diagnosis: ${diagnosis}`); + log.info(`\xBB diagnosis: ${diagnosis}`); if (stderrContext) { - log.error( + log.info( `\xBB recent stderr (last ${Math.min(recentStderr.length, 10)} lines): ${stderrContext}` ); @@ -146222,7 +146223,7 @@ var messageHandlers4 = { log.debug(` output: ${typeof output === "string" ? output : JSON.stringify(output)}`); } if (toolDuration > 5e3) { - log.warning( + log.info( `\xBB \u26A0\uFE0F tool call took ${(toolDuration / 1e3).toFixed(1)}s - this may indicate network latency or slow processing` ); } @@ -146230,7 +146231,7 @@ var messageHandlers4 = { } if (status === "error") { const errorMsg = typeof output === "string" ? output : JSON.stringify(output); - log.error(`\xBB \u274C tool call failed: ${errorMsg}`); + log.info(`\xBB \u274C tool call failed: ${errorMsg}`); } else if (output) { const outputStr = typeof output === "string" ? output : JSON.stringify(output); log.debug(`tool output: ${outputStr}`); @@ -146244,7 +146245,7 @@ var messageHandlers4 = { `\xBB OpenCode result: status=${status}, duration=${duration4}ms, tool_calls=${toolCalls}` ); if (event.status === "error") { - log.error(`\xBB OpenCode CLI failed: ${JSON.stringify(event)}`); + log.info(`\xBB OpenCode CLI failed: ${JSON.stringify(event)}`); } else { const inputTokens = event.stats?.input_tokens || accumulatedTokens.input || 0; const outputTokens = event.stats?.output_tokens || accumulatedTokens.output || 0; @@ -146891,9 +146892,7 @@ async function setupGit(params) { log.debug("\xBB git hooks disabled (bash=disabled)"); } } catch (error49) { - log.warning( - `Failed to set git config: ${error49 instanceof Error ? error49.message : String(error49)}` - ); + log.info(`Failed to set git config: ${error49 instanceof Error ? error49.message : String(error49)}`); } try { execSync3("git config --local --unset-all http.https://github.com/.extraheader", { diff --git a/get-installation-token/entry b/get-installation-token/entry index ef66160..8abf8ed 100755 --- a/get-installation-token/entry +++ b/get-installation-token/entry @@ -399,7 +399,7 @@ var require_tunnel = __commonJS({ connectOptions.headers = connectOptions.headers || {}; connectOptions.headers["Proxy-Authorization"] = "Basic " + new Buffer(connectOptions.proxyAuth).toString("base64"); } - debug2("making CONNECT request"); + debug3("making CONNECT request"); var connectReq = self2.request(connectOptions); connectReq.useChunkedEncodingByDefault = false; connectReq.once("response", onResponse); @@ -419,7 +419,7 @@ var require_tunnel = __commonJS({ connectReq.removeAllListeners(); socket.removeAllListeners(); if (res.statusCode !== 200) { - debug2( + debug3( "tunneling socket could not be established, statusCode=%d", res.statusCode ); @@ -431,7 +431,7 @@ var require_tunnel = __commonJS({ return; } if (head.length > 0) { - debug2("got illegal response body from proxy"); + debug3("got illegal response body from proxy"); socket.destroy(); var error2 = new Error("got illegal response body from proxy"); error2.code = "ECONNRESET"; @@ -439,13 +439,13 @@ var require_tunnel = __commonJS({ self2.removeSocket(placeholder); return; } - debug2("tunneling connection has established"); + debug3("tunneling connection has established"); self2.sockets[self2.sockets.indexOf(placeholder)] = socket; return cb(socket); } function onError(cause) { connectReq.removeAllListeners(); - debug2( + debug3( "tunneling socket could not be established, cause=%s\n", cause.message, cause.stack @@ -507,9 +507,9 @@ var require_tunnel = __commonJS({ } return target; } - var debug2; + var debug3; if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug2 = function() { + debug3 = function() { var args = Array.prototype.slice.call(arguments); if (typeof args[0] === "string") { args[0] = "TUNNEL: " + args[0]; @@ -519,10 +519,10 @@ var require_tunnel = __commonJS({ console.error.apply(console, args); }; } else { - debug2 = function() { + debug3 = function() { }; } - exports.debug = debug2; + exports.debug = debug3; } }); @@ -19733,10 +19733,10 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); return process.env["RUNNER_DEBUG"] === "1"; } exports.isDebug = isDebug2; - function debug2(message) { + function debug3(message) { (0, command_1.issueCommand)("debug", {}, message); } - exports.debug = debug2; + exports.debug = debug3; function error2(message, properties = {}) { (0, command_1.issueCommand)("error", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message); } @@ -25515,7 +25515,12 @@ var isGitHubActions = !!process.env.GITHUB_ACTIONS; var isInsideDocker = existsSync("/.dockerenv"); // utils/log.ts -var isDebugEnabled = () => process.env.LOG_LEVEL === "debug" || process.env.ACTIONS_STEP_DEBUG === "true" || core.isDebug(); +var isRunnerDebugEnabled = () => core.isDebug(); +var isLocalDebugEnabled = () => process.env.LOG_LEVEL === "debug" || process.env.ACTIONS_STEP_DEBUG === "true"; +var isDebugEnabled = () => isLocalDebugEnabled() || isRunnerDebugEnabled(); +function ts() { + return isDebugEnabled() ? `[${(/* @__PURE__ */ new Date()).toISOString()}] ` : ""; +} function formatArgs(args) { return args.map((arg) => { if (typeof arg === "string") return arg; @@ -25626,19 +25631,16 @@ function separator(length = 50) { const separatorText = "\u2500".repeat(length); core.info(separatorText); } -function ts() { - return isDebugEnabled() ? `[${(/* @__PURE__ */ new Date()).toISOString()}] ` : ""; -} var log = { /** Print info message */ info: (...args) => { core.info(`${ts()}${formatArgs(args)}`); }, - /** Print warning message */ + /** Print a warning message. Use only for warnings that should be displayed in the job summary. */ warning: (...args) => { core.warning(`${ts()}${formatArgs(args)}`); }, - /** Print error message */ + /** Print an error message. Use only for errors that should be displayed in the job summary. */ error: (...args) => { core.error(`${ts()}${formatArgs(args)}`); }, @@ -25646,10 +25648,14 @@ var log = { success: (...args) => { core.info(`${ts()}\xBB ${formatArgs(args)}`); }, - /** Print debug message (only if LOG_LEVEL=debug) */ + /** Print debug message (only when debug mode is enabled) */ debug: (...args) => { - if (isDebugEnabled()) { - core.info(`[${(/* @__PURE__ */ new Date()).toISOString()}] [DEBUG] ${formatArgs(args)}`); + if (isRunnerDebugEnabled()) { + core.debug(formatArgs(args)); + return; + } + if (isLocalDebugEnabled()) { + core.info(`${ts()}[DEBUG] ${formatArgs(args)}`); } }, /** Print a formatted box with text */ @@ -25740,9 +25746,7 @@ async function retry(fn, options = {}) { throw error2; } const delay = delayMs * attempt; - log.warning( - `\xBB ${label} failed (attempt ${attempt}/${maxAttempts}), retrying in ${delay}ms...` - ); + log.info(`\xBB ${label} failed (attempt ${attempt}/${maxAttempts}), retrying in ${delay}ms...`); await new Promise((resolve) => setTimeout(resolve, delay)); } } @@ -25925,7 +25929,7 @@ async function revokeGitHubInstallationToken(token) { }); log.debug("\xBB installation token revoked"); } catch (error2) { - log.warning( + log.info( `Failed to revoke installation token: ${error2 instanceof Error ? error2.message : String(error2)}` ); } diff --git a/mcp/bash.ts b/mcp/bash.ts index b7a5e82..62072d8 100644 --- a/mcp/bash.ts +++ b/mcp/bash.ts @@ -78,7 +78,7 @@ function detectSandboxMethod(): SandboxMethod { } detectedSandboxMethod = "none"; - log.warning("PID namespace isolation not available - falling back to env filtering only"); + log.info("PID namespace isolation not available - falling back to env filtering only"); return "none"; } @@ -243,8 +243,8 @@ Use this tool to: const finalExitCode = exitCode ?? (timedOut ? 124 : -1); if (finalExitCode !== 0) { - log.error(`bash command failed with exit code ${finalExitCode}: ${params.command}`); - if (output) log.error(`output: ${output.trim()}`); + log.info(`bash command failed with exit code ${finalExitCode}: ${params.command}`); + if (output) log.info(`output: ${output.trim()}`); } return { diff --git a/mcp/checkSuite.ts b/mcp/checkSuite.ts index d2a45a9..f8ae13b 100644 --- a/mcp/checkSuite.ts +++ b/mcp/checkSuite.ts @@ -213,7 +213,7 @@ export function GetCheckSuiteLogsTool(ctx: ToolContext) { log.debug(`analyzed logs for job ${job.name}: ${analysis.index.length} indexed lines`); } catch (error) { - log.error(`failed to fetch logs for job ${job.id}: ${error}`); + log.info(`failed to fetch logs for job ${job.id}: ${error}`); } } } diff --git a/mcp/delegate.ts b/mcp/delegate.ts index edfd7bc..5068523 100644 --- a/mcp/delegate.ts +++ b/mcp/delegate.ts @@ -112,7 +112,7 @@ export function DelegateTool(ctx: ToolContext) { } catch (err) { // normalize agent crashes into the same return shape as clean failures const errorMessage = err instanceof Error ? err.message : String(err); - log.error(`» delegation to ${selectedMode.name} crashed: ${errorMessage}`); + log.info(`» delegation to ${selectedMode.name} crashed: ${errorMessage}`); return { success: false, mode: selectedMode.name, diff --git a/mcp/reviewComments.ts b/mcp/reviewComments.ts index 25debe5..f15cc6b 100644 --- a/mcp/reviewComments.ts +++ b/mcp/reviewComments.ts @@ -632,7 +632,7 @@ export function ResolveReviewThreadTool(ctx: ToolContext) { const message = isResolved ? `thread ${params.thread_id} was already resolved` : `failed to resolve thread ${params.thread_id}: ${errorMessage}`; - log.warning(message); + log.info(message); return { thread_id: params.thread_id, diff --git a/mcp/shared.ts b/mcp/shared.ts index 9b9f652..99d9c42 100644 --- a/mcp/shared.ts +++ b/mcp/shared.ts @@ -53,7 +53,7 @@ export const execute = | string>( } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); const prefix = toolName ? `[${toolName}]` : "tool"; - log.error(`${prefix} error: ${errorMessage}`); + log.info(`${prefix} error: ${errorMessage}`); log.debug(`${prefix} params: ${formatJsonValue(params)}`); return handleToolError(error); } diff --git a/post b/post index edf4a51..7eb1b82 100755 --- a/post +++ b/post @@ -399,7 +399,7 @@ var require_tunnel = __commonJS({ connectOptions.headers = connectOptions.headers || {}; connectOptions.headers["Proxy-Authorization"] = "Basic " + new Buffer(connectOptions.proxyAuth).toString("base64"); } - debug("making CONNECT request"); + debug2("making CONNECT request"); var connectReq = self2.request(connectOptions); connectReq.useChunkedEncodingByDefault = false; connectReq.once("response", onResponse); @@ -419,7 +419,7 @@ var require_tunnel = __commonJS({ connectReq.removeAllListeners(); socket.removeAllListeners(); if (res.statusCode !== 200) { - debug( + debug2( "tunneling socket could not be established, statusCode=%d", res.statusCode ); @@ -431,7 +431,7 @@ var require_tunnel = __commonJS({ return; } if (head.length > 0) { - debug("got illegal response body from proxy"); + debug2("got illegal response body from proxy"); socket.destroy(); var error2 = new Error("got illegal response body from proxy"); error2.code = "ECONNRESET"; @@ -439,13 +439,13 @@ var require_tunnel = __commonJS({ self2.removeSocket(placeholder); return; } - debug("tunneling connection has established"); + debug2("tunneling connection has established"); self2.sockets[self2.sockets.indexOf(placeholder)] = socket; return cb(socket); } function onError(cause) { connectReq.removeAllListeners(); - debug( + debug2( "tunneling socket could not be established, cause=%s\n", cause.message, cause.stack @@ -507,9 +507,9 @@ var require_tunnel = __commonJS({ } return target; } - var debug; + var debug2; if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { - debug = function() { + debug2 = function() { var args2 = Array.prototype.slice.call(arguments); if (typeof args2[0] === "string") { args2[0] = "TUNNEL: " + args2[0]; @@ -519,10 +519,10 @@ var require_tunnel = __commonJS({ console.error.apply(console, args2); }; } else { - debug = function() { + debug2 = function() { }; } - exports.debug = debug; + exports.debug = debug2; } }); @@ -19733,10 +19733,10 @@ Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); return process.env["RUNNER_DEBUG"] === "1"; } exports.isDebug = isDebug2; - function debug(message) { + function debug2(message) { (0, command_1.issueCommand)("debug", {}, message); } - exports.debug = debug; + exports.debug = debug2; function error2(message, properties = {}) { (0, command_1.issueCommand)("error", (0, utils_1.toCommandProperties)(properties), message instanceof Error ? message.toString() : message); } @@ -26949,9 +26949,9 @@ var require_constants6 = __commonJS({ var require_debug = __commonJS({ "node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.js"(exports, module) { "use strict"; - var debug = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args2) => console.error("SEMVER", ...args2) : () => { + var debug2 = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args2) => console.error("SEMVER", ...args2) : () => { }; - module.exports = debug; + module.exports = debug2; } }); @@ -26964,7 +26964,7 @@ var require_re = __commonJS({ MAX_SAFE_BUILD_LENGTH, MAX_LENGTH } = require_constants6(); - var debug = require_debug(); + var debug2 = require_debug(); exports = module.exports = {}; var re = exports.re = []; var safeRe = exports.safeRe = []; @@ -26987,7 +26987,7 @@ var require_re = __commonJS({ var createToken = (name, value2, isGlobal) => { const safe = makeSafeRegex(value2); const index = R++; - debug(name, index, value2); + debug2(name, index, value2); t[name] = index; src[index] = value2; safeSrc[index] = safe; @@ -27091,7 +27091,7 @@ var require_identifiers = __commonJS({ var require_semver = __commonJS({ "node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.js"(exports, module) { "use strict"; - var debug = require_debug(); + var debug2 = require_debug(); var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants6(); var { safeRe: re, t } = require_re(); var parseOptions = require_parse_options(); @@ -27113,7 +27113,7 @@ var require_semver = __commonJS({ `version is longer than ${MAX_LENGTH} characters` ); } - debug("SemVer", version, options); + debug2("SemVer", version, options); this.options = options; this.loose = !!options.loose; this.includePrerelease = !!options.includePrerelease; @@ -27161,7 +27161,7 @@ var require_semver = __commonJS({ return this.version; } compare(other) { - debug("SemVer.compare", this.version, this.options, other); + debug2("SemVer.compare", this.version, this.options, other); if (!(other instanceof _SemVer)) { if (typeof other === "string" && other === this.version) { return 0; @@ -27212,7 +27212,7 @@ var require_semver = __commonJS({ do { const a = this.prerelease[i]; const b = other.prerelease[i]; - debug("prerelease compare", i, a, b); + debug2("prerelease compare", i, a, b); if (a === void 0 && b === void 0) { return 0; } else if (b === void 0) { @@ -27234,7 +27234,7 @@ var require_semver = __commonJS({ do { const a = this.build[i]; const b = other.build[i]; - debug("build compare", i, a, b); + debug2("build compare", i, a, b); if (a === void 0 && b === void 0) { return 0; } else if (b === void 0) { @@ -27862,21 +27862,21 @@ var require_range = __commonJS({ const loose = this.options.loose; const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]; range2 = range2.replace(hr, hyphenReplace(this.options.includePrerelease)); - debug("hyphen replace", range2); + debug2("hyphen replace", range2); range2 = range2.replace(re[t.COMPARATORTRIM], comparatorTrimReplace); - debug("comparator trim", range2); + debug2("comparator trim", range2); range2 = range2.replace(re[t.TILDETRIM], tildeTrimReplace); - debug("tilde trim", range2); + debug2("tilde trim", range2); range2 = range2.replace(re[t.CARETTRIM], caretTrimReplace); - debug("caret trim", range2); + debug2("caret trim", range2); let rangeList = range2.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options)); if (loose) { rangeList = rangeList.filter((comp) => { - debug("loose invalid filter", comp, this.options); + debug2("loose invalid filter", comp, this.options); return !!comp.match(re[t.COMPARATORLOOSE]); }); } - debug("range list", rangeList); + debug2("range list", rangeList); const rangeMap = /* @__PURE__ */ new Map(); const comparators = rangeList.map((comp) => new Comparator(comp, this.options)); for (const comp of comparators) { @@ -27931,7 +27931,7 @@ var require_range = __commonJS({ var cache = new LRU(); var parseOptions = require_parse_options(); var Comparator = require_comparator(); - var debug = require_debug(); + var debug2 = require_debug(); var SemVer = require_semver(); var { safeRe: re, @@ -27957,15 +27957,15 @@ var require_range = __commonJS({ }; var parseComparator = (comp, options) => { comp = comp.replace(re[t.BUILD], ""); - debug("comp", comp, options); + debug2("comp", comp, options); comp = replaceCarets(comp, options); - debug("caret", comp); + debug2("caret", comp); comp = replaceTildes(comp, options); - debug("tildes", comp); + debug2("tildes", comp); comp = replaceXRanges(comp, options); - debug("xrange", comp); + debug2("xrange", comp); comp = replaceStars(comp, options); - debug("stars", comp); + debug2("stars", comp); return comp; }; var isX = (id) => !id || id.toLowerCase() === "x" || id === "*"; @@ -27975,7 +27975,7 @@ var require_range = __commonJS({ var replaceTilde = (comp, options) => { const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]; return comp.replace(r, (_, M, m, p, pr) => { - debug("tilde", comp, _, M, m, p, pr); + debug2("tilde", comp, _, M, m, p, pr); let ret; if (isX(M)) { ret = ""; @@ -27984,12 +27984,12 @@ var require_range = __commonJS({ } else if (isX(p)) { ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`; } else if (pr) { - debug("replaceTilde pr", pr); + debug2("replaceTilde pr", pr); ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`; } else { ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`; } - debug("tilde return", ret); + debug2("tilde return", ret); return ret; }); }; @@ -27997,11 +27997,11 @@ var require_range = __commonJS({ return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" "); }; var replaceCaret = (comp, options) => { - debug("caret", comp, options); + debug2("caret", comp, options); const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]; const z = options.includePrerelease ? "-0" : ""; return comp.replace(r, (_, M, m, p, pr) => { - debug("caret", comp, _, M, m, p, pr); + debug2("caret", comp, _, M, m, p, pr); let ret; if (isX(M)) { ret = ""; @@ -28014,7 +28014,7 @@ var require_range = __commonJS({ ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`; } } else if (pr) { - debug("replaceCaret pr", pr); + debug2("replaceCaret pr", pr); if (M === "0") { if (m === "0") { ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`; @@ -28025,7 +28025,7 @@ var require_range = __commonJS({ ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`; } } else { - debug("no pr"); + debug2("no pr"); if (M === "0") { if (m === "0") { ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`; @@ -28036,19 +28036,19 @@ var require_range = __commonJS({ ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`; } } - debug("caret return", ret); + debug2("caret return", ret); return ret; }); }; var replaceXRanges = (comp, options) => { - debug("replaceXRanges", comp, options); + debug2("replaceXRanges", comp, options); return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" "); }; var replaceXRange = (comp, options) => { comp = comp.trim(); const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]; return comp.replace(r, (ret, gtlt, M, m, p, pr) => { - debug("xRange", comp, ret, gtlt, M, m, p, pr); + debug2("xRange", comp, ret, gtlt, M, m, p, pr); const xM = isX(M); const xm = xM || isX(m); const xp = xm || isX(p); @@ -28095,16 +28095,16 @@ var require_range = __commonJS({ } else if (xp) { ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`; } - debug("xRange return", ret); + debug2("xRange return", ret); return ret; }); }; var replaceStars = (comp, options) => { - debug("replaceStars", comp, options); + debug2("replaceStars", comp, options); return comp.trim().replace(re[t.STAR], ""); }; var replaceGTE0 = (comp, options) => { - debug("replaceGTE0", comp, options); + debug2("replaceGTE0", comp, options); return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], ""); }; var hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => { @@ -28142,7 +28142,7 @@ var require_range = __commonJS({ } if (version.prerelease.length && !options.includePrerelease) { for (let i = 0; i < set.length; i++) { - debug(set[i].semver); + debug2(set[i].semver); if (set[i].semver === Comparator.ANY) { continue; } @@ -28179,7 +28179,7 @@ var require_comparator = __commonJS({ } } comp = comp.trim().split(/\s+/).join(" "); - debug("comparator", comp, options); + debug2("comparator", comp, options); this.options = options; this.loose = !!options.loose; this.parse(comp); @@ -28188,7 +28188,7 @@ var require_comparator = __commonJS({ } else { this.value = this.operator + this.semver.version; } - debug("comp", this); + debug2("comp", this); } parse(comp) { const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]; @@ -28210,7 +28210,7 @@ var require_comparator = __commonJS({ return this.value; } test(version) { - debug("Comparator.test", version, this.options.loose); + debug2("Comparator.test", version, this.options.loose); if (this.semver === ANY || version === ANY) { return true; } @@ -28267,7 +28267,7 @@ var require_comparator = __commonJS({ var parseOptions = require_parse_options(); var { safeRe: re, t } = require_re(); var cmp = require_cmp(); - var debug = require_debug(); + var debug2 = require_debug(); var SemVer = require_semver(); var Range = require_range(); } @@ -28854,7 +28854,12 @@ var isGitHubActions = !!process.env.GITHUB_ACTIONS; var isInsideDocker = existsSync("/.dockerenv"); // utils/log.ts -var isDebugEnabled = () => process.env.LOG_LEVEL === "debug" || process.env.ACTIONS_STEP_DEBUG === "true" || core.isDebug(); +var isRunnerDebugEnabled = () => core.isDebug(); +var isLocalDebugEnabled = () => process.env.LOG_LEVEL === "debug" || process.env.ACTIONS_STEP_DEBUG === "true"; +var isDebugEnabled = () => isLocalDebugEnabled() || isRunnerDebugEnabled(); +function ts() { + return isDebugEnabled() ? `[${(/* @__PURE__ */ new Date()).toISOString()}] ` : ""; +} function formatArgs(args2) { return args2.map((arg) => { if (typeof arg === "string") return arg; @@ -28965,19 +28970,16 @@ function separator(length = 50) { const separatorText = "\u2500".repeat(length); core.info(separatorText); } -function ts() { - return isDebugEnabled() ? `[${(/* @__PURE__ */ new Date()).toISOString()}] ` : ""; -} var log = { /** Print info message */ info: (...args2) => { core.info(`${ts()}${formatArgs(args2)}`); }, - /** Print warning message */ + /** Print a warning message. Use only for warnings that should be displayed in the job summary. */ warning: (...args2) => { core.warning(`${ts()}${formatArgs(args2)}`); }, - /** Print error message */ + /** Print an error message. Use only for errors that should be displayed in the job summary. */ error: (...args2) => { core.error(`${ts()}${formatArgs(args2)}`); }, @@ -28985,10 +28987,14 @@ var log = { success: (...args2) => { core.info(`${ts()}\xBB ${formatArgs(args2)}`); }, - /** Print debug message (only if LOG_LEVEL=debug) */ + /** Print debug message (only when debug mode is enabled) */ debug: (...args2) => { - if (isDebugEnabled()) { - core.info(`[${(/* @__PURE__ */ new Date()).toISOString()}] [DEBUG] ${formatArgs(args2)}`); + if (isRunnerDebugEnabled()) { + core.debug(formatArgs(args2)); + return; + } + if (isLocalDebugEnabled()) { + core.info(`${ts()}[DEBUG] ${formatArgs(args2)}`); } }, /** Print a formatted box with text */ @@ -41431,7 +41437,7 @@ async function validateStuckProgressComment(promptInput, octokit, owner, repo) { return null; } catch (error2) { const errorMessage = error2 instanceof Error ? error2.message : String(error2); - log.error(`[post] failed to get comment ${commentId}: ${errorMessage}`); + log.info(`[post] failed to get comment ${commentId}: ${errorMessage}`); return null; } } @@ -41458,7 +41464,7 @@ async function getIsCancelled(params) { } log.info("[post] no cancellation found, assuming failure"); } catch (error2) { - log.warning( + log.info( `[post] failed to get job status: ${error2 instanceof Error ? error2.message : String(error2)}` ); } @@ -41472,7 +41478,7 @@ async function runPostCleanup() { const resolved = resolvePromptInput(); if (typeof resolved !== "string") promptInput = resolved; } catch (error2) { - log.warning( + log.info( `[post] failed to resolve prompt input: ${error2 instanceof Error ? error2.message : String(error2)}` ); } @@ -41503,7 +41509,7 @@ async function runPostCleanup() { log.info("\xBB [post] successfully updated progress comment"); } catch (error2) { const errorMessage = error2 instanceof Error ? error2.message : String(error2); - log.error(`[post] failed to update comment: ${errorMessage}`); + log.info(`[post] failed to update comment: ${errorMessage}`); } } diff --git a/utils/gitAuth.ts b/utils/gitAuth.ts index 6634fc1..afe90de 100644 --- a/utils/gitAuth.ts +++ b/utils/gitAuth.ts @@ -161,7 +161,7 @@ export function $git( if (result.status !== 0) { const stderr = result.stderr?.trim() ?? ""; - log.error(`git ${subcommand} failed: ${stderr}`); + log.info(`git ${subcommand} failed: ${stderr}`); throw new Error(`git ${subcommand} failed: ${stderr}`); } diff --git a/utils/log.ts b/utils/log.ts index df46fe4..3063933 100644 --- a/utils/log.ts +++ b/utils/log.ts @@ -6,8 +6,17 @@ import * as core from "@actions/core"; import { table } from "table"; import { isGitHubActions, isInsideDocker } from "./globals.ts"; -const isDebugEnabled = () => - process.env.LOG_LEVEL === "debug" || process.env.ACTIONS_STEP_DEBUG === "true" || core.isDebug(); +const isRunnerDebugEnabled = () => core.isDebug(); + +const isLocalDebugEnabled = () => + process.env.LOG_LEVEL === "debug" || process.env.ACTIONS_STEP_DEBUG === "true"; + +const isDebugEnabled = () => isLocalDebugEnabled() || isRunnerDebugEnabled(); + +/** timestamp prefix for debug mode — empty string when debug is off */ +function ts(): string { + return isDebugEnabled() ? `[${new Date().toISOString()}] ` : ""; +} /** * Format arguments into a single string for logging @@ -206,23 +215,18 @@ function separator(length: number = 50): void { /** * Main logging utility object - import this once and access all utilities */ -/** timestamp prefix for debug mode — empty string when debug is off */ -function ts(): string { - return isDebugEnabled() ? `[${new Date().toISOString()}] ` : ""; -} - export const log = { /** Print info message */ info: (...args: unknown[]): void => { core.info(`${ts()}${formatArgs(args)}`); }, - /** Print warning message */ + /** Print a warning message. Use only for warnings that should be displayed in the job summary. */ warning: (...args: unknown[]): void => { core.warning(`${ts()}${formatArgs(args)}`); }, - /** Print error message */ + /** Print an error message. Use only for errors that should be displayed in the job summary. */ error: (...args: unknown[]): void => { core.error(`${ts()}${formatArgs(args)}`); }, @@ -232,10 +236,14 @@ export const log = { core.info(`${ts()}» ${formatArgs(args)}`); }, - /** Print debug message (only if LOG_LEVEL=debug) */ + /** Print debug message (only when debug mode is enabled) */ debug: (...args: unknown[]): void => { - if (isDebugEnabled()) { - core.info(`[${new Date().toISOString()}] [DEBUG] ${formatArgs(args)}`); + if (isRunnerDebugEnabled()) { + core.debug(formatArgs(args)); + return; + } + if (isLocalDebugEnabled()) { + core.info(`${ts()}[DEBUG] ${formatArgs(args)}`); } }, diff --git a/utils/postCleanup.ts b/utils/postCleanup.ts index 6515527..df4756b 100644 --- a/utils/postCleanup.ts +++ b/utils/postCleanup.ts @@ -50,7 +50,7 @@ async function validateStuckProgressComment( return null; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); - log.error(`[post] failed to get comment ${commentId}: ${errorMessage}`); + log.info(`[post] failed to get comment ${commentId}: ${errorMessage}`); return null; } } @@ -97,7 +97,7 @@ async function getIsCancelled(params: { } log.info("[post] no cancellation found, assuming failure"); } catch (error) { - log.warning( + log.info( `[post] failed to get job status: ${error instanceof Error ? error.message : String(error)}` ); } @@ -116,7 +116,7 @@ export async function runPostCleanup(): Promise { const resolved = resolvePromptInput(); if (typeof resolved !== "string") promptInput = resolved; } catch (error) { - log.warning( + log.info( `[post] failed to resolve prompt input: ${error instanceof Error ? error.message : String(error)}` ); } @@ -158,6 +158,6 @@ export async function runPostCleanup(): Promise { log.info("» [post] successfully updated progress comment"); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); - log.error(`[post] failed to update comment: ${errorMessage}`); + log.info(`[post] failed to update comment: ${errorMessage}`); } } diff --git a/utils/retry.ts b/utils/retry.ts index 4be177b..fa64d69 100644 --- a/utils/retry.ts +++ b/utils/retry.ts @@ -37,9 +37,7 @@ export async function retry(fn: () => Promise, options: RetryOptions = {}) } const delay = delayMs * attempt; - log.warning( - `» ${label} failed (attempt ${attempt}/${maxAttempts}), retrying in ${delay}ms...` - ); + log.info(`» ${label} failed (attempt ${attempt}/${maxAttempts}), retrying in ${delay}ms...`); await new Promise((resolve) => setTimeout(resolve, delay)); } } diff --git a/utils/setup.ts b/utils/setup.ts index bfc03c8..769aa4a 100644 --- a/utils/setup.ts +++ b/utils/setup.ts @@ -121,9 +121,7 @@ export async function setupGit(params: SetupGitParams): Promise { } catch (error) { // If git config fails, log warning but don't fail the action // This can happen if we're not in a git repo or git isn't available - log.warning( - `Failed to set git config: ${error instanceof Error ? error.message : String(error)}` - ); + log.info(`Failed to set git config: ${error instanceof Error ? error.message : String(error)}`); } // 2. setup authentication diff --git a/utils/subprocess.ts b/utils/subprocess.ts index ae2a371..02e3bd0 100644 --- a/utils/subprocess.ts +++ b/utils/subprocess.ts @@ -157,7 +157,7 @@ export async function spawn(options: SpawnOptions): Promise { if (idleMs > activityTimeoutMs) { isActivityTimedOut = true; const idleSec = Math.round(idleMs / 1000); - log.error(`no output for ${idleSec}s from pid=${child.pid} (${cmd}), killing process`); + log.info(`no output for ${idleSec}s from pid=${child.pid} (${cmd}), killing process`); child.kill("SIGKILL"); clearInterval(activityCheckIntervalId); } diff --git a/utils/token.ts b/utils/token.ts index 887c5a7..fe17bba 100644 --- a/utils/token.ts +++ b/utils/token.ts @@ -169,7 +169,7 @@ export async function revokeGitHubInstallationToken(token: string): Promise