From 349040804dbebe2b9672c6bc0661b83e2e8f722e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Dec 2025 04:04:45 +0000 Subject: [PATCH 1/6] Initial plan From 8bd2f28714e70a0174d642b7751f2c2eececd84e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Dec 2025 04:16:58 +0000 Subject: [PATCH 2/6] Add Available Tools section to action logs - Modified generatePlainTextSummary() in log_parser_shared.cjs to include tools list - Tools are categorized by type (Builtin, Safe Outputs, Git/GitHub, Custom Agents, etc.) - Added comprehensive tests for the new functionality - All log parser tests passing (Copilot, Claude, Codex) Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- pkg/workflow/js/log_parser_shared.cjs | 82 ++++++++++++++++++++++ pkg/workflow/js/log_parser_shared.test.cjs | 66 +++++++++++++++++ 2 files changed, 148 insertions(+) diff --git a/pkg/workflow/js/log_parser_shared.cjs b/pkg/workflow/js/log_parser_shared.cjs index 50e7d210bd..ebb19efc8a 100644 --- a/pkg/workflow/js/log_parser_shared.cjs +++ b/pkg/workflow/js/log_parser_shared.cjs @@ -982,6 +982,88 @@ function generatePlainTextSummary(logEntries, options = {}) { } lines.push(""); + // Add Available Tools section from init entry + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + + // Categorize tools using the same logic as formatInitializationSummary + /** @type {{ [key: string]: string[] }} */ + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + + // Builtin tools that come with gh-aw / Copilot + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + + // Internal tools that are specific to Copilot CLI + const internalTools = ["fetch_copilot_cli_documentation"]; + + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + // Extract the tool name without the prefix for cleaner display + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + // Extract the tool name without the prefix for cleaner display + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + // Custom agents typically have hyphenated names (kebab-case) + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + + // Display categories with tools + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } + // Collect tool usage summary const toolUsePairs = new Map(); for (const entry of logEntries) { diff --git a/pkg/workflow/js/log_parser_shared.test.cjs b/pkg/workflow/js/log_parser_shared.test.cjs index 9fbd31eebb..d41795f176 100644 --- a/pkg/workflow/js/log_parser_shared.test.cjs +++ b/pkg/workflow/js/log_parser_shared.test.cjs @@ -1533,5 +1533,71 @@ describe("log_parser_shared.cjs", () => { expect(result).not.toContain("Read"); expect(result).not.toContain("Write"); }); + + it("should include Available Tools section from init entry", async () => { + const { generatePlainTextSummary } = await import("./log_parser_shared.cjs"); + + const logEntries = [ + { + type: "system", + subtype: "init", + model: "test-model", + tools: [ + "bash", + "view", + "create", + "edit", + "mcp__github__search_issues", + "mcp__github__create_issue", + "mcp__playwright__navigate", + "safeoutputs-create_issue", + "safeoutputs-add_comment", + "create-agentic-workflow", + "debug-agentic-workflow", + ], + }, + { type: "result", num_turns: 1 }, + ]; + + const result = generatePlainTextSummary(logEntries, { parserName: "Agent" }); + + expect(result).toContain("Available Tools:"); + expect(result).toContain("Builtin: 4 tools"); + expect(result).toContain("bash, view, create, edit"); + expect(result).toContain("Git/GitHub: 2 tools"); + expect(result).toContain("github::search_issues, github::create_issue"); + expect(result).toContain("Playwright: 1 tools"); + expect(result).toContain("playwright::navigate"); + expect(result).toContain("Safe Outputs: 2 tools"); + expect(result).toContain("create_issue, add_comment"); + expect(result).toContain("Custom Agents: 2 tools"); + expect(result).toContain("create-agentic-workflow, debug-agentic-workflow"); + }); + + it("should handle empty tools list gracefully", async () => { + const { generatePlainTextSummary } = await import("./log_parser_shared.cjs"); + + const logEntries = [ + { type: "system", subtype: "init", model: "test-model", tools: [] }, + { type: "result", num_turns: 1 }, + ]; + + const result = generatePlainTextSummary(logEntries, { parserName: "Agent" }); + + // Should not contain Available Tools section if no tools + expect(result).not.toContain("Available Tools:"); + }); + + it("should work without init entry", async () => { + const { generatePlainTextSummary } = await import("./log_parser_shared.cjs"); + + const logEntries = [{ type: "result", num_turns: 1 }]; + + const result = generatePlainTextSummary(logEntries, { parserName: "Agent" }); + + // Should work without init entry + expect(result).toContain("=== Agent Execution Summary ==="); + expect(result).not.toContain("Available Tools:"); + }); }); }); From de65938138f979da6b13817de64dc6c123e87443 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Dec 2025 04:22:38 +0000 Subject: [PATCH 3/6] Recompile workflows with updated log parser code - All lock.yml files updated with new generatePlainTextSummary() function - JavaScript code properly embedded in workflow files Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/ai-triage-campaign.lock.yml | 66 ++++++++++++++++ .github/workflows/archie.lock.yml | 66 ++++++++++++++++ .github/workflows/artifacts-summary.lock.yml | 66 ++++++++++++++++ .github/workflows/audit-workflows.lock.yml | 66 ++++++++++++++++ .github/workflows/blog-auditor.lock.yml | 66 ++++++++++++++++ .github/workflows/brave.lock.yml | 66 ++++++++++++++++ .../breaking-change-checker.lock.yml | 66 ++++++++++++++++ .github/workflows/changeset.lock.yml | 66 ++++++++++++++++ .github/workflows/ci-doctor.lock.yml | 66 ++++++++++++++++ .../cli-consistency-checker.lock.yml | 66 ++++++++++++++++ .../workflows/cli-version-checker.lock.yml | 66 ++++++++++++++++ .github/workflows/cloclo.lock.yml | 66 ++++++++++++++++ .../workflows/close-old-discussions.lock.yml | 66 ++++++++++++++++ .../commit-changes-analyzer.lock.yml | 66 ++++++++++++++++ .../workflows/copilot-agent-analysis.lock.yml | 66 ++++++++++++++++ .../copilot-pr-merged-report.lock.yml | 66 ++++++++++++++++ .../copilot-pr-nlp-analysis.lock.yml | 66 ++++++++++++++++ .../copilot-pr-prompt-analysis.lock.yml | 66 ++++++++++++++++ .../copilot-session-insights.lock.yml | 66 ++++++++++++++++ .github/workflows/craft.lock.yml | 66 ++++++++++++++++ .../daily-assign-issue-to-user.lock.yml | 66 ++++++++++++++++ .github/workflows/daily-code-metrics.lock.yml | 66 ++++++++++++++++ .../daily-copilot-token-report.lock.yml | 66 ++++++++++++++++ .github/workflows/daily-doc-updater.lock.yml | 66 ++++++++++++++++ .github/workflows/daily-fact.lock.yml | 66 ++++++++++++++++ .github/workflows/daily-file-diet.lock.yml | 66 ++++++++++++++++ .../workflows/daily-firewall-report.lock.yml | 66 ++++++++++++++++ .../workflows/daily-issues-report.lock.yml | 66 ++++++++++++++++ .../daily-malicious-code-scan.lock.yml | 66 ++++++++++++++++ .../daily-multi-device-docs-tester.lock.yml | 66 ++++++++++++++++ .github/workflows/daily-news.lock.yml | 66 ++++++++++++++++ .../daily-performance-summary.lock.yml | 66 ++++++++++++++++ .../workflows/daily-repo-chronicle.lock.yml | 66 ++++++++++++++++ .../workflows/daily-workflow-updater.lock.yml | 66 ++++++++++++++++ .github/workflows/deep-report.lock.yml | 66 ++++++++++++++++ .../workflows/dependabot-go-checker.lock.yml | 66 ++++++++++++++++ .github/workflows/dev-hawk.lock.yml | 66 ++++++++++++++++ .github/workflows/dev.lock.yml | 66 ++++++++++++++++ .../developer-docs-consolidator.lock.yml | 66 ++++++++++++++++ .github/workflows/dictation-prompt.lock.yml | 66 ++++++++++++++++ .github/workflows/docs-noob-tester.lock.yml | 66 ++++++++++++++++ .../duplicate-code-detector.lock.yml | 66 ++++++++++++++++ .../example-permissions-warning.lock.yml | 66 ++++++++++++++++ .../example-workflow-analyzer.lock.yml | 66 ++++++++++++++++ .github/workflows/firewall-escape.lock.yml | 66 ++++++++++++++++ .github/workflows/firewall.lock.yml | 66 ++++++++++++++++ .../github-mcp-structural-analysis.lock.yml | 66 ++++++++++++++++ .../github-mcp-tools-report.lock.yml | 66 ++++++++++++++++ .../workflows/glossary-maintainer.lock.yml | 66 ++++++++++++++++ .github/workflows/go-fan.lock.yml | 66 ++++++++++++++++ .github/workflows/go-logger.lock.yml | 66 ++++++++++++++++ .../workflows/go-pattern-detector.lock.yml | 66 ++++++++++++++++ .github/workflows/grumpy-reviewer.lock.yml | 66 ++++++++++++++++ .../workflows/instructions-janitor.lock.yml | 66 ++++++++++++++++ .github/workflows/issue-arborist.lock.yml | 66 ++++++++++++++++ .github/workflows/issue-monster.lock.yml | 66 ++++++++++++++++ .github/workflows/issue-triage-agent.lock.yml | 66 ++++++++++++++++ .github/workflows/lockfile-stats.lock.yml | 66 ++++++++++++++++ .github/workflows/mcp-inspector.lock.yml | 66 ++++++++++++++++ .github/workflows/mergefest.lock.yml | 66 ++++++++++++++++ .../workflows/notion-issue-summary.lock.yml | 66 ++++++++++++++++ .github/workflows/org-health-report.lock.yml | 66 ++++++++++++++++ .github/workflows/pdf-summary.lock.yml | 66 ++++++++++++++++ .github/workflows/plan.lock.yml | 66 ++++++++++++++++ .github/workflows/poem-bot.lock.yml | 66 ++++++++++++++++ .../workflows/pr-nitpick-reviewer.lock.yml | 66 ++++++++++++++++ .../prompt-clustering-analysis.lock.yml | 66 ++++++++++++++++ .github/workflows/python-data-charts.lock.yml | 66 ++++++++++++++++ .github/workflows/q.lock.yml | 66 ++++++++++++++++ .github/workflows/release.lock.yml | 72 ++++++++++++++++- .github/workflows/repo-tree-map.lock.yml | 66 ++++++++++++++++ .../repository-quality-improver.lock.yml | 66 ++++++++++++++++ .github/workflows/research.lock.yml | 66 ++++++++++++++++ .github/workflows/safe-output-health.lock.yml | 66 ++++++++++++++++ .../schema-consistency-checker.lock.yml | 66 ++++++++++++++++ .github/workflows/scout.lock.yml | 66 ++++++++++++++++ .github/workflows/security-fix-pr.lock.yml | 66 ++++++++++++++++ .../semantic-function-refactor.lock.yml | 66 ++++++++++++++++ .github/workflows/smoke-claude.lock.yml | 66 ++++++++++++++++ .github/workflows/smoke-codex.lock.yml | 66 ++++++++++++++++ .../smoke-copilot-no-firewall.lock.yml | 66 ++++++++++++++++ .../smoke-copilot-playwright.lock.yml | 66 ++++++++++++++++ .../smoke-copilot-safe-inputs.lock.yml | 66 ++++++++++++++++ .github/workflows/smoke-copilot.lock.yml | 66 ++++++++++++++++ .github/workflows/smoke-detector.lock.yml | 66 ++++++++++++++++ .../smoke-srt-custom-config.lock.yml | 66 ++++++++++++++++ .github/workflows/smoke-srt.lock.yml | 66 ++++++++++++++++ .github/workflows/spec-kit-execute.lock.yml | 77 +++++++++++++++++-- .github/workflows/spec-kit-executor.lock.yml | 66 ++++++++++++++++ .github/workflows/speckit-dispatcher.lock.yml | 66 ++++++++++++++++ .../workflows/stale-repo-identifier.lock.yml | 66 ++++++++++++++++ .../workflows/static-analysis-report.lock.yml | 66 ++++++++++++++++ .github/workflows/super-linter.lock.yml | 66 ++++++++++++++++ .../workflows/technical-doc-writer.lock.yml | 66 ++++++++++++++++ .../test-discussion-expires.lock.yml | 66 ++++++++++++++++ .../workflows/test-python-safe-input.lock.yml | 66 ++++++++++++++++ .github/workflows/tidy.lock.yml | 66 ++++++++++++++++ .github/workflows/typist.lock.yml | 66 ++++++++++++++++ .github/workflows/unbloat-docs.lock.yml | 66 ++++++++++++++++ .github/workflows/video-analyzer.lock.yml | 66 ++++++++++++++++ .../workflows/weekly-issue-summary.lock.yml | 66 ++++++++++++++++ 101 files changed, 6675 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ai-triage-campaign.lock.yml b/.github/workflows/ai-triage-campaign.lock.yml index 43ddaff816..3146fce327 100644 --- a/.github/workflows/ai-triage-campaign.lock.yml +++ b/.github/workflows/ai-triage-campaign.lock.yml @@ -3953,6 +3953,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml index 1a87178b04..59a7bec08a 100644 --- a/.github/workflows/archie.lock.yml +++ b/.github/workflows/archie.lock.yml @@ -5614,6 +5614,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/artifacts-summary.lock.yml b/.github/workflows/artifacts-summary.lock.yml index 2ccbab3b53..52eef05f05 100644 --- a/.github/workflows/artifacts-summary.lock.yml +++ b/.github/workflows/artifacts-summary.lock.yml @@ -4111,6 +4111,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index 58421666fb..8640f815b9 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -5660,6 +5660,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/blog-auditor.lock.yml b/.github/workflows/blog-auditor.lock.yml index de6307af49..136ff7408f 100644 --- a/.github/workflows/blog-auditor.lock.yml +++ b/.github/workflows/blog-auditor.lock.yml @@ -4722,6 +4722,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/brave.lock.yml b/.github/workflows/brave.lock.yml index c66c9f08b8..a06560ff12 100644 --- a/.github/workflows/brave.lock.yml +++ b/.github/workflows/brave.lock.yml @@ -5404,6 +5404,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml index 7135680e0c..eb2640d903 100644 --- a/.github/workflows/breaking-change-checker.lock.yml +++ b/.github/workflows/breaking-change-checker.lock.yml @@ -4195,6 +4195,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index 7d684ecd6b..c63f6aa811 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -5084,6 +5084,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index c5e1ea7827..a0904d56f0 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -4890,6 +4890,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/cli-consistency-checker.lock.yml b/.github/workflows/cli-consistency-checker.lock.yml index 86decb267e..72e2e654ca 100644 --- a/.github/workflows/cli-consistency-checker.lock.yml +++ b/.github/workflows/cli-consistency-checker.lock.yml @@ -4192,6 +4192,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index 9ab1c14699..94253dfbf6 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -4671,6 +4671,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 4f7c8e4341..9fa3e361b8 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -6138,6 +6138,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/close-old-discussions.lock.yml b/.github/workflows/close-old-discussions.lock.yml index 5fa6a8e5f6..b2aff84172 100644 --- a/.github/workflows/close-old-discussions.lock.yml +++ b/.github/workflows/close-old-discussions.lock.yml @@ -4289,6 +4289,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/commit-changes-analyzer.lock.yml b/.github/workflows/commit-changes-analyzer.lock.yml index 8484d46776..ce51a0bd37 100644 --- a/.github/workflows/commit-changes-analyzer.lock.yml +++ b/.github/workflows/commit-changes-analyzer.lock.yml @@ -4603,6 +4603,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/copilot-agent-analysis.lock.yml b/.github/workflows/copilot-agent-analysis.lock.yml index c62121d1e2..441f9c2c98 100644 --- a/.github/workflows/copilot-agent-analysis.lock.yml +++ b/.github/workflows/copilot-agent-analysis.lock.yml @@ -5347,6 +5347,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/copilot-pr-merged-report.lock.yml b/.github/workflows/copilot-pr-merged-report.lock.yml index 07e7b163c2..3f95e0d1bb 100644 --- a/.github/workflows/copilot-pr-merged-report.lock.yml +++ b/.github/workflows/copilot-pr-merged-report.lock.yml @@ -5744,6 +5744,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/copilot-pr-nlp-analysis.lock.yml b/.github/workflows/copilot-pr-nlp-analysis.lock.yml index 5891f1fa9e..26a4a76bd0 100644 --- a/.github/workflows/copilot-pr-nlp-analysis.lock.yml +++ b/.github/workflows/copilot-pr-nlp-analysis.lock.yml @@ -5732,6 +5732,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/copilot-pr-prompt-analysis.lock.yml b/.github/workflows/copilot-pr-prompt-analysis.lock.yml index 31e9d3afbf..ddb48a636c 100644 --- a/.github/workflows/copilot-pr-prompt-analysis.lock.yml +++ b/.github/workflows/copilot-pr-prompt-analysis.lock.yml @@ -4754,6 +4754,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/copilot-session-insights.lock.yml b/.github/workflows/copilot-session-insights.lock.yml index b0ddab8375..5c12dc23af 100644 --- a/.github/workflows/copilot-session-insights.lock.yml +++ b/.github/workflows/copilot-session-insights.lock.yml @@ -6757,6 +6757,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml index b672d25a69..53ae34fb90 100644 --- a/.github/workflows/craft.lock.yml +++ b/.github/workflows/craft.lock.yml @@ -5748,6 +5748,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-assign-issue-to-user.lock.yml b/.github/workflows/daily-assign-issue-to-user.lock.yml index 056cff7327..4d3f3c4ffd 100644 --- a/.github/workflows/daily-assign-issue-to-user.lock.yml +++ b/.github/workflows/daily-assign-issue-to-user.lock.yml @@ -4389,6 +4389,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-code-metrics.lock.yml b/.github/workflows/daily-code-metrics.lock.yml index cd8c918caa..27696a2acb 100644 --- a/.github/workflows/daily-code-metrics.lock.yml +++ b/.github/workflows/daily-code-metrics.lock.yml @@ -5798,6 +5798,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-copilot-token-report.lock.yml b/.github/workflows/daily-copilot-token-report.lock.yml index 1dd334ae9e..eebe59ecc8 100644 --- a/.github/workflows/daily-copilot-token-report.lock.yml +++ b/.github/workflows/daily-copilot-token-report.lock.yml @@ -5897,6 +5897,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index 5b5837313a..48b3e3dd22 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -4394,6 +4394,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-fact.lock.yml b/.github/workflows/daily-fact.lock.yml index f06db10759..26e6962443 100644 --- a/.github/workflows/daily-fact.lock.yml +++ b/.github/workflows/daily-fact.lock.yml @@ -4484,6 +4484,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml index 2f3d1dbb11..95922bcbb7 100644 --- a/.github/workflows/daily-file-diet.lock.yml +++ b/.github/workflows/daily-file-diet.lock.yml @@ -4438,6 +4438,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-firewall-report.lock.yml b/.github/workflows/daily-firewall-report.lock.yml index 9016aabe15..406e592fc0 100644 --- a/.github/workflows/daily-firewall-report.lock.yml +++ b/.github/workflows/daily-firewall-report.lock.yml @@ -5179,6 +5179,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index a4f15a6645..30741f9eef 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -6021,6 +6021,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-malicious-code-scan.lock.yml b/.github/workflows/daily-malicious-code-scan.lock.yml index af2748fe26..749279e88d 100644 --- a/.github/workflows/daily-malicious-code-scan.lock.yml +++ b/.github/workflows/daily-malicious-code-scan.lock.yml @@ -4425,6 +4425,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-multi-device-docs-tester.lock.yml b/.github/workflows/daily-multi-device-docs-tester.lock.yml index 1fc17de867..f933cbe164 100644 --- a/.github/workflows/daily-multi-device-docs-tester.lock.yml +++ b/.github/workflows/daily-multi-device-docs-tester.lock.yml @@ -4305,6 +4305,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index 513fb89955..48f6afe949 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -5656,6 +5656,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-performance-summary.lock.yml b/.github/workflows/daily-performance-summary.lock.yml index 6d06ea9916..5c43354f28 100644 --- a/.github/workflows/daily-performance-summary.lock.yml +++ b/.github/workflows/daily-performance-summary.lock.yml @@ -7257,6 +7257,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-repo-chronicle.lock.yml b/.github/workflows/daily-repo-chronicle.lock.yml index 347e7c3098..d8621ed1a3 100644 --- a/.github/workflows/daily-repo-chronicle.lock.yml +++ b/.github/workflows/daily-repo-chronicle.lock.yml @@ -5330,6 +5330,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index 13e1612436..091b1ed63f 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -4117,6 +4117,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml index 25682053a7..814725748c 100644 --- a/.github/workflows/deep-report.lock.yml +++ b/.github/workflows/deep-report.lock.yml @@ -4900,6 +4900,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/dependabot-go-checker.lock.yml b/.github/workflows/dependabot-go-checker.lock.yml index c53af7d44a..84768cbeee 100644 --- a/.github/workflows/dependabot-go-checker.lock.yml +++ b/.github/workflows/dependabot-go-checker.lock.yml @@ -4725,6 +4725,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml index 799fbb45fc..a4a55ec46c 100644 --- a/.github/workflows/dev-hawk.lock.yml +++ b/.github/workflows/dev-hawk.lock.yml @@ -4658,6 +4658,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index af1fc6c70b..c9105beaf2 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -3007,6 +3007,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index 54285bae60..08e8cc6e62 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -5549,6 +5549,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index 203be2cecf..f91ac89245 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -4065,6 +4065,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/docs-noob-tester.lock.yml b/.github/workflows/docs-noob-tester.lock.yml index d2ad96fdc6..5fd9b785ee 100644 --- a/.github/workflows/docs-noob-tester.lock.yml +++ b/.github/workflows/docs-noob-tester.lock.yml @@ -4203,6 +4203,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/duplicate-code-detector.lock.yml b/.github/workflows/duplicate-code-detector.lock.yml index 409b7f37fc..2ea671b62f 100644 --- a/.github/workflows/duplicate-code-detector.lock.yml +++ b/.github/workflows/duplicate-code-detector.lock.yml @@ -4273,6 +4273,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/example-permissions-warning.lock.yml b/.github/workflows/example-permissions-warning.lock.yml index d50d7713f6..ea0d330021 100644 --- a/.github/workflows/example-permissions-warning.lock.yml +++ b/.github/workflows/example-permissions-warning.lock.yml @@ -1447,6 +1447,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/example-workflow-analyzer.lock.yml b/.github/workflows/example-workflow-analyzer.lock.yml index 673ca36f5c..0803dd5414 100644 --- a/.github/workflows/example-workflow-analyzer.lock.yml +++ b/.github/workflows/example-workflow-analyzer.lock.yml @@ -4110,6 +4110,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml index da8764ed7d..f38dac3ae8 100644 --- a/.github/workflows/firewall-escape.lock.yml +++ b/.github/workflows/firewall-escape.lock.yml @@ -1863,6 +1863,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/firewall.lock.yml b/.github/workflows/firewall.lock.yml index 2b3726c01c..75b2879125 100644 --- a/.github/workflows/firewall.lock.yml +++ b/.github/workflows/firewall.lock.yml @@ -1562,6 +1562,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/github-mcp-structural-analysis.lock.yml b/.github/workflows/github-mcp-structural-analysis.lock.yml index 9882df42f9..b7c06fd04a 100644 --- a/.github/workflows/github-mcp-structural-analysis.lock.yml +++ b/.github/workflows/github-mcp-structural-analysis.lock.yml @@ -5476,6 +5476,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index fb2fc49957..ae32a18a16 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -5252,6 +5252,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index c66c6eb876..d2520012b0 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -5223,6 +5223,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/go-fan.lock.yml b/.github/workflows/go-fan.lock.yml index 4baca963cb..5d34ccfebd 100644 --- a/.github/workflows/go-fan.lock.yml +++ b/.github/workflows/go-fan.lock.yml @@ -4793,6 +4793,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index 9e395ab77c..941ab04799 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -4558,6 +4558,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/go-pattern-detector.lock.yml b/.github/workflows/go-pattern-detector.lock.yml index b21d65291e..870878ed24 100644 --- a/.github/workflows/go-pattern-detector.lock.yml +++ b/.github/workflows/go-pattern-detector.lock.yml @@ -4309,6 +4309,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml index 78897323de..1f39094cc9 100644 --- a/.github/workflows/grumpy-reviewer.lock.yml +++ b/.github/workflows/grumpy-reviewer.lock.yml @@ -5553,6 +5553,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index 0b12156225..05589f4245 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -4323,6 +4323,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/issue-arborist.lock.yml b/.github/workflows/issue-arborist.lock.yml index 79933f384f..5724907b1b 100644 --- a/.github/workflows/issue-arborist.lock.yml +++ b/.github/workflows/issue-arborist.lock.yml @@ -4282,6 +4282,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index bbdd516971..bea2f9204e 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -4825,6 +4825,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/issue-triage-agent.lock.yml b/.github/workflows/issue-triage-agent.lock.yml index d11d900059..ccc3512258 100644 --- a/.github/workflows/issue-triage-agent.lock.yml +++ b/.github/workflows/issue-triage-agent.lock.yml @@ -4297,6 +4297,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index 1ae45cb0d5..0b828aa627 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -4835,6 +4835,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index f2ea4c652c..209672c7a9 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -4733,6 +4733,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml index 7b7676c37c..80aea73d6a 100644 --- a/.github/workflows/mergefest.lock.yml +++ b/.github/workflows/mergefest.lock.yml @@ -4898,6 +4898,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/notion-issue-summary.lock.yml b/.github/workflows/notion-issue-summary.lock.yml index 80fe18e70b..0311779f3d 100644 --- a/.github/workflows/notion-issue-summary.lock.yml +++ b/.github/workflows/notion-issue-summary.lock.yml @@ -3800,6 +3800,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/org-health-report.lock.yml b/.github/workflows/org-health-report.lock.yml index d17f509e3c..687768bea7 100644 --- a/.github/workflows/org-health-report.lock.yml +++ b/.github/workflows/org-health-report.lock.yml @@ -5594,6 +5594,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index 370c18df62..6705616103 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -5578,6 +5578,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml index e4b087b626..19a82cec4a 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -4912,6 +4912,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 73e98b05d4..b71c95ff1b 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -6630,6 +6630,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml index ff2e5ec6be..07691fc2ec 100644 --- a/.github/workflows/pr-nitpick-reviewer.lock.yml +++ b/.github/workflows/pr-nitpick-reviewer.lock.yml @@ -5898,6 +5898,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/prompt-clustering-analysis.lock.yml b/.github/workflows/prompt-clustering-analysis.lock.yml index 868ce11f27..cfb39e466f 100644 --- a/.github/workflows/prompt-clustering-analysis.lock.yml +++ b/.github/workflows/prompt-clustering-analysis.lock.yml @@ -6111,6 +6111,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/python-data-charts.lock.yml b/.github/workflows/python-data-charts.lock.yml index 7242e09091..7c4f4884af 100644 --- a/.github/workflows/python-data-charts.lock.yml +++ b/.github/workflows/python-data-charts.lock.yml @@ -5962,6 +5962,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 5d2289b5fb..cf060a26bb 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -6160,6 +6160,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml index 25f1d66a81..120603b6aa 100644 --- a/.github/workflows/release.lock.yml +++ b/.github/workflows/release.lock.yml @@ -4258,6 +4258,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { @@ -6209,19 +6275,19 @@ 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 output-file: sbom.cdx.json - name: Upload SBOM artifacts - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 with: name: sbom-artifacts path: | diff --git a/.github/workflows/repo-tree-map.lock.yml b/.github/workflows/repo-tree-map.lock.yml index 5663b899a4..c24f950e3a 100644 --- a/.github/workflows/repo-tree-map.lock.yml +++ b/.github/workflows/repo-tree-map.lock.yml @@ -4138,6 +4138,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/repository-quality-improver.lock.yml b/.github/workflows/repository-quality-improver.lock.yml index 4f2315742a..32f62bfb26 100644 --- a/.github/workflows/repository-quality-improver.lock.yml +++ b/.github/workflows/repository-quality-improver.lock.yml @@ -5176,6 +5176,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/research.lock.yml b/.github/workflows/research.lock.yml index a40c470158..2c5ed30346 100644 --- a/.github/workflows/research.lock.yml +++ b/.github/workflows/research.lock.yml @@ -4053,6 +4053,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/safe-output-health.lock.yml b/.github/workflows/safe-output-health.lock.yml index 59de576d79..1f845ce6fb 100644 --- a/.github/workflows/safe-output-health.lock.yml +++ b/.github/workflows/safe-output-health.lock.yml @@ -5132,6 +5132,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index e32acd6633..dad416ebba 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -4780,6 +4780,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index 7a238fe10d..69b0a83722 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -6186,6 +6186,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/security-fix-pr.lock.yml b/.github/workflows/security-fix-pr.lock.yml index 802de31c72..d84c7e306f 100644 --- a/.github/workflows/security-fix-pr.lock.yml +++ b/.github/workflows/security-fix-pr.lock.yml @@ -4330,6 +4330,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/semantic-function-refactor.lock.yml b/.github/workflows/semantic-function-refactor.lock.yml index 80084fd586..6bc06a37e8 100644 --- a/.github/workflows/semantic-function-refactor.lock.yml +++ b/.github/workflows/semantic-function-refactor.lock.yml @@ -5168,6 +5168,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index de354189de..d79ed2a1fd 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -6067,6 +6067,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index a31922d99d..c6ff3928f2 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -5626,6 +5626,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/smoke-copilot-no-firewall.lock.yml b/.github/workflows/smoke-copilot-no-firewall.lock.yml index 98fa0d7515..e724db7a3b 100644 --- a/.github/workflows/smoke-copilot-no-firewall.lock.yml +++ b/.github/workflows/smoke-copilot-no-firewall.lock.yml @@ -7160,6 +7160,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/smoke-copilot-playwright.lock.yml b/.github/workflows/smoke-copilot-playwright.lock.yml index d00c62b682..0d6fe531b4 100644 --- a/.github/workflows/smoke-copilot-playwright.lock.yml +++ b/.github/workflows/smoke-copilot-playwright.lock.yml @@ -7144,6 +7144,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/smoke-copilot-safe-inputs.lock.yml b/.github/workflows/smoke-copilot-safe-inputs.lock.yml index 52b6856904..fe5d6f2643 100644 --- a/.github/workflows/smoke-copilot-safe-inputs.lock.yml +++ b/.github/workflows/smoke-copilot-safe-inputs.lock.yml @@ -6869,6 +6869,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index c055a23577..81d106b208 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -7042,6 +7042,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/smoke-detector.lock.yml b/.github/workflows/smoke-detector.lock.yml index ed706834c3..3ff585b7db 100644 --- a/.github/workflows/smoke-detector.lock.yml +++ b/.github/workflows/smoke-detector.lock.yml @@ -5810,6 +5810,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/smoke-srt-custom-config.lock.yml b/.github/workflows/smoke-srt-custom-config.lock.yml index 01a1ef4ec0..bcb3f4dcda 100644 --- a/.github/workflows/smoke-srt-custom-config.lock.yml +++ b/.github/workflows/smoke-srt-custom-config.lock.yml @@ -1739,6 +1739,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/smoke-srt.lock.yml b/.github/workflows/smoke-srt.lock.yml index 193655597d..1b88e8d1fd 100644 --- a/.github/workflows/smoke-srt.lock.yml +++ b/.github/workflows/smoke-srt.lock.yml @@ -3945,6 +3945,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/spec-kit-execute.lock.yml b/.github/workflows/spec-kit-execute.lock.yml index fc88388f54..d8931e59c3 100644 --- a/.github/workflows/spec-kit-execute.lock.yml +++ b/.github/workflows/spec-kit-execute.lock.yml @@ -648,11 +648,6 @@ jobs: restore-keys: | memory-${{ github.workflow }}- memory- - - name: Upload cache-memory data as artifact - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 - with: - name: cache-memory - path: /tmp/gh-aw/cache-memory # Repo memory git-based storage configuration from frontmatter processed below - name: Clone repo-memory branch (default) env: @@ -4672,6 +4667,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { @@ -5651,6 +5712,12 @@ jobs: path: /tmp/gh-aw/repo-memory-default retention-days: 1 if-no-files-found: ignore + - name: Upload cache-memory data as artifact + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + if: always() + with: + name: cache-memory + path: /tmp/gh-aw/cache-memory - name: Validate agent logs for errors if: always() uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 diff --git a/.github/workflows/spec-kit-executor.lock.yml b/.github/workflows/spec-kit-executor.lock.yml index 4107ea98f7..a93be78cb6 100644 --- a/.github/workflows/spec-kit-executor.lock.yml +++ b/.github/workflows/spec-kit-executor.lock.yml @@ -4357,6 +4357,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/speckit-dispatcher.lock.yml b/.github/workflows/speckit-dispatcher.lock.yml index 18fc8d3ca3..0b2c7f2246 100644 --- a/.github/workflows/speckit-dispatcher.lock.yml +++ b/.github/workflows/speckit-dispatcher.lock.yml @@ -6076,6 +6076,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index eec13ac4b2..42e8419bb2 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -5830,6 +5830,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/static-analysis-report.lock.yml b/.github/workflows/static-analysis-report.lock.yml index 770c1fe286..b5a306297a 100644 --- a/.github/workflows/static-analysis-report.lock.yml +++ b/.github/workflows/static-analysis-report.lock.yml @@ -4871,6 +4871,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index e019103d26..71c6f5ca63 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -4354,6 +4354,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index 021ce0e9a0..b0ba8f0463 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -5411,6 +5411,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/test-discussion-expires.lock.yml b/.github/workflows/test-discussion-expires.lock.yml index d4e01241a6..1ca43b7408 100644 --- a/.github/workflows/test-discussion-expires.lock.yml +++ b/.github/workflows/test-discussion-expires.lock.yml @@ -3732,6 +3732,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/test-python-safe-input.lock.yml b/.github/workflows/test-python-safe-input.lock.yml index f568fbf947..d50fdb68c7 100644 --- a/.github/workflows/test-python-safe-input.lock.yml +++ b/.github/workflows/test-python-safe-input.lock.yml @@ -5354,6 +5354,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index 7f6c108eb2..acbf5a7d3d 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -4471,6 +4471,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/typist.lock.yml b/.github/workflows/typist.lock.yml index 069d88a040..f12b67fb3f 100644 --- a/.github/workflows/typist.lock.yml +++ b/.github/workflows/typist.lock.yml @@ -5199,6 +5199,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 5061f35e08..c0860b6ac1 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -5932,6 +5932,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/video-analyzer.lock.yml b/.github/workflows/video-analyzer.lock.yml index c773dbc1ee..633ac65e39 100644 --- a/.github/workflows/video-analyzer.lock.yml +++ b/.github/workflows/video-analyzer.lock.yml @@ -4395,6 +4395,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/weekly-issue-summary.lock.yml b/.github/workflows/weekly-issue-summary.lock.yml index 92af1b2fc7..2b36116490 100644 --- a/.github/workflows/weekly-issue-summary.lock.yml +++ b/.github/workflows/weekly-issue-summary.lock.yml @@ -5187,6 +5187,72 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + lines.push(`${category}: ${tools.length} tools`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { From ea756fbb88d1f513942c0f4d47f357498721cb28 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Dec 2025 04:26:28 +0000 Subject: [PATCH 4/6] Fix pluralization for tool counts - Use singular "tool" when count is 1, "tools" otherwise - Updated tests to match corrected output Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- pkg/workflow/js/log_parser_shared.cjs | 3 ++- pkg/workflow/js/log_parser_shared.test.cjs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/workflow/js/log_parser_shared.cjs b/pkg/workflow/js/log_parser_shared.cjs index ebb19efc8a..5beaaebf22 100644 --- a/pkg/workflow/js/log_parser_shared.cjs +++ b/pkg/workflow/js/log_parser_shared.cjs @@ -1057,7 +1057,8 @@ function generatePlainTextSummary(logEntries, options = {}) { // Display categories with tools for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/pkg/workflow/js/log_parser_shared.test.cjs b/pkg/workflow/js/log_parser_shared.test.cjs index d41795f176..be45003ca3 100644 --- a/pkg/workflow/js/log_parser_shared.test.cjs +++ b/pkg/workflow/js/log_parser_shared.test.cjs @@ -1566,7 +1566,7 @@ describe("log_parser_shared.cjs", () => { expect(result).toContain("bash, view, create, edit"); expect(result).toContain("Git/GitHub: 2 tools"); expect(result).toContain("github::search_issues, github::create_issue"); - expect(result).toContain("Playwright: 1 tools"); + expect(result).toContain("Playwright: 1 tool"); expect(result).toContain("playwright::navigate"); expect(result).toContain("Safe Outputs: 2 tools"); expect(result).toContain("create_issue, add_comment"); From 66447f5ee38459ec70d7ddf1e58730139f24c0e5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Dec 2025 04:27:20 +0000 Subject: [PATCH 5/6] Recompile workflows after pluralization fix - All lock.yml files updated with corrected pluralization logic - Singular "tool" used when count is 1, "tools" when count is > 1 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/ai-triage-campaign.lock.yml | 3 +- .github/workflows/archie.lock.yml | 3 +- .github/workflows/artifacts-summary.lock.yml | 3 +- .github/workflows/audit-workflows.lock.yml | 3 +- .github/workflows/blog-auditor.lock.yml | 3 +- .github/workflows/brave.lock.yml | 3 +- .../breaking-change-checker.lock.yml | 3 +- .github/workflows/changeset.lock.yml | 3 +- .github/workflows/ci-doctor.lock.yml | 3 +- .../cli-consistency-checker.lock.yml | 3 +- .../workflows/cli-version-checker.lock.yml | 3 +- .github/workflows/cloclo.lock.yml | 3 +- .../workflows/close-old-discussions.lock.yml | 3 +- .../commit-changes-analyzer.lock.yml | 3 +- .../workflows/copilot-agent-analysis.lock.yml | 3 +- .../copilot-pr-merged-report.lock.yml | 3 +- .../copilot-pr-nlp-analysis.lock.yml | 3 +- .../copilot-pr-prompt-analysis.lock.yml | 3 +- .../copilot-session-insights.lock.yml | 3 +- .github/workflows/craft.lock.yml | 3 +- .../daily-assign-issue-to-user.lock.yml | 3 +- .github/workflows/daily-code-metrics.lock.yml | 3 +- .../daily-copilot-token-report.lock.yml | 3 +- .github/workflows/daily-doc-updater.lock.yml | 3 +- .github/workflows/daily-fact.lock.yml | 3 +- .github/workflows/daily-file-diet.lock.yml | 3 +- .../workflows/daily-firewall-report.lock.yml | 3 +- .../workflows/daily-issues-report.lock.yml | 3 +- .../daily-malicious-code-scan.lock.yml | 3 +- .../daily-multi-device-docs-tester.lock.yml | 3 +- .github/workflows/daily-news.lock.yml | 3 +- .../daily-performance-summary.lock.yml | 3 +- .../workflows/daily-repo-chronicle.lock.yml | 3 +- .github/workflows/daily-team-status.lock.yml | 67 +++++++++++++++++++ .../workflows/daily-workflow-updater.lock.yml | 3 +- .github/workflows/deep-report.lock.yml | 3 +- .../workflows/dependabot-go-checker.lock.yml | 3 +- .github/workflows/dev-hawk.lock.yml | 3 +- .github/workflows/dev.lock.yml | 3 +- .../developer-docs-consolidator.lock.yml | 3 +- .github/workflows/dictation-prompt.lock.yml | 3 +- .github/workflows/docs-noob-tester.lock.yml | 3 +- .../duplicate-code-detector.lock.yml | 3 +- .../example-permissions-warning.lock.yml | 3 +- .../example-workflow-analyzer.lock.yml | 3 +- .github/workflows/firewall-escape.lock.yml | 3 +- .github/workflows/firewall.lock.yml | 3 +- .../github-mcp-structural-analysis.lock.yml | 3 +- .../github-mcp-tools-report.lock.yml | 3 +- .../workflows/glossary-maintainer.lock.yml | 3 +- .github/workflows/go-fan.lock.yml | 3 +- .github/workflows/go-logger.lock.yml | 3 +- .../workflows/go-pattern-detector.lock.yml | 3 +- .github/workflows/grumpy-reviewer.lock.yml | 3 +- .../workflows/instructions-janitor.lock.yml | 3 +- .github/workflows/issue-arborist.lock.yml | 3 +- .github/workflows/issue-monster.lock.yml | 3 +- .github/workflows/issue-triage-agent.lock.yml | 3 +- .github/workflows/lockfile-stats.lock.yml | 3 +- .github/workflows/mcp-inspector.lock.yml | 3 +- .github/workflows/mergefest.lock.yml | 3 +- .../workflows/notion-issue-summary.lock.yml | 3 +- .github/workflows/org-health-report.lock.yml | 3 +- .github/workflows/pdf-summary.lock.yml | 3 +- .github/workflows/plan.lock.yml | 3 +- .github/workflows/poem-bot.lock.yml | 3 +- .../workflows/pr-nitpick-reviewer.lock.yml | 3 +- .../prompt-clustering-analysis.lock.yml | 3 +- .github/workflows/python-data-charts.lock.yml | 3 +- .github/workflows/q.lock.yml | 3 +- .github/workflows/release.lock.yml | 9 +-- .github/workflows/repo-tree-map.lock.yml | 3 +- .../repository-quality-improver.lock.yml | 3 +- .github/workflows/research.lock.yml | 3 +- .github/workflows/safe-output-health.lock.yml | 3 +- .../schema-consistency-checker.lock.yml | 3 +- .github/workflows/scout.lock.yml | 3 +- .github/workflows/security-fix-pr.lock.yml | 3 +- .../semantic-function-refactor.lock.yml | 3 +- .github/workflows/smoke-claude.lock.yml | 3 +- .github/workflows/smoke-codex.lock.yml | 3 +- .../smoke-copilot-no-firewall.lock.yml | 3 +- .../smoke-copilot-playwright.lock.yml | 3 +- .../smoke-copilot-safe-inputs.lock.yml | 3 +- .github/workflows/smoke-copilot.lock.yml | 3 +- .github/workflows/smoke-detector.lock.yml | 3 +- .../smoke-srt-custom-config.lock.yml | 3 +- .github/workflows/smoke-srt.lock.yml | 3 +- .github/workflows/spec-kit-execute.lock.yml | 3 +- .github/workflows/spec-kit-executor.lock.yml | 3 +- .github/workflows/speckit-dispatcher.lock.yml | 3 +- .../workflows/stale-repo-identifier.lock.yml | 3 +- .../workflows/static-analysis-report.lock.yml | 3 +- .github/workflows/super-linter.lock.yml | 3 +- .../workflows/technical-doc-writer.lock.yml | 3 +- .../test-discussion-expires.lock.yml | 3 +- .../workflows/test-python-safe-input.lock.yml | 3 +- .github/workflows/tidy.lock.yml | 3 +- .github/workflows/typist.lock.yml | 3 +- .github/workflows/unbloat-docs.lock.yml | 3 +- .github/workflows/video-analyzer.lock.yml | 3 +- .../workflows/weekly-issue-summary.lock.yml | 3 +- 102 files changed, 272 insertions(+), 104 deletions(-) diff --git a/.github/workflows/ai-triage-campaign.lock.yml b/.github/workflows/ai-triage-campaign.lock.yml index 3146fce327..164bac7848 100644 --- a/.github/workflows/ai-triage-campaign.lock.yml +++ b/.github/workflows/ai-triage-campaign.lock.yml @@ -4013,7 +4013,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml index 59a7bec08a..78ed9f0faf 100644 --- a/.github/workflows/archie.lock.yml +++ b/.github/workflows/archie.lock.yml @@ -5674,7 +5674,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/artifacts-summary.lock.yml b/.github/workflows/artifacts-summary.lock.yml index 52eef05f05..af2bd4aedd 100644 --- a/.github/workflows/artifacts-summary.lock.yml +++ b/.github/workflows/artifacts-summary.lock.yml @@ -4171,7 +4171,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index 8640f815b9..683b8f64ac 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -5720,7 +5720,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/blog-auditor.lock.yml b/.github/workflows/blog-auditor.lock.yml index 136ff7408f..c2ab78b8fb 100644 --- a/.github/workflows/blog-auditor.lock.yml +++ b/.github/workflows/blog-auditor.lock.yml @@ -4782,7 +4782,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/brave.lock.yml b/.github/workflows/brave.lock.yml index a06560ff12..db86c467a9 100644 --- a/.github/workflows/brave.lock.yml +++ b/.github/workflows/brave.lock.yml @@ -5464,7 +5464,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml index eb2640d903..08cc0e29a1 100644 --- a/.github/workflows/breaking-change-checker.lock.yml +++ b/.github/workflows/breaking-change-checker.lock.yml @@ -4255,7 +4255,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index c63f6aa811..27eb9a262b 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -5144,7 +5144,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index a0904d56f0..0a4461a2dd 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -4950,7 +4950,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/cli-consistency-checker.lock.yml b/.github/workflows/cli-consistency-checker.lock.yml index 72e2e654ca..803ca07e90 100644 --- a/.github/workflows/cli-consistency-checker.lock.yml +++ b/.github/workflows/cli-consistency-checker.lock.yml @@ -4252,7 +4252,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index 94253dfbf6..d2f751355c 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -4731,7 +4731,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 9fa3e361b8..0bb15da156 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -6198,7 +6198,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/close-old-discussions.lock.yml b/.github/workflows/close-old-discussions.lock.yml index b2aff84172..b553296553 100644 --- a/.github/workflows/close-old-discussions.lock.yml +++ b/.github/workflows/close-old-discussions.lock.yml @@ -4349,7 +4349,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/commit-changes-analyzer.lock.yml b/.github/workflows/commit-changes-analyzer.lock.yml index ce51a0bd37..0cd5f563e6 100644 --- a/.github/workflows/commit-changes-analyzer.lock.yml +++ b/.github/workflows/commit-changes-analyzer.lock.yml @@ -4663,7 +4663,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/copilot-agent-analysis.lock.yml b/.github/workflows/copilot-agent-analysis.lock.yml index 441f9c2c98..74b627665e 100644 --- a/.github/workflows/copilot-agent-analysis.lock.yml +++ b/.github/workflows/copilot-agent-analysis.lock.yml @@ -5407,7 +5407,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/copilot-pr-merged-report.lock.yml b/.github/workflows/copilot-pr-merged-report.lock.yml index 3f95e0d1bb..de931eb321 100644 --- a/.github/workflows/copilot-pr-merged-report.lock.yml +++ b/.github/workflows/copilot-pr-merged-report.lock.yml @@ -5804,7 +5804,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/copilot-pr-nlp-analysis.lock.yml b/.github/workflows/copilot-pr-nlp-analysis.lock.yml index 26a4a76bd0..54c982d690 100644 --- a/.github/workflows/copilot-pr-nlp-analysis.lock.yml +++ b/.github/workflows/copilot-pr-nlp-analysis.lock.yml @@ -5792,7 +5792,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/copilot-pr-prompt-analysis.lock.yml b/.github/workflows/copilot-pr-prompt-analysis.lock.yml index ddb48a636c..feb46f15fd 100644 --- a/.github/workflows/copilot-pr-prompt-analysis.lock.yml +++ b/.github/workflows/copilot-pr-prompt-analysis.lock.yml @@ -4814,7 +4814,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/copilot-session-insights.lock.yml b/.github/workflows/copilot-session-insights.lock.yml index 5c12dc23af..9a1a4f08af 100644 --- a/.github/workflows/copilot-session-insights.lock.yml +++ b/.github/workflows/copilot-session-insights.lock.yml @@ -6817,7 +6817,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml index 53ae34fb90..e7405ea38a 100644 --- a/.github/workflows/craft.lock.yml +++ b/.github/workflows/craft.lock.yml @@ -5808,7 +5808,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-assign-issue-to-user.lock.yml b/.github/workflows/daily-assign-issue-to-user.lock.yml index 4d3f3c4ffd..37bcbaacc2 100644 --- a/.github/workflows/daily-assign-issue-to-user.lock.yml +++ b/.github/workflows/daily-assign-issue-to-user.lock.yml @@ -4449,7 +4449,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-code-metrics.lock.yml b/.github/workflows/daily-code-metrics.lock.yml index 27696a2acb..429a0f7a98 100644 --- a/.github/workflows/daily-code-metrics.lock.yml +++ b/.github/workflows/daily-code-metrics.lock.yml @@ -5858,7 +5858,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-copilot-token-report.lock.yml b/.github/workflows/daily-copilot-token-report.lock.yml index eebe59ecc8..bb94f18e62 100644 --- a/.github/workflows/daily-copilot-token-report.lock.yml +++ b/.github/workflows/daily-copilot-token-report.lock.yml @@ -5957,7 +5957,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index 48b3e3dd22..6d37c5d537 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -4454,7 +4454,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-fact.lock.yml b/.github/workflows/daily-fact.lock.yml index 26e6962443..d450515c8a 100644 --- a/.github/workflows/daily-fact.lock.yml +++ b/.github/workflows/daily-fact.lock.yml @@ -4544,7 +4544,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml index 95922bcbb7..1ddc50389f 100644 --- a/.github/workflows/daily-file-diet.lock.yml +++ b/.github/workflows/daily-file-diet.lock.yml @@ -4498,7 +4498,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-firewall-report.lock.yml b/.github/workflows/daily-firewall-report.lock.yml index 406e592fc0..bbdef80831 100644 --- a/.github/workflows/daily-firewall-report.lock.yml +++ b/.github/workflows/daily-firewall-report.lock.yml @@ -5239,7 +5239,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index 30741f9eef..6dbd5b0096 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -6081,7 +6081,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-malicious-code-scan.lock.yml b/.github/workflows/daily-malicious-code-scan.lock.yml index 749279e88d..e8f9471121 100644 --- a/.github/workflows/daily-malicious-code-scan.lock.yml +++ b/.github/workflows/daily-malicious-code-scan.lock.yml @@ -4485,7 +4485,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-multi-device-docs-tester.lock.yml b/.github/workflows/daily-multi-device-docs-tester.lock.yml index f933cbe164..aed836e1d8 100644 --- a/.github/workflows/daily-multi-device-docs-tester.lock.yml +++ b/.github/workflows/daily-multi-device-docs-tester.lock.yml @@ -4365,7 +4365,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index 48f6afe949..72ea754ad4 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -5716,7 +5716,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-performance-summary.lock.yml b/.github/workflows/daily-performance-summary.lock.yml index 5c43354f28..b89b4f73cd 100644 --- a/.github/workflows/daily-performance-summary.lock.yml +++ b/.github/workflows/daily-performance-summary.lock.yml @@ -7317,7 +7317,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-repo-chronicle.lock.yml b/.github/workflows/daily-repo-chronicle.lock.yml index d8621ed1a3..08290d85b2 100644 --- a/.github/workflows/daily-repo-chronicle.lock.yml +++ b/.github/workflows/daily-repo-chronicle.lock.yml @@ -5390,7 +5390,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/daily-team-status.lock.yml b/.github/workflows/daily-team-status.lock.yml index 21912f8790..8082e635bb 100644 --- a/.github/workflows/daily-team-status.lock.yml +++ b/.github/workflows/daily-team-status.lock.yml @@ -3954,6 +3954,73 @@ jobs: lines.push(`Model: ${model}`); } lines.push(""); + const initEntry = logEntries.find(entry => entry.type === "system" && entry.subtype === "init"); + if (initEntry && initEntry.tools && Array.isArray(initEntry.tools) && initEntry.tools.length > 0) { + lines.push("Available Tools:"); + lines.push(""); + const categories = { + Builtin: [], + "Safe Outputs": [], + "Safe Inputs": [], + "Git/GitHub": [], + Playwright: [], + Serena: [], + MCP: [], + "Custom Agents": [], + Other: [], + }; + const builtinTools = [ + "bash", + "write_bash", + "read_bash", + "stop_bash", + "list_bash", + "grep", + "glob", + "view", + "create", + "edit", + "store_memory", + "code_review", + "codeql_checker", + "report_progress", + "report_intent", + "gh-advisory-database", + ]; + const internalTools = ["fetch_copilot_cli_documentation"]; + for (const tool of initEntry.tools) { + const toolLower = tool.toLowerCase(); + if (builtinTools.includes(toolLower) || internalTools.includes(toolLower)) { + categories["Builtin"].push(tool); + } else if (tool.startsWith("safeoutputs-") || tool.startsWith("safe_outputs-")) { + const toolName = tool.replace(/^safeoutputs-|^safe_outputs-/, ""); + categories["Safe Outputs"].push(toolName); + } else if (tool.startsWith("safeinputs-") || tool.startsWith("safe_inputs-")) { + const toolName = tool.replace(/^safeinputs-|^safe_inputs-/, ""); + categories["Safe Inputs"].push(toolName); + } else if (tool.startsWith("mcp__github__")) { + categories["Git/GitHub"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__playwright__")) { + categories["Playwright"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__serena__")) { + categories["Serena"].push(formatMcpName(tool)); + } else if (tool.startsWith("mcp__") || ["ListMcpResourcesTool", "ReadMcpResourceTool"].includes(tool)) { + categories["MCP"].push(tool.startsWith("mcp__") ? formatMcpName(tool) : tool); + } else if (isLikelyCustomAgent(tool)) { + categories["Custom Agents"].push(tool); + } else { + categories["Other"].push(tool); + } + } + for (const [category, tools] of Object.entries(categories)) { + if (tools.length > 0) { + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); + lines.push(tools.join(", ")); + } + } + lines.push(""); + } const toolUsePairs = new Map(); for (const entry of logEntries) { if (entry.type === "user" && entry.message?.content) { diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index 091b1ed63f..b56c5f90c1 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -4177,7 +4177,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml index 814725748c..fbaf193522 100644 --- a/.github/workflows/deep-report.lock.yml +++ b/.github/workflows/deep-report.lock.yml @@ -4960,7 +4960,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/dependabot-go-checker.lock.yml b/.github/workflows/dependabot-go-checker.lock.yml index 84768cbeee..62e3ede321 100644 --- a/.github/workflows/dependabot-go-checker.lock.yml +++ b/.github/workflows/dependabot-go-checker.lock.yml @@ -4785,7 +4785,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml index a4a55ec46c..a4dd5efda6 100644 --- a/.github/workflows/dev-hawk.lock.yml +++ b/.github/workflows/dev-hawk.lock.yml @@ -4718,7 +4718,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index c9105beaf2..887ce44125 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -3067,7 +3067,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index 08e8cc6e62..3bb21e0d47 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -5609,7 +5609,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index f91ac89245..ed405dfac1 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -4125,7 +4125,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/docs-noob-tester.lock.yml b/.github/workflows/docs-noob-tester.lock.yml index 5fd9b785ee..a15887cc62 100644 --- a/.github/workflows/docs-noob-tester.lock.yml +++ b/.github/workflows/docs-noob-tester.lock.yml @@ -4263,7 +4263,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/duplicate-code-detector.lock.yml b/.github/workflows/duplicate-code-detector.lock.yml index 2ea671b62f..6d4e290041 100644 --- a/.github/workflows/duplicate-code-detector.lock.yml +++ b/.github/workflows/duplicate-code-detector.lock.yml @@ -4333,7 +4333,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/example-permissions-warning.lock.yml b/.github/workflows/example-permissions-warning.lock.yml index ea0d330021..38b0846a54 100644 --- a/.github/workflows/example-permissions-warning.lock.yml +++ b/.github/workflows/example-permissions-warning.lock.yml @@ -1507,7 +1507,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/example-workflow-analyzer.lock.yml b/.github/workflows/example-workflow-analyzer.lock.yml index 0803dd5414..19b2182ed2 100644 --- a/.github/workflows/example-workflow-analyzer.lock.yml +++ b/.github/workflows/example-workflow-analyzer.lock.yml @@ -4170,7 +4170,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml index f38dac3ae8..ca808212f5 100644 --- a/.github/workflows/firewall-escape.lock.yml +++ b/.github/workflows/firewall-escape.lock.yml @@ -1923,7 +1923,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/firewall.lock.yml b/.github/workflows/firewall.lock.yml index 75b2879125..e56fee3986 100644 --- a/.github/workflows/firewall.lock.yml +++ b/.github/workflows/firewall.lock.yml @@ -1622,7 +1622,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/github-mcp-structural-analysis.lock.yml b/.github/workflows/github-mcp-structural-analysis.lock.yml index b7c06fd04a..cbf0b69c12 100644 --- a/.github/workflows/github-mcp-structural-analysis.lock.yml +++ b/.github/workflows/github-mcp-structural-analysis.lock.yml @@ -5536,7 +5536,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index ae32a18a16..8f3c169d21 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -5312,7 +5312,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index d2520012b0..0d686c74b4 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -5283,7 +5283,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/go-fan.lock.yml b/.github/workflows/go-fan.lock.yml index 5d34ccfebd..01b8485326 100644 --- a/.github/workflows/go-fan.lock.yml +++ b/.github/workflows/go-fan.lock.yml @@ -4853,7 +4853,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index 941ab04799..34e71ab676 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -4618,7 +4618,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/go-pattern-detector.lock.yml b/.github/workflows/go-pattern-detector.lock.yml index 870878ed24..3ce8f1fa5b 100644 --- a/.github/workflows/go-pattern-detector.lock.yml +++ b/.github/workflows/go-pattern-detector.lock.yml @@ -4369,7 +4369,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml index 1f39094cc9..4b548c50e0 100644 --- a/.github/workflows/grumpy-reviewer.lock.yml +++ b/.github/workflows/grumpy-reviewer.lock.yml @@ -5613,7 +5613,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index 05589f4245..b9b6531604 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -4383,7 +4383,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/issue-arborist.lock.yml b/.github/workflows/issue-arborist.lock.yml index 5724907b1b..e618b71f39 100644 --- a/.github/workflows/issue-arborist.lock.yml +++ b/.github/workflows/issue-arborist.lock.yml @@ -4342,7 +4342,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index bea2f9204e..fb62bb1f2a 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -4885,7 +4885,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/issue-triage-agent.lock.yml b/.github/workflows/issue-triage-agent.lock.yml index ccc3512258..388cee4c1e 100644 --- a/.github/workflows/issue-triage-agent.lock.yml +++ b/.github/workflows/issue-triage-agent.lock.yml @@ -4357,7 +4357,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index 0b828aa627..32d314ff0d 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -4895,7 +4895,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index 209672c7a9..a101474877 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -4793,7 +4793,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml index 80aea73d6a..58b49a9f73 100644 --- a/.github/workflows/mergefest.lock.yml +++ b/.github/workflows/mergefest.lock.yml @@ -4958,7 +4958,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/notion-issue-summary.lock.yml b/.github/workflows/notion-issue-summary.lock.yml index 0311779f3d..979fac652e 100644 --- a/.github/workflows/notion-issue-summary.lock.yml +++ b/.github/workflows/notion-issue-summary.lock.yml @@ -3860,7 +3860,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/org-health-report.lock.yml b/.github/workflows/org-health-report.lock.yml index 687768bea7..85aa355574 100644 --- a/.github/workflows/org-health-report.lock.yml +++ b/.github/workflows/org-health-report.lock.yml @@ -5654,7 +5654,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index 6705616103..2dd1ffc94a 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -5638,7 +5638,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml index 19a82cec4a..6d28417587 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -4972,7 +4972,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index b71c95ff1b..9a0b7e436b 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -6690,7 +6690,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml index 07691fc2ec..6c847aeae7 100644 --- a/.github/workflows/pr-nitpick-reviewer.lock.yml +++ b/.github/workflows/pr-nitpick-reviewer.lock.yml @@ -5958,7 +5958,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/prompt-clustering-analysis.lock.yml b/.github/workflows/prompt-clustering-analysis.lock.yml index cfb39e466f..92d1b33963 100644 --- a/.github/workflows/prompt-clustering-analysis.lock.yml +++ b/.github/workflows/prompt-clustering-analysis.lock.yml @@ -6171,7 +6171,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/python-data-charts.lock.yml b/.github/workflows/python-data-charts.lock.yml index 7c4f4884af..35b9813b6d 100644 --- a/.github/workflows/python-data-charts.lock.yml +++ b/.github/workflows/python-data-charts.lock.yml @@ -6022,7 +6022,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index cf060a26bb..eb2da6486d 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -6220,7 +6220,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml index 120603b6aa..066f74ea35 100644 --- a/.github/workflows/release.lock.yml +++ b/.github/workflows/release.lock.yml @@ -4318,7 +4318,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } @@ -6275,19 +6276,19 @@ jobs: - name: Download Go modules run: go mod download - name: Generate SBOM (SPDX format) - uses: anchore/sbom-action@fbfd9c6c189226748411491745178e0c2017392d # v0.20.10 + uses: anchore/sbom-action@fbfd9c6c189226748411491745178e0c2017392d # v0 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.20.10 + uses: anchore/sbom-action@fbfd9c6c189226748411491745178e0c2017392d # v0 with: artifact-name: sbom.cdx.json format: cyclonedx-json output-file: sbom.cdx.json - name: Upload SBOM artifacts - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: sbom-artifacts path: | diff --git a/.github/workflows/repo-tree-map.lock.yml b/.github/workflows/repo-tree-map.lock.yml index c24f950e3a..5d3bc7810e 100644 --- a/.github/workflows/repo-tree-map.lock.yml +++ b/.github/workflows/repo-tree-map.lock.yml @@ -4198,7 +4198,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/repository-quality-improver.lock.yml b/.github/workflows/repository-quality-improver.lock.yml index 32f62bfb26..9f67b2ded5 100644 --- a/.github/workflows/repository-quality-improver.lock.yml +++ b/.github/workflows/repository-quality-improver.lock.yml @@ -5236,7 +5236,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/research.lock.yml b/.github/workflows/research.lock.yml index 2c5ed30346..cb53920d30 100644 --- a/.github/workflows/research.lock.yml +++ b/.github/workflows/research.lock.yml @@ -4113,7 +4113,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/safe-output-health.lock.yml b/.github/workflows/safe-output-health.lock.yml index 1f845ce6fb..0fec443e39 100644 --- a/.github/workflows/safe-output-health.lock.yml +++ b/.github/workflows/safe-output-health.lock.yml @@ -5192,7 +5192,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index dad416ebba..b09b77531b 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -4840,7 +4840,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index 69b0a83722..51bbe76362 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -6246,7 +6246,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/security-fix-pr.lock.yml b/.github/workflows/security-fix-pr.lock.yml index d84c7e306f..4e3ac57701 100644 --- a/.github/workflows/security-fix-pr.lock.yml +++ b/.github/workflows/security-fix-pr.lock.yml @@ -4390,7 +4390,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/semantic-function-refactor.lock.yml b/.github/workflows/semantic-function-refactor.lock.yml index 6bc06a37e8..1aaf18fe0c 100644 --- a/.github/workflows/semantic-function-refactor.lock.yml +++ b/.github/workflows/semantic-function-refactor.lock.yml @@ -5228,7 +5228,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index d79ed2a1fd..2029a90cca 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -6127,7 +6127,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index c6ff3928f2..7c66d8f74d 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -5686,7 +5686,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/smoke-copilot-no-firewall.lock.yml b/.github/workflows/smoke-copilot-no-firewall.lock.yml index e724db7a3b..c427811d6f 100644 --- a/.github/workflows/smoke-copilot-no-firewall.lock.yml +++ b/.github/workflows/smoke-copilot-no-firewall.lock.yml @@ -7220,7 +7220,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/smoke-copilot-playwright.lock.yml b/.github/workflows/smoke-copilot-playwright.lock.yml index 0d6fe531b4..4c1953edb6 100644 --- a/.github/workflows/smoke-copilot-playwright.lock.yml +++ b/.github/workflows/smoke-copilot-playwright.lock.yml @@ -7204,7 +7204,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/smoke-copilot-safe-inputs.lock.yml b/.github/workflows/smoke-copilot-safe-inputs.lock.yml index fe5d6f2643..bf5203b339 100644 --- a/.github/workflows/smoke-copilot-safe-inputs.lock.yml +++ b/.github/workflows/smoke-copilot-safe-inputs.lock.yml @@ -6929,7 +6929,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index 81d106b208..aa316f9487 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -7102,7 +7102,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/smoke-detector.lock.yml b/.github/workflows/smoke-detector.lock.yml index 3ff585b7db..ac3bcee9fa 100644 --- a/.github/workflows/smoke-detector.lock.yml +++ b/.github/workflows/smoke-detector.lock.yml @@ -5870,7 +5870,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/smoke-srt-custom-config.lock.yml b/.github/workflows/smoke-srt-custom-config.lock.yml index bcb3f4dcda..5bb0dade68 100644 --- a/.github/workflows/smoke-srt-custom-config.lock.yml +++ b/.github/workflows/smoke-srt-custom-config.lock.yml @@ -1799,7 +1799,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/smoke-srt.lock.yml b/.github/workflows/smoke-srt.lock.yml index 1b88e8d1fd..07ee89320e 100644 --- a/.github/workflows/smoke-srt.lock.yml +++ b/.github/workflows/smoke-srt.lock.yml @@ -4005,7 +4005,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/spec-kit-execute.lock.yml b/.github/workflows/spec-kit-execute.lock.yml index d8931e59c3..03b678283f 100644 --- a/.github/workflows/spec-kit-execute.lock.yml +++ b/.github/workflows/spec-kit-execute.lock.yml @@ -4727,7 +4727,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/spec-kit-executor.lock.yml b/.github/workflows/spec-kit-executor.lock.yml index a93be78cb6..c3e18afccc 100644 --- a/.github/workflows/spec-kit-executor.lock.yml +++ b/.github/workflows/spec-kit-executor.lock.yml @@ -4417,7 +4417,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/speckit-dispatcher.lock.yml b/.github/workflows/speckit-dispatcher.lock.yml index 0b2c7f2246..e1da3cb6e1 100644 --- a/.github/workflows/speckit-dispatcher.lock.yml +++ b/.github/workflows/speckit-dispatcher.lock.yml @@ -6136,7 +6136,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index 42e8419bb2..74aab2c48b 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -5890,7 +5890,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/static-analysis-report.lock.yml b/.github/workflows/static-analysis-report.lock.yml index b5a306297a..5b4b66d3b3 100644 --- a/.github/workflows/static-analysis-report.lock.yml +++ b/.github/workflows/static-analysis-report.lock.yml @@ -4931,7 +4931,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index 71c6f5ca63..7591e6326f 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -4414,7 +4414,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index b0ba8f0463..c5c4fc41e1 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -5471,7 +5471,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/test-discussion-expires.lock.yml b/.github/workflows/test-discussion-expires.lock.yml index 1ca43b7408..3a70576315 100644 --- a/.github/workflows/test-discussion-expires.lock.yml +++ b/.github/workflows/test-discussion-expires.lock.yml @@ -3792,7 +3792,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/test-python-safe-input.lock.yml b/.github/workflows/test-python-safe-input.lock.yml index d50fdb68c7..fecf7546db 100644 --- a/.github/workflows/test-python-safe-input.lock.yml +++ b/.github/workflows/test-python-safe-input.lock.yml @@ -5414,7 +5414,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index acbf5a7d3d..bbf3a3d908 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -4531,7 +4531,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/typist.lock.yml b/.github/workflows/typist.lock.yml index f12b67fb3f..dbb161163c 100644 --- a/.github/workflows/typist.lock.yml +++ b/.github/workflows/typist.lock.yml @@ -5259,7 +5259,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index c0860b6ac1..408e05227c 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -5992,7 +5992,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/video-analyzer.lock.yml b/.github/workflows/video-analyzer.lock.yml index 633ac65e39..faffe2ac76 100644 --- a/.github/workflows/video-analyzer.lock.yml +++ b/.github/workflows/video-analyzer.lock.yml @@ -4455,7 +4455,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } diff --git a/.github/workflows/weekly-issue-summary.lock.yml b/.github/workflows/weekly-issue-summary.lock.yml index 2b36116490..d091ce9300 100644 --- a/.github/workflows/weekly-issue-summary.lock.yml +++ b/.github/workflows/weekly-issue-summary.lock.yml @@ -5247,7 +5247,8 @@ jobs: } for (const [category, tools] of Object.entries(categories)) { if (tools.length > 0) { - lines.push(`${category}: ${tools.length} tools`); + const toolText = tools.length === 1 ? "tool" : "tools"; + lines.push(`${category}: ${tools.length} ${toolText}`); lines.push(tools.join(", ")); } } From 6dc0b5cf6b166d7224a50cea9a1905519bbcd17d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 8 Dec 2025 04:43:39 +0000 Subject: [PATCH 6/6] Add changeset [skip-ci] --- .changeset/patch-add-mcp-tools-to-action-logs.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changeset/patch-add-mcp-tools-to-action-logs.md diff --git a/.changeset/patch-add-mcp-tools-to-action-logs.md b/.changeset/patch-add-mcp-tools-to-action-logs.md new file mode 100644 index 0000000000..fa83d6b678 --- /dev/null +++ b/.changeset/patch-add-mcp-tools-to-action-logs.md @@ -0,0 +1,8 @@ +--- +"gh-aw": patch +--- + +Add MCP tools list to action logs. `generatePlainTextSummary()` now writes a formatted +list of available MCP tools to action logs (via `core.info()`), improving visibility +when reviewing execution logs. Tests were added and workflows were recompiled. +