From 3f71104add3066f77daf6bc79ca0d61ba6514acd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Dec 2025 12:47:32 +0000 Subject: [PATCH 1/4] Initial plan From 01409822a530c3322a294455efebcda8c9b945c0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Dec 2025 12:55:40 +0000 Subject: [PATCH 2/4] Initial analysis: identify JavaScript file writing issue Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .../workflows/layout-spec-maintainer.lock.yml | 997 +++++++++++------- .github/workflows/release.lock.yml | 4 +- 2 files changed, 594 insertions(+), 407 deletions(-) diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index ec1c77aa228..d0ecfc9ceff 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -498,6 +498,8 @@ jobs: env: GH_AW_MCP_LOG_DIR: /tmp/gh-aw/mcp-logs/safeoutputs GH_AW_SAFE_OUTPUTS: /tmp/gh-aw/safeoutputs/outputs.jsonl + GH_AW_SAFE_OUTPUTS_CONFIG_PATH: /tmp/gh-aw/safeoutputs/config.json + GH_AW_SAFE_OUTPUTS_TOOLS_PATH: /tmp/gh-aw/safeoutputs/tools.json outputs: has_patch: ${{ steps.collect_output.outputs.has_patch }} model: ${{ steps.generate_aw_info.outputs.model }} @@ -616,6 +618,7 @@ jobs: - name: Write Safe Outputs Config run: | mkdir -p /tmp/gh-aw/safeoutputs + mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs cat > /tmp/gh-aw/safeoutputs/config.json << 'EOF' {"create_pull_request":{},"missing_tool":{"max":0},"noop":{"max":1}} EOF @@ -767,50 +770,347 @@ jobs: EOF - name: Write Safe Outputs JavaScript Files run: | - cat > /tmp/gh-aw/safeoutputs/mcp-server.cjs << 'EOF' + cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' + function estimateTokens(text) { + if (!text) return 0; + return Math.ceil(text.length / 4); + } + module.exports = { + estimateTokens, + }; + EOF_ESTIMATE_TOKENS + cat > /tmp/gh-aw/safeoutputs/generate_compact_schema.cjs << 'EOF_GENERATE_COMPACT_SCHEMA' + function generateCompactSchema(content) { + try { + const parsed = JSON.parse(content); + if (Array.isArray(parsed)) { + if (parsed.length === 0) { + return "[]"; + } + const firstItem = parsed[0]; + if (typeof firstItem === "object" && firstItem !== null) { + const keys = Object.keys(firstItem); + return `[{${keys.join(", ")}}] (${parsed.length} items)`; + } + return `[${typeof firstItem}] (${parsed.length} items)`; + } else if (typeof parsed === "object" && parsed !== null) { + const keys = Object.keys(parsed); + if (keys.length > 10) { + return `{${keys.slice(0, 10).join(", ")}, ...} (${keys.length} keys)`; + } + return `{${keys.join(", ")}}`; + } + return `${typeof parsed}`; + } catch { + return "text content"; + } + } + module.exports = { + generateCompactSchema, + }; + EOF_GENERATE_COMPACT_SCHEMA + cat > /tmp/gh-aw/safeoutputs/generate_git_patch.cjs << 'EOF_GENERATE_GIT_PATCH' const fs = require("fs"); const path = require("path"); - const { execFile, execSync } = require("child_process"); - const os = require("os"); - const crypto = require("crypto"); - class ReadBuffer { - constructor() { - this._buffer = null; - } - append(chunk) { - this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk; + const { execSync } = require("child_process"); + const { getBaseBranch } = require("./get_base_branch.cjs"); + function generateGitPatch(branchName) { + const patchPath = "/tmp/gh-aw/aw.patch"; + const cwd = process.env.GITHUB_WORKSPACE || process.cwd(); + const defaultBranch = process.env.DEFAULT_BRANCH || getBaseBranch(); + const githubSha = process.env.GITHUB_SHA; + const patchDir = path.dirname(patchPath); + if (!fs.existsSync(patchDir)) { + fs.mkdirSync(patchDir, { recursive: true }); } - readMessage() { - if (!this._buffer) { - return null; - } - const index = this._buffer.indexOf("\n"); - if (index === -1) { - return null; + let patchGenerated = false; + let errorMessage = null; + try { + if (branchName) { + try { + execSync(`git show-ref --verify --quiet refs/heads/${branchName}`, { cwd, encoding: "utf8" }); + let baseRef; + try { + execSync(`git show-ref --verify --quiet refs/remotes/origin/${branchName}`, { cwd, encoding: "utf8" }); + baseRef = `origin/${branchName}`; + } catch { + execSync(`git fetch origin ${defaultBranch}`, { cwd, encoding: "utf8" }); + baseRef = execSync(`git merge-base origin/${defaultBranch} ${branchName}`, { cwd, encoding: "utf8" }).trim(); + } + const commitCount = parseInt(execSync(`git rev-list --count ${baseRef}..${branchName}`, { cwd, encoding: "utf8" }).trim(), 10); + if (commitCount > 0) { + const patchContent = execSync(`git format-patch ${baseRef}..${branchName} --stdout`, { + cwd, + encoding: "utf8", + }); + if (patchContent && patchContent.trim()) { + fs.writeFileSync(patchPath, patchContent, "utf8"); + patchGenerated = true; + } + } + } catch (branchError) { + } } - const line = this._buffer.toString("utf8", 0, index).replace(/\r$/, ""); - this._buffer = this._buffer.subarray(index + 1); - if (line.trim() === "") { - return this.readMessage(); + if (!patchGenerated) { + const currentHead = execSync("git rev-parse HEAD", { cwd, encoding: "utf8" }).trim(); + if (!githubSha) { + errorMessage = "GITHUB_SHA environment variable is not set"; + } else if (currentHead === githubSha) { + } else { + try { + execSync(`git merge-base --is-ancestor ${githubSha} HEAD`, { cwd, encoding: "utf8" }); + const commitCount = parseInt(execSync(`git rev-list --count ${githubSha}..HEAD`, { cwd, encoding: "utf8" }).trim(), 10); + if (commitCount > 0) { + const patchContent = execSync(`git format-patch ${githubSha}..HEAD --stdout`, { + cwd, + encoding: "utf8", + }); + if (patchContent && patchContent.trim()) { + fs.writeFileSync(patchPath, patchContent, "utf8"); + patchGenerated = true; + } + } + } catch { + } + } } - try { - return JSON.parse(line); - } catch (error) { - throw new Error(`Parse error: ${error instanceof Error ? error.message : String(error)}`); + } catch (error) { + errorMessage = `Failed to generate patch: ${error instanceof Error ? error.message : String(error)}`; + } + if (patchGenerated && fs.existsSync(patchPath)) { + const patchContent = fs.readFileSync(patchPath, "utf8"); + const patchSize = Buffer.byteLength(patchContent, "utf8"); + const patchLines = patchContent.split("\n").length; + if (!patchContent.trim()) { + return { + success: false, + error: "No changes to commit - patch is empty", + patchPath: patchPath, + patchSize: 0, + patchLines: 0, + }; } + return { + success: true, + patchPath: patchPath, + patchSize: patchSize, + patchLines: patchLines, + }; } + return { + success: false, + error: errorMessage || "No changes to commit - no commits found", + patchPath: patchPath, + }; } - function validateRequiredFields(args, inputSchema) { - const requiredFields = inputSchema && Array.isArray(inputSchema.required) ? inputSchema.required : []; - if (!requiredFields.length) { - return []; + module.exports = { + generateGitPatch, + }; + EOF_GENERATE_GIT_PATCH + cat > /tmp/gh-aw/safeoutputs/get_base_branch.cjs << 'EOF_GET_BASE_BRANCH' + function getBaseBranch() { + return process.env.GH_AW_BASE_BRANCH || "main"; + } + module.exports = { + getBaseBranch, + }; + EOF_GET_BASE_BRANCH + cat > /tmp/gh-aw/safeoutputs/get_current_branch.cjs << 'EOF_GET_CURRENT_BRANCH' + const { execSync } = require("child_process"); + function getCurrentBranch() { + const cwd = process.env.GITHUB_WORKSPACE || process.cwd(); + try { + const branch = execSync("git rev-parse --abbrev-ref HEAD", { + encoding: "utf8", + cwd: cwd, + }).trim(); + return branch; + } catch (error) { } - const missing = requiredFields.filter(f => { - const value = args[f]; - return value === undefined || value === null || (typeof value === "string" && value.trim() === ""); - }); - return missing; + const ghHeadRef = process.env.GITHUB_HEAD_REF; + const ghRefName = process.env.GITHUB_REF_NAME; + if (ghHeadRef) { + return ghHeadRef; + } + if (ghRefName) { + return ghRefName; + } + throw new Error("Failed to determine current branch: git command failed and no GitHub environment variables available"); + } + module.exports = { + getCurrentBranch, + }; + EOF_GET_CURRENT_BRANCH + cat > /tmp/gh-aw/safeoutputs/mcp_handler_python.cjs << 'EOF_MCP_HANDLER_PYTHON' + const { execFile } = require("child_process"); + function createPythonHandler(server, toolName, scriptPath, timeoutSeconds = 60) { + return async args => { + server.debug(` [${toolName}] Invoking Python handler: ${scriptPath}`); + server.debug(` [${toolName}] Python handler args: ${JSON.stringify(args)}`); + server.debug(` [${toolName}] Timeout: ${timeoutSeconds}s`); + const inputJson = JSON.stringify(args || {}); + server.debug( + ` [${toolName}] Input JSON (${inputJson.length} bytes): ${inputJson.substring(0, 200)}${inputJson.length > 200 ? "..." : ""}` + ); + return new Promise((resolve, reject) => { + server.debug(` [${toolName}] Executing Python script...`); + const child = execFile( + "python3", + [scriptPath], + { + env: process.env, + timeout: timeoutSeconds * 1000, + maxBuffer: 10 * 1024 * 1024, + }, + (error, stdout, stderr) => { + if (stdout) { + server.debug(` [${toolName}] stdout: ${stdout.substring(0, 500)}${stdout.length > 500 ? "..." : ""}`); + } + if (stderr) { + server.debug(` [${toolName}] stderr: ${stderr.substring(0, 500)}${stderr.length > 500 ? "..." : ""}`); + } + if (error) { + server.debugError(` [${toolName}] Python script error: `, error); + reject(error); + return; + } + let result; + try { + if (stdout && stdout.trim()) { + result = JSON.parse(stdout.trim()); + } else { + result = { stdout: stdout || "", stderr: stderr || "" }; + } + } catch (parseError) { + server.debug(` [${toolName}] Output is not JSON, returning as text`); + result = { stdout: stdout || "", stderr: stderr || "" }; + } + server.debug(` [${toolName}] Python handler completed successfully`); + resolve({ + content: [ + { + type: "text", + text: JSON.stringify(result), + }, + ], + }); + } + ); + if (child.stdin) { + child.stdin.write(inputJson); + child.stdin.end(); + } + }); + }; + } + module.exports = { + createPythonHandler, + }; + EOF_MCP_HANDLER_PYTHON + cat > /tmp/gh-aw/safeoutputs/mcp_handler_shell.cjs << 'EOF_MCP_HANDLER_SHELL' + const fs = require("fs"); + const path = require("path"); + const { execFile } = require("child_process"); + const os = require("os"); + function createShellHandler(server, toolName, scriptPath, timeoutSeconds = 60) { + return async args => { + server.debug(` [${toolName}] Invoking shell handler: ${scriptPath}`); + server.debug(` [${toolName}] Shell handler args: ${JSON.stringify(args)}`); + server.debug(` [${toolName}] Timeout: ${timeoutSeconds}s`); + const env = { ...process.env }; + for (const [key, value] of Object.entries(args || {})) { + const envKey = `INPUT_${key.toUpperCase().replace(/-/g, "_")}`; + env[envKey] = String(value); + server.debug(` [${toolName}] Set env: ${envKey}=${String(value).substring(0, 100)}${String(value).length > 100 ? "..." : ""}`); + } + const outputFile = path.join(os.tmpdir(), `mcp-shell-output-${Date.now()}-${Math.random().toString(36).substring(2)}.txt`); + env.GITHUB_OUTPUT = outputFile; + server.debug(` [${toolName}] Output file: ${outputFile}`); + fs.writeFileSync(outputFile, ""); + return new Promise((resolve, reject) => { + server.debug(` [${toolName}] Executing shell script...`); + execFile( + scriptPath, + [], + { + env, + timeout: timeoutSeconds * 1000, + maxBuffer: 10 * 1024 * 1024, + }, + (error, stdout, stderr) => { + if (stdout) { + server.debug(` [${toolName}] stdout: ${stdout.substring(0, 500)}${stdout.length > 500 ? "..." : ""}`); + } + if (stderr) { + server.debug(` [${toolName}] stderr: ${stderr.substring(0, 500)}${stderr.length > 500 ? "..." : ""}`); + } + if (error) { + server.debugError(` [${toolName}] Shell script error: `, error); + try { + if (fs.existsSync(outputFile)) { + fs.unlinkSync(outputFile); + } + } catch { + } + reject(error); + return; + } + const outputs = {}; + try { + if (fs.existsSync(outputFile)) { + const outputContent = fs.readFileSync(outputFile, "utf-8"); + server.debug( + ` [${toolName}] Output file content: ${outputContent.substring(0, 500)}${outputContent.length > 500 ? "..." : ""}` + ); + const lines = outputContent.split("\n"); + for (const line of lines) { + const trimmed = line.trim(); + if (trimmed && trimmed.includes("=")) { + const eqIndex = trimmed.indexOf("="); + const key = trimmed.substring(0, eqIndex); + const value = trimmed.substring(eqIndex + 1); + outputs[key] = value; + server.debug(` [${toolName}] Parsed output: ${key}=${value.substring(0, 100)}${value.length > 100 ? "..." : ""}`); + } + } + } + } catch (readError) { + server.debugError(` [${toolName}] Error reading output file: `, readError); + } + try { + if (fs.existsSync(outputFile)) { + fs.unlinkSync(outputFile); + } + } catch { + } + const result = { + stdout: stdout || "", + stderr: stderr || "", + outputs, + }; + server.debug(` [${toolName}] Shell handler completed, outputs: ${Object.keys(outputs).join(", ") || "(none)"}`); + resolve({ + content: [ + { + type: "text", + text: JSON.stringify(result), + }, + ], + }); + } + ); + }); + }; } + module.exports = { + createShellHandler, + }; + EOF_MCP_HANDLER_SHELL + cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' + const fs = require("fs"); + const path = require("path"); + const { ReadBuffer } = require("./read_buffer.cjs"); + const { validateRequiredFields } = require("./safe_inputs_validation.cjs"); const encoder = new TextEncoder(); function initLogFile(server) { if (server.logFileInitialized || !server.logDir || !server.logFilePath) return; @@ -993,96 +1293,7 @@ jobs: server.debugError(` [${toolName}] Warning: Could not make shell script executable: `, chmodError); } } - function createShellHandler(server, toolName, scriptPath, timeoutSeconds = 60) { - return async args => { - server.debug(` [${toolName}] Invoking shell handler: ${scriptPath}`); - server.debug(` [${toolName}] Shell handler args: ${JSON.stringify(args)}`); - server.debug(` [${toolName}] Timeout: ${timeoutSeconds}s`); - const env = { ...process.env }; - for (const [key, value] of Object.entries(args || {})) { - const envKey = `INPUT_${key.toUpperCase().replace(/-/g, "_")}`; - env[envKey] = String(value); - server.debug(` [${toolName}] Set env: ${envKey}=${String(value).substring(0, 100)}${String(value).length > 100 ? "..." : ""}`); - } - const outputFile = path.join(os.tmpdir(), `mcp-shell-output-${Date.now()}-${Math.random().toString(36).substring(2)}.txt`); - env.GITHUB_OUTPUT = outputFile; - server.debug(` [${toolName}] Output file: ${outputFile}`); - fs.writeFileSync(outputFile, ""); - return new Promise((resolve, reject) => { - server.debug(` [${toolName}] Executing shell script...`); - execFile( - scriptPath, - [], - { - env, - timeout: timeoutSeconds * 1000, - maxBuffer: 10 * 1024 * 1024, - }, - (error, stdout, stderr) => { - if (stdout) { - server.debug(` [${toolName}] stdout: ${stdout.substring(0, 500)}${stdout.length > 500 ? "..." : ""}`); - } - if (stderr) { - server.debug(` [${toolName}] stderr: ${stderr.substring(0, 500)}${stderr.length > 500 ? "..." : ""}`); - } - if (error) { - server.debugError(` [${toolName}] Shell script error: `, error); - try { - if (fs.existsSync(outputFile)) { - fs.unlinkSync(outputFile); - } - } catch { - } - reject(error); - return; - } - const outputs = {}; - try { - if (fs.existsSync(outputFile)) { - const outputContent = fs.readFileSync(outputFile, "utf-8"); - server.debug( - ` [${toolName}] Output file content: ${outputContent.substring(0, 500)}${outputContent.length > 500 ? "..." : ""}` - ); - const lines = outputContent.split("\n"); - for (const line of lines) { - const trimmed = line.trim(); - if (trimmed && trimmed.includes("=")) { - const eqIndex = trimmed.indexOf("="); - const key = trimmed.substring(0, eqIndex); - const value = trimmed.substring(eqIndex + 1); - outputs[key] = value; - server.debug(` [${toolName}] Parsed output: ${key}=${value.substring(0, 100)}${value.length > 100 ? "..." : ""}`); - } - } - } - } catch (readError) { - server.debugError(` [${toolName}] Error reading output file: `, readError); - } - try { - if (fs.existsSync(outputFile)) { - fs.unlinkSync(outputFile); - } - } catch { - } - const result = { - stdout: stdout || "", - stderr: stderr || "", - outputs, - }; - server.debug(` [${toolName}] Shell handler completed, outputs: ${Object.keys(outputs).join(", ") || "(none)"}`); - resolve({ - content: [ - { - type: "text", - text: JSON.stringify(result), - }, - ], - }); - } - ); - }); - }; - } + const { createShellHandler } = require("./mcp_handler_shell.cjs"); const timeout = tool.timeout || 60; tool.handler = createShellHandler(server, toolName, resolvedPath, timeout); loadedCount++; @@ -1100,66 +1311,7 @@ jobs: server.debugError(` [${toolName}] Warning: Could not make Python script executable: `, chmodError); } } - function createPythonHandler(server, toolName, scriptPath, timeoutSeconds = 60) { - return async args => { - server.debug(` [${toolName}] Invoking Python handler: ${scriptPath}`); - server.debug(` [${toolName}] Python handler args: ${JSON.stringify(args)}`); - server.debug(` [${toolName}] Timeout: ${timeoutSeconds}s`); - const inputJson = JSON.stringify(args || {}); - server.debug( - ` [${toolName}] Input JSON (${inputJson.length} bytes): ${inputJson.substring(0, 200)}${inputJson.length > 200 ? "..." : ""}` - ); - return new Promise((resolve, reject) => { - server.debug(` [${toolName}] Executing Python script...`); - const child = execFile( - "python3", - [scriptPath], - { - env: process.env, - timeout: timeoutSeconds * 1000, - maxBuffer: 10 * 1024 * 1024, - }, - (error, stdout, stderr) => { - if (stdout) { - server.debug(` [${toolName}] stdout: ${stdout.substring(0, 500)}${stdout.length > 500 ? "..." : ""}`); - } - if (stderr) { - server.debug(` [${toolName}] stderr: ${stderr.substring(0, 500)}${stderr.length > 500 ? "..." : ""}`); - } - if (error) { - server.debugError(` [${toolName}] Python script error: `, error); - reject(error); - return; - } - let result; - try { - if (stdout && stdout.trim()) { - result = JSON.parse(stdout.trim()); - } else { - result = { stdout: stdout || "", stderr: stderr || "" }; - } - } catch (parseError) { - server.debug(` [${toolName}] Output is not JSON, returning as text`); - result = { stdout: stdout || "", stderr: stderr || "" }; - } - server.debug(` [${toolName}] Python handler completed successfully`); - resolve({ - content: [ - { - type: "text", - text: JSON.stringify(result), - }, - ], - }); - } - ); - if (child.stdin) { - child.stdin.write(inputJson); - child.stdin.end(); - } - }); - }; - } + const { createPythonHandler } = require("./mcp_handler_python.cjs"); const timeout = tool.timeout || 60; tool.handler = createPythonHandler(server, toolName, resolvedPath, timeout); loadedCount++; @@ -1378,33 +1530,157 @@ jobs: async function processReadBuffer(server, defaultHandler) { while (true) { try { - const message = server.readBuffer.readMessage(); - if (!message) { - break; - } - server.debug(`recv: ${JSON.stringify(message)}`); - await handleMessage(server, message, defaultHandler); + const message = server.readBuffer.readMessage(); + if (!message) { + break; + } + server.debug(`recv: ${JSON.stringify(message)}`); + await handleMessage(server, message, defaultHandler); + } catch (error) { + server.debug(`Parse error: ${error instanceof Error ? error.message : String(error)}`); + } + } + } + function start(server, options = {}) { + const { defaultHandler } = options; + server.debug(`v${server.serverInfo.version} ready on stdio`); + server.debug(` tools: ${Object.keys(server.tools).join(", ")}`); + if (!Object.keys(server.tools).length) { + throw new Error("No tools registered"); + } + const onData = async chunk => { + server.readBuffer.append(chunk); + await processReadBuffer(server, defaultHandler); + }; + process.stdin.on("data", onData); + process.stdin.on("error", err => server.debug(`stdin error: ${err}`)); + process.stdin.resume(); + server.debug(`listening...`); + } + module.exports = { + createServer, + registerTool, + normalizeTool, + handleRequest, + handleMessage, + processReadBuffer, + start, + loadToolHandlers, + }; + EOF_MCP_SERVER_CORE + cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' + function normalizeBranchName(branchName) { + if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { + return branchName; + } + let normalized = branchName.replace(/[^a-zA-Z0-9\-_/.]+/g, "-"); + normalized = normalized.replace(/-+/g, "-"); + normalized = normalized.replace(/^-+|-+$/g, ""); + if (normalized.length > 128) { + normalized = normalized.substring(0, 128); + } + normalized = normalized.replace(/-+$/, ""); + normalized = normalized.toLowerCase(); + return normalized; + } + module.exports = { + normalizeBranchName, + }; + EOF_NORMALIZE_BRANCH_NAME + cat > /tmp/gh-aw/safeoutputs/read_buffer.cjs << 'EOF_READ_BUFFER' + class ReadBuffer { + constructor() { + this._buffer = null; + } + append(chunk) { + this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk; + } + readMessage() { + if (!this._buffer) { + return null; + } + const index = this._buffer.indexOf("\n"); + if (index === -1) { + return null; + } + const line = this._buffer.toString("utf8", 0, index).replace(/\r$/, ""); + this._buffer = this._buffer.subarray(index + 1); + if (line.trim() === "") { + return this.readMessage(); + } + try { + return JSON.parse(line); + } catch (error) { + throw new Error(`Parse error: ${error instanceof Error ? error.message : String(error)}`); + } + } + } + module.exports = { + ReadBuffer, + }; + EOF_READ_BUFFER + cat > /tmp/gh-aw/safeoutputs/safe_inputs_validation.cjs << 'EOF_SAFE_INPUTS_VALIDATION' + function validateRequiredFields(args, inputSchema) { + const requiredFields = inputSchema && Array.isArray(inputSchema.required) ? inputSchema.required : []; + if (!requiredFields.length) { + return []; + } + const missing = requiredFields.filter(f => { + const value = args[f]; + return value === undefined || value === null || (typeof value === "string" && value.trim() === ""); + }); + return missing; + } + module.exports = { + validateRequiredFields, + }; + EOF_SAFE_INPUTS_VALIDATION + cat > /tmp/gh-aw/safeoutputs/safe_outputs_append.cjs << 'EOF_SAFE_OUTPUTS_APPEND' + const fs = require("fs"); + function createAppendFunction(outputFile) { + return function appendSafeOutput(entry) { + if (!outputFile) throw new Error("No output file configured"); + entry.type = entry.type.replace(/-/g, "_"); + const jsonLine = JSON.stringify(entry) + "\n"; + try { + fs.appendFileSync(outputFile, jsonLine); } catch (error) { - server.debug(`Parse error: ${error instanceof Error ? error.message : String(error)}`); + throw new Error(`Failed to write to output file: ${error instanceof Error ? error.message : String(error)}`); } - } + }; } - function start(server, options = {}) { - const { defaultHandler } = options; - server.debug(`v${server.serverInfo.version} ready on stdio`); - server.debug(` tools: ${Object.keys(server.tools).join(", ")}`); - if (!Object.keys(server.tools).length) { - throw new Error("No tools registered"); + module.exports = { createAppendFunction }; + EOF_SAFE_OUTPUTS_APPEND + cat > /tmp/gh-aw/safeoutputs/safe_outputs_bootstrap.cjs << 'EOF_SAFE_OUTPUTS_BOOTSTRAP' + const fs = require("fs"); + const { loadConfig } = require("./safe_outputs_config.cjs"); + const { loadTools } = require("./safe_outputs_tools_loader.cjs"); + function bootstrapSafeOutputsServer(logger) { + logger.debug("Loading safe-outputs configuration"); + const { config, outputFile } = loadConfig(logger); + logger.debug("Loading safe-outputs tools"); + const tools = loadTools(logger); + return { config, outputFile, tools }; + } + function cleanupConfigFile(logger) { + const configPath = process.env.GH_AW_SAFE_OUTPUTS_CONFIG_PATH || "/tmp/gh-aw/safeoutputs/config.json"; + try { + if (fs.existsSync(configPath)) { + fs.unlinkSync(configPath); + logger.debug(`Deleted configuration file: ${configPath}`); + } + } catch (error) { + logger.debugError("Warning: Could not delete configuration file: ", error); } - const onData = async chunk => { - server.readBuffer.append(chunk); - await processReadBuffer(server, defaultHandler); - }; - process.stdin.on("data", onData); - process.stdin.on("error", err => server.debug(`stdin error: ${err}`)); - process.stdin.resume(); - server.debug(`listening...`); } + module.exports = { + bootstrapSafeOutputsServer, + cleanupConfigFile, + }; + EOF_SAFE_OUTPUTS_BOOTSTRAP + cat > /tmp/gh-aw/safeoutputs/safe_outputs_config.cjs << 'EOF_SAFE_OUTPUTS_CONFIG' + const fs = require("fs"); + const path = require("path"); function loadConfig(server) { const configPath = process.env.GH_AW_SAFE_OUTPUTS_CONFIG_PATH || "/tmp/gh-aw/safeoutputs/config.json"; let safeOutputsConfigRaw; @@ -1443,188 +1719,18 @@ jobs: outputFile: outputFile, }; } - function createAppendFunction(outputFile) { - return function appendSafeOutput(entry) { - if (!outputFile) throw new Error("No output file configured"); - entry.type = entry.type.replace(/-/g, "_"); - const jsonLine = JSON.stringify(entry) + "\n"; - try { - fs.appendFileSync(outputFile, jsonLine); - } catch (error) { - throw new Error(`Failed to write to output file: ${error instanceof Error ? error.message : String(error)}`); - } - }; - } - function normalizeBranchName(branchName) { - if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { - return branchName; - } - let normalized = branchName.replace(/[^a-zA-Z0-9\-_/.]+/g, "-"); - normalized = normalized.replace(/-+/g, "-"); - normalized = normalized.replace(/^-+|-+$/g, ""); - if (normalized.length > 128) { - normalized = normalized.substring(0, 128); - } - normalized = normalized.replace(/-+$/, ""); - normalized = normalized.toLowerCase(); - return normalized; - } - function estimateTokens(text) { - if (!text) return 0; - return Math.ceil(text.length / 4); - } - function generateCompactSchema(content) { - try { - const parsed = JSON.parse(content); - if (Array.isArray(parsed)) { - if (parsed.length === 0) { - return "[]"; - } - const firstItem = parsed[0]; - if (typeof firstItem === "object" && firstItem !== null) { - const keys = Object.keys(firstItem); - return `[{${keys.join(", ")}}] (${parsed.length} items)`; - } - return `[${typeof firstItem}] (${parsed.length} items)`; - } else if (typeof parsed === "object" && parsed !== null) { - const keys = Object.keys(parsed); - if (keys.length > 10) { - return `{${keys.slice(0, 10).join(", ")}, ...} (${keys.length} keys)`; - } - return `{${keys.join(", ")}}`; - } - return `${typeof parsed}`; - } catch { - return "text content"; - } - } - function writeLargeContentToFile(content) { - const logsDir = "/tmp/gh-aw/safeoutputs"; - if (!fs.existsSync(logsDir)) { - fs.mkdirSync(logsDir, { recursive: true }); - } - const hash = crypto.createHash("sha256").update(content).digest("hex"); - const filename = `${hash}.json`; - const filepath = path.join(logsDir, filename); - fs.writeFileSync(filepath, content, "utf8"); - const description = generateCompactSchema(content); - return { - filename: filename, - description: description, - }; - } - function getCurrentBranch() { - const cwd = process.env.GITHUB_WORKSPACE || process.cwd(); - try { - const branch = execSync("git rev-parse --abbrev-ref HEAD", { - encoding: "utf8", - cwd: cwd, - }).trim(); - return branch; - } catch (error) { - } - const ghHeadRef = process.env.GITHUB_HEAD_REF; - const ghRefName = process.env.GITHUB_REF_NAME; - if (ghHeadRef) { - return ghHeadRef; - } - if (ghRefName) { - return ghRefName; - } - throw new Error("Failed to determine current branch: git command failed and no GitHub environment variables available"); - } - function getBaseBranch() { - return process.env.GH_AW_BASE_BRANCH || "main"; - } - function generateGitPatch(branchName) { - const patchPath = "/tmp/gh-aw/aw.patch"; - const cwd = process.env.GITHUB_WORKSPACE || process.cwd(); - const defaultBranch = process.env.DEFAULT_BRANCH || getBaseBranch(); - const githubSha = process.env.GITHUB_SHA; - const patchDir = path.dirname(patchPath); - if (!fs.existsSync(patchDir)) { - fs.mkdirSync(patchDir, { recursive: true }); - } - let patchGenerated = false; - let errorMessage = null; - try { - if (branchName) { - try { - execSync(`git show-ref --verify --quiet refs/heads/${branchName}`, { cwd, encoding: "utf8" }); - let baseRef; - try { - execSync(`git show-ref --verify --quiet refs/remotes/origin/${branchName}`, { cwd, encoding: "utf8" }); - baseRef = `origin/${branchName}`; - } catch { - execSync(`git fetch origin ${defaultBranch}`, { cwd, encoding: "utf8" }); - baseRef = execSync(`git merge-base origin/${defaultBranch} ${branchName}`, { cwd, encoding: "utf8" }).trim(); - } - const commitCount = parseInt(execSync(`git rev-list --count ${baseRef}..${branchName}`, { cwd, encoding: "utf8" }).trim(), 10); - if (commitCount > 0) { - const patchContent = execSync(`git format-patch ${baseRef}..${branchName} --stdout`, { - cwd, - encoding: "utf8", - }); - if (patchContent && patchContent.trim()) { - fs.writeFileSync(patchPath, patchContent, "utf8"); - patchGenerated = true; - } - } - } catch (branchError) { - } - } - if (!patchGenerated) { - const currentHead = execSync("git rev-parse HEAD", { cwd, encoding: "utf8" }).trim(); - if (!githubSha) { - errorMessage = "GITHUB_SHA environment variable is not set"; - } else if (currentHead === githubSha) { - } else { - try { - execSync(`git merge-base --is-ancestor ${githubSha} HEAD`, { cwd, encoding: "utf8" }); - const commitCount = parseInt(execSync(`git rev-list --count ${githubSha}..HEAD`, { cwd, encoding: "utf8" }).trim(), 10); - if (commitCount > 0) { - const patchContent = execSync(`git format-patch ${githubSha}..HEAD --stdout`, { - cwd, - encoding: "utf8", - }); - if (patchContent && patchContent.trim()) { - fs.writeFileSync(patchPath, patchContent, "utf8"); - patchGenerated = true; - } - } - } catch { - } - } - } - } catch (error) { - errorMessage = `Failed to generate patch: ${error instanceof Error ? error.message : String(error)}`; - } - if (patchGenerated && fs.existsSync(patchPath)) { - const patchContent = fs.readFileSync(patchPath, "utf8"); - const patchSize = Buffer.byteLength(patchContent, "utf8"); - const patchLines = patchContent.split("\n").length; - if (!patchContent.trim()) { - return { - success: false, - error: "No changes to commit - patch is empty", - patchPath: patchPath, - patchSize: 0, - patchLines: 0, - }; - } - return { - success: true, - patchPath: patchPath, - patchSize: patchSize, - patchLines: patchLines, - }; - } - return { - success: false, - error: errorMessage || "No changes to commit - no commits found", - patchPath: patchPath, - }; - } + module.exports = { loadConfig }; + EOF_SAFE_OUTPUTS_CONFIG + cat > /tmp/gh-aw/safeoutputs/safe_outputs_handlers.cjs << 'EOF_SAFE_OUTPUTS_HANDLERS' + const fs = require("fs"); + const path = require("path"); + const crypto = require("crypto"); + const { normalizeBranchName } = require("./normalize_branch_name.cjs"); + const { estimateTokens } = require("./estimate_tokens.cjs"); + const { writeLargeContentToFile } = require("./write_large_content_to_file.cjs"); + const { getCurrentBranch } = require("./get_current_branch.cjs"); + const { getBaseBranch } = require("./get_base_branch.cjs"); + const { generateGitPatch } = require("./generate_git_patch.cjs"); function createHandlers(server, appendSafeOutput) { const defaultHandler = type => args => { const entry = { ...(args || {}), type }; @@ -1816,6 +1922,45 @@ jobs: pushToPullRequestBranchHandler, }; } + module.exports = { createHandlers }; + EOF_SAFE_OUTPUTS_HANDLERS + cat > /tmp/gh-aw/safeoutputs/safe_outputs_mcp_server.cjs << 'EOF_SAFE_OUTPUTS_MCP_SERVER' + const { createServer, registerTool, normalizeTool, start } = require("./mcp_server_core.cjs"); + const { createAppendFunction } = require("./safe_outputs_append.cjs"); + const { createHandlers } = require("./safe_outputs_handlers.cjs"); + const { attachHandlers, registerPredefinedTools, registerDynamicTools } = require("./safe_outputs_tools_loader.cjs"); + const { bootstrapSafeOutputsServer, cleanupConfigFile } = require("./safe_outputs_bootstrap.cjs"); + function startSafeOutputsServer(options = {}) { + const SERVER_INFO = { name: "safeoutputs", version: "1.0.0" }; + const MCP_LOG_DIR = options.logDir || process.env.GH_AW_MCP_LOG_DIR; + const server = createServer(SERVER_INFO, { logDir: MCP_LOG_DIR }); + const { config: safeOutputsConfig, outputFile, tools: ALL_TOOLS } = bootstrapSafeOutputsServer(server); + const appendSafeOutput = createAppendFunction(outputFile); + const handlers = createHandlers(server, appendSafeOutput); + const { defaultHandler } = handlers; + const toolsWithHandlers = attachHandlers(ALL_TOOLS, handlers); + server.debug(` output file: ${outputFile}`); + server.debug(` config: ${JSON.stringify(safeOutputsConfig)}`); + registerPredefinedTools(server, toolsWithHandlers, safeOutputsConfig, registerTool, normalizeTool); + registerDynamicTools(server, toolsWithHandlers, safeOutputsConfig, outputFile, registerTool, normalizeTool); + server.debug(` tools: ${Object.keys(server.tools).join(", ")}`); + if (!Object.keys(server.tools).length) throw new Error("No tools enabled in configuration"); + start(server, { defaultHandler }); + } + if (require.main === module) { + try { + startSafeOutputsServer(); + } catch (error) { + console.error(`Error starting safe-outputs server: ${error instanceof Error ? error.message : String(error)}`); + process.exit(1); + } + } + module.exports = { + startSafeOutputsServer, + }; + EOF_SAFE_OUTPUTS_MCP_SERVER + cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' + const fs = require("fs"); function loadTools(server) { const toolsPath = process.env.GH_AW_SAFE_OUTPUTS_TOOLS_PATH || "/tmp/gh-aw/safeoutputs/tools.json"; let ALL_TOOLS = []; @@ -1918,22 +2063,48 @@ jobs: } }); } - const SERVER_INFO = { name: "safeoutputs", version: "1.0.0" }; - const MCP_LOG_DIR = process.env.GH_AW_MCP_LOG_DIR; - const server = createServer(SERVER_INFO, { logDir: MCP_LOG_DIR }); - const { config: safeOutputsConfig, outputFile } = loadConfig(server); - const appendSafeOutput = createAppendFunction(outputFile); - const handlers = createHandlers(server, appendSafeOutput); - const { defaultHandler } = handlers; - let ALL_TOOLS = loadTools(server); - ALL_TOOLS = attachHandlers(ALL_TOOLS, handlers); - server.debug(` output file: ${outputFile}`); - server.debug(` config: ${JSON.stringify(safeOutputsConfig)}`); - registerPredefinedTools(server, ALL_TOOLS, safeOutputsConfig, registerTool, normalizeTool); - registerDynamicTools(server, ALL_TOOLS, safeOutputsConfig, outputFile, registerTool, normalizeTool); - server.debug(` tools: ${Object.keys(server.tools).join(", ")}`); - if (!Object.keys(server.tools).length) throw new Error("No tools enabled in configuration"); - start(server, { defaultHandler }); + module.exports = { + loadTools, + attachHandlers, + registerPredefinedTools, + registerDynamicTools, + }; + EOF_SAFE_OUTPUTS_TOOLS_LOADER + cat > /tmp/gh-aw/safeoutputs/write_large_content_to_file.cjs << 'EOF_WRITE_LARGE_CONTENT_TO_FILE' + const fs = require("fs"); + const path = require("path"); + const crypto = require("crypto"); + const { generateCompactSchema } = require("./generate_compact_schema.cjs"); + function writeLargeContentToFile(content) { + const logsDir = "/tmp/gh-aw/safeoutputs"; + if (!fs.existsSync(logsDir)) { + fs.mkdirSync(logsDir, { recursive: true }); + } + const hash = crypto.createHash("sha256").update(content).digest("hex"); + const filename = `${hash}.json`; + const filepath = path.join(logsDir, filename); + fs.writeFileSync(filepath, content, "utf8"); + const description = generateCompactSchema(content); + return { + filename: filename, + description: description, + }; + } + module.exports = { + writeLargeContentToFile, + }; + EOF_WRITE_LARGE_CONTENT_TO_FILE + cat > /tmp/gh-aw/safeoutputs/mcp-server.cjs << 'EOF' + const { startSafeOutputsServer } = require("./safe_outputs_mcp_server.cjs"); + if (require.main === module) { + try { + startSafeOutputsServer(); + } catch (error) { + console.error(`Error starting safe-outputs server: ${error instanceof Error ? error.message : String(error)}`); + process.exit(1); + } + } + module.exports = { startSafeOutputsServer }; EOF chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs @@ -1973,7 +2144,10 @@ jobs: "args": ["/tmp/gh-aw/safeoutputs/mcp-server.cjs"], "tools": ["*"], "env": { + "GH_AW_MCP_LOG_DIR": "\${GH_AW_MCP_LOG_DIR}", "GH_AW_SAFE_OUTPUTS": "\${GH_AW_SAFE_OUTPUTS}", + "GH_AW_SAFE_OUTPUTS_CONFIG_PATH": "\${GH_AW_SAFE_OUTPUTS_CONFIG_PATH}", + "GH_AW_SAFE_OUTPUTS_TOOLS_PATH": "\${GH_AW_SAFE_OUTPUTS_TOOLS_PATH}", "GH_AW_ASSETS_BRANCH": "\${GH_AW_ASSETS_BRANCH}", "GH_AW_ASSETS_MAX_SIZE_KB": "\${GH_AW_ASSETS_MAX_SIZE_KB}", "GH_AW_ASSETS_ALLOWED_EXTS": "\${GH_AW_ASSETS_ALLOWED_EXTS}", @@ -3594,14 +3768,20 @@ jobs: const outputFile = process.env.GH_AW_SAFE_OUTPUTS; const configPath = process.env.GH_AW_SAFE_OUTPUTS_CONFIG_PATH || "/tmp/gh-aw/safeoutputs/config.json"; let safeOutputsConfig; + core.info(`[INGESTION] Reading config from: ${configPath}`); try { if (fs.existsSync(configPath)) { const configFileContent = fs.readFileSync(configPath, "utf8"); + core.info(`[INGESTION] Raw config content: ${configFileContent}`); safeOutputsConfig = JSON.parse(configFileContent); + core.info(`[INGESTION] Parsed config keys: ${JSON.stringify(Object.keys(safeOutputsConfig))}`); + } else { + core.info(`[INGESTION] Config file does not exist at: ${configPath}`); } } catch (error) { core.warning(`Failed to read config file from ${configPath}: ${error instanceof Error ? error.message : String(error)}`); } + core.info(`[INGESTION] Output file path: ${outputFile}`); if (!outputFile) { core.info("GH_AW_SAFE_OUTPUTS not set, no output to collect"); core.setOutput("output", ""); @@ -3617,11 +3797,14 @@ jobs: core.info("Output file is empty"); } core.info(`Raw output content length: ${outputContent.length}`); + core.info(`[INGESTION] First 500 chars of output: ${outputContent.substring(0, 500)}`); let expectedOutputTypes = {}; if (safeOutputsConfig) { try { + core.info(`[INGESTION] Normalizing config keys (dash -> underscore)`); expectedOutputTypes = Object.fromEntries(Object.entries(safeOutputsConfig).map(([key, value]) => [key.replace(/-/g, "_"), value])); - core.info(`Expected output types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.info(`[INGESTION] Expected output types after normalization: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.info(`[INGESTION] Expected output types full config: ${JSON.stringify(expectedOutputTypes)}`); } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); core.info(`Warning: Could not parse safe-outputs config: ${errorMsg}`); @@ -3633,6 +3816,7 @@ jobs: for (let i = 0; i < lines.length; i++) { const line = lines[i].trim(); if (line === "") continue; + core.info(`[INGESTION] Processing line ${i + 1}: ${line.substring(0, 200)}...`); try { const item = parseJsonWithRepair(line); if (item === undefined) { @@ -3643,9 +3827,12 @@ jobs: errors.push(`Line ${i + 1}: Missing required 'type' field`); continue; } + const originalType = item.type; const itemType = item.type.replace(/-/g, "_"); + core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { + core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml index 918161b16a6..fadabb27d59 100644 --- a/.github/workflows/release.lock.yml +++ b/.github/workflows/release.lock.yml @@ -6459,13 +6459,13 @@ jobs: - name: Download Go modules run: go mod download - name: Generate SBOM (SPDX format) - uses: anchore/sbom-action@fbfd9c6c189226748411491745178e0c2017392d # v0 + uses: anchore/sbom-action@fbfd9c6c189226748411491745178e0c2017392d # v0.20.10 with: artifact-name: sbom.spdx.json format: spdx-json output-file: sbom.spdx.json - name: Generate SBOM (CycloneDX format) - uses: anchore/sbom-action@fbfd9c6c189226748411491745178e0c2017392d # v0 + uses: anchore/sbom-action@fbfd9c6c189226748411491745178e0c2017392d # v0.20.10 with: artifact-name: sbom.cdx.json format: cyclonedx-json From 4e8f2ffbfe5e365f049d7fa89166afa027ded60b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Dec 2025 13:04:40 +0000 Subject: [PATCH 3/4] Implement JavaScript file chunking to stay under 21KB limit Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/ai-moderator.lock.yml | 10 +- .github/workflows/ai-triage-campaign.lock.yml | 10 +- .github/workflows/archie.lock.yml | 10 +- .github/workflows/artifacts-summary.lock.yml | 10 +- .github/workflows/audit-workflows.lock.yml | 10 +- .github/workflows/blog-auditor.lock.yml | 10 +- .github/workflows/brave.lock.yml | 10 +- .../breaking-change-checker.lock.yml | 10 +- .github/workflows/changeset.lock.yml | 10 +- .github/workflows/ci-doctor.lock.yml | 10 +- .../cli-consistency-checker.lock.yml | 10 +- .../workflows/cli-version-checker.lock.yml | 10 +- .github/workflows/cloclo.lock.yml | 10 +- .../workflows/close-old-discussions.lock.yml | 10 +- .../commit-changes-analyzer.lock.yml | 10 +- .../workflows/copilot-agent-analysis.lock.yml | 10 +- .../copilot-pr-merged-report.lock.yml | 52 ++- .../copilot-pr-nlp-analysis.lock.yml | 10 +- .../copilot-pr-prompt-analysis.lock.yml | 10 +- .../copilot-session-insights.lock.yml | 10 +- .github/workflows/craft.lock.yml | 10 +- .../daily-assign-issue-to-user.lock.yml | 10 +- .github/workflows/daily-code-metrics.lock.yml | 10 +- .../daily-copilot-token-report.lock.yml | 10 +- .github/workflows/daily-doc-updater.lock.yml | 10 +- .github/workflows/daily-fact.lock.yml | 10 +- .github/workflows/daily-file-diet.lock.yml | 10 +- .../workflows/daily-firewall-report.lock.yml | 10 +- .../workflows/daily-issues-report.lock.yml | 10 +- .../daily-malicious-code-scan.lock.yml | 10 +- .../daily-multi-device-docs-tester.lock.yml | 10 +- .github/workflows/daily-news.lock.yml | 10 +- .../daily-performance-summary.lock.yml | 54 ++- .../workflows/daily-repo-chronicle.lock.yml | 10 +- .../workflows/daily-workflow-updater.lock.yml | 10 +- .github/workflows/deep-report.lock.yml | 10 +- .../workflows/dependabot-go-checker.lock.yml | 10 +- .github/workflows/dev-hawk.lock.yml | 10 +- .github/workflows/dev.lock.yml | 52 ++- .../developer-docs-consolidator.lock.yml | 10 +- .github/workflows/dictation-prompt.lock.yml | 10 +- .github/workflows/docs-noob-tester.lock.yml | 10 +- .../duplicate-code-detector.lock.yml | 10 +- .../example-workflow-analyzer.lock.yml | 10 +- .../github-mcp-structural-analysis.lock.yml | 10 +- .../github-mcp-tools-report.lock.yml | 10 +- .../workflows/glossary-maintainer.lock.yml | 10 +- .github/workflows/go-fan.lock.yml | 10 +- .github/workflows/go-logger.lock.yml | 10 +- .../workflows/go-pattern-detector.lock.yml | 10 +- .github/workflows/grumpy-reviewer.lock.yml | 10 +- .../workflows/instructions-janitor.lock.yml | 10 +- .github/workflows/issue-arborist.lock.yml | 10 +- .github/workflows/issue-classifier.lock.yml | 10 +- .github/workflows/issue-monster.lock.yml | 10 +- .github/workflows/issue-triage-agent.lock.yml | 10 +- .../workflows/layout-spec-maintainer.lock.yml | 10 +- .github/workflows/lockfile-stats.lock.yml | 10 +- .github/workflows/mcp-inspector.lock.yml | 10 +- .github/workflows/mergefest.lock.yml | 10 +- .../workflows/notion-issue-summary.lock.yml | 10 +- .github/workflows/org-health-report.lock.yml | 10 +- .github/workflows/pdf-summary.lock.yml | 10 +- .github/workflows/plan.lock.yml | 10 +- .github/workflows/poem-bot.lock.yml | 10 +- .../workflows/pr-nitpick-reviewer.lock.yml | 10 +- .../prompt-clustering-analysis.lock.yml | 10 +- .github/workflows/python-data-charts.lock.yml | 10 +- .github/workflows/q.lock.yml | 10 +- .github/workflows/release.lock.yml | 10 +- .github/workflows/repo-tree-map.lock.yml | 10 +- .../repository-quality-improver.lock.yml | 10 +- .github/workflows/research.lock.yml | 10 +- .github/workflows/safe-output-health.lock.yml | 10 +- .../schema-consistency-checker.lock.yml | 10 +- .github/workflows/scout.lock.yml | 10 +- .github/workflows/security-fix-pr.lock.yml | 10 +- .../semantic-function-refactor.lock.yml | 10 +- .github/workflows/smoke-claude.lock.yml | 10 +- .github/workflows/smoke-codex.lock.yml | 10 +- .../smoke-copilot-no-firewall.lock.yml | 52 ++- .../smoke-copilot-playwright.lock.yml | 52 ++- .../smoke-copilot-safe-inputs.lock.yml | 52 ++- .github/workflows/smoke-copilot.lock.yml | 10 +- .github/workflows/smoke-detector.lock.yml | 10 +- .github/workflows/smoke-srt.lock.yml | 10 +- .github/workflows/spec-kit-execute.lock.yml | 10 +- .github/workflows/spec-kit-executor.lock.yml | 10 +- .github/workflows/speckit-dispatcher.lock.yml | 10 +- .../workflows/stale-repo-identifier.lock.yml | 10 +- .../workflows/static-analysis-report.lock.yml | 10 +- .github/workflows/super-linter.lock.yml | 10 +- .../workflows/technical-doc-writer.lock.yml | 10 +- .../test-discussion-expires.lock.yml | 10 +- .../workflows/test-python-safe-input.lock.yml | 54 ++- .github/workflows/tidy.lock.yml | 10 +- .github/workflows/typist.lock.yml | 10 +- .github/workflows/unbloat-docs.lock.yml | 10 +- .github/workflows/video-analyzer.lock.yml | 10 +- .../workflows/weekly-issue-summary.lock.yml | 10 +- pkg/workflow/mcp_servers.go | 320 ++++++++++++------ pkg/workflow/mcp_servers_test.go | 145 ++++++++ 102 files changed, 1452 insertions(+), 311 deletions(-) diff --git a/.github/workflows/ai-moderator.lock.yml b/.github/workflows/ai-moderator.lock.yml index c27a98d3a77..a3974cfb75e 100644 --- a/.github/workflows/ai-moderator.lock.yml +++ b/.github/workflows/ai-moderator.lock.yml @@ -1556,7 +1556,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1894,6 +1894,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2356,6 +2358,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2747,6 +2751,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2894,6 +2900,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/ai-triage-campaign.lock.yml b/.github/workflows/ai-triage-campaign.lock.yml index 9d841a472f3..17175ebb19f 100644 --- a/.github/workflows/ai-triage-campaign.lock.yml +++ b/.github/workflows/ai-triage-campaign.lock.yml @@ -534,7 +534,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -872,6 +872,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1334,6 +1336,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1725,6 +1729,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1872,6 +1878,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml index 4da5ec52a05..849e7d2a155 100644 --- a/.github/workflows/archie.lock.yml +++ b/.github/workflows/archie.lock.yml @@ -2021,7 +2021,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2359,6 +2359,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2821,6 +2823,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3212,6 +3216,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3359,6 +3365,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/artifacts-summary.lock.yml b/.github/workflows/artifacts-summary.lock.yml index 473d35dfdcd..ef7608dc84d 100644 --- a/.github/workflows/artifacts-summary.lock.yml +++ b/.github/workflows/artifacts-summary.lock.yml @@ -605,7 +605,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -943,6 +943,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1405,6 +1407,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1796,6 +1800,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1943,6 +1949,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index bf7d5a9419c..99009d6e5ba 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -1417,7 +1417,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1755,6 +1755,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2217,6 +2219,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2608,6 +2612,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2755,6 +2761,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/blog-auditor.lock.yml b/.github/workflows/blog-auditor.lock.yml index 7b1acc4d92b..42d8ffe9c88 100644 --- a/.github/workflows/blog-auditor.lock.yml +++ b/.github/workflows/blog-auditor.lock.yml @@ -920,7 +920,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1258,6 +1258,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1720,6 +1722,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2111,6 +2115,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2258,6 +2264,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/brave.lock.yml b/.github/workflows/brave.lock.yml index ca8481870bd..d3928d1d3be 100644 --- a/.github/workflows/brave.lock.yml +++ b/.github/workflows/brave.lock.yml @@ -1906,7 +1906,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2244,6 +2244,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2706,6 +2708,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3097,6 +3101,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3244,6 +3250,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml index 3f275d52bba..ae244156599 100644 --- a/.github/workflows/breaking-change-checker.lock.yml +++ b/.github/workflows/breaking-change-checker.lock.yml @@ -652,7 +652,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -990,6 +990,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1452,6 +1454,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1843,6 +1847,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1990,6 +1996,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index 2d921a104f6..9ec1b869e0e 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -1525,7 +1525,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1863,6 +1863,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2325,6 +2327,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2716,6 +2720,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2863,6 +2869,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index 44d26c23eb2..c9b02e0310a 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -1334,7 +1334,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1672,6 +1672,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2134,6 +2136,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2525,6 +2529,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2672,6 +2678,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/cli-consistency-checker.lock.yml b/.github/workflows/cli-consistency-checker.lock.yml index 176193dbb3a..f4797320f49 100644 --- a/.github/workflows/cli-consistency-checker.lock.yml +++ b/.github/workflows/cli-consistency-checker.lock.yml @@ -653,7 +653,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -991,6 +991,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1453,6 +1455,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1844,6 +1848,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1991,6 +1997,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index d1e80a3919d..f3cff796d94 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -921,7 +921,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1259,6 +1259,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1721,6 +1723,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2112,6 +2116,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2259,6 +2265,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 2482aa5b0db..bf9eeed2d9e 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -2321,7 +2321,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2659,6 +2659,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -3121,6 +3123,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3512,6 +3516,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3659,6 +3665,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/close-old-discussions.lock.yml b/.github/workflows/close-old-discussions.lock.yml index 55cf450dbd1..cd4047da139 100644 --- a/.github/workflows/close-old-discussions.lock.yml +++ b/.github/workflows/close-old-discussions.lock.yml @@ -815,7 +815,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1153,6 +1153,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1615,6 +1617,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2006,6 +2010,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2153,6 +2159,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/commit-changes-analyzer.lock.yml b/.github/workflows/commit-changes-analyzer.lock.yml index d268f0fd1d7..3416a98b21a 100644 --- a/.github/workflows/commit-changes-analyzer.lock.yml +++ b/.github/workflows/commit-changes-analyzer.lock.yml @@ -879,7 +879,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1217,6 +1217,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1679,6 +1681,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2070,6 +2074,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2217,6 +2223,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/copilot-agent-analysis.lock.yml b/.github/workflows/copilot-agent-analysis.lock.yml index aa3d0d71095..cd0ddb1381f 100644 --- a/.github/workflows/copilot-agent-analysis.lock.yml +++ b/.github/workflows/copilot-agent-analysis.lock.yml @@ -1229,7 +1229,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1567,6 +1567,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2029,6 +2031,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2420,6 +2424,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2567,6 +2573,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/copilot-pr-merged-report.lock.yml b/.github/workflows/copilot-pr-merged-report.lock.yml index 1d7fab51637..314bad76b2a 100644 --- a/.github/workflows/copilot-pr-merged-report.lock.yml +++ b/.github/workflows/copilot-pr-merged-report.lock.yml @@ -794,7 +794,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1132,6 +1132,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1594,6 +1596,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1985,6 +1989,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2132,11 +2138,15 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - - name: Setup Safe Inputs JavaScript and Config + - name: Setup Safe Inputs Directory run: | mkdir -p /tmp/gh-aw/safe-inputs/logs + - name: Setup Safe Inputs JavaScript (part 1) + run: | cat > /tmp/gh-aw/safe-inputs/read_buffer.cjs << 'EOF_READ_BUFFER' class ReadBuffer { constructor() { @@ -2169,6 +2179,8 @@ jobs: ReadBuffer, }; EOF_READ_BUFFER + - name: Setup Safe Inputs JavaScript (part 2) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_server_core.cjs << 'EOF_MCP_CORE' const fs = require("fs"); const path = require("path"); @@ -2631,6 +2643,8 @@ jobs: loadToolHandlers, }; EOF_MCP_CORE + - name: Setup Safe Inputs JavaScript (part 3) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_http_transport.cjs << 'EOF_MCP_HTTP_TRANSPORT' const http = require("http"); const { randomUUID } = require("crypto"); @@ -3085,6 +3099,8 @@ jobs: cleanupConfigFile, }; EOF_BOOTSTRAP + - name: Setup Safe Inputs JavaScript (part 4) + run: | cat > /tmp/gh-aw/safe-inputs/safe_inputs_mcp_server.cjs << 'EOF_SAFE_INPUTS_SERVER' const { createServer, registerTool, start } = require("./mcp_server_core.cjs"); const { loadConfig } = require("./safe_inputs_config_loader.cjs"); @@ -3369,6 +3385,22 @@ jobs: createMCPServer, }; EOF_SAFE_INPUTS_SERVER_HTTP + cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' + const path = require("path"); + const { startSafeInputsServer } = require("./safe_inputs_mcp_server.cjs"); + const configPath = path.join(__dirname, "tools.json"); + try { + startSafeInputsServer(configPath, { + logDir: "/tmp/gh-aw/safe-inputs/logs", + skipCleanup: true + }); + } catch (error) { + console.error("Failed to start safe-inputs stdio server:", error); + process.exit(1); + } + EOFSI + - name: Setup Safe Inputs Config + run: | cat > /tmp/gh-aw/safe-inputs/tools.json << 'EOF_TOOLS_JSON' { "serverName": "safeinputs", @@ -3399,20 +3431,8 @@ jobs: ] } EOF_TOOLS_JSON - cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' - const path = require("path"); - const { startSafeInputsServer } = require("./safe_inputs_mcp_server.cjs"); - const configPath = path.join(__dirname, "tools.json"); - try { - startSafeInputsServer(configPath, { - logDir: "/tmp/gh-aw/safe-inputs/logs", - skipCleanup: true - }); - } catch (error) { - console.error("Failed to start safe-inputs stdio server:", error); - process.exit(1); - } - EOFSI + - name: Make Safe Inputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safe-inputs/mcp-server.cjs - name: Setup Safe Inputs Tool Files diff --git a/.github/workflows/copilot-pr-nlp-analysis.lock.yml b/.github/workflows/copilot-pr-nlp-analysis.lock.yml index 2282a243b92..7288016b7d9 100644 --- a/.github/workflows/copilot-pr-nlp-analysis.lock.yml +++ b/.github/workflows/copilot-pr-nlp-analysis.lock.yml @@ -1444,7 +1444,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1782,6 +1782,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2244,6 +2246,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2635,6 +2639,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2782,6 +2788,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/copilot-pr-prompt-analysis.lock.yml b/.github/workflows/copilot-pr-prompt-analysis.lock.yml index a2668e3bb9a..98fc2d7ad4d 100644 --- a/.github/workflows/copilot-pr-prompt-analysis.lock.yml +++ b/.github/workflows/copilot-pr-prompt-analysis.lock.yml @@ -944,7 +944,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1282,6 +1282,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1744,6 +1746,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2135,6 +2139,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2282,6 +2288,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/copilot-session-insights.lock.yml b/.github/workflows/copilot-session-insights.lock.yml index 583a9ef314a..24ca4b93ac6 100644 --- a/.github/workflows/copilot-session-insights.lock.yml +++ b/.github/workflows/copilot-session-insights.lock.yml @@ -1959,7 +1959,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2297,6 +2297,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2759,6 +2761,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3150,6 +3154,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3297,6 +3303,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml index 90258a87b8e..b8cf036d225 100644 --- a/.github/workflows/craft.lock.yml +++ b/.github/workflows/craft.lock.yml @@ -2116,7 +2116,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2454,6 +2454,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2916,6 +2918,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3307,6 +3311,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3454,6 +3460,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-assign-issue-to-user.lock.yml b/.github/workflows/daily-assign-issue-to-user.lock.yml index b772d8c2a09..197aa7e5529 100644 --- a/.github/workflows/daily-assign-issue-to-user.lock.yml +++ b/.github/workflows/daily-assign-issue-to-user.lock.yml @@ -1097,7 +1097,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1435,6 +1435,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1897,6 +1899,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2288,6 +2292,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2435,6 +2441,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-code-metrics.lock.yml b/.github/workflows/daily-code-metrics.lock.yml index ad209e43054..d5718900c37 100644 --- a/.github/workflows/daily-code-metrics.lock.yml +++ b/.github/workflows/daily-code-metrics.lock.yml @@ -1461,7 +1461,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1799,6 +1799,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2261,6 +2263,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2652,6 +2656,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2799,6 +2805,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-copilot-token-report.lock.yml b/.github/workflows/daily-copilot-token-report.lock.yml index 0a004415659..e01721c206c 100644 --- a/.github/workflows/daily-copilot-token-report.lock.yml +++ b/.github/workflows/daily-copilot-token-report.lock.yml @@ -1512,7 +1512,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1850,6 +1850,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2312,6 +2314,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2703,6 +2707,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2850,6 +2856,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index 5c6d9e80184..6a786b469ad 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -773,7 +773,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1111,6 +1111,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1573,6 +1575,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1964,6 +1968,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2111,6 +2117,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-fact.lock.yml b/.github/workflows/daily-fact.lock.yml index 53d43b1f082..94a93cf0966 100644 --- a/.github/workflows/daily-fact.lock.yml +++ b/.github/workflows/daily-fact.lock.yml @@ -1106,7 +1106,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1444,6 +1444,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1906,6 +1908,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2297,6 +2301,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2444,6 +2450,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml index 0801d6f9ea3..929fb2b89e8 100644 --- a/.github/workflows/daily-file-diet.lock.yml +++ b/.github/workflows/daily-file-diet.lock.yml @@ -803,7 +803,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1141,6 +1141,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1603,6 +1605,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1994,6 +1998,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2141,6 +2147,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-firewall-report.lock.yml b/.github/workflows/daily-firewall-report.lock.yml index 84ff7a3e60a..aaa6ce3f457 100644 --- a/.github/workflows/daily-firewall-report.lock.yml +++ b/.github/workflows/daily-firewall-report.lock.yml @@ -1213,7 +1213,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1551,6 +1551,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2013,6 +2015,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2404,6 +2408,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2551,6 +2557,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index 0dd48c06a6f..15e431ed097 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -1606,7 +1606,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1944,6 +1944,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2406,6 +2408,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2797,6 +2801,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2944,6 +2950,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-malicious-code-scan.lock.yml b/.github/workflows/daily-malicious-code-scan.lock.yml index 35a5643dda3..61b230cd85c 100644 --- a/.github/workflows/daily-malicious-code-scan.lock.yml +++ b/.github/workflows/daily-malicious-code-scan.lock.yml @@ -783,7 +783,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1121,6 +1121,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1583,6 +1585,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1974,6 +1978,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2121,6 +2127,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-multi-device-docs-tester.lock.yml b/.github/workflows/daily-multi-device-docs-tester.lock.yml index a6fb17abf14..438ca1576fe 100644 --- a/.github/workflows/daily-multi-device-docs-tester.lock.yml +++ b/.github/workflows/daily-multi-device-docs-tester.lock.yml @@ -735,7 +735,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1073,6 +1073,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1535,6 +1537,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1926,6 +1930,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2073,6 +2079,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index c4bea86a6f4..cb4747b4ac7 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -1531,7 +1531,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1869,6 +1869,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2331,6 +2333,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2722,6 +2726,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2869,6 +2875,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-performance-summary.lock.yml b/.github/workflows/daily-performance-summary.lock.yml index d3bf9bd47f0..b5ec45f45e1 100644 --- a/.github/workflows/daily-performance-summary.lock.yml +++ b/.github/workflows/daily-performance-summary.lock.yml @@ -1368,7 +1368,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1706,6 +1706,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2168,6 +2170,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2559,6 +2563,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2706,11 +2712,15 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - - name: Setup Safe Inputs JavaScript and Config + - name: Setup Safe Inputs Directory run: | mkdir -p /tmp/gh-aw/safe-inputs/logs + - name: Setup Safe Inputs JavaScript (part 1) + run: | cat > /tmp/gh-aw/safe-inputs/read_buffer.cjs << 'EOF_READ_BUFFER' class ReadBuffer { constructor() { @@ -2743,6 +2753,8 @@ jobs: ReadBuffer, }; EOF_READ_BUFFER + - name: Setup Safe Inputs JavaScript (part 2) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_server_core.cjs << 'EOF_MCP_CORE' const fs = require("fs"); const path = require("path"); @@ -3205,6 +3217,8 @@ jobs: loadToolHandlers, }; EOF_MCP_CORE + - name: Setup Safe Inputs JavaScript (part 3) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_http_transport.cjs << 'EOF_MCP_HTTP_TRANSPORT' const http = require("http"); const { randomUUID } = require("crypto"); @@ -3659,6 +3673,8 @@ jobs: cleanupConfigFile, }; EOF_BOOTSTRAP + - name: Setup Safe Inputs JavaScript (part 4) + run: | cat > /tmp/gh-aw/safe-inputs/safe_inputs_mcp_server.cjs << 'EOF_SAFE_INPUTS_SERVER' const { createServer, registerTool, start } = require("./mcp_server_core.cjs"); const { loadConfig } = require("./safe_inputs_config_loader.cjs"); @@ -3943,6 +3959,23 @@ jobs: createMCPServer, }; EOF_SAFE_INPUTS_SERVER_HTTP + cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' + const path = require("path"); + const { startHttpServer } = require("./safe_inputs_mcp_server_http.cjs"); + const configPath = path.join(__dirname, "tools.json"); + const port = parseInt(process.env.GH_AW_SAFE_INPUTS_PORT || "3000", 10); + const apiKey = process.env.GH_AW_SAFE_INPUTS_API_KEY || ""; + startHttpServer(configPath, { + port: port, + stateless: false, + logDir: "/tmp/gh-aw/safe-inputs/logs" + }).catch(error => { + console.error("Failed to start safe-inputs HTTP server:", error); + process.exit(1); + }); + EOFSI + - name: Setup Safe Inputs Config + run: | cat > /tmp/gh-aw/safe-inputs/tools.json << 'EOF_TOOLS_JSON' { "serverName": "safeinputs", @@ -4038,21 +4071,8 @@ jobs: ] } EOF_TOOLS_JSON - cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' - const path = require("path"); - const { startHttpServer } = require("./safe_inputs_mcp_server_http.cjs"); - const configPath = path.join(__dirname, "tools.json"); - const port = parseInt(process.env.GH_AW_SAFE_INPUTS_PORT || "3000", 10); - const apiKey = process.env.GH_AW_SAFE_INPUTS_API_KEY || ""; - startHttpServer(configPath, { - port: port, - stateless: false, - logDir: "/tmp/gh-aw/safe-inputs/logs" - }).catch(error => { - console.error("Failed to start safe-inputs HTTP server:", error); - process.exit(1); - }); - EOFSI + - name: Make Safe Inputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safe-inputs/mcp-server.cjs - name: Setup Safe Inputs Tool Files diff --git a/.github/workflows/daily-repo-chronicle.lock.yml b/.github/workflows/daily-repo-chronicle.lock.yml index 84da0bd3f61..22e0ca16016 100644 --- a/.github/workflows/daily-repo-chronicle.lock.yml +++ b/.github/workflows/daily-repo-chronicle.lock.yml @@ -1216,7 +1216,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1554,6 +1554,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2016,6 +2018,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2407,6 +2411,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2554,6 +2560,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index 53327a16df9..5fd99cfc5e8 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -644,7 +644,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -982,6 +982,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1444,6 +1446,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1835,6 +1839,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1982,6 +1988,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml index 467be715950..067b11e7951 100644 --- a/.github/workflows/deep-report.lock.yml +++ b/.github/workflows/deep-report.lock.yml @@ -1088,7 +1088,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1426,6 +1426,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1888,6 +1890,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2279,6 +2283,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2426,6 +2432,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/dependabot-go-checker.lock.yml b/.github/workflows/dependabot-go-checker.lock.yml index d1687bce3a1..96bdb481ac4 100644 --- a/.github/workflows/dependabot-go-checker.lock.yml +++ b/.github/workflows/dependabot-go-checker.lock.yml @@ -956,7 +956,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1294,6 +1294,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1756,6 +1758,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2147,6 +2151,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2294,6 +2300,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml index 6cdb809562c..6910bd4ec04 100644 --- a/.github/workflows/dev-hawk.lock.yml +++ b/.github/workflows/dev-hawk.lock.yml @@ -1170,7 +1170,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1508,6 +1508,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1970,6 +1972,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2361,6 +2365,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2508,6 +2514,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index d1cc63e5d73..4e13d7c1cd3 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -498,7 +498,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -836,6 +836,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1298,6 +1300,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1689,6 +1693,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1836,11 +1842,15 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - - name: Setup Safe Inputs JavaScript and Config + - name: Setup Safe Inputs Directory run: | mkdir -p /tmp/gh-aw/safe-inputs/logs + - name: Setup Safe Inputs JavaScript (part 1) + run: | cat > /tmp/gh-aw/safe-inputs/read_buffer.cjs << 'EOF_READ_BUFFER' class ReadBuffer { constructor() { @@ -1873,6 +1883,8 @@ jobs: ReadBuffer, }; EOF_READ_BUFFER + - name: Setup Safe Inputs JavaScript (part 2) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_server_core.cjs << 'EOF_MCP_CORE' const fs = require("fs"); const path = require("path"); @@ -2335,6 +2347,8 @@ jobs: loadToolHandlers, }; EOF_MCP_CORE + - name: Setup Safe Inputs JavaScript (part 3) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_http_transport.cjs << 'EOF_MCP_HTTP_TRANSPORT' const http = require("http"); const { randomUUID } = require("crypto"); @@ -2789,6 +2803,8 @@ jobs: cleanupConfigFile, }; EOF_BOOTSTRAP + - name: Setup Safe Inputs JavaScript (part 4) + run: | cat > /tmp/gh-aw/safe-inputs/safe_inputs_mcp_server.cjs << 'EOF_SAFE_INPUTS_SERVER' const { createServer, registerTool, start } = require("./mcp_server_core.cjs"); const { loadConfig } = require("./safe_inputs_config_loader.cjs"); @@ -3073,6 +3089,22 @@ jobs: createMCPServer, }; EOF_SAFE_INPUTS_SERVER_HTTP + cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' + const path = require("path"); + const { startSafeInputsServer } = require("./safe_inputs_mcp_server.cjs"); + const configPath = path.join(__dirname, "tools.json"); + try { + startSafeInputsServer(configPath, { + logDir: "/tmp/gh-aw/safe-inputs/logs", + skipCleanup: true + }); + } catch (error) { + console.error("Failed to start safe-inputs stdio server:", error); + process.exit(1); + } + EOFSI + - name: Setup Safe Inputs Config + run: | cat > /tmp/gh-aw/safe-inputs/tools.json << 'EOF_TOOLS_JSON' { "serverName": "safeinputs", @@ -3103,20 +3135,8 @@ jobs: ] } EOF_TOOLS_JSON - cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' - const path = require("path"); - const { startSafeInputsServer } = require("./safe_inputs_mcp_server.cjs"); - const configPath = path.join(__dirname, "tools.json"); - try { - startSafeInputsServer(configPath, { - logDir: "/tmp/gh-aw/safe-inputs/logs", - skipCleanup: true - }); - } catch (error) { - console.error("Failed to start safe-inputs stdio server:", error); - process.exit(1); - } - EOFSI + - name: Make Safe Inputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safe-inputs/mcp-server.cjs - name: Setup Safe Inputs Tool Files diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index 37bfe5773b0..6ea89d5d252 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -1349,7 +1349,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1687,6 +1687,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2149,6 +2151,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2540,6 +2544,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2687,6 +2693,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index 83c7ed57a47..3aa692d2553 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -630,7 +630,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -968,6 +968,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1430,6 +1432,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1821,6 +1825,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1968,6 +1974,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/docs-noob-tester.lock.yml b/.github/workflows/docs-noob-tester.lock.yml index 76e4261b730..c4847201822 100644 --- a/.github/workflows/docs-noob-tester.lock.yml +++ b/.github/workflows/docs-noob-tester.lock.yml @@ -660,7 +660,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -998,6 +998,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1460,6 +1462,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1851,6 +1855,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1998,6 +2004,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/duplicate-code-detector.lock.yml b/.github/workflows/duplicate-code-detector.lock.yml index 1cb480bed3c..5cc0e69c733 100644 --- a/.github/workflows/duplicate-code-detector.lock.yml +++ b/.github/workflows/duplicate-code-detector.lock.yml @@ -708,7 +708,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1046,6 +1046,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1508,6 +1510,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1899,6 +1903,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2046,6 +2052,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/example-workflow-analyzer.lock.yml b/.github/workflows/example-workflow-analyzer.lock.yml index 6176aaa4b3c..ee5f2a5fe06 100644 --- a/.github/workflows/example-workflow-analyzer.lock.yml +++ b/.github/workflows/example-workflow-analyzer.lock.yml @@ -677,7 +677,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1015,6 +1015,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1477,6 +1479,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1868,6 +1872,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2015,6 +2021,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/github-mcp-structural-analysis.lock.yml b/.github/workflows/github-mcp-structural-analysis.lock.yml index 467e4d19843..b911e10ca68 100644 --- a/.github/workflows/github-mcp-structural-analysis.lock.yml +++ b/.github/workflows/github-mcp-structural-analysis.lock.yml @@ -1316,7 +1316,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1654,6 +1654,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2116,6 +2118,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2507,6 +2511,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2654,6 +2660,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index c226488822e..9d7046e1025 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -1200,7 +1200,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1538,6 +1538,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2000,6 +2002,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2391,6 +2395,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2538,6 +2544,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index 85b0645f486..3e1c483eb4b 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -1139,7 +1139,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1477,6 +1477,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1939,6 +1941,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2330,6 +2334,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2477,6 +2483,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/go-fan.lock.yml b/.github/workflows/go-fan.lock.yml index ea2fad7b92a..57fb61cdacf 100644 --- a/.github/workflows/go-fan.lock.yml +++ b/.github/workflows/go-fan.lock.yml @@ -975,7 +975,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1313,6 +1313,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1775,6 +1777,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2166,6 +2170,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2313,6 +2319,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index c5d38a0d7b7..e95ab9b8eb8 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -901,7 +901,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1239,6 +1239,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1701,6 +1703,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2092,6 +2096,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2239,6 +2245,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/go-pattern-detector.lock.yml b/.github/workflows/go-pattern-detector.lock.yml index 18c9fa1428c..69ce011a660 100644 --- a/.github/workflows/go-pattern-detector.lock.yml +++ b/.github/workflows/go-pattern-detector.lock.yml @@ -765,7 +765,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1103,6 +1103,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1565,6 +1567,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1956,6 +1960,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2103,6 +2109,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml index 60ae919770b..2685770bd62 100644 --- a/.github/workflows/grumpy-reviewer.lock.yml +++ b/.github/workflows/grumpy-reviewer.lock.yml @@ -2033,7 +2033,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2371,6 +2371,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2833,6 +2835,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3224,6 +3228,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3371,6 +3377,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index c33350cc920..35c6dd93436 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -770,7 +770,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1108,6 +1108,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1570,6 +1572,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1961,6 +1965,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2108,6 +2114,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/issue-arborist.lock.yml b/.github/workflows/issue-arborist.lock.yml index bcb02ee42fb..f0d77bdd719 100644 --- a/.github/workflows/issue-arborist.lock.yml +++ b/.github/workflows/issue-arborist.lock.yml @@ -754,7 +754,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1092,6 +1092,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1554,6 +1556,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1945,6 +1949,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2092,6 +2098,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/issue-classifier.lock.yml b/.github/workflows/issue-classifier.lock.yml index bb23081b4f2..2627d08770b 100644 --- a/.github/workflows/issue-classifier.lock.yml +++ b/.github/workflows/issue-classifier.lock.yml @@ -1763,7 +1763,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2101,6 +2101,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2563,6 +2565,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2954,6 +2958,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3101,6 +3107,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index 6c952ac7dfe..f1464547f15 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -1314,7 +1314,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1652,6 +1652,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2114,6 +2116,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2505,6 +2509,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2652,6 +2658,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/issue-triage-agent.lock.yml b/.github/workflows/issue-triage-agent.lock.yml index ca383732bb6..f377a32fc42 100644 --- a/.github/workflows/issue-triage-agent.lock.yml +++ b/.github/workflows/issue-triage-agent.lock.yml @@ -951,7 +951,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1289,6 +1289,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1751,6 +1753,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2142,6 +2146,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2289,6 +2295,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index d0ecfc9ceff..8c78811c431 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -768,7 +768,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1106,6 +1106,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1568,6 +1570,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1959,6 +1963,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2106,6 +2112,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index 16b3963edcc..74d40d83d47 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -995,7 +995,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1333,6 +1333,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1795,6 +1797,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2186,6 +2190,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2333,6 +2339,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index bef3a8028be..88fee388a54 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -835,7 +835,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1173,6 +1173,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1635,6 +1637,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2026,6 +2030,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2173,6 +2179,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml index 7b62b07f76a..4dd3d6d7f70 100644 --- a/.github/workflows/mergefest.lock.yml +++ b/.github/workflows/mergefest.lock.yml @@ -1183,7 +1183,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1521,6 +1521,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1983,6 +1985,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2374,6 +2378,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2521,6 +2527,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/notion-issue-summary.lock.yml b/.github/workflows/notion-issue-summary.lock.yml index 9cc8011e4b1..a8de426594f 100644 --- a/.github/workflows/notion-issue-summary.lock.yml +++ b/.github/workflows/notion-issue-summary.lock.yml @@ -419,7 +419,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -757,6 +757,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1219,6 +1221,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1610,6 +1614,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1757,6 +1763,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/org-health-report.lock.yml b/.github/workflows/org-health-report.lock.yml index 49ae51709ca..2618137f759 100644 --- a/.github/workflows/org-health-report.lock.yml +++ b/.github/workflows/org-health-report.lock.yml @@ -1424,7 +1424,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1762,6 +1762,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2224,6 +2226,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2615,6 +2619,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2762,6 +2768,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index dd26b1ace70..b450bab6fdb 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -2018,7 +2018,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2356,6 +2356,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2818,6 +2820,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3209,6 +3213,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3356,6 +3362,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml index decf62d8c1e..f23b9364cda 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -1425,7 +1425,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1763,6 +1763,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2225,6 +2227,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2616,6 +2620,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2763,6 +2769,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index db2de3c2a5e..08ed50a8bc0 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -3147,7 +3147,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -3485,6 +3485,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -3947,6 +3949,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -4338,6 +4342,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -4485,6 +4491,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml index 8c5423a49f3..968124362f2 100644 --- a/.github/workflows/pr-nitpick-reviewer.lock.yml +++ b/.github/workflows/pr-nitpick-reviewer.lock.yml @@ -2069,7 +2069,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2407,6 +2407,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2869,6 +2871,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3260,6 +3264,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3407,6 +3413,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/prompt-clustering-analysis.lock.yml b/.github/workflows/prompt-clustering-analysis.lock.yml index 5f858d733ef..e3eeb725168 100644 --- a/.github/workflows/prompt-clustering-analysis.lock.yml +++ b/.github/workflows/prompt-clustering-analysis.lock.yml @@ -1681,7 +1681,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2019,6 +2019,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2481,6 +2483,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2872,6 +2876,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3019,6 +3025,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/python-data-charts.lock.yml b/.github/workflows/python-data-charts.lock.yml index fbf38242927..21729ba4052 100644 --- a/.github/workflows/python-data-charts.lock.yml +++ b/.github/workflows/python-data-charts.lock.yml @@ -1517,7 +1517,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1855,6 +1855,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2317,6 +2319,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2708,6 +2712,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2855,6 +2861,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 0b5bc4872ed..8a8f9790aea 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -2336,7 +2336,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2674,6 +2674,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -3136,6 +3138,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3527,6 +3531,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3674,6 +3680,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml index fadabb27d59..9c45bc0ad23 100644 --- a/.github/workflows/release.lock.yml +++ b/.github/workflows/release.lock.yml @@ -772,7 +772,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1110,6 +1110,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1572,6 +1574,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1963,6 +1967,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2110,6 +2116,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/repo-tree-map.lock.yml b/.github/workflows/repo-tree-map.lock.yml index 0561c73a585..c77be97c045 100644 --- a/.github/workflows/repo-tree-map.lock.yml +++ b/.github/workflows/repo-tree-map.lock.yml @@ -658,7 +658,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -996,6 +996,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1458,6 +1460,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1849,6 +1853,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1996,6 +2002,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/repository-quality-improver.lock.yml b/.github/workflows/repository-quality-improver.lock.yml index 710b2f6ba99..55aa74ce0fd 100644 --- a/.github/workflows/repository-quality-improver.lock.yml +++ b/.github/workflows/repository-quality-improver.lock.yml @@ -1114,7 +1114,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1452,6 +1452,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1914,6 +1916,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2305,6 +2309,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2452,6 +2458,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/research.lock.yml b/.github/workflows/research.lock.yml index 95f512fa12d..f6e16054b1e 100644 --- a/.github/workflows/research.lock.yml +++ b/.github/workflows/research.lock.yml @@ -580,7 +580,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -918,6 +918,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1380,6 +1382,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1771,6 +1775,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1918,6 +1924,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/safe-output-health.lock.yml b/.github/workflows/safe-output-health.lock.yml index 10a70a5a01b..b3db88908d5 100644 --- a/.github/workflows/safe-output-health.lock.yml +++ b/.github/workflows/safe-output-health.lock.yml @@ -1120,7 +1120,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1458,6 +1458,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1920,6 +1922,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2311,6 +2315,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2458,6 +2464,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index e302e5e508e..cc7f9da6744 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -1005,7 +1005,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1343,6 +1343,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1805,6 +1807,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2196,6 +2200,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2343,6 +2349,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index 4491a52d1d8..f5a665fdd9d 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -2322,7 +2322,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2660,6 +2660,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -3122,6 +3124,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3513,6 +3517,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3660,6 +3666,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/security-fix-pr.lock.yml b/.github/workflows/security-fix-pr.lock.yml index 33774dd11bf..318d1811400 100644 --- a/.github/workflows/security-fix-pr.lock.yml +++ b/.github/workflows/security-fix-pr.lock.yml @@ -747,7 +747,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1085,6 +1085,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1547,6 +1549,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1938,6 +1942,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2085,6 +2091,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/semantic-function-refactor.lock.yml b/.github/workflows/semantic-function-refactor.lock.yml index 3067f2dd1d8..2134048ecf3 100644 --- a/.github/workflows/semantic-function-refactor.lock.yml +++ b/.github/workflows/semantic-function-refactor.lock.yml @@ -1154,7 +1154,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1492,6 +1492,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1954,6 +1956,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2345,6 +2349,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2492,6 +2498,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index 09721ad594d..0162926f06a 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -2433,7 +2433,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2771,6 +2771,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -3233,6 +3235,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3624,6 +3628,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3771,6 +3777,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index a04d26a3b82..6e5eacc6a0a 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -2225,7 +2225,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2563,6 +2563,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -3025,6 +3027,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3416,6 +3420,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3563,6 +3569,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/smoke-copilot-no-firewall.lock.yml b/.github/workflows/smoke-copilot-no-firewall.lock.yml index 206fb4ed3d5..b8725534933 100644 --- a/.github/workflows/smoke-copilot-no-firewall.lock.yml +++ b/.github/workflows/smoke-copilot-no-firewall.lock.yml @@ -2307,7 +2307,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2645,6 +2645,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -3107,6 +3109,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3498,6 +3502,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3645,11 +3651,15 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - - name: Setup Safe Inputs JavaScript and Config + - name: Setup Safe Inputs Directory run: | mkdir -p /tmp/gh-aw/safe-inputs/logs + - name: Setup Safe Inputs JavaScript (part 1) + run: | cat > /tmp/gh-aw/safe-inputs/read_buffer.cjs << 'EOF_READ_BUFFER' class ReadBuffer { constructor() { @@ -3682,6 +3692,8 @@ jobs: ReadBuffer, }; EOF_READ_BUFFER + - name: Setup Safe Inputs JavaScript (part 2) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_server_core.cjs << 'EOF_MCP_CORE' const fs = require("fs"); const path = require("path"); @@ -4144,6 +4156,8 @@ jobs: loadToolHandlers, }; EOF_MCP_CORE + - name: Setup Safe Inputs JavaScript (part 3) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_http_transport.cjs << 'EOF_MCP_HTTP_TRANSPORT' const http = require("http"); const { randomUUID } = require("crypto"); @@ -4598,6 +4612,8 @@ jobs: cleanupConfigFile, }; EOF_BOOTSTRAP + - name: Setup Safe Inputs JavaScript (part 4) + run: | cat > /tmp/gh-aw/safe-inputs/safe_inputs_mcp_server.cjs << 'EOF_SAFE_INPUTS_SERVER' const { createServer, registerTool, start } = require("./mcp_server_core.cjs"); const { loadConfig } = require("./safe_inputs_config_loader.cjs"); @@ -4882,6 +4898,22 @@ jobs: createMCPServer, }; EOF_SAFE_INPUTS_SERVER_HTTP + cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' + const path = require("path"); + const { startSafeInputsServer } = require("./safe_inputs_mcp_server.cjs"); + const configPath = path.join(__dirname, "tools.json"); + try { + startSafeInputsServer(configPath, { + logDir: "/tmp/gh-aw/safe-inputs/logs", + skipCleanup: true + }); + } catch (error) { + console.error("Failed to start safe-inputs stdio server:", error); + process.exit(1); + } + EOFSI + - name: Setup Safe Inputs Config + run: | cat > /tmp/gh-aw/safe-inputs/tools.json << 'EOF_TOOLS_JSON' { "serverName": "safeinputs", @@ -4912,20 +4944,8 @@ jobs: ] } EOF_TOOLS_JSON - cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' - const path = require("path"); - const { startSafeInputsServer } = require("./safe_inputs_mcp_server.cjs"); - const configPath = path.join(__dirname, "tools.json"); - try { - startSafeInputsServer(configPath, { - logDir: "/tmp/gh-aw/safe-inputs/logs", - skipCleanup: true - }); - } catch (error) { - console.error("Failed to start safe-inputs stdio server:", error); - process.exit(1); - } - EOFSI + - name: Make Safe Inputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safe-inputs/mcp-server.cjs - name: Setup Safe Inputs Tool Files diff --git a/.github/workflows/smoke-copilot-playwright.lock.yml b/.github/workflows/smoke-copilot-playwright.lock.yml index 70c4ab28685..460cae826f6 100644 --- a/.github/workflows/smoke-copilot-playwright.lock.yml +++ b/.github/workflows/smoke-copilot-playwright.lock.yml @@ -2298,7 +2298,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2636,6 +2636,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -3098,6 +3100,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3489,6 +3493,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3636,11 +3642,15 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - - name: Setup Safe Inputs JavaScript and Config + - name: Setup Safe Inputs Directory run: | mkdir -p /tmp/gh-aw/safe-inputs/logs + - name: Setup Safe Inputs JavaScript (part 1) + run: | cat > /tmp/gh-aw/safe-inputs/read_buffer.cjs << 'EOF_READ_BUFFER' class ReadBuffer { constructor() { @@ -3673,6 +3683,8 @@ jobs: ReadBuffer, }; EOF_READ_BUFFER + - name: Setup Safe Inputs JavaScript (part 2) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_server_core.cjs << 'EOF_MCP_CORE' const fs = require("fs"); const path = require("path"); @@ -4135,6 +4147,8 @@ jobs: loadToolHandlers, }; EOF_MCP_CORE + - name: Setup Safe Inputs JavaScript (part 3) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_http_transport.cjs << 'EOF_MCP_HTTP_TRANSPORT' const http = require("http"); const { randomUUID } = require("crypto"); @@ -4589,6 +4603,8 @@ jobs: cleanupConfigFile, }; EOF_BOOTSTRAP + - name: Setup Safe Inputs JavaScript (part 4) + run: | cat > /tmp/gh-aw/safe-inputs/safe_inputs_mcp_server.cjs << 'EOF_SAFE_INPUTS_SERVER' const { createServer, registerTool, start } = require("./mcp_server_core.cjs"); const { loadConfig } = require("./safe_inputs_config_loader.cjs"); @@ -4873,6 +4889,22 @@ jobs: createMCPServer, }; EOF_SAFE_INPUTS_SERVER_HTTP + cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' + const path = require("path"); + const { startSafeInputsServer } = require("./safe_inputs_mcp_server.cjs"); + const configPath = path.join(__dirname, "tools.json"); + try { + startSafeInputsServer(configPath, { + logDir: "/tmp/gh-aw/safe-inputs/logs", + skipCleanup: true + }); + } catch (error) { + console.error("Failed to start safe-inputs stdio server:", error); + process.exit(1); + } + EOFSI + - name: Setup Safe Inputs Config + run: | cat > /tmp/gh-aw/safe-inputs/tools.json << 'EOF_TOOLS_JSON' { "serverName": "safeinputs", @@ -4903,20 +4935,8 @@ jobs: ] } EOF_TOOLS_JSON - cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' - const path = require("path"); - const { startSafeInputsServer } = require("./safe_inputs_mcp_server.cjs"); - const configPath = path.join(__dirname, "tools.json"); - try { - startSafeInputsServer(configPath, { - logDir: "/tmp/gh-aw/safe-inputs/logs", - skipCleanup: true - }); - } catch (error) { - console.error("Failed to start safe-inputs stdio server:", error); - process.exit(1); - } - EOFSI + - name: Make Safe Inputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safe-inputs/mcp-server.cjs - name: Setup Safe Inputs Tool Files diff --git a/.github/workflows/smoke-copilot-safe-inputs.lock.yml b/.github/workflows/smoke-copilot-safe-inputs.lock.yml index 89c7443be6e..1cc3c470527 100644 --- a/.github/workflows/smoke-copilot-safe-inputs.lock.yml +++ b/.github/workflows/smoke-copilot-safe-inputs.lock.yml @@ -2203,7 +2203,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2541,6 +2541,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -3003,6 +3005,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3394,6 +3398,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3541,11 +3547,15 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - - name: Setup Safe Inputs JavaScript and Config + - name: Setup Safe Inputs Directory run: | mkdir -p /tmp/gh-aw/safe-inputs/logs + - name: Setup Safe Inputs JavaScript (part 1) + run: | cat > /tmp/gh-aw/safe-inputs/read_buffer.cjs << 'EOF_READ_BUFFER' class ReadBuffer { constructor() { @@ -3578,6 +3588,8 @@ jobs: ReadBuffer, }; EOF_READ_BUFFER + - name: Setup Safe Inputs JavaScript (part 2) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_server_core.cjs << 'EOF_MCP_CORE' const fs = require("fs"); const path = require("path"); @@ -4040,6 +4052,8 @@ jobs: loadToolHandlers, }; EOF_MCP_CORE + - name: Setup Safe Inputs JavaScript (part 3) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_http_transport.cjs << 'EOF_MCP_HTTP_TRANSPORT' const http = require("http"); const { randomUUID } = require("crypto"); @@ -4494,6 +4508,8 @@ jobs: cleanupConfigFile, }; EOF_BOOTSTRAP + - name: Setup Safe Inputs JavaScript (part 4) + run: | cat > /tmp/gh-aw/safe-inputs/safe_inputs_mcp_server.cjs << 'EOF_SAFE_INPUTS_SERVER' const { createServer, registerTool, start } = require("./mcp_server_core.cjs"); const { loadConfig } = require("./safe_inputs_config_loader.cjs"); @@ -4778,6 +4794,22 @@ jobs: createMCPServer, }; EOF_SAFE_INPUTS_SERVER_HTTP + cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' + const path = require("path"); + const { startSafeInputsServer } = require("./safe_inputs_mcp_server.cjs"); + const configPath = path.join(__dirname, "tools.json"); + try { + startSafeInputsServer(configPath, { + logDir: "/tmp/gh-aw/safe-inputs/logs", + skipCleanup: true + }); + } catch (error) { + console.error("Failed to start safe-inputs stdio server:", error); + process.exit(1); + } + EOFSI + - name: Setup Safe Inputs Config + run: | cat > /tmp/gh-aw/safe-inputs/tools.json << 'EOF_TOOLS_JSON' { "serverName": "safeinputs", @@ -4808,20 +4840,8 @@ jobs: ] } EOF_TOOLS_JSON - cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' - const path = require("path"); - const { startSafeInputsServer } = require("./safe_inputs_mcp_server.cjs"); - const configPath = path.join(__dirname, "tools.json"); - try { - startSafeInputsServer(configPath, { - logDir: "/tmp/gh-aw/safe-inputs/logs", - skipCleanup: true - }); - } catch (error) { - console.error("Failed to start safe-inputs stdio server:", error); - process.exit(1); - } - EOFSI + - name: Make Safe Inputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safe-inputs/mcp-server.cjs - name: Setup Safe Inputs Tool Files diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index c1addd70ae7..30e633ad847 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -2190,7 +2190,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2528,6 +2528,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2990,6 +2992,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3381,6 +3385,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3528,6 +3534,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/smoke-detector.lock.yml b/.github/workflows/smoke-detector.lock.yml index fe96b00dd31..41b115934ac 100644 --- a/.github/workflows/smoke-detector.lock.yml +++ b/.github/workflows/smoke-detector.lock.yml @@ -2042,7 +2042,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2380,6 +2380,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2842,6 +2844,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3233,6 +3237,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3380,6 +3386,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/smoke-srt.lock.yml b/.github/workflows/smoke-srt.lock.yml index f94fe412ee7..42f447dcf67 100644 --- a/.github/workflows/smoke-srt.lock.yml +++ b/.github/workflows/smoke-srt.lock.yml @@ -450,7 +450,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -788,6 +788,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1250,6 +1252,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1641,6 +1645,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1788,6 +1794,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/spec-kit-execute.lock.yml b/.github/workflows/spec-kit-execute.lock.yml index 35932996b81..7f28ea8e3a2 100644 --- a/.github/workflows/spec-kit-execute.lock.yml +++ b/.github/workflows/spec-kit-execute.lock.yml @@ -921,7 +921,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1259,6 +1259,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1721,6 +1723,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2112,6 +2116,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2259,6 +2265,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/spec-kit-executor.lock.yml b/.github/workflows/spec-kit-executor.lock.yml index 68046abcf33..1f664dcf1ca 100644 --- a/.github/workflows/spec-kit-executor.lock.yml +++ b/.github/workflows/spec-kit-executor.lock.yml @@ -767,7 +767,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1105,6 +1105,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1567,6 +1569,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1958,6 +1962,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2105,6 +2111,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/speckit-dispatcher.lock.yml b/.github/workflows/speckit-dispatcher.lock.yml index 470addd66b6..f9700f18af6 100644 --- a/.github/workflows/speckit-dispatcher.lock.yml +++ b/.github/workflows/speckit-dispatcher.lock.yml @@ -2330,7 +2330,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2668,6 +2668,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -3130,6 +3132,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3521,6 +3525,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3668,6 +3674,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index a367aed850c..91327206648 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -1514,7 +1514,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1852,6 +1852,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2314,6 +2316,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2705,6 +2709,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2852,6 +2858,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/static-analysis-report.lock.yml b/.github/workflows/static-analysis-report.lock.yml index a7ef3edd8e3..eb360f1fb8a 100644 --- a/.github/workflows/static-analysis-report.lock.yml +++ b/.github/workflows/static-analysis-report.lock.yml @@ -1029,7 +1029,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1367,6 +1367,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1829,6 +1831,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2220,6 +2224,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2367,6 +2373,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index 55f2e5375c1..cb47c5f97bf 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -769,7 +769,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1107,6 +1107,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1569,6 +1571,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1960,6 +1964,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2107,6 +2113,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index 4f511ad7c1e..cf4b546a459 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -1627,7 +1627,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1965,6 +1965,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2427,6 +2429,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2818,6 +2822,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2965,6 +2971,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/test-discussion-expires.lock.yml b/.github/workflows/test-discussion-expires.lock.yml index 4db09dec3e5..605a255de6a 100644 --- a/.github/workflows/test-discussion-expires.lock.yml +++ b/.github/workflows/test-discussion-expires.lock.yml @@ -451,7 +451,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -789,6 +789,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1251,6 +1253,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1642,6 +1646,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1789,6 +1795,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/test-python-safe-input.lock.yml b/.github/workflows/test-python-safe-input.lock.yml index cd32d770876..9c7ec6a1b1c 100644 --- a/.github/workflows/test-python-safe-input.lock.yml +++ b/.github/workflows/test-python-safe-input.lock.yml @@ -555,7 +555,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -893,6 +893,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1355,6 +1357,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1746,6 +1750,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -1893,11 +1899,15 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - - name: Setup Safe Inputs JavaScript and Config + - name: Setup Safe Inputs Directory run: | mkdir -p /tmp/gh-aw/safe-inputs/logs + - name: Setup Safe Inputs JavaScript (part 1) + run: | cat > /tmp/gh-aw/safe-inputs/read_buffer.cjs << 'EOF_READ_BUFFER' class ReadBuffer { constructor() { @@ -1930,6 +1940,8 @@ jobs: ReadBuffer, }; EOF_READ_BUFFER + - name: Setup Safe Inputs JavaScript (part 2) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_server_core.cjs << 'EOF_MCP_CORE' const fs = require("fs"); const path = require("path"); @@ -2392,6 +2404,8 @@ jobs: loadToolHandlers, }; EOF_MCP_CORE + - name: Setup Safe Inputs JavaScript (part 3) + run: | cat > /tmp/gh-aw/safe-inputs/mcp_http_transport.cjs << 'EOF_MCP_HTTP_TRANSPORT' const http = require("http"); const { randomUUID } = require("crypto"); @@ -2846,6 +2860,8 @@ jobs: cleanupConfigFile, }; EOF_BOOTSTRAP + - name: Setup Safe Inputs JavaScript (part 4) + run: | cat > /tmp/gh-aw/safe-inputs/safe_inputs_mcp_server.cjs << 'EOF_SAFE_INPUTS_SERVER' const { createServer, registerTool, start } = require("./mcp_server_core.cjs"); const { loadConfig } = require("./safe_inputs_config_loader.cjs"); @@ -3130,6 +3146,23 @@ jobs: createMCPServer, }; EOF_SAFE_INPUTS_SERVER_HTTP + cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' + const path = require("path"); + const { startHttpServer } = require("./safe_inputs_mcp_server_http.cjs"); + const configPath = path.join(__dirname, "tools.json"); + const port = parseInt(process.env.GH_AW_SAFE_INPUTS_PORT || "3000", 10); + const apiKey = process.env.GH_AW_SAFE_INPUTS_API_KEY || ""; + startHttpServer(configPath, { + port: port, + stateless: false, + logDir: "/tmp/gh-aw/safe-inputs/logs" + }).catch(error => { + console.error("Failed to start safe-inputs HTTP server:", error); + process.exit(1); + }); + EOFSI + - name: Setup Safe Inputs Config + run: | cat > /tmp/gh-aw/safe-inputs/tools.json << 'EOF_TOOLS_JSON' { "serverName": "safeinputs", @@ -3175,21 +3208,8 @@ jobs: ] } EOF_TOOLS_JSON - cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI' - const path = require("path"); - const { startHttpServer } = require("./safe_inputs_mcp_server_http.cjs"); - const configPath = path.join(__dirname, "tools.json"); - const port = parseInt(process.env.GH_AW_SAFE_INPUTS_PORT || "3000", 10); - const apiKey = process.env.GH_AW_SAFE_INPUTS_API_KEY || ""; - startHttpServer(configPath, { - port: port, - stateless: false, - logDir: "/tmp/gh-aw/safe-inputs/logs" - }).catch(error => { - console.error("Failed to start safe-inputs HTTP server:", error); - process.exit(1); - }); - EOFSI + - name: Make Safe Inputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safe-inputs/mcp-server.cjs - name: Setup Safe Inputs Tool Files diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index 492219cebcb..ff2a9ac52ad 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -1062,7 +1062,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1400,6 +1400,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1862,6 +1864,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2253,6 +2257,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2400,6 +2406,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/typist.lock.yml b/.github/workflows/typist.lock.yml index 6fe7ca5c19f..fca2f25fd3d 100644 --- a/.github/workflows/typist.lock.yml +++ b/.github/workflows/typist.lock.yml @@ -1139,7 +1139,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1477,6 +1477,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1939,6 +1941,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2330,6 +2334,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2477,6 +2483,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index f31c72d10d9..48fb60fca90 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -2084,7 +2084,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -2422,6 +2422,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -2884,6 +2886,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -3275,6 +3279,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -3422,6 +3428,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/video-analyzer.lock.yml b/.github/workflows/video-analyzer.lock.yml index 9297bac3d5f..300d8d9fd8b 100644 --- a/.github/workflows/video-analyzer.lock.yml +++ b/.github/workflows/video-analyzer.lock.yml @@ -766,7 +766,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1104,6 +1104,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1566,6 +1568,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -1957,6 +1961,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2104,6 +2110,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/.github/workflows/weekly-issue-summary.lock.yml b/.github/workflows/weekly-issue-summary.lock.yml index c93a2c3df7b..78be1eb77ca 100644 --- a/.github/workflows/weekly-issue-summary.lock.yml +++ b/.github/workflows/weekly-issue-summary.lock.yml @@ -1118,7 +1118,7 @@ jobs: } } EOF - - name: Write Safe Outputs JavaScript Files + - name: Write Safe Outputs JavaScript Files (part 1) run: | cat > /tmp/gh-aw/safeoutputs/estimate_tokens.cjs << 'EOF_ESTIMATE_TOKENS' function estimateTokens(text) { @@ -1456,6 +1456,8 @@ jobs: createShellHandler, }; EOF_MCP_HANDLER_SHELL + - name: Write Safe Outputs JavaScript Files (part 2) + run: | cat > /tmp/gh-aw/safeoutputs/mcp_server_core.cjs << 'EOF_MCP_SERVER_CORE' const fs = require("fs"); const path = require("path"); @@ -1918,6 +1920,8 @@ jobs: loadToolHandlers, }; EOF_MCP_SERVER_CORE + - name: Write Safe Outputs JavaScript Files (part 3) + run: | cat > /tmp/gh-aw/safeoutputs/normalize_branch_name.cjs << 'EOF_NORMALIZE_BRANCH_NAME' function normalizeBranchName(branchName) { if (!branchName || typeof branchName !== "string" || branchName.trim() === "") { @@ -2309,6 +2313,8 @@ jobs: startSafeOutputsServer, }; EOF_SAFE_OUTPUTS_MCP_SERVER + - name: Write Safe Outputs JavaScript Files (part 4) + run: | cat > /tmp/gh-aw/safeoutputs/safe_outputs_tools_loader.cjs << 'EOF_SAFE_OUTPUTS_TOOLS_LOADER' const fs = require("fs"); function loadTools(server) { @@ -2456,6 +2462,8 @@ jobs: } module.exports = { startSafeOutputsServer }; EOF + - name: Make Safe Outputs MCP Server Executable + run: | chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs - name: Setup MCPs diff --git a/pkg/workflow/mcp_servers.go b/pkg/workflow/mcp_servers.go index 46c426bf21f..f000f97a9fb 100644 --- a/pkg/workflow/mcp_servers.go +++ b/pkg/workflow/mcp_servers.go @@ -87,6 +87,88 @@ func getJavaScriptFileContent(filename string) (string, error) { return content, nil } +// JavaScriptFileWrite represents a single JavaScript file to be written +type JavaScriptFileWrite struct { + Filename string + Content string + EOFMarker string + TargetPath string +} + +// writeJavaScriptFilesInChunks writes JavaScript files in multiple steps if they exceed the size limit +// This prevents exceeding GitHub Actions' 21KB step size limit for heredoc commands +func writeJavaScriptFilesInChunks(yaml *strings.Builder, files []JavaScriptFileWrite, stepNamePrefix string) { + const maxChunkSize = 20900 // 21000 - 100 character buffer + const indentSpaces = " " // 10 spaces for run command indentation + + // Calculate size for each file write operation + type fileWithSize struct { + file JavaScriptFileWrite + size int + } + + filesWithSizes := make([]fileWithSize, 0, len(files)) + for _, file := range files { + // Calculate the size of the entire heredoc command for this file + // Format: "cat > << ''\n\n\n" + headerSize := len(indentSpaces) + len("cat > ") + len(file.TargetPath) + len(" << '") + len(file.EOFMarker) + len("'\n") + footerSize := len(indentSpaces) + len(file.EOFMarker) + len("\n") + + // Calculate content size (each line gets indented) + contentLines := FormatJavaScriptForYAML(file.Content) + contentSize := 0 + for _, line := range contentLines { + contentSize += len(line) // line already includes indentation and newline + } + + totalSize := headerSize + contentSize + footerSize + filesWithSizes = append(filesWithSizes, fileWithSize{file: file, size: totalSize}) + } + + // Split files into chunks based on cumulative size + var chunks [][]fileWithSize + var currentChunk []fileWithSize + currentSize := 0 + + for _, fws := range filesWithSizes { + // If adding this file would exceed the limit and we have files in current chunk, start new chunk + if currentSize+fws.size > maxChunkSize && len(currentChunk) > 0 { + chunks = append(chunks, currentChunk) + currentChunk = []fileWithSize{fws} + currentSize = fws.size + } else { + currentChunk = append(currentChunk, fws) + currentSize += fws.size + } + } + + // Add the last chunk if there's content + if len(currentChunk) > 0 { + chunks = append(chunks, currentChunk) + } + + mcpServersLog.Printf("Split %d JavaScript files into %d step(s)", len(files), len(chunks)) + + // Generate steps for each chunk + for i, chunk := range chunks { + stepName := stepNamePrefix + if len(chunks) > 1 { + stepName = fmt.Sprintf("%s (part %d)", stepNamePrefix, i+1) + } + + yaml.WriteString(fmt.Sprintf(" - name: %s\n", stepName)) + yaml.WriteString(" run: |\n") + + for _, fws := range chunk { + yaml.WriteString(fmt.Sprintf(" cat > %s << '%s'\n", fws.file.TargetPath, fws.file.EOFMarker)) + for _, line := range FormatJavaScriptForYAML(fws.file.Content) { + yaml.WriteString(line) + } + yaml.WriteString(fmt.Sprintf(" %s\n", fws.file.EOFMarker)) + } + } +} + // hasMCPServers checks if the workflow has any MCP servers configured func HasMCPServers(workflowData *WorkflowData) bool { if workflowData == nil { @@ -262,10 +344,7 @@ func (c *Compiler) generateMCPSetup(yaml *strings.Builder, tools map[string]any, } yaml.WriteString(" EOF\n") - // Step 2: Write JavaScript files - yaml.WriteString(" - name: Write Safe Outputs JavaScript Files\n") - yaml.WriteString(" run: |\n") - + // Step 2: Write JavaScript files (split into multiple steps if needed to stay under 21KB limit) // Get the list of required JavaScript dependencies dynamically dependencies, err := getSafeOutputsDependencies() if err != nil { @@ -274,7 +353,8 @@ func (c *Compiler) generateMCPSetup(yaml *strings.Builder, tools map[string]any, dependencies = []string{} } - // Write each required JavaScript file + // Prepare list of JavaScript files to write + var jsFiles []JavaScriptFileWrite for _, filename := range dependencies { // Get the content for this file content, err := getJavaScriptFileContent(filename) @@ -289,20 +369,28 @@ func (c *Compiler) generateMCPSetup(yaml *strings.Builder, tools map[string]any, markerName = strings.ReplaceAll(markerName, ".", "_") markerName = strings.ReplaceAll(markerName, "-", "_") - yaml.WriteString(fmt.Sprintf(" cat > /tmp/gh-aw/safeoutputs/%s << 'EOF_%s'\n", filename, markerName)) - for _, line := range FormatJavaScriptForYAML(content) { - yaml.WriteString(line) - } - yaml.WriteString(fmt.Sprintf(" EOF_%s\n", markerName)) + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: filename, + Content: content, + EOFMarker: fmt.Sprintf("EOF_%s", markerName), + TargetPath: fmt.Sprintf("/tmp/gh-aw/safeoutputs/%s", filename), + }) } - // Write the main MCP server entry point (simple script that requires modules) - yaml.WriteString(" cat > /tmp/gh-aw/safeoutputs/mcp-server.cjs << 'EOF'\n") - // Use the simple entry point script instead of bundled version - for _, line := range FormatJavaScriptForYAML(generateSafeOutputsMCPServerEntryScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF\n") + // Add the main MCP server entry point (simple script that requires modules) + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "mcp-server.cjs", + Content: generateSafeOutputsMCPServerEntryScript(), + EOFMarker: "EOF", + TargetPath: "/tmp/gh-aw/safeoutputs/mcp-server.cjs", + }) + + // Write all JavaScript files, splitting into multiple steps if needed + writeJavaScriptFilesInChunks(yaml, jsFiles, "Write Safe Outputs JavaScript Files") + + // Make the MCP server entry point executable + yaml.WriteString(" - name: Make Safe Outputs MCP Server Executable\n") + yaml.WriteString(" run: |\n") yaml.WriteString(" chmod +x /tmp/gh-aw/safeoutputs/mcp-server.cjs\n") yaml.WriteString(" \n") } @@ -310,89 +398,117 @@ func (c *Compiler) generateMCPSetup(yaml *strings.Builder, tools map[string]any, // Write safe-inputs MCP server if configured and feature flag is enabled // For stdio mode, we only write the files but don't start the HTTP server if IsSafeInputsEnabled(workflowData.SafeInputs, workflowData) { - // Step 1: Write JavaScript and config files - yaml.WriteString(" - name: Setup Safe Inputs JavaScript and Config\n") + // Step 1: Create directory structure + yaml.WriteString(" - name: Setup Safe Inputs Directory\n") yaml.WriteString(" run: |\n") yaml.WriteString(" mkdir -p /tmp/gh-aw/safe-inputs/logs\n") - // Write the reusable MCP server core modules - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/read_buffer.cjs << 'EOF_READ_BUFFER'\n") - for _, line := range FormatJavaScriptForYAML(GetReadBufferScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF_READ_BUFFER\n") - - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/mcp_server_core.cjs << 'EOF_MCP_CORE'\n") - for _, line := range FormatJavaScriptForYAML(GetMCPServerCoreScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF_MCP_CORE\n") - - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/mcp_http_transport.cjs << 'EOF_MCP_HTTP_TRANSPORT'\n") - for _, line := range FormatJavaScriptForYAML(GetMCPHTTPTransportScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF_MCP_HTTP_TRANSPORT\n") - - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/mcp_logger.cjs << 'EOF_MCP_LOGGER'\n") - for _, line := range FormatJavaScriptForYAML(GetMCPLoggerScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF_MCP_LOGGER\n") - - // Write handler modules (only loaded when needed) - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/mcp_handler_shell.cjs << 'EOF_HANDLER_SHELL'\n") - for _, line := range FormatJavaScriptForYAML(GetMCPHandlerShellScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF_HANDLER_SHELL\n") - - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/mcp_handler_python.cjs << 'EOF_HANDLER_PYTHON'\n") - for _, line := range FormatJavaScriptForYAML(GetMCPHandlerPythonScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF_HANDLER_PYTHON\n") - - // Write safe-inputs helper modules - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/safe_inputs_config_loader.cjs << 'EOF_CONFIG_LOADER'\n") - for _, line := range FormatJavaScriptForYAML(GetSafeInputsConfigLoaderScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF_CONFIG_LOADER\n") - - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/safe_inputs_tool_factory.cjs << 'EOF_TOOL_FACTORY'\n") - for _, line := range FormatJavaScriptForYAML(GetSafeInputsToolFactoryScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF_TOOL_FACTORY\n") - - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/safe_inputs_validation.cjs << 'EOF_VALIDATION'\n") - for _, line := range FormatJavaScriptForYAML(GetSafeInputsValidationScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF_VALIDATION\n") - - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/safe_inputs_bootstrap.cjs << 'EOF_BOOTSTRAP'\n") - for _, line := range FormatJavaScriptForYAML(GetSafeInputsBootstrapScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF_BOOTSTRAP\n") - - // Write safe-inputs MCP server main module - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/safe_inputs_mcp_server.cjs << 'EOF_SAFE_INPUTS_SERVER'\n") - for _, line := range FormatJavaScriptForYAML(GetSafeInputsMCPServerScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF_SAFE_INPUTS_SERVER\n") - - // Write safe-inputs MCP server HTTP transport module - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/safe_inputs_mcp_server_http.cjs << 'EOF_SAFE_INPUTS_SERVER_HTTP'\n") - for _, line := range FormatJavaScriptForYAML(GetSafeInputsMCPServerHTTPScript()) { - yaml.WriteString(line) - } - yaml.WriteString(" EOF_SAFE_INPUTS_SERVER_HTTP\n") - - // Generate the tools.json configuration file + // Step 2: Write JavaScript files (split into multiple steps if needed to stay under 21KB limit) + var jsFiles []JavaScriptFileWrite + + // Add the reusable MCP server core modules + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "read_buffer.cjs", + Content: GetReadBufferScript(), + EOFMarker: "EOF_READ_BUFFER", + TargetPath: "/tmp/gh-aw/safe-inputs/read_buffer.cjs", + }) + + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "mcp_server_core.cjs", + Content: GetMCPServerCoreScript(), + EOFMarker: "EOF_MCP_CORE", + TargetPath: "/tmp/gh-aw/safe-inputs/mcp_server_core.cjs", + }) + + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "mcp_http_transport.cjs", + Content: GetMCPHTTPTransportScript(), + EOFMarker: "EOF_MCP_HTTP_TRANSPORT", + TargetPath: "/tmp/gh-aw/safe-inputs/mcp_http_transport.cjs", + }) + + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "mcp_logger.cjs", + Content: GetMCPLoggerScript(), + EOFMarker: "EOF_MCP_LOGGER", + TargetPath: "/tmp/gh-aw/safe-inputs/mcp_logger.cjs", + }) + + // Add handler modules (only loaded when needed) + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "mcp_handler_shell.cjs", + Content: GetMCPHandlerShellScript(), + EOFMarker: "EOF_HANDLER_SHELL", + TargetPath: "/tmp/gh-aw/safe-inputs/mcp_handler_shell.cjs", + }) + + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "mcp_handler_python.cjs", + Content: GetMCPHandlerPythonScript(), + EOFMarker: "EOF_HANDLER_PYTHON", + TargetPath: "/tmp/gh-aw/safe-inputs/mcp_handler_python.cjs", + }) + + // Add safe-inputs helper modules + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "safe_inputs_config_loader.cjs", + Content: GetSafeInputsConfigLoaderScript(), + EOFMarker: "EOF_CONFIG_LOADER", + TargetPath: "/tmp/gh-aw/safe-inputs/safe_inputs_config_loader.cjs", + }) + + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "safe_inputs_tool_factory.cjs", + Content: GetSafeInputsToolFactoryScript(), + EOFMarker: "EOF_TOOL_FACTORY", + TargetPath: "/tmp/gh-aw/safe-inputs/safe_inputs_tool_factory.cjs", + }) + + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "safe_inputs_validation.cjs", + Content: GetSafeInputsValidationScript(), + EOFMarker: "EOF_VALIDATION", + TargetPath: "/tmp/gh-aw/safe-inputs/safe_inputs_validation.cjs", + }) + + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "safe_inputs_bootstrap.cjs", + Content: GetSafeInputsBootstrapScript(), + EOFMarker: "EOF_BOOTSTRAP", + TargetPath: "/tmp/gh-aw/safe-inputs/safe_inputs_bootstrap.cjs", + }) + + // Add safe-inputs MCP server main module + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "safe_inputs_mcp_server.cjs", + Content: GetSafeInputsMCPServerScript(), + EOFMarker: "EOF_SAFE_INPUTS_SERVER", + TargetPath: "/tmp/gh-aw/safe-inputs/safe_inputs_mcp_server.cjs", + }) + + // Add safe-inputs MCP server HTTP transport module + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "safe_inputs_mcp_server_http.cjs", + Content: GetSafeInputsMCPServerHTTPScript(), + EOFMarker: "EOF_SAFE_INPUTS_SERVER_HTTP", + TargetPath: "/tmp/gh-aw/safe-inputs/safe_inputs_mcp_server_http.cjs", + }) + + // Add the MCP server entry point + jsFiles = append(jsFiles, JavaScriptFileWrite{ + Filename: "mcp-server.cjs", + Content: generateSafeInputsMCPServerScript(workflowData.SafeInputs), + EOFMarker: "EOFSI", + TargetPath: "/tmp/gh-aw/safe-inputs/mcp-server.cjs", + }) + + // Write all JavaScript files, splitting into multiple steps if needed + writeJavaScriptFilesInChunks(yaml, jsFiles, "Setup Safe Inputs JavaScript") + + // Step 3: Write configuration file + yaml.WriteString(" - name: Setup Safe Inputs Config\n") + yaml.WriteString(" run: |\n") toolsJSON := generateSafeInputsToolsConfig(workflowData.SafeInputs) yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/tools.json << 'EOF_TOOLS_JSON'\n") for _, line := range strings.Split(toolsJSON, "\n") { @@ -400,13 +516,9 @@ func (c *Compiler) generateMCPSetup(yaml *strings.Builder, tools map[string]any, } yaml.WriteString(" EOF_TOOLS_JSON\n") - // Generate the MCP server entry point - safeInputsMCPServer := generateSafeInputsMCPServerScript(workflowData.SafeInputs) - yaml.WriteString(" cat > /tmp/gh-aw/safe-inputs/mcp-server.cjs << 'EOFSI'\n") - for _, line := range FormatJavaScriptForYAML(safeInputsMCPServer) { - yaml.WriteString(line) - } - yaml.WriteString(" EOFSI\n") + // Step 4: Make the MCP server entry point executable + yaml.WriteString(" - name: Make Safe Inputs MCP Server Executable\n") + yaml.WriteString(" run: |\n") yaml.WriteString(" chmod +x /tmp/gh-aw/safe-inputs/mcp-server.cjs\n") yaml.WriteString(" \n") diff --git a/pkg/workflow/mcp_servers_test.go b/pkg/workflow/mcp_servers_test.go index cf664a04b36..dfee182951b 100644 --- a/pkg/workflow/mcp_servers_test.go +++ b/pkg/workflow/mcp_servers_test.go @@ -100,3 +100,148 @@ func TestSafeInputsStepCodeGenerationStability(t *testing.T) { alphaPos, betaPos, middlePos, zebraPos) } } + +// TestJavaScriptFileChunking validates that large JavaScript files are split into multiple steps +func TestJavaScriptFileChunking(t *testing.T) { + // Create a medium-sized content that won't exceed limit alone but will when combined + mediumContent := strings.Repeat("console.log('This is a line of JavaScript code that will be repeated many times');\n", 150) + + tests := []struct { + name string + files []JavaScriptFileWrite + expectedSteps int // Exact number of steps expected + }{ + { + name: "single small file", + files: []JavaScriptFileWrite{ + { + Filename: "small.cjs", + Content: "console.log('small');", + EOFMarker: "EOF_SMALL", + TargetPath: "/tmp/test/small.cjs", + }, + }, + expectedSteps: 1, + }, + { + name: "multiple files that fit in one step", + files: []JavaScriptFileWrite{ + { + Filename: "file1.cjs", + Content: "console.log('file1');", + EOFMarker: "EOF_1", + TargetPath: "/tmp/test/file1.cjs", + }, + { + Filename: "file2.cjs", + Content: "console.log('file2');", + EOFMarker: "EOF_2", + TargetPath: "/tmp/test/file2.cjs", + }, + }, + expectedSteps: 1, + }, + { + name: "multiple medium files requiring split into 2 steps", + files: []JavaScriptFileWrite{ + { + Filename: "medium1.cjs", + Content: mediumContent, + EOFMarker: "EOF_MEDIUM1", + TargetPath: "/tmp/test/medium1.cjs", + }, + { + Filename: "medium2.cjs", + Content: mediumContent, + EOFMarker: "EOF_MEDIUM2", + TargetPath: "/tmp/test/medium2.cjs", + }, + }, + expectedSteps: 2, + }, + { + name: "multiple medium files requiring split into 3 steps", + files: []JavaScriptFileWrite{ + { + Filename: "m1.cjs", + Content: mediumContent, + EOFMarker: "EOF_M1", + TargetPath: "/tmp/test/m1.cjs", + }, + { + Filename: "m2.cjs", + Content: mediumContent, + EOFMarker: "EOF_M2", + TargetPath: "/tmp/test/m2.cjs", + }, + { + Filename: "m3.cjs", + Content: mediumContent, + EOFMarker: "EOF_M3", + TargetPath: "/tmp/test/m3.cjs", + }, + }, + expectedSteps: 3, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var yaml strings.Builder + writeJavaScriptFilesInChunks(&yaml, tt.files, "Test Step") + output := yaml.String() + + // Count the number of steps generated + stepCount := strings.Count(output, "- name: Test Step") + + if stepCount != tt.expectedSteps { + t.Errorf("Expected exactly %d step(s), got %d", tt.expectedSteps, stepCount) + } + + // Verify all files are written + for _, file := range tt.files { + if !strings.Contains(output, file.TargetPath) { + t.Errorf("Output should contain target path %s", file.TargetPath) + } + if !strings.Contains(output, file.EOFMarker) { + t.Errorf("Output should contain EOF marker %s", file.EOFMarker) + } + } + + // Verify each step has proper structure + if !strings.Contains(output, "- name:") { + t.Error("Output should contain step name") + } + if !strings.Contains(output, "run: |") { + t.Error("Output should contain run command") + } + }) + } +} + +// TestJavaScriptFileChunkingPreservesOrder validates that file order is preserved across chunks +func TestJavaScriptFileChunkingPreservesOrder(t *testing.T) { + files := []JavaScriptFileWrite{ + {Filename: "a.cjs", Content: "console.log('a');", EOFMarker: "EOF_A", TargetPath: "/tmp/a.cjs"}, + {Filename: "b.cjs", Content: "console.log('b');", EOFMarker: "EOF_B", TargetPath: "/tmp/b.cjs"}, + {Filename: "c.cjs", Content: "console.log('c');", EOFMarker: "EOF_C", TargetPath: "/tmp/c.cjs"}, + } + + var yaml strings.Builder + writeJavaScriptFilesInChunks(&yaml, files, "Test") + output := yaml.String() + + // Find positions of each file + posA := strings.Index(output, "/tmp/a.cjs") + posB := strings.Index(output, "/tmp/b.cjs") + posC := strings.Index(output, "/tmp/c.cjs") + + if posA == -1 || posB == -1 || posC == -1 { + t.Error("All files should be present in output") + } + + // Verify order is preserved + if !(posA < posB && posB < posC) { + t.Errorf("File order should be preserved: A(%d) < B(%d) < C(%d)", posA, posB, posC) + } +} From 9e2d322fdff8d9efcba968cb7b92636914481d99 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Dec 2025 13:15:36 +0000 Subject: [PATCH 4/4] Complete JavaScript file chunking implementation with tests Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/ai-moderator.lock.yml | 4 +++- .github/workflows/ai-triage-campaign.lock.yml | 4 +++- .github/workflows/archie.lock.yml | 4 +++- .github/workflows/artifacts-summary.lock.yml | 4 +++- .github/workflows/audit-workflows.lock.yml | 4 +++- .github/workflows/blog-auditor.lock.yml | 4 +++- .github/workflows/brave.lock.yml | 4 +++- .github/workflows/breaking-change-checker.lock.yml | 4 +++- .github/workflows/changeset.lock.yml | 4 +++- .github/workflows/ci-doctor.lock.yml | 4 +++- .github/workflows/cli-consistency-checker.lock.yml | 4 +++- .github/workflows/cli-version-checker.lock.yml | 4 +++- .github/workflows/cloclo.lock.yml | 4 +++- .github/workflows/close-old-discussions.lock.yml | 4 +++- .github/workflows/commit-changes-analyzer.lock.yml | 4 +++- .github/workflows/copilot-agent-analysis.lock.yml | 4 +++- .github/workflows/copilot-pr-merged-report.lock.yml | 4 +++- .github/workflows/copilot-pr-nlp-analysis.lock.yml | 4 +++- .github/workflows/copilot-pr-prompt-analysis.lock.yml | 4 +++- .github/workflows/copilot-session-insights.lock.yml | 4 +++- .github/workflows/craft.lock.yml | 4 +++- .github/workflows/daily-assign-issue-to-user.lock.yml | 4 +++- .github/workflows/daily-code-metrics.lock.yml | 4 +++- .github/workflows/daily-copilot-token-report.lock.yml | 4 +++- .github/workflows/daily-doc-updater.lock.yml | 4 +++- .github/workflows/daily-fact.lock.yml | 4 +++- .github/workflows/daily-file-diet.lock.yml | 4 +++- .github/workflows/daily-firewall-report.lock.yml | 4 +++- .github/workflows/daily-issues-report.lock.yml | 4 +++- .github/workflows/daily-malicious-code-scan.lock.yml | 4 +++- .github/workflows/daily-multi-device-docs-tester.lock.yml | 4 +++- .github/workflows/daily-news.lock.yml | 4 +++- .github/workflows/daily-performance-summary.lock.yml | 4 +++- .github/workflows/daily-repo-chronicle.lock.yml | 4 +++- .github/workflows/daily-workflow-updater.lock.yml | 4 +++- .github/workflows/deep-report.lock.yml | 4 +++- .github/workflows/dependabot-go-checker.lock.yml | 4 +++- .github/workflows/dev-hawk.lock.yml | 4 +++- .github/workflows/dev.lock.yml | 4 +++- .github/workflows/developer-docs-consolidator.lock.yml | 4 +++- .github/workflows/dictation-prompt.lock.yml | 4 +++- .github/workflows/docs-noob-tester.lock.yml | 4 +++- .github/workflows/duplicate-code-detector.lock.yml | 4 +++- .github/workflows/example-workflow-analyzer.lock.yml | 4 +++- .github/workflows/github-mcp-structural-analysis.lock.yml | 4 +++- .github/workflows/github-mcp-tools-report.lock.yml | 4 +++- .github/workflows/glossary-maintainer.lock.yml | 4 +++- .github/workflows/go-fan.lock.yml | 4 +++- .github/workflows/go-logger.lock.yml | 4 +++- .github/workflows/go-pattern-detector.lock.yml | 4 +++- .github/workflows/grumpy-reviewer.lock.yml | 4 +++- .github/workflows/instructions-janitor.lock.yml | 4 +++- .github/workflows/issue-arborist.lock.yml | 4 +++- .github/workflows/issue-classifier.lock.yml | 4 +++- .github/workflows/issue-monster.lock.yml | 4 +++- .github/workflows/issue-triage-agent.lock.yml | 4 +++- .github/workflows/layout-spec-maintainer.lock.yml | 4 +++- .github/workflows/lockfile-stats.lock.yml | 4 +++- .github/workflows/mcp-inspector.lock.yml | 4 +++- .github/workflows/mergefest.lock.yml | 4 +++- .github/workflows/notion-issue-summary.lock.yml | 4 +++- .github/workflows/org-health-report.lock.yml | 4 +++- .github/workflows/pdf-summary.lock.yml | 4 +++- .github/workflows/plan.lock.yml | 4 +++- .github/workflows/poem-bot.lock.yml | 4 +++- .github/workflows/pr-nitpick-reviewer.lock.yml | 4 +++- .github/workflows/prompt-clustering-analysis.lock.yml | 4 +++- .github/workflows/python-data-charts.lock.yml | 4 +++- .github/workflows/q.lock.yml | 4 +++- .github/workflows/release.lock.yml | 4 +++- .github/workflows/repo-tree-map.lock.yml | 4 +++- .github/workflows/repository-quality-improver.lock.yml | 4 +++- .github/workflows/research.lock.yml | 4 +++- .github/workflows/safe-output-health.lock.yml | 4 +++- .github/workflows/schema-consistency-checker.lock.yml | 4 +++- .github/workflows/scout.lock.yml | 4 +++- .github/workflows/security-fix-pr.lock.yml | 4 +++- .github/workflows/semantic-function-refactor.lock.yml | 4 +++- .github/workflows/smoke-claude.lock.yml | 4 +++- .github/workflows/smoke-codex.lock.yml | 4 +++- .github/workflows/smoke-copilot-no-firewall.lock.yml | 4 +++- .github/workflows/smoke-copilot-playwright.lock.yml | 4 +++- .github/workflows/smoke-copilot-safe-inputs.lock.yml | 4 +++- .github/workflows/smoke-copilot.lock.yml | 4 +++- .github/workflows/smoke-detector.lock.yml | 4 +++- .github/workflows/smoke-srt.lock.yml | 4 +++- .github/workflows/spec-kit-execute.lock.yml | 4 +++- .github/workflows/spec-kit-executor.lock.yml | 4 +++- .github/workflows/speckit-dispatcher.lock.yml | 4 +++- .github/workflows/stale-repo-identifier.lock.yml | 4 +++- .github/workflows/static-analysis-report.lock.yml | 4 +++- .github/workflows/super-linter.lock.yml | 4 +++- .github/workflows/technical-doc-writer.lock.yml | 4 +++- .github/workflows/test-discussion-expires.lock.yml | 4 +++- .github/workflows/test-python-safe-input.lock.yml | 4 +++- .github/workflows/tidy.lock.yml | 4 +++- .github/workflows/typist.lock.yml | 4 +++- .github/workflows/unbloat-docs.lock.yml | 4 +++- .github/workflows/video-analyzer.lock.yml | 4 +++- .github/workflows/weekly-issue-summary.lock.yml | 4 +++- pkg/workflow/js/collect_ndjson_output.cjs | 4 +++- pkg/workflow/mcp_servers.go | 4 ++-- 102 files changed, 305 insertions(+), 103 deletions(-) diff --git a/.github/workflows/ai-moderator.lock.yml b/.github/workflows/ai-moderator.lock.yml index a3974cfb75e..83806ae660a 100644 --- a/.github/workflows/ai-moderator.lock.yml +++ b/.github/workflows/ai-moderator.lock.yml @@ -4532,7 +4532,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/ai-triage-campaign.lock.yml b/.github/workflows/ai-triage-campaign.lock.yml index 17175ebb19f..9fd6fd5220c 100644 --- a/.github/workflows/ai-triage-campaign.lock.yml +++ b/.github/workflows/ai-triage-campaign.lock.yml @@ -3437,7 +3437,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml index 849e7d2a155..0622de69e5b 100644 --- a/.github/workflows/archie.lock.yml +++ b/.github/workflows/archie.lock.yml @@ -5098,7 +5098,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/artifacts-summary.lock.yml b/.github/workflows/artifacts-summary.lock.yml index ef7608dc84d..20550c7ab58 100644 --- a/.github/workflows/artifacts-summary.lock.yml +++ b/.github/workflows/artifacts-summary.lock.yml @@ -3595,7 +3595,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index 99009d6e5ba..67471095929 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -5152,7 +5152,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/blog-auditor.lock.yml b/.github/workflows/blog-auditor.lock.yml index 42d8ffe9c88..e070b2245be 100644 --- a/.github/workflows/blog-auditor.lock.yml +++ b/.github/workflows/blog-auditor.lock.yml @@ -4214,7 +4214,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/brave.lock.yml b/.github/workflows/brave.lock.yml index d3928d1d3be..794024c5a7c 100644 --- a/.github/workflows/brave.lock.yml +++ b/.github/workflows/brave.lock.yml @@ -4888,7 +4888,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml index ae244156599..31abe321679 100644 --- a/.github/workflows/breaking-change-checker.lock.yml +++ b/.github/workflows/breaking-change-checker.lock.yml @@ -3679,7 +3679,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index 9ec1b869e0e..b7e40936616 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -4565,7 +4565,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index c9b02e0310a..c1c5f11b066 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -4374,7 +4374,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/cli-consistency-checker.lock.yml b/.github/workflows/cli-consistency-checker.lock.yml index f4797320f49..b72418deabf 100644 --- a/.github/workflows/cli-consistency-checker.lock.yml +++ b/.github/workflows/cli-consistency-checker.lock.yml @@ -3676,7 +3676,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index f3cff796d94..63c8a59b7a6 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -4163,7 +4163,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index bf9eeed2d9e..42c0eb90102 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -5630,7 +5630,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/close-old-discussions.lock.yml b/.github/workflows/close-old-discussions.lock.yml index cd4047da139..30dc84396ae 100644 --- a/.github/workflows/close-old-discussions.lock.yml +++ b/.github/workflows/close-old-discussions.lock.yml @@ -3770,7 +3770,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/commit-changes-analyzer.lock.yml b/.github/workflows/commit-changes-analyzer.lock.yml index 3416a98b21a..59e36eca0be 100644 --- a/.github/workflows/commit-changes-analyzer.lock.yml +++ b/.github/workflows/commit-changes-analyzer.lock.yml @@ -4095,7 +4095,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/copilot-agent-analysis.lock.yml b/.github/workflows/copilot-agent-analysis.lock.yml index cd0ddb1381f..06fb4d73d52 100644 --- a/.github/workflows/copilot-agent-analysis.lock.yml +++ b/.github/workflows/copilot-agent-analysis.lock.yml @@ -4839,7 +4839,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/copilot-pr-merged-report.lock.yml b/.github/workflows/copilot-pr-merged-report.lock.yml index 314bad76b2a..15473a886b1 100644 --- a/.github/workflows/copilot-pr-merged-report.lock.yml +++ b/.github/workflows/copilot-pr-merged-report.lock.yml @@ -5129,7 +5129,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/copilot-pr-nlp-analysis.lock.yml b/.github/workflows/copilot-pr-nlp-analysis.lock.yml index 7288016b7d9..639ff6c12c1 100644 --- a/.github/workflows/copilot-pr-nlp-analysis.lock.yml +++ b/.github/workflows/copilot-pr-nlp-analysis.lock.yml @@ -5216,7 +5216,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/copilot-pr-prompt-analysis.lock.yml b/.github/workflows/copilot-pr-prompt-analysis.lock.yml index 98fc2d7ad4d..b9a905be40d 100644 --- a/.github/workflows/copilot-pr-prompt-analysis.lock.yml +++ b/.github/workflows/copilot-pr-prompt-analysis.lock.yml @@ -4238,7 +4238,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/copilot-session-insights.lock.yml b/.github/workflows/copilot-session-insights.lock.yml index 24ca4b93ac6..e0932e88665 100644 --- a/.github/workflows/copilot-session-insights.lock.yml +++ b/.github/workflows/copilot-session-insights.lock.yml @@ -6249,7 +6249,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml index b8cf036d225..8aa92a01d18 100644 --- a/.github/workflows/craft.lock.yml +++ b/.github/workflows/craft.lock.yml @@ -5232,7 +5232,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-assign-issue-to-user.lock.yml b/.github/workflows/daily-assign-issue-to-user.lock.yml index 197aa7e5529..210c3fa4828 100644 --- a/.github/workflows/daily-assign-issue-to-user.lock.yml +++ b/.github/workflows/daily-assign-issue-to-user.lock.yml @@ -3873,7 +3873,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-code-metrics.lock.yml b/.github/workflows/daily-code-metrics.lock.yml index d5718900c37..aee4249f5f7 100644 --- a/.github/workflows/daily-code-metrics.lock.yml +++ b/.github/workflows/daily-code-metrics.lock.yml @@ -5290,7 +5290,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-copilot-token-report.lock.yml b/.github/workflows/daily-copilot-token-report.lock.yml index e01721c206c..59981c5f7cb 100644 --- a/.github/workflows/daily-copilot-token-report.lock.yml +++ b/.github/workflows/daily-copilot-token-report.lock.yml @@ -5381,7 +5381,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index 6a786b469ad..911ddc3eb13 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -3886,7 +3886,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-fact.lock.yml b/.github/workflows/daily-fact.lock.yml index 94a93cf0966..17fbd0e82fe 100644 --- a/.github/workflows/daily-fact.lock.yml +++ b/.github/workflows/daily-fact.lock.yml @@ -3965,7 +3965,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml index 929fb2b89e8..b0612cfaf1e 100644 --- a/.github/workflows/daily-file-diet.lock.yml +++ b/.github/workflows/daily-file-diet.lock.yml @@ -3919,7 +3919,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-firewall-report.lock.yml b/.github/workflows/daily-firewall-report.lock.yml index aaa6ce3f457..1a3724afe0c 100644 --- a/.github/workflows/daily-firewall-report.lock.yml +++ b/.github/workflows/daily-firewall-report.lock.yml @@ -4663,7 +4663,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index 15e431ed097..d4abe61e8fb 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -5502,7 +5502,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-malicious-code-scan.lock.yml b/.github/workflows/daily-malicious-code-scan.lock.yml index 61b230cd85c..de580067236 100644 --- a/.github/workflows/daily-malicious-code-scan.lock.yml +++ b/.github/workflows/daily-malicious-code-scan.lock.yml @@ -3909,7 +3909,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-multi-device-docs-tester.lock.yml b/.github/workflows/daily-multi-device-docs-tester.lock.yml index 438ca1576fe..4224bc119e2 100644 --- a/.github/workflows/daily-multi-device-docs-tester.lock.yml +++ b/.github/workflows/daily-multi-device-docs-tester.lock.yml @@ -3797,7 +3797,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index cb4747b4ac7..045a4b2e1a1 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -5140,7 +5140,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-performance-summary.lock.yml b/.github/workflows/daily-performance-summary.lock.yml index b5ec45f45e1..bc8979c0044 100644 --- a/.github/workflows/daily-performance-summary.lock.yml +++ b/.github/workflows/daily-performance-summary.lock.yml @@ -6745,7 +6745,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-repo-chronicle.lock.yml b/.github/workflows/daily-repo-chronicle.lock.yml index 22e0ca16016..a8fd08d25ad 100644 --- a/.github/workflows/daily-repo-chronicle.lock.yml +++ b/.github/workflows/daily-repo-chronicle.lock.yml @@ -4814,7 +4814,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index 5fd99cfc5e8..93cfd22424f 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -3601,7 +3601,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml index 067b11e7951..27e7fa37b19 100644 --- a/.github/workflows/deep-report.lock.yml +++ b/.github/workflows/deep-report.lock.yml @@ -4381,7 +4381,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/dependabot-go-checker.lock.yml b/.github/workflows/dependabot-go-checker.lock.yml index 96bdb481ac4..b9a0cec6980 100644 --- a/.github/workflows/dependabot-go-checker.lock.yml +++ b/.github/workflows/dependabot-go-checker.lock.yml @@ -4209,7 +4209,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml index 6910bd4ec04..32b1994d4b6 100644 --- a/.github/workflows/dev-hawk.lock.yml +++ b/.github/workflows/dev-hawk.lock.yml @@ -4142,7 +4142,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index 4e13d7c1cd3..c03edaf8346 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -4398,7 +4398,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index 6ea89d5d252..1f9e67b28cd 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -5041,7 +5041,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index 3aa692d2553..993d65efafb 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -3549,7 +3549,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/docs-noob-tester.lock.yml b/.github/workflows/docs-noob-tester.lock.yml index c4847201822..f5ebef91b82 100644 --- a/.github/workflows/docs-noob-tester.lock.yml +++ b/.github/workflows/docs-noob-tester.lock.yml @@ -3687,7 +3687,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/duplicate-code-detector.lock.yml b/.github/workflows/duplicate-code-detector.lock.yml index 5cc0e69c733..bf3850677a4 100644 --- a/.github/workflows/duplicate-code-detector.lock.yml +++ b/.github/workflows/duplicate-code-detector.lock.yml @@ -3754,7 +3754,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/example-workflow-analyzer.lock.yml b/.github/workflows/example-workflow-analyzer.lock.yml index ee5f2a5fe06..1e20e0334eb 100644 --- a/.github/workflows/example-workflow-analyzer.lock.yml +++ b/.github/workflows/example-workflow-analyzer.lock.yml @@ -3602,7 +3602,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/github-mcp-structural-analysis.lock.yml b/.github/workflows/github-mcp-structural-analysis.lock.yml index b911e10ca68..7d0c173c59a 100644 --- a/.github/workflows/github-mcp-structural-analysis.lock.yml +++ b/.github/workflows/github-mcp-structural-analysis.lock.yml @@ -4968,7 +4968,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index 9d7046e1025..f226156f2af 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -4744,7 +4744,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index 3e1c483eb4b..adeca49cdf6 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -4707,7 +4707,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/go-fan.lock.yml b/.github/workflows/go-fan.lock.yml index 57fb61cdacf..a2b16cb0df1 100644 --- a/.github/workflows/go-fan.lock.yml +++ b/.github/workflows/go-fan.lock.yml @@ -4285,7 +4285,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index e95ab9b8eb8..27150a1bf9c 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -4050,7 +4050,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/go-pattern-detector.lock.yml b/.github/workflows/go-pattern-detector.lock.yml index 69ce011a660..c4e3d7f7b6f 100644 --- a/.github/workflows/go-pattern-detector.lock.yml +++ b/.github/workflows/go-pattern-detector.lock.yml @@ -3801,7 +3801,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml index 2685770bd62..77780bd8f41 100644 --- a/.github/workflows/grumpy-reviewer.lock.yml +++ b/.github/workflows/grumpy-reviewer.lock.yml @@ -5037,7 +5037,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index 35c6dd93436..3484411a0f9 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -3815,7 +3815,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/issue-arborist.lock.yml b/.github/workflows/issue-arborist.lock.yml index f0d77bdd719..a877c23a8d9 100644 --- a/.github/workflows/issue-arborist.lock.yml +++ b/.github/workflows/issue-arborist.lock.yml @@ -3763,7 +3763,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/issue-classifier.lock.yml b/.github/workflows/issue-classifier.lock.yml index 2627d08770b..707b88af55b 100644 --- a/.github/workflows/issue-classifier.lock.yml +++ b/.github/workflows/issue-classifier.lock.yml @@ -4613,7 +4613,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index f1464547f15..88e8a36d4e2 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -4309,7 +4309,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/issue-triage-agent.lock.yml b/.github/workflows/issue-triage-agent.lock.yml index f377a32fc42..579d67b3810 100644 --- a/.github/workflows/issue-triage-agent.lock.yml +++ b/.github/workflows/issue-triage-agent.lock.yml @@ -3781,7 +3781,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index 8c78811c431..8cc6abd3970 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -3840,7 +3840,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index 74d40d83d47..b31e59f4692 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -4327,7 +4327,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index 88fee388a54..4b91a157098 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -4217,7 +4217,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml index 4dd3d6d7f70..c9d2311d0d3 100644 --- a/.github/workflows/mergefest.lock.yml +++ b/.github/workflows/mergefest.lock.yml @@ -4382,7 +4382,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/notion-issue-summary.lock.yml b/.github/workflows/notion-issue-summary.lock.yml index a8de426594f..b52f702acff 100644 --- a/.github/workflows/notion-issue-summary.lock.yml +++ b/.github/workflows/notion-issue-summary.lock.yml @@ -3284,7 +3284,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/org-health-report.lock.yml b/.github/workflows/org-health-report.lock.yml index 2618137f759..18f8fdacce2 100644 --- a/.github/workflows/org-health-report.lock.yml +++ b/.github/workflows/org-health-report.lock.yml @@ -5078,7 +5078,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index b450bab6fdb..bab94c07246 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -5062,7 +5062,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml index f23b9364cda..988265219cd 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -4396,7 +4396,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 08ed50a8bc0..6ce7049b36c 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -6114,7 +6114,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml index 968124362f2..2d7c85ded96 100644 --- a/.github/workflows/pr-nitpick-reviewer.lock.yml +++ b/.github/workflows/pr-nitpick-reviewer.lock.yml @@ -5382,7 +5382,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/prompt-clustering-analysis.lock.yml b/.github/workflows/prompt-clustering-analysis.lock.yml index e3eeb725168..5a6c926c623 100644 --- a/.github/workflows/prompt-clustering-analysis.lock.yml +++ b/.github/workflows/prompt-clustering-analysis.lock.yml @@ -5603,7 +5603,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/python-data-charts.lock.yml b/.github/workflows/python-data-charts.lock.yml index 21729ba4052..e7d9b36d6af 100644 --- a/.github/workflows/python-data-charts.lock.yml +++ b/.github/workflows/python-data-charts.lock.yml @@ -5446,7 +5446,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 8a8f9790aea..1c056073b42 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -5644,7 +5644,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml index 9c45bc0ad23..477cf17c1b7 100644 --- a/.github/workflows/release.lock.yml +++ b/.github/workflows/release.lock.yml @@ -3742,7 +3742,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/repo-tree-map.lock.yml b/.github/workflows/repo-tree-map.lock.yml index c77be97c045..7170e1aee9f 100644 --- a/.github/workflows/repo-tree-map.lock.yml +++ b/.github/workflows/repo-tree-map.lock.yml @@ -3622,7 +3622,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/repository-quality-improver.lock.yml b/.github/workflows/repository-quality-improver.lock.yml index 55aa74ce0fd..1c7d84dd344 100644 --- a/.github/workflows/repository-quality-improver.lock.yml +++ b/.github/workflows/repository-quality-improver.lock.yml @@ -4660,7 +4660,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/research.lock.yml b/.github/workflows/research.lock.yml index f6e16054b1e..2d232d92582 100644 --- a/.github/workflows/research.lock.yml +++ b/.github/workflows/research.lock.yml @@ -3537,7 +3537,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/safe-output-health.lock.yml b/.github/workflows/safe-output-health.lock.yml index b3db88908d5..e273debe216 100644 --- a/.github/workflows/safe-output-health.lock.yml +++ b/.github/workflows/safe-output-health.lock.yml @@ -4624,7 +4624,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index cc7f9da6744..17765e60ea6 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -4272,7 +4272,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index f5a665fdd9d..26b69e33d13 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -5678,7 +5678,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/security-fix-pr.lock.yml b/.github/workflows/security-fix-pr.lock.yml index 318d1811400..4eb7935ba2b 100644 --- a/.github/workflows/security-fix-pr.lock.yml +++ b/.github/workflows/security-fix-pr.lock.yml @@ -3822,7 +3822,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/semantic-function-refactor.lock.yml b/.github/workflows/semantic-function-refactor.lock.yml index 2134048ecf3..9775e5e3fdf 100644 --- a/.github/workflows/semantic-function-refactor.lock.yml +++ b/.github/workflows/semantic-function-refactor.lock.yml @@ -4660,7 +4660,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index 0162926f06a..7a210a0156e 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -5559,7 +5559,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index 6e5eacc6a0a..15ff0249f73 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -5129,7 +5129,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/smoke-copilot-no-firewall.lock.yml b/.github/workflows/smoke-copilot-no-firewall.lock.yml index b8725534933..865bba42b00 100644 --- a/.github/workflows/smoke-copilot-no-firewall.lock.yml +++ b/.github/workflows/smoke-copilot-no-firewall.lock.yml @@ -6562,7 +6562,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/smoke-copilot-playwright.lock.yml b/.github/workflows/smoke-copilot-playwright.lock.yml index 460cae826f6..74313f633bb 100644 --- a/.github/workflows/smoke-copilot-playwright.lock.yml +++ b/.github/workflows/smoke-copilot-playwright.lock.yml @@ -6542,7 +6542,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/smoke-copilot-safe-inputs.lock.yml b/.github/workflows/smoke-copilot-safe-inputs.lock.yml index 1cc3c470527..6fd75bc0ccd 100644 --- a/.github/workflows/smoke-copilot-safe-inputs.lock.yml +++ b/.github/workflows/smoke-copilot-safe-inputs.lock.yml @@ -6267,7 +6267,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index 30e633ad847..c145320cc01 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -5080,7 +5080,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/smoke-detector.lock.yml b/.github/workflows/smoke-detector.lock.yml index 41b115934ac..01ee76ac0c4 100644 --- a/.github/workflows/smoke-detector.lock.yml +++ b/.github/workflows/smoke-detector.lock.yml @@ -5302,7 +5302,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/smoke-srt.lock.yml b/.github/workflows/smoke-srt.lock.yml index 42f447dcf67..58f8fa5bb62 100644 --- a/.github/workflows/smoke-srt.lock.yml +++ b/.github/workflows/smoke-srt.lock.yml @@ -3430,7 +3430,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/spec-kit-execute.lock.yml b/.github/workflows/spec-kit-execute.lock.yml index 7f28ea8e3a2..9895d2e7a24 100644 --- a/.github/workflows/spec-kit-execute.lock.yml +++ b/.github/workflows/spec-kit-execute.lock.yml @@ -4151,7 +4151,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/spec-kit-executor.lock.yml b/.github/workflows/spec-kit-executor.lock.yml index 1f664dcf1ca..6d23cd302b1 100644 --- a/.github/workflows/spec-kit-executor.lock.yml +++ b/.github/workflows/spec-kit-executor.lock.yml @@ -3841,7 +3841,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/speckit-dispatcher.lock.yml b/.github/workflows/speckit-dispatcher.lock.yml index f9700f18af6..5027d7335c6 100644 --- a/.github/workflows/speckit-dispatcher.lock.yml +++ b/.github/workflows/speckit-dispatcher.lock.yml @@ -5557,7 +5557,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index 91327206648..9a4cf0b4307 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -5314,7 +5314,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/static-analysis-report.lock.yml b/.github/workflows/static-analysis-report.lock.yml index eb360f1fb8a..e27df35ab8e 100644 --- a/.github/workflows/static-analysis-report.lock.yml +++ b/.github/workflows/static-analysis-report.lock.yml @@ -4363,7 +4363,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index cb47c5f97bf..d4d80d16d67 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -3838,7 +3838,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index cf4b546a459..b3506e2be68 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -4895,7 +4895,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/test-discussion-expires.lock.yml b/.github/workflows/test-discussion-expires.lock.yml index 605a255de6a..91dd121a39a 100644 --- a/.github/workflows/test-discussion-expires.lock.yml +++ b/.github/workflows/test-discussion-expires.lock.yml @@ -3216,7 +3216,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/test-python-safe-input.lock.yml b/.github/workflows/test-python-safe-input.lock.yml index 9c7ec6a1b1c..65a727ce67a 100644 --- a/.github/workflows/test-python-safe-input.lock.yml +++ b/.github/workflows/test-python-safe-input.lock.yml @@ -4845,7 +4845,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index ff2a9ac52ad..09d55038be4 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -3955,7 +3955,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/typist.lock.yml b/.github/workflows/typist.lock.yml index fca2f25fd3d..3fbd14aa3c0 100644 --- a/.github/workflows/typist.lock.yml +++ b/.github/workflows/typist.lock.yml @@ -4691,7 +4691,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 48fb60fca90..7b4be1098bb 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -5424,7 +5424,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/video-analyzer.lock.yml b/.github/workflows/video-analyzer.lock.yml index 300d8d9fd8b..71b33e6dce4 100644 --- a/.github/workflows/video-analyzer.lock.yml +++ b/.github/workflows/video-analyzer.lock.yml @@ -3879,7 +3879,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/.github/workflows/weekly-issue-summary.lock.yml b/.github/workflows/weekly-issue-summary.lock.yml index 78be1eb77ca..16ccc2f6b2d 100644 --- a/.github/workflows/weekly-issue-summary.lock.yml +++ b/.github/workflows/weekly-issue-summary.lock.yml @@ -4671,7 +4671,9 @@ jobs: core.info(`[INGESTION] Line ${i + 1}: Original type='${originalType}', Normalized type='${itemType}'`); item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/pkg/workflow/js/collect_ndjson_output.cjs b/pkg/workflow/js/collect_ndjson_output.cjs index 02be002e107..95e74c66104 100644 --- a/pkg/workflow/js/collect_ndjson_output.cjs +++ b/pkg/workflow/js/collect_ndjson_output.cjs @@ -247,7 +247,9 @@ async function main() { // Update item.type to normalized value item.type = itemType; if (!expectedOutputTypes[itemType]) { - core.warning(`[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); + core.warning( + `[INGESTION] Line ${i + 1}: Type '${itemType}' not found in expected types: ${JSON.stringify(Object.keys(expectedOutputTypes))}` + ); errors.push(`Line ${i + 1}: Unexpected output type '${itemType}'. Expected one of: ${Object.keys(expectedOutputTypes).join(", ")}`); continue; } diff --git a/pkg/workflow/mcp_servers.go b/pkg/workflow/mcp_servers.go index f000f97a9fb..dc655184b1f 100644 --- a/pkg/workflow/mcp_servers.go +++ b/pkg/workflow/mcp_servers.go @@ -113,14 +113,14 @@ func writeJavaScriptFilesInChunks(yaml *strings.Builder, files []JavaScriptFileW // Format: "cat > << ''\n\n\n" headerSize := len(indentSpaces) + len("cat > ") + len(file.TargetPath) + len(" << '") + len(file.EOFMarker) + len("'\n") footerSize := len(indentSpaces) + len(file.EOFMarker) + len("\n") - + // Calculate content size (each line gets indented) contentLines := FormatJavaScriptForYAML(file.Content) contentSize := 0 for _, line := range contentLines { contentSize += len(line) // line already includes indentation and newline } - + totalSize := headerSize + contentSize + footerSize filesWithSizes = append(filesWithSizes, fileWithSize{file: file, size: totalSize}) }