diff --git a/.github/workflows/ab-testing-advisor.lock.yml b/.github/workflows/ab-testing-advisor.lock.yml index fcd6d4c271c..8266cd93f25 100644 --- a/.github/workflows/ab-testing-advisor.lock.yml +++ b/.github/workflows/ab-testing-advisor.lock.yml @@ -181,6 +181,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/ace-editor.lock.yml b/.github/workflows/ace-editor.lock.yml index 1497fa921f8..ddf86482401 100644 --- a/.github/workflows/ace-editor.lock.yml +++ b/.github/workflows/ace-editor.lock.yml @@ -180,6 +180,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โœ๏ธ" GH_AW_COMPILED_STRICT: "false" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6.1-sol":{"cost":{"cache_read":"1e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/actions-aw-linter-factory.lock.yml b/.github/workflows/actions-aw-linter-factory.lock.yml index f30c1902bb5..7ccba9cab6d 100644 --- a/.github/workflows/actions-aw-linter-factory.lock.yml +++ b/.github/workflows/actions-aw-linter-factory.lock.yml @@ -174,6 +174,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"mai-code-1.1-flash":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' diff --git a/.github/workflows/agent-job-health.lock.yml b/.github/workflows/agent-job-health.lock.yml index 93e7bc08fb3..9f9c423718f 100644 --- a/.github/workflows/agent-job-health.lock.yml +++ b/.github/workflows/agent-job-health.lock.yml @@ -181,6 +181,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿฉบ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/agent-performance-analyzer.lock.yml b/.github/workflows/agent-performance-analyzer.lock.yml index bd3c54ec14e..f7fcf6458d2 100644 --- a/.github/workflows/agent-performance-analyzer.lock.yml +++ b/.github/workflows/agent-performance-analyzer.lock.yml @@ -215,6 +215,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_FRONTMATTER_EMOJI: "โšก" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml index eecb26c4252..7e872001222 100644 --- a/.github/workflows/agent-persona-explorer.lock.yml +++ b/.github/workflows/agent-persona-explorer.lock.yml @@ -215,6 +215,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸŽญ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/agentic-token-audit.lock.yml b/.github/workflows/agentic-token-audit.lock.yml index 59fd5e1691b..3f42d714b54 100644 --- a/.github/workflows/agentic-token-audit.lock.yml +++ b/.github/workflows/agentic-token-audit.lock.yml @@ -167,6 +167,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_SOURCE: "githubnext/agentic-ops@c611242a76866fb51d4f7d660c80badc504dd473" GH_AW_INFO_BODY_MODIFIED: "false" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/agentic-token-optimizer.lock.yml b/.github/workflows/agentic-token-optimizer.lock.yml index 45853db5b02..0a592287c4e 100644 --- a/.github/workflows/agentic-token-optimizer.lock.yml +++ b/.github/workflows/agentic-token-optimizer.lock.yml @@ -164,6 +164,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_FRONTMATTER_SOURCE: "githubnext/agentic-ops@c611242a76866fb51d4f7d660c80badc504dd473" GH_AW_INFO_BODY_MODIFIED: "false" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/agentic-token-trend-audit.lock.yml b/.github/workflows/agentic-token-trend-audit.lock.yml index 790e5252b9a..436d6d97a2f 100644 --- a/.github/workflows/agentic-token-trend-audit.lock.yml +++ b/.github/workflows/agentic-token-trend-audit.lock.yml @@ -174,6 +174,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6-sol":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/agy-conformance-reusable.lock.yml b/.github/workflows/agy-conformance-reusable.lock.yml index 44835451c26..b2fa9a3cb4a 100644 --- a/.github/workflows/agy-conformance-reusable.lock.yml +++ b/.github/workflows/agy-conformance-reusable.lock.yml @@ -196,6 +196,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "5" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/ai-moderator.lock.yml b/.github/workflows/ai-moderator.lock.yml index 4ba0f548f65..fa6c52800b6 100644 --- a/.github/workflows/ai-moderator.lock.yml +++ b/.github/workflows/ai-moderator.lock.yml @@ -209,6 +209,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿค–" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/api-consumption-report.lock.yml b/.github/workflows/api-consumption-report.lock.yml index e2ac35ef851..10079f1c9ca 100644 --- a/.github/workflows/api-consumption-report.lock.yml +++ b/.github/workflows/api-consumption-report.lock.yml @@ -182,6 +182,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/approach-validator.lock.yml b/.github/workflows/approach-validator.lock.yml index bbf69bdcc2c..a18fb6a64b1 100644 --- a/.github/workflows/approach-validator.lock.yml +++ b/.github/workflows/approach-validator.lock.yml @@ -188,6 +188,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โœ…" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml index 47de7a2246b..6c87bc256f1 100644 --- a/.github/workflows/archie.lock.yml +++ b/.github/workflows/archie.lock.yml @@ -182,6 +182,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ›๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/architecture-guardian.lock.yml b/.github/workflows/architecture-guardian.lock.yml index 051f8fbf4d0..acf04bafb30 100644 --- a/.github/workflows/architecture-guardian.lock.yml +++ b/.github/workflows/architecture-guardian.lock.yml @@ -179,6 +179,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ—๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml b/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml index 7f5cf28f54f..cbc3e4a4471 100644 --- a/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml +++ b/.github/workflows/archivx-agentic-workflows-analyzer.lock.yml @@ -177,6 +177,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "500" GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸŒ…" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/artifacts-summary.lock.yml b/.github/workflows/artifacts-summary.lock.yml index 5809599326b..c2ae25ef7d2 100644 --- a/.github/workflows/artifacts-summary.lock.yml +++ b/.github/workflows/artifacts-summary.lock.yml @@ -179,6 +179,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“ฆ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6-luna":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index 39547c1710b..674cee2b4b2 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -225,6 +225,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "cloud-hypervisor" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/auto-triage-issues.lock.yml b/.github/workflows/auto-triage-issues.lock.yml index 842df5ce27d..021aacfac0c 100644 --- a/.github/workflows/auto-triage-issues.lock.yml +++ b/.github/workflows/auto-triage-issues.lock.yml @@ -186,6 +186,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6-astra":{"cost":{"cache_read":"1e-06","cache_write":"1.25e-05","input":"1e-05","output":"5e-05"}}}}}}' diff --git a/.github/workflows/avenger.lock.yml b/.github/workflows/avenger.lock.yml index 63156610ed1..5f66ccfb113 100644 --- a/.github/workflows/avenger.lock.yml +++ b/.github/workflows/avenger.lock.yml @@ -185,6 +185,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿฆธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6-astra":{"cost":{"cache_read":"1e-06","cache_write":"1.25e-05","input":"1e-05","output":"5e-05"}}}}}}' diff --git a/.github/workflows/aw-failure-investigator.lock.yml b/.github/workflows/aw-failure-investigator.lock.yml index 83552622234..c890f35ba08 100644 --- a/.github/workflows/aw-failure-investigator.lock.yml +++ b/.github/workflows/aw-failure-investigator.lock.yml @@ -227,6 +227,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/aw-issue-clustering.lock.yml b/.github/workflows/aw-issue-clustering.lock.yml index f6ba2c06d76..29cba1b1cec 100644 --- a/.github/workflows/aw-issue-clustering.lock.yml +++ b/.github/workflows/aw-issue-clustering.lock.yml @@ -165,6 +165,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/blog-auditor.lock.yml b/.github/workflows/blog-auditor.lock.yml index 7b86fc96642..91b1b6d195e 100644 --- a/.github/workflows/blog-auditor.lock.yml +++ b/.github/workflows/blog-auditor.lock.yml @@ -218,6 +218,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "false" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/bot-detection.lock.yml b/.github/workflows/bot-detection.lock.yml index 93354b27268..2e6321dcecc 100644 --- a/.github/workflows/bot-detection.lock.yml +++ b/.github/workflows/bot-detection.lock.yml @@ -178,6 +178,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿค–" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.6-sol":{"cost":{"cache_read":"4e-07","cache_write":"5e-06","input":"4e-06","output":"2e-05"}}}}}}' diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml index a6b8a12fd46..04687eccd23 100644 --- a/.github/workflows/breaking-change-checker.lock.yml +++ b/.github/workflows/breaking-change-checker.lock.yml @@ -219,6 +219,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โš ๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index 95d5bf72c45..b80b3197627 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -191,6 +191,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“‹" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.6-sol":{"cost":{"cache_read":"4e-07","cache_write":"5e-06","input":"4e-06","output":"2e-05"}}}}}}' diff --git a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml index f6dd6f3bf97..8d3f30cb105 100644 --- a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml +++ b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml @@ -176,6 +176,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.6-terra":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1.2e-05"}}}}}}' diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml index d7d93699edb..4414e6e1319 100644 --- a/.github/workflows/ci-coach.lock.yml +++ b/.github/workflows/ci-coach.lock.yml @@ -220,6 +220,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "50000" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/claude-code-user-docs-review.lock.yml b/.github/workflows/claude-code-user-docs-review.lock.yml index 0c0fcdfc903..c770bd21162 100644 --- a/.github/workflows/claude-code-user-docs-review.lock.yml +++ b/.github/workflows/claude-code-user-docs-review.lock.yml @@ -176,6 +176,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/cli-consistency-checker.lock.yml b/.github/workflows/cli-consistency-checker.lock.yml index 98498543f76..db90e61467b 100644 --- a/.github/workflows/cli-consistency-checker.lock.yml +++ b/.github/workflows/cli-consistency-checker.lock.yml @@ -169,6 +169,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โœ…" GH_AW_COMPILED_STRICT: "false" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index 56328ded621..624a84cfe91 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -172,6 +172,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ข" GH_AW_COMPILED_STRICT: "false" diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 42d19a0890f..c566e119c8c 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -198,6 +198,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index 20fa90b3110..12c9af2f761 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -185,6 +185,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml index dd82ea33851..448420896c0 100644 --- a/.github/workflows/code-simplifier.lock.yml +++ b/.github/workflows/code-simplifier.lock.yml @@ -185,6 +185,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1000" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_SUB_AGENT_MODELS: "[{\"model\":\"claude-haiku-4.5\",\"name\":\"scope-filter\",\"patterns\":[\"github-copilot/claude-haiku-4.5\"]},{\"model\":\"claude-haiku-4.5\",\"name\":\"simplification-scout\",\"patterns\":[\"github-copilot/claude-haiku-4.5\"]}]" diff --git a/.github/workflows/codex-github-remote-mcp-test.lock.yml b/.github/workflows/codex-github-remote-mcp-test.lock.yml index 32708244425..cdbd8ab25a5 100644 --- a/.github/workflows/codex-github-remote-mcp-test.lock.yml +++ b/.github/workflows/codex-github-remote-mcp-test.lock.yml @@ -169,6 +169,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.6-luna":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' diff --git a/.github/workflows/commit-changes-analyzer.lock.yml b/.github/workflows/commit-changes-analyzer.lock.yml index d9c2a212664..c8e93533067 100644 --- a/.github/workflows/commit-changes-analyzer.lock.yml +++ b/.github/workflows/commit-changes-analyzer.lock.yml @@ -169,6 +169,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.6-luna":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' diff --git a/.github/workflows/constraint-solving-potd.lock.yml b/.github/workflows/constraint-solving-potd.lock.yml index 4439aa8fec3..0abeffa5711 100644 --- a/.github/workflows/constraint-solving-potd.lock.yml +++ b/.github/workflows/constraint-solving-potd.lock.yml @@ -167,6 +167,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงฉ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/contribution-check.lock.yml b/.github/workflows/contribution-check.lock.yml index 893a091a103..30bdeee1dd3 100644 --- a/.github/workflows/contribution-check.lock.yml +++ b/.github/workflows/contribution-check.lock.yml @@ -170,6 +170,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โœ…" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/copilot-agent-analysis.lock.yml b/.github/workflows/copilot-agent-analysis.lock.yml index 37a23848396..7ed1eff0a78 100644 --- a/.github/workflows/copilot-agent-analysis.lock.yml +++ b/.github/workflows/copilot-agent-analysis.lock.yml @@ -216,6 +216,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/copilot-centralization-drilldown.lock.yml b/.github/workflows/copilot-centralization-drilldown.lock.yml index f10ebc222e0..dc70b489971 100644 --- a/.github/workflows/copilot-centralization-drilldown.lock.yml +++ b/.github/workflows/copilot-centralization-drilldown.lock.yml @@ -179,6 +179,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "120" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6.1-sol":{"cost":{"cache_read":"1e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/copilot-centralization-optimizer.lock.yml b/.github/workflows/copilot-centralization-optimizer.lock.yml index a602185e250..af544e86e56 100644 --- a/.github/workflows/copilot-centralization-optimizer.lock.yml +++ b/.github/workflows/copilot-centralization-optimizer.lock.yml @@ -163,6 +163,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "cloud-hypervisor" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "250" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6.1-sol":{"cost":{"cache_read":"1e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/copilot-cli-deep-research.lock.yml b/.github/workflows/copilot-cli-deep-research.lock.yml index 15fe8fde797..5167c70a41e 100644 --- a/.github/workflows/copilot-cli-deep-research.lock.yml +++ b/.github/workflows/copilot-cli-deep-research.lock.yml @@ -166,6 +166,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ฌ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/copilot-opt.lock.yml b/.github/workflows/copilot-opt.lock.yml index e5c741e6490..3fccc41d094 100644 --- a/.github/workflows/copilot-opt.lock.yml +++ b/.github/workflows/copilot-opt.lock.yml @@ -173,6 +173,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "โšก" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/copilot-pr-merged-report.lock.yml b/.github/workflows/copilot-pr-merged-report.lock.yml index c629113da61..fcfcb7bb5d5 100644 --- a/.github/workflows/copilot-pr-merged-report.lock.yml +++ b/.github/workflows/copilot-pr-merged-report.lock.yml @@ -171,6 +171,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "false" diff --git a/.github/workflows/copilot-pr-nlp-analysis.lock.yml b/.github/workflows/copilot-pr-nlp-analysis.lock.yml index 4539ecffdb7..725e965716d 100644 --- a/.github/workflows/copilot-pr-nlp-analysis.lock.yml +++ b/.github/workflows/copilot-pr-nlp-analysis.lock.yml @@ -217,6 +217,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ฌ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/copilot-pr-prompt-analysis.lock.yml b/.github/workflows/copilot-pr-prompt-analysis.lock.yml index d78fcd7386d..64060a1b633 100644 --- a/.github/workflows/copilot-pr-prompt-analysis.lock.yml +++ b/.github/workflows/copilot-pr-prompt-analysis.lock.yml @@ -172,6 +172,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/copilot-session-insights.lock.yml b/.github/workflows/copilot-session-insights.lock.yml index a42c253f10f..86770fc5e44 100644 --- a/.github/workflows/copilot-session-insights.lock.yml +++ b/.github/workflows/copilot-session-insights.lock.yml @@ -182,6 +182,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml index dbe31e7514a..2374eab7a1f 100644 --- a/.github/workflows/craft.lock.yml +++ b/.github/workflows/craft.lock.yml @@ -176,6 +176,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โœ๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-action-setup-security-audit.lock.yml b/.github/workflows/daily-action-setup-security-audit.lock.yml index 3f069607cb0..83a81e3abd1 100644 --- a/.github/workflows/daily-action-setup-security-audit.lock.yml +++ b/.github/workflows/daily-action-setup-security-audit.lock.yml @@ -168,6 +168,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ›ก๏ธ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml b/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml index a6e1b555292..a679d3ef7d2 100644 --- a/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml +++ b/.github/workflows/daily-agent-of-the-day-blog-writer.lock.yml @@ -181,6 +181,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โœ๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml index 7fd4518f928..38dca2c0479 100644 --- a/.github/workflows/daily-agentrx-trace-optimizer.lock.yml +++ b/.github/workflows/daily-agentrx-trace-optimizer.lock.yml @@ -219,6 +219,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "โšก" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-ambient-context-optimizer.lock.yml b/.github/workflows/daily-ambient-context-optimizer.lock.yml index 8db2391aae0..2e81319a1f3 100644 --- a/.github/workflows/daily-ambient-context-optimizer.lock.yml +++ b/.github/workflows/daily-ambient-context-optimizer.lock.yml @@ -169,6 +169,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸŒซ๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml index c2cbfb88c4d..ca70d5a7cb3 100644 --- a/.github/workflows/daily-architecture-diagram.lock.yml +++ b/.github/workflows/daily-architecture-diagram.lock.yml @@ -217,6 +217,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ—๏ธ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-arxiv-researcher.lock.yml b/.github/workflows/daily-arxiv-researcher.lock.yml index 8fe41f7ec08..51318a2f1e0 100644 --- a/.github/workflows/daily-arxiv-researcher.lock.yml +++ b/.github/workflows/daily-arxiv-researcher.lock.yml @@ -168,6 +168,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "300" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ฌ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-assign-issue-to-user.lock.yml b/.github/workflows/daily-assign-issue-to-user.lock.yml index 6d2826ed604..a0b8fa9e256 100644 --- a/.github/workflows/daily-assign-issue-to-user.lock.yml +++ b/.github/workflows/daily-assign-issue-to-user.lock.yml @@ -164,6 +164,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml b/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml index ef4ee18a14e..39fb06e640c 100644 --- a/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml +++ b/.github/workflows/daily-astrostylelite-markdown-spellcheck.lock.yml @@ -212,6 +212,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml index 2a82e8aaf81..3cf448f2101 100644 --- a/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml +++ b/.github/workflows/daily-aw-cross-repo-compile-check.lock.yml @@ -170,6 +170,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml b/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml index 1d39b90482a..ab8544918c0 100644 --- a/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml +++ b/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml @@ -166,6 +166,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "cloud-hypervisor" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6-sol":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/daily-byok-ollama-test.lock.yml b/.github/workflows/daily-byok-ollama-test.lock.yml index b6b67d4edc0..439da03dec6 100644 --- a/.github/workflows/daily-byok-ollama-test.lock.yml +++ b/.github/workflows/daily-byok-ollama-test.lock.yml @@ -163,6 +163,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿฆ™" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-cache-strategy-analyzer.lock.yml b/.github/workflows/daily-cache-strategy-analyzer.lock.yml index ee3955e486d..021321c1f22 100644 --- a/.github/workflows/daily-cache-strategy-analyzer.lock.yml +++ b/.github/workflows/daily-cache-strategy-analyzer.lock.yml @@ -217,6 +217,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-caveman-optimizer.lock.yml b/.github/workflows/daily-caveman-optimizer.lock.yml index 6683abed032..2cb5e4d6667 100644 --- a/.github/workflows/daily-caveman-optimizer.lock.yml +++ b/.github/workflows/daily-caveman-optimizer.lock.yml @@ -214,6 +214,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "cloud-hypervisor" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "โšก" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-choice-test.lock.yml b/.github/workflows/daily-choice-test.lock.yml index 309188016e7..171cdc3a1c8 100644 --- a/.github/workflows/daily-choice-test.lock.yml +++ b/.github/workflows/daily-choice-test.lock.yml @@ -167,6 +167,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-cli-performance.lock.yml b/.github/workflows/daily-cli-performance.lock.yml index aac770782aa..f951e50cb10 100644 --- a/.github/workflows/daily-cli-performance.lock.yml +++ b/.github/workflows/daily-cli-performance.lock.yml @@ -199,6 +199,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โšก" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6-luna":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' diff --git a/.github/workflows/daily-cli-tools-tester.lock.yml b/.github/workflows/daily-cli-tools-tester.lock.yml index 7186fa901fd..4ed0d81df77 100644 --- a/.github/workflows/daily-cli-tools-tester.lock.yml +++ b/.github/workflows/daily-cli-tools-tester.lock.yml @@ -174,6 +174,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6-astra":{"cost":{"cache_read":"1e-06","cache_write":"1.25e-05","input":"1e-05","output":"5e-05"}}}}}}' diff --git a/.github/workflows/daily-code-debt-aider.lock.yml b/.github/workflows/daily-code-debt-aider.lock.yml index b1dd554d0cc..704180fa3f5 100644 --- a/.github/workflows/daily-code-debt-aider.lock.yml +++ b/.github/workflows/daily-code-debt-aider.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"8486dfe033b75a260e9594440b47aaefa25698ef41f2c870c1d4c187dd6457fd","body_hash":"439b331b412e233f6673efc6f1d9a1db44567c06687c50a25026e3b932baf023","strict":true,"agent_id":"aider","agent_model":"copilot/auto","engine_versions":{"aider":"0.86.2"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"252f2df0734bcda6586766c5c36ca5930e086b9dbe038a9835432784a578a9e3","body_hash":"439b331b412e233f6673efc6f1d9a1db44567c06687c50a25026e3b932baf023","strict":true,"agent_id":"aider","agent_model":"copilot/auto","engine_versions":{"aider":"0.86.2"}} # gh-aw-manifest: {"version":1,"secrets":["GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/setup-python","sha":"5fda3b95a4ea91299a34e894583c3862153e4b97","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.28.70","digest":"sha256:b15ab48cbbab02904eb9bbd359a398db59690eebbea1e6934d47ed2bb407dd34","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.28.70@sha256:b15ab48cbbab02904eb9bbd359a398db59690eebbea1e6934d47ed2bb407dd34"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.28.70","digest":"sha256:9ac8f9c7294e892c916de3da9d2588dfd8cd4931e5c39b00143266d7ed9fd52a","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.28.70@sha256:9ac8f9c7294e892c916de3da9d2588dfd8cd4931e5c39b00143266d7ed9fd52a"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.28.70","digest":"sha256:372ac51a5cccffdfe484f3f7be427d2d1c566e8ae550d55bd45d9fd166a154b4","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.28.70@sha256:372ac51a5cccffdfe484f3f7be427d2d1c566e8ae550d55bd45d9fd166a154b4"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.28.70","digest":"sha256:b5bc53f4becfd96e926e63c83831f1b3c9512f713c83161d2b8c9b7204b3e917","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.28.70@sha256:b5bc53f4becfd96e926e63c83831f1b3c9512f713c83161d2b8c9b7204b3e917"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.36","digest":"sha256:b4d2856018959c798b3e3f81ae4ab5b275e06354e123e1f7971de931f2f450f2","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.36@sha256:b4d2856018959c798b3e3f81ae4ab5b275e06354e123e1f7971de931f2f450f2"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:41835613992df88f51e923bad486f96dfb2e6cda29f13e217df41833284ae382","pinned_image":"ghcr.io/github/gh-aw-node@sha256:41835613992df88f51e923bad486f96dfb2e6cda29f13e217df41833284ae382"},{"image":"ghcr.io/github/github-mcp-server:v2.0.2","digest":"sha256:ffced0d76e77428532a2ced185516992d77fd146d69eec2f244e6237d1a97796","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.2@sha256:ffced0d76e77428532a2ced185516992d77fd146d69eec2f244e6237d1a97796"}],"mcp_servers":[{"name":"safeoutputs","tools":["create_pull_request","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # @@ -171,6 +171,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงน" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' @@ -482,7 +484,7 @@ jobs: GH_AW_DEFAULT_ADMISSION_URL: ${{ vars.GH_AW_DEFAULT_ADMISSION_URL }} GH_AW_DEFAULT_ADMISSION_AUDIENCE: ${{ vars.GH_AW_DEFAULT_ADMISSION_AUDIENCE }} GH_AW_DEFAULT_ADMISSION_ON_OUTAGE: ${{ vars.GH_AW_DEFAULT_ADMISSION_ON_OUTAGE }} - GH_AW_ADMISSION_WORKFLOW_HASH: "8486dfe033b75a260e9594440b47aaefa25698ef41f2c870c1d4c187dd6457fd:439b331b412e233f6673efc6f1d9a1db44567c06687c50a25026e3b932baf023" + GH_AW_ADMISSION_WORKFLOW_HASH: "252f2df0734bcda6586766c5c36ca5930e086b9dbe038a9835432784a578a9e3:439b331b412e233f6673efc6f1d9a1db44567c06687c50a25026e3b932baf023" GH_AW_INFO_WORKFLOW_ID: ${{ job.workflow_ref }} GITHUB_ACTOR: ${{ github.actor }} GITHUB_TRIGGERING_ACTOR: ${{ github.triggering_actor }} @@ -1123,8 +1125,8 @@ jobs: "mcp.rpc.request", "mcp.rpc.response", "mcp.difc.filtered", "mcp.guard.blocked", "mcp.tool_call", "mcp.event", "mcp.configuration", "firewall.http_access", "firewall.token_usage", "firewall.model_routing", - "firewall.steering", "firewall.event", "model_routing.outcome", - "model_endpoint.mismatch", "model.resolution", + "firewall.upstream_error", "firewall.steering", "firewall.event", "model_routing.outcome", + "model_endpoint.mismatch", "model.resolution", "model.config", "model.baseline_estimate", "safe_output.request", "safe_output.result", "safe_output.error", "experiment.state", "experiment.assignment", "grader.manifest", "grader.result", "eval.result", "github_api.rate_limit", "usage.report", "execution.result", @@ -2165,7 +2167,7 @@ jobs: GH_AW_DEFAULT_ADMISSION_URL: ${{ vars.GH_AW_DEFAULT_ADMISSION_URL }} GH_AW_DEFAULT_ADMISSION_AUDIENCE: ${{ vars.GH_AW_DEFAULT_ADMISSION_AUDIENCE }} GH_AW_DEFAULT_ADMISSION_ON_OUTAGE: ${{ vars.GH_AW_DEFAULT_ADMISSION_ON_OUTAGE }} - GH_AW_ADMISSION_WORKFLOW_HASH: "8486dfe033b75a260e9594440b47aaefa25698ef41f2c870c1d4c187dd6457fd:439b331b412e233f6673efc6f1d9a1db44567c06687c50a25026e3b932baf023" + GH_AW_ADMISSION_WORKFLOW_HASH: "252f2df0734bcda6586766c5c36ca5930e086b9dbe038a9835432784a578a9e3:439b331b412e233f6673efc6f1d9a1db44567c06687c50a25026e3b932baf023" GH_AW_INFO_WORKFLOW_ID: ${{ job.workflow_ref }} GITHUB_ACTOR: ${{ github.actor }} GITHUB_TRIGGERING_ACTOR: ${{ github.triggering_actor }} diff --git a/.github/workflows/daily-code-metrics.lock.yml b/.github/workflows/daily-code-metrics.lock.yml index 333fe79ea7d..4829985bf27 100644 --- a/.github/workflows/daily-code-metrics.lock.yml +++ b/.github/workflows/daily-code-metrics.lock.yml @@ -214,6 +214,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-community-attribution.lock.yml b/.github/workflows/daily-community-attribution.lock.yml index adf6a3fc7bb..2fd0be090e2 100644 --- a/.github/workflows/daily-community-attribution.lock.yml +++ b/.github/workflows/daily-community-attribution.lock.yml @@ -213,6 +213,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ†" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-haiku-4.5":{"cost":{"cache_read":"1.0000000000000001e-07","cache_write":"1.25e-06","input":"1e-06","output":"5e-06"}}}}}}' diff --git a/.github/workflows/daily-compiler-quality.lock.yml b/.github/workflows/daily-compiler-quality.lock.yml index e133f255513..330f869f274 100644 --- a/.github/workflows/daily-compiler-quality.lock.yml +++ b/.github/workflows/daily-compiler-quality.lock.yml @@ -221,6 +221,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1000" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml b/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml index 9551429f528..cc297391ab2 100644 --- a/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml +++ b/.github/workflows/daily-compiler-threat-spec-optimizer.lock.yml @@ -173,6 +173,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-credit-limit-test.lock.yml b/.github/workflows/daily-credit-limit-test.lock.yml index ad8e9ec2499..06fe2d3405a 100644 --- a/.github/workflows/daily-credit-limit-test.lock.yml +++ b/.github/workflows/daily-credit-limit-test.lock.yml @@ -162,6 +162,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true,"intentional-failure":true}' diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index d7cc9a24ee0..658b9656887 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -218,6 +218,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index 6a6037ae985..c0b2a28a156 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -215,6 +215,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-documentation-diagram.lock.yml b/.github/workflows/daily-documentation-diagram.lock.yml index 2df04b6c50d..8cb401f094c 100644 --- a/.github/workflows/daily-documentation-diagram.lock.yml +++ b/.github/workflows/daily-documentation-diagram.lock.yml @@ -169,6 +169,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.6-sol":{"cost":{"cache_read":"4e-07","cache_write":"5e-06","input":"4e-06","output":"2e-05"}}}}}}' diff --git a/.github/workflows/daily-ecosystem-explorer.lock.yml b/.github/workflows/daily-ecosystem-explorer.lock.yml index a8bbd8866c8..4284f4728a0 100644 --- a/.github/workflows/daily-ecosystem-explorer.lock.yml +++ b/.github/workflows/daily-ecosystem-explorer.lock.yml @@ -173,6 +173,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml b/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml index 7419da675ad..c7f05346353 100644 --- a/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml +++ b/.github/workflows/daily-elixir-credo-snippet-audit.lock.yml @@ -172,6 +172,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-evals-report.lock.yml b/.github/workflows/daily-evals-report.lock.yml index e0fd0f7c149..ffb56706fe6 100644 --- a/.github/workflows/daily-evals-report.lock.yml +++ b/.github/workflows/daily-evals-report.lock.yml @@ -179,6 +179,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.6-sol":{"cost":{"cache_read":"4e-07","cache_write":"5e-06","input":"4e-06","output":"2e-05"}}}}}}' diff --git a/.github/workflows/daily-experiment-report.lock.yml b/.github/workflows/daily-experiment-report.lock.yml index f11fe5aef13..f6446527146 100644 --- a/.github/workflows/daily-experiment-report.lock.yml +++ b/.github/workflows/daily-experiment-report.lock.yml @@ -174,6 +174,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-fact.lock.yml b/.github/workflows/daily-fact.lock.yml index 13e33605c9f..c94b10aaa5b 100644 --- a/.github/workflows/daily-fact.lock.yml +++ b/.github/workflows/daily-fact.lock.yml @@ -212,6 +212,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "cloud-hypervisor" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“š" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.6-terra":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1.2e-05"}}}}}}' diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml index 2372cb4bdca..ab693100c35 100644 --- a/.github/workflows/daily-file-diet.lock.yml +++ b/.github/workflows/daily-file-diet.lock.yml @@ -179,6 +179,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงน" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-firewall-report.lock.yml b/.github/workflows/daily-firewall-report.lock.yml index 6ff26dbecbc..5847df91f11 100644 --- a/.github/workflows/daily-firewall-report.lock.yml +++ b/.github/workflows/daily-firewall-report.lock.yml @@ -179,6 +179,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-formal-spec-verifier.lock.yml b/.github/workflows/daily-formal-spec-verifier.lock.yml index 9533e061e73..442dc6548fb 100644 --- a/.github/workflows/daily-formal-spec-verifier.lock.yml +++ b/.github/workflows/daily-formal-spec-verifier.lock.yml @@ -171,6 +171,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ฌ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-function-namer.lock.yml b/.github/workflows/daily-function-namer.lock.yml index 43c1cc9fbee..e6090086b64 100644 --- a/.github/workflows/daily-function-namer.lock.yml +++ b/.github/workflows/daily-function-namer.lock.yml @@ -174,6 +174,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-geo-optimizer.lock.yml b/.github/workflows/daily-geo-optimizer.lock.yml index 309d616a294..33ac3094ee4 100644 --- a/.github/workflows/daily-geo-optimizer.lock.yml +++ b/.github/workflows/daily-geo-optimizer.lock.yml @@ -170,6 +170,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸŒ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-github-docs-seo-optimizer.lock.yml b/.github/workflows/daily-github-docs-seo-optimizer.lock.yml index b54f099584b..129decfb9e7 100644 --- a/.github/workflows/daily-github-docs-seo-optimizer.lock.yml +++ b/.github/workflows/daily-github-docs-seo-optimizer.lock.yml @@ -157,6 +157,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”Ž" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/daily-go-test-parallelizer.lock.yml b/.github/workflows/daily-go-test-parallelizer.lock.yml index e4a45ac0feb..be82e6e5963 100644 --- a/.github/workflows/daily-go-test-parallelizer.lock.yml +++ b/.github/workflows/daily-go-test-parallelizer.lock.yml @@ -175,6 +175,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.6-terra":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1.2e-05"}}}}}}' diff --git a/.github/workflows/daily-go-test-stubs-aider.lock.yml b/.github/workflows/daily-go-test-stubs-aider.lock.yml index 3e7e2fda78e..8037ddf58c0 100644 --- a/.github/workflows/daily-go-test-stubs-aider.lock.yml +++ b/.github/workflows/daily-go-test-stubs-aider.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"c52872abc8caf86fe13d80c899bc269b00ebd14756ff41bb9e18fffe1ffd9ebb","body_hash":"fdcf62bc0acf257ee12c72c94138c2180a601b6759448c8296ab77274491601f","strict":true,"agent_id":"aider","agent_model":"copilot/auto","engine_versions":{"aider":"0.86.2"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"07b21d2c497d67d904ce751ec030e0e014b431432955a5205d0916bd8fcd21e9","body_hash":"fdcf62bc0acf257ee12c72c94138c2180a601b6759448c8296ab77274491601f","strict":true,"agent_id":"aider","agent_model":"copilot/auto","engine_versions":{"aider":"0.86.2"}} # gh-aw-manifest: {"version":1,"secrets":["GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/setup-python","sha":"5fda3b95a4ea91299a34e894583c3862153e4b97","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.28.70","digest":"sha256:b15ab48cbbab02904eb9bbd359a398db59690eebbea1e6934d47ed2bb407dd34","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.28.70@sha256:b15ab48cbbab02904eb9bbd359a398db59690eebbea1e6934d47ed2bb407dd34"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.28.70","digest":"sha256:9ac8f9c7294e892c916de3da9d2588dfd8cd4931e5c39b00143266d7ed9fd52a","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.28.70@sha256:9ac8f9c7294e892c916de3da9d2588dfd8cd4931e5c39b00143266d7ed9fd52a"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.28.70","digest":"sha256:372ac51a5cccffdfe484f3f7be427d2d1c566e8ae550d55bd45d9fd166a154b4","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.28.70@sha256:372ac51a5cccffdfe484f3f7be427d2d1c566e8ae550d55bd45d9fd166a154b4"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.28.70","digest":"sha256:b5bc53f4becfd96e926e63c83831f1b3c9512f713c83161d2b8c9b7204b3e917","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.28.70@sha256:b5bc53f4becfd96e926e63c83831f1b3c9512f713c83161d2b8c9b7204b3e917"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.36","digest":"sha256:b4d2856018959c798b3e3f81ae4ab5b275e06354e123e1f7971de931f2f450f2","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.36@sha256:b4d2856018959c798b3e3f81ae4ab5b275e06354e123e1f7971de931f2f450f2"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:41835613992df88f51e923bad486f96dfb2e6cda29f13e217df41833284ae382","pinned_image":"ghcr.io/github/gh-aw-node@sha256:41835613992df88f51e923bad486f96dfb2e6cda29f13e217df41833284ae382"},{"image":"ghcr.io/github/github-mcp-server:v2.0.2","digest":"sha256:ffced0d76e77428532a2ced185516992d77fd146d69eec2f244e6237d1a97796","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.2@sha256:ffced0d76e77428532a2ced185516992d77fd146d69eec2f244e6237d1a97796"}],"mcp_servers":[{"name":"safeoutputs","tools":["create_pull_request","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # @@ -171,6 +171,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' @@ -482,7 +484,7 @@ jobs: GH_AW_DEFAULT_ADMISSION_URL: ${{ vars.GH_AW_DEFAULT_ADMISSION_URL }} GH_AW_DEFAULT_ADMISSION_AUDIENCE: ${{ vars.GH_AW_DEFAULT_ADMISSION_AUDIENCE }} GH_AW_DEFAULT_ADMISSION_ON_OUTAGE: ${{ vars.GH_AW_DEFAULT_ADMISSION_ON_OUTAGE }} - GH_AW_ADMISSION_WORKFLOW_HASH: "c52872abc8caf86fe13d80c899bc269b00ebd14756ff41bb9e18fffe1ffd9ebb:fdcf62bc0acf257ee12c72c94138c2180a601b6759448c8296ab77274491601f" + GH_AW_ADMISSION_WORKFLOW_HASH: "07b21d2c497d67d904ce751ec030e0e014b431432955a5205d0916bd8fcd21e9:fdcf62bc0acf257ee12c72c94138c2180a601b6759448c8296ab77274491601f" GH_AW_INFO_WORKFLOW_ID: ${{ job.workflow_ref }} GITHUB_ACTOR: ${{ github.actor }} GITHUB_TRIGGERING_ACTOR: ${{ github.triggering_actor }} @@ -1123,8 +1125,8 @@ jobs: "mcp.rpc.request", "mcp.rpc.response", "mcp.difc.filtered", "mcp.guard.blocked", "mcp.tool_call", "mcp.event", "mcp.configuration", "firewall.http_access", "firewall.token_usage", "firewall.model_routing", - "firewall.steering", "firewall.event", "model_routing.outcome", - "model_endpoint.mismatch", "model.resolution", + "firewall.upstream_error", "firewall.steering", "firewall.event", "model_routing.outcome", + "model_endpoint.mismatch", "model.resolution", "model.config", "model.baseline_estimate", "safe_output.request", "safe_output.result", "safe_output.error", "experiment.state", "experiment.assignment", "grader.manifest", "grader.result", "eval.result", "github_api.rate_limit", "usage.report", "execution.result", @@ -2165,7 +2167,7 @@ jobs: GH_AW_DEFAULT_ADMISSION_URL: ${{ vars.GH_AW_DEFAULT_ADMISSION_URL }} GH_AW_DEFAULT_ADMISSION_AUDIENCE: ${{ vars.GH_AW_DEFAULT_ADMISSION_AUDIENCE }} GH_AW_DEFAULT_ADMISSION_ON_OUTAGE: ${{ vars.GH_AW_DEFAULT_ADMISSION_ON_OUTAGE }} - GH_AW_ADMISSION_WORKFLOW_HASH: "c52872abc8caf86fe13d80c899bc269b00ebd14756ff41bb9e18fffe1ffd9ebb:fdcf62bc0acf257ee12c72c94138c2180a601b6759448c8296ab77274491601f" + GH_AW_ADMISSION_WORKFLOW_HASH: "07b21d2c497d67d904ce751ec030e0e014b431432955a5205d0916bd8fcd21e9:fdcf62bc0acf257ee12c72c94138c2180a601b6759448c8296ab77274491601f" GH_AW_INFO_WORKFLOW_ID: ${{ job.workflow_ref }} GITHUB_ACTOR: ${{ github.actor }} GITHUB_TRIGGERING_ACTOR: ${{ github.triggering_actor }} diff --git a/.github/workflows/daily-grader-audit.lock.yml b/.github/workflows/daily-grader-audit.lock.yml index b753bbe0f47..03673206682 100644 --- a/.github/workflows/daily-grader-audit.lock.yml +++ b/.github/workflows/daily-grader-audit.lock.yml @@ -168,6 +168,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-graft-intelligence.lock.yml b/.github/workflows/daily-graft-intelligence.lock.yml index 848b49aed1c..7fe9e54f5b5 100644 --- a/.github/workflows/daily-graft-intelligence.lock.yml +++ b/.github/workflows/daily-graft-intelligence.lock.yml @@ -169,6 +169,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿง " GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-harness-experiment-proposer.lock.yml b/.github/workflows/daily-harness-experiment-proposer.lock.yml index 843d392daf1..25d4a57739e 100644 --- a/.github/workflows/daily-harness-experiment-proposer.lock.yml +++ b/.github/workflows/daily-harness-experiment-proposer.lock.yml @@ -174,6 +174,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "2000" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงซ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-hippo-learn.lock.yml b/.github/workflows/daily-hippo-learn.lock.yml index 31906aee41f..b8ffd132c93 100644 --- a/.github/workflows/daily-hippo-learn.lock.yml +++ b/.github/workflows/daily-hippo-learn.lock.yml @@ -169,6 +169,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿฆ›" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index 8c6ad141024..bfc16f1f7cf 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -227,6 +227,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“…" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-malicious-code-scan.lock.yml b/.github/workflows/daily-malicious-code-scan.lock.yml index 1b9d94f5e99..406d4557363 100644 --- a/.github/workflows/daily-malicious-code-scan.lock.yml +++ b/.github/workflows/daily-malicious-code-scan.lock.yml @@ -169,6 +169,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-max-ai-credits-test.lock.yml b/.github/workflows/daily-max-ai-credits-test.lock.yml index b48369cf645..bbd4804c9ca 100644 --- a/.github/workflows/daily-max-ai-credits-test.lock.yml +++ b/.github/workflows/daily-max-ai-credits-test.lock.yml @@ -157,6 +157,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.6-luna":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' diff --git a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml index 250fa8ffb43..3b37ed25fce 100644 --- a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml +++ b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml @@ -173,6 +173,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "cloud-hypervisor" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-model-inventory.lock.yml b/.github/workflows/daily-model-inventory.lock.yml index 1307db6d293..7e10388a9fe 100644 --- a/.github/workflows/daily-model-inventory.lock.yml +++ b/.github/workflows/daily-model-inventory.lock.yml @@ -168,6 +168,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“ฆ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5-enterprise":{"cost":{"cache_read":"9.375e-07","cache_write":"3.75e-06","input":"3.75e-06","output":"1.5e-05"}}}}}}' diff --git a/.github/workflows/daily-model-resolution.lock.yml b/.github/workflows/daily-model-resolution.lock.yml index 996de10e9b9..562a135c629 100644 --- a/.github/workflows/daily-model-resolution.lock.yml +++ b/.github/workflows/daily-model-resolution.lock.yml @@ -172,6 +172,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ฌ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-multi-device-docs-tester.lock.yml b/.github/workflows/daily-multi-device-docs-tester.lock.yml index f189eac3f45..8220f7c25f9 100644 --- a/.github/workflows/daily-multi-device-docs-tester.lock.yml +++ b/.github/workflows/daily-multi-device-docs-tester.lock.yml @@ -172,6 +172,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index 8d8e7a94c63..d3a7e978215 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -219,6 +219,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“ฐ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-observability-report.lock.yml b/.github/workflows/daily-observability-report.lock.yml index 87c01d3b8e0..16b5a8200d0 100644 --- a/.github/workflows/daily-observability-report.lock.yml +++ b/.github/workflows/daily-observability-report.lock.yml @@ -182,6 +182,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.3-codex":{"cost":{"cache_read":"1.75e-07","input":"1.75e-06","output":"1.4e-05"}}}}}}' diff --git a/.github/workflows/daily-performance-summary.lock.yml b/.github/workflows/daily-performance-summary.lock.yml index aedd40ca1d3..af3c19abbb3 100644 --- a/.github/workflows/daily-performance-summary.lock.yml +++ b/.github/workflows/daily-performance-summary.lock.yml @@ -175,6 +175,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "โšก" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-pr-review-cursor.lock.yml b/.github/workflows/daily-pr-review-cursor.lock.yml index 0dd2c1d004e..a911be4f45a 100644 --- a/.github/workflows/daily-pr-review-cursor.lock.yml +++ b/.github/workflows/daily-pr-review-cursor.lock.yml @@ -167,6 +167,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ–ฑ๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-regression-audit-kiro.lock.yml b/.github/workflows/daily-regression-audit-kiro.lock.yml index 5c6c29768fd..42c11fe8f75 100644 --- a/.github/workflows/daily-regression-audit-kiro.lock.yml +++ b/.github/workflows/daily-regression-audit-kiro.lock.yml @@ -167,6 +167,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-regulatory.lock.yml b/.github/workflows/daily-regulatory.lock.yml index 5c4ae725f3c..1c56dfce97a 100644 --- a/.github/workflows/daily-regulatory.lock.yml +++ b/.github/workflows/daily-regulatory.lock.yml @@ -176,6 +176,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1000" GH_AW_INFO_FRONTMATTER_EMOJI: "โš–๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.6-luna":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' diff --git a/.github/workflows/daily-reliability-review.lock.yml b/.github/workflows/daily-reliability-review.lock.yml index 421d5528307..2abb9b54a04 100644 --- a/.github/workflows/daily-reliability-review.lock.yml +++ b/.github/workflows/daily-reliability-review.lock.yml @@ -171,6 +171,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿšจ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index f4259692aab..68795e92666 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -230,6 +230,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "โœ…" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-repo-chronicle.lock.yml b/.github/workflows/daily-repo-chronicle.lock.yml index 58606505bcf..ac3448c9919 100644 --- a/.github/workflows/daily-repo-chronicle.lock.yml +++ b/.github/workflows/daily-repo-chronicle.lock.yml @@ -180,6 +180,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“…" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-report-dispatcher.lock.yml b/.github/workflows/daily-report-dispatcher.lock.yml index 3dc5293ddbd..fa668106847 100644 --- a/.github/workflows/daily-report-dispatcher.lock.yml +++ b/.github/workflows/daily-report-dispatcher.lock.yml @@ -166,6 +166,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/daily-safe-output-integrator.lock.yml b/.github/workflows/daily-safe-output-integrator.lock.yml index 6019e095663..77104eecded 100644 --- a/.github/workflows/daily-safe-output-integrator.lock.yml +++ b/.github/workflows/daily-safe-output-integrator.lock.yml @@ -172,6 +172,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml index f65f69c4f3b..46b9048d683 100644 --- a/.github/workflows/daily-safe-output-optimizer.lock.yml +++ b/.github/workflows/daily-safe-output-optimizer.lock.yml @@ -225,6 +225,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "โšก" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-safe-outputs-conformance.lock.yml b/.github/workflows/daily-safe-outputs-conformance.lock.yml index c6643d86cc6..9bcb2eb06d3 100644 --- a/.github/workflows/daily-safe-outputs-conformance.lock.yml +++ b/.github/workflows/daily-safe-outputs-conformance.lock.yml @@ -171,6 +171,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โœ…" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-safeoutputs-git-simulator.lock.yml b/.github/workflows/daily-safeoutputs-git-simulator.lock.yml index dca0179b5d9..e91245024b7 100644 --- a/.github/workflows/daily-safeoutputs-git-simulator.lock.yml +++ b/.github/workflows/daily-safeoutputs-git-simulator.lock.yml @@ -166,6 +166,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-schema-audit-cursor.lock.yml b/.github/workflows/daily-schema-audit-cursor.lock.yml index 50ed7777736..83eb89e3af3 100644 --- a/.github/workflows/daily-schema-audit-cursor.lock.yml +++ b/.github/workflows/daily-schema-audit-cursor.lock.yml @@ -167,6 +167,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ–ฑ๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-secrets-analysis.lock.yml b/.github/workflows/daily-secrets-analysis.lock.yml index 2f19df83423..c8a084382ab 100644 --- a/.github/workflows/daily-secrets-analysis.lock.yml +++ b/.github/workflows/daily-secrets-analysis.lock.yml @@ -176,6 +176,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-security-observability.lock.yml b/.github/workflows/daily-security-observability.lock.yml index ff263eeef09..2c927fd51a4 100644 --- a/.github/workflows/daily-security-observability.lock.yml +++ b/.github/workflows/daily-security-observability.lock.yml @@ -185,6 +185,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-security-red-team.lock.yml b/.github/workflows/daily-security-red-team.lock.yml index 340a49ae123..2676fd49dcb 100644 --- a/.github/workflows/daily-security-red-team.lock.yml +++ b/.github/workflows/daily-security-red-team.lock.yml @@ -212,6 +212,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-semgrep-scan.lock.yml b/.github/workflows/daily-semgrep-scan.lock.yml index 50f59cbaed7..d4c283b8da0 100644 --- a/.github/workflows/daily-semgrep-scan.lock.yml +++ b/.github/workflows/daily-semgrep-scan.lock.yml @@ -209,6 +209,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6.1-sol":{"cost":{"cache_read":"1e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/daily-spdd-spec-planner.lock.yml b/.github/workflows/daily-spdd-spec-planner.lock.yml index aed82fc76ac..8ba80e4a1b6 100644 --- a/.github/workflows/daily-spdd-spec-planner.lock.yml +++ b/.github/workflows/daily-spdd-spec-planner.lock.yml @@ -171,6 +171,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“‹" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-spec-coverage-kiro.lock.yml b/.github/workflows/daily-spec-coverage-kiro.lock.yml index ebca623f243..afad9c7b4fc 100644 --- a/.github/workflows/daily-spec-coverage-kiro.lock.yml +++ b/.github/workflows/daily-spec-coverage-kiro.lock.yml @@ -167,6 +167,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-spending-forecast.lock.yml b/.github/workflows/daily-spending-forecast.lock.yml index b00fe78980c..904eb55193d 100644 --- a/.github/workflows/daily-spending-forecast.lock.yml +++ b/.github/workflows/daily-spending-forecast.lock.yml @@ -169,6 +169,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“ˆ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-squid-image-scan.lock.yml b/.github/workflows/daily-squid-image-scan.lock.yml index 67d40acb884..ac29e2cd569 100644 --- a/.github/workflows/daily-squid-image-scan.lock.yml +++ b/.github/workflows/daily-squid-image-scan.lock.yml @@ -158,6 +158,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ›ก๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-storify.lock.yml b/.github/workflows/daily-storify.lock.yml index 5e972d02762..fd416060e2e 100644 --- a/.github/workflows/daily-storify.lock.yml +++ b/.github/workflows/daily-storify.lock.yml @@ -177,6 +177,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-syntax-error-quality.lock.yml b/.github/workflows/daily-syntax-error-quality.lock.yml index 9a62259a49f..537c8a6ae05 100644 --- a/.github/workflows/daily-syntax-error-quality.lock.yml +++ b/.github/workflows/daily-syntax-error-quality.lock.yml @@ -168,6 +168,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-team-evolution-insights.lock.yml b/.github/workflows/daily-team-evolution-insights.lock.yml index 8d1d2e7919c..f32c14b4923 100644 --- a/.github/workflows/daily-team-evolution-insights.lock.yml +++ b/.github/workflows/daily-team-evolution-insights.lock.yml @@ -173,6 +173,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "false" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-team-status.lock.yml b/.github/workflows/daily-team-status.lock.yml index 3221c390f7f..024309a3b23 100644 --- a/.github/workflows/daily-team-status.lock.yml +++ b/.github/workflows/daily-team-status.lock.yml @@ -167,6 +167,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_SOURCE: "githubnext/agentics/workflows/team-status.md@main" GH_AW_INFO_BODY_MODIFIED: "false" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/daily-testify-uber-super-expert.lock.yml b/.github/workflows/daily-testify-uber-super-expert.lock.yml index 487ca47d56f..1260625de6c 100644 --- a/.github/workflows/daily-testify-uber-super-expert.lock.yml +++ b/.github/workflows/daily-testify-uber-super-expert.lock.yml @@ -180,6 +180,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-token-consumption-report.lock.yml b/.github/workflows/daily-token-consumption-report.lock.yml index a35f2a06857..c1fb4255db3 100644 --- a/.github/workflows/daily-token-consumption-report.lock.yml +++ b/.github/workflows/daily-token-consumption-report.lock.yml @@ -181,6 +181,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-sonnet-5":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/daily-trajectory-grader-implementer.lock.yml b/.github/workflows/daily-trajectory-grader-implementer.lock.yml index 7c8eaf86e88..df3fab1d509 100644 --- a/.github/workflows/daily-trajectory-grader-implementer.lock.yml +++ b/.github/workflows/daily-trajectory-grader-implementer.lock.yml @@ -174,6 +174,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงฎ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-vulnhunter-scan.lock.yml b/.github/workflows/daily-vulnhunter-scan.lock.yml index 5ce6788a28b..282e1b46e0a 100644 --- a/.github/workflows/daily-vulnhunter-scan.lock.yml +++ b/.github/workflows/daily-vulnhunter-scan.lock.yml @@ -168,6 +168,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ›ก๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"anthropic":{"models":{"claude-sonnet-5":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/daily-windows-defender-scan.lock.yml b/.github/workflows/daily-windows-defender-scan.lock.yml index b002cf81095..c1bc568af31 100644 --- a/.github/workflows/daily-windows-defender-scan.lock.yml +++ b/.github/workflows/daily-windows-defender-scan.lock.yml @@ -171,6 +171,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6-sol":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-windows-terminal-integration-builder.lock.yml b/.github/workflows/daily-windows-terminal-integration-builder.lock.yml index 36934f6506e..9bee76ea0ed 100644 --- a/.github/workflows/daily-windows-terminal-integration-builder.lock.yml +++ b/.github/workflows/daily-windows-terminal-integration-builder.lock.yml @@ -166,6 +166,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸชŸ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6-luna":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' diff --git a/.github/workflows/daily-work-queue-formal-verification.lock.yml b/.github/workflows/daily-work-queue-formal-verification.lock.yml index bf9fe9c6c7e..1877a8b09d6 100644 --- a/.github/workflows/daily-work-queue-formal-verification.lock.yml +++ b/.github/workflows/daily-work-queue-formal-verification.lock.yml @@ -161,6 +161,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/daily-work-queues-report.lock.yml b/.github/workflows/daily-work-queues-report.lock.yml index 76c83f037ae..2f6c9538119 100644 --- a/.github/workflows/daily-work-queues-report.lock.yml +++ b/.github/workflows/daily-work-queues-report.lock.yml @@ -166,6 +166,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/daily-workflow-security-model.lock.yml b/.github/workflows/daily-workflow-security-model.lock.yml index 92ce5a0c58f..4f3c17b4072 100644 --- a/.github/workflows/daily-workflow-security-model.lock.yml +++ b/.github/workflows/daily-workflow-security-model.lock.yml @@ -171,6 +171,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml index 840d4ee1383..70cca1c42bc 100644 --- a/.github/workflows/daily-workflow-updater.lock.yml +++ b/.github/workflows/daily-workflow-updater.lock.yml @@ -169,6 +169,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/daily-yamllint-fixer.lock.yml b/.github/workflows/daily-yamllint-fixer.lock.yml index 478c460155b..80c0a614129 100644 --- a/.github/workflows/daily-yamllint-fixer.lock.yml +++ b/.github/workflows/daily-yamllint-fixer.lock.yml @@ -178,6 +178,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงน" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml index 9e2ca7b8d2c..889132859d1 100644 --- a/.github/workflows/dataflow-pr-discussion-dataset.lock.yml +++ b/.github/workflows/dataflow-pr-discussion-dataset.lock.yml @@ -215,6 +215,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸŒŠ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index 2cf5fd2971a..dc3a0e27e61 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -180,6 +180,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงน" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml index 22df2c64938..fabf1e40224 100644 --- a/.github/workflows/deep-report.lock.yml +++ b/.github/workflows/deep-report.lock.yml @@ -227,6 +227,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ฌ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/deepsec-security-scan.lock.yml b/.github/workflows/deepsec-security-scan.lock.yml index 9a5430a189c..26aa1a83288 100644 --- a/.github/workflows/deepsec-security-scan.lock.yml +++ b/.github/workflows/deepsec-security-scan.lock.yml @@ -190,6 +190,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿง " GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"anthropic":{"models":{"claude-sonnet-5":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/delight.lock.yml b/.github/workflows/delight.lock.yml index b688828aeda..55d53f90f4a 100644 --- a/.github/workflows/delight.lock.yml +++ b/.github/workflows/delight.lock.yml @@ -169,6 +169,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โœจ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml index 1be774eef17..6ebc68b7619 100644 --- a/.github/workflows/dependabot-burner.lock.yml +++ b/.github/workflows/dependabot-burner.lock.yml @@ -197,6 +197,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ฅ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/dependabot-go-checker.lock.yml b/.github/workflows/dependabot-go-checker.lock.yml index d1fca50414e..2023dd5af02 100644 --- a/.github/workflows/dependabot-go-checker.lock.yml +++ b/.github/workflows/dependabot-go-checker.lock.yml @@ -208,6 +208,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6-luna":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' diff --git a/.github/workflows/deployment-incident-monitor.lock.yml b/.github/workflows/deployment-incident-monitor.lock.yml index f4ea4dc78c4..c9f8808c2dd 100644 --- a/.github/workflows/deployment-incident-monitor.lock.yml +++ b/.github/workflows/deployment-incident-monitor.lock.yml @@ -170,6 +170,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿšจ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/design-decision-gate.lock.yml b/.github/workflows/design-decision-gate.lock.yml index 1a8be5437c2..20c744c48fb 100644 --- a/.github/workflows/design-decision-gate.lock.yml +++ b/.github/workflows/design-decision-gate.lock.yml @@ -202,6 +202,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "v0.4.36" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ—๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-opus-5.5":{"cost":{"cache_read":"2e-07","cache_write":"5e-06","input":"4e-06","output":"2e-05"}}}}}}' diff --git a/.github/workflows/designer-drift-audit.lock.yml b/.github/workflows/designer-drift-audit.lock.yml index aa164a362d5..87d3e5c0958 100644 --- a/.github/workflows/designer-drift-audit.lock.yml +++ b/.github/workflows/designer-drift-audit.lock.yml @@ -163,6 +163,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6-astra":{"cost":{"cache_read":"1e-06","cache_write":"1.25e-05","input":"1e-05","output":"5e-05"}}}}}}' diff --git a/.github/workflows/detection-analysis-report.lock.yml b/.github/workflows/detection-analysis-report.lock.yml index b25ad38cf02..62c3f3c7ed8 100644 --- a/.github/workflows/detection-analysis-report.lock.yml +++ b/.github/workflows/detection-analysis-report.lock.yml @@ -180,6 +180,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”Ž" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml index 36ff56bb384..b04e9ba421a 100644 --- a/.github/workflows/dev-hawk.lock.yml +++ b/.github/workflows/dev-hawk.lock.yml @@ -180,6 +180,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿฆ…" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index 7eb0c53b442..cb67cfb95df 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -157,6 +157,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml index 8f486bc32da..5f140b5e5ba 100644 --- a/.github/workflows/developer-docs-consolidator.lock.yml +++ b/.github/workflows/developer-docs-consolidator.lock.yml @@ -181,6 +181,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml index f4b0b1c4a42..93c149cd744 100644 --- a/.github/workflows/dictation-prompt.lock.yml +++ b/.github/workflows/dictation-prompt.lock.yml @@ -170,6 +170,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸŽ™๏ธ" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/docs-noob-tester.lock.yml b/.github/workflows/docs-noob-tester.lock.yml index 40adc39f45f..25a5550166d 100644 --- a/.github/workflows/docs-noob-tester.lock.yml +++ b/.github/workflows/docs-noob-tester.lock.yml @@ -169,6 +169,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/draft-pr-cleanup.lock.yml b/.github/workflows/draft-pr-cleanup.lock.yml index aecb9ad4f0a..33e3f7c088c 100644 --- a/.github/workflows/draft-pr-cleanup.lock.yml +++ b/.github/workflows/draft-pr-cleanup.lock.yml @@ -165,6 +165,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงน" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/duplicate-code-detector.lock.yml b/.github/workflows/duplicate-code-detector.lock.yml index 01733bd197b..8bd88057aa7 100644 --- a/.github/workflows/duplicate-code-detector.lock.yml +++ b/.github/workflows/duplicate-code-detector.lock.yml @@ -172,6 +172,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":true,"goal":"cost","mode":"auto"},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/engine-conformance-agy.lock.yml b/.github/workflows/engine-conformance-agy.lock.yml index 381678f96e2..80a06893b6e 100644 --- a/.github/workflows/engine-conformance-agy.lock.yml +++ b/.github/workflows/engine-conformance-agy.lock.yml @@ -173,6 +173,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "5" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/engine-conformance-aider.lock.yml b/.github/workflows/engine-conformance-aider.lock.yml index ef135979e3d..6bc7637c6a4 100644 --- a/.github/workflows/engine-conformance-aider.lock.yml +++ b/.github/workflows/engine-conformance-aider.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"451bcaaf242db3c0d18f0fd4038d18a0144e94636c084ca431ade0c11a474a01","body_hash":"1a2e2b9bac53994d82c2314a9e57f6b760118e98a3b07cb585bfb7e496c0c3be","strict":true,"agent_id":"aider","agent_model":"copilot/claude-haiku-5.5","engine_versions":{"aider":"0.86.2"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"7fcfc59ed06fe380595b944e299c73c59f4f16cb19a8c3d5f6c21e5b5c84df4d","body_hash":"1a2e2b9bac53994d82c2314a9e57f6b760118e98a3b07cb585bfb7e496c0c3be","strict":true,"agent_id":"aider","agent_model":"copilot/claude-haiku-5.5","engine_versions":{"aider":"0.86.2"}} # gh-aw-manifest: {"version":1,"secrets":["GH_AW_DEFAULT_OTLP_ENDPOINT","GH_AW_DEFAULT_OTLP_HEADERS","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/setup-python","sha":"5fda3b95a4ea91299a34e894583c3862153e4b97","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.28.70","digest":"sha256:b15ab48cbbab02904eb9bbd359a398db59690eebbea1e6934d47ed2bb407dd34","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.28.70@sha256:b15ab48cbbab02904eb9bbd359a398db59690eebbea1e6934d47ed2bb407dd34"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.28.70","digest":"sha256:9ac8f9c7294e892c916de3da9d2588dfd8cd4931e5c39b00143266d7ed9fd52a","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.28.70@sha256:9ac8f9c7294e892c916de3da9d2588dfd8cd4931e5c39b00143266d7ed9fd52a"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.28.70","digest":"sha256:372ac51a5cccffdfe484f3f7be427d2d1c566e8ae550d55bd45d9fd166a154b4","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.28.70@sha256:372ac51a5cccffdfe484f3f7be427d2d1c566e8ae550d55bd45d9fd166a154b4"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.28.70","digest":"sha256:b5bc53f4becfd96e926e63c83831f1b3c9512f713c83161d2b8c9b7204b3e917","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.28.70@sha256:b5bc53f4becfd96e926e63c83831f1b3c9512f713c83161d2b8c9b7204b3e917"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.36","digest":"sha256:b4d2856018959c798b3e3f81ae4ab5b275e06354e123e1f7971de931f2f450f2","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.36@sha256:b4d2856018959c798b3e3f81ae4ab5b275e06354e123e1f7971de931f2f450f2"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:41835613992df88f51e923bad486f96dfb2e6cda29f13e217df41833284ae382","pinned_image":"ghcr.io/github/gh-aw-node@sha256:41835613992df88f51e923bad486f96dfb2e6cda29f13e217df41833284ae382"},{"image":"ghcr.io/github/github-mcp-server:v2.0.2","digest":"sha256:ffced0d76e77428532a2ced185516992d77fd146d69eec2f244e6237d1a97796","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.2@sha256:ffced0d76e77428532a2ced185516992d77fd146d69eec2f244e6237d1a97796"}],"mcp_servers":[{"name":"mcpscripts","tools":["conformance-challenge"]},{"name":"safeoutputs","tools":["create_issue","noop","report_incomplete","report_missing_data","report_missing_tool"]},{"name":"work-queue","tools":["work_queue_claim_finish","work_queue_dispatch_next","work_queue_explain","work_queue_read","work_queue_submit"]}],"threat_detection":{"mode":"disabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # @@ -172,6 +172,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "5" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-haiku-5.5":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' @@ -479,7 +481,7 @@ jobs: GH_AW_DEFAULT_ADMISSION_URL: ${{ vars.GH_AW_DEFAULT_ADMISSION_URL }} GH_AW_DEFAULT_ADMISSION_AUDIENCE: ${{ vars.GH_AW_DEFAULT_ADMISSION_AUDIENCE }} GH_AW_DEFAULT_ADMISSION_ON_OUTAGE: ${{ vars.GH_AW_DEFAULT_ADMISSION_ON_OUTAGE }} - GH_AW_ADMISSION_WORKFLOW_HASH: "451bcaaf242db3c0d18f0fd4038d18a0144e94636c084ca431ade0c11a474a01:1a2e2b9bac53994d82c2314a9e57f6b760118e98a3b07cb585bfb7e496c0c3be" + GH_AW_ADMISSION_WORKFLOW_HASH: "7fcfc59ed06fe380595b944e299c73c59f4f16cb19a8c3d5f6c21e5b5c84df4d:1a2e2b9bac53994d82c2314a9e57f6b760118e98a3b07cb585bfb7e496c0c3be" GH_AW_INFO_WORKFLOW_ID: ${{ job.workflow_ref }} GITHUB_ACTOR: ${{ github.actor }} GITHUB_TRIGGERING_ACTOR: ${{ github.triggering_actor }} @@ -1263,8 +1265,8 @@ jobs: "mcp.rpc.request", "mcp.rpc.response", "mcp.difc.filtered", "mcp.guard.blocked", "mcp.tool_call", "mcp.event", "mcp.configuration", "firewall.http_access", "firewall.token_usage", "firewall.model_routing", - "firewall.steering", "firewall.event", "model_routing.outcome", - "model_endpoint.mismatch", "model.resolution", + "firewall.upstream_error", "firewall.steering", "firewall.event", "model_routing.outcome", + "model_endpoint.mismatch", "model.resolution", "model.config", "model.baseline_estimate", "safe_output.request", "safe_output.result", "safe_output.error", "experiment.state", "experiment.assignment", "grader.manifest", "grader.result", "eval.result", "github_api.rate_limit", "usage.report", "execution.result", @@ -2190,7 +2192,7 @@ jobs: GH_AW_DEFAULT_ADMISSION_URL: ${{ vars.GH_AW_DEFAULT_ADMISSION_URL }} GH_AW_DEFAULT_ADMISSION_AUDIENCE: ${{ vars.GH_AW_DEFAULT_ADMISSION_AUDIENCE }} GH_AW_DEFAULT_ADMISSION_ON_OUTAGE: ${{ vars.GH_AW_DEFAULT_ADMISSION_ON_OUTAGE }} - GH_AW_ADMISSION_WORKFLOW_HASH: "451bcaaf242db3c0d18f0fd4038d18a0144e94636c084ca431ade0c11a474a01:1a2e2b9bac53994d82c2314a9e57f6b760118e98a3b07cb585bfb7e496c0c3be" + GH_AW_ADMISSION_WORKFLOW_HASH: "7fcfc59ed06fe380595b944e299c73c59f4f16cb19a8c3d5f6c21e5b5c84df4d:1a2e2b9bac53994d82c2314a9e57f6b760118e98a3b07cb585bfb7e496c0c3be" GH_AW_INFO_WORKFLOW_ID: ${{ job.workflow_ref }} GITHUB_ACTOR: ${{ github.actor }} GITHUB_TRIGGERING_ACTOR: ${{ github.triggering_actor }} diff --git a/.github/workflows/engine-conformance-claude.lock.yml b/.github/workflows/engine-conformance-claude.lock.yml index 653960e4263..58008d0586d 100644 --- a/.github/workflows/engine-conformance-claude.lock.yml +++ b/.github/workflows/engine-conformance-claude.lock.yml @@ -172,6 +172,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "50" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/engine-conformance-codex.lock.yml b/.github/workflows/engine-conformance-codex.lock.yml index 1483d5eca36..29322608091 100644 --- a/.github/workflows/engine-conformance-codex.lock.yml +++ b/.github/workflows/engine-conformance-codex.lock.yml @@ -173,6 +173,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "50" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6.1-sol":{"cost":{"cache_read":"1e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/engine-conformance-copilot.lock.yml b/.github/workflows/engine-conformance-copilot.lock.yml index 47fa32fb4a2..8a58467e550 100644 --- a/.github/workflows/engine-conformance-copilot.lock.yml +++ b/.github/workflows/engine-conformance-copilot.lock.yml @@ -169,6 +169,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "50" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/engine-conformance-crush.lock.yml b/.github/workflows/engine-conformance-crush.lock.yml index e7ae5c463bd..82e14497a01 100644 --- a/.github/workflows/engine-conformance-crush.lock.yml +++ b/.github/workflows/engine-conformance-crush.lock.yml @@ -170,6 +170,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "5" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.6-luna":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/engine-conformance-cursor.lock.yml b/.github/workflows/engine-conformance-cursor.lock.yml index faa1873e026..5e56294832a 100644 --- a/.github/workflows/engine-conformance-cursor.lock.yml +++ b/.github/workflows/engine-conformance-cursor.lock.yml @@ -172,6 +172,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "5" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/engine-conformance-deepseek-harness.lock.yml b/.github/workflows/engine-conformance-deepseek-harness.lock.yml index fbfb77df97d..849d0cb3e55 100644 --- a/.github/workflows/engine-conformance-deepseek-harness.lock.yml +++ b/.github/workflows/engine-conformance-deepseek-harness.lock.yml @@ -171,6 +171,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "50" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-haiku-5.5":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/engine-conformance-dispatcher.lock.yml b/.github/workflows/engine-conformance-dispatcher.lock.yml index c81035826bc..f11bbb9e142 100644 --- a/.github/workflows/engine-conformance-dispatcher.lock.yml +++ b/.github/workflows/engine-conformance-dispatcher.lock.yml @@ -168,6 +168,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/engine-conformance-gemini.lock.yml b/.github/workflows/engine-conformance-gemini.lock.yml index 6190a224982..f6221b89126 100644 --- a/.github/workflows/engine-conformance-gemini.lock.yml +++ b/.github/workflows/engine-conformance-gemini.lock.yml @@ -172,6 +172,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "5" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/engine-conformance-goose.lock.yml b/.github/workflows/engine-conformance-goose.lock.yml index 8e3243defcf..15894a78995 100644 --- a/.github/workflows/engine-conformance-goose.lock.yml +++ b/.github/workflows/engine-conformance-goose.lock.yml @@ -169,6 +169,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "5" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-haiku-5.5":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/engine-conformance-kiro.lock.yml b/.github/workflows/engine-conformance-kiro.lock.yml index 6fec4d8de27..bf3096bbd53 100644 --- a/.github/workflows/engine-conformance-kiro.lock.yml +++ b/.github/workflows/engine-conformance-kiro.lock.yml @@ -173,6 +173,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "5" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/engine-conformance-opencode.lock.yml b/.github/workflows/engine-conformance-opencode.lock.yml index 28d8b063d76..40d5ebb8a95 100644 --- a/.github/workflows/engine-conformance-opencode.lock.yml +++ b/.github/workflows/engine-conformance-opencode.lock.yml @@ -169,6 +169,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "5" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-haiku-5.5":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/engine-conformance-pi.lock.yml b/.github/workflows/engine-conformance-pi.lock.yml index 433933dd934..ac51266d798 100644 --- a/.github/workflows/engine-conformance-pi.lock.yml +++ b/.github/workflows/engine-conformance-pi.lock.yml @@ -169,6 +169,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "50" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/engine-conformance-pydantic-ai.lock.yml b/.github/workflows/engine-conformance-pydantic-ai.lock.yml index 295c3dc3db2..a3b62f31bdc 100644 --- a/.github/workflows/engine-conformance-pydantic-ai.lock.yml +++ b/.github/workflows/engine-conformance-pydantic-ai.lock.yml @@ -171,6 +171,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "5" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-haiku-5.5":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/eslint-factory-dispatcher.lock.yml b/.github/workflows/eslint-factory-dispatcher.lock.yml index 5a527383ddc..f0e3bbe20c9 100644 --- a/.github/workflows/eslint-factory-dispatcher.lock.yml +++ b/.github/workflows/eslint-factory-dispatcher.lock.yml @@ -164,6 +164,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/eslint-miner.lock.yml b/.github/workflows/eslint-miner.lock.yml index fc8b2076ea1..65f01046e5f 100644 --- a/.github/workflows/eslint-miner.lock.yml +++ b/.github/workflows/eslint-miner.lock.yml @@ -173,6 +173,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/eslint-monster.lock.yml b/.github/workflows/eslint-monster.lock.yml index c83fee16b09..eb5c3bdedb8 100644 --- a/.github/workflows/eslint-monster.lock.yml +++ b/.github/workflows/eslint-monster.lock.yml @@ -173,6 +173,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงน" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6-astra":{"cost":{"cache_read":"1e-06","cache_write":"1.25e-05","input":"1e-05","output":"5e-05"}}}}}}' diff --git a/.github/workflows/eslint-refiner.lock.yml b/.github/workflows/eslint-refiner.lock.yml index 9861edccf59..7963c8aa226 100644 --- a/.github/workflows/eslint-refiner.lock.yml +++ b/.github/workflows/eslint-refiner.lock.yml @@ -176,6 +176,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿค–" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/evoskill-evolver.lock.yml b/.github/workflows/evoskill-evolver.lock.yml index 25e3ec13ea4..9d4fd735566 100644 --- a/.github/workflows/evoskill-evolver.lock.yml +++ b/.github/workflows/evoskill-evolver.lock.yml @@ -169,6 +169,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงฌ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/example-failure-category-filter.lock.yml b/.github/workflows/example-failure-category-filter.lock.yml index 4e0ab4a8ae8..94df2503aa7 100644 --- a/.github/workflows/example-failure-category-filter.lock.yml +++ b/.github/workflows/example-failure-category-filter.lock.yml @@ -163,6 +163,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.6-sol":{"cost":{"cache_read":"4e-07","cache_write":"5e-06","input":"4e-06","output":"2e-05"}}}}}}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/example-permissions-warning.lock.yml b/.github/workflows/example-permissions-warning.lock.yml index a9ea07f16bc..60e581dfa0f 100644 --- a/.github/workflows/example-permissions-warning.lock.yml +++ b/.github/workflows/example-permissions-warning.lock.yml @@ -164,6 +164,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โš ๏ธ" GH_AW_COMPILED_STRICT: "false" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.6-sol":{"cost":{"cache_read":"4e-07","cache_write":"5e-06","input":"4e-06","output":"2e-05"}}}}}}' diff --git a/.github/workflows/example-workflow-analyzer.lock.yml b/.github/workflows/example-workflow-analyzer.lock.yml index d30507db7a0..c362bfb82fe 100644 --- a/.github/workflows/example-workflow-analyzer.lock.yml +++ b/.github/workflows/example-workflow-analyzer.lock.yml @@ -174,6 +174,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/feature-grower.lock.yml b/.github/workflows/feature-grower.lock.yml index cfabfbd0e71..ebf890f5a0d 100644 --- a/.github/workflows/feature-grower.lock.yml +++ b/.github/workflows/feature-grower.lock.yml @@ -169,6 +169,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.6-terra":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1.2e-05"}}}}}}' diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml index 423e2cf5316..175d19f7575 100644 --- a/.github/workflows/firewall-escape.lock.yml +++ b/.github/workflows/firewall-escape.lock.yml @@ -184,6 +184,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/firewall.lock.yml b/.github/workflows/firewall.lock.yml index ad6a4c7faa0..08b74c06e1c 100644 --- a/.github/workflows/firewall.lock.yml +++ b/.github/workflows/firewall.lock.yml @@ -163,6 +163,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/front-page-copy-guard.lock.yml b/.github/workflows/front-page-copy-guard.lock.yml index 479ab780934..1c7d8d3a20c 100644 --- a/.github/workflows/front-page-copy-guard.lock.yml +++ b/.github/workflows/front-page-copy-guard.lock.yml @@ -175,6 +175,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ›ก๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.6-terra":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1.2e-05"}}}}}}' diff --git a/.github/workflows/functional-pragmatist.lock.yml b/.github/workflows/functional-pragmatist.lock.yml index e5b24edc2e1..253f778ab9f 100644 --- a/.github/workflows/functional-pragmatist.lock.yml +++ b/.github/workflows/functional-pragmatist.lock.yml @@ -173,6 +173,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.6-luna":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' diff --git a/.github/workflows/github-mcp-structural-analysis.lock.yml b/.github/workflows/github-mcp-structural-analysis.lock.yml index fa26e4372a1..6cef2ddd18f 100644 --- a/.github/workflows/github-mcp-structural-analysis.lock.yml +++ b/.github/workflows/github-mcp-structural-analysis.lock.yml @@ -177,6 +177,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index aeb8c818b85..75d9e08b588 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -175,6 +175,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/github-remote-mcp-auth-test.lock.yml b/.github/workflows/github-remote-mcp-auth-test.lock.yml index 867870afcb2..9aecd0a3e8b 100644 --- a/.github/workflows/github-remote-mcp-auth-test.lock.yml +++ b/.github/workflows/github-remote-mcp-auth-test.lock.yml @@ -166,6 +166,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.6-luna":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml index 49a93cdf8f3..91a1bba8e00 100644 --- a/.github/workflows/glossary-maintainer.lock.yml +++ b/.github/workflows/glossary-maintainer.lock.yml @@ -180,6 +180,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/go-fan.lock.yml b/.github/workflows/go-fan.lock.yml index a4cf241c0f9..3ae204945c7 100644 --- a/.github/workflows/go-fan.lock.yml +++ b/.github/workflows/go-fan.lock.yml @@ -218,6 +218,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿน" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml index 35b85d3f88e..c863941eec9 100644 --- a/.github/workflows/go-logger.lock.yml +++ b/.github/workflows/go-logger.lock.yml @@ -180,6 +180,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/go-pattern-detector.lock.yml b/.github/workflows/go-pattern-detector.lock.yml index d906fb1888b..af52339233b 100644 --- a/.github/workflows/go-pattern-detector.lock.yml +++ b/.github/workflows/go-pattern-detector.lock.yml @@ -170,6 +170,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/gpclean.lock.yml b/.github/workflows/gpclean.lock.yml index 165f9eff27d..2fe11c274e8 100644 --- a/.github/workflows/gpclean.lock.yml +++ b/.github/workflows/gpclean.lock.yml @@ -212,6 +212,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงน" GH_AW_COMPILED_STRICT: "false" diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml index b2052ba9106..70199216fb4 100644 --- a/.github/workflows/grumpy-reviewer.lock.yml +++ b/.github/workflows/grumpy-reviewer.lock.yml @@ -179,6 +179,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6.1-sol":{"cost":{"cache_read":"1e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/hippo-embed.lock.yml b/.github/workflows/hippo-embed.lock.yml index c6f4437a6fe..089ed12301d 100644 --- a/.github/workflows/hippo-embed.lock.yml +++ b/.github/workflows/hippo-embed.lock.yml @@ -167,6 +167,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿฆ›" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/hourly-ci-cleaner.lock.yml b/.github/workflows/hourly-ci-cleaner.lock.yml index 87cc6e6bab9..da631458d43 100644 --- a/.github/workflows/hourly-ci-cleaner.lock.yml +++ b/.github/workflows/hourly-ci-cleaner.lock.yml @@ -181,6 +181,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงน" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/impeccable-skills-reviewer.lock.yml b/.github/workflows/impeccable-skills-reviewer.lock.yml index 67b24a98a7c..1ccc8884d60 100644 --- a/.github/workflows/impeccable-skills-reviewer.lock.yml +++ b/.github/workflows/impeccable-skills-reviewer.lock.yml @@ -194,6 +194,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงต" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-sonnet-5":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml index bca15850a7f..0a3d12ce170 100644 --- a/.github/workflows/instructions-janitor.lock.yml +++ b/.github/workflows/instructions-janitor.lock.yml @@ -174,6 +174,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงน" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/issue-arborist.lock.yml b/.github/workflows/issue-arborist.lock.yml index da20f69dbb6..57855176081 100644 --- a/.github/workflows/issue-arborist.lock.yml +++ b/.github/workflows/issue-arborist.lock.yml @@ -211,6 +211,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6-sol":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index b2d45d10932..947b9c396df 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -668,6 +668,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ‘พ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/issue-triage-agent.lock.yml b/.github/workflows/issue-triage-agent.lock.yml index 939c3e113f3..70a10a9a11c 100644 --- a/.github/workflows/issue-triage-agent.lock.yml +++ b/.github/workflows/issue-triage-agent.lock.yml @@ -165,6 +165,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6-sol":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/jsweep.lock.yml b/.github/workflows/jsweep.lock.yml index 789ba6be0f2..f75561364f2 100644 --- a/.github/workflows/jsweep.lock.yml +++ b/.github/workflows/jsweep.lock.yml @@ -170,6 +170,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงน" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml index 154b0e312ff..eeda0b7b8af 100644 --- a/.github/workflows/layout-spec-maintainer.lock.yml +++ b/.github/workflows/layout-spec-maintainer.lock.yml @@ -175,6 +175,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/lint-monster.lock.yml b/.github/workflows/lint-monster.lock.yml index 1463cd0f123..72425d030d6 100644 --- a/.github/workflows/lint-monster.lock.yml +++ b/.github/workflows/lint-monster.lock.yml @@ -171,6 +171,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸงŒ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6-luna":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' diff --git a/.github/workflows/linter-miner.lock.yml b/.github/workflows/linter-miner.lock.yml index d651929793c..1b374f0881b 100644 --- a/.github/workflows/linter-miner.lock.yml +++ b/.github/workflows/linter-miner.lock.yml @@ -175,6 +175,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-sonnet-5.5":{"cost":{"cache_read":"1e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index f74793bf7bf..2dfe21cfd96 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -172,6 +172,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/mattpocock-skills-reviewer.lock.yml b/.github/workflows/mattpocock-skills-reviewer.lock.yml index a23778d8f29..90accaf9b40 100644 --- a/.github/workflows/mattpocock-skills-reviewer.lock.yml +++ b/.github/workflows/mattpocock-skills-reviewer.lock.yml @@ -194,6 +194,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-sonnet-5":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index 02d3587a690..b76e27261a2 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -193,6 +193,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "false" diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml index 8a38569cea4..140ca0245dd 100644 --- a/.github/workflows/mergefest.lock.yml +++ b/.github/workflows/mergefest.lock.yml @@ -178,6 +178,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”€" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/metrics-collector.lock.yml b/.github/workflows/metrics-collector.lock.yml index e40dfb6df8f..bb2b751592b 100644 --- a/.github/workflows/metrics-collector.lock.yml +++ b/.github/workflows/metrics-collector.lock.yml @@ -171,6 +171,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6-luna":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' diff --git a/.github/workflows/necromancer.lock.yml b/.github/workflows/necromancer.lock.yml index f38cb76efdf..46f659bfaca 100644 --- a/.github/workflows/necromancer.lock.yml +++ b/.github/workflows/necromancer.lock.yml @@ -184,6 +184,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ’€" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6.1-sol":{"cost":{"cache_read":"1e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/notion-issue-summary.lock.yml b/.github/workflows/notion-issue-summary.lock.yml index 831826ae55d..352c55c9ade 100644 --- a/.github/workflows/notion-issue-summary.lock.yml +++ b/.github/workflows/notion-issue-summary.lock.yml @@ -172,6 +172,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6-astra":{"cost":{"cache_read":"1e-06","cache_write":"1.25e-05","input":"1e-05","output":"5e-05"}}}}}}' diff --git a/.github/workflows/objective-impact-report.lock.yml b/.github/workflows/objective-impact-report.lock.yml index 401ba98465e..617c0b4caa2 100644 --- a/.github/workflows/objective-impact-report.lock.yml +++ b/.github/workflows/objective-impact-report.lock.yml @@ -166,6 +166,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/org-health-report.lock.yml b/.github/workflows/org-health-report.lock.yml index e3e3f74bdd2..00dd767465b 100644 --- a/.github/workflows/org-health-report.lock.yml +++ b/.github/workflows/org-health-report.lock.yml @@ -176,6 +176,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index 2b913bfd8c6..b1e9f21bbb0 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -190,6 +190,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“„" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml index 1ac8069123d..0a7b13a190b 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -218,6 +218,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“‹" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index abc5c064223..8a91350eb48 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -186,6 +186,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸŽญ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/ponytail-reviewer.lock.yml b/.github/workflows/ponytail-reviewer.lock.yml index 089c2c42d12..3e5e7032c4e 100644 --- a/.github/workflows/ponytail-reviewer.lock.yml +++ b/.github/workflows/ponytail-reviewer.lock.yml @@ -196,6 +196,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โœ‚๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.6-terra":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1.2e-05"}}}}}}' diff --git a/.github/workflows/portfolio-analyst.lock.yml b/.github/workflows/portfolio-analyst.lock.yml index 76a1b8310a3..b492b2c9694 100644 --- a/.github/workflows/portfolio-analyst.lock.yml +++ b/.github/workflows/portfolio-analyst.lock.yml @@ -179,6 +179,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "250" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/pr-code-quality-reviewer.lock.yml b/.github/workflows/pr-code-quality-reviewer.lock.yml index 91c454fd89d..7280199fb5f 100644 --- a/.github/workflows/pr-code-quality-reviewer.lock.yml +++ b/.github/workflows/pr-code-quality-reviewer.lock.yml @@ -192,6 +192,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/pr-description-caveman.lock.yml b/.github/workflows/pr-description-caveman.lock.yml index e50e880659a..033415cd18d 100644 --- a/.github/workflows/pr-description-caveman.lock.yml +++ b/.github/workflows/pr-description-caveman.lock.yml @@ -169,6 +169,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' GH_AW_INFO_SUB_AGENT_MODELS: "[{\"model\":\"claude-haiku-4.5\",\"name\":\"chunk-analyzer\",\"patterns\":[\"github-copilot/claude-haiku-4.5\"]},{\"model\":\"large\",\"name\":\"pr-description-synthesizer\",\"patterns\":[\"github-copilot/*sonnet*\",\"anthropic/*sonnet*\",\"github-copilot/gpt-6*\",\"openai/gpt-6*\",\"github-copilot/gpt-5*pro*\",\"openai/gpt-5*pro*\",\"github-copilot/gpt-5*\",\"openai/gpt-5*\",\"github-copilot/gemini-*pro*\",\"google/gemini-*pro*\",\"gemini/gemini-*pro*\"]}]" diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml index dad3e3ba6e2..8230e66d21c 100644 --- a/.github/workflows/pr-nitpick-reviewer.lock.yml +++ b/.github/workflows/pr-nitpick-reviewer.lock.yml @@ -180,6 +180,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/pr-sous-chef.lock.yml b/.github/workflows/pr-sous-chef.lock.yml index 38844b71d92..84cf51223f1 100644 --- a/.github/workflows/pr-sous-chef.lock.yml +++ b/.github/workflows/pr-sous-chef.lock.yml @@ -177,6 +177,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ‘จ\u200d๐Ÿณ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-haiku-4.5":{"cost":{"cache_read":"1.0000000000000001e-07","cache_write":"1.25e-06","input":"1e-06","output":"5e-06"}}}}}}' diff --git a/.github/workflows/pr-triage-agent.lock.yml b/.github/workflows/pr-triage-agent.lock.yml index 40f4ed9df4e..a71d32b7c43 100644 --- a/.github/workflows/pr-triage-agent.lock.yml +++ b/.github/workflows/pr-triage-agent.lock.yml @@ -170,6 +170,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"mai-code-1.1-flash":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' diff --git a/.github/workflows/prompt-clustering-analysis.lock.yml b/.github/workflows/prompt-clustering-analysis.lock.yml index d47f37a119a..c40ff4695af 100644 --- a/.github/workflows/prompt-clustering-analysis.lock.yml +++ b/.github/workflows/prompt-clustering-analysis.lock.yml @@ -186,6 +186,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/purelock.lock.yml b/.github/workflows/purelock.lock.yml index 8fa1298b372..add6970a05e 100644 --- a/.github/workflows/purelock.lock.yml +++ b/.github/workflows/purelock.lock.yml @@ -182,6 +182,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/python-data-charts.lock.yml b/.github/workflows/python-data-charts.lock.yml index 35e30e8878c..7aaa2b1a7aa 100644 --- a/.github/workflows/python-data-charts.lock.yml +++ b/.github/workflows/python-data-charts.lock.yml @@ -177,6 +177,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 688b7185b24..40b29ef9ea9 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -196,6 +196,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โ“" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/refactoring-cadence.lock.yml b/.github/workflows/refactoring-cadence.lock.yml index f73ac0127a5..45805349b8b 100644 --- a/.github/workflows/refactoring-cadence.lock.yml +++ b/.github/workflows/refactoring-cadence.lock.yml @@ -176,6 +176,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml index 25b6059a03a..b807d269682 100644 --- a/.github/workflows/refiner.lock.yml +++ b/.github/workflows/refiner.lock.yml @@ -193,6 +193,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โœจ" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml index 5d0555ff1da..37b0c733137 100644 --- a/.github/workflows/release.lock.yml +++ b/.github/workflows/release.lock.yml @@ -188,6 +188,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "docker" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿš€" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/repo-audit-analyzer.lock.yml b/.github/workflows/repo-audit-analyzer.lock.yml index 32100f98b25..5039810cfa2 100644 --- a/.github/workflows/repo-audit-analyzer.lock.yml +++ b/.github/workflows/repo-audit-analyzer.lock.yml @@ -175,6 +175,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/repo-tree-map.lock.yml b/.github/workflows/repo-tree-map.lock.yml index 892c323df65..eb80528458a 100644 --- a/.github/workflows/repo-tree-map.lock.yml +++ b/.github/workflows/repo-tree-map.lock.yml @@ -171,6 +171,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸŒณ" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/repository-quality-improver.lock.yml b/.github/workflows/repository-quality-improver.lock.yml index 71a9ba9e8c6..394cb5dead9 100644 --- a/.github/workflows/repository-quality-improver.lock.yml +++ b/.github/workflows/repository-quality-improver.lock.yml @@ -178,6 +178,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "โšก" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/research.lock.yml b/.github/workflows/research.lock.yml index 38527e194e4..1302cbaef04 100644 --- a/.github/workflows/research.lock.yml +++ b/.github/workflows/research.lock.yml @@ -169,6 +169,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ฌ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6-sol":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/safe-output-health.lock.yml b/.github/workflows/safe-output-health.lock.yml index 9447024a7c8..6ccfdb4f475 100644 --- a/.github/workflows/safe-output-health.lock.yml +++ b/.github/workflows/safe-output-health.lock.yml @@ -177,6 +177,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index 82b509f15d6..097cc6fe73c 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -173,6 +173,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "โœ…" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/schema-feature-coverage.lock.yml b/.github/workflows/schema-feature-coverage.lock.yml index 9f809dd2900..80082269964 100644 --- a/.github/workflows/schema-feature-coverage.lock.yml +++ b/.github/workflows/schema-feature-coverage.lock.yml @@ -167,6 +167,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6.1-sol":{"cost":{"cache_read":"1e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index df4d25d03e7..de212b6f7ba 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -201,6 +201,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ญ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/security-compliance.lock.yml b/.github/workflows/security-compliance.lock.yml index f7306b0ec85..ea0ee364c1e 100644 --- a/.github/workflows/security-compliance.lock.yml +++ b/.github/workflows/security-compliance.lock.yml @@ -177,6 +177,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/security-review.lock.yml b/.github/workflows/security-review.lock.yml index bde20668064..cbd1bb1fb0e 100644 --- a/.github/workflows/security-review.lock.yml +++ b/.github/workflows/security-review.lock.yml @@ -184,6 +184,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6-sol":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/semantic-function-refactor.lock.yml b/.github/workflows/semantic-function-refactor.lock.yml index 17430b107f8..496cc4df0d6 100644 --- a/.github/workflows/semantic-function-refactor.lock.yml +++ b/.github/workflows/semantic-function-refactor.lock.yml @@ -170,6 +170,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "300" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"anthropic":{"models":{"claude-sonnet-5":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/sergo.lock.yml b/.github/workflows/sergo.lock.yml index 19847781701..8c6967965c4 100644 --- a/.github/workflows/sergo.lock.yml +++ b/.github/workflows/sergo.lock.yml @@ -175,6 +175,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿค–" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/shared/aider.md b/.github/workflows/shared/aider.md index 90af206e0b8..c48b450fbc4 100644 --- a/.github/workflows/shared/aider.md +++ b/.github/workflows/shared/aider.md @@ -456,8 +456,8 @@ engine: "mcp.rpc.request", "mcp.rpc.response", "mcp.difc.filtered", "mcp.guard.blocked", "mcp.tool_call", "mcp.event", "mcp.configuration", "firewall.http_access", "firewall.token_usage", "firewall.model_routing", - "firewall.steering", "firewall.event", "model_routing.outcome", - "model_endpoint.mismatch", "model.resolution", + "firewall.upstream_error", "firewall.steering", "firewall.event", "model_routing.outcome", + "model_endpoint.mismatch", "model.resolution", "model.config", "model.baseline_estimate", "safe_output.request", "safe_output.result", "safe_output.error", "experiment.state", "experiment.assignment", "grader.manifest", "grader.result", "eval.result", "github_api.rate_limit", "usage.report", "execution.result", diff --git a/.github/workflows/sighthound-security-scan.lock.yml b/.github/workflows/sighthound-security-scan.lock.yml index 91e49469bc6..5492cd8c2c5 100644 --- a/.github/workflows/sighthound-security-scan.lock.yml +++ b/.github/workflows/sighthound-security-scan.lock.yml @@ -163,6 +163,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ›ก๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6-sol":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/skillet.lock.yml b/.github/workflows/skillet.lock.yml index 5da6165d80d..24a1527cada 100644 --- a/.github/workflows/skillet.lock.yml +++ b/.github/workflows/skillet.lock.yml @@ -187,6 +187,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿณ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6-luna":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index 61b73b79d38..8ddbf4b50bc 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -185,6 +185,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-agent-all-merged.lock.yml b/.github/workflows/smoke-agent-all-merged.lock.yml index 645fcbebb62..f46a58f89a8 100644 --- a/.github/workflows/smoke-agent-all-merged.lock.yml +++ b/.github/workflows/smoke-agent-all-merged.lock.yml @@ -188,6 +188,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-agent-all-none.lock.yml b/.github/workflows/smoke-agent-all-none.lock.yml index e947ea67453..36a670682bc 100644 --- a/.github/workflows/smoke-agent-all-none.lock.yml +++ b/.github/workflows/smoke-agent-all-none.lock.yml @@ -188,6 +188,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-agent-public-approved.lock.yml b/.github/workflows/smoke-agent-public-approved.lock.yml index 8626c8142bd..3c7989dd3ec 100644 --- a/.github/workflows/smoke-agent-public-approved.lock.yml +++ b/.github/workflows/smoke-agent-public-approved.lock.yml @@ -190,6 +190,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-agent-public-none.lock.yml b/.github/workflows/smoke-agent-public-none.lock.yml index 09ddedbd973..699e5cc6c4c 100644 --- a/.github/workflows/smoke-agent-public-none.lock.yml +++ b/.github/workflows/smoke-agent-public-none.lock.yml @@ -188,6 +188,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-agent-scoped-approved.lock.yml b/.github/workflows/smoke-agent-scoped-approved.lock.yml index cb46471c6e7..03ee967090b 100644 --- a/.github/workflows/smoke-agent-scoped-approved.lock.yml +++ b/.github/workflows/smoke-agent-scoped-approved.lock.yml @@ -190,6 +190,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-agy.lock.yml b/.github/workflows/smoke-agy.lock.yml index d5508b1402a..126613825c8 100644 --- a/.github/workflows/smoke-agy.lock.yml +++ b/.github/workflows/smoke-agy.lock.yml @@ -180,6 +180,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "50" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/smoke-aider.lock.yml b/.github/workflows/smoke-aider.lock.yml index b72e79c1ffd..e6e7208ff70 100644 --- a/.github/workflows/smoke-aider.lock.yml +++ b/.github/workflows/smoke-aider.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"816bdfdb02dc95e69afc21d63bf937607ed9a7659c028d699a12e096fae82ddf","body_hash":"03b6011bf304eb9aa0200a07c5fa638ffc20d960a1d41ff2f317fec94c1c0aec","strict":true,"agent_id":"aider","agent_model":"copilot/claude-haiku-5.5","engine_versions":{"aider":"0.86.2"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"d75e36f7cbb6aa886ad28cd11ec633b5a909c48d59defcee4e39d8b7a77cd4e5","body_hash":"03b6011bf304eb9aa0200a07c5fa638ffc20d960a1d41ff2f317fec94c1c0aec","strict":true,"agent_id":"aider","agent_model":"copilot/claude-haiku-5.5","engine_versions":{"aider":"0.86.2"}} # gh-aw-manifest: {"version":1,"secrets":["GH_AW_DEFAULT_OTLP_ENDPOINT","GH_AW_DEFAULT_OTLP_HEADERS","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"3d3c42e5aac5ba805825da76410c181273ba90b1","version":"v7.0.1"},{"repo":"actions/download-artifact","sha":"9000827ccba6bdab643e8b6fd33ac0654aef8333","version":"v8.0.2"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"949feb2413d6458794dcd2491c4babbbce0c15c1","version":"v7.1.0"},{"repo":"actions/setup-python","sha":"5fda3b95a4ea91299a34e894583c3862153e4b97","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"cf430e030ddbb5b0abf93d22962f4752f3646cd9","version":"v7.0.2"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.28.70","digest":"sha256:b15ab48cbbab02904eb9bbd359a398db59690eebbea1e6934d47ed2bb407dd34","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.28.70@sha256:b15ab48cbbab02904eb9bbd359a398db59690eebbea1e6934d47ed2bb407dd34"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.28.70","digest":"sha256:9ac8f9c7294e892c916de3da9d2588dfd8cd4931e5c39b00143266d7ed9fd52a","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.28.70@sha256:9ac8f9c7294e892c916de3da9d2588dfd8cd4931e5c39b00143266d7ed9fd52a"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.28.70","digest":"sha256:372ac51a5cccffdfe484f3f7be427d2d1c566e8ae550d55bd45d9fd166a154b4","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.28.70@sha256:372ac51a5cccffdfe484f3f7be427d2d1c566e8ae550d55bd45d9fd166a154b4"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.28.70","digest":"sha256:b5bc53f4becfd96e926e63c83831f1b3c9512f713c83161d2b8c9b7204b3e917","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.28.70@sha256:b5bc53f4becfd96e926e63c83831f1b3c9512f713c83161d2b8c9b7204b3e917"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.36","digest":"sha256:b4d2856018959c798b3e3f81ae4ab5b275e06354e123e1f7971de931f2f450f2","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.36@sha256:b4d2856018959c798b3e3f81ae4ab5b275e06354e123e1f7971de931f2f450f2"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:41835613992df88f51e923bad486f96dfb2e6cda29f13e217df41833284ae382","pinned_image":"ghcr.io/github/gh-aw-node@sha256:41835613992df88f51e923bad486f96dfb2e6cda29f13e217df41833284ae382"},{"image":"ghcr.io/github/github-mcp-server:v2.0.2","digest":"sha256:ffced0d76e77428532a2ced185516992d77fd146d69eec2f244e6237d1a97796","pinned_image":"ghcr.io/github/github-mcp-server:v2.0.2@sha256:ffced0d76e77428532a2ced185516992d77fd146d69eec2f244e6237d1a97796"}],"has_pull_request":true,"mcp_servers":[{"name":"safeoutputs","tools":["add_comment","add_labels","create_issue","noop","report_incomplete","report_missing_data","report_missing_tool"]}],"threat_detection":{"mode":"enabled"},"admission":true} # This file was automatically generated by gh-aw. DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md # @@ -184,6 +184,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿง‘\u200dโœˆ๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-haiku-5.5":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}}}}}}' @@ -536,7 +538,7 @@ jobs: GH_AW_DEFAULT_ADMISSION_URL: ${{ vars.GH_AW_DEFAULT_ADMISSION_URL }} GH_AW_DEFAULT_ADMISSION_AUDIENCE: ${{ vars.GH_AW_DEFAULT_ADMISSION_AUDIENCE }} GH_AW_DEFAULT_ADMISSION_ON_OUTAGE: ${{ vars.GH_AW_DEFAULT_ADMISSION_ON_OUTAGE }} - GH_AW_ADMISSION_WORKFLOW_HASH: "816bdfdb02dc95e69afc21d63bf937607ed9a7659c028d699a12e096fae82ddf:03b6011bf304eb9aa0200a07c5fa638ffc20d960a1d41ff2f317fec94c1c0aec" + GH_AW_ADMISSION_WORKFLOW_HASH: "d75e36f7cbb6aa886ad28cd11ec633b5a909c48d59defcee4e39d8b7a77cd4e5:03b6011bf304eb9aa0200a07c5fa638ffc20d960a1d41ff2f317fec94c1c0aec" GH_AW_INFO_WORKFLOW_ID: ${{ job.workflow_ref }} GITHUB_ACTOR: ${{ github.actor }} GITHUB_TRIGGERING_ACTOR: ${{ github.triggering_actor }} @@ -1215,8 +1217,8 @@ jobs: "mcp.rpc.request", "mcp.rpc.response", "mcp.difc.filtered", "mcp.guard.blocked", "mcp.tool_call", "mcp.event", "mcp.configuration", "firewall.http_access", "firewall.token_usage", "firewall.model_routing", - "firewall.steering", "firewall.event", "model_routing.outcome", - "model_endpoint.mismatch", "model.resolution", + "firewall.upstream_error", "firewall.steering", "firewall.event", "model_routing.outcome", + "model_endpoint.mismatch", "model.resolution", "model.config", "model.baseline_estimate", "safe_output.request", "safe_output.result", "safe_output.error", "experiment.state", "experiment.assignment", "grader.manifest", "grader.result", "eval.result", "github_api.rate_limit", "usage.report", "execution.result", @@ -2257,7 +2259,7 @@ jobs: GH_AW_DEFAULT_ADMISSION_URL: ${{ vars.GH_AW_DEFAULT_ADMISSION_URL }} GH_AW_DEFAULT_ADMISSION_AUDIENCE: ${{ vars.GH_AW_DEFAULT_ADMISSION_AUDIENCE }} GH_AW_DEFAULT_ADMISSION_ON_OUTAGE: ${{ vars.GH_AW_DEFAULT_ADMISSION_ON_OUTAGE }} - GH_AW_ADMISSION_WORKFLOW_HASH: "816bdfdb02dc95e69afc21d63bf937607ed9a7659c028d699a12e096fae82ddf:03b6011bf304eb9aa0200a07c5fa638ffc20d960a1d41ff2f317fec94c1c0aec" + GH_AW_ADMISSION_WORKFLOW_HASH: "d75e36f7cbb6aa886ad28cd11ec633b5a909c48d59defcee4e39d8b7a77cd4e5:03b6011bf304eb9aa0200a07c5fa638ffc20d960a1d41ff2f317fec94c1c0aec" GH_AW_INFO_WORKFLOW_ID: ${{ job.workflow_ref }} GITHUB_ACTOR: ${{ github.actor }} GITHUB_TRIGGERING_ACTOR: ${{ github.triggering_actor }} diff --git a/.github/workflows/smoke-azure-codex.lock.yml b/.github/workflows/smoke-azure-codex.lock.yml index b58bdbbf29a..9a45454da59 100644 --- a/.github/workflows/smoke-azure-codex.lock.yml +++ b/.github/workflows/smoke-azure-codex.lock.yml @@ -160,6 +160,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.3-codex":{"cost":{"cache_read":"1.75e-07","input":"1.75e-06","output":"1.4e-05"}}}}}}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/smoke-azure-pi.lock.yml b/.github/workflows/smoke-azure-pi.lock.yml index 69036a45acc..864d49f5cab 100644 --- a/.github/workflows/smoke-azure-pi.lock.yml +++ b/.github/workflows/smoke-azure-pi.lock.yml @@ -160,6 +160,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/smoke-builtin-ledgers.lock.yml b/.github/workflows/smoke-builtin-ledgers.lock.yml index 227bb4d7207..3c14f4b91ff 100644 --- a/.github/workflows/smoke-builtin-ledgers.lock.yml +++ b/.github/workflows/smoke-builtin-ledgers.lock.yml @@ -159,6 +159,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.3-codex":{"cost":{"cache_read":"1.75e-07","input":"1.75e-06","output":"1.4e-05"}}}}}}' diff --git a/.github/workflows/smoke-call-workflow.lock.yml b/.github/workflows/smoke-call-workflow.lock.yml index c5a6453e234..09b914b9d2d 100644 --- a/.github/workflows/smoke-call-workflow.lock.yml +++ b/.github/workflows/smoke-call-workflow.lock.yml @@ -189,6 +189,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-5.3-codex":{"cost":{"cache_read":"1.75e-07","input":"1.75e-06","output":"1.4e-05"}}}}}}' diff --git a/.github/workflows/smoke-checkout-pr-dispatch.lock.yml b/.github/workflows/smoke-checkout-pr-dispatch.lock.yml index 37006d0dd20..9f63e27be24 100644 --- a/.github/workflows/smoke-checkout-pr-dispatch.lock.yml +++ b/.github/workflows/smoke-checkout-pr-dispatch.lock.yml @@ -187,6 +187,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-ci.lock.yml b/.github/workflows/smoke-ci.lock.yml index 054d13db25d..9a98f38cb1e 100644 --- a/.github/workflows/smoke-ci.lock.yml +++ b/.github/workflows/smoke-ci.lock.yml @@ -197,6 +197,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-claude-auto.lock.yml b/.github/workflows/smoke-claude-auto.lock.yml index 54a47d42265..c4a477bd59b 100644 --- a/.github/workflows/smoke-claude-auto.lock.yml +++ b/.github/workflows/smoke-claude-auto.lock.yml @@ -159,6 +159,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/smoke-claude-copilot-auto.lock.yml b/.github/workflows/smoke-claude-copilot-auto.lock.yml index a754556bac4..4b0e60bdd1c 100644 --- a/.github/workflows/smoke-claude-copilot-auto.lock.yml +++ b/.github/workflows/smoke-claude-copilot-auto.lock.yml @@ -159,6 +159,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/smoke-claude-copilot.lock.yml b/.github/workflows/smoke-claude-copilot.lock.yml index ae06f4a1afe..eafef51ec45 100644 --- a/.github/workflows/smoke-claude-copilot.lock.yml +++ b/.github/workflows/smoke-claude-copilot.lock.yml @@ -162,6 +162,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/smoke-claude-dynamic.lock.yml b/.github/workflows/smoke-claude-dynamic.lock.yml index 330c25ffa39..9e8654fcf55 100644 --- a/.github/workflows/smoke-claude-dynamic.lock.yml +++ b/.github/workflows/smoke-claude-dynamic.lock.yml @@ -174,6 +174,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"anthropic":{"models":{"claude-sonnet-4-6":{"cost":{"cache_read":"3e-07","cache_write":"3.75e-06","input":"3e-06","output":"1.5e-05"}}}}}}' uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/smoke-claude-on-copilot.lock.yml b/.github/workflows/smoke-claude-on-copilot.lock.yml index 834cc6c9e7d..e2fbdb82260 100644 --- a/.github/workflows/smoke-claude-on-copilot.lock.yml +++ b/.github/workflows/smoke-claude-on-copilot.lock.yml @@ -177,6 +177,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/smoke-claude-routed.lock.yml b/.github/workflows/smoke-claude-routed.lock.yml index 6f42bd7dd99..114d74290bc 100644 --- a/.github/workflows/smoke-claude-routed.lock.yml +++ b/.github/workflows/smoke-claude-routed.lock.yml @@ -180,6 +180,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":true,"goal":"cost","mode":"economy","allowed_models":["claude-sonnet-5"]},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-claude-sub-agents.lock.yml b/.github/workflows/smoke-claude-sub-agents.lock.yml index de81b74a5ea..29437b566f1 100644 --- a/.github/workflows/smoke-claude-sub-agents.lock.yml +++ b/.github/workflows/smoke-claude-sub-agents.lock.yml @@ -159,6 +159,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index f3cd228621d..b8d310b1f21 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -206,6 +206,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":["*opus*"]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-codex-auto.lock.yml b/.github/workflows/smoke-codex-auto.lock.yml index ed907a6b8c5..f3c88cf0434 100644 --- a/.github/workflows/smoke-codex-auto.lock.yml +++ b/.github/workflows/smoke-codex-auto.lock.yml @@ -159,6 +159,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/smoke-codex-bare-auto.lock.yml b/.github/workflows/smoke-codex-bare-auto.lock.yml index 6f4138b094c..bf148e30a61 100644 --- a/.github/workflows/smoke-codex-bare-auto.lock.yml +++ b/.github/workflows/smoke-codex-bare-auto.lock.yml @@ -159,6 +159,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index 531a01fd2be..5ac166ebba0 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -201,6 +201,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml index c4a7fd4b0ea..b7edac135a1 100644 --- a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml @@ -241,6 +241,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "60" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-copilot-aoai-entra.lock.yml b/.github/workflows/smoke-copilot-aoai-entra.lock.yml index 3ff11a1a17e..2b52f52daf2 100644 --- a/.github/workflows/smoke-copilot-aoai-entra.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-entra.lock.yml @@ -244,6 +244,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "60" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml index 340ee2499e1..bd23017c5be 100644 --- a/.github/workflows/smoke-copilot-arm.lock.yml +++ b/.github/workflows/smoke-copilot-arm.lock.yml @@ -201,6 +201,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-copilot-auto.lock.yml b/.github/workflows/smoke-copilot-auto.lock.yml index 11850d825cc..e913e54bd5b 100644 --- a/.github/workflows/smoke-copilot-auto.lock.yml +++ b/.github/workflows/smoke-copilot-auto.lock.yml @@ -183,6 +183,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸŒธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-copilot-dynamic-workflow.lock.yml b/.github/workflows/smoke-copilot-dynamic-workflow.lock.yml index 4be693a1a21..6b1ec2b05e1 100644 --- a/.github/workflows/smoke-copilot-dynamic-workflow.lock.yml +++ b/.github/workflows/smoke-copilot-dynamic-workflow.lock.yml @@ -212,6 +212,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_TARGET_REPO: ${{ steps.resolve-host-repo.outputs.target_repo }} diff --git a/.github/workflows/smoke-copilot-mai.lock.yml b/.github/workflows/smoke-copilot-mai.lock.yml index e3bcff8775e..568acd964f0 100644 --- a/.github/workflows/smoke-copilot-mai.lock.yml +++ b/.github/workflows/smoke-copilot-mai.lock.yml @@ -182,6 +182,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โšก" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"mai-code-1.1-flash":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' diff --git a/.github/workflows/smoke-copilot-routed-claude.lock.yml b/.github/workflows/smoke-copilot-routed-claude.lock.yml index f266f38cb3e..feb6ea9f6cd 100644 --- a/.github/workflows/smoke-copilot-routed-claude.lock.yml +++ b/.github/workflows/smoke-copilot-routed-claude.lock.yml @@ -182,6 +182,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":true,"goal":"cost","mode":"auto","allowed_models":["claude-sonnet-5"]},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-copilot-routed-steering.lock.yml b/.github/workflows/smoke-copilot-routed-steering.lock.yml index 56e9ac8f256..5cee11844f4 100644 --- a/.github/workflows/smoke-copilot-routed-steering.lock.yml +++ b/.github/workflows/smoke-copilot-routed-steering.lock.yml @@ -182,6 +182,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":true,"goal":"cost","mode":"economy","allowed_models":["gpt-5.6-luna"]},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "7" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-copilot-routed.lock.yml b/.github/workflows/smoke-copilot-routed.lock.yml index 566ac3f484d..1df8e3774f3 100644 --- a/.github/workflows/smoke-copilot-routed.lock.yml +++ b/.github/workflows/smoke-copilot-routed.lock.yml @@ -181,6 +181,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":true,"goal":"cost","mode":"economy","allowed_models":["gpt-5.6-luna","claude-haiku-4.5"]},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml b/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml index 553beb1b788..fefeae5ca74 100644 --- a/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml +++ b/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml @@ -181,6 +181,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":true,"goal":"cost","mode":"economy","allowed_models":["claude-haiku-4.5"]},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-copilot-sdk-routed.lock.yml b/.github/workflows/smoke-copilot-sdk-routed.lock.yml index e775cbff856..831b88533be 100644 --- a/.github/workflows/smoke-copilot-sdk-routed.lock.yml +++ b/.github/workflows/smoke-copilot-sdk-routed.lock.yml @@ -179,6 +179,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":true,"goal":"cost","mode":"economy","allowed_models":["gpt-5.6-luna"]},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-copilot-sdk.lock.yml b/.github/workflows/smoke-copilot-sdk.lock.yml index 31ee17ce305..2fbb4dd7e58 100644 --- a/.github/workflows/smoke-copilot-sdk.lock.yml +++ b/.github/workflows/smoke-copilot-sdk.lock.yml @@ -180,6 +180,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ฌ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-sonnet-5":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}},"gpt-5.3-codex":{"cost":{"cache_read":"1.75e-07","input":"1.75e-06","output":"1.4e-05"}}}}}}' diff --git a/.github/workflows/smoke-copilot-small.lock.yml b/.github/workflows/smoke-copilot-small.lock.yml index 9ae81aa4ce6..4311eefeffc 100644 --- a/.github/workflows/smoke-copilot-small.lock.yml +++ b/.github/workflows/smoke-copilot-small.lock.yml @@ -182,6 +182,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿชถ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-copilot-sub-agents.lock.yml b/.github/workflows/smoke-copilot-sub-agents.lock.yml index a39f33a04a6..8c081af3646 100644 --- a/.github/workflows/smoke-copilot-sub-agents.lock.yml +++ b/.github/workflows/smoke-copilot-sub-agents.lock.yml @@ -203,6 +203,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.3-codex":{"cost":{"cache_read":"1.75e-07","input":"1.75e-06","output":"1.4e-05"}}}}}}' diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index 4af93c39f8c..24acf52a727 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -245,6 +245,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml index 24fb8ef1524..6b83eb74f81 100644 --- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml @@ -188,6 +188,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-crush.lock.yml b/.github/workflows/smoke-crush.lock.yml index f0b3388ebbe..3d525f32a93 100644 --- a/.github/workflows/smoke-crush.lock.yml +++ b/.github/workflows/smoke-crush.lock.yml @@ -189,6 +189,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-cursor.lock.yml b/.github/workflows/smoke-cursor.lock.yml index ad0463d2ac9..f67ce531a0e 100644 --- a/.github/workflows/smoke-cursor.lock.yml +++ b/.github/workflows/smoke-cursor.lock.yml @@ -191,6 +191,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ–ฑ๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-deepseek-harness.lock.yml b/.github/workflows/smoke-deepseek-harness.lock.yml index 51128ab8305..55fa212258a 100644 --- a/.github/workflows/smoke-deepseek-harness.lock.yml +++ b/.github/workflows/smoke-deepseek-harness.lock.yml @@ -192,6 +192,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-drive.lock.yml b/.github/workflows/smoke-drive.lock.yml index f4cabbb8962..ee3ece408fc 100644 --- a/.github/workflows/smoke-drive.lock.yml +++ b/.github/workflows/smoke-drive.lock.yml @@ -189,6 +189,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ’พ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"openai":{"models":{"gpt-6-astra":{"cost":{"cache_read":"1e-06","cache_write":"1.25e-05","input":"1e-05","output":"5e-05"}}}}}}' diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml index 369fd895d39..4d436a196eb 100644 --- a/.github/workflows/smoke-gemini.lock.yml +++ b/.github/workflows/smoke-gemini.lock.yml @@ -236,6 +236,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-github-claude.lock.yml b/.github/workflows/smoke-github-claude.lock.yml index 5505bc442ab..c08d85ef394 100644 --- a/.github/workflows/smoke-github-claude.lock.yml +++ b/.github/workflows/smoke-github-claude.lock.yml @@ -177,6 +177,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-haiku-4.5":{"cost":{"cache_read":"1.0000000000000001e-07","cache_write":"1.25e-06","input":"1e-06","output":"5e-06"}},"claude-sonnet-5":{"cost":{"cache_read":"2e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}},"claude-sonnet-5.5":{"cost":{"cache_read":"1e-07","cache_write":"2.5e-06","input":"2e-06","output":"1e-05"}}}}}}' diff --git a/.github/workflows/smoke-github-codex.lock.yml b/.github/workflows/smoke-github-codex.lock.yml index 96cfffff94f..44bb05b615f 100644 --- a/.github/workflows/smoke-github-codex.lock.yml +++ b/.github/workflows/smoke-github-codex.lock.yml @@ -157,6 +157,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/smoke-goose.lock.yml b/.github/workflows/smoke-goose.lock.yml index 8ac13a02427..c977632dff3 100644 --- a/.github/workflows/smoke-goose.lock.yml +++ b/.github/workflows/smoke-goose.lock.yml @@ -191,6 +191,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "20" GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿชฟ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-issues.lock.yml b/.github/workflows/smoke-issues.lock.yml index 0f862298727..f98ac30a7d2 100644 --- a/.github/workflows/smoke-issues.lock.yml +++ b/.github/workflows/smoke-issues.lock.yml @@ -164,6 +164,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/smoke-kiro.lock.yml b/.github/workflows/smoke-kiro.lock.yml index 57594309735..5cc8c248331 100644 --- a/.github/workflows/smoke-kiro.lock.yml +++ b/.github/workflows/smoke-kiro.lock.yml @@ -192,6 +192,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml index f12d68c9cb2..55cea9a0be0 100644 --- a/.github/workflows/smoke-multi-pr.lock.yml +++ b/.github/workflows/smoke-multi-pr.lock.yml @@ -188,6 +188,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-opencode.lock.yml b/.github/workflows/smoke-opencode.lock.yml index ae03c1b3203..da2316bf50b 100644 --- a/.github/workflows/smoke-opencode.lock.yml +++ b/.github/workflows/smoke-opencode.lock.yml @@ -195,6 +195,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-otel-backends.lock.yml b/.github/workflows/smoke-otel-backends.lock.yml index e419bda0b2c..12b767f144c 100644 --- a/.github/workflows/smoke-otel-backends.lock.yml +++ b/.github/workflows/smoke-otel-backends.lock.yml @@ -201,6 +201,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-6-astra":{"cost":{"cache_read":"1e-06","cache_write":"1.25e-05","input":"1e-05","output":"5e-05"}}}}}}' diff --git a/.github/workflows/smoke-pi-auto.lock.yml b/.github/workflows/smoke-pi-auto.lock.yml index 7127d6bac92..4910fdcd765 100644 --- a/.github/workflows/smoke-pi-auto.lock.yml +++ b/.github/workflows/smoke-pi-auto.lock.yml @@ -159,6 +159,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/smoke-pi-routed-claude.lock.yml b/.github/workflows/smoke-pi-routed-claude.lock.yml index cc11aa63b92..975ff29c3c9 100644 --- a/.github/workflows/smoke-pi-routed-claude.lock.yml +++ b/.github/workflows/smoke-pi-routed-claude.lock.yml @@ -181,6 +181,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":true,"goal":"cost","mode":"robust","allowed_models":["claude-sonnet-5"]},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-pi-routed.lock.yml b/.github/workflows/smoke-pi-routed.lock.yml index 3e782f2ac51..9a9cb102abb 100644 --- a/.github/workflows/smoke-pi-routed.lock.yml +++ b/.github/workflows/smoke-pi-routed.lock.yml @@ -179,6 +179,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":true,"goal":"cost","mode":"economy","allowed_models":["gpt-5.6-luna"]},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงญ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-pi-sub-agents.lock.yml b/.github/workflows/smoke-pi-sub-agents.lock.yml index 1708080eb4b..fac12457974 100644 --- a/.github/workflows/smoke-pi-sub-agents.lock.yml +++ b/.github/workflows/smoke-pi-sub-agents.lock.yml @@ -156,6 +156,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-pi.lock.yml b/.github/workflows/smoke-pi.lock.yml index b5f8257ea6b..fb1d3d3d6dd 100644 --- a/.github/workflows/smoke-pi.lock.yml +++ b/.github/workflows/smoke-pi.lock.yml @@ -191,6 +191,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml index 85334533f52..c32048d6ad0 100644 --- a/.github/workflows/smoke-project.lock.yml +++ b/.github/workflows/smoke-project.lock.yml @@ -233,6 +233,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-pydantic.lock.yml b/.github/workflows/smoke-pydantic.lock.yml index 3802ba1d11e..e5e12244557 100644 --- a/.github/workflows/smoke-pydantic.lock.yml +++ b/.github/workflows/smoke-pydantic.lock.yml @@ -185,6 +185,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-repo-memory-ledger.lock.yml b/.github/workflows/smoke-repo-memory-ledger.lock.yml index 6b36e9413ad..232c761a965 100644 --- a/.github/workflows/smoke-repo-memory-ledger.lock.yml +++ b/.github/workflows/smoke-repo-memory-ledger.lock.yml @@ -163,6 +163,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.3-codex":{"cost":{"cache_read":"1.75e-07","input":"1.75e-06","output":"1.4e-05"}}}}}}' diff --git a/.github/workflows/smoke-security-alerts.lock.yml b/.github/workflows/smoke-security-alerts.lock.yml index a6c54808819..f6b8f42b96d 100644 --- a/.github/workflows/smoke-security-alerts.lock.yml +++ b/.github/workflows/smoke-security-alerts.lock.yml @@ -178,6 +178,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/.github/workflows/smoke-service-ports.lock.yml b/.github/workflows/smoke-service-ports.lock.yml index 3c46f229e4c..40bd76c88c8 100644 --- a/.github/workflows/smoke-service-ports.lock.yml +++ b/.github/workflows/smoke-service-ports.lock.yml @@ -179,6 +179,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "docker-sudo-iptables" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-haiku-5.5":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}},"gpt-5.3-codex":{"cost":{"cache_read":"1.75e-07","input":"1.75e-06","output":"1.4e-05"}},"gpt-5.6-luna":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' diff --git a/.github/workflows/smoke-temporary-id.lock.yml b/.github/workflows/smoke-temporary-id.lock.yml index 725faaa98fb..7536b552669 100644 --- a/.github/workflows/smoke-temporary-id.lock.yml +++ b/.github/workflows/smoke-temporary-id.lock.yml @@ -227,6 +227,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":false}' diff --git a/.github/workflows/smoke-test-tools.lock.yml b/.github/workflows/smoke-test-tools.lock.yml index fcb0f75a618..23c87977db0 100644 --- a/.github/workflows/smoke-test-tools.lock.yml +++ b/.github/workflows/smoke-test-tools.lock.yml @@ -191,6 +191,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"mai-code-1.1-flash":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' diff --git a/.github/workflows/smoke-update-cross-repo-pr.lock.yml b/.github/workflows/smoke-update-cross-repo-pr.lock.yml index b1db4013cd4..15274771a97 100644 --- a/.github/workflows/smoke-update-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-update-cross-repo-pr.lock.yml @@ -190,6 +190,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/smoke-work-queue.lock.yml b/.github/workflows/smoke-work-queue.lock.yml index e688204d7f5..e7eb2957806 100644 --- a/.github/workflows/smoke-work-queue.lock.yml +++ b/.github/workflows/smoke-work-queue.lock.yml @@ -159,6 +159,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "cloud-hypervisor" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-haiku-5.5":{"cost":{"cache_read":"1e-08","cache_write":"1.25e-07","input":"1e-07","output":"5e-07"}},"gpt-5.3-codex":{"cost":{"cache_read":"1.75e-07","input":"1.75e-06","output":"1.4e-05"}},"gpt-5.6-luna":{"cost":{"cache_read":"2e-08","cache_write":"2.5e-07","input":"2e-07","output":"1.2e-06"}}}}}}' diff --git a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml index 244d49d500e..b8bb4814a25 100644 --- a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml +++ b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml @@ -246,6 +246,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_TARGET_REPO: ${{ steps.resolve-host-repo.outputs.target_repo }} diff --git a/.github/workflows/smoke-workflow-call.lock.yml b/.github/workflows/smoke-workflow-call.lock.yml index c917cb22723..38ecb90ef18 100644 --- a/.github/workflows/smoke-workflow-call.lock.yml +++ b/.github/workflows/smoke-workflow-call.lock.yml @@ -243,6 +243,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_TARGET_REPO: ${{ steps.resolve-host-repo.outputs.target_repo }} diff --git a/.github/workflows/spec-enforcer.lock.yml b/.github/workflows/spec-enforcer.lock.yml index 5b110fd50e2..9dafb03ec08 100644 --- a/.github/workflows/spec-enforcer.lock.yml +++ b/.github/workflows/spec-enforcer.lock.yml @@ -181,6 +181,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“‹" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/spec-extractor.lock.yml b/.github/workflows/spec-extractor.lock.yml index 2efe126d45e..0b185f8b04b 100644 --- a/.github/workflows/spec-extractor.lock.yml +++ b/.github/workflows/spec-extractor.lock.yml @@ -177,6 +177,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“‹" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/spec-librarian.lock.yml b/.github/workflows/spec-librarian.lock.yml index 9363736d902..d13c22b4b13 100644 --- a/.github/workflows/spec-librarian.lock.yml +++ b/.github/workflows/spec-librarian.lock.yml @@ -180,6 +180,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“š" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/squad-game-planner.lock.yml b/.github/workflows/squad-game-planner.lock.yml index 3885c6f2a45..77f3ac57d95 100644 --- a/.github/workflows/squad-game-planner.lock.yml +++ b/.github/workflows/squad-game-planner.lock.yml @@ -167,6 +167,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸŽฎ" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/squad-implement-worker.lock.yml b/.github/workflows/squad-implement-worker.lock.yml index 5b2670cfd3d..bd728cc6e26 100644 --- a/.github/workflows/squad-implement-worker.lock.yml +++ b/.github/workflows/squad-implement-worker.lock.yml @@ -188,6 +188,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_SOURCE: "bradygaster/squad/workflows/squad-implement-worker.md@a70c752010f8adfb33f06c7aafb32db09aab1060" GH_AW_INFO_BODY_MODIFIED: "false" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/squad-plan.lock.yml b/.github/workflows/squad-plan.lock.yml index bd285768889..b9491fb6dfe 100644 --- a/.github/workflows/squad-plan.lock.yml +++ b/.github/workflows/squad-plan.lock.yml @@ -177,6 +177,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿง‘\u200d๐Ÿค\u200d๐Ÿง‘" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/squad.lock.yml b/.github/workflows/squad.lock.yml index 95a351abf72..423d6584e69 100644 --- a/.github/workflows/squad.lock.yml +++ b/.github/workflows/squad.lock.yml @@ -203,6 +203,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_SOURCE: "bradygaster/squad/workflows/squad.md@dev" GH_AW_INFO_BODY_MODIFIED: "false" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿค–" diff --git a/.github/workflows/stale-pr-cleanup.lock.yml b/.github/workflows/stale-pr-cleanup.lock.yml index 49bd791cd10..5e6ca2609b0 100644 --- a/.github/workflows/stale-pr-cleanup.lock.yml +++ b/.github/workflows/stale-pr-cleanup.lock.yml @@ -165,6 +165,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงน" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml index cdffcc73ba2..c6ffaa83fba 100644 --- a/.github/workflows/stale-repo-identifier.lock.yml +++ b/.github/workflows/stale-repo-identifier.lock.yml @@ -187,6 +187,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/static-analysis-report.lock.yml b/.github/workflows/static-analysis-report.lock.yml index 6edc97e4ea4..c683e40ab0e 100644 --- a/.github/workflows/static-analysis-report.lock.yml +++ b/.github/workflows/static-analysis-report.lock.yml @@ -174,6 +174,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“Š" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/step-name-alignment.lock.yml b/.github/workflows/step-name-alignment.lock.yml index 75a10a8fd7d..03be785d89a 100644 --- a/.github/workflows/step-name-alignment.lock.yml +++ b/.github/workflows/step-name-alignment.lock.yml @@ -172,6 +172,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“‹" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/sub-issue-closer.lock.yml b/.github/workflows/sub-issue-closer.lock.yml index 4665d719d10..8a86eeeaa18 100644 --- a/.github/workflows/sub-issue-closer.lock.yml +++ b/.github/workflows/sub-issue-closer.lock.yml @@ -166,6 +166,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml index 84af9e4c7d5..3f30b1aad57 100644 --- a/.github/workflows/super-linter.lock.yml +++ b/.github/workflows/super-linter.lock.yml @@ -168,6 +168,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index 49c07a1415b..944233dff0f 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -179,6 +179,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/terminal-stylist.lock.yml b/.github/workflows/terminal-stylist.lock.yml index a1e2b84bda4..788318a33af 100644 --- a/.github/workflows/terminal-stylist.lock.yml +++ b/.github/workflows/terminal-stylist.lock.yml @@ -172,6 +172,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ’„" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.6-sol":{"cost":{"cache_read":"4e-07","cache_write":"5e-06","input":"4e-06","output":"2e-05"}}}}}}' diff --git a/.github/workflows/test-quality-sentinel.lock.yml b/.github/workflows/test-quality-sentinel.lock.yml index 7e16dfe835e..d0e592c9e5e 100644 --- a/.github/workflows/test-quality-sentinel.lock.yml +++ b/.github/workflows/test-quality-sentinel.lock.yml @@ -225,6 +225,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงช" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index fe1f9121aa2..3d434c80d5c 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -183,6 +183,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿงน" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/typist.lock.yml b/.github/workflows/typist.lock.yml index ca49c0c362f..0999d577e6c 100644 --- a/.github/workflows/typist.lock.yml +++ b/.github/workflows/typist.lock.yml @@ -215,6 +215,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โœ๏ธ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_FEATURES: '{"gh-aw-detection":true}' diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml index d0985e2396d..8323002aaaa 100644 --- a/.github/workflows/ubuntu-image-analyzer.lock.yml +++ b/.github/workflows/ubuntu-image-analyzer.lock.yml @@ -180,6 +180,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿง" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/uk-ai-operational-resilience.lock.yml b/.github/workflows/uk-ai-operational-resilience.lock.yml index 41feeeeb511..99998533c89 100644 --- a/.github/workflows/uk-ai-operational-resilience.lock.yml +++ b/.github/workflows/uk-ai-operational-resilience.lock.yml @@ -180,6 +180,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_SUB_AGENT_MODELS: "[{\"model\":\"small\",\"name\":\"asset-tier-classifier\",\"patterns\":[\"github-copilot/*haiku*\",\"anthropic/*haiku*\",\"github-copilot/gpt-5*mini*\",\"openai/gpt-5*mini*\",\"github-copilot/gpt-5*nano*\",\"openai/gpt-5*nano*\",\"github-copilot/gemini-*flash*lite*\",\"google/gemini-*flash*lite*\",\"gemini/gemini-*flash*lite*\"]},{\"model\":\"small\",\"name\":\"control-verifier\",\"patterns\":[\"github-copilot/*haiku*\",\"anthropic/*haiku*\",\"github-copilot/gpt-5*mini*\",\"openai/gpt-5*mini*\",\"github-copilot/gpt-5*nano*\",\"openai/gpt-5*nano*\",\"github-copilot/gemini-*flash*lite*\",\"google/gemini-*flash*lite*\",\"gemini/gemini-*flash*lite*\"]},{\"model\":\"small\",\"name\":\"ai-risk-scorer\",\"patterns\":[\"github-copilot/*haiku*\",\"anthropic/*haiku*\",\"github-copilot/gpt-5*mini*\",\"openai/gpt-5*mini*\",\"github-copilot/gpt-5*nano*\",\"openai/gpt-5*nano*\",\"github-copilot/gemini-*flash*lite*\",\"google/gemini-*flash*lite*\",\"gemini/gemini-*flash*lite*\"]}]" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 417626fc3d0..1c30c536260 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -186,6 +186,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/update-astro.lock.yml b/.github/workflows/update-astro.lock.yml index 2a308f28373..dc93467b64a 100644 --- a/.github/workflows/update-astro.lock.yml +++ b/.github/workflows/update-astro.lock.yml @@ -178,6 +178,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gpt-5.6-sol":{"cost":{"cache_read":"4e-07","cache_write":"5e-06","input":"4e-06","output":"2e-05"}}}}}}' diff --git a/.github/workflows/video-analyzer.lock.yml b/.github/workflows/video-analyzer.lock.yml index d46a7a42a27..a6b460c8384 100644 --- a/.github/workflows/video-analyzer.lock.yml +++ b/.github/workflows/video-analyzer.lock.yml @@ -167,6 +167,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸŽฌ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"gemini-3.7-flash":{"cost":{"cache_read":"7.5e-08","input":"7.5e-07","output":"3.75e-06"}}}}}}' diff --git a/.github/workflows/visual-regression-checker.lock.yml b/.github/workflows/visual-regression-checker.lock.yml index dd13d6e0d6d..62ffe3dbcf4 100644 --- a/.github/workflows/visual-regression-checker.lock.yml +++ b/.github/workflows/visual-regression-checker.lock.yml @@ -178,6 +178,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ‘๏ธ" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/weekly-blog-post-writer.lock.yml b/.github/workflows/weekly-blog-post-writer.lock.yml index 8d436eddb84..a22a9352e91 100644 --- a/.github/workflows/weekly-blog-post-writer.lock.yml +++ b/.github/workflows/weekly-blog-post-writer.lock.yml @@ -217,6 +217,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "โœ๏ธ" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/weekly-editors-health-check.lock.yml b/.github/workflows/weekly-editors-health-check.lock.yml index a1de666c496..6f306a805b2 100644 --- a/.github/workflows/weekly-editors-health-check.lock.yml +++ b/.github/workflows/weekly-editors-health-check.lock.yml @@ -171,6 +171,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/weekly-issue-summary.lock.yml b/.github/workflows/weekly-issue-summary.lock.yml index afdca2aa483..68a9bdf02d8 100644 --- a/.github/workflows/weekly-issue-summary.lock.yml +++ b/.github/workflows/weekly-issue-summary.lock.yml @@ -175,6 +175,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ“…" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/weekly-network-domains-audit.lock.yml b/.github/workflows/weekly-network-domains-audit.lock.yml index 2e40e47d0b4..1877dea0425 100644 --- a/.github/workflows/weekly-network-domains-audit.lock.yml +++ b/.github/workflows/weekly-network-domains-audit.lock.yml @@ -161,6 +161,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸŒ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml index b5350b3838e..249c587c5be 100644 --- a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml +++ b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml @@ -170,6 +170,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”’" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"github-copilot":{"models":{"claude-opus-5.5":{"cost":{"cache_read":"2e-07","cache_write":"5e-06","input":"4e-06","output":"2e-05"}}}}}}' diff --git a/.github/workflows/windows-grower.lock.yml b/.github/workflows/windows-grower.lock.yml index 246198e5acc..db9b356511d 100644 --- a/.github/workflows/windows-grower.lock.yml +++ b/.github/workflows/windows-grower.lock.yml @@ -170,6 +170,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸชŸ" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/windows.lock.yml b/.github/workflows/windows.lock.yml index ffbaf5e677b..a3cbbca7ff6 100644 --- a/.github/workflows/windows.lock.yml +++ b/.github/workflows/windows.lock.yml @@ -227,6 +227,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐ŸชŸ" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_TARGET_REPO: ${{ steps.resolve-host-repo.outputs.target_repo }} diff --git a/.github/workflows/workflow-generator.lock.yml b/.github/workflows/workflow-generator.lock.yml index 0055839f942..3418b9299cf 100644 --- a/.github/workflows/workflow-generator.lock.yml +++ b/.github/workflows/workflow-generator.lock.yml @@ -174,6 +174,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/workflow-health-manager.lock.yml b/.github/workflows/workflow-health-manager.lock.yml index 468104bdf93..926ce7863a6 100644 --- a/.github/workflows/workflow-health-manager.lock.yml +++ b/.github/workflows/workflow-health-manager.lock.yml @@ -169,6 +169,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"frontmatter"}' + GH_AW_INFO_MAX_AI_CREDITS: "1500" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿฅ" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.github/workflows/workflow-normalizer.lock.yml b/.github/workflows/workflow-normalizer.lock.yml index 0b596ff3d02..a1b8c91655c 100644 --- a/.github/workflows/workflow-normalizer.lock.yml +++ b/.github/workflows/workflow-normalizer.lock.yml @@ -174,6 +174,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”ง" GH_AW_COMPILED_STRICT: "true" diff --git a/.github/workflows/workflow-skill-extractor.lock.yml b/.github/workflows/workflow-skill-extractor.lock.yml index 97265c5f3b4..84e9ff25e38 100644 --- a/.github/workflows/workflow-skill-extractor.lock.yml +++ b/.github/workflows/workflow-skill-extractor.lock.yml @@ -167,6 +167,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-sdk" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_FRONTMATTER_EMOJI: "๐Ÿ”" GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 diff --git a/.gitignore b/.gitignore index 90155d11196..74699fe1110 100644 --- a/.gitignore +++ b/.gitignore @@ -84,6 +84,9 @@ logs/ !pkg/cli/testdata/model_routing_golden/**/sandbox/firewall/logs/** !pkg/cli/testdata/model_routing_golden_capture/**/sandbox/firewall/logs/ !pkg/cli/testdata/model_routing_golden_capture/**/sandbox/firewall/logs/** +!actions/setup/js/fixtures/routing-analytics/run-*/ +!actions/setup/js/fixtures/routing-analytics/run-*/**/sandbox/firewall/logs/ +!actions/setup/js/fixtures/routing-analytics/run-*/**/sandbox/firewall/logs/** # Benchmark results bench_results.txt diff --git a/.prettierignore b/.prettierignore index 3ca312f3cf8..be9dad71f29 100644 --- a/.prettierignore +++ b/.prettierignore @@ -25,3 +25,6 @@ schemas/outcomes-episodes.schema.json # Recorded byte-exact AWF reflection fixtures (SHA-256 pinned) actions/setup/js/test_data/awf_reflect/*.json + +# Verbatim routing-analytics run artifacts (github/gh-aw#70668) +actions/setup/js/fixtures/routing-analytics/**/*.json diff --git a/actions/setup/js/fixtures/routing-analytics/awf-10211/model-routing.jsonl b/actions/setup/js/fixtures/routing-analytics/awf-10211/model-routing.jsonl new file mode 100644 index 00000000000..7fa0d559ea5 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/awf-10211/model-routing.jsonl @@ -0,0 +1,2 @@ +{"_schema":"model-routing/v0.28.70","timestamp":"2026-10-21T00:08:55.071Z","event":"model_routing","stage":"request","request_id":"local-req-5","outcome":"failed","status":400,"error_code":"invalid_reasoning_effort","error_source":"upstream"} +{"_schema":"model-routing/v0.28.70","timestamp":"2026-10-21T00:08:55.072Z","event":"model_routing","stage":"request","request_id":"request-1","outcome":"failed","status":400,"error_code":"unsupported_reasoning_effort","error_type":"invalid_request_error","error_source":"awf"} diff --git a/actions/setup/js/fixtures/routing-analytics/awf-10211/upstream-errors.jsonl b/actions/setup/js/fixtures/routing-analytics/awf-10211/upstream-errors.jsonl new file mode 100644 index 00000000000..975ce27d33e --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/awf-10211/upstream-errors.jsonl @@ -0,0 +1,4 @@ +{"ts":1792540800000,"event":"UPSTREAM_ERROR_RESPONSE","request_id":"req-1","provider":"copilot","model":"claude-haiku-4.5","method":"POST","endpoint":"/v1/messages?beta=true","status":400,"upstream_host":"api.githubcopilot.com","upstream_request_ids":{},"response_content_type":"text/plain; charset=utf-8","response_headers":{"content-type":"text/plain; charset=utf-8"},"response_streaming":false,"response_transformed":false,"response_body_content_encoding":"utf8","response_body":"{\"error\":{\"message\":\"output_config.effort \\\"high\\\" was provided, but model claude-haiku-4.5 does not support reasoning effort\",\"code\":\"invalid_reasoning_effort\"}}","response_body_bytes":162,"response_body_captured_bytes":162,"response_body_truncated":false,"response_compressed":false,"error_code":"invalid_reasoning_effort"} +{"ts":1792540800001,"event":"UPSTREAM_ERROR_RESPONSE","request_id":"req-2","provider":"copilot","model":"gpt-5.6-luna","method":"POST","endpoint":"/responses","status":400,"upstream_host":"api.githubcopilot.com","upstream_request_ids":{},"response_content_type":"text/plain; charset=utf-8","response_headers":{"content-type":"text/plain; charset=utf-8"},"response_streaming":false,"response_transformed":false,"response_body_content_encoding":"utf8","response_body":"{\"error\":{\"code\":\"c\",\"type\":\"t\",\"param\":\"p\",\"message\":\"m\"}}","response_body_bytes":59,"response_body_captured_bytes":59,"response_body_truncated":false,"response_compressed":false,"error_code":"c","error_type":"t","error_param":"p"} +{"ts":1792540800002,"event":"UPSTREAM_ERROR_RESPONSE","request_id":"req-3","provider":"copilot","model":"claude-haiku-4.5","method":"POST","endpoint":"/v1/messages","status":400,"upstream_host":"api.githubcopilot.com","upstream_request_ids":{},"response_content_type":"text/plain; charset=utf-8","response_headers":{"content-type":"text/plain; charset=utf-8"},"response_streaming":false,"response_transformed":false,"response_body_content_encoding":"utf8","response_body":"{\"type\":\"error\",\"error\":{\"type\":\"overloaded_error\",\"message\":\"m\"}}","response_body_bytes":66,"response_body_captured_bytes":66,"response_body_truncated":false,"response_compressed":false,"error_type":"overloaded_error"} +{"ts":1792540800003,"event":"UPSTREAM_ERROR_RESPONSE","request_id":"req-4","provider":"copilot","model":"claude-haiku-4.5","method":"POST","endpoint":"/v1/messages?beta=true","status":400,"upstream_host":"api.githubcopilot.com","upstream_request_ids":{},"response_content_type":"text/plain; charset=utf-8","response_headers":{"content-type":"text/plain; charset=utf-8"},"response_streaming":false,"response_transformed":false,"response_body_content_encoding":"utf8","response_body":"The requested model is not supported","response_body_bytes":36,"response_body_captured_bytes":36,"response_body_truncated":false,"response_compressed":false} diff --git a/actions/setup/js/fixtures/routing-analytics/run-39499464895/agent/model-resolution.json b/actions/setup/js/fixtures/routing-analytics/run-39499464895/agent/model-resolution.json new file mode 100644 index 00000000000..f93f4335f12 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39499464895/agent/model-resolution.json @@ -0,0 +1,11 @@ +[ + { + "engine": "copilot", + "role": "mini-whoami", + "configured_model": "gpt-5.4-mini", + "resolved_model": null, + "provider": "copilot", + "status": "failed", + "cause": "model_unavailable" + } +] diff --git a/actions/setup/js/fixtures/routing-analytics/run-39499464895/aw_session.jsonl b/actions/setup/js/fixtures/routing-analytics/run-39499464895/aw_session.jsonl new file mode 100644 index 00000000000..451c833cc13 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39499464895/aw_session.jsonl @@ -0,0 +1,11 @@ +{"type":"session.format","data":{"version":1},"provenance":{"component":"collector","phase":"conclusion","path":"usage/aw_session.jsonl","index":0}} +{"type":"workflow.info","timestamp":"2026-10-20T21:20:47.191Z","data":{"dryRun":false,"engineId":"copilot","agentVersion":"1.0.98","awfVersion":"v0.28.62","mcpgVersion":"","model":"claude-haiku-4.5","requestedModel":"auto","modelRouting":{"status":"selected","source":"awf-routing","provider":"copilot","wireModel":"claude-haiku-4.5","model":"github-copilot/claude-haiku-4.5","effectiveEndpoint":"/chat/completions","selectedEndpoint":"/chat/completions","mode":"unknown","selectedId":"choice-0001","routerVersion":"0.1.3"},"triggerType":"workflow_dispatch","workflow":"Smoke Copilot SDK Routed Claude","workflowId":"github/gh-aw/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml@refs/heads/copilot/fix-copilot-sub-agent-models","workflowCallId":"39499464895-1:github/gh-aw/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml@refs/heads/copilot/fix-copilot-sub-agent-models","callerWorkflowRef":"github/gh-aw/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml@refs/heads/copilot/fix-copilot-sub-agent-models","repository":"github/gh-aw","runId":39499464895,"runAttempt":"1","ref":"refs/heads/copilot/fix-copilot-sub-agent-models","sha":"b9f7f48a3baa4e58e9509232f6eaaea674a942ff","actor":"SivaKesava1","targetRepo":""},"provenance":{"component":"workflow","phase":"agent","path":"runtime/aw_info.json","index":0,"timestampMs":1792531247191}} +{"type":"firewall.model_routing","timestamp":"2026-10-20T21:22:31.229Z","data":{"schema":"model-routing/v0.28.62","stage":"classification","purpose":"routing_classification","attempt":1,"classifierModel":"github-copilot/claude-haiku-4.5","classifierEffort":null},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl","index":0,"timestampMs":1792531351229}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T21:22:32.042Z","data":{"provider":"copilot","model":"claude-haiku-4.5","purpose":"routing_classification","path":"/chat/completions","xInitiator":"agent","requestId":"0a6d2942-93ef-4039-95b3-296cb634ef6f","status":200,"aic":0.1268,"totalAic":0.1268,"durationMs":810,"usage":{"inputTokens":1103,"outputTokens":33,"cacheReadInputTokens":0,"cacheCreationInputTokens":0}},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":0,"timestampMs":1792531352042}} +{"type":"firewall.model_routing","timestamp":"2026-10-20T21:22:32.047Z","data":{"schema":"model-routing/v0.28.62","stage":"selection","classifierModel":"github-copilot/claude-haiku-4.5","classifierEffort":null,"objective":{"goal":"cost","mode":"economy"},"provider":"copilot","labels":{"task_type":"unknown","scope":"unknown","task_complexity":"unknown"},"mode":"unknown","classifierAttempts":1,"degradedClassification":false,"degradedReason":null,"selectedId":"choice-0001","selectedProvider":"copilot","selectedModel":"github-copilot/claude-haiku-4.5","selectedEffort":null,"wireModel":"claude-haiku-4.5","endpoint":"/chat/completions","router":{"name":"gh-aw-router","version":"0.1.3"},"latencyMs":832,"rankedChoices":[{"rank":1,"model":"github-copilot/claude-haiku-4.5","effort":null}],"eligibleChoices":1,"catalogueOverlap":1},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl","index":1,"timestampMs":1792531352047}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T21:24:00.365Z","data":{"provider":"copilot","model":"claude-haiku-5.5","path":"/chat/completions","xInitiator":"user","requestId":"49139d1b-bc35-4bcf-ad1f-8a9e476b5127","status":200,"aic":0.245286,"totalAic":0.245286,"durationMs":1087,"usage":{"inputTokens":2297,"outputTokens":140,"cacheReadInputTokens":0,"cacheCreationInputTokens":17943}},"provenance":{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":0,"timestampMs":1792531440365}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T21:24:01.501Z","data":{"provider":"copilot","model":"claude-haiku-5.5","path":"/chat/completions","xInitiator":"agent","requestId":"8af1097a-910f-4e76-8f1b-28d8341515e5","status":200,"aic":0.063509,"totalAic":0.308795,"durationMs":1064,"usage":{"inputTokens":2,"outputTokens":99,"cacheReadInputTokens":17943,"cacheCreationInputTokens":3383}},"provenance":{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":1,"timestampMs":1792531441501}} +{"type":"model.resolution","data":{"engine":"copilot","role":"mini-whoami","configured_model":"gpt-5.4-mini","resolved_model":null,"provider":"copilot","status":"failed","cause":"model_unavailable"},"provenance":{"component":"model_resolution","phase":"agent","path":"agent/model-resolution.json","index":0}} +{"type":"model_routing.outcome","data":{"status":"selected","wireModel":"claude-haiku-4.5","effectiveEndpoint":"/chat/completions","selectedEndpoint":"/chat/completions"},"provenance":{"component":"agent","phase":"agent","path":"agent/awf-routing-outcome.json","index":0}} +{"type":"guardrail.daily_aic","data":{"status":"skipped","exceeded":false},"provenance":{"component":"guardrail","phase":"activation","path":"usage/aw_session.jsonl","index":0}} +{"type":"session.collection","data":{"sources":[{"component":"workflow","phase":"agent","path":"runtime/aw_info.json","timestampUnit":"milliseconds","events":1},{"component":"skill","phase":"activation","path":"skill_inventory.json","events":2},{"component":"prompt","phase":"activation","path":"aw-prompts/system.txt","events":1},{"component":"prompt","phase":"activation","path":"aw-prompts/user.txt","events":1},{"component":"agent","phase":"agent","path":"agent-session.jsonl","timestampUnit":"milliseconds","events":0},{"component":"agent","phase":"agent","path":"agent-stdio.log","events":0},{"component":"firewall","phase":"agent","path":"sandbox/firewall/awf-reflect.json","events":1},{"component":"otel","phase":"agent","path":"otel.jsonl","timestampUnit":"nanoseconds","events":1},{"component":"mcp","phase":"agent","path":"mcp-logs/configuration.jsonl","timestampUnit":"milliseconds","events":1},{"component":"mcp","phase":"agent","path":"mcp-logs/rpc-messages.jsonl","timestampUnit":"milliseconds","events":6},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl","timestampUnit":"milliseconds","events":2},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/otel.jsonl","timestampUnit":"milliseconds","events":1},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-tracker-audit.jsonl","timestampUnit":"milliseconds","events":2},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","timestampUnit":"milliseconds","events":1},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/audit.jsonl","timestampUnit":"seconds","events":8},{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/otel.jsonl","timestampUnit":"milliseconds","events":3},{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/token-tracker-audit.jsonl","timestampUnit":"milliseconds","events":6},{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","timestampUnit":"milliseconds","events":2},{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/audit.jsonl","timestampUnit":"seconds","events":8},{"component":"model_resolution","phase":"agent","path":"agent/model-resolution.json","events":1},{"component":"agent","phase":"agent","path":"agent/awf-routing-outcome.json","events":1},{"component":"safe_output","phase":"safe_outputs","path":"safe-output-items.jsonl","timestampUnit":"milliseconds","events":0},{"component":"github_api","phase":"workflow","path":"github_rate_limits.jsonl","timestampUnit":"milliseconds","events":74},{"component":"execution","phase":"agent","path":"agent_execution.json","timestampUnit":"milliseconds","events":1},{"component":"execution","phase":"detection","path":"threat-detection/execution.json","timestampUnit":"milliseconds","events":1},{"component":"agent","phase":"agent","path":"agent-errors.jsonl","timestampUnit":"milliseconds","events":0},{"component":"execution","phase":"agent","path":"agent-errors.jsonl","events":1},{"component":"guardrail","phase":"activation","path":"usage/aw_session.jsonl","events":1},{"component":"workflow","phase":"conclusion","path":"usage/aw_session.jsonl","events":5},{"component":"grader","phase":"conclusion","path":"usage/graders/grader_manifest.json","events":1},{"component":"grader","phase":"conclusion","path":"usage/graders/grader_results.json","events":1}],"warnings":0,"untimedEvents":18,"absentComponents":["experiment","eval"]},"provenance":{"component":"collector","phase":"conclusion","path":"usage/aw_session.jsonl","index":1}} diff --git a/actions/setup/js/fixtures/routing-analytics/run-39499464895/runtime/aw_info.json b/actions/setup/js/fixtures/routing-analytics/run-39499464895/runtime/aw_info.json new file mode 100644 index 00000000000..5535b7fa573 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39499464895/runtime/aw_info.json @@ -0,0 +1,63 @@ +{ + "engine_id": "copilot", + "engine_name": "GitHub Copilot CLI", + "model": "claude-haiku-4.5", + "version": "1.0.98", + "agent_version": "1.0.98", + "workflow_name": "Smoke Copilot SDK Routed Claude", + "workflow_id": "github/gh-aw/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml@refs/heads/copilot/fix-copilot-sub-agent-models", + "workflow_call_id": "39499464895-1:github/gh-aw/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml@refs/heads/copilot/fix-copilot-sub-agent-models", + "caller_workflow_ref": "github/gh-aw/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml@refs/heads/copilot/fix-copilot-sub-agent-models", + "experimental": false, + "supports_tools_allowlist": true, + "cache_memory": false, + "run_id": 39499464895, + "run_number": 93, + "run_attempt": "1", + "repository": "github/gh-aw", + "ref": "refs/heads/copilot/fix-copilot-sub-agent-models", + "sha": "b9f7f48a3baa4e58e9509232f6eaaea674a942ff", + "actor": "SivaKesava1", + "event_name": "workflow_dispatch", + "target_repo": "", + "staged": false, + "dry_run": false, + "allowed_domains": [ + "defaults" + ], + "firewall_enabled": true, + "awf_version": "v0.28.62", + "awmg_version": "", + "agent_runtime": "", + "steps": { + "firewall": "squid" + }, + "created_at": "2026-10-20T21:20:47.191Z", + "frontmatter_emoji": "๐Ÿงญ", + "features": { + "gh-aw-detection": false + }, + "sub_agent_models": [ + { + "model": "gpt-5.4-mini", + "name": "mini-whoami", + "patterns": [ + "github-copilot/gpt-5.4-mini" + ] + } + ], + "requested_model": "auto", + "model_routing": { + "status": "selected", + "source": "awf-routing", + "provider": "copilot", + "wire_model": "claude-haiku-4.5", + "model": "github-copilot/claude-haiku-4.5", + "endpoint": "/chat/completions", + "selected_endpoint": "/chat/completions", + "mode": "unknown", + "selected_id": "choice-0001", + "router_version": "0.1.3" + }, + "routed_model": "claude-haiku-4.5" +} \ No newline at end of file diff --git a/actions/setup/js/fixtures/routing-analytics/run-39499464895/sandbox/firewall/awf-reflect.json b/actions/setup/js/fixtures/routing-analytics/run-39499464895/sandbox/firewall/awf-reflect.json new file mode 100644 index 00000000000..2e888a12e63 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39499464895/sandbox/firewall/awf-reflect.json @@ -0,0 +1 @@ +{"endpoints":[{"provider":"openai","port":10000,"base_url":"http://api-proxy:10000","configured":false,"models":null,"model_metadata":null,"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":[],"chat/completions":[],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":[]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":null,"models_url":"http://api-proxy:10000/v1/models"},{"provider":"anthropic","port":10001,"base_url":"http://api-proxy:10001","configured":false,"models":null,"model_metadata":null,"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":[],"chat/completions":[],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":[]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":null,"models_url":"http://api-proxy:10001/v1/models"},{"provider":"copilot","port":10002,"base_url":"http://api-proxy:10002","configured":true,"models":["claude-haiku-4.5","claude-haiku-5.5","claude-opus-5","claude-opus-5.5","claude-sonnet-5","claude-sonnet-5.5","gpt-3.5-turbo","gpt-3.5-turbo-0613","gpt-4","gpt-4-0613","gpt-4-o-preview","gpt-4.1","gpt-4.1-2025-04-14","gpt-41-copilot","gpt-4o","gpt-4o-2024-05-13","gpt-4o-2024-08-06","gpt-4o-2024-11-20","gpt-4o-mini","gpt-4o-mini-2024-07-18","gpt-5.3-codex","gpt-5.6-luna","gpt-5.6-luna-utility","gpt-5.6-sol","gpt-5.6-terra","gpt-6-astra","gpt-6-luna","gpt-6-sol","gpt-6.1-sol","grok-4.6","grok-4.7","mai-code-1.1-flash","text-embedding-3-small","text-embedding-3-small-inference","text-embedding-ada-002","trajectory-compaction"],"model_metadata":[{"id":"claude-haiku-4.5","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":1,"output":5,"cachedInput":0.1,"cacheWrite":1.25}}},{"id":"claude-haiku-5.5","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":0.1,"output":0.5,"cachedInput":0.01,"cacheWrite":0.12,"threshold":100000},"long_context":{"input":0.5,"output":2.5,"cachedInput":0.05,"cacheWrite":0.62,"threshold":936000}}},{"id":"claude-opus-5","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":5,"output":25,"cachedInput":0.5,"cacheWrite":6.25,"threshold":200000},"long_context":{"input":5,"output":25,"cachedInput":0.5,"cacheWrite":6.25,"threshold":936000}}},{"id":"claude-opus-5.5","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":4,"output":20,"cachedInput":0.2,"cacheWrite":5,"threshold":200000},"long_context":{"input":4,"output":20,"cachedInput":0.2,"cacheWrite":5,"threshold":1000000}}},{"id":"claude-sonnet-5","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":10,"cachedInput":0.2,"cacheWrite":2.5,"threshold":200000},"long_context":{"input":2,"output":10,"cachedInput":0.2,"cacheWrite":2.5,"threshold":936000}}},{"id":"claude-sonnet-5.5","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":10,"cachedInput":0.1,"cacheWrite":2.5,"threshold":200000},"long_context":{"input":2,"output":10,"cachedInput":0.1,"cacheWrite":2.5,"threshold":936000}}},{"id":"gpt-3.5-turbo","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"gpt-3.5-turbo-0613","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"gpt-4","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":2.5,"output":10,"cachedInput":1.25,"cacheWrite":0}}},{"id":"gpt-4-0613","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":2.5,"output":10,"cachedInput":1.25,"cacheWrite":0}}},{"id":"gpt-4-o-preview","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"gpt-4.1","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"gpt-4.1-2025-04-14","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"gpt-41-copilot","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":8,"cachedInput":0.5,"cacheWrite":0}}},{"id":"gpt-4o","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"gpt-4o-2024-05-13","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"gpt-4o-2024-08-06","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"gpt-4o-2024-11-20","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"gpt-4o-mini","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"gpt-4o-mini-2024-07-18","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"gpt-5.3-codex","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":1.75,"output":14,"cachedInput":0.17,"cacheWrite":0,"threshold":272000}}},{"id":"gpt-5.6-luna","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":0.2,"output":1.2,"cachedInput":0.02,"cacheWrite":0.25,"threshold":200000},"long_context":{"input":0.4,"output":1.8,"cachedInput":0.04,"cacheWrite":0.5,"threshold":922000}}},{"id":"gpt-5.6-luna-utility","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"gpt-5.6-sol","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":4,"output":20,"cachedInput":0.4,"cacheWrite":5,"threshold":272000},"long_context":{"input":8,"output":30,"cachedInput":0.8,"cacheWrite":10,"threshold":922000}}},{"id":"gpt-5.6-terra","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":12,"cachedInput":0.2,"cacheWrite":2.5,"threshold":272000},"long_context":{"input":4,"output":18,"cachedInput":0.4,"cacheWrite":5,"threshold":922000}}},{"id":"gpt-6-astra","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":10,"output":50,"cachedInput":1,"cacheWrite":12.5,"threshold":272000},"long_context":{"input":20,"output":75,"cachedInput":2,"cacheWrite":25,"threshold":1050000}}},{"id":"gpt-6-luna","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":0.1,"output":0.5,"cachedInput":0.01,"cacheWrite":0.12,"threshold":272000},"long_context":{"input":0.2,"output":0.75,"cachedInput":0.02,"cacheWrite":0.25,"threshold":872000}}},{"id":"gpt-6-sol","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":10,"cachedInput":0.2,"cacheWrite":2.5,"threshold":272000},"long_context":{"input":4,"output":15,"cachedInput":0.4,"cacheWrite":5,"threshold":872000}}},{"id":"gpt-6.1-sol","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":10,"cachedInput":0.1,"cacheWrite":2.5,"threshold":272000},"long_context":{"input":4,"output":15,"cachedInput":0.2,"cacheWrite":5,"threshold":922000}}},{"id":"grok-4.6","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","wire_api":"responses","pricing":{"default":{"input":2,"output":6,"cachedInput":0.5,"cacheWrite":0,"threshold":200000},"long_context":{"input":4,"output":12,"cachedInput":1,"cacheWrite":0,"threshold":500000}}},{"id":"grok-4.7","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","wire_api":"responses","pricing":{"default":{"input":2,"output":6,"cachedInput":0.5,"cacheWrite":0,"threshold":200000},"long_context":{"input":4,"output":12,"cachedInput":1,"cacheWrite":0,"threshold":500000}}},{"id":"mai-code-1.1-flash","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","pricing":{"default":{"input":0.2,"output":1.2,"cachedInput":0.02,"cacheWrite":0.25,"threshold":128000}}},{"id":"text-embedding-3-small","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"text-embedding-3-small-inference","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"text-embedding-ada-002","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01"},{"id":"trajectory-compaction","source":"provider","observed_at":"2026-10-20T21:22:31.194Z","api_version":"2026-07-01","wire_api":"completions"}],"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":["claude-sonnet-5.5","claude-sonnet-5","claude-opus-5.5","claude-opus-5","claude-haiku-5.5","claude-haiku-4.5"],"chat/completions":["claude-sonnet-5.5","claude-sonnet-5","claude-opus-5.5","claude-opus-5","claude-haiku-5.5","claude-haiku-4.5"],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":["gpt-6.1-sol","gpt-6-astra","gpt-6-luna","gpt-6-sol","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","gpt-5.3-codex"]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":[{"model_id":"claude-haiku-4.5","source":"provider","supported_endpoints":["/chat/completions","/v1/messages"],"supported_reasoning_efforts":[],"context_window_tokens":200000,"candidate_metadata_complete":true},{"model_id":"claude-haiku-5.5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"claude-opus-5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"claude-opus-5.5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"claude-sonnet-5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"claude-sonnet-5.5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"gpt-3.5-turbo","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":16384,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-3.5-turbo-0613","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":16384,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":32768,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4-0613","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":32768,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4-o-preview","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4.1","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4.1-2025-04-14","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-41-copilot","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":null,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-2024-05-13","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-2024-08-06","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-2024-11-20","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-mini","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-mini-2024-07-18","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-5.3-codex","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh"],"context_window_tokens":400000,"candidate_metadata_complete":true},{"model_id":"gpt-5.6-luna","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"gpt-5.6-luna-utility","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-5.6-sol","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"gpt-5.6-terra","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"gpt-6-astra","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"gpt-6-luna","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"gpt-6-sol","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"gpt-6.1-sol","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"grok-4.6","source":"provider","supported_endpoints":["/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh"],"context_window_tokens":500000,"candidate_metadata_complete":true},{"model_id":"grok-4.7","source":"provider","supported_endpoints":["/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh"],"context_window_tokens":500000,"candidate_metadata_complete":true},{"model_id":"mai-code-1.1-flash","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["low","medium","high"],"context_window_tokens":256000,"candidate_metadata_complete":true},{"model_id":"text-embedding-3-small","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":null,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"text-embedding-3-small-inference","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":null,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"text-embedding-ada-002","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":null,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"trajectory-compaction","source":"provider","supported_endpoints":["/chat/completions"],"supported_reasoning_efforts":[],"context_window_tokens":262144,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"}],"models_url":"http://api-proxy:10002/models","credential_kind":"github_token","selected_scheme":"Bearer","inference_credential_source":"github_token","inference_selected_scheme":"Bearer","integration_id_source":"github_copilot_integration_id"},{"provider":"gemini","port":10003,"base_url":"http://api-proxy:10003","configured":false,"models":null,"model_metadata":null,"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":[],"chat/completions":[],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":[]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":null,"models_url":"http://api-proxy:10003/v1beta/models"},{"provider":"vertex","port":10004,"base_url":"http://api-proxy:10004","configured":false,"models":null,"model_metadata":null,"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":[],"chat/completions":[],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":[]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":null,"models_url":null}],"models_fetch_complete":true,"model_aliases":{"agent":["sonnet-6x","gpt-6","gpt-5.4","gpt-5.5","gpt-5.6","gpt-5.3","gemini-pro","any"],"any":["copilot/*","anthropic/*","openai/*","google/*","gemini/*"],"auto":["copilot/auto","large"],"claude":["agent"],"codex":["agent"],"coding":["copilot/gpt-5*codex*","openai/gpt-5*codex*","gpt-5-codex","kimi"],"copilot":["agent"],"detection":["small"],"evals":["small"],"gemini":["agent"],"gpt-5":["copilot/gpt-5*","openai/gpt-5*"],"gpt-5-codex":["copilot/gpt-5*codex*","openai/gpt-5*codex*"],"gpt-5.3":["copilot/gpt-5.3*","openai/gpt-5.3*"],"gpt-5.6":["copilot/gpt-5.6*","openai/gpt-5.6*"],"gpt-6":["copilot/gpt-6*","openai/gpt-6*"],"grok":["copilot/*grok*","openai/*grok*"],"haiku":["copilot/*haiku*","anthropic/*haiku*"],"large":["sonnet","gpt-6","gpt-5-pro","gpt-5","gemini-pro"],"mai-code":["copilot/MAI-Code*","copilot/mai-code*","openai/MAI-Code*"],"mini":["haiku","gpt-5-mini","gpt-5-nano","gemini-flash-lite"],"opus":["copilot/*opus*","anthropic/*opus*"],"opusplan":["opus?effort=high"],"small":["mini"],"small-agent":["haiku","gpt-5-mini","gemini-flash"],"sonnet":["copilot/*sonnet*","anthropic/*sonnet*"],"sonnet-6x":["copilot/*sonnet-4.5*","copilot/*sonnet-4.6*","copilot/*sonnet-5*","copilot/*sonnet-4-5-*","anthropic/*sonnet-4-5-*","copilot/*sonnet-4-6*","anthropic/*sonnet-4-6*","anthropic/*sonnet-5*"],"summarization":["haiku","gpt-5-mini","gemini-flash-lite","mini"]},"model_fallback":{"enabled":true,"strategy":"middle_power","excludeEngines":[]},"model_fallback_effective":{"openai":{"enabled":true,"strategy":"middle_power","excludeEngines":[],"suppressed":false},"anthropic":{"enabled":true,"strategy":"middle_power","excludeEngines":[],"suppressed":false},"copilot":{"enabled":false,"strategy":"middle_power","excludeEngines":[],"suppressed":true,"suppression_reason":"copilot_standard_authoritative"},"gemini":{"enabled":true,"strategy":"middle_power","excludeEngines":[],"suppressed":false},"vertex":{"enabled":true,"strategy":"middle_power","excludeEngines":[],"suppressed":false}},"ai_credits":{"total":0.1268,"max_ai_credits":1000,"effective_max_ai_credits":1000,"percent_used":0.01,"thresholds_crossed":[],"thresholds_pending":[],"by_model":{"claude-haiku-4.5":{"input_credits":0.1103,"cached_input_credits":0,"cache_write_credits":0,"output_credits":0.0165,"total":0.1268,"pricing_source":"provider","pricing_tier":"default","accounting_policy":"concrete_model","fallback_pricing_used":false,"dynamic_selector":null}}},"time_steering":{"enabled":true,"timeout_minutes":10,"started_at_ms":1792531356310,"percent_elapsed":0.61,"thresholds_crossed":[],"thresholds_pending":[]},"runs":{"enabled":true,"max_runs":500,"invocation_count":1,"remaining_runs":499},"cache_misses":{"enabled":true,"max_cache_misses":5,"consecutive_cache_misses":0,"remaining_cache_misses":5},"permission_denied":{"enabled":false,"max_permission_denied":null,"denied_count":0},"model_api_mapping":{"available":true,"last_updated":"2026-10-08T07:12:00Z","providers":["openai","anthropic"],"models":{"openai":{"endpoints":{"responses":{"path":"/v1/responses","description":"Newer unified API for agentic, tool-using, and multimodal workflows. Required for GPT-5+ models; some older models (o1, o3, gpt-4o, gpt-4.1) support it alongside chat/completions."},"chat_completions":{"path":"/v1/chat/completions","description":"Legacy conversational API. Being deprecated for newer models by end of 2026."}},"models":[{"family":"gpt-6-astra","patterns":["gpt-6-astra*"],"endpoints":["chat_completions","responses"],"notes":"Newest flagship model (Trusted Access Program rollout). Supports Chat Completions and Responses APIs."},{"family":"gpt-6-sol","patterns":["gpt-6-sol*"],"endpoints":["chat_completions","responses"],"notes":"GPT-6 tier balancing intelligence and cost. Supports both Chat Completions and Responses APIs per official model page."},{"family":"gpt-6.1-sol","patterns":["gpt-6.1-sol*"],"endpoints":["chat_completions","responses"],"notes":"GPT-6.1 tier balancing intelligence and cost (successor to gpt-6-sol). Supports both Chat Completions and Responses APIs, consistent with other GPT-6 tiers."},{"family":"gpt-6-luna","patterns":["gpt-6-luna*"],"endpoints":["chat_completions","responses"],"notes":"GPT-6 tier for cost-sensitive, high-volume use. Supports both Chat Completions and Responses APIs per official model page."},{"family":"gpt-daybreak","patterns":["gpt-daybreak-blue-latest","gpt-daybreak-red-latest"],"endpoints":["responses"],"notes":"Responses API only (ResponsesModel-only Literal). Experimental/preview aliases not present in ChatModel."},{"family":"gpt-rosalind-research","patterns":["gpt-rosalind-research*"],"endpoints":["responses"],"notes":"Life sciences reasoning model, Trusted Access Program (approved organizations only). Responses API only, consistent with other restricted-access specialized models (gpt-daybreak-*, gpt-5.6-cyber). Billing begins October 5, 2026."},{"family":"gpt-5.6-cyber","patterns":["gpt-5.6-cyber*"],"endpoints":["responses"],"notes":"Responses API only (ResponsesModel-only Literal, not in ChatModel). More specific than gpt-5.6* pattern below."},{"family":"gpt-5.6","patterns":["gpt-5.6*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. Includes gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna per OpenAI SDK ChatModel. gpt-5.6-cyber is responses-only (see separate entry above)."},{"family":"gpt-5.5-pro","patterns":["gpt-5.5-pro","gpt-5.5-pro-*"],"endpoints":["responses"],"notes":"Responses API only (ResponsesOnlyModel per OpenAI OpenAPI spec). More specific than gpt-5.5* pattern below. Includes dated variants like gpt-5.5-pro-2026-04-23."},{"family":"gpt-5.5","patterns":["gpt-5.5*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. Listed on the official GPT-5.5 model page. gpt-5.5-pro is responses-only (see separate entry above)."},{"family":"gpt-5.4","patterns":["gpt-5.4*"],"routingPatterns":["gpt-5.4","gpt-5.4-2026-03-05"],"endpoints":["chat_completions","responses"],"routing":{"reasoningEfforts":["none","low","medium","high","xhigh"],"contextWindowTokens":1050000},"notes":"Supports both endpoints on OpenAI. GPT-5.4 routing metadata is exact-model only; mini/nano variants need separately verified data. The model page lists none, low, medium, high, and xhigh reasoning effort and a 1,050,000-token context window."},{"family":"gpt-5.3-codex","patterns":["gpt-5.3-codex","gpt-5.3-codex-*"],"endpoints":["responses"],"notes":"Responses API only per official model page (developers.openai.com/api/docs/models/gpt-5.3-codex). More specific than gpt-5.3* pattern below."},{"family":"gpt-5.3","patterns":["gpt-5.3*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. Only gpt-5.3-chat-latest confirmed for both endpoints; gpt-5.3-codex is responses-only (see separate entry above). No bare gpt-5.3 base model exists."},{"family":"gpt-5.2-codex","patterns":["gpt-5.2-codex","gpt-5.2-codex-*"],"endpoints":["responses"],"notes":"Responses API only per official model page (developers.openai.com/api/docs/models/gpt-5.2-codex). More specific than gpt-5.2* pattern below."},{"family":"gpt-5.2-pro","patterns":["gpt-5.2-pro","gpt-5.2-pro-*"],"endpoints":["responses"],"notes":"Responses API only per official model page (developers.openai.com/api/docs/models/gpt-5.2-pro). More specific than gpt-5.2* pattern below."},{"family":"gpt-5.2","patterns":["gpt-5.2*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. gpt-5.2-pro and gpt-5.2-codex are responses-only (see separate entries above)."},{"family":"gpt-5.1-codex-max","patterns":["gpt-5.1-codex-max"],"endpoints":["responses"],"notes":"Responses API only (ResponsesOnlyModel)."},{"family":"gpt-5.1-codex","patterns":["gpt-5.1-codex","gpt-5.1-codex-*"],"endpoints":["responses"],"notes":"Responses API only per official model pages (developers.openai.com/api/docs/models/gpt-5.1-codex, /gpt-5.1-codex-mini). More specific than gpt-5.1* pattern below. gpt-5.1-codex-max is covered by a dedicated entry above."},{"family":"gpt-5.1","patterns":["gpt-5.1*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints for gpt-5.1 and gpt-5.1-mini. gpt-5.1-codex, gpt-5.1-codex-mini, and gpt-5.1-codex-max are responses-only (see separate entries above)."},{"family":"gpt-5-codex/pro","patterns":["gpt-5-codex","gpt-5-pro","gpt-5-pro-*"],"endpoints":["responses"],"notes":"Responses API only for gpt-5-codex and gpt-5-pro (ResponsesOnlyModel). Includes dated variants like gpt-5-pro-2025-10-06."},{"family":"gpt-5","patterns":["gpt-5","gpt-5-*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints for gpt-5, gpt-5-mini, gpt-5-nano."},{"family":"o4-mini-deep-research","patterns":["o4-mini-deep-research","o4-mini-deep-research-*"],"endpoints":["responses"],"notes":"Responses API only (ResponsesOnlyModel). Includes dated variants like o4-mini-deep-research-2025-06-26."},{"family":"o4","patterns":["o4*"],"endpoints":["chat_completions","responses"],"notes":"Reasoning model. o4-mini supports both endpoints (ModelIdsShared)."},{"family":"o3-pro/deep-research","patterns":["o3-pro","o3-pro-*","o3-deep-research","o3-deep-research-*"],"endpoints":["responses"],"notes":"Responses API only. o3-pro and o3-deep-research are in ResponsesModel but not ChatModel."},{"family":"o3","patterns":["o3*"],"endpoints":["chat_completions","responses"],"notes":"Reasoning model. o3, o3-mini support both endpoints. o3-pro/deep-research use responses only (covered by separate entry above)."},{"family":"o1-pro","patterns":["o1-pro","o1-pro-*"],"endpoints":["responses"],"notes":"Responses API only. o1-pro is in ResponsesModel but not ChatModel."},{"family":"o1-mini/preview","patterns":["o1-mini*","o1-preview*"],"endpoints":["chat_completions"],"notes":"Chat Completions API only per official model pages (developers.openai.com/api/docs/models/o1-mini, /o1-preview). Not available via Responses API. More specific than o1* pattern below."},{"family":"o1","patterns":["o1*"],"endpoints":["chat_completions","responses"],"notes":"Reasoning model. o1 (base) supports both endpoints. o1-pro is responses-only and o1-mini/o1-preview are chat_completions-only (see separate entries above)."},{"family":"computer-use-preview","patterns":["computer-use-preview*"],"endpoints":["responses"],"notes":"Responses API only. Specialized model for computer use tasks."},{"family":"codex-mini","patterns":["codex-mini*"],"endpoints":["responses"],"notes":"Responses API only per official model page (developers.openai.com/api/docs/models/codex-mini-latest). Chat Completions is marked unsupported on the model page."},{"family":"chatgpt-4o-latest","patterns":["chatgpt-4o-latest"],"endpoints":["chat_completions","responses"],"notes":"Rolling alias for the latest ChatGPT-optimized GPT-4o model. Supports both endpoints (ModelIdsShared). Not matched by gpt-4o* pattern due to chatgpt- prefix."},{"family":"gpt-4o","patterns":["gpt-4o*"],"endpoints":["chat_completions","responses"],"notes":"Multimodal. Supports both endpoints. Includes audio and search preview variants."},{"family":"gpt-4.1","patterns":["gpt-4.1*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. Includes gpt-4.1-mini, gpt-4.1-nano."},{"family":"gpt-4.5","patterns":["gpt-4.5*"],"endpoints":["chat_completions","responses"],"notes":"Preview model. Now supports both endpoints per official model page (developers.openai.com/api/docs/models/gpt-4.5-preview); Responses API support was added since the previous mapping update."},{"family":"gpt-4-turbo","patterns":["gpt-4-turbo*"],"endpoints":["chat_completions","responses"],"notes":"Legacy. In ModelIdsShared per OpenAI spec v2.3.0; supports both endpoints."},{"family":"gpt-4","patterns":["gpt-4","gpt-4-*"],"endpoints":["chat_completions","responses"],"notes":"Legacy. In ModelIdsShared per OpenAI spec v2.3.0; supports both endpoints."},{"family":"gpt-3.5-turbo","patterns":["gpt-3.5-turbo*"],"endpoints":["chat_completions","responses"],"notes":"Legacy. In ModelIdsShared per OpenAI spec v2.3.0; supports both endpoints. Deprecated."}]},"anthropic":{"endpoints":{"messages":{"path":"/v1/messages","description":"Unified Messages API for all Claude models. Supports tool use, streaming, extended thinking, and vision."}},"models":[{"family":"claude-opus-5","patterns":["claude-opus-5*"],"routingPatterns":["claude-opus-5-5","claude-opus-5"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Flagship Opus generation 5 models with verified 1M-token context windows and the Anthropic effort parameter."},{"family":"claude-fable-5","patterns":["claude-fable-5*"],"routingPatterns":["claude-fable-5-1","claude-fable-5"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Latest flagship family with verified 1M-token context windows and the Anthropic effort parameter."},{"family":"claude-mythos-5","patterns":["claude-mythos-5*","claude-mythos-preview*"],"routingPatterns":["claude-mythos-5-1","claude-mythos-5","claude-mythos-preview*"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Specialized models, invitation-only, with verified 1M-token context windows and the Anthropic effort parameter."},{"family":"claude-sonnet-5","patterns":["claude-sonnet-5*"],"routingPatterns":["claude-sonnet-5-5","claude-sonnet-5"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Best combination of speed and intelligence with verified 1M-token context windows and the Anthropic effort parameter."},{"family":"claude-opus-4","patterns":["claude-opus-4*"],"routingPatterns":["claude-opus-4-8","claude-opus-4-7","claude-opus-4-6"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Opus 4.6 and newer models have verified 1M-token context windows and support the Anthropic effort parameter."},{"family":"claude-sonnet-4","patterns":["claude-sonnet-4*"],"routingPatterns":["claude-sonnet-4-6"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Sonnet 4.6 has a verified 1M-token context window and supports the Anthropic effort parameter."},{"family":"claude-haiku-5","patterns":["claude-haiku-5*"],"endpoints":["messages"],"notes":"Fast/cheap Haiku generation 5 (claude-haiku-5-5). 1M token context window per official models overview; effort levels not verified, so no routing metadata."},{"family":"claude-haiku-4","patterns":["claude-haiku-4*"],"endpoints":["messages"],"notes":"Includes claude-haiku-4-5. Fast/cheap. 200K token context."},{"family":"claude-3.5-sonnet","patterns":["claude-3-5-sonnet*","claude-3.5-sonnet*"],"endpoints":["messages"],"notes":"Previous generation. 200K token context."},{"family":"claude-3.5-haiku","patterns":["claude-3-5-haiku*","claude-3.5-haiku*"],"endpoints":["messages"],"notes":"Previous generation fast model."},{"family":"claude-3.7-sonnet","patterns":["claude-3-7-sonnet*","claude-3.7-sonnet*"],"endpoints":["messages"],"notes":"Previous generation extended thinking model. 200K token context."},{"family":"claude-3-opus","patterns":["claude-3-opus*"],"endpoints":["messages"],"notes":"Previous generation. 200K token context."}]}},"error":null},"routing":{"status":"selected","selection":{"provider":"copilot","model":"github-copilot/claude-haiku-4.5","wire_model":"claude-haiku-4.5","effort":null,"endpoint":"/chat/completions"}}} \ No newline at end of file diff --git a/actions/setup/js/fixtures/routing-analytics/run-39499464895/sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl b/actions/setup/js/fixtures/routing-analytics/run-39499464895/sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl new file mode 100644 index 00000000000..df7d1297803 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39499464895/sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl @@ -0,0 +1,2 @@ +{"_schema":"model-routing/v0.28.62","timestamp":"2026-10-20T21:22:31.229Z","event":"model_routing","stage":"classification","purpose":"routing_classification","attempt":1,"classifier_model":"github-copilot/claude-haiku-4.5","classifier_effort":null} +{"_schema":"model-routing/v0.28.62","timestamp":"2026-10-20T21:22:32.047Z","event":"model_routing","stage":"selection","objective":{"goal":"cost","mode":"economy"},"provider":"copilot","selected_provider":"copilot","wire_model":"claude-haiku-4.5","endpoint":"/chat/completions","labels":{"task_type":"unknown","scope":"unknown","task_complexity":"unknown"},"mode":"unknown","classifier_model":"github-copilot/claude-haiku-4.5","classifier_effort":null,"router":{"name":"gh-aw-router","version":"0.1.3"},"ranked_choices":[{"model":"github-copilot/claude-haiku-4.5","effort":null}],"conversation_sha256":"c57b75623d8484c87de27b9c606f4aef60316c4b206b39f8ec7c6eb5ce90da52","selected_id":"choice-0001","selected_model":"github-copilot/claude-haiku-4.5","selected_effort":null,"degraded_classification":false,"degraded_reason":null,"classifier_attempts":1,"eligible_choices":1,"catalogue_overlap":1,"latency_ms":832,"interaction_id":"39499464895-1","github_repository":"github/gh-aw","github_workflow_ref":"github/gh-aw/.github/workflows/smoke-copilot-sdk-routed-claude.lock.yml@refs/heads/copilot/fix-copilot-sub-agent-models"} diff --git a/actions/setup/js/fixtures/routing-analytics/run-39499464895/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl b/actions/setup/js/fixtures/routing-analytics/run-39499464895/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl new file mode 100644 index 00000000000..9d17fd92e80 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39499464895/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl @@ -0,0 +1 @@ +{"_schema":"token-usage/v0.28.62","timestamp":"2026-10-20T21:22:32.042Z","event":"token_usage","request_id":"0a6d2942-93ef-4039-95b3-296cb634ef6f","provider":"copilot","model":"claude-haiku-4.5","path":"/chat/completions","status":200,"streaming":false,"input_tokens":1103,"output_tokens":33,"cache_read_tokens":0,"cache_write_tokens":0,"duration_ms":810,"response_bytes":960,"purpose":"routing_classification","x_initiator":"agent","ai_credits_this_response":0.1268,"ai_credits_total":0.1268,"ai_credits_pricing_source":"provider","ai_credits_pricing_tier":"default","ai_credits_accounting_policy":"concrete_model","ai_credits_fallback_pricing_used":false,"ai_credits_pricing_observed_at":"2026-10-20T21:22:31.194Z","ai_credits_pricing_api_version":"2026-07-01"} diff --git a/actions/setup/js/fixtures/routing-analytics/run-39506475007/agent/model-resolution.json b/actions/setup/js/fixtures/routing-analytics/run-39506475007/agent/model-resolution.json new file mode 100644 index 00000000000..becf44d43c1 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39506475007/agent/model-resolution.json @@ -0,0 +1,11 @@ +[ + { + "engine": "copilot", + "role": "main", + "configured_model": "auto", + "resolved_model": "claude-sonnet-5.5", + "provider": "copilot", + "status": "resolved", + "cause": null + } +] diff --git a/actions/setup/js/fixtures/routing-analytics/run-39506475007/aw_session.jsonl b/actions/setup/js/fixtures/routing-analytics/run-39506475007/aw_session.jsonl new file mode 100644 index 00000000000..66f8b2eef17 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39506475007/aw_session.jsonl @@ -0,0 +1,10 @@ +{"type":"session.format","data":{"version":1},"provenance":{"component":"collector","phase":"conclusion","path":"usage/aw_session.jsonl","index":0}} +{"type":"workflow.info","timestamp":"2026-10-20T22:14:07.792Z","data":{"dryRun":false,"engineId":"copilot","agentVersion":"1.0.98","awfVersion":"v0.28.62","mcpgVersion":"","model":"claude-sonnet-5.5","requestedModel":"auto","modelSelection":{"status":"observed","configuredModel":"auto","resolvedModel":"claude-sonnet-5.5","effectiveModel":"claude-sonnet-5.5"},"triggerType":"workflow_dispatch","workflow":"Smoke Copilot","workflowId":"github/gh-aw/.github/workflows/smoke-copilot.lock.yml@refs/heads/copilot/expand-experiment-model-expressions","workflowCallId":"39506475007-1:github/gh-aw/.github/workflows/smoke-copilot.lock.yml@refs/heads/copilot/expand-experiment-model-expressions","callerWorkflowRef":"github/gh-aw/.github/workflows/smoke-copilot.lock.yml@refs/heads/copilot/expand-experiment-model-expressions","repository":"github/gh-aw","runId":39506475007,"runAttempt":"1","ref":"refs/heads/copilot/expand-experiment-model-expressions","sha":"9c8c823adbd92a3c2478741e47bf0c1128344fa6","actor":"SivaKesava1","targetRepo":""},"provenance":{"component":"workflow","phase":"agent","path":"runtime/aw_info.json","index":0,"timestampMs":1792534447792}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:19:03.979Z","data":{"provider":"copilot","model":"claude-sonnet-5.5","path":"/chat/completions","xInitiator":"user","requestId":"8df4162d-7b1e-4f49-acce-bfcc2c7dd082","status":200,"aic":16.2246,"totalAic":16.2246,"durationMs":4202,"usage":{"inputTokens":8908,"outputTokens":431,"cacheReadInputTokens":0,"cacheCreationInputTokens":56048}},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":0,"timestampMs":1792534743979}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:19:08.977Z","data":{"provider":"copilot","model":"claude-sonnet-5.5","path":"/chat/completions","xInitiator":"agent","requestId":"a347dea2-37f4-4cf9-a44a-0621b0f701fc","status":200,"aic":4.11861,"totalAic":20.34321,"durationMs":4786,"usage":{"inputTokens":2,"outputTokens":604,"cacheReadInputTokens":56048,"cacheCreationInputTokens":9573}},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":1,"timestampMs":1792534748977}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:19:11.205Z","data":{"provider":"copilot","model":"claude-sonnet-5.5","path":"/chat/completions","xInitiator":"agent","requestId":"94186d9d-abfc-435d-9ca0-1ba26ab4ec7e","status":200,"aic":1.58657,"totalAic":21.92978,"durationMs":1958,"usage":{"inputTokens":2,"outputTokens":102,"cacheReadInputTokens":65621,"cacheCreationInputTokens":687}},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":2,"timestampMs":1792534751205}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:20:42.021Z","data":{"provider":"copilot","model":"claude-haiku-5.5","path":"/chat/completions","xInitiator":"user","requestId":"acf429a4-fcf6-4b97-8618-477cd2dc5eee","status":200,"aic":0.244938,"totalAic":0.244938,"durationMs":995,"usage":{"inputTokens":2246,"outputTokens":143,"cacheReadInputTokens":0,"cacheCreationInputTokens":17944}},"provenance":{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":0,"timestampMs":1792534842021}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:20:44.168Z","data":{"provider":"copilot","model":"claude-haiku-5.5","path":"/chat/completions","xInitiator":"agent","requestId":"20e6c21a-4c12-47d7-a070-489fd8fbeb47","status":200,"aic":0.098772,"totalAic":0.34371,"durationMs":2092,"usage":{"inputTokens":2,"outputTokens":138,"cacheReadInputTokens":17944,"cacheCreationInputTokens":6159}},"provenance":{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":1,"timestampMs":1792534844168}} +{"type":"model.resolution","data":{"engine":"copilot","role":"main","configured_model":"auto","resolved_model":"claude-sonnet-5.5","provider":"copilot","status":"resolved","cause":null},"provenance":{"component":"model_resolution","phase":"agent","path":"agent/model-resolution.json","index":0}} +{"type":"guardrail.daily_aic","data":{"status":"skipped","exceeded":false},"provenance":{"component":"guardrail","phase":"activation","path":"usage/aw_session.jsonl","index":0}} +{"type":"session.collection","data":{"sources":[{"component":"workflow","phase":"agent","path":"runtime/aw_info.json","timestampUnit":"milliseconds","events":1},{"component":"skill","phase":"activation","path":"skill_inventory.json","events":2},{"component":"prompt","phase":"activation","path":"aw-prompts/system.txt","events":1},{"component":"prompt","phase":"activation","path":"aw-prompts/user.txt","events":1},{"component":"agent","phase":"agent","path":"sandbox/agent/logs/copilot-session-state/3dd43180-4501-4745-9e6d-cecab128f387/events.jsonl","timestampUnit":"milliseconds","events":51},{"component":"firewall","phase":"agent","path":"sandbox/firewall/awf-reflect.json","events":1},{"component":"otel","phase":"agent","path":"otel.jsonl","timestampUnit":"nanoseconds","events":1},{"component":"mcp","phase":"agent","path":"mcp-logs/configuration.jsonl","timestampUnit":"milliseconds","events":1},{"component":"mcp","phase":"agent","path":"mcp-logs/rpc-messages.jsonl","timestampUnit":"milliseconds","events":16},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-tracker-audit.jsonl","timestampUnit":"milliseconds","events":6},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","timestampUnit":"milliseconds","events":3},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/audit.jsonl","timestampUnit":"seconds","events":20},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/cli-proxy-logs/access.jsonl","timestampUnit":"milliseconds","events":1},{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/token-tracker-audit.jsonl","timestampUnit":"milliseconds","events":6},{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","timestampUnit":"milliseconds","events":2},{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/audit.jsonl","timestampUnit":"seconds","events":9},{"component":"model_resolution","phase":"agent","path":"agent/model-resolution.json","events":1},{"component":"safe_output","phase":"agent","path":"safeoutputs.jsonl","timestampUnit":"milliseconds","events":3},{"component":"safe_output","phase":"safe_outputs","path":"safe-output-items.jsonl","timestampUnit":"milliseconds","events":2},{"component":"experiment","phase":"activation","path":"experiments/state.jsonl","timestampUnit":"milliseconds","events":406},{"component":"experiment","phase":"activation","path":"experiments/assignments.json","timestampUnit":"milliseconds","events":1},{"component":"github_api","phase":"workflow","path":"github_rate_limits.jsonl","timestampUnit":"milliseconds","events":66},{"component":"execution","phase":"agent","path":"agent_execution.json","timestampUnit":"milliseconds","events":1},{"component":"execution","phase":"detection","path":"threat-detection/execution.json","timestampUnit":"milliseconds","events":1},{"component":"agent","phase":"agent","path":"agent-errors.jsonl","timestampUnit":"milliseconds","events":0},{"component":"execution","phase":"agent","path":"agent-errors.jsonl","events":1},{"component":"guardrail","phase":"activation","path":"usage/aw_session.jsonl","events":1},{"component":"workflow","phase":"conclusion","path":"usage/aw_session.jsonl","events":11},{"component":"grader","phase":"conclusion","path":"usage/graders/grader_manifest.json","events":1},{"component":"grader","phase":"conclusion","path":"usage/graders/grader_results.json","events":1}],"warnings":0,"untimedEvents":27,"absentComponents":["eval"]},"provenance":{"component":"collector","phase":"conclusion","path":"usage/aw_session.jsonl","index":1}} diff --git a/actions/setup/js/fixtures/routing-analytics/run-39506475007/runtime/aw_info.json b/actions/setup/js/fixtures/routing-analytics/run-39506475007/runtime/aw_info.json new file mode 100644 index 00000000000..6fac8f38a6a --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39506475007/runtime/aw_info.json @@ -0,0 +1,82 @@ +{ + "engine_id": "copilot", + "engine_name": "GitHub Copilot CLI", + "model": "claude-sonnet-5.5", + "version": "1.0.98", + "agent_version": "1.0.98", + "workflow_name": "Smoke Copilot", + "workflow_id": "github/gh-aw/.github/workflows/smoke-copilot.lock.yml@refs/heads/copilot/expand-experiment-model-expressions", + "workflow_call_id": "39506475007-1:github/gh-aw/.github/workflows/smoke-copilot.lock.yml@refs/heads/copilot/expand-experiment-model-expressions", + "caller_workflow_ref": "github/gh-aw/.github/workflows/smoke-copilot.lock.yml@refs/heads/copilot/expand-experiment-model-expressions", + "experimental": false, + "supports_tools_allowlist": true, + "cache_memory": true, + "run_id": 39506475007, + "run_number": 3902, + "run_attempt": "1", + "repository": "github/gh-aw", + "ref": "refs/heads/copilot/expand-experiment-model-expressions", + "sha": "9c8c823adbd92a3c2478741e47bf0c1128344fa6", + "actor": "SivaKesava1", + "event_name": "workflow_dispatch", + "target_repo": "", + "staged": false, + "dry_run": false, + "allowed_domains": [ + "*.grafana.net", + "*.sentry.io", + "defaults", + "github", + "host.docker.internal", + "local", + "node", + "playwright" + ], + "firewall_enabled": true, + "awf_version": "v0.28.62", + "awmg_version": "", + "agent_runtime": "", + "steps": { + "firewall": "squid" + }, + "created_at": "2026-10-20T22:14:07.792Z", + "frontmatter_emoji": "๐Ÿงช", + "features": { + "gh-aw-detection": false + }, + "sub_agent_models": [ + { + "model": "large", + "name": "file-summarizer", + "patterns": [ + "github-copilot/*haiku*", + "anthropic/*haiku*", + "github-copilot/gpt-5*mini*", + "openai/gpt-5*mini*", + "github-copilot/gpt-5*nano*", + "openai/gpt-5*nano*", + "github-copilot/gemini-*flash*lite*", + "google/gemini-*flash*lite*", + "gemini/gemini-*flash*lite*", + "github-copilot/*sonnet*", + "anthropic/*sonnet*", + "github-copilot/gpt-6*", + "openai/gpt-6*", + "github-copilot/gpt-5*pro*", + "openai/gpt-5*pro*", + "github-copilot/gpt-5*", + "openai/gpt-5*", + "github-copilot/gemini-*pro*", + "google/gemini-*pro*", + "gemini/gemini-*pro*" + ] + } + ], + "requested_model": "auto", + "model_selection": { + "status": "observed", + "configured_model": "auto", + "resolved_model": "claude-sonnet-5.5", + "effective_model": "claude-sonnet-5.5" + } +} \ No newline at end of file diff --git a/actions/setup/js/fixtures/routing-analytics/run-39506475007/sandbox/firewall/awf-reflect.json b/actions/setup/js/fixtures/routing-analytics/run-39506475007/sandbox/firewall/awf-reflect.json new file mode 100644 index 00000000000..b7a34243a71 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39506475007/sandbox/firewall/awf-reflect.json @@ -0,0 +1 @@ +{"endpoints":[{"provider":"openai","port":10000,"base_url":"http://api-proxy:10000","configured":false,"models":null,"model_metadata":null,"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":[],"chat/completions":[],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":[]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":null,"models_url":"http://api-proxy:10000/v1/models"},{"provider":"anthropic","port":10001,"base_url":"http://api-proxy:10001","configured":false,"models":null,"model_metadata":null,"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":[],"chat/completions":[],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":[]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":null,"models_url":"http://api-proxy:10001/v1/models"},{"provider":"copilot","port":10002,"base_url":"http://api-proxy:10002","configured":true,"models":["claude-haiku-4.5","claude-haiku-5.5","claude-opus-5","claude-opus-5.5","claude-sonnet-5","claude-sonnet-5.5","gpt-3.5-turbo","gpt-3.5-turbo-0613","gpt-4","gpt-4-0613","gpt-4-o-preview","gpt-4.1","gpt-4.1-2025-04-14","gpt-41-copilot","gpt-4o","gpt-4o-2024-05-13","gpt-4o-2024-08-06","gpt-4o-2024-11-20","gpt-4o-mini","gpt-4o-mini-2024-07-18","gpt-5.3-codex","gpt-5.6-luna","gpt-5.6-luna-utility","gpt-5.6-sol","gpt-5.6-terra","gpt-6-astra","gpt-6-luna","gpt-6-sol","gpt-6.1-sol","grok-4.6","grok-4.7","mai-code-1.1-flash","text-embedding-3-small","text-embedding-3-small-inference","text-embedding-ada-002","trajectory-compaction"],"model_metadata":[{"id":"claude-haiku-4.5","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":1,"output":5,"cachedInput":0.1,"cacheWrite":1.25}}},{"id":"claude-haiku-5.5","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":0.1,"output":0.5,"cachedInput":0.01,"cacheWrite":0.12,"threshold":100000},"long_context":{"input":0.5,"output":2.5,"cachedInput":0.05,"cacheWrite":0.62,"threshold":936000}}},{"id":"claude-opus-5","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":5,"output":25,"cachedInput":0.5,"cacheWrite":6.25,"threshold":200000},"long_context":{"input":5,"output":25,"cachedInput":0.5,"cacheWrite":6.25,"threshold":936000}}},{"id":"claude-opus-5.5","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":4,"output":20,"cachedInput":0.2,"cacheWrite":5,"threshold":200000},"long_context":{"input":4,"output":20,"cachedInput":0.2,"cacheWrite":5,"threshold":1000000}}},{"id":"claude-sonnet-5","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":10,"cachedInput":0.2,"cacheWrite":2.5,"threshold":200000},"long_context":{"input":2,"output":10,"cachedInput":0.2,"cacheWrite":2.5,"threshold":936000}}},{"id":"claude-sonnet-5.5","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":10,"cachedInput":0.1,"cacheWrite":2.5,"threshold":200000},"long_context":{"input":2,"output":10,"cachedInput":0.1,"cacheWrite":2.5,"threshold":936000}}},{"id":"gpt-3.5-turbo","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"gpt-3.5-turbo-0613","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"gpt-4","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":2.5,"output":10,"cachedInput":1.25,"cacheWrite":0}}},{"id":"gpt-4-0613","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":2.5,"output":10,"cachedInput":1.25,"cacheWrite":0}}},{"id":"gpt-4-o-preview","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"gpt-4.1","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"gpt-4.1-2025-04-14","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"gpt-41-copilot","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":8,"cachedInput":0.5,"cacheWrite":0}}},{"id":"gpt-4o","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"gpt-4o-2024-05-13","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"gpt-4o-2024-08-06","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"gpt-4o-2024-11-20","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"gpt-4o-mini","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"gpt-4o-mini-2024-07-18","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"gpt-5.3-codex","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":1.75,"output":14,"cachedInput":0.17,"cacheWrite":0,"threshold":272000}}},{"id":"gpt-5.6-luna","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":0.2,"output":1.2,"cachedInput":0.02,"cacheWrite":0.25,"threshold":200000},"long_context":{"input":0.4,"output":1.8,"cachedInput":0.04,"cacheWrite":0.5,"threshold":922000}}},{"id":"gpt-5.6-luna-utility","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"gpt-5.6-sol","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":4,"output":20,"cachedInput":0.4,"cacheWrite":5,"threshold":272000},"long_context":{"input":8,"output":30,"cachedInput":0.8,"cacheWrite":10,"threshold":922000}}},{"id":"gpt-5.6-terra","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":12,"cachedInput":0.2,"cacheWrite":2.5,"threshold":272000},"long_context":{"input":4,"output":18,"cachedInput":0.4,"cacheWrite":5,"threshold":922000}}},{"id":"gpt-6-astra","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":10,"output":50,"cachedInput":1,"cacheWrite":12.5,"threshold":272000},"long_context":{"input":20,"output":75,"cachedInput":2,"cacheWrite":25,"threshold":1050000}}},{"id":"gpt-6-luna","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":0.1,"output":0.5,"cachedInput":0.01,"cacheWrite":0.12,"threshold":272000},"long_context":{"input":0.2,"output":0.75,"cachedInput":0.02,"cacheWrite":0.25,"threshold":872000}}},{"id":"gpt-6-sol","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":10,"cachedInput":0.2,"cacheWrite":2.5,"threshold":272000},"long_context":{"input":4,"output":15,"cachedInput":0.4,"cacheWrite":5,"threshold":872000}}},{"id":"gpt-6.1-sol","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":10,"cachedInput":0.1,"cacheWrite":2.5,"threshold":272000},"long_context":{"input":4,"output":15,"cachedInput":0.2,"cacheWrite":5,"threshold":922000}}},{"id":"grok-4.6","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","wire_api":"responses","pricing":{"default":{"input":2,"output":6,"cachedInput":0.5,"cacheWrite":0,"threshold":200000},"long_context":{"input":4,"output":12,"cachedInput":1,"cacheWrite":0,"threshold":500000}}},{"id":"grok-4.7","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","wire_api":"responses","pricing":{"default":{"input":2,"output":6,"cachedInput":0.5,"cacheWrite":0,"threshold":200000},"long_context":{"input":4,"output":12,"cachedInput":1,"cacheWrite":0,"threshold":500000}}},{"id":"mai-code-1.1-flash","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","pricing":{"default":{"input":0.2,"output":1.2,"cachedInput":0.02,"cacheWrite":0.25,"threshold":128000}}},{"id":"text-embedding-3-small","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"text-embedding-3-small-inference","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"text-embedding-ada-002","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01"},{"id":"trajectory-compaction","source":"provider","observed_at":"2026-10-20T22:18:50.386Z","api_version":"2026-07-01","wire_api":"completions"}],"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":["claude-sonnet-5.5","claude-sonnet-5","claude-opus-5.5","claude-opus-5","claude-haiku-5.5","claude-haiku-4.5"],"chat/completions":["claude-sonnet-5.5","claude-sonnet-5","claude-opus-5.5","claude-opus-5","claude-haiku-5.5","claude-haiku-4.5"],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":["gpt-6.1-sol","gpt-6-astra","gpt-6-luna","gpt-6-sol","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","gpt-5.3-codex"]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":[{"model_id":"claude-haiku-4.5","source":"provider","supported_endpoints":["/chat/completions","/v1/messages"],"supported_reasoning_efforts":[],"context_window_tokens":200000,"candidate_metadata_complete":true},{"model_id":"claude-haiku-5.5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"claude-opus-5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"claude-opus-5.5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"claude-sonnet-5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"claude-sonnet-5.5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"gpt-3.5-turbo","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":16384,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-3.5-turbo-0613","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":16384,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":32768,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4-0613","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":32768,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4-o-preview","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4.1","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4.1-2025-04-14","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-41-copilot","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":null,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-2024-05-13","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-2024-08-06","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-2024-11-20","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-mini","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-mini-2024-07-18","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-5.3-codex","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh"],"context_window_tokens":400000,"candidate_metadata_complete":true},{"model_id":"gpt-5.6-luna","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"gpt-5.6-luna-utility","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-5.6-sol","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"gpt-5.6-terra","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"gpt-6-astra","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"gpt-6-luna","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"gpt-6-sol","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"gpt-6.1-sol","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"grok-4.6","source":"provider","supported_endpoints":["/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh"],"context_window_tokens":500000,"candidate_metadata_complete":true},{"model_id":"grok-4.7","source":"provider","supported_endpoints":["/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh"],"context_window_tokens":500000,"candidate_metadata_complete":true},{"model_id":"mai-code-1.1-flash","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["low","medium","high"],"context_window_tokens":256000,"candidate_metadata_complete":true},{"model_id":"text-embedding-3-small","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":null,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"text-embedding-3-small-inference","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":null,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"text-embedding-ada-002","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":null,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"trajectory-compaction","source":"provider","supported_endpoints":["/chat/completions"],"supported_reasoning_efforts":[],"context_window_tokens":262144,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"}],"models_url":"http://api-proxy:10002/models","credential_kind":"fine_grained_pat","selected_scheme":"Bearer","inference_credential_source":"github_token","inference_selected_scheme":"Bearer","integration_id_source":"github_copilot_integration_id"},{"provider":"gemini","port":10003,"base_url":"http://api-proxy:10003","configured":false,"models":null,"model_metadata":null,"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":[],"chat/completions":[],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":[]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":null,"models_url":"http://api-proxy:10003/v1beta/models"},{"provider":"vertex","port":10004,"base_url":"http://api-proxy:10004","configured":false,"models":null,"model_metadata":null,"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":[],"chat/completions":[],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":[]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":null,"models_url":null}],"models_fetch_complete":true,"model_aliases":{"agent":["sonnet-6x","gpt-6","gpt-5.4","gpt-5.5","gpt-5.6","gpt-5.3","gemini-pro","any"],"any":["copilot/*","anthropic/*","openai/*","google/*","gemini/*"],"auto":["copilot/auto","large"],"claude":["agent"],"codex":["agent"],"coding":["copilot/gpt-5*codex*","openai/gpt-5*codex*","gpt-5-codex","kimi"],"copilot":["agent"],"detection":["small"],"evals":["small"],"gemini":["agent"],"gpt-5":["copilot/gpt-5*","openai/gpt-5*"],"gpt-5-codex":["copilot/gpt-5*codex*","openai/gpt-5*codex*"],"gpt-5.3":["copilot/gpt-5.3*","openai/gpt-5.3*"],"gpt-5.6":["copilot/gpt-5.6*","openai/gpt-5.6*"],"gpt-6":["copilot/gpt-6*","openai/gpt-6*"],"grok":["copilot/*grok*","openai/*grok*"],"haiku":["copilot/*haiku*","anthropic/*haiku*"],"large":["sonnet","gpt-6","gpt-5-pro","gpt-5","gemini-pro"],"mai-code":["copilot/MAI-Code*","copilot/mai-code*","openai/MAI-Code*"],"mini":["haiku","gpt-5-mini","gpt-5-nano","gemini-flash-lite"],"opus":["copilot/*opus*","anthropic/*opus*"],"opusplan":["opus?effort=high"],"small":["mini"],"small-agent":["haiku","gpt-5-mini","gemini-flash"],"sonnet":["copilot/*sonnet*","anthropic/*sonnet*"],"sonnet-6x":["copilot/*sonnet-4.5*","copilot/*sonnet-4.6*","copilot/*sonnet-5*","copilot/*sonnet-4-5-*","anthropic/*sonnet-4-5-*","copilot/*sonnet-4-6*","anthropic/*sonnet-4-6*","anthropic/*sonnet-5*"],"summarization":["haiku","gpt-5-mini","gemini-flash-lite","mini"]},"model_fallback":{"enabled":false,"strategy":"middle_power","excludeEngines":[]},"model_fallback_effective":{"openai":{"enabled":false,"strategy":"middle_power","excludeEngines":[],"suppressed":false},"anthropic":{"enabled":false,"strategy":"middle_power","excludeEngines":[],"suppressed":false},"copilot":{"enabled":false,"strategy":"middle_power","excludeEngines":[],"suppressed":false},"gemini":{"enabled":false,"strategy":"middle_power","excludeEngines":[],"suppressed":false},"vertex":{"enabled":false,"strategy":"middle_power","excludeEngines":[],"suppressed":false}},"ai_credits":{"total":21.92978,"max_ai_credits":1000,"effective_max_ai_credits":1000,"percent_used":2.19,"thresholds_crossed":[],"thresholds_pending":[],"by_model":{"claude-sonnet-5.5":{"input_credits":1.7824,"cached_input_credits":2.43338,"cache_write_credits":16.577,"output_credits":1.137,"total":21.92978,"pricing_source":"operator","pricing_tier":"default","accounting_policy":"concrete_model","fallback_pricing_used":false,"dynamic_selector":null}}},"time_steering":{"enabled":true,"timeout_minutes":8,"started_at_ms":1792534736483,"percent_elapsed":3.09,"thresholds_crossed":[],"thresholds_pending":[]},"runs":{"enabled":true,"max_runs":500,"invocation_count":3,"remaining_runs":497},"cache_misses":{"enabled":true,"max_cache_misses":5,"consecutive_cache_misses":0,"remaining_cache_misses":5},"permission_denied":{"enabled":false,"max_permission_denied":null,"denied_count":0},"model_api_mapping":{"available":true,"last_updated":"2026-10-08T07:12:00Z","providers":["openai","anthropic"],"models":{"openai":{"endpoints":{"responses":{"path":"/v1/responses","description":"Newer unified API for agentic, tool-using, and multimodal workflows. Required for GPT-5+ models; some older models (o1, o3, gpt-4o, gpt-4.1) support it alongside chat/completions."},"chat_completions":{"path":"/v1/chat/completions","description":"Legacy conversational API. Being deprecated for newer models by end of 2026."}},"models":[{"family":"gpt-6-astra","patterns":["gpt-6-astra*"],"endpoints":["chat_completions","responses"],"notes":"Newest flagship model (Trusted Access Program rollout). Supports Chat Completions and Responses APIs."},{"family":"gpt-6-sol","patterns":["gpt-6-sol*"],"endpoints":["chat_completions","responses"],"notes":"GPT-6 tier balancing intelligence and cost. Supports both Chat Completions and Responses APIs per official model page."},{"family":"gpt-6.1-sol","patterns":["gpt-6.1-sol*"],"endpoints":["chat_completions","responses"],"notes":"GPT-6.1 tier balancing intelligence and cost (successor to gpt-6-sol). Supports both Chat Completions and Responses APIs, consistent with other GPT-6 tiers."},{"family":"gpt-6-luna","patterns":["gpt-6-luna*"],"endpoints":["chat_completions","responses"],"notes":"GPT-6 tier for cost-sensitive, high-volume use. Supports both Chat Completions and Responses APIs per official model page."},{"family":"gpt-daybreak","patterns":["gpt-daybreak-blue-latest","gpt-daybreak-red-latest"],"endpoints":["responses"],"notes":"Responses API only (ResponsesModel-only Literal). Experimental/preview aliases not present in ChatModel."},{"family":"gpt-rosalind-research","patterns":["gpt-rosalind-research*"],"endpoints":["responses"],"notes":"Life sciences reasoning model, Trusted Access Program (approved organizations only). Responses API only, consistent with other restricted-access specialized models (gpt-daybreak-*, gpt-5.6-cyber). Billing begins October 5, 2026."},{"family":"gpt-5.6-cyber","patterns":["gpt-5.6-cyber*"],"endpoints":["responses"],"notes":"Responses API only (ResponsesModel-only Literal, not in ChatModel). More specific than gpt-5.6* pattern below."},{"family":"gpt-5.6","patterns":["gpt-5.6*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. Includes gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna per OpenAI SDK ChatModel. gpt-5.6-cyber is responses-only (see separate entry above)."},{"family":"gpt-5.5-pro","patterns":["gpt-5.5-pro","gpt-5.5-pro-*"],"endpoints":["responses"],"notes":"Responses API only (ResponsesOnlyModel per OpenAI OpenAPI spec). More specific than gpt-5.5* pattern below. Includes dated variants like gpt-5.5-pro-2026-04-23."},{"family":"gpt-5.5","patterns":["gpt-5.5*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. Listed on the official GPT-5.5 model page. gpt-5.5-pro is responses-only (see separate entry above)."},{"family":"gpt-5.4","patterns":["gpt-5.4*"],"routingPatterns":["gpt-5.4","gpt-5.4-2026-03-05"],"endpoints":["chat_completions","responses"],"routing":{"reasoningEfforts":["none","low","medium","high","xhigh"],"contextWindowTokens":1050000},"notes":"Supports both endpoints on OpenAI. GPT-5.4 routing metadata is exact-model only; mini/nano variants need separately verified data. The model page lists none, low, medium, high, and xhigh reasoning effort and a 1,050,000-token context window."},{"family":"gpt-5.3-codex","patterns":["gpt-5.3-codex","gpt-5.3-codex-*"],"endpoints":["responses"],"notes":"Responses API only per official model page (developers.openai.com/api/docs/models/gpt-5.3-codex). More specific than gpt-5.3* pattern below."},{"family":"gpt-5.3","patterns":["gpt-5.3*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. Only gpt-5.3-chat-latest confirmed for both endpoints; gpt-5.3-codex is responses-only (see separate entry above). No bare gpt-5.3 base model exists."},{"family":"gpt-5.2-codex","patterns":["gpt-5.2-codex","gpt-5.2-codex-*"],"endpoints":["responses"],"notes":"Responses API only per official model page (developers.openai.com/api/docs/models/gpt-5.2-codex). More specific than gpt-5.2* pattern below."},{"family":"gpt-5.2-pro","patterns":["gpt-5.2-pro","gpt-5.2-pro-*"],"endpoints":["responses"],"notes":"Responses API only per official model page (developers.openai.com/api/docs/models/gpt-5.2-pro). More specific than gpt-5.2* pattern below."},{"family":"gpt-5.2","patterns":["gpt-5.2*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. gpt-5.2-pro and gpt-5.2-codex are responses-only (see separate entries above)."},{"family":"gpt-5.1-codex-max","patterns":["gpt-5.1-codex-max"],"endpoints":["responses"],"notes":"Responses API only (ResponsesOnlyModel)."},{"family":"gpt-5.1-codex","patterns":["gpt-5.1-codex","gpt-5.1-codex-*"],"endpoints":["responses"],"notes":"Responses API only per official model pages (developers.openai.com/api/docs/models/gpt-5.1-codex, /gpt-5.1-codex-mini). More specific than gpt-5.1* pattern below. gpt-5.1-codex-max is covered by a dedicated entry above."},{"family":"gpt-5.1","patterns":["gpt-5.1*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints for gpt-5.1 and gpt-5.1-mini. gpt-5.1-codex, gpt-5.1-codex-mini, and gpt-5.1-codex-max are responses-only (see separate entries above)."},{"family":"gpt-5-codex/pro","patterns":["gpt-5-codex","gpt-5-pro","gpt-5-pro-*"],"endpoints":["responses"],"notes":"Responses API only for gpt-5-codex and gpt-5-pro (ResponsesOnlyModel). Includes dated variants like gpt-5-pro-2025-10-06."},{"family":"gpt-5","patterns":["gpt-5","gpt-5-*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints for gpt-5, gpt-5-mini, gpt-5-nano."},{"family":"o4-mini-deep-research","patterns":["o4-mini-deep-research","o4-mini-deep-research-*"],"endpoints":["responses"],"notes":"Responses API only (ResponsesOnlyModel). Includes dated variants like o4-mini-deep-research-2025-06-26."},{"family":"o4","patterns":["o4*"],"endpoints":["chat_completions","responses"],"notes":"Reasoning model. o4-mini supports both endpoints (ModelIdsShared)."},{"family":"o3-pro/deep-research","patterns":["o3-pro","o3-pro-*","o3-deep-research","o3-deep-research-*"],"endpoints":["responses"],"notes":"Responses API only. o3-pro and o3-deep-research are in ResponsesModel but not ChatModel."},{"family":"o3","patterns":["o3*"],"endpoints":["chat_completions","responses"],"notes":"Reasoning model. o3, o3-mini support both endpoints. o3-pro/deep-research use responses only (covered by separate entry above)."},{"family":"o1-pro","patterns":["o1-pro","o1-pro-*"],"endpoints":["responses"],"notes":"Responses API only. o1-pro is in ResponsesModel but not ChatModel."},{"family":"o1-mini/preview","patterns":["o1-mini*","o1-preview*"],"endpoints":["chat_completions"],"notes":"Chat Completions API only per official model pages (developers.openai.com/api/docs/models/o1-mini, /o1-preview). Not available via Responses API. More specific than o1* pattern below."},{"family":"o1","patterns":["o1*"],"endpoints":["chat_completions","responses"],"notes":"Reasoning model. o1 (base) supports both endpoints. o1-pro is responses-only and o1-mini/o1-preview are chat_completions-only (see separate entries above)."},{"family":"computer-use-preview","patterns":["computer-use-preview*"],"endpoints":["responses"],"notes":"Responses API only. Specialized model for computer use tasks."},{"family":"codex-mini","patterns":["codex-mini*"],"endpoints":["responses"],"notes":"Responses API only per official model page (developers.openai.com/api/docs/models/codex-mini-latest). Chat Completions is marked unsupported on the model page."},{"family":"chatgpt-4o-latest","patterns":["chatgpt-4o-latest"],"endpoints":["chat_completions","responses"],"notes":"Rolling alias for the latest ChatGPT-optimized GPT-4o model. Supports both endpoints (ModelIdsShared). Not matched by gpt-4o* pattern due to chatgpt- prefix."},{"family":"gpt-4o","patterns":["gpt-4o*"],"endpoints":["chat_completions","responses"],"notes":"Multimodal. Supports both endpoints. Includes audio and search preview variants."},{"family":"gpt-4.1","patterns":["gpt-4.1*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. Includes gpt-4.1-mini, gpt-4.1-nano."},{"family":"gpt-4.5","patterns":["gpt-4.5*"],"endpoints":["chat_completions","responses"],"notes":"Preview model. Now supports both endpoints per official model page (developers.openai.com/api/docs/models/gpt-4.5-preview); Responses API support was added since the previous mapping update."},{"family":"gpt-4-turbo","patterns":["gpt-4-turbo*"],"endpoints":["chat_completions","responses"],"notes":"Legacy. In ModelIdsShared per OpenAI spec v2.3.0; supports both endpoints."},{"family":"gpt-4","patterns":["gpt-4","gpt-4-*"],"endpoints":["chat_completions","responses"],"notes":"Legacy. In ModelIdsShared per OpenAI spec v2.3.0; supports both endpoints."},{"family":"gpt-3.5-turbo","patterns":["gpt-3.5-turbo*"],"endpoints":["chat_completions","responses"],"notes":"Legacy. In ModelIdsShared per OpenAI spec v2.3.0; supports both endpoints. Deprecated."}]},"anthropic":{"endpoints":{"messages":{"path":"/v1/messages","description":"Unified Messages API for all Claude models. Supports tool use, streaming, extended thinking, and vision."}},"models":[{"family":"claude-opus-5","patterns":["claude-opus-5*"],"routingPatterns":["claude-opus-5-5","claude-opus-5"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Flagship Opus generation 5 models with verified 1M-token context windows and the Anthropic effort parameter."},{"family":"claude-fable-5","patterns":["claude-fable-5*"],"routingPatterns":["claude-fable-5-1","claude-fable-5"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Latest flagship family with verified 1M-token context windows and the Anthropic effort parameter."},{"family":"claude-mythos-5","patterns":["claude-mythos-5*","claude-mythos-preview*"],"routingPatterns":["claude-mythos-5-1","claude-mythos-5","claude-mythos-preview*"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Specialized models, invitation-only, with verified 1M-token context windows and the Anthropic effort parameter."},{"family":"claude-sonnet-5","patterns":["claude-sonnet-5*"],"routingPatterns":["claude-sonnet-5-5","claude-sonnet-5"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Best combination of speed and intelligence with verified 1M-token context windows and the Anthropic effort parameter."},{"family":"claude-opus-4","patterns":["claude-opus-4*"],"routingPatterns":["claude-opus-4-8","claude-opus-4-7","claude-opus-4-6"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Opus 4.6 and newer models have verified 1M-token context windows and support the Anthropic effort parameter."},{"family":"claude-sonnet-4","patterns":["claude-sonnet-4*"],"routingPatterns":["claude-sonnet-4-6"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Sonnet 4.6 has a verified 1M-token context window and supports the Anthropic effort parameter."},{"family":"claude-haiku-5","patterns":["claude-haiku-5*"],"endpoints":["messages"],"notes":"Fast/cheap Haiku generation 5 (claude-haiku-5-5). 1M token context window per official models overview; effort levels not verified, so no routing metadata."},{"family":"claude-haiku-4","patterns":["claude-haiku-4*"],"endpoints":["messages"],"notes":"Includes claude-haiku-4-5. Fast/cheap. 200K token context."},{"family":"claude-3.5-sonnet","patterns":["claude-3-5-sonnet*","claude-3.5-sonnet*"],"endpoints":["messages"],"notes":"Previous generation. 200K token context."},{"family":"claude-3.5-haiku","patterns":["claude-3-5-haiku*","claude-3.5-haiku*"],"endpoints":["messages"],"notes":"Previous generation fast model."},{"family":"claude-3.7-sonnet","patterns":["claude-3-7-sonnet*","claude-3.7-sonnet*"],"endpoints":["messages"],"notes":"Previous generation extended thinking model. 200K token context."},{"family":"claude-3-opus","patterns":["claude-3-opus*"],"endpoints":["messages"],"notes":"Previous generation. 200K token context."}]}},"error":null},"routing":null} \ No newline at end of file diff --git a/actions/setup/js/fixtures/routing-analytics/run-39506475007/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl b/actions/setup/js/fixtures/routing-analytics/run-39506475007/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl new file mode 100644 index 00000000000..513ccd332bf --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39506475007/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl @@ -0,0 +1,3 @@ +{"_schema":"token-usage/v0.28.62","timestamp":"2026-10-20T22:19:03.979Z","event":"token_usage","request_id":"8df4162d-7b1e-4f49-acce-bfcc2c7dd082","provider":"copilot","model":"claude-sonnet-5.5","path":"/chat/completions","status":200,"streaming":true,"input_tokens":8908,"output_tokens":431,"cache_read_tokens":0,"cache_write_tokens":56048,"duration_ms":4202,"response_bytes":19330,"x_initiator":"user","ai_credits_this_response":16.2246,"ai_credits_total":16.2246,"ai_credits_pricing_source":"operator","ai_credits_pricing_tier":"default","ai_credits_accounting_policy":"concrete_model","ai_credits_fallback_pricing_used":false} +{"_schema":"token-usage/v0.28.62","timestamp":"2026-10-20T22:19:08.977Z","event":"token_usage","request_id":"a347dea2-37f4-4cf9-a44a-0621b0f701fc","provider":"copilot","model":"claude-sonnet-5.5","path":"/chat/completions","status":200,"streaming":true,"input_tokens":2,"output_tokens":604,"cache_read_tokens":56048,"cache_write_tokens":9573,"duration_ms":4786,"response_bytes":30231,"x_initiator":"agent","ai_credits_this_response":4.11861,"ai_credits_total":20.34321,"ai_credits_pricing_source":"operator","ai_credits_pricing_tier":"default","ai_credits_accounting_policy":"concrete_model","ai_credits_fallback_pricing_used":false} +{"_schema":"token-usage/v0.28.62","timestamp":"2026-10-20T22:19:11.205Z","event":"token_usage","request_id":"94186d9d-abfc-435d-9ca0-1ba26ab4ec7e","provider":"copilot","model":"claude-sonnet-5.5","path":"/chat/completions","status":200,"streaming":true,"input_tokens":2,"output_tokens":102,"cache_read_tokens":65621,"cache_write_tokens":687,"duration_ms":1958,"response_bytes":5631,"x_initiator":"agent","ai_credits_this_response":1.58657,"ai_credits_total":21.92978,"ai_credits_pricing_source":"operator","ai_credits_pricing_tier":"default","ai_credits_accounting_policy":"concrete_model","ai_credits_fallback_pricing_used":false} diff --git a/actions/setup/js/fixtures/routing-analytics/run-39508154330/agent/model-resolution.json b/actions/setup/js/fixtures/routing-analytics/run-39508154330/agent/model-resolution.json new file mode 100644 index 00000000000..da8e9505e7c --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39508154330/agent/model-resolution.json @@ -0,0 +1,11 @@ +[ + { + "engine": "copilot", + "role": "haiku-whoami", + "configured_model": "claude-haiku-4.5", + "resolved_model": "claude-haiku-4.5", + "provider": "copilot", + "status": "exact", + "cause": null + } +] diff --git a/actions/setup/js/fixtures/routing-analytics/run-39508154330/aw_session.jsonl b/actions/setup/js/fixtures/routing-analytics/run-39508154330/aw_session.jsonl new file mode 100644 index 00000000000..0ce0fd59799 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39508154330/aw_session.jsonl @@ -0,0 +1,21 @@ +{"type":"session.format","data":{"version":1},"provenance":{"component":"collector","phase":"conclusion","path":"usage/aw_session.jsonl","index":0}} +{"type":"workflow.info","timestamp":"2026-10-20T22:27:34.002Z","data":{"dryRun":false,"engineId":"copilot","agentVersion":"1.0.98","awfVersion":"v0.28.70","mcpgVersion":"","model":"gpt-5.6-luna","requestedModel":"auto","modelRouting":{"status":"selected","source":"awf-routing","provider":"copilot","wireModel":"gpt-5.6-luna","model":"github-copilot/gpt-5.6-luna","effort":"max","effectiveEndpoint":"/responses","selectedEndpoint":"/responses","mode":"balanced","selectedId":"choice-0003","routerVersion":"0.1.3"},"triggerType":"workflow_dispatch","workflow":"Smoke Copilot SDK Routed","workflowId":"github/gh-aw/.github/workflows/smoke-copilot-sdk-routed.lock.yml@refs/heads/main","workflowCallId":"39508154330-1:github/gh-aw/.github/workflows/smoke-copilot-sdk-routed.lock.yml@refs/heads/main","callerWorkflowRef":"github/gh-aw/.github/workflows/smoke-copilot-sdk-routed.lock.yml@refs/heads/main","repository":"github/gh-aw","runId":39508154330,"runAttempt":"1","ref":"refs/heads/main","sha":"70e15c7ff659c05c2f4466aa172bb910d28847a2","actor":"SivaKesava1","targetRepo":""},"provenance":{"component":"workflow","phase":"agent","path":"runtime/aw_info.json","index":0,"timestampMs":1792535254002}} +{"type":"firewall.model_routing","timestamp":"2026-10-20T22:29:35.333Z","data":{"schema":"model-routing/v0.28.70","stage":"classification","purpose":"routing_classification","attempt":1,"classifierModel":"github-copilot/gpt-5.6-luna","classifierEffort":"high"},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl","index":0,"timestampMs":1792535375333}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:29:41.789Z","data":{"provider":"copilot","model":"gpt-5.6-luna","purpose":"routing_classification","path":"/responses","xInitiator":"agent","requestId":"098f36ac-9fc1-4908-9a33-c5d745370c3b","status":200,"aic":0.08558,"totalAic":0.08558,"durationMs":6453,"usage":{"inputTokens":997,"outputTokens":547,"cacheReadInputTokens":0,"cacheCreationInputTokens":0}},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":0,"timestampMs":1792535381789}} +{"type":"firewall.model_routing","timestamp":"2026-10-20T22:29:41.796Z","data":{"schema":"model-routing/v0.28.70","stage":"selection","classifierModel":"github-copilot/gpt-5.6-luna","classifierEffort":"high","objective":{"goal":"cost","mode":"economy"},"provider":"copilot","labels":{"task_type":"chore","scope":"cross_system","task_complexity":"easy"},"mode":"balanced","classifierAttempts":1,"degradedClassification":false,"degradedReason":null,"selectedId":"choice-0003","selectedProvider":"copilot","selectedModel":"github-copilot/gpt-5.6-luna","selectedEffort":"max","wireModel":"gpt-5.6-luna","endpoint":"/responses","router":{"name":"gh-aw-router","version":"0.1.3"},"latencyMs":6478,"rankedChoices":[{"rank":1,"model":"github-copilot/gpt-5.6-luna","effort":"max"},{"rank":2,"model":"github-copilot/gpt-5.6-luna","effort":"xhigh"},{"rank":3,"model":"github-copilot/gpt-5.6-luna","effort":"high"},{"rank":4,"model":"github-copilot/gpt-5.6-luna","effort":"medium"},{"rank":5,"model":"github-copilot/gpt-5.6-luna","effort":"low"},{"rank":6,"model":"github-copilot/gpt-5.6-luna","effort":"none"}],"eligibleChoices":6,"catalogueOverlap":6},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl","index":1,"timestampMs":1792535381796}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:30:03.695Z","data":{"provider":"copilot","model":"gpt-5.6-luna","path":"/responses","xInitiator":"user","requestId":"3568e8b2-4eba-44e3-8817-c3dd9ae26103","status":200,"aic":0.48396,"totalAic":0.56954,"durationMs":10311,"usage":{"inputTokens":3,"outputTokens":175,"cacheReadInputTokens":0,"cacheCreationInputTokens":18516}},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":1,"timestampMs":1792535403695}} +{"type":"firewall.model_routing","timestamp":"2026-10-20T22:30:03.696Z","data":{"schema":"model-routing/v0.28.70","stage":"request","provider":"copilot","selectedProvider":"copilot","selectedModel":"gpt-5.6-luna","selectedEffort":"max","requestId":"3568e8b2-4eba-44e3-8817-c3dd9ae26103","routed":"as_selected","deviations":[],"requestedModel":"gpt-5.6-luna","requestedEffort":"max","outcome":"completed","selectedEndpoint":"/responses","requestedEndpoint":"/responses","upstreamEndpoint":"/responses","unavailable":[],"status":200},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl","index":2,"timestampMs":1792535403696}} +{"type":"firewall.model_routing","timestamp":"2026-10-20T22:30:06.045Z","data":{"schema":"model-routing/v0.28.70","stage":"request","provider":"copilot","selectedProvider":"copilot","selectedModel":"gpt-5.6-luna","selectedEffort":"max","requestId":"06be373c-514d-4391-8a18-a96f3d4023c8","routed":"as_selected","deviations":[],"requestedModel":"gpt-5.6-luna","requestedEffort":"max","outcome":"completed","selectedEndpoint":"/responses","requestedEndpoint":"/responses","upstreamEndpoint":"/responses","unavailable":[],"status":200},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl","index":3,"timestampMs":1792535406045}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:30:06.045Z","data":{"provider":"copilot","model":"gpt-5.6-luna","path":"/responses","xInitiator":"agent","requestId":"06be373c-514d-4391-8a18-a96f3d4023c8","status":200,"aic":0.052887,"totalAic":0.622427,"durationMs":2316,"usage":{"inputTokens":3,"outputTokens":61,"cacheReadInputTokens":18516,"cacheCreationInputTokens":339}},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":2,"timestampMs":1792535406045}} +{"type":"firewall.model_routing","timestamp":"2026-10-20T22:30:07.143Z","data":{"schema":"model-routing/v0.28.70","stage":"request","provider":"copilot","selectedProvider":"copilot","selectedModel":"gpt-5.6-luna","selectedEffort":"max","requestId":"6af43f9c-db6f-4ee6-93a0-c8ff6a661919","routed":"deviated","deviations":["model","effort","endpoint"],"requestedModel":"claude-haiku-4.5","requestedEffort":null,"outcome":"completed","selectedEndpoint":"/responses","requestedEndpoint":"/chat/completions","upstreamEndpoint":"/chat/completions","unavailable":[],"status":200},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl","index":4,"timestampMs":1792535407143}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:30:07.143Z","data":{"provider":"copilot","model":"claude-haiku-4.5","path":"/chat/completions","xInitiator":"agent","requestId":"6af43f9c-db6f-4ee6-93a0-c8ff6a661919","status":200,"aic":2.528225,"totalAic":3.150652,"durationMs":1005,"usage":{"inputTokens":356,"outputTokens":8,"cacheReadInputTokens":0,"cacheCreationInputTokens":19909}},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":3,"timestampMs":1792535407143}} +{"type":"firewall.model_routing","timestamp":"2026-10-20T22:30:12.381Z","data":{"schema":"model-routing/v0.28.70","stage":"request","provider":"copilot","selectedProvider":"copilot","selectedModel":"gpt-5.6-luna","selectedEffort":"max","requestId":"786666b6-42fa-4a7a-af92-d9fca938b961","routed":"as_selected","deviations":[],"requestedModel":"gpt-5.6-luna","requestedEffort":"max","outcome":"completed","selectedEndpoint":"/responses","requestedEndpoint":"/responses","upstreamEndpoint":"/responses","unavailable":[],"status":200},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl","index":5,"timestampMs":1792535412381}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:30:12.381Z","data":{"provider":"copilot","model":"gpt-5.6-luna","path":"/responses","xInitiator":"agent","requestId":"786666b6-42fa-4a7a-af92-d9fca938b961","status":200,"aic":0.06487,"totalAic":3.215522,"durationMs":5209,"usage":{"inputTokens":3,"outputTokens":210,"cacheReadInputTokens":18855,"cacheCreationInputTokens":76}},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":4,"timestampMs":1792535412381}} +{"type":"firewall.model_routing","timestamp":"2026-10-20T22:30:15.732Z","data":{"schema":"model-routing/v0.28.70","stage":"request","provider":"copilot","selectedProvider":"copilot","selectedModel":"gpt-5.6-luna","selectedEffort":"max","requestId":"962c7fa8-9a3e-4218-a7a5-c8b27c8f7444","routed":"as_selected","deviations":[],"requestedModel":"gpt-5.6-luna","requestedEffort":"max","outcome":"completed","selectedEndpoint":"/responses","requestedEndpoint":"/responses","upstreamEndpoint":"/responses","unavailable":[],"status":200},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl","index":6,"timestampMs":1792535415732}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:30:15.732Z","data":{"provider":"copilot","model":"gpt-5.6-luna","path":"/responses","xInitiator":"agent","requestId":"962c7fa8-9a3e-4218-a7a5-c8b27c8f7444","status":200,"aic":0.050822,"totalAic":3.266344,"durationMs":3063,"usage":{"inputTokens":3,"outputTokens":60,"cacheReadInputTokens":18931,"cacheCreationInputTokens":228}},"provenance":{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":5,"timestampMs":1792535415732}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:31:45.913Z","data":{"provider":"copilot","model":"claude-haiku-5.5","path":"/chat/completions","xInitiator":"user","requestId":"2dfb5bee-f6c5-410a-b563-3bb6e89ce42a","status":200,"aic":0.245324,"totalAic":0.245324,"durationMs":1749,"usage":{"inputTokens":2287,"outputTokens":143,"cacheReadInputTokens":0,"cacheCreationInputTokens":17942}},"provenance":{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":0,"timestampMs":1792535505913}} +{"type":"firewall.token_usage","timestamp":"2026-10-20T22:31:48.439Z","data":{"provider":"copilot","model":"claude-haiku-5.5","path":"/chat/completions","xInitiator":"agent","requestId":"9aeebc08-1991-4212-a3d7-ec3fc0cf11a6","status":200,"aic":0.06189,"totalAic":0.307214,"durationMs":2460,"usage":{"inputTokens":2,"outputTokens":148,"cacheReadInputTokens":17942,"cacheCreationInputTokens":3044}},"provenance":{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","index":1,"timestampMs":1792535508439}} +{"type":"model.resolution","data":{"engine":"copilot","role":"haiku-whoami","configured_model":"claude-haiku-4.5","resolved_model":"claude-haiku-4.5","provider":"copilot","status":"exact","cause":null},"provenance":{"component":"model_resolution","phase":"agent","path":"agent/model-resolution.json","index":0}} +{"type":"model_routing.outcome","data":{"status":"selected","wireModel":"gpt-5.6-luna","effectiveEndpoint":"/responses","selectedEndpoint":"/responses","effort":"max","appliedEffort":"max"},"provenance":{"component":"agent","phase":"agent","path":"agent/awf-routing-outcome.json","index":0}} +{"type":"guardrail.daily_aic","data":{"status":"skipped","exceeded":false},"provenance":{"component":"guardrail","phase":"activation","path":"usage/aw_session.jsonl","index":0}} +{"type":"session.collection","data":{"sources":[{"component":"workflow","phase":"agent","path":"runtime/aw_info.json","timestampUnit":"milliseconds","events":1},{"component":"skill","phase":"activation","path":"skill_inventory.json","events":2},{"component":"prompt","phase":"activation","path":"aw-prompts/system.txt","events":1},{"component":"prompt","phase":"activation","path":"aw-prompts/user.txt","events":1},{"component":"agent","phase":"agent","path":"sandbox/agent/logs/copilot-session-state/3826d660-bd62-4ea5-a4f5-51b90d3b7168/events.jsonl","timestampUnit":"milliseconds","events":47},{"component":"firewall","phase":"agent","path":"sandbox/firewall/awf-reflect.json","events":1},{"component":"otel","phase":"agent","path":"otel.jsonl","timestampUnit":"nanoseconds","events":1},{"component":"mcp","phase":"agent","path":"mcp-logs/configuration.jsonl","timestampUnit":"milliseconds","events":1},{"component":"mcp","phase":"agent","path":"mcp-logs/rpc-messages.jsonl","timestampUnit":"milliseconds","events":8},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl","timestampUnit":"milliseconds","events":7},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/otel.jsonl","timestampUnit":"milliseconds","events":6},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-tracker-audit.jsonl","timestampUnit":"milliseconds","events":12},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","timestampUnit":"milliseconds","events":6},{"component":"firewall","phase":"agent","path":"sandbox/firewall/logs/audit.jsonl","timestampUnit":"seconds","events":29},{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/otel.jsonl","timestampUnit":"milliseconds","events":3},{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/token-tracker-audit.jsonl","timestampUnit":"milliseconds","events":6},{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl","timestampUnit":"milliseconds","events":2},{"component":"firewall","phase":"detection","path":"threat-detection/sandbox/firewall/logs/audit.jsonl","timestampUnit":"seconds","events":12},{"component":"model_resolution","phase":"agent","path":"agent/model-resolution.json","events":1},{"component":"agent","phase":"agent","path":"agent/awf-routing-outcome.json","events":1},{"component":"safe_output","phase":"agent","path":"safeoutputs.jsonl","timestampUnit":"milliseconds","events":1},{"component":"safe_output","phase":"safe_outputs","path":"safe-output-items.jsonl","timestampUnit":"milliseconds","events":1},{"component":"github_api","phase":"workflow","path":"github_rate_limits.jsonl","timestampUnit":"milliseconds","events":67},{"component":"execution","phase":"agent","path":"agent_execution.json","timestampUnit":"milliseconds","events":1},{"component":"execution","phase":"detection","path":"threat-detection/execution.json","timestampUnit":"milliseconds","events":1},{"component":"agent","phase":"agent","path":"agent-errors.jsonl","timestampUnit":"milliseconds","events":0},{"component":"execution","phase":"agent","path":"agent-errors.jsonl","events":1},{"component":"guardrail","phase":"activation","path":"usage/aw_session.jsonl","events":1},{"component":"workflow","phase":"conclusion","path":"usage/aw_session.jsonl","events":5},{"component":"grader","phase":"conclusion","path":"usage/graders/grader_manifest.json","events":1},{"component":"grader","phase":"conclusion","path":"usage/graders/grader_results.json","events":1}],"warnings":0,"untimedEvents":19,"absentComponents":["experiment","eval"]},"provenance":{"component":"collector","phase":"conclusion","path":"usage/aw_session.jsonl","index":1}} diff --git a/actions/setup/js/fixtures/routing-analytics/run-39508154330/runtime/aw_info.json b/actions/setup/js/fixtures/routing-analytics/run-39508154330/runtime/aw_info.json new file mode 100644 index 00000000000..555aaed1e3e --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39508154330/runtime/aw_info.json @@ -0,0 +1,64 @@ +{ + "engine_id": "copilot", + "engine_name": "GitHub Copilot CLI", + "model": "gpt-5.6-luna", + "version": "1.0.98", + "agent_version": "1.0.98", + "workflow_name": "Smoke Copilot SDK Routed", + "workflow_id": "github/gh-aw/.github/workflows/smoke-copilot-sdk-routed.lock.yml@refs/heads/main", + "workflow_call_id": "39508154330-1:github/gh-aw/.github/workflows/smoke-copilot-sdk-routed.lock.yml@refs/heads/main", + "caller_workflow_ref": "github/gh-aw/.github/workflows/smoke-copilot-sdk-routed.lock.yml@refs/heads/main", + "experimental": false, + "supports_tools_allowlist": true, + "cache_memory": false, + "run_id": 39508154330, + "run_number": 53, + "run_attempt": "1", + "repository": "github/gh-aw", + "ref": "refs/heads/main", + "sha": "70e15c7ff659c05c2f4466aa172bb910d28847a2", + "actor": "SivaKesava1", + "event_name": "workflow_dispatch", + "target_repo": "", + "staged": false, + "dry_run": false, + "allowed_domains": [ + "defaults" + ], + "firewall_enabled": true, + "awf_version": "v0.28.70", + "awmg_version": "", + "agent_runtime": "", + "steps": { + "firewall": "squid" + }, + "created_at": "2026-10-20T22:27:34.002Z", + "frontmatter_emoji": "๐Ÿงญ", + "features": { + "gh-aw-detection": false + }, + "sub_agent_models": [ + { + "model": "claude-haiku-4.5", + "name": "haiku-whoami", + "patterns": [ + "github-copilot/claude-haiku-4.5" + ] + } + ], + "requested_model": "auto", + "model_routing": { + "status": "selected", + "source": "awf-routing", + "provider": "copilot", + "wire_model": "gpt-5.6-luna", + "model": "github-copilot/gpt-5.6-luna", + "effort": "max", + "endpoint": "/responses", + "selected_endpoint": "/responses", + "mode": "balanced", + "selected_id": "choice-0003", + "router_version": "0.1.3" + }, + "routed_model": "gpt-5.6-luna" +} \ No newline at end of file diff --git a/actions/setup/js/fixtures/routing-analytics/run-39508154330/sandbox/firewall/awf-reflect.json b/actions/setup/js/fixtures/routing-analytics/run-39508154330/sandbox/firewall/awf-reflect.json new file mode 100644 index 00000000000..aac89af1cf5 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39508154330/sandbox/firewall/awf-reflect.json @@ -0,0 +1 @@ +{"endpoints":[{"provider":"openai","port":10000,"base_url":"http://api-proxy:10000","configured":false,"models":null,"model_metadata":null,"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":[],"chat/completions":[],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":[]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":null,"models_url":"http://api-proxy:10000/v1/models"},{"provider":"anthropic","port":10001,"base_url":"http://api-proxy:10001","configured":false,"models":null,"model_metadata":null,"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":[],"chat/completions":[],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":[]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":null,"models_url":"http://api-proxy:10001/v1/models"},{"provider":"copilot","port":10002,"base_url":"http://api-proxy:10002","configured":true,"models":["claude-haiku-4.5","claude-haiku-5.5","claude-opus-5","claude-opus-5.5","claude-sonnet-5","claude-sonnet-5.5","gpt-3.5-turbo","gpt-3.5-turbo-0613","gpt-4","gpt-4-0613","gpt-4-o-preview","gpt-4.1","gpt-4.1-2025-04-14","gpt-41-copilot","gpt-4o","gpt-4o-2024-05-13","gpt-4o-2024-08-06","gpt-4o-2024-11-20","gpt-4o-mini","gpt-4o-mini-2024-07-18","gpt-5.3-codex","gpt-5.6-luna","gpt-5.6-luna-utility","gpt-5.6-sol","gpt-5.6-terra","gpt-6-astra","gpt-6-luna","gpt-6-sol","gpt-6.1-sol","grok-4.6","grok-4.7","mai-code-1.1-flash","text-embedding-3-small","text-embedding-3-small-inference","text-embedding-ada-002","trajectory-compaction"],"model_metadata":[{"id":"claude-haiku-4.5","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":1,"output":5,"cachedInput":0.1,"cacheWrite":1.25}}},{"id":"claude-haiku-5.5","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":0.1,"output":0.5,"cachedInput":0.01,"cacheWrite":0.12,"threshold":100000},"long_context":{"input":0.5,"output":2.5,"cachedInput":0.05,"cacheWrite":0.62,"threshold":936000}}},{"id":"claude-opus-5","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":5,"output":25,"cachedInput":0.5,"cacheWrite":6.25,"threshold":200000},"long_context":{"input":5,"output":25,"cachedInput":0.5,"cacheWrite":6.25,"threshold":936000}}},{"id":"claude-opus-5.5","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":4,"output":20,"cachedInput":0.2,"cacheWrite":5,"threshold":200000},"long_context":{"input":4,"output":20,"cachedInput":0.2,"cacheWrite":5,"threshold":1000000}}},{"id":"claude-sonnet-5","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":10,"cachedInput":0.2,"cacheWrite":2.5,"threshold":200000},"long_context":{"input":2,"output":10,"cachedInput":0.2,"cacheWrite":2.5,"threshold":936000}}},{"id":"claude-sonnet-5.5","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":10,"cachedInput":0.1,"cacheWrite":2.5,"threshold":200000},"long_context":{"input":2,"output":10,"cachedInput":0.1,"cacheWrite":2.5,"threshold":936000}}},{"id":"gpt-3.5-turbo","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"gpt-3.5-turbo-0613","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"gpt-4","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":2.5,"output":10,"cachedInput":1.25,"cacheWrite":0}}},{"id":"gpt-4-0613","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":2.5,"output":10,"cachedInput":1.25,"cacheWrite":0}}},{"id":"gpt-4-o-preview","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"gpt-4.1","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"gpt-4.1-2025-04-14","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"gpt-41-copilot","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":8,"cachedInput":0.5,"cacheWrite":0}}},{"id":"gpt-4o","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"gpt-4o-2024-05-13","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"gpt-4o-2024-08-06","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"gpt-4o-2024-11-20","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"gpt-4o-mini","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"gpt-4o-mini-2024-07-18","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"gpt-5.3-codex","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":1.75,"output":14,"cachedInput":0.17,"cacheWrite":0,"threshold":272000}}},{"id":"gpt-5.6-luna","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":0.2,"output":1.2,"cachedInput":0.02,"cacheWrite":0.25,"threshold":200000},"long_context":{"input":0.4,"output":1.8,"cachedInput":0.04,"cacheWrite":0.5,"threshold":922000}}},{"id":"gpt-5.6-luna-utility","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"gpt-5.6-sol","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":4,"output":20,"cachedInput":0.4,"cacheWrite":5,"threshold":272000},"long_context":{"input":8,"output":30,"cachedInput":0.8,"cacheWrite":10,"threshold":922000}}},{"id":"gpt-5.6-terra","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":12,"cachedInput":0.2,"cacheWrite":2.5,"threshold":272000},"long_context":{"input":4,"output":18,"cachedInput":0.4,"cacheWrite":5,"threshold":922000}}},{"id":"gpt-6-astra","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":10,"output":50,"cachedInput":1,"cacheWrite":12.5,"threshold":272000},"long_context":{"input":20,"output":75,"cachedInput":2,"cacheWrite":25,"threshold":1050000}}},{"id":"gpt-6-luna","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":0.1,"output":0.5,"cachedInput":0.01,"cacheWrite":0.12,"threshold":272000},"long_context":{"input":0.2,"output":0.75,"cachedInput":0.02,"cacheWrite":0.25,"threshold":872000}}},{"id":"gpt-6-sol","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":10,"cachedInput":0.2,"cacheWrite":2.5,"threshold":272000},"long_context":{"input":4,"output":15,"cachedInput":0.4,"cacheWrite":5,"threshold":872000}}},{"id":"gpt-6.1-sol","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":2,"output":10,"cachedInput":0.1,"cacheWrite":2.5,"threshold":272000},"long_context":{"input":4,"output":15,"cachedInput":0.2,"cacheWrite":5,"threshold":922000}}},{"id":"grok-4.6","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","wire_api":"responses","pricing":{"default":{"input":2,"output":6,"cachedInput":0.5,"cacheWrite":0,"threshold":200000},"long_context":{"input":4,"output":12,"cachedInput":1,"cacheWrite":0,"threshold":500000}}},{"id":"grok-4.7","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","wire_api":"responses","pricing":{"default":{"input":2,"output":6,"cachedInput":0.5,"cacheWrite":0,"threshold":200000},"long_context":{"input":4,"output":12,"cachedInput":1,"cacheWrite":0,"threshold":500000}}},{"id":"mai-code-1.1-flash","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","pricing":{"default":{"input":0.2,"output":1.2,"cachedInput":0.02,"cacheWrite":0.25,"threshold":128000}}},{"id":"text-embedding-3-small","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"text-embedding-3-small-inference","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"text-embedding-ada-002","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01"},{"id":"trajectory-compaction","source":"provider","observed_at":"2026-10-20T22:29:35.297Z","api_version":"2026-07-01","wire_api":"completions"}],"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":["claude-sonnet-5.5","claude-sonnet-5","claude-opus-5.5","claude-opus-5","claude-haiku-5.5","claude-haiku-4.5"],"chat/completions":["claude-sonnet-5.5","claude-sonnet-5","claude-opus-5.5","claude-opus-5","claude-haiku-5.5","claude-haiku-4.5"],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":["gpt-6.1-sol","gpt-6-astra","gpt-6-luna","gpt-6-sol","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","gpt-5.3-codex"]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":[{"model_id":"claude-haiku-4.5","source":"provider","supported_endpoints":["/chat/completions","/v1/messages"],"supported_reasoning_efforts":[],"context_window_tokens":200000,"candidate_metadata_complete":true},{"model_id":"claude-haiku-5.5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"claude-opus-5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"claude-opus-5.5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"claude-sonnet-5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"claude-sonnet-5.5","source":"provider","supported_endpoints":["/v1/messages","/chat/completions"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"gpt-3.5-turbo","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":16384,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-3.5-turbo-0613","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":16384,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":32768,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4-0613","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":32768,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4-o-preview","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4.1","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4.1-2025-04-14","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-41-copilot","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":null,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-2024-05-13","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-2024-08-06","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-2024-11-20","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-mini","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-4o-mini-2024-07-18","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":128000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-5.3-codex","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh"],"context_window_tokens":400000,"candidate_metadata_complete":true},{"model_id":"gpt-5.6-luna","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"gpt-5.6-luna-utility","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"gpt-5.6-sol","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"gpt-5.6-terra","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"gpt-6-astra","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"gpt-6-luna","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"gpt-6-sol","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["none","low","medium","high","xhigh","max"],"context_window_tokens":1000000,"candidate_metadata_complete":true},{"model_id":"gpt-6.1-sol","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh","max"],"context_window_tokens":1050000,"candidate_metadata_complete":true},{"model_id":"grok-4.6","source":"provider","supported_endpoints":["/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh"],"context_window_tokens":500000,"candidate_metadata_complete":true},{"model_id":"grok-4.7","source":"provider","supported_endpoints":["/responses"],"supported_reasoning_efforts":["low","medium","high","xhigh"],"context_window_tokens":500000,"candidate_metadata_complete":true},{"model_id":"mai-code-1.1-flash","source":"provider","supported_endpoints":["/responses","ws:/responses"],"supported_reasoning_efforts":["low","medium","high"],"context_window_tokens":256000,"candidate_metadata_complete":true},{"model_id":"text-embedding-3-small","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":null,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"text-embedding-3-small-inference","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":null,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"text-embedding-ada-002","source":"provider","supported_endpoints":[],"supported_reasoning_efforts":[],"context_window_tokens":null,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"},{"model_id":"trajectory-compaction","source":"provider","supported_endpoints":["/chat/completions"],"supported_reasoning_efforts":[],"context_window_tokens":262144,"candidate_metadata_complete":false,"candidate_metadata_reason":"Model is not enabled in the Copilot model picker"}],"models_url":"http://api-proxy:10002/models","credential_kind":"github_token","selected_scheme":"Bearer","inference_credential_source":"github_token","inference_selected_scheme":"Bearer","integration_id_source":"github_copilot_integration_id"},{"provider":"gemini","port":10003,"base_url":"http://api-proxy:10003","configured":false,"models":null,"model_metadata":null,"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":[],"chat/completions":[],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":[]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":null,"models_url":"http://api-proxy:10003/v1beta/models"},{"provider":"vertex","port":10004,"base_url":"http://api-proxy:10004","configured":false,"models":null,"model_metadata":null,"automatic_model_selection":{"model":"auto","constraint_field":"model_provider","model_providers":["anthropic","openai","google"],"preserves_backend":true,"requires_advertised_endpoints":true,"candidates":{"anthropic":{"messages":[],"chat/completions":[],"responses":[]},"openai":{"messages":[],"chat/completions":[],"responses":[]},"google":{"messages":[],"chat/completions":[],"responses":[]}}},"routing_models":null,"models_url":null}],"models_fetch_complete":true,"model_aliases":{"agent":["sonnet-6x","gpt-6","gpt-5.4","gpt-5.5","gpt-5.6","gpt-5.3","gemini-pro","any"],"any":["copilot/*","anthropic/*","openai/*","google/*","gemini/*"],"auto":["copilot/auto","large"],"claude":["agent"],"codex":["agent"],"coding":["copilot/gpt-5*codex*","openai/gpt-5*codex*","gpt-5-codex","kimi"],"copilot":["agent"],"detection":["small"],"evals":["small"],"gemini":["agent"],"gpt-5":["copilot/gpt-5*","openai/gpt-5*"],"gpt-5-codex":["copilot/gpt-5*codex*","openai/gpt-5*codex*"],"gpt-5.3":["copilot/gpt-5.3*","openai/gpt-5.3*"],"gpt-5.6":["copilot/gpt-5.6*","openai/gpt-5.6*"],"gpt-6":["copilot/gpt-6*","openai/gpt-6*"],"grok":["copilot/*grok*","openai/*grok*"],"haiku":["copilot/*haiku*","anthropic/*haiku*"],"large":["sonnet","gpt-6","gpt-5-pro","gpt-5","gemini-pro"],"mai-code":["copilot/MAI-Code*","copilot/mai-code*","openai/MAI-Code*"],"mini":["haiku","gpt-5-mini","gpt-5-nano","gemini-flash-lite"],"opus":["copilot/*opus*","anthropic/*opus*"],"opusplan":["opus?effort=high"],"small":["mini"],"small-agent":["haiku","gpt-5-mini","gemini-flash"],"sonnet":["copilot/*sonnet*","anthropic/*sonnet*"],"sonnet-6x":["copilot/*sonnet-4.5*","copilot/*sonnet-4.6*","copilot/*sonnet-5*","copilot/*sonnet-4-5-*","anthropic/*sonnet-4-5-*","copilot/*sonnet-4-6*","anthropic/*sonnet-4-6*","anthropic/*sonnet-5*"],"summarization":["haiku","gpt-5-mini","gemini-flash-lite","mini"]},"model_fallback":{"enabled":true,"strategy":"middle_power","excludeEngines":[]},"model_fallback_effective":{"openai":{"enabled":true,"strategy":"middle_power","excludeEngines":[],"suppressed":false},"anthropic":{"enabled":true,"strategy":"middle_power","excludeEngines":[],"suppressed":false},"copilot":{"enabled":false,"strategy":"middle_power","excludeEngines":[],"suppressed":true,"suppression_reason":"copilot_standard_authoritative"},"gemini":{"enabled":true,"strategy":"middle_power","excludeEngines":[],"suppressed":false},"vertex":{"enabled":true,"strategy":"middle_power","excludeEngines":[],"suppressed":false}},"ai_credits":{"total":3.266344,"max_ai_credits":1000,"effective_max_ai_credits":1000,"percent_used":0.33,"thresholds_crossed":[],"thresholds_pending":[],"by_model":{"gpt-5.6-luna":{"input_credits":0.02018,"cached_input_credits":0.112604,"cache_write_credits":0.478975,"output_credits":0.12636,"total":0.738119,"pricing_source":"provider","pricing_tier":"default","accounting_policy":"concrete_model","fallback_pricing_used":false,"dynamic_selector":null},"claude-haiku-4.5":{"input_credits":0.0356,"cached_input_credits":0,"cache_write_credits":2.488625,"output_credits":0.004,"total":2.528225,"pricing_source":"provider","pricing_tier":"default","accounting_policy":"concrete_model","fallback_pricing_used":false,"dynamic_selector":null}}},"time_steering":{"enabled":true,"timeout_minutes":10,"started_at_ms":1792535383319,"percent_elapsed":5.42,"thresholds_crossed":[],"thresholds_pending":[]},"runs":{"enabled":true,"max_runs":500,"invocation_count":6,"remaining_runs":494},"cache_misses":{"enabled":true,"max_cache_misses":5,"consecutive_cache_misses":0,"remaining_cache_misses":5},"permission_denied":{"enabled":false,"max_permission_denied":null,"denied_count":0},"model_api_mapping":{"available":true,"last_updated":"2026-10-08T07:12:00Z","providers":["openai","anthropic"],"models":{"openai":{"endpoints":{"responses":{"path":"/v1/responses","description":"Newer unified API for agentic, tool-using, and multimodal workflows. Required for GPT-5+ models; some older models (o1, o3, gpt-4o, gpt-4.1) support it alongside chat/completions."},"chat_completions":{"path":"/v1/chat/completions","description":"Legacy conversational API. Being deprecated for newer models by end of 2026."}},"models":[{"family":"gpt-6-astra","patterns":["gpt-6-astra*"],"endpoints":["chat_completions","responses"],"notes":"Newest flagship model (Trusted Access Program rollout). Supports Chat Completions and Responses APIs."},{"family":"gpt-6-sol","patterns":["gpt-6-sol*"],"endpoints":["chat_completions","responses"],"notes":"GPT-6 tier balancing intelligence and cost. Supports both Chat Completions and Responses APIs per official model page."},{"family":"gpt-6.1-sol","patterns":["gpt-6.1-sol*"],"endpoints":["chat_completions","responses"],"notes":"GPT-6.1 tier balancing intelligence and cost (successor to gpt-6-sol). Supports both Chat Completions and Responses APIs, consistent with other GPT-6 tiers."},{"family":"gpt-6-luna","patterns":["gpt-6-luna*"],"endpoints":["chat_completions","responses"],"notes":"GPT-6 tier for cost-sensitive, high-volume use. Supports both Chat Completions and Responses APIs per official model page."},{"family":"gpt-daybreak","patterns":["gpt-daybreak-blue-latest","gpt-daybreak-red-latest"],"endpoints":["responses"],"notes":"Responses API only (ResponsesModel-only Literal). Experimental/preview aliases not present in ChatModel."},{"family":"gpt-rosalind-research","patterns":["gpt-rosalind-research*"],"endpoints":["responses"],"notes":"Life sciences reasoning model, Trusted Access Program (approved organizations only). Responses API only, consistent with other restricted-access specialized models (gpt-daybreak-*, gpt-5.6-cyber). Billing begins October 5, 2026."},{"family":"gpt-5.6-cyber","patterns":["gpt-5.6-cyber*"],"endpoints":["responses"],"notes":"Responses API only (ResponsesModel-only Literal, not in ChatModel). More specific than gpt-5.6* pattern below."},{"family":"gpt-5.6","patterns":["gpt-5.6*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. Includes gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna per OpenAI SDK ChatModel. gpt-5.6-cyber is responses-only (see separate entry above)."},{"family":"gpt-5.5-pro","patterns":["gpt-5.5-pro","gpt-5.5-pro-*"],"endpoints":["responses"],"notes":"Responses API only (ResponsesOnlyModel per OpenAI OpenAPI spec). More specific than gpt-5.5* pattern below. Includes dated variants like gpt-5.5-pro-2026-04-23."},{"family":"gpt-5.5","patterns":["gpt-5.5*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. Listed on the official GPT-5.5 model page. gpt-5.5-pro is responses-only (see separate entry above)."},{"family":"gpt-5.4","patterns":["gpt-5.4*"],"routingPatterns":["gpt-5.4","gpt-5.4-2026-03-05"],"endpoints":["chat_completions","responses"],"routing":{"reasoningEfforts":["none","low","medium","high","xhigh"],"contextWindowTokens":1050000},"notes":"Supports both endpoints on OpenAI. GPT-5.4 routing metadata is exact-model only; mini/nano variants need separately verified data. The model page lists none, low, medium, high, and xhigh reasoning effort and a 1,050,000-token context window."},{"family":"gpt-5.3-codex","patterns":["gpt-5.3-codex","gpt-5.3-codex-*"],"endpoints":["responses"],"notes":"Responses API only per official model page (developers.openai.com/api/docs/models/gpt-5.3-codex). More specific than gpt-5.3* pattern below."},{"family":"gpt-5.3","patterns":["gpt-5.3*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. Only gpt-5.3-chat-latest confirmed for both endpoints; gpt-5.3-codex is responses-only (see separate entry above). No bare gpt-5.3 base model exists."},{"family":"gpt-5.2-codex","patterns":["gpt-5.2-codex","gpt-5.2-codex-*"],"endpoints":["responses"],"notes":"Responses API only per official model page (developers.openai.com/api/docs/models/gpt-5.2-codex). More specific than gpt-5.2* pattern below."},{"family":"gpt-5.2-pro","patterns":["gpt-5.2-pro","gpt-5.2-pro-*"],"endpoints":["responses"],"notes":"Responses API only per official model page (developers.openai.com/api/docs/models/gpt-5.2-pro). More specific than gpt-5.2* pattern below."},{"family":"gpt-5.2","patterns":["gpt-5.2*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. gpt-5.2-pro and gpt-5.2-codex are responses-only (see separate entries above)."},{"family":"gpt-5.1-codex-max","patterns":["gpt-5.1-codex-max"],"endpoints":["responses"],"notes":"Responses API only (ResponsesOnlyModel)."},{"family":"gpt-5.1-codex","patterns":["gpt-5.1-codex","gpt-5.1-codex-*"],"endpoints":["responses"],"notes":"Responses API only per official model pages (developers.openai.com/api/docs/models/gpt-5.1-codex, /gpt-5.1-codex-mini). More specific than gpt-5.1* pattern below. gpt-5.1-codex-max is covered by a dedicated entry above."},{"family":"gpt-5.1","patterns":["gpt-5.1*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints for gpt-5.1 and gpt-5.1-mini. gpt-5.1-codex, gpt-5.1-codex-mini, and gpt-5.1-codex-max are responses-only (see separate entries above)."},{"family":"gpt-5-codex/pro","patterns":["gpt-5-codex","gpt-5-pro","gpt-5-pro-*"],"endpoints":["responses"],"notes":"Responses API only for gpt-5-codex and gpt-5-pro (ResponsesOnlyModel). Includes dated variants like gpt-5-pro-2025-10-06."},{"family":"gpt-5","patterns":["gpt-5","gpt-5-*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints for gpt-5, gpt-5-mini, gpt-5-nano."},{"family":"o4-mini-deep-research","patterns":["o4-mini-deep-research","o4-mini-deep-research-*"],"endpoints":["responses"],"notes":"Responses API only (ResponsesOnlyModel). Includes dated variants like o4-mini-deep-research-2025-06-26."},{"family":"o4","patterns":["o4*"],"endpoints":["chat_completions","responses"],"notes":"Reasoning model. o4-mini supports both endpoints (ModelIdsShared)."},{"family":"o3-pro/deep-research","patterns":["o3-pro","o3-pro-*","o3-deep-research","o3-deep-research-*"],"endpoints":["responses"],"notes":"Responses API only. o3-pro and o3-deep-research are in ResponsesModel but not ChatModel."},{"family":"o3","patterns":["o3*"],"endpoints":["chat_completions","responses"],"notes":"Reasoning model. o3, o3-mini support both endpoints. o3-pro/deep-research use responses only (covered by separate entry above)."},{"family":"o1-pro","patterns":["o1-pro","o1-pro-*"],"endpoints":["responses"],"notes":"Responses API only. o1-pro is in ResponsesModel but not ChatModel."},{"family":"o1-mini/preview","patterns":["o1-mini*","o1-preview*"],"endpoints":["chat_completions"],"notes":"Chat Completions API only per official model pages (developers.openai.com/api/docs/models/o1-mini, /o1-preview). Not available via Responses API. More specific than o1* pattern below."},{"family":"o1","patterns":["o1*"],"endpoints":["chat_completions","responses"],"notes":"Reasoning model. o1 (base) supports both endpoints. o1-pro is responses-only and o1-mini/o1-preview are chat_completions-only (see separate entries above)."},{"family":"computer-use-preview","patterns":["computer-use-preview*"],"endpoints":["responses"],"notes":"Responses API only. Specialized model for computer use tasks."},{"family":"codex-mini","patterns":["codex-mini*"],"endpoints":["responses"],"notes":"Responses API only per official model page (developers.openai.com/api/docs/models/codex-mini-latest). Chat Completions is marked unsupported on the model page."},{"family":"chatgpt-4o-latest","patterns":["chatgpt-4o-latest"],"endpoints":["chat_completions","responses"],"notes":"Rolling alias for the latest ChatGPT-optimized GPT-4o model. Supports both endpoints (ModelIdsShared). Not matched by gpt-4o* pattern due to chatgpt- prefix."},{"family":"gpt-4o","patterns":["gpt-4o*"],"endpoints":["chat_completions","responses"],"notes":"Multimodal. Supports both endpoints. Includes audio and search preview variants."},{"family":"gpt-4.1","patterns":["gpt-4.1*"],"endpoints":["chat_completions","responses"],"notes":"Supports both endpoints. Includes gpt-4.1-mini, gpt-4.1-nano."},{"family":"gpt-4.5","patterns":["gpt-4.5*"],"endpoints":["chat_completions","responses"],"notes":"Preview model. Now supports both endpoints per official model page (developers.openai.com/api/docs/models/gpt-4.5-preview); Responses API support was added since the previous mapping update."},{"family":"gpt-4-turbo","patterns":["gpt-4-turbo*"],"endpoints":["chat_completions","responses"],"notes":"Legacy. In ModelIdsShared per OpenAI spec v2.3.0; supports both endpoints."},{"family":"gpt-4","patterns":["gpt-4","gpt-4-*"],"endpoints":["chat_completions","responses"],"notes":"Legacy. In ModelIdsShared per OpenAI spec v2.3.0; supports both endpoints."},{"family":"gpt-3.5-turbo","patterns":["gpt-3.5-turbo*"],"endpoints":["chat_completions","responses"],"notes":"Legacy. In ModelIdsShared per OpenAI spec v2.3.0; supports both endpoints. Deprecated."}]},"anthropic":{"endpoints":{"messages":{"path":"/v1/messages","description":"Unified Messages API for all Claude models. Supports tool use, streaming, extended thinking, and vision."}},"models":[{"family":"claude-opus-5","patterns":["claude-opus-5*"],"routingPatterns":["claude-opus-5-5","claude-opus-5"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Flagship Opus generation 5 models with verified 1M-token context windows and the Anthropic effort parameter."},{"family":"claude-fable-5","patterns":["claude-fable-5*"],"routingPatterns":["claude-fable-5-1","claude-fable-5"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Latest flagship family with verified 1M-token context windows and the Anthropic effort parameter."},{"family":"claude-mythos-5","patterns":["claude-mythos-5*","claude-mythos-preview*"],"routingPatterns":["claude-mythos-5-1","claude-mythos-5","claude-mythos-preview*"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Specialized models, invitation-only, with verified 1M-token context windows and the Anthropic effort parameter."},{"family":"claude-sonnet-5","patterns":["claude-sonnet-5*"],"routingPatterns":["claude-sonnet-5-5","claude-sonnet-5"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Best combination of speed and intelligence with verified 1M-token context windows and the Anthropic effort parameter."},{"family":"claude-opus-4","patterns":["claude-opus-4*"],"routingPatterns":["claude-opus-4-8","claude-opus-4-7","claude-opus-4-6"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Opus 4.6 and newer models have verified 1M-token context windows and support the Anthropic effort parameter."},{"family":"claude-sonnet-4","patterns":["claude-sonnet-4*"],"routingPatterns":["claude-sonnet-4-6"],"endpoints":["messages"],"routing":{"reasoningEfforts":["low","medium","high","max"],"contextWindowTokens":1000000},"notes":"Sonnet 4.6 has a verified 1M-token context window and supports the Anthropic effort parameter."},{"family":"claude-haiku-5","patterns":["claude-haiku-5*"],"endpoints":["messages"],"notes":"Fast/cheap Haiku generation 5 (claude-haiku-5-5). 1M token context window per official models overview; effort levels not verified, so no routing metadata."},{"family":"claude-haiku-4","patterns":["claude-haiku-4*"],"endpoints":["messages"],"notes":"Includes claude-haiku-4-5. Fast/cheap. 200K token context."},{"family":"claude-3.5-sonnet","patterns":["claude-3-5-sonnet*","claude-3.5-sonnet*"],"endpoints":["messages"],"notes":"Previous generation. 200K token context."},{"family":"claude-3.5-haiku","patterns":["claude-3-5-haiku*","claude-3.5-haiku*"],"endpoints":["messages"],"notes":"Previous generation fast model."},{"family":"claude-3.7-sonnet","patterns":["claude-3-7-sonnet*","claude-3.7-sonnet*"],"endpoints":["messages"],"notes":"Previous generation extended thinking model. 200K token context."},{"family":"claude-3-opus","patterns":["claude-3-opus*"],"endpoints":["messages"],"notes":"Previous generation. 200K token context."}]}},"error":null},"routing":{"status":"selected","selection":{"provider":"copilot","model":"github-copilot/gpt-5.6-luna","wire_model":"gpt-5.6-luna","effort":"max","endpoint":"/responses"}}} \ No newline at end of file diff --git a/actions/setup/js/fixtures/routing-analytics/run-39508154330/sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl b/actions/setup/js/fixtures/routing-analytics/run-39508154330/sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl new file mode 100644 index 00000000000..5c2702fe78f --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39508154330/sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl @@ -0,0 +1,7 @@ +{"_schema":"model-routing/v0.28.70","timestamp":"2026-10-20T22:29:35.333Z","event":"model_routing","stage":"classification","purpose":"routing_classification","attempt":1,"classifier_model":"github-copilot/gpt-5.6-luna","classifier_effort":"high"} +{"_schema":"model-routing/v0.28.70","timestamp":"2026-10-20T22:29:41.796Z","event":"model_routing","stage":"selection","objective":{"goal":"cost","mode":"economy"},"provider":"copilot","selected_provider":"copilot","wire_model":"gpt-5.6-luna","endpoint":"/responses","labels":{"task_type":"chore","scope":"cross_system","task_complexity":"easy"},"mode":"balanced","classifier_model":"github-copilot/gpt-5.6-luna","classifier_effort":"high","router":{"name":"gh-aw-router","version":"0.1.3"},"ranked_choices":[{"model":"github-copilot/gpt-5.6-luna","effort":"max"},{"model":"github-copilot/gpt-5.6-luna","effort":"xhigh"},{"model":"github-copilot/gpt-5.6-luna","effort":"high"},{"model":"github-copilot/gpt-5.6-luna","effort":"medium"},{"model":"github-copilot/gpt-5.6-luna","effort":"low"},{"model":"github-copilot/gpt-5.6-luna","effort":"none"}],"conversation_sha256":"758b6df08d70ae233f769a5ec2f9c6633fee96b576820d71b917cf874f01fef4","selected_id":"choice-0003","selected_model":"github-copilot/gpt-5.6-luna","selected_effort":"max","degraded_classification":false,"degraded_reason":null,"classifier_attempts":1,"eligible_choices":6,"catalogue_overlap":6,"latency_ms":6478,"interaction_id":"39508154330-1","github_repository":"github/gh-aw","github_workflow_ref":"github/gh-aw/.github/workflows/smoke-copilot-sdk-routed.lock.yml@refs/heads/main"} +{"_schema":"model-routing/v0.28.70","timestamp":"2026-10-20T22:30:03.696Z","event":"model_routing","stage":"request","routed":"as_selected","deviations":[],"unavailable":[],"method":"POST","pathname":"/responses","provider":"copilot","requested_model":"gpt-5.6-luna","requested_effort":"max","selected_provider":"copilot","selected_model":"gpt-5.6-luna","selected_effort":"max","selected_endpoint":"/responses","requested_endpoint":"/responses","upstream_endpoint":"/responses","request_id":"3568e8b2-4eba-44e3-8817-c3dd9ae26103","outcome":"completed","status":200} +{"_schema":"model-routing/v0.28.70","timestamp":"2026-10-20T22:30:06.045Z","event":"model_routing","stage":"request","routed":"as_selected","deviations":[],"unavailable":[],"method":"POST","pathname":"/responses","provider":"copilot","requested_model":"gpt-5.6-luna","requested_effort":"max","selected_provider":"copilot","selected_model":"gpt-5.6-luna","selected_effort":"max","selected_endpoint":"/responses","requested_endpoint":"/responses","upstream_endpoint":"/responses","request_id":"06be373c-514d-4391-8a18-a96f3d4023c8","outcome":"completed","status":200} +{"_schema":"model-routing/v0.28.70","timestamp":"2026-10-20T22:30:07.143Z","event":"model_routing","stage":"request","routed":"deviated","deviations":["model","effort","endpoint"],"unavailable":[],"method":"POST","pathname":"/chat/completions","provider":"copilot","requested_model":"claude-haiku-4.5","requested_effort":null,"selected_provider":"copilot","selected_model":"gpt-5.6-luna","selected_effort":"max","selected_endpoint":"/responses","requested_endpoint":"/chat/completions","upstream_endpoint":"/chat/completions","request_id":"6af43f9c-db6f-4ee6-93a0-c8ff6a661919","outcome":"completed","status":200} +{"_schema":"model-routing/v0.28.70","timestamp":"2026-10-20T22:30:12.381Z","event":"model_routing","stage":"request","routed":"as_selected","deviations":[],"unavailable":[],"method":"POST","pathname":"/responses","provider":"copilot","requested_model":"gpt-5.6-luna","requested_effort":"max","selected_provider":"copilot","selected_model":"gpt-5.6-luna","selected_effort":"max","selected_endpoint":"/responses","requested_endpoint":"/responses","upstream_endpoint":"/responses","request_id":"786666b6-42fa-4a7a-af92-d9fca938b961","outcome":"completed","status":200} +{"_schema":"model-routing/v0.28.70","timestamp":"2026-10-20T22:30:15.732Z","event":"model_routing","stage":"request","routed":"as_selected","deviations":[],"unavailable":[],"method":"POST","pathname":"/responses","provider":"copilot","requested_model":"gpt-5.6-luna","requested_effort":"max","selected_provider":"copilot","selected_model":"gpt-5.6-luna","selected_effort":"max","selected_endpoint":"/responses","requested_endpoint":"/responses","upstream_endpoint":"/responses","request_id":"962c7fa8-9a3e-4218-a7a5-c8b27c8f7444","outcome":"completed","status":200} diff --git a/actions/setup/js/fixtures/routing-analytics/run-39508154330/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl b/actions/setup/js/fixtures/routing-analytics/run-39508154330/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl new file mode 100644 index 00000000000..6f8fd5de930 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39508154330/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl @@ -0,0 +1,6 @@ +{"_schema":"token-usage/v0.28.70","timestamp":"2026-10-20T22:29:41.789Z","event":"token_usage","request_id":"098f36ac-9fc1-4908-9a33-c5d745370c3b","provider":"copilot","model":"gpt-5.6-luna","path":"/responses","status":200,"streaming":false,"input_tokens":997,"output_tokens":547,"cache_read_tokens":0,"cache_write_tokens":0,"duration_ms":6453,"response_bytes":20483,"purpose":"routing_classification","caller_source":"awf","x_initiator":"agent","ai_credits_this_response":0.08558,"ai_credits_total":0.08558,"ai_credits_pricing_source":"provider","ai_credits_pricing_tier":"default","ai_credits_accounting_policy":"concrete_model","ai_credits_fallback_pricing_used":false,"ai_credits_pricing_observed_at":"2026-10-20T22:29:35.297Z","ai_credits_pricing_api_version":"2026-07-01"} +{"_schema":"token-usage/v0.28.70","timestamp":"2026-10-20T22:30:03.695Z","event":"token_usage","request_id":"3568e8b2-4eba-44e3-8817-c3dd9ae26103","provider":"copilot","model":"gpt-5.6-luna","path":"/responses","status":200,"streaming":false,"input_tokens":3,"output_tokens":175,"cache_read_tokens":0,"cache_write_tokens":18516,"duration_ms":10311,"response_bytes":71606,"x_initiator":"user","ai_credits_this_response":0.48396,"ai_credits_total":0.56954,"ai_credits_pricing_source":"provider","ai_credits_pricing_tier":"default","ai_credits_accounting_policy":"concrete_model","ai_credits_fallback_pricing_used":false,"ai_credits_pricing_observed_at":"2026-10-20T22:29:35.297Z","ai_credits_pricing_api_version":"2026-07-01"} +{"_schema":"token-usage/v0.28.70","timestamp":"2026-10-20T22:30:06.045Z","event":"token_usage","request_id":"06be373c-514d-4391-8a18-a96f3d4023c8","provider":"copilot","model":"gpt-5.6-luna","path":"/responses","status":200,"streaming":false,"input_tokens":3,"output_tokens":61,"cache_read_tokens":18516,"cache_write_tokens":339,"duration_ms":2316,"response_bytes":68210,"x_initiator":"agent","ai_credits_this_response":0.052887,"ai_credits_total":0.622427,"ai_credits_pricing_source":"provider","ai_credits_pricing_tier":"default","ai_credits_accounting_policy":"concrete_model","ai_credits_fallback_pricing_used":false,"ai_credits_pricing_observed_at":"2026-10-20T22:29:35.297Z","ai_credits_pricing_api_version":"2026-07-01"} +{"_schema":"token-usage/v0.28.70","timestamp":"2026-10-20T22:30:07.143Z","event":"token_usage","request_id":"6af43f9c-db6f-4ee6-93a0-c8ff6a661919","provider":"copilot","model":"claude-haiku-4.5","path":"/chat/completions","status":200,"streaming":false,"input_tokens":356,"output_tokens":8,"cache_read_tokens":0,"cache_write_tokens":19909,"duration_ms":1005,"response_bytes":847,"x_initiator":"agent","ai_credits_this_response":2.528225,"ai_credits_total":3.150652,"ai_credits_pricing_source":"provider","ai_credits_pricing_tier":"default","ai_credits_accounting_policy":"concrete_model","ai_credits_fallback_pricing_used":false,"ai_credits_pricing_observed_at":"2026-10-20T22:29:35.297Z","ai_credits_pricing_api_version":"2026-07-01"} +{"_schema":"token-usage/v0.28.70","timestamp":"2026-10-20T22:30:12.381Z","event":"token_usage","request_id":"786666b6-42fa-4a7a-af92-d9fca938b961","provider":"copilot","model":"gpt-5.6-luna","path":"/responses","status":200,"streaming":false,"input_tokens":3,"output_tokens":210,"cache_read_tokens":18855,"cache_write_tokens":76,"duration_ms":5209,"response_bytes":71415,"x_initiator":"agent","ai_credits_this_response":0.06487,"ai_credits_total":3.215522,"ai_credits_pricing_source":"provider","ai_credits_pricing_tier":"default","ai_credits_accounting_policy":"concrete_model","ai_credits_fallback_pricing_used":false,"ai_credits_pricing_observed_at":"2026-10-20T22:29:35.297Z","ai_credits_pricing_api_version":"2026-07-01"} +{"_schema":"token-usage/v0.28.70","timestamp":"2026-10-20T22:30:15.732Z","event":"token_usage","request_id":"962c7fa8-9a3e-4218-a7a5-c8b27c8f7444","provider":"copilot","model":"gpt-5.6-luna","path":"/responses","status":200,"streaming":false,"input_tokens":3,"output_tokens":60,"cache_read_tokens":18931,"cache_write_tokens":228,"duration_ms":3063,"response_bytes":69298,"x_initiator":"agent","ai_credits_this_response":0.050822,"ai_credits_total":3.266344,"ai_credits_pricing_source":"provider","ai_credits_pricing_tier":"default","ai_credits_accounting_policy":"concrete_model","ai_credits_fallback_pricing_used":false,"ai_credits_pricing_observed_at":"2026-10-20T22:29:35.297Z","ai_credits_pricing_api_version":"2026-07-01"} diff --git a/actions/setup/js/fixtures/routing-analytics/run-39508154330/threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl b/actions/setup/js/fixtures/routing-analytics/run-39508154330/threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl new file mode 100644 index 00000000000..8a32cc45d09 --- /dev/null +++ b/actions/setup/js/fixtures/routing-analytics/run-39508154330/threat-detection/sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl @@ -0,0 +1,2 @@ +{"_schema":"token-usage/v0.28.70","timestamp":"2026-10-20T22:31:45.913Z","event":"token_usage","request_id":"2dfb5bee-f6c5-410a-b563-3bb6e89ce42a","provider":"copilot","model":"claude-haiku-5.5","path":"/chat/completions","status":200,"streaming":true,"input_tokens":2287,"output_tokens":143,"cache_read_tokens":0,"cache_write_tokens":17942,"duration_ms":1749,"response_bytes":7017,"x_initiator":"user","ai_credits_this_response":0.245324,"ai_credits_total":0.245324,"ai_credits_pricing_source":"provider","ai_credits_pricing_tier":"default","ai_credits_accounting_policy":"concrete_model","ai_credits_fallback_pricing_used":false,"ai_credits_pricing_observed_at":"2026-10-20T22:31:44.543Z","ai_credits_pricing_api_version":"2026-07-01"} +{"_schema":"token-usage/v0.28.70","timestamp":"2026-10-20T22:31:48.439Z","event":"token_usage","request_id":"9aeebc08-1991-4212-a3d7-ec3fc0cf11a6","provider":"copilot","model":"claude-haiku-5.5","path":"/chat/completions","status":200,"streaming":true,"input_tokens":2,"output_tokens":148,"cache_read_tokens":17942,"cache_write_tokens":3044,"duration_ms":2460,"response_bytes":7213,"x_initiator":"agent","ai_credits_this_response":0.06189,"ai_credits_total":0.307214,"ai_credits_pricing_source":"provider","ai_credits_pricing_tier":"default","ai_credits_accounting_policy":"concrete_model","ai_credits_fallback_pricing_used":false,"ai_credits_pricing_observed_at":"2026-10-20T22:31:44.543Z","ai_credits_pricing_api_version":"2026-07-01"} diff --git a/actions/setup/js/fixtures/routing_analytics_runs.cjs b/actions/setup/js/fixtures/routing_analytics_runs.cjs new file mode 100644 index 00000000000..8b791884e18 --- /dev/null +++ b/actions/setup/js/fixtures/routing_analytics_runs.cjs @@ -0,0 +1,105 @@ +// @ts-check +"use strict"; + +/** + * Routing-analytics fixtures for github/gh-aw#70668. + * + * Each `routing-analytics/run-/` directory keeps, verbatim, the collector + * inputs from the run's original `agent` artifact (collector rootDir layout): + * `runtime/aw_info.json`, `agent/model-resolution.json`, + * `sandbox/firewall/awf-reflect.json` and the api-proxy `token-usage.jsonl` / + * `model-routing.jsonl` under `sandbox/firewall/logs/api-proxy-logs/`. + * `aw_session.jsonl` keeps, verbatim and in order, the `session.format`, + * `workflow.info`, `firewall.model_routing`, `firewall.token_usage`, + * `model.resolution`, `model_routing.outcome`, `guardrail.daily_aic` and + * `session.collection` records of the published `usage/aw_session.jsonl`. + * All other files and records are dropped. + * + * - run-39508154330: Smoke Copilot SDK Routed on main at 70e15c7ff6, AWF v0.28.70, + * https://github.com/github/gh-aw/actions/runs/39508154330 (usage 12303814398, + * agent 12304048825). Selected gpt-5.6-luna; four main requests, one + * claude-haiku-4.5 sub-agent request, one classifier request. The detection + * artifact's api-proxy `token-usage.jsonl` (two detection requests) is kept at + * `threat-detection/sandbox/firewall/logs/api-proxy-logs/`. + * - run-39506475007: Smoke Copilot (CLI, unrouted) at 9c8c823adb, AWF v0.28.62, + * https://github.com/github/gh-aw/actions/runs/39506475007 (usage 12304237333, + * agent 12303457750). Main `auto` resolved to claude-sonnet-5.5. + * - run-39499464895: Smoke Copilot SDK Routed Claude at b9f7f48a3b, AWF v0.28.62, + * https://github.com/github/gh-aw/actions/runs/39499464895 (usage 12300520074, + * agent 12298393979). Selected claude-haiku-4.5, then failed closed: + * `mini-whoami` requested unavailable gpt-5.4-mini. + * + * `routing-analytics/awf-10211/` holds records produced by the gh-aw-firewall + * writers at b5c683e116470e0aa579ec9bf30a675fcdb66f76 (github/gh-aw-firewall#10211) + * for the inputs of its tests, because none of the three runs has an + * upstream-error record: `upstream-errors.jsonl` from `createLogUpstreamErrorResponse` + * + `auditUpstreamErrorResponse` (upstream-log.test.js captured Copilot + * `invalid_reasoning_effort`, provider-error-fields.test.js code/type/param and + * type-only envelopes, and a non-JSON body without identifiers), and + * `model-routing.jsonl` from `writeRoutingRecord` (upstream-response.test.js + * `local-req-5` with `error_source: upstream`; routing-persistence.test.js + * `request-1` with `error_source: awf`). `ts`/`timestamp` are the writer's clock. + */ + +const fs = require("fs"); +const path = require("path"); +const { readJsonlFile } = require("../jsonl_helpers.cjs"); + +const DIR = path.join(__dirname, "routing-analytics"); +const REPO_ROOT = path.join(__dirname, "../../../.."); + +const RUNS = { + routed: { id: "39508154330", workflow: "smoke-copilot-sdk-routed" }, + unrouted: { id: "39506475007", workflow: "smoke-copilot" }, + routedClaude: { id: "39499464895", workflow: "smoke-copilot-sdk-routed-claude" }, +}; + +/** @param {string} id */ +const runDir = id => path.join(DIR, `run-${id}`); + +/** @param {string} id @returns {Record} */ +const awInfo = id => JSON.parse(fs.readFileSync(path.join(runDir(id), "runtime/aw_info.json"), "utf8")); + +/** @param {string} id @returns {any[]} The recorded session subset. */ +const session = id => [...readJsonlFile(path.join(runDir(id), "aw_session.jsonl"), { strict: true })]; + +/** + * Evaluate the compiled `GH_AW_INFO_*` env of the generate_aw_info step, as the + * runner would with no repository variables set (`vars.X || 'literal'` -> literal). + * @param {string} workflow + * @param {Record} info Recorded aw_info supplying `job.workflow_ref`. + * @returns {Record} + */ +function compiledInfoEnv(workflow, info) { + const lines = fs.readFileSync(path.join(REPO_ROOT, ".github/workflows", `${workflow}.lock.yml`), "utf8").split("\n"); + const start = lines.findIndex(line => /^\s+GH_AW_INFO_ENGINE_NAME:/.test(line)); + if (start < 0) throw new Error(`No generate_aw_info step in ${workflow}`); + let first = start; + while (first > 0 && /^\s+GH_AW_INFO_[A-Z_]+:/.test(lines[first - 1])) first--; + /** @type {Record} */ + const env = {}; + for (let index = first; index < lines.length; index++) { + const match = /^\s+(GH_AW_INFO_[A-Z_]+): (.*)$/.exec(lines[index]); + if (!match) break; + const raw = match[2].trim(); + let value; + if (raw === "${{ job.workflow_ref }}") value = info.workflow_id; + else if (raw.startsWith("${{")) value = /'([^']*)' }}$/.exec(raw)?.[1] ?? ""; + else if (raw.startsWith("'")) value = raw.slice(1, -1).replace(/''/g, "'"); + else if (raw.startsWith('"')) value = JSON.parse(raw); + else value = raw; + env[match[1]] = value; + } + return env; +} + +/** + * GitHub Actions context of the recorded run. + * @param {Record} info + */ +function runContext(info) { + const [owner, repo] = info.repository.split("/"); + return { runId: info.run_id, runNumber: info.run_number, sha: info.sha, ref: info.ref, actor: info.actor, eventName: info.event_name, repo: { owner, repo }, serverUrl: "https://github.com", payload: {} }; +} + +module.exports = { DIR, RUNS, runDir, awInfo, session, compiledInfoEnv, runContext }; diff --git a/actions/setup/js/generate_aw_info.cjs b/actions/setup/js/generate_aw_info.cjs index c151e469b16..f5b37fd8f37 100644 --- a/actions/setup/js/generate_aw_info.cjs +++ b/actions/setup/js/generate_aw_info.cjs @@ -12,6 +12,7 @@ const { getErrorMessage } = require("./error_helpers.cjs"); const { ERR_CONFIG, ERR_SYSTEM } = require("./error_codes.cjs"); const { buildWorkflowCallId, normalizeLegacyWorkQueueContext, normalizeWorkQueueContext, resolveWorkQueueRuntime, readInboundAwContext } = require("./aw_context.cjs"); const { normalizeWebhookContext, redactWebhookPayloads } = require("./webhook_context.cjs"); +const { normalizeEngineHarness, parseCompiledModelConfig } = require("./routing_analytics.cjs"); /** * Generate aw_info.json with workflow run metadata. @@ -179,6 +180,27 @@ async function main(core, ctx, githubClient) { awInfo.sub_agent_models = models; } + // Harness identity comes from the compiled configuration, never from engine_id or model output. + const engineHarness = normalizeEngineHarness(process.env.GH_AW_INFO_ENGINE_HARNESS); + if (engineHarness) { + awInfo.engine_harness = engineHarness; + } else if (process.env.GH_AW_INFO_ENGINE_HARNESS) { + core.warning(`Ignoring unsupported GH_AW_INFO_ENGINE_HARNESS: ${JSON.stringify(process.env.GH_AW_INFO_ENGINE_HARNESS)}`); + } + // workflow_ref is the executing workflow reference (job.workflow_ref), distinct from caller_workflow_ref. + if (workflowId) { + awInfo.workflow_ref = workflowId; + } + const serverUrl = parseServerUrl(ctx.serverUrl || process.env.GITHUB_SERVER_URL); + if (serverUrl) { + awInfo.server_url = serverUrl; + } + // Configured routing, model policy and budget, published even when routing is disabled or later fails. + const modelConfig = parseCompiledModelConfig(process.env.GH_AW_INFO_MODEL_CONFIG, process.env.GH_AW_INFO_MAX_AI_CREDITS, message => core.warning(message)); + if (modelConfig) { + awInfo.model_config = modelConfig; + } + // Include aw_context when the workflow was triggered by a caller that relayed // orchestration context via workflow inputs or repository_dispatch client payload. // Validates JSON format and structure before populating the context key in aw_info.json. @@ -305,6 +327,21 @@ async function main(core, ctx, githubClient) { } } + /** + * Keep only the origin of an http(s) server URL. + * @param {unknown} value + * @returns {string} + */ + function parseServerUrl(value) { + if (typeof value !== "string" || !value) return ""; + try { + const url = new URL(value); + return url.protocol === "https:" || url.protocol === "http:" ? url.origin : ""; + } catch { + return ""; + } + } + core.info("Generated aw_info.json at: " + tmpPath); core.info(JSON.stringify({ ...awInfo, ...(awInfo.context ? { context: redactWebhookPayloads(awInfo.context) } : {}) }, null, 2)); diff --git a/actions/setup/js/parse_token_usage.cjs b/actions/setup/js/parse_token_usage.cjs index 31346f2ef34..5fd860a56ed 100644 --- a/actions/setup/js/parse_token_usage.cjs +++ b/actions/setup/js/parse_token_usage.cjs @@ -11,6 +11,7 @@ const { calculateWorkingSetFromJSONL } = require("./working_set_metrics.cjs"); const { mapAWFRoutingEffort, resolveAWFModelRoutingSelection, getAWFModelRoutingPolicy } = require("./awf_model_routing.cjs"); const { recordModelRouting, resolveEffectiveModel, validateModelIdentifier } = require("./model_attribution.cjs"); const { persistCopilotModelSelection } = require("./copilot_model_selection.cjs"); +const { persistModelConfigBaseline } = require("./routing_analytics.cjs"); const DEFAULT_GH_AW_DIR = "/tmp/gh-aw"; /** @@ -649,6 +650,11 @@ async function main(copilotSessionStateDir = getGhAwPath("sandbox/agent/logs/cop } catch (error) { core.setFailed(`${ERR_PARSE}: ${getErrorMessage(error)}`); } finally { + try { + persistModelConfigBaseline(); + } catch (error) { + core.warning(getErrorMessage(error)); + } persistAgentAwInfoCopy(); if (selectionError) core.setFailed(`${ERR_PARSE}: ${selectionError}`); } diff --git a/actions/setup/js/routing_analytics.cjs b/actions/setup/js/routing_analytics.cjs new file mode 100644 index 00000000000..11ade4abff8 --- /dev/null +++ b/actions/setup/js/routing_analytics.cjs @@ -0,0 +1,336 @@ +// @ts-check +"use strict"; + +/** + * Routing analytics recorded in the unified session: the runner-written + * configured model policy (aw_info.model_config) and the collector-written + * counterfactual baseline estimate. All values are identifier-shaped metadata; + * prompts, transcripts, secrets and free-form diagnostics are never copied. + */ + +const fs = require("fs"); +const path = require("path"); +const { computeInferenceAIC, findModelPricing } = require("./model_costs.cjs"); +const { getErrorMessage } = require("./error_helpers.cjs"); +const { loadModelAliasMap, resolveConfiguredCopilotModel } = require("./resolve_model_alias.cjs"); + +/** Model IDs, aliases and policy patterns, such as `github-copilot/*haiku*`. */ +const MODEL_IDENTIFIER = /^[A-Za-z0-9*][A-Za-z0-9._:/*@+-]{0,127}$/; +/** Provider error identifiers; matches AWF's identifier-only extraction. */ +const ERROR_IDENTIFIER = /^[A-Za-z0-9_.:-]{1,64}$/; +const ENGINE_HARNESSES = new Set(["copilot-cli", "copilot-sdk"]); +const MAX_AI_CREDITS_SOURCES = new Set(["frontmatter", "default"]); +const MAX_AI_CREDITS = /^[1-9][0-9]{0,9}$/; +const MAX_AI_CREDITS_LIMIT = 2147483647; + +/** @param {unknown} value @returns {value is Record} */ +const isObject = value => value !== null && typeof value === "object" && !Array.isArray(value); + +/** @param {unknown} value @returns {value is string} */ +const isModelIdentifier = value => typeof value === "string" && MODEL_IDENTIFIER.test(value); + +/** @param {unknown} value @returns {value is string} */ +const isErrorIdentifier = value => typeof value === "string" && ERROR_IDENTIFIER.test(value); + +/** @param {unknown} value @returns {value is number} */ +const isBudget = value => Number.isSafeInteger(value) && Number(value) >= 1 && Number(value) <= MAX_AI_CREDITS_LIMIT; + +/** + * Copy an identifier list only when every entry is identifier-shaped, so a + * partially valid policy is unknown rather than silently narrowed. + * @param {unknown} value + * @returns {string[] | undefined} + */ +function identifierList(value) { + return Array.isArray(value) && value.every(isModelIdentifier) ? [...value] : undefined; +} + +/** + * @param {unknown} value + * @returns {string} + */ +function normalizeEngineHarness(value) { + return typeof value === "string" && ENGINE_HARNESSES.has(value) ? value : ""; +} + +/** + * Validate a snake_case model configuration as written to aw_info.json. + * Returns undefined when the routing state itself is not recorded. + * @param {unknown} value + * @returns {Record | undefined} + */ +function sanitizeModelConfig(value) { + if (!isObject(value) || !isObject(value.routing) || typeof value.routing.enabled !== "boolean") return undefined; + /** @type {Record} */ + const routing = { enabled: value.routing.enabled }; + for (const key of ["goal", "mode"]) { + if (isModelIdentifier(value.routing[key])) routing[key] = value.routing[key]; + } + const allowedModels = identifierList(value.routing.allowed_models); + if (allowedModels) routing.allowed_models = allowedModels; + /** @type {Record} */ + const config = { routing }; + if (isObject(value.models)) { + const allowed = identifierList(value.models.allowed); + const blocked = identifierList(value.models.blocked); + if (allowed && blocked) config.models = { allowed, blocked }; + } + if (MAX_AI_CREDITS_SOURCES.has(value.max_ai_credits_source)) { + config.max_ai_credits_source = value.max_ai_credits_source; + if (isBudget(value.max_ai_credits)) config.max_ai_credits = value.max_ai_credits; + } + if (isModelIdentifier(value.baseline_model) && value.baseline_model !== "auto") config.baseline_model = value.baseline_model; + return config; +} + +/** + * Parse the compiler-wired configuration published by generate_aw_info. + * The budget is the evaluated literal or repository-default expression. + * @param {string | undefined} rawConfig GH_AW_INFO_MODEL_CONFIG + * @param {string | undefined} rawBudget GH_AW_INFO_MAX_AI_CREDITS + * @param {(message: string) => void} [warn] + * @returns {Record | undefined} + */ +function parseCompiledModelConfig(rawConfig, rawBudget, warn = () => {}) { + if (!rawConfig) return undefined; + let parsed; + try { + parsed = JSON.parse(rawConfig); + } catch { + warn("Ignoring GH_AW_INFO_MODEL_CONFIG: invalid JSON"); + return undefined; + } + const budget = typeof rawBudget === "string" ? rawBudget.trim() : ""; + const withBudget = isObject(parsed) && MAX_AI_CREDITS.test(budget) && Number(budget) <= MAX_AI_CREDITS_LIMIT ? { ...parsed, max_ai_credits: Number(budget) } : parsed; + const config = sanitizeModelConfig(withBudget); + if (!config) warn("Ignoring GH_AW_INFO_MODEL_CONFIG: routing state is not recorded"); + return config; +} + +/** + * Determine the concrete main model the run would use without routing, from + * runner-written evidence. Never returns the routed selection or `auto`. + * Resolution is side-effect free: it neither records nor changes the harness model. + * @param {{ + * info: Record, + * resolutions?: any[], + * aliasMap?: Record | null, + * reflectData?: any, + * }} options + * @returns {string | undefined} + */ +function resolveBaselineModel({ info, resolutions = [], aliasMap, reflectData }) { + const config = info?.model_config; + if (!isObject(config) || !isObject(config.routing)) return undefined; + const recorded = resolutions.find(record => isObject(record) && record.role === "main" && (record.status === "resolved" || record.status === "exact")); + const accept = value => (isModelIdentifier(value) && value !== "auto" ? value : undefined); + if (recorded) return accept(recorded.resolved_model); + if (config.routing.enabled !== true) { + const selection = info.model_selection; + return isObject(selection) && selection.status !== "unavailable" ? accept(selection.resolved_model) : undefined; + } + if (info.engine_id !== "copilot") return undefined; + // Routing replaces aw_info.model; requested_model then holds the configured model. + const configured = isObject(info.model_routing) ? info.requested_model : info.requested_model || info.model; + if (!isModelIdentifier(configured)) return undefined; + try { + return accept(resolveConfiguredCopilotModel({ configuredModel: configured, aliasMap, reflectData })); + } catch { + return undefined; + } +} + +/** @param {string} file @returns {any} */ +function readJSON(file) { + try { + return JSON.parse(fs.readFileSync(file, "utf8")); + } catch { + return undefined; + } +} + +/** + * Record model_config.baseline_model in aw_info.json after the agent exits. + * Agent phase only; an unknown baseline is left absent. + * @param {NodeJS.ProcessEnv} [env] + * @returns {string | undefined} + */ +function persistModelConfigBaseline(env = process.env) { + if (env.GH_AW_PHASE && env.GH_AW_PHASE !== "agent") return undefined; + const root = env.GH_AW_TMP_DIR || "/tmp/gh-aw"; + const file = path.join(root, "aw_info.json"); + const info = readJSON(file); + if (!isObject(info) || !isObject(info.model_config) || info.model_config.baseline_model !== undefined) return undefined; + const resolutions = readJSON(path.join(root, "agent/model-resolution.json")); + const reflectData = [path.join(root, "agent/awf-reflect.json"), path.join(root, "sandbox/firewall/awf-reflect.json")].map(readJSON).find(isObject); + const baseline = resolveBaselineModel({ + info, + resolutions: Array.isArray(resolutions) ? resolutions : [], + aliasMap: loadModelAliasMap({ reflectData, env }), + reflectData, + }); + if (!baseline) return undefined; + info.model_config = { ...info.model_config, baseline_model: baseline }; + try { + fs.writeFileSync(file, JSON.stringify(info, null, 2)); + } catch (error) { + throw new Error(`Cannot record baseline model: ${getErrorMessage(error)}`, { cause: error }); + } + return baseline; +} + +/** + * Project aw_info.model_config as the unified `model.config` payload. + * A validated admission allowance replaces the configured budget for this run. + * @param {unknown} value + * @param {Record} [admission] Projected guardrail.admission data + * @returns {Record | undefined} + */ +function projectModelConfig(value, admission) { + const config = sanitizeModelConfig(value); + if (!config) return undefined; + const { allowed_models: allowedModels, ...routing } = config.routing; + /** @type {Record} */ + const data = { routing: { ...routing, ...(allowedModels ? { allowedModels } : {}) } }; + if (config.models) data.models = config.models; + if (config.max_ai_credits_source) { + if (admission?.status === "admitted" && isBudget(admission.maxAiCredits)) { + data.maxAiCredits = admission.maxAiCredits; + data.maxAiCreditsSource = "admission"; + } else { + if (config.max_ai_credits !== undefined) data.maxAiCredits = config.max_ai_credits; + data.maxAiCreditsSource = config.max_ai_credits_source; + } + } + if (config.baseline_model) data.baselineModel = config.baseline_model; + return data; +} + +/** @param {string} pattern @returns {RegExp} */ +function globPattern(pattern) { + return new RegExp(`^${pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*")}$`, "i"); +} + +/** + * Whether a requested model matches a runner-declared sub-agent model. + * Matching is deliberately broad so a possible sub-agent is never counted as main. + * @param {string} requested + * @param {unknown} provider + * @param {unknown} declarations aw_info.sub_agent_models + * @returns {boolean} + */ +function matchesDeclaredSubAgent(requested, provider, declarations) { + if (!Array.isArray(declarations)) return false; + const bare = requested.includes("/") ? requested.slice(requested.indexOf("/") + 1) : requested; + const candidates = [requested, bare, `github-copilot/${bare}`, `copilot/${bare}`, ...(typeof provider === "string" ? [`${provider}/${bare}`] : [])].map(value => value.toLowerCase()); + return declarations.some(entry => { + if (!isObject(entry)) return false; + const patterns = [entry.model, ...(Array.isArray(entry.patterns) ? entry.patterns : [])].filter(value => typeof value === "string" && value); + return patterns.some(pattern => candidates.some(candidate => globPattern(pattern).test(candidate))); + }); +} + +/** @param {unknown} value @returns {number | undefined} */ +const tokenCount = value => (value === undefined || value === null ? 0 : typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined); + +/** + * Reprice main-agent requests at the configured baseline model. + * Attribution uses only proxy-written request records and runner-declared sub-agents: + * classifier calls (`purpose: routing_classification`) and declared sub-agent requests + * that AWF recorded as `deviated` are excluded; `as_selected` requests not matching a + * declared sub-agent are main; anything else is unattributed and keeps the estimate incomplete. + * Returns undefined unless routing is explicitly enabled. + * @param {{ + * config: Record | undefined, + * subAgentModels?: unknown, + * tokenUsage: Record[], + * routing: Record[], + * }} options + * @returns {Record | undefined} + */ +function estimateBaseline({ config, subAgentModels, tokenUsage, routing }) { + if (config?.routing?.enabled !== true) return undefined; + const baseline = config.baselineModel; + /** @type {Map | null>} */ + const requests = new Map(); + for (const record of routing) { + if (!isObject(record) || record.stage !== "request" || typeof record.request_id !== "string" || !record.request_id) continue; + // Conflicting proxy records for one request are ambiguous. + const previous = requests.get(record.request_id); + requests.set(record.request_id, previous === undefined || (previous && previous.routed === record.routed && previous.requested_model === record.requested_model) ? record : null); + } + const seen = new Set(); + let mainRequests = 0; + let pricedRequests = 0; + let unpricedRequests = 0; + let unattributedRequests = 0; + let aic = 0; + for (const record of tokenUsage) { + if (!isObject(record)) continue; + const id = record.request_id; + if (typeof id !== "string" || !id) { + unattributedRequests++; + continue; + } + // Count each proxy request once, even when it appears in replicated logs. + if (seen.has(id)) continue; + seen.add(id); + if (record.purpose === "routing_classification") continue; + const route = requests.get(id); + const requested = route?.requested_model; + const declared = typeof requested === "string" && matchesDeclaredSubAgent(requested, route?.provider ?? record.provider, subAgentModels); + if (route?.routed === "deviated" && declared) continue; + if (route?.routed !== "as_selected" || declared) { + unattributedRequests++; + continue; + } + mainRequests++; + const provider = typeof record.provider === "string" ? record.provider : ""; + const tokens = { + inputTokens: tokenCount(record.input_tokens), + outputTokens: tokenCount(record.output_tokens), + cacheReadTokens: tokenCount(record.cache_read_tokens), + cacheWriteTokens: tokenCount(record.cache_write_tokens), + reasoningTokens: tokenCount(record.reasoning_tokens), + }; + // computeInferenceAIC returns zero for unknown pricing; unknown pricing is unpriced, never free. + if (!baseline || !provider || !findModelPricing(provider, baseline) || Object.values(tokens).some(value => value === undefined) || record.input_tokens === undefined || record.output_tokens === undefined) { + unpricedRequests++; + continue; + } + aic += computeInferenceAIC({ + provider, + model: baseline, + inputTokens: tokens.inputTokens ?? 0, + outputTokens: tokens.outputTokens ?? 0, + cacheReadTokens: tokens.cacheReadTokens ?? 0, + cacheWriteTokens: tokens.cacheWriteTokens ?? 0, + reasoningTokens: tokens.reasoningTokens ?? 0, + ...(typeof record.input_tokens_include_cache === "boolean" ? { inputTokensIncludeCache: record.input_tokens_include_cache } : {}), + }); + pricedRequests++; + } + return { + estimated: true, + ...(baseline ? { baselineModel: baseline } : {}), + ...(pricedRequests > 0 ? { aic: Number(aic.toFixed(6)) } : {}), + mainRequests, + pricedRequests, + unpricedRequests, + unattributedRequests, + complete: Boolean(baseline) && mainRequests > 0 && unpricedRequests === 0 && unattributedRequests === 0, + }; +} + +module.exports = { + ERROR_IDENTIFIER, + isErrorIdentifier, + normalizeEngineHarness, + sanitizeModelConfig, + parseCompiledModelConfig, + resolveBaselineModel, + persistModelConfigBaseline, + projectModelConfig, + matchesDeclaredSubAgent, + estimateBaseline, +}; diff --git a/actions/setup/js/routing_analytics.test.cjs b/actions/setup/js/routing_analytics.test.cjs new file mode 100644 index 00000000000..b5b2a5dc825 --- /dev/null +++ b/actions/setup/js/routing_analytics.test.cjs @@ -0,0 +1,328 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { normalizeRuntimeEvent, writeUnifiedSession } from "./unified_session.cjs"; +import { normalizeUnifiedSessionEvent } from "./unified_session_payload.cjs"; +import { validateSession } from "./scripts/validate_session.cjs"; + +const req = require; +const { computeInferenceAIC } = req("./model_costs.cjs"); +const { estimateBaseline, persistModelConfigBaseline, projectModelConfig } = req("./routing_analytics.cjs"); +const fixtures = req("./fixtures/routing_analytics_runs.cjs"); +const { readJsonlFile } = req("./jsonl_helpers.cjs"); + +const { routed, unrouted, routedClaude } = fixtures.RUNS; +const NEW_INFO_KEYS = ["engine_harness", "workflow_ref", "server_url", "model_config"]; +const roots = []; + +const mockCore = { debug: vi.fn(), info: vi.fn(), warning: vi.fn(), error: vi.fn(), setFailed: vi.fn(), setOutput: vi.fn(), summary: { addRaw: vi.fn().mockReturnThis(), write: vi.fn().mockResolvedValue() } }; + +/** + * Run generate_aw_info with the compiled env of the run's workflow and the + * recorded run context, keeping its fixed /tmp/gh-aw writes in memory. + */ +async function generateAwInfo(run) { + const recorded = fixtures.awInfo(run.id); + const env = fixtures.compiledInfoEnv(run.workflow, recorded); + const saved = { ...process.env }; + const files = new Map(); + const realRead = fs.readFileSync.bind(fs); + const realExists = fs.existsSync.bind(fs); + const realWrite = fs.writeFileSync.bind(fs); + const realMkdir = fs.mkdirSync.bind(fs); + const inTmp = filename => String(filename).startsWith("/tmp/gh-aw"); + const spies = [ + vi.spyOn(fs, "mkdirSync").mockImplementation((dir, ...args) => (inTmp(dir) ? undefined : realMkdir(dir, ...args))), + vi.spyOn(fs, "writeFileSync").mockImplementation((filename, content, ...args) => (inTmp(filename) ? void files.set(String(filename), String(content)) : realWrite(filename, content, ...args))), + vi.spyOn(fs, "existsSync").mockImplementation(filename => (inTmp(filename) ? files.has(String(filename)) : realExists(filename))), + vi.spyOn(fs, "readFileSync").mockImplementation((filename, ...args) => { + if (files.has(String(filename))) return files.get(String(filename)); + if (inTmp(filename)) throw Object.assign(new Error("missing"), { code: "ENOENT" }); + return realRead(filename, ...args); + }), + ]; + try { + for (const key of Object.keys(process.env)) if (key.startsWith("GH_AW_") || key.startsWith("GITHUB_")) delete process.env[key]; + Object.assign(process.env, env, { GITHUB_RUN_ATTEMPT: recorded.run_attempt, GITHUB_WORKFLOW_REF: recorded.caller_workflow_ref, GITHUB_SERVER_URL: "https://github.com" }); + global.core = mockCore; + const { main } = await import("./generate_aw_info.cjs"); + await main(mockCore, fixtures.runContext(recorded)); + return JSON.parse(files.get("/tmp/gh-aw/aw_info.json")); + } finally { + for (const spy of spies) spy.mockRestore(); + for (const key of Object.keys(process.env)) if (!(key in saved)) delete process.env[key]; + Object.assign(process.env, saved); + } +} + +/** + * Copy a recorded run into a collector root. With `published`, the recorded + * runtime aw_info gains the runner-published fields and the agent-phase + * baseline, exactly as generate_aw_info and parse_token_usage write them. + */ +async function prepareRoot(run, { published = true } = {}) { + const root = fs.mkdtempSync(path.join(os.tmpdir(), `routing-analytics-${run.id}-`)); + roots.push(root); + fs.cpSync(fixtures.runDir(run.id), root, { recursive: true, filter: source => path.basename(source) !== "aw_session.jsonl" }); + if (!published) return root; + const generated = await generateAwInfo(run); + const recorded = fixtures.awInfo(run.id); + const info = { ...recorded, ...Object.fromEntries(NEW_INFO_KEYS.filter(key => key in generated).map(key => [key, generated[key]])) }; + fs.writeFileSync(path.join(root, "aw_info.json"), JSON.stringify(info, null, 2)); + persistModelConfigBaseline({ GH_AW_TMP_DIR: root }); + fs.copyFileSync(path.join(root, "aw_info.json"), path.join(root, "runtime/aw_info.json")); + fs.rmSync(path.join(root, "aw_info.json")); + return root; +} + +function collect(root) { + const outputPath = path.join(root, "usage/aw_session.jsonl"); + writeUnifiedSession({ rootDir: root, outputPath, warn: () => {}, admission: {}, jobDurations: {} }); + const events = [...readJsonlFile(outputPath, { strict: true })]; + expect(validateSession(fs.readFileSync(outputPath, "utf8"))).toBe(events.length); + return events; +} + +const ofType = (events, type) => events.filter(event => event.type === type); + +/** The proxy token usage of one run, as the four main tuples are recorded. */ +const proxyTokenUsage = id => [...readJsonlFile(path.join(fixtures.runDir(id), "sandbox/firewall/logs/api-proxy-logs/token-usage.jsonl"), { strict: true })]; +const proxyRouting = id => [...readJsonlFile(path.join(fixtures.runDir(id), "sandbox/firewall/logs/api-proxy-logs/model-routing.jsonl"), { strict: true })]; + +describe("routing analytics in aw_session.jsonl", () => { + let savedEnv; + beforeEach(() => { + savedEnv = { ...process.env }; + }); + afterEach(() => { + for (const root of roots.splice(0)) fs.rmSync(root, { recursive: true, force: true }); + for (const key of Object.keys(process.env)) if (!(key in savedEnv)) delete process.env[key]; + Object.assign(process.env, savedEnv); + vi.restoreAllMocks(); + }); + + it("workflow_info_records_sdk_and_cli_identity", async () => { + for (const [run, harness] of [ + [routed, "copilot-sdk"], + [routedClaude, "copilot-sdk"], + [unrouted, "copilot-cli"], + ]) { + const recorded = fixtures.awInfo(run.id); + const generated = await generateAwInfo(run); + expect(generated).toMatchObject({ + engine_id: "copilot", + engine_harness: harness, + workflow_id: recorded.workflow_id, + workflow_ref: recorded.workflow_id, + workflow_call_id: recorded.workflow_call_id, + caller_workflow_ref: recorded.caller_workflow_ref, + run_attempt: "1", + server_url: "https://github.com", + }); + expect(generated.workflow_ref).toMatch(new RegExp(`^github/gh-aw/\\.github/workflows/${run.workflow}\\.lock\\.yml@refs/heads/`)); + + const [info] = ofType(collect(await prepareRoot(run)), "workflow.info"); + expect(info.data).toMatchObject({ + engineId: "copilot", + engineHarness: harness, + workflowRef: recorded.workflow_id, + workflowId: recorded.workflow_id, + workflowCallId: recorded.workflow_call_id, + callerWorkflowRef: recorded.caller_workflow_ref, + runAttempt: "1", + serverUrl: "https://github.com", + }); + } + }); + + it("model_config_records_routed_compiled_policy", async () => { + const events = collect(await prepareRoot(routed)); + const configs = ofType(events, "model.config"); + expect(configs).toHaveLength(1); + expect(configs[0].provenance).toMatchObject({ component: "workflow", phase: "agent" }); + expect(configs[0].data).toEqual({ + routing: { enabled: true, goal: "cost", mode: "economy", allowedModels: ["gpt-5.6-luna"] }, + models: { allowed: [], blocked: [] }, + maxAiCredits: 1000, + maxAiCreditsSource: "default", + baselineModel: "claude-sonnet-5.5", + }); + // Configured policy, never the selection's resulting mode or routed model. + expect(fixtures.awInfo(routed.id).model_routing.mode).toBe("balanced"); + expect(configs[0].data.baselineModel).not.toBe(fixtures.awInfo(routed.id).routed_model); + // Supplied model allow/block policy is retained separately from routing candidates. + const supplied = projectModelConfig({ routing: { enabled: true }, models: { allowed: ["github-copilot/*sonnet*"], blocked: ["openai/gpt-5*"] }, max_ai_credits: 250, max_ai_credits_source: "frontmatter" }); + expect(supplied).toEqual({ routing: { enabled: true }, models: { allowed: ["github-copilot/*sonnet*"], blocked: ["openai/gpt-5*"] }, maxAiCredits: 250, maxAiCreditsSource: "frontmatter" }); + }); + + it("model_config_records_unrouted_resolved_baseline", async () => { + const events = collect(await prepareRoot(unrouted)); + const configs = ofType(events, "model.config"); + expect(configs).toHaveLength(1); + expect(configs[0].data.routing).toEqual({ enabled: false }); + expect(configs[0].data.baselineModel).toBe("claude-sonnet-5.5"); + expect(fixtures.awInfo(unrouted.id).requested_model).toBe("auto"); + expect(configs[0].data).toMatchObject({ maxAiCredits: 1000, maxAiCreditsSource: "default" }); + // Unrouted runs keep their configuration but omit the counterfactual estimate. + expect(ofType(events, "model.baseline_estimate")).toEqual([]); + }); + + it("model_config_survives_selection_or_startup_failure", async () => { + // Runner publication precedes selection: the compiled policy is already recorded. + const published = await generateAwInfo(routedClaude); + expect(published.model_routing).toBeUndefined(); + expect(published.model_config).toEqual({ + routing: { enabled: true, goal: "cost", mode: "economy", allowed_models: ["claude-haiku-4.5"] }, + models: { allowed: [], blocked: [] }, + max_ai_credits: 1000, + max_ai_credits_source: "default", + }); + + const events = collect(await prepareRoot(routedClaude)); + expect(ofType(events, "model.resolution").map(event => event.data)).toEqual([expect.objectContaining({ role: "mini-whoami", status: "failed", cause: "model_unavailable" })]); + const configs = ofType(events, "model.config"); + expect(configs).toHaveLength(1); + expect(configs[0].data).toEqual({ + routing: { enabled: true, goal: "cost", mode: "economy", allowedModels: ["claude-haiku-4.5"] }, + models: { allowed: [], blocked: [] }, + maxAiCredits: 1000, + maxAiCreditsSource: "default", + baselineModel: "claude-sonnet-5.5", + }); + expect(fixtures.awInfo(routedClaude.id).model_routing.mode).toBe("unknown"); + // No main-agent inference followed selection, so the estimate is explicitly incomplete. + const [estimate] = ofType(events, "model.baseline_estimate"); + expect(estimate.data).toMatchObject({ estimated: true, mainRequests: 0, pricedRequests: 0, complete: false }); + expect(estimate.data.aic).toBeUndefined(); + }); + + it("baseline_estimate_reprices_only_main_requests", async () => { + const events = collect(await prepareRoot(routed)); + const estimates = ofType(events, "model.baseline_estimate"); + expect(estimates).toHaveLength(1); + expect(estimates[0].provenance).toMatchObject({ component: "collector", phase: "conclusion" }); + + const mainIds = new Set( + proxyRouting(routed.id) + .filter(record => record.stage === "request" && record.routed === "as_selected") + .map(record => record.request_id) + ); + const main = proxyTokenUsage(routed.id).filter(record => mainIds.has(record.request_id)); + expect(main.map(record => [record.input_tokens, record.output_tokens, record.cache_read_tokens, record.cache_write_tokens])).toEqual([ + [3, 175, 0, 18516], + [3, 61, 18516, 339], + [3, 210, 18855, 76], + [3, 60, 18931, 228], + ]); + // Copilot's provider-default cache semantics: cache reads are subtracted from input. + const expected = main.reduce( + (sum, record) => + sum + + computeInferenceAIC({ + provider: "copilot", + model: "claude-sonnet-5.5", + inputTokens: record.input_tokens, + outputTokens: record.output_tokens, + cacheReadTokens: record.cache_read_tokens, + cacheWriteTokens: record.cache_write_tokens, + reasoningTokens: 0, + }), + 0 + ); + expect(expected).toBeGreaterThan(0); + expect(estimates[0].data).toEqual({ estimated: true, baselineModel: "claude-sonnet-5.5", aic: Number(expected.toFixed(6)), mainRequests: 4, pricedRequests: 4, unpricedRequests: 0, unattributedRequests: 0, complete: true }); + + // Sub-agent, classifier and detection usage are present but excluded. + const usage = ofType(events, "firewall.token_usage"); + expect(usage.filter(event => event.provenance.phase === "detection")).toHaveLength(2); + expect(usage.filter(event => event.provenance.phase === "agent")).toHaveLength(6); + // Replicated proxy copies of the same request are counted once. + const config = ofType(events, "model.config")[0].data; + const tokenUsage = proxyTokenUsage(routed.id); + const doubled = estimateBaseline({ config, subAgentModels: fixtures.awInfo(routed.id).sub_agent_models, tokenUsage: [...tokenUsage, ...tokenUsage], routing: proxyRouting(routed.id) }); + expect(doubled).toEqual(estimates[0].data); + }); + + it("baseline_estimate_reports_unknown_pricing_and_coverage", () => { + const info = fixtures.awInfo(routed.id); + const tokenUsage = proxyTokenUsage(routed.id); + const routing = proxyRouting(routed.id); + const base = { routing: { enabled: true }, baselineModel: "claude-sonnet-5.5" }; + const estimate = config => estimateBaseline({ config, subAgentModels: info.sub_agent_models, tokenUsage, routing }); + + // Unknown baseline pricing is unpriced, never a complete zero. + const unknown = estimate({ ...base, baselineModel: "no-such-model-for-pricing" }); + expect(unknown).toEqual({ estimated: true, baselineModel: "no-such-model-for-pricing", mainRequests: 4, pricedRequests: 0, unpricedRequests: 4, unattributedRequests: 0, complete: false }); + // An unknown baseline model is unpriced and incomplete. + expect(estimate({ routing: { enabled: true } })).toMatchObject({ mainRequests: 4, pricedRequests: 0, unpricedRequests: 4, complete: false }); + expect(estimate({ routing: { enabled: true } }).aic).toBeUndefined(); + + // A request with unknown token counts is unpriced; the priced subtotal is incomplete. + const partial = estimateBaseline({ config: base, subAgentModels: info.sub_agent_models, tokenUsage: tokenUsage.map(record => (record.request_id.startsWith("962c7fa8") ? { ...record, output_tokens: "n/a" } : record)), routing }); + expect(partial).toMatchObject({ mainRequests: 4, pricedRequests: 3, unpricedRequests: 1, complete: false }); + expect(partial.aic).toBeGreaterThan(0); + + // Requests without proxy request attribution are not silently included. + const ambiguous = estimateBaseline({ config: base, subAgentModels: info.sub_agent_models, tokenUsage, routing: routing.filter(record => !String(record.request_id).startsWith("786666b6")) }); + expect(ambiguous).toMatchObject({ mainRequests: 3, pricedRequests: 3, unattributedRequests: 1, complete: false }); + // An as_selected request matching a declared sub-agent is ambiguous, not main. + const declared = estimateBaseline({ config: base, subAgentModels: [{ model: "gpt-5.6-luna", patterns: ["github-copilot/gpt-5.6-luna"] }], tokenUsage, routing }); + expect(declared).toMatchObject({ mainRequests: 0, unattributedRequests: 5, complete: false }); + + // Unrouted (or unknown routing) runs omit the estimate. + expect(estimate({ routing: { enabled: false }, baselineModel: "claude-sonnet-5.5" })).toBeUndefined(); + expect(estimate(undefined)).toBeUndefined(); + }); + + it("upstream_error_preserves_identifiers_without_payloads", () => { + const records = [...readJsonlFile(path.join(fixtures.DIR, "awf-10211/upstream-errors.jsonl"), { strict: true })]; + const projected = records.map(record => normalizeUnifiedSessionEvent(normalizeRuntimeEvent("firewall", record), "agent")); + expect(projected.map(event => event.type)).toEqual(Array(4).fill("firewall.upstream_error")); + expect(projected.map(event => event.data)).toEqual([ + { requestId: "req-1", provider: "copilot", model: "claude-haiku-4.5", httpStatus: 400, errorCode: "invalid_reasoning_effort" }, + { requestId: "req-2", provider: "copilot", model: "gpt-5.6-luna", httpStatus: 400, errorCode: "c", errorType: "t", errorParam: "p" }, + { requestId: "req-3", provider: "copilot", model: "claude-haiku-4.5", httpStatus: 400, errorType: "overloaded_error" }, + { requestId: "req-4", provider: "copilot", model: "claude-haiku-4.5", httpStatus: 400 }, + ]); + const serialized = JSON.stringify(projected); + for (const fragment of ["response_body", "responseBody", "response_headers", "content-type", "output_config", "does not support", "The requested model", '"m"']) { + expect(serialized).not.toContain(fragment); + } + // Non-identifier codes are dropped rather than copied. + const invalid = normalizeUnifiedSessionEvent(normalizeRuntimeEvent("firewall", { ...records[0], error_code: "bad code with spaces" }), "agent"); + expect(invalid.data.errorCode).toBeUndefined(); + }); + + it("failed_request_preserves_error_source", () => { + const records = [...readJsonlFile(path.join(fixtures.DIR, "awf-10211/model-routing.jsonl"), { strict: true })]; + const projected = records.map(record => normalizeUnifiedSessionEvent(normalizeRuntimeEvent("firewall", record), "agent")); + expect(projected.map(event => event.type)).toEqual(["firewall.model_routing", "firewall.model_routing"]); + expect(projected[0].data).toMatchObject({ stage: "request", requestId: "local-req-5", outcome: "failed", status: 400, errorCode: "invalid_reasoning_effort", errorSource: "upstream" }); + expect(projected[0].data).not.toHaveProperty("errorType"); + expect(projected[1].data).toMatchObject({ stage: "request", requestId: "request-1", outcome: "failed", status: 400, errorCode: "unsupported_reasoning_effort", errorType: "invalid_request_error", errorSource: "awf" }); + const invalid = normalizeUnifiedSessionEvent(normalizeRuntimeEvent("firewall", { ...records[1], error_source: "agent", error_type: "free form text" }), "agent"); + expect(invalid.data).not.toHaveProperty("errorSource"); + expect(invalid.data).not.toHaveProperty("errorType"); + }); + + it("older_sessions_keep_missing_routing_data_unknown", async () => { + for (const run of [routed, unrouted, routedClaude]) { + const recorded = fixtures.session(run.id); + const content = fs.readFileSync(path.join(fixtures.runDir(run.id), "aw_session.jsonl"), "utf8"); + expect(validateSession(content)).toBe(recorded.length); + const [info] = ofType(recorded, "workflow.info"); + expect(info.data).toMatchObject({ engineId: "copilot", runAttempt: "1" }); + for (const key of ["engineHarness", "workflowRef", "serverUrl"]) expect(info.data).not.toHaveProperty(key); + expect(ofType(recorded, "model.config")).toEqual([]); + expect(ofType(recorded, "model.baseline_estimate")).toEqual([]); + + // Re-collecting the unmodified older artifacts invents no routing metadata. + const events = collect(await prepareRoot(run, { published: false })); + const [collected] = ofType(events, "workflow.info"); + for (const key of ["engineHarness", "workflowRef", "serverUrl"]) expect(collected.data).not.toHaveProperty(key); + expect(ofType(events, "model.config")).toEqual([]); + expect(ofType(events, "model.baseline_estimate")).toEqual([]); + } + }); +}); diff --git a/actions/setup/js/types/unified_session.d.ts b/actions/setup/js/types/unified_session.d.ts index ed674f65f16..acab88c7bb4 100644 --- a/actions/setup/js/types/unified_session.d.ts +++ b/actions/setup/js/types/unified_session.d.ts @@ -166,6 +166,68 @@ export interface ModelRoutingData { status?: JsonValue; /** AWF failure phase, such as `primary` or `bootstrap`; not the collection provenance phase. */ phase?: JsonValue; + /** Identifier-only provider or AWF error code on failed request records; absent means unknown. */ + errorCode?: string; + /** Identifier-only provider or AWF error type on failed request records; absent means unknown. */ + errorType?: string; + /** Whether a failed request was rejected by the upstream provider or by AWF; absent means unknown. */ + errorSource?: "upstream" | "awf"; +} + +/** Proxy-written upstream error response, projected without bodies, headers or messages. */ +export interface FirewallUpstreamErrorData { + requestId?: string; + provider?: string; + model?: string; + /** @asType integer */ + httpStatus?: number; + /** Identifier-shaped provider error code; absent means the provider did not supply one. */ + errorCode?: string; + errorType?: string; + errorParam?: string; +} + +/** Runner-written configured model policy; absent fields are unknown, not false, empty or zero. */ +export interface ModelConfigData { + /** Configured routing policy, never the router's per-run selection. */ + routing: { + enabled: boolean; + goal?: string; + mode?: string; + /** Configured routing candidates without provider prefix; absent means the router default or unknown. */ + allowedModels?: string[]; + }; + /** Configured model allow/block policy; empty lists mean no restriction was configured. */ + models?: { allowed: string[]; blocked: string[] }; + /** + * Effective per-run AI credit budget. + * @asType integer + * @minimum 1 + * @maximum 2147483647 + */ + maxAiCredits?: number; + /** Provenance of the budget: compiled frontmatter, the repository default, or the admission allowance. */ + maxAiCreditsSource?: "frontmatter" | "default" | "admission"; + /** Concrete main model the run would use without routing, after alias resolution. */ + baselineModel?: string; +} + +/** Collector-written repricing of main-agent requests at the baseline model; routed runs only. */ +export interface ModelBaselineEstimateData { + estimated: true; + baselineModel?: string; + /** Sum over priced main-agent requests; absent when no request could be priced. */ + aic?: number; + /** @asType integer @minimum 0 */ + mainRequests: number; + /** @asType integer @minimum 0 */ + pricedRequests: number; + /** @asType integer @minimum 0 */ + unpricedRequests: number; + /** @asType integer @minimum 0 */ + unattributedRequests: number; + /** True only when every agent-phase request was attributed and every main request was priced. */ + complete: boolean; } export interface ModelRoutingRankedChoice { @@ -455,6 +517,8 @@ export interface ModelSelectionData { export interface WorkflowInfoData { engineId?: JsonValue; + /** Compiled Copilot harness; absent means unknown, never inferred from engineId. */ + engineHarness?: "copilot-cli" | "copilot-sdk"; agentVersion?: JsonValue; cliVersion?: JsonValue; awfVersion?: JsonValue; @@ -468,6 +532,8 @@ export interface WorkflowInfoData { workflow?: JsonValue; /** Executing workflow reference supplied by the compiler from job.workflow_ref. */ workflowId?: JsonValue; + /** Executing workflow reference (job.workflow_ref); same value as workflowId. */ + workflowRef?: JsonValue; /** Current workflow invocation ID from aw_info, separate from the caller's ID. */ workflowCallId?: JsonValue; /** GITHUB_WORKFLOW_REF; identifies the top-level caller in reusable workflows. */ @@ -475,6 +541,8 @@ export interface WorkflowInfoData { repository?: JsonValue; runId?: JsonValue; runAttempt?: JsonValue; + /** GitHub server origin, such as https://github.com. */ + serverUrl?: JsonValue; ref?: JsonValue; sha?: JsonValue; actor?: JsonValue; @@ -541,6 +609,8 @@ export interface CollectionData { export interface UnifiedSessionEventDataMap { "workflow.job_result": WorkflowJobResultData; "model.inventory": ModelInventoryData; + "model.config": ModelConfigData; + "model.baseline_estimate": ModelBaselineEstimateData; "skill.inventory": SkillInventoryData; "skill.conflict": SkillConflictData; "skill.invoked": SkillInvokedData; @@ -644,6 +714,7 @@ export interface UnifiedSessionEventDataMap { "firewall.http_access": FirewallAccessData; "firewall.token_usage": UsageReportData; "firewall.model_routing": ModelRoutingData; + "firewall.upstream_error": FirewallUpstreamErrorData; "model_routing.outcome": ModelRoutingOutcomeData; "model_endpoint.mismatch": ModelEndpointMismatchData; "model.resolution": ModelResolutionData; diff --git a/actions/setup/js/unified_session.cjs b/actions/setup/js/unified_session.cjs index e44e538c95f..f40f0e4a8a8 100644 --- a/actions/setup/js/unified_session.cjs +++ b/actions/setup/js/unified_session.cjs @@ -14,6 +14,7 @@ const { normalizeEngineLogEntries, normalizeEngineSessionEvents, parseEngineLog const { sessionTimestamp, orderSessionSources } = require("./unified_session_order.cjs"); const { normalizeOtelEvents } = require("./unified_session_otel.cjs"); const { getApiProxyEventName } = require("./steering_helpers.cjs"); +const { estimateBaseline, projectModelConfig } = require("./routing_analytics.cjs"); const SESSION_FILE_FORMAT_VERSION = 1; @@ -127,6 +128,7 @@ function normalizeRuntimeEvent(component, record) { if (kind === "http_access" || record.decision !== undefined) type = "firewall.http_access"; else if (kind === "token_usage") type = "firewall.token_usage"; else if (kind === "model_routing") type = "firewall.model_routing"; + else if (kind === "upstream_error_response") type = "firewall.upstream_error"; else if (kind === "steering" || kind.endsWith("_steering")) type = "firewall.steering"; } return { @@ -665,6 +667,24 @@ function collectUnifiedSession({ rootDir = "/tmp/gh-aw", engine, warn = message report(path.join(rootDir, "usage/aw_session.jsonl"), "invalid_admission_metadata", undefined); } } + /** @type {SessionEvent[]} */ + const routingEstimates = []; + const infoSource = metadata ? sources.find(source => source.component === "workflow" && source.path === path.relative(rootDir, metadata)) : undefined; + const runInfo = infoSource?.events[0]?.type === "workflow.info" ? infoSource.events[0].data : undefined; + if (metadata && infoSource && runInfo && Object.hasOwn(runInfo, "model_config")) { + // Older sessions without runner-written configuration keep routing analytics unknown. + const admissionData = sources.find(source => source.component === "guardrail" && source.phase === "admission")?.events[0]?.data; + const config = projectModelConfig(runInfo.model_config, admissionData); + if (!config) { + report(metadata, "invalid_model_config", undefined); + } else { + infoSource.events.push({ type: "model.config", data: config }); + const firewall = sources.filter(source => source.component === "firewall" && source.phase === "agent"); + const proxyRecords = type => firewall.flatMap(source => source.events.filter(event => event.type === type).map(event => event.data)); + const estimate = estimateBaseline({ config, subAgentModels: runInfo.sub_agent_models, tokenUsage: proxyRecords("firewall.token_usage"), routing: proxyRecords("firewall.model_routing") }); + if (estimate) routingEstimates.push({ type: "model.baseline_estimate", data: estimate }); + } + } const status = dailyAIC.GH_AW_DAILY_AI_CREDITS_GUARDRAIL_STATUS; if (typeof status === "string" && ["disabled", "skipped", "under_budget", "exceeded", "structural_error", "transient_error"].includes(status) && !sources.some(source => source.events.some(event => event.type === "guardrail.daily_aic"))) { /** @type {Record} */ @@ -728,7 +748,7 @@ function collectUnifiedSession({ rootDir = "/tmp/gh-aw", engine, warn = message }; /** @type {import("./types/agent_session").SessionFileFormatEvent} */ const format = { type: "session.format", data: { version: SESSION_FILE_FORMAT_VERSION } }; - sources.push({ component: "collector", phase: "conclusion", path: "usage/aw_session.jsonl", events: [format, ...warnings, summary] }); + sources.push({ component: "collector", phase: "conclusion", path: "usage/aw_session.jsonl", events: [format, ...warnings, ...routingEstimates, summary] }); const events = mergeSessionSources(sources); const formatIndex = events.findIndex(event => event.type === "session.format" && event.provenance.component === "collector" && event.provenance.index === 0); // File metadata leads the stream without inventing a timestamp for it. diff --git a/actions/setup/js/unified_session_payload.cjs b/actions/setup/js/unified_session_payload.cjs index c7c7ed414b5..8427014eafa 100644 --- a/actions/setup/js/unified_session_payload.cjs +++ b/actions/setup/js/unified_session_payload.cjs @@ -10,6 +10,10 @@ const { normalizeMcpConfigurationData } = require("./mcp_configuration.cjs"); const { ERR_VALIDATION } = require("./error_codes.cjs"); const { getMcpRateLimitHint, getRpcRateLimitHint } = require("./mcp_rate_limit.cjs"); const { redactWebhookPayloads } = require("./webhook_context.cjs"); +const { isErrorIdentifier, normalizeEngineHarness } = require("./routing_analytics.cjs"); + +/** AWF failed-request origins: provider response versus AWF-originated rejection. */ +const ERROR_SOURCES = new Set(["upstream", "awf"]); const SCOPED_AGENT_TYPES = new Set([ "session.init", @@ -365,6 +369,19 @@ const EVENT_FIELDS = { unavailable: ["unavailable"], status: ["status"], phase: ["phase"], + errorCode: ["error_code", "errorCode"], + errorType: ["error_type", "errorType"], + errorSource: ["error_source", "errorSource"], + }, + // Identifier-only projection; response bodies, headers and messages are never copied. + "firewall.upstream_error": { + requestId: ["request_id", "requestId"], + provider: ["provider"], + model: ["model"], + httpStatus: ["status", "httpStatus"], + errorCode: ["error_code", "errorCode"], + errorType: ["error_type", "errorType"], + errorParam: ["error_param", "errorParam"], }, "safe_output.request": SAFE_OUTPUT_FIELDS, "safe_output.result": SAFE_OUTPUT_FIELDS, @@ -411,6 +428,7 @@ const EVENT_FIELDS = { "workflow.info": { dryRun: ["dryRun", "dry_run"], engineId: ["engineId", "engine_id", "engine"], + engineHarness: ["engineHarness", "engine_harness"], agentVersion: ["agentVersion", "agent_version"], cliVersion: ["cliVersion", "cli_version"], awfVersion: ["awfVersion", "awf_version"], @@ -422,11 +440,13 @@ const EVENT_FIELDS = { triggerType: ["triggerType", "event_name"], workflow: ["workflow", "workflow_name"], workflowId: ["workflowId", "workflow_id"], + workflowRef: ["workflowRef", "workflow_ref"], workflowCallId: ["workflowCallId", "workflow_call_id"], callerWorkflowRef: ["callerWorkflowRef", "caller_workflow_ref"], repository: ["repository"], runId: ["runId", "run_id"], runAttempt: ["runAttempt", "run_attempt"], + serverUrl: ["serverUrl", "server_url"], ref: ["ref"], sha: ["sha"], actor: ["actor"], @@ -629,8 +649,22 @@ function normalizeUnifiedSessionEvent(event, phase) { for (const key of ["eligibleChoices", "catalogueOverlap", "selectedEndpoint", "requestedEndpoint", "upstreamEndpoint", "status", "phase"]) { if (data[key] !== null && typeof data[key] === "object") delete data[key]; } + for (const key of ["errorCode", "errorType"]) { + if (Object.hasOwn(data, key) && !isErrorIdentifier(data[key])) delete data[key]; + } + if (Object.hasOwn(data, "errorSource") && !ERROR_SOURCES.has(data.errorSource)) delete data.errorSource; + } + if (event.type === "firewall.upstream_error") { + for (const key of ["errorCode", "errorType", "errorParam"]) { + if (Object.hasOwn(data, key) && !isErrorIdentifier(data[key])) delete data[key]; + } + for (const key of ["requestId", "provider", "model"]) { + if (Object.hasOwn(data, key) && typeof data[key] !== "string") delete data[key]; + } + if (Object.hasOwn(data, "httpStatus") && !(Number.isInteger(data.httpStatus) && data.httpStatus >= 100 && data.httpStatus <= 599)) delete data.httpStatus; } if (event.type === "workflow.info") { + if (Object.hasOwn(data, "engineHarness") && !normalizeEngineHarness(data.engineHarness)) delete data.engineHarness; const awContext = Object.hasOwn(source, "awContext") ? source.awContext : source.context; if (awContext && typeof awContext === "object" && !Array.isArray(awContext)) { data.awContext = structuredClone(redactWebhookPayloads(awContext)); diff --git a/actions/setup/session_parsers.go b/actions/setup/session_parsers.go index 5cb2e6a5cc3..e2eb9e68f29 100644 --- a/actions/setup/session_parsers.go +++ b/actions/setup/session_parsers.go @@ -67,6 +67,7 @@ import "embed" //go:embed js/constants.cjs js/error_codes.cjs js/error_helpers.cjs js/model_costs.cjs js/models.json js/shim.cjs //go:embed js/agent_execution.cjs js/agent_error_patterns.cjs js/harness_error_patterns.cjs js/harness_crash_signals.cjs //go:embed js/engine_log_parser.cjs +//go:embed js/routing_analytics.cjs js/resolve_model_alias.cjs //go:embed js/parse_kiro_log.cjs //go:embed js/parse_deepseek_log.cjs //go:embed js/parse_pydantic_log.cjs diff --git a/docs/public/schemas/unified-session.schema.json b/docs/public/schemas/unified-session.schema.json index 7f51534df5d..a91afb810d1 100644 --- a/docs/public/schemas/unified-session.schema.json +++ b/docs/public/schemas/unified-session.schema.json @@ -91,6 +91,7 @@ { "if": { "properties": { "type": { "const": "firewall.model_routing" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/ModelRoutingData" } } } }, { "if": { "properties": { "type": { "const": "firewall.steering" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/FirewallSteeringData" } } } }, { "if": { "properties": { "type": { "const": "firewall.token_usage" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/UsageReportData" } } } }, + { "if": { "properties": { "type": { "const": "firewall.upstream_error" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/FirewallUpstreamErrorData" } } } }, { "if": { "properties": { "type": { "const": "github_api.rate_limit" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/GitHubApiRateLimitData" } } } }, { "if": { "properties": { "type": { "const": "grader.manifest" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/GraderManifestData" } } } }, { "if": { "properties": { "type": { "const": "grader.result" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/GraderResultData" } } } }, @@ -122,6 +123,8 @@ { "if": { "properties": { "type": { "const": "mcp.rpc.request" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/McpObservationData" } } } }, { "if": { "properties": { "type": { "const": "mcp.rpc.response" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/McpObservationData" } } } }, { "if": { "properties": { "type": { "const": "mcp.tool_call" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/McpObservationData" } } } }, + { "if": { "properties": { "type": { "const": "model.baseline_estimate" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/ModelBaselineEstimateData" } } } }, + { "if": { "properties": { "type": { "const": "model.config" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/ModelConfigData" } } } }, { "if": { "properties": { "type": { "const": "model.inventory" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/ModelInventoryData" } } } }, { "if": { "properties": { "type": { "const": "model.resolution" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/ModelResolutionData" } } } }, { "if": { "properties": { "type": { "const": "model_endpoint.mismatch" } }, "required": ["type"] }, "then": { "properties": { "data": { "$ref": "#/definitions/ModelEndpointMismatchData" } } } }, @@ -612,6 +615,20 @@ "additionalProperties": false, "description": "AWF API proxy steering event-log observation." }, + "FirewallUpstreamErrorData": { + "type": "object", + "properties": { + "requestId": { "type": "string" }, + "provider": { "type": "string" }, + "model": { "type": "string" }, + "httpStatus": { "type": "integer" }, + "errorCode": { "type": "string", "description": "Identifier-shaped provider error code; absent means the provider did not supply one." }, + "errorType": { "type": "string" }, + "errorParam": { "type": "string" } + }, + "additionalProperties": false, + "description": "Proxy-written upstream error response, projected without bodies, headers or messages." + }, "GitHubApiRateLimitData": { "type": "object", "properties": { @@ -788,6 +805,52 @@ }, "additionalProperties": false }, + "ModelBaselineEstimateData": { + "type": "object", + "properties": { + "estimated": { "type": "boolean", "const": true }, + "baselineModel": { "type": "string" }, + "aic": { "type": "number", "description": "Sum over priced main-agent requests; absent when no request could be priced." }, + "mainRequests": { "type": "integer", "minimum": 0 }, + "pricedRequests": { "type": "integer", "minimum": 0 }, + "unpricedRequests": { "type": "integer", "minimum": 0 }, + "unattributedRequests": { "type": "integer", "minimum": 0 }, + "complete": { "type": "boolean", "description": "True only when every agent-phase request was attributed and every main request was priced." } + }, + "required": ["estimated", "mainRequests", "pricedRequests", "unpricedRequests", "unattributedRequests", "complete"], + "additionalProperties": false, + "description": "Collector-written repricing of main-agent requests at the baseline model; routed runs only." + }, + "ModelConfigData": { + "type": "object", + "properties": { + "routing": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" }, + "goal": { "type": "string" }, + "mode": { "type": "string" }, + "allowedModels": { "type": "array", "items": { "type": "string" }, "description": "Configured routing candidates without provider prefix; absent means the router default or unknown." } + }, + "required": ["enabled"], + "additionalProperties": false, + "description": "Configured routing policy, never the router's per-run selection." + }, + "models": { + "type": "object", + "properties": { "allowed": { "type": "array", "items": { "type": "string" } }, "blocked": { "type": "array", "items": { "type": "string" } } }, + "required": ["allowed", "blocked"], + "additionalProperties": false, + "description": "Configured model allow/block policy; empty lists mean no restriction was configured." + }, + "maxAiCredits": { "type": "integer", "description": "Effective per-run AI credit budget.", "minimum": 1, "maximum": 2147483647 }, + "maxAiCreditsSource": { "type": "string", "enum": ["frontmatter", "default", "admission"], "description": "Provenance of the budget: compiled frontmatter, the repository default, or the admission allowance." }, + "baselineModel": { "type": "string", "description": "Concrete main model the run would use without routing, after alias resolution." } + }, + "required": ["routing"], + "additionalProperties": false, + "description": "Runner-written configured model policy; absent fields are unknown, not false, empty or zero." + }, "ModelEndpointMismatchData": { "type": "object", "properties": { @@ -900,7 +963,10 @@ "upstreamEndpoint": { "$ref": "#/definitions/JsonValue" }, "unavailable": { "type": "array", "items": { "type": "string" }, "description": "Request-telemetry dimensions AWF did not observe, such as `model` and `effort`; not unavailable models." }, "status": { "$ref": "#/definitions/JsonValue", "description": "Observed HTTP status, independent of `outcome`." }, - "phase": { "$ref": "#/definitions/JsonValue", "description": "AWF failure phase, such as `primary` or `bootstrap`; not the collection provenance phase." } + "phase": { "$ref": "#/definitions/JsonValue", "description": "AWF failure phase, such as `primary` or `bootstrap`; not the collection provenance phase." }, + "errorCode": { "type": "string", "description": "Identifier-only provider or AWF error code on failed request records; absent means unknown." }, + "errorType": { "type": "string", "description": "Identifier-only provider or AWF error type on failed request records; absent means unknown." }, + "errorSource": { "type": "string", "enum": ["upstream", "awf"], "description": "Whether a failed request was rejected by the upstream provider or by AWF; absent means unknown." } }, "additionalProperties": false }, @@ -1154,6 +1220,7 @@ "type": "object", "properties": { "engineId": { "$ref": "#/definitions/JsonValue" }, + "engineHarness": { "type": "string", "enum": ["copilot-cli", "copilot-sdk"], "description": "Compiled Copilot harness; absent means unknown, never inferred from engineId." }, "agentVersion": { "$ref": "#/definitions/JsonValue" }, "cliVersion": { "$ref": "#/definitions/JsonValue" }, "awfVersion": { "$ref": "#/definitions/JsonValue" }, @@ -1166,11 +1233,13 @@ "dryRun": { "$ref": "#/definitions/JsonValue" }, "workflow": { "$ref": "#/definitions/JsonValue" }, "workflowId": { "$ref": "#/definitions/JsonValue", "description": "Executing workflow reference supplied by the compiler from job.workflow_ref." }, + "workflowRef": { "$ref": "#/definitions/JsonValue", "description": "Executing workflow reference (job.workflow_ref); same value as workflowId." }, "workflowCallId": { "$ref": "#/definitions/JsonValue", "description": "Current workflow invocation ID from aw_info, separate from the caller's ID." }, "callerWorkflowRef": { "$ref": "#/definitions/JsonValue", "description": "GITHUB_WORKFLOW_REF; identifies the top-level caller in reusable workflows." }, "repository": { "$ref": "#/definitions/JsonValue" }, "runId": { "$ref": "#/definitions/JsonValue" }, "runAttempt": { "$ref": "#/definitions/JsonValue" }, + "serverUrl": { "$ref": "#/definitions/JsonValue", "description": "GitHub server origin, such as https://github.com." }, "ref": { "$ref": "#/definitions/JsonValue" }, "sha": { "$ref": "#/definitions/JsonValue" }, "actor": { "$ref": "#/definitions/JsonValue" }, diff --git a/docs/src/content/docs/specs/unified-agent-session-specification.md b/docs/src/content/docs/specs/unified-agent-session-specification.md index 65f1896175b..c003518d6a6 100644 --- a/docs/src/content/docs/specs/unified-agent-session-specification.md +++ b/docs/src/content/docs/specs/unified-agent-session-specification.md @@ -299,6 +299,16 @@ while `ref`, `sha`, `actor`, and `targetRepo` retain the existing metadata used for legacy lineage matching. Both references are captured when the runner writes `aw_info.json`, never from the collector's environment. An unavailable executing reference remains empty; the caller reference is not substituted for it. +`workflow.info.workflowRef` (runner-written `aw_info.json.workflow_ref`) repeats +the executing reference held by `workflowId`; it is never `GITHUB_WORKFLOW_REF`. +`serverUrl` (`server_url`) is the origin of the runner's GitHub server URL, such +as `https://github.com`. `engineHarness` (`engine_harness`) is `copilot-cli` or +`copilot-sdk`, compiled from the workflow's Copilot harness configuration +(`engine.copilot-sdk`) and wired as `GH_AW_INFO_ENGINE_HARNESS`; it is never +inferred from `engineId`, the workflow name, or model output, and is absent for +other engines. All three are absent in sessions written before they existed; +readers MUST treat their absence as unknown, not as a particular harness or +server. That context describes the recorded caller: `episode.hopId` is not relabeled as the current run's hop, and `episode.parentHopId` remains that caller's recorded @@ -767,7 +777,8 @@ source for opaque fields. | `mcp.tool_call`, `mcp.event` | Structured gateway calls or other gateway log messages. | | `mcp.configuration` | Sanitized pre-startup inventory from `mcp-logs/configuration.jsonl`, including detection-phase gateways when present. `servers` retains only `serverName`, recognized `transport`, explicit boolean `required`, and string `tools` filters. An empty inventory or tool filter is preserved; absent settings are not inferred. URLs, container images, commands, arguments, environment, headers, credentials, gateway settings, policies, and unknown fields are omitted before persistence. Registered secrets are additionally redacted by the session artifact writer. This records configuration, not successful connections or available tools. | | `firewall.http_access` | AWF network audit observations, including operational entries without a host. | -| `firewall.token_usage`, `firewall.model_routing`, `firewall.steering`, `firewall.event` | API proxy accounting, essential AWF model-routing selection/request records, token/time steering, tracker and other firewall messages. | +| `firewall.token_usage`, `firewall.model_routing`, `firewall.upstream_error`, `firewall.steering`, `firewall.event` | API proxy accounting, essential AWF model-routing selection/request records, identifier-only upstream error responses (T-UAS-082), token/time steering, tracker and other firewall messages. | +| `model.config`, `model.baseline_estimate` | Runner-written configured routing/model policy, budget, and baseline model (T-UAS-080), and the collector's counterfactual baseline repricing for routed runs (T-UAS-081). | | `safe_output.request`, `safe_output.result`, `safe_output.error` | Requested operation identities, executed item identities, and available errors. Requests are not execution results. | | `experiment.state`, `experiment.assignment` | Downloaded state and assignment observations, including historical state retained in the supplied snapshot. | | `grader.manifest`, `grader.result` | Essential deterministic grader definitions/results, without scripts; grading does not invent event time. | @@ -950,6 +961,84 @@ catalogue), `exact` (an exact id passed through unchanged), or `failed`; and `catalog_unavailable` and `resolved_model` is `null`. Unknown source fields are excluded; an absent record does not imply that a model was or was not resolved. +#### Routing analytics + +**T-UAS-080 โ€” Configured model policy.** The runner (`generate_aw_info`) writes +the compiler-wired `GH_AW_INFO_MODEL_CONFIG` and evaluated `GH_AW_INFO_MAX_AI_CREDITS` +to `aw_info.json.model_config` before the engine starts, so the record survives +routing selection, sub-agent resolution, and startup failures. After the agent +exits, the agent-phase token-usage step adds `baseline_model` from runner-written +evidence. The collector projects `runtime/aw_info.json.model_config` (or the +selected `aw_info.json` copy) as exactly one `model.config` event per run, with +`workflow` provenance and the aw_info source's phase and path. Sessions without +`model_config` contain no `model.config` event; an invalid record produces an +`invalid_model_config` collection warning rather than a partial event. + +| Field | Writer and provenance | Meaning | +| --- | --- | --- | +| `routing.enabled` | Compiler โ†’ runner | Whether `engine.model-routing` is configured. `false` is an explicit unrouted run. | +| `routing.goal`, `routing.mode` | Compiler โ†’ runner | Configured routing objective and mode. Never the router's per-run classification (`workflow.info.modelRouting.mode`). | +| `routing.allowedModels` | Compiler โ†’ runner | Configured routing candidates without the `github-copilot/` prefix; absent when unset or expression-valued. | +| `models.allowed`, `models.blocked` | Compiler โ†’ runner | Configured model allow/block policy sent to AWF, kept separate from the runtime inventory and routing candidate pool. Empty lists mean no restriction; the object is absent without the firewall or when a rule is expression-valued. | +| `maxAiCredits` | Runner | Effective per-run budget: the evaluated compiled literal or repository-default expression (`vars.GH_AW_DEFAULT_MAX_AI_CREDITS`, falling back to `1000`), or the admitted allowance. | +| `maxAiCreditsSource` | Compiler โ†’ runner; collector | `frontmatter` (explicit `max-ai-credits`), `default` (the repository-default expression), or `admission` when an admitted `guardrail.admission` allowance replaced the configured budget. Recorded from configuration provenance, never inferred from the value. | +| `baselineModel` | Runner (agent phase) | Concrete main model the run would use without routing, after alias resolution: the recorded `main` model resolution; for unrouted runs, `model_selection.resolved_model`; for routed Copilot runs, the configured model resolved against the run's alias map and AWF reflection. Never `auto` and never the routed selection. | + +All values are identifier-shaped metadata; prompts, transcripts, secrets, and +free-form diagnostics MUST NOT be recorded. Every field other than +`routing.enabled` is optional: an absent field is unknown, never `false`, an empty +policy, or zero, while an explicitly recorded `false`, empty list, or number is a +configured value. Older sessions without `model.config` have unknown policy; their +absence MUST NOT be read as routing being disabled. + +**T-UAS-081 โ€” Baseline estimate.** For runs whose `model.config` records +`routing.enabled: true`, the collector emits one `model.baseline_estimate` event +with `collector` provenance, phase `conclusion`. Explicitly unrouted runs and runs +without `model.config` have no estimate; readers MUST treat a missing estimate as +unknown, not zero. The estimate reprices each agent-phase main-agent proxy request +(`firewall.token_usage`) at `baselineModel` with `computeInferenceAIC`, using the +request's recorded input, output, cache-read, cache-write, and reasoning tokens and +its `input_tokens_include_cache` semantics (provider default when absent). Each +`request_id` is counted once. Native session accounting copies and detection- or +evals-phase requests are never included. + +Attribution uses only proxy-written and runner-written evidence: requests with +`purpose: routing_classification` are the classifier and are excluded; requests +AWF recorded as `routed: deviated` whose requested model matches a runner-declared +`aw_info.json.sub_agent_models` entry are sub-agent requests and are excluded; +requests AWF recorded as `routed: as_selected` that do not match a declared +sub-agent are main requests. Any other request โ€” no request record, conflicting +records, a missing request ID, or an `as_selected` request matching a declared +sub-agent โ€” is counted in `unattributedRequests`. `model_routing.outcome`, +agent-authored reports, differing models or endpoints, and `xInitiator` alone are +never attribution evidence. An undeclared sub-agent that inherits the selected +model is indistinguishable from the main agent in this evidence. + +| Field | Meaning | +| --- | --- | +| `estimated` | Always `true`: a counterfactual estimate, not observed spend. | +| `baselineModel` | The `model.config.baselineModel` used for pricing; absent when unknown. | +| `aic` | Sum over priced main requests; absent when no request could be priced. | +| `mainRequests` | Main-agent requests attributed by the rules above. | +| `pricedRequests`, `unpricedRequests` | Main requests with and without baseline pricing and complete token counts. Unknown pricing is unpriced, never zero cost. | +| `unattributedRequests` | Agent-phase requests that could not be attributed. | +| `complete` | `true` only when `baselineModel` is known, at least one main request was observed, and no request is unpriced or unattributed. A priced subtotal with unpriced or unattributed requests is incomplete. | + +#### Upstream errors + +**T-UAS-082 โ€” Identifier-only proxy errors.** The collector maps AWF +`upstream-errors.jsonl` records (`event: UPSTREAM_ERROR_RESPONSE`, written by the +proxy) to `firewall.upstream_error`, retaining only `requestId`, `provider`, +`model`, `httpStatus` (from `status`), and the identifier-only `errorCode`, +`errorType`, and `errorParam` that AWF extracted from the provider's error +envelope. `firewall.model_routing` request records likewise retain `errorCode`, +`errorType`, and `errorSource` (`upstream` or `awf`) from `error_code`, +`error_type`, and `error_source`. Identifiers MUST match +`^[A-Za-z0-9_.:-]{1,64}$`; other values are dropped, never truncated or recovered +by parsing error text. `response_body`, response headers, endpoints, messages, +and other payload fields MUST NOT be copied. Absent identifiers remain absent: +a record without `error_code` has an unknown code, not an empty one. + #### Model inventory **T-UAS-075 โ€” Model inventory endpoint state.** A `model.inventory` payload has @@ -1775,6 +1864,9 @@ Recommended execution is fixture parsing, canonical structural assertions, accou | T-UAS-074 | `agent/model-resolution.json` with resolved, exact, and failed records for main and sub-agent roles; empty, non-array, malformed, and contract-violating records | One `model.resolution` event per record in array order with `model_resolution` provenance and only the contract fields; invalid sources emit collection warnings and no events. | | T-UAS-075 | Recorded AWF reflection from run 38995410124 with four unconfigured null endpoints; pending-fetch, legacy, and malformed-ID or capability-metadata variants | One inventory event per valid source with endpoint order, `configured`, model IDs, routing endpoints, reasoning efforts, and known context windows; null lists absent rather than empty; malformed sources warn and publish no inventory; projection is idempotent. | | T-UAS-076โ€“T-UAS-079 | Conversation/tool events, nested agent payloads, finite and nonfinite scalars, exact 128-record/16 KiB boundaries, Unicode and JSON escaping, giant lines with later accounting, scan-limit fragments, append races, malformed files, and initial/retry artifact IDs | Only bounded allowlisted metadata survives; explicit loss statistics; unchanged full artifact; deterministic output; exact UTF-8 size caps; bounded framing without whole-file reads; invalid sources fail explicitly; full-session retrieval uses verified artifact identity. | +| T-UAS-080 | Real compiled inputs and agent artifacts of routed SDK, unrouted CLI, and failed routed SDK runs; older sessions without the new metadata | One `model.config` per run with configured (not selected) routing, policy, budget/source, and resolved baseline; `workflow.info` harness, executing reference, and server; older sessions keep the fields absent. | +| T-UAS-081 | Routed run with main, sub-agent, classifier, and detection requests; replicated proxy copies; unknown pricing, malformed tokens, missing request records, unrouted runs | Only main requests repriced once with `computeInferenceAIC`; unpriced and unattributed coverage explicit; never a complete zero; unrouted runs omit the estimate. | +| T-UAS-082 | AWF upstream-error and failed request records from gh-aw-firewall#10211 writers with and without code/type/param/source | Supplied identifiers, status, provider, model, and request ID retained; bodies, headers, and messages excluded; invalid identifiers dropped. | ### 9.3 Engine and integration fixture matrix diff --git a/pkg/workflow/aw_info_model_config.go b/pkg/workflow/aw_info_model_config.go new file mode 100644 index 00000000000..8fc9793879c --- /dev/null +++ b/pkg/workflow/aw_info_model_config.go @@ -0,0 +1,92 @@ +package workflow + +import ( + "encoding/json" + "slices" + "strconv" + "strings" +) + +// awInfoModelRouting is the configured routing policy recorded in aw_info.model_config. +// It retains the compiled objective, never the router's per-run selection. +type awInfoModelRouting struct { + Enabled bool `json:"enabled"` + Goal string `json:"goal,omitempty"` + Mode string `json:"mode,omitempty"` + AllowedModels []string `json:"allowed_models,omitempty"` +} + +type awInfoModelPolicy struct { + Allowed []string `json:"allowed"` + Blocked []string `json:"blocked"` +} + +// awInfoModelConfig is the compiled model configuration published by generate_aw_info. +// The runner later adds the resolved baseline model; the collector projects it as model.config. +type awInfoModelConfig struct { + Routing awInfoModelRouting `json:"routing"` + Models *awInfoModelPolicy `json:"models,omitempty"` + MaxAICreditsSource string `json:"max_ai_credits_source,omitempty"` +} + +// copilotEngineHarness returns the compiled Copilot harness identifier, or "" for other engines. +func copilotEngineHarness(engineID string, data *WorkflowData) string { + if engineID != "copilot" { + return "" + } + if isCopilotSDKMode(data) { + return "copilot-sdk" + } + return "copilot-cli" +} + +// buildAwInfoModelConfig returns the JSON model configuration and the budget value +// (a literal or a GitHub Actions expression) for the aw_info step. +func buildAwInfoModelConfig(data *WorkflowData) (string, string) { + config := awInfoModelConfig{} + if isModelRoutingEnabled(data) { + routing := data.EngineConfig.ModelRouting + config.Routing = awInfoModelRouting{Enabled: true, Goal: routing.Goal, Mode: routing.Mode} + if models, err := resolveModelRoutingAllowedModels(routing); err == nil { + allowed := make([]string, 0, len(models)) + for _, model := range models { + // Expression candidates resolve at runtime; omit the list rather than record a partial one. + if containsExpression(model) { + allowed = nil + break + } + allowed = append(allowed, strings.TrimPrefix(model, "github-copilot/")) + } + if len(allowed) > 0 { + config.Routing.AllowedModels = allowed + } + } + } + budget := "" + if isFirewallEnabled(data) { + allowed, blocked := resolveModelPolicyForAWFConfig(data) + // Expression rules resolve at runtime; omit the policy rather than record a partial one. + if !slices.ContainsFunc(allowed, containsExpression) && !slices.ContainsFunc(blocked, containsExpression) { + config.Models = &awInfoModelPolicy{Allowed: append([]string{}, allowed...), Blocked: append([]string{}, blocked...)} + } + switch { + case data.EngineConfig != nil && data.EngineConfig.MaxAICredits > 0: + budget = strconv.FormatInt(data.EngineConfig.MaxAICredits, 10) + config.MaxAICreditsSource = "frontmatter" + case data.EngineConfig == nil || data.EngineConfig.MaxAICredits == 0: + env := map[string]string{} + applyDefaultMaxAICreditsEnvToMap(env, data) + budget = env[awfMaxAICreditsVarName] + config.MaxAICreditsSource = "default" + if raw, ok := data.RawFrontmatter["max-ai-credits"].(string); ok && data.DryRun && raw == budget { + config.MaxAICreditsSource = "frontmatter" + } + } + } + encoded, err := json.Marshal(config) + if err != nil { + compilerYamlStepLifecycleLog.Printf("Failed to marshal aw_info model config: %v", err) + return "", "" + } + return string(encoded), budget +} diff --git a/pkg/workflow/aw_info_model_config_test.go b/pkg/workflow/aw_info_model_config_test.go new file mode 100644 index 00000000000..1078c43de49 --- /dev/null +++ b/pkg/workflow/aw_info_model_config_test.go @@ -0,0 +1,105 @@ +//go:build !integration + +package workflow + +import ( + "encoding/json" + "os" + "path/filepath" + "testing" + + "github.com/github/gh-aw/pkg/testutil" + "github.com/goccy/go-yaml" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// awInfoStepEnv returns the env of the activation job's generate_aw_info step. +func awInfoStepEnv(t *testing.T, compiled string) map[string]string { + t.Helper() + var workflow struct { + Jobs map[string]struct { + Steps []struct { + ID string `yaml:"id"` + Env map[string]string `yaml:"env"` + } `yaml:"steps"` + } `yaml:"jobs"` + } + require.NoError(t, yaml.Unmarshal([]byte(compiled), &workflow)) + for _, step := range workflow.Jobs["activation"].Steps { + if step.ID == "generate_aw_info" { + return step.Env + } + } + t.Fatal("generate_aw_info step not found") + return nil +} + +func TestAwInfoRoutingAnalyticsMetadata(t *testing.T) { + workflowsDir := filepath.Join(testutil.TempDir(t, "aw-info-model-config"), ".github", "workflows") + require.NoError(t, os.MkdirAll(workflowsDir, 0755)) + + tests := []struct { + name string + frontmatter string + harness string + config map[string]any + budget string + }{ + { + name: "routed-sdk", + frontmatter: `engine: + id: copilot + copilot-sdk: true + model-routing: + goal: cost + mode: economy + allowed-models: [gpt-5.6-luna] +`, + harness: "copilot-sdk", + config: map[string]any{ + "routing": map[string]any{"enabled": true, "goal": "cost", "mode": "economy", "allowed_models": []any{"gpt-5.6-luna"}}, + "models": map[string]any{"allowed": []any{}, "blocked": []any{}}, + "max_ai_credits_source": "default", + }, + budget: "${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }}", + }, + { + name: "unrouted-cli-frontmatter-budget", + frontmatter: "engine: copilot\nmax-ai-credits: 250\n", + harness: "copilot-cli", + config: map[string]any{ + "routing": map[string]any{"enabled": false}, + "models": map[string]any{"allowed": []any{}, "blocked": []any{}}, + "max_ai_credits_source": "frontmatter", + }, + budget: "250", + }, + { + name: "non-copilot-engine", + frontmatter: "engine: claude\n", + config: map[string]any{ + "routing": map[string]any{"enabled": false}, + "models": map[string]any{"allowed": []any{}, "blocked": []any{}}, + "max_ai_credits_source": "default", + }, + budget: "${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }}", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + compiled := compileAndReadLock(t, filepath.Join(workflowsDir, tt.name+".md"), "---\non: workflow_dispatch\npermissions:\n contents: read\n"+tt.frontmatter+"---\n# Task\nDo it.\n") + env := awInfoStepEnv(t, compiled) + harness, ok := env["GH_AW_INFO_ENGINE_HARNESS"] + if tt.harness == "" { + assert.False(t, ok, "only Copilot runs record a harness") + } else { + assert.Equal(t, tt.harness, harness) + } + var config map[string]any + require.NoError(t, json.Unmarshal([]byte(env["GH_AW_INFO_MODEL_CONFIG"]), &config)) + assert.Equal(t, tt.config, config) + assert.Equal(t, tt.budget, env["GH_AW_INFO_MAX_AI_CREDITS"]) + }) + } +} diff --git a/pkg/workflow/compiler_yaml_step_lifecycle.go b/pkg/workflow/compiler_yaml_step_lifecycle.go index 0fdc1c87b43..454af26f96e 100644 --- a/pkg/workflow/compiler_yaml_step_lifecycle.go +++ b/pkg/workflow/compiler_yaml_step_lifecycle.go @@ -12,6 +12,11 @@ import ( var compilerYamlStepLifecycleLog = logger.New("workflow:compiler_yaml:steps") +func writeFormattedYAML(yaml *strings.Builder, format string, args ...any) { + formatted := fmt.Sprintf(format, args...) + yaml.WriteString(formatted) +} + func (c *Compiler) generatePreSteps(yaml *strings.Builder, data *WorkflowData) { writeStepsSection(yaml, data.PreSteps) } @@ -150,68 +155,81 @@ func (c *Compiler) generateCreateAwInfo(yaml *strings.Builder, data *WorkflowDat yaml.WriteString(" - name: Generate agentic run info\n") yaml.WriteString(" id: generate_aw_info\n") yaml.WriteString(" env:\n") - fmt.Fprintf(yaml, " GH_AW_INFO_ENGINE_ID: \"%s\"\n", engineID) - fmt.Fprintf(yaml, " GH_AW_INFO_ENGINE_NAME: \"%s\"\n", engine.GetDisplayName()) + writeFormattedYAML(yaml, " GH_AW_INFO_ENGINE_ID: \"%s\"\n", engineID) + writeFormattedYAML(yaml, " GH_AW_INFO_ENGINE_NAME: \"%s\"\n", engine.GetDisplayName()) if modelConfigured { // data.Model may reference an experiment variant as needs.activation.outputs. // (rewritten from engine.model: ${{ experiments. }} for jobs downstream of // activation). This step runs inside the activation job itself, so it must read the // pick-experiment step's output directly rather than via the needs context. infoModel := RewriteActivationOutputsToLocalStepOutputs(data.Model, data.Experiments) - fmt.Fprintf(yaml, " GH_AW_INFO_MODEL: \"%s\"\n", infoModel) + writeFormattedYAML(yaml, " GH_AW_INFO_MODEL: \"%s\"\n", infoModel) } else { // Use the engine's default model as fallback when neither explicit model nor // model variable is configured, so the run details show "agent" rather than "(none)". defaultModel := getDefaultAgentModel(engineID) defaultModelOverrideVar := getDefaultModelOverrideVar(engineID) if defaultModel != "" && defaultModelOverrideVar != "" { - fmt.Fprintf(yaml, " GH_AW_INFO_MODEL: %s\n", compilerenv.BuildModelOverrideExpression(modelEnvVar, defaultModelOverrideVar, defaultModel)) + writeFormattedYAML(yaml, " GH_AW_INFO_MODEL: %s\n", compilerenv.BuildModelOverrideExpression(modelEnvVar, defaultModelOverrideVar, defaultModel)) } else if defaultModel != "" { - fmt.Fprintf(yaml, " GH_AW_INFO_MODEL: ${{ vars.%s || '%s' }}\n", modelEnvVar, defaultModel) + writeFormattedYAML(yaml, " GH_AW_INFO_MODEL: ${{ vars.%s || '%s' }}\n", modelEnvVar, defaultModel) } else if defaultModelOverrideVar != "" { - fmt.Fprintf(yaml, " GH_AW_INFO_MODEL: %s\n", compilerenv.BuildModelOverrideExpressionEmptyFallback(modelEnvVar, defaultModelOverrideVar)) + writeFormattedYAML(yaml, " GH_AW_INFO_MODEL: %s\n", compilerenv.BuildModelOverrideExpressionEmptyFallback(modelEnvVar, defaultModelOverrideVar)) } else { - fmt.Fprintf(yaml, " GH_AW_INFO_MODEL: ${{ vars.%s || '' }}\n", modelEnvVar) + writeFormattedYAML(yaml, " GH_AW_INFO_MODEL: ${{ vars.%s || '' }}\n", modelEnvVar) } } - fmt.Fprintf(yaml, " GH_AW_INFO_VERSION: \"%s\"\n", version) - fmt.Fprintf(yaml, " GH_AW_INFO_AGENT_VERSION: \"%s\"\n", agentVersion) + writeFormattedYAML(yaml, " GH_AW_INFO_VERSION: \"%s\"\n", version) + writeFormattedYAML(yaml, " GH_AW_INFO_AGENT_VERSION: \"%s\"\n", agentVersion) // CLI version only for released builds if IsReleasedVersion(c.version) { - fmt.Fprintf(yaml, " GH_AW_INFO_CLI_VERSION: \"%s\"\n", c.version) + writeFormattedYAML(yaml, " GH_AW_INFO_CLI_VERSION: \"%s\"\n", c.version) } - fmt.Fprintf(yaml, " GH_AW_INFO_WORKFLOW_NAME: \"%s\"\n", data.Name) + writeFormattedYAML(yaml, " GH_AW_INFO_WORKFLOW_NAME: \"%s\"\n", data.Name) // Unlike github.workflow_ref, job.workflow_ref identifies the executing reusable workflow. yaml.WriteString(" GH_AW_INFO_WORKFLOW_ID: ${{ job.workflow_ref }}\n") - fmt.Fprintf(yaml, " GH_AW_INFO_EXPERIMENTAL: \"%t\"\n", engine.IsExperimental()) - fmt.Fprintf(yaml, " GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: \"%t\"\n", engine.GetCapabilities().ToolsAllowlist) - fmt.Fprintf(yaml, " GH_AW_INFO_STAGED: \"%s\"\n", stagedValue) + writeFormattedYAML(yaml, " GH_AW_INFO_EXPERIMENTAL: \"%t\"\n", engine.IsExperimental()) + writeFormattedYAML(yaml, " GH_AW_INFO_SUPPORTS_TOOLS_ALLOWLIST: \"%t\"\n", engine.GetCapabilities().ToolsAllowlist) + writeFormattedYAML(yaml, " GH_AW_INFO_STAGED: \"%s\"\n", stagedValue) if c.dryRun { yaml.WriteString(" GH_AW_INFO_DRY_RUN: \"true\"\n") } - fmt.Fprintf(yaml, " GH_AW_INFO_ALLOWED_DOMAINS: '%s'\n", domainsJSON) - fmt.Fprintf(yaml, " GH_AW_INFO_FIREWALL_ENABLED: \"%t\"\n", firewallEnabled) - fmt.Fprintf(yaml, " GH_AW_INFO_AWF_VERSION: \"%s\"\n", firewallVersion) - fmt.Fprintf(yaml, " GH_AW_INFO_AWMG_VERSION: \"%s\"\n", mcpGatewayVersion) - fmt.Fprintf(yaml, " GH_AW_INFO_FIREWALL_TYPE: \"%s\"\n", firewallType) - fmt.Fprintf(yaml, " GH_AW_INFO_AGENT_RUNTIME: \"%s\"\n", agentRuntime) + writeFormattedYAML(yaml, " GH_AW_INFO_ALLOWED_DOMAINS: '%s'\n", domainsJSON) + writeFormattedYAML(yaml, " GH_AW_INFO_FIREWALL_ENABLED: \"%t\"\n", firewallEnabled) + writeFormattedYAML(yaml, " GH_AW_INFO_AWF_VERSION: \"%s\"\n", firewallVersion) + writeFormattedYAML(yaml, " GH_AW_INFO_AWMG_VERSION: \"%s\"\n", mcpGatewayVersion) + writeFormattedYAML(yaml, " GH_AW_INFO_FIREWALL_TYPE: \"%s\"\n", firewallType) + writeFormattedYAML(yaml, " GH_AW_INFO_AGENT_RUNTIME: \"%s\"\n", agentRuntime) + if harness := copilotEngineHarness(engineID, data); harness != "" { + writeFormattedYAML(yaml, " GH_AW_INFO_ENGINE_HARNESS: \"%s\"\n", harness) + } + if modelConfigJSON, budget := buildAwInfoModelConfig(data); modelConfigJSON != "" { + writeFormattedYAML(yaml, " GH_AW_INFO_MODEL_CONFIG: '%s'\n", strings.ReplaceAll(modelConfigJSON, "'", "''")) + if budget != "" { + if containsExpression(budget) { + writeFormattedYAML(yaml, " GH_AW_INFO_MAX_AI_CREDITS: %s\n", budget) + } else { + writeFormattedYAML(yaml, " GH_AW_INFO_MAX_AI_CREDITS: \"%s\"\n", budget) + } + } + } // Only emit the cache-memory flag when at least one cache is configured. if data.CacheMemoryConfig != nil && len(data.CacheMemoryConfig.Caches) > 0 { yaml.WriteString(" GH_AW_INFO_CACHE_MEMORY: \"true\"\n") } if data.Source != "" { - fmt.Fprintf(yaml, " GH_AW_INFO_FRONTMATTER_SOURCE: %q\n", data.Source) + writeFormattedYAML(yaml, " GH_AW_INFO_FRONTMATTER_SOURCE: %q\n", data.Source) // Body-modified defaults to false at compile time; update flows may override this // signal when source/body drift is detected before execution. yaml.WriteString(" GH_AW_INFO_BODY_MODIFIED: \"false\"\n") } if data.FrontmatterEmoji != "" { - fmt.Fprintf(yaml, " GH_AW_INFO_FRONTMATTER_EMOJI: %q\n", data.FrontmatterEmoji) + writeFormattedYAML(yaml, " GH_AW_INFO_FRONTMATTER_EMOJI: %q\n", data.FrontmatterEmoji) } // Always include strict mode flag for lockdown validation. // validateLockdownRequirements uses this to enforce strict: true for public repositories. // Use effectiveStrictMode to infer strictness from the source (frontmatter), not just the CLI flag. - fmt.Fprintf(yaml, " GH_AW_COMPILED_STRICT: \"%t\"\n", c.effectiveStrictMode(data.RawFrontmatter)) + writeFormattedYAML(yaml, " GH_AW_COMPILED_STRICT: \"%t\"\n", c.effectiveStrictMode(data.RawFrontmatter)) // When a workflow_call trigger is present, pass the target_repo resolved by the // resolve-host-repo step so it can be stored in aw_info.json for observability. if hasWorkflowCallTrigger(data.On) && !data.InlinedImports { @@ -227,7 +245,7 @@ func (c *Compiler) generateCreateAwInfo(yaml *strings.Builder, data *WorkflowDat yaml.WriteString(" GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }}\n") yaml.WriteString(" GH_AW_GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_MCP_SERVER_TOKEN }}\n") if customToken := getGitHubToken(toolConfig); customToken != "" { - fmt.Fprintf(yaml, " CUSTOM_GITHUB_TOKEN: %s\n", customToken) + writeFormattedYAML(yaml, " CUSTOM_GITHUB_TOKEN: %s\n", customToken) } } } @@ -237,26 +255,26 @@ func (c *Compiler) generateCreateAwInfo(yaml *strings.Builder, data *WorkflowDat if modelCostsJSON, err := json.Marshal(data.ModelCosts); err == nil { // Escape single quotes for YAML single-quoted scalar safety escapedModelCostsJSON := strings.ReplaceAll(string(modelCostsJSON), "'", "''") - fmt.Fprintf(yaml, " GH_AW_INFO_MODEL_COSTS: '%s'\n", escapedModelCostsJSON) + writeFormattedYAML(yaml, " GH_AW_INFO_MODEL_COSTS: '%s'\n", escapedModelCostsJSON) } } if runtimeFeatures := runtimeVisibleFeatures(data.Features); len(runtimeFeatures) > 0 { if featuresJSON, err := json.Marshal(runtimeFeatures); err == nil { // Escape single quotes for YAML single-quoted scalar safety escapedFeaturesJSON := strings.ReplaceAll(string(featuresJSON), "'", "''") - fmt.Fprintf(yaml, " GH_AW_INFO_FEATURES: '%s'\n", escapedFeaturesJSON) + writeFormattedYAML(yaml, " GH_AW_INFO_FEATURES: '%s'\n", escapedFeaturesJSON) } } if len(data.Skills) > 0 { if skillsJSON, err := json.Marshal(data.Skills); err == nil { escapedSkillsJSON := strings.ReplaceAll(string(skillsJSON), "'", "''") - fmt.Fprintf(yaml, " GH_AW_INFO_SKILLS: '%s'\n", escapedSkillsJSON) + writeFormattedYAML(yaml, " GH_AW_INFO_SKILLS: '%s'\n", escapedSkillsJSON) } else { compilerYamlStepLifecycleLog.Printf("Failed to marshal skills for GH_AW_INFO_SKILLS, engine will not receive skill list: %v", err) } } writeSubagentModelDeclarations(yaml, data, engineID) - fmt.Fprintf(yaml, " uses: %s\n", getCachedActionPin("actions/github-script", data)) + writeFormattedYAML(yaml, " uses: %s\n", getCachedActionPin("actions/github-script", data)) yaml.WriteString(" with:\n") yaml.WriteString(" script: |\n") yaml.WriteString(" const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');\n") @@ -355,8 +373,8 @@ func (c *Compiler) generateOutputCollectionStep(yaml *strings.Builder, data *Wor yaml.WriteString(" env:\n") yaml.WriteString(" GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }}\n") yaml.WriteString(" run: |\n") - fmt.Fprintf(yaml, " mkdir -p /tmp/gh-aw\n") - fmt.Fprintf(yaml, " cp \"$GH_AW_SAFE_OUTPUTS\" /tmp/gh-aw/%s 2>/dev/null || true\n", constants.SafeOutputsFilename) + writeFormattedYAML(yaml, " mkdir -p /tmp/gh-aw\n") + writeFormattedYAML(yaml, " cp \"$GH_AW_SAFE_OUTPUTS\" /tmp/gh-aw/%s 2>/dev/null || true\n", constants.SafeOutputsFilename) if isWorkQueueEnabled(data) { yaml.WriteString(" - name: Copy work queue claim finish intent\n") yaml.WriteString(" if: always()\n") @@ -364,7 +382,7 @@ func (c *Compiler) generateOutputCollectionStep(yaml *strings.Builder, data *Wor yaml.WriteString(" GH_AW_SAFE_OUTPUTS: ${{ steps.set-runtime-paths.outputs.GH_AW_SAFE_OUTPUTS }}\n") yaml.WriteString(" run: |\n") yaml.WriteString(" finish_intent_dir=\"$(dirname \"$GH_AW_SAFE_OUTPUTS\")/work-queue\"\n") - fmt.Fprintf(yaml, " if cp \"$finish_intent_dir/work-queue.finish.jsonl\" %s 2>/dev/null; then\n", constants.WorkQueueFinishIntentPath) + writeFormattedYAML(yaml, " if cp \"$finish_intent_dir/work-queue.finish.jsonl\" %s 2>/dev/null; then\n", constants.WorkQueueFinishIntentPath) yaml.WriteString(" echo 'Work queue: copied finish intent into agent artifact'\n") yaml.WriteString(" else\n") yaml.WriteString(" echo 'Work queue: no finish intent to copy (tool not called or file unavailable)'\n") @@ -374,7 +392,7 @@ func (c *Compiler) generateOutputCollectionStep(yaml *strings.Builder, data *Wor yaml.WriteString(" - name: Ingest agent output\n") yaml.WriteString(" id: collect_output\n") yaml.WriteString(" if: always()\n") - fmt.Fprintf(yaml, " uses: %s\n", getCachedActionPin("actions/github-script", data)) + writeFormattedYAML(yaml, " uses: %s\n", getCachedActionPin("actions/github-script", data)) // Add environment variables for JSONL validation yaml.WriteString(" env:\n") @@ -401,16 +419,16 @@ func (c *Compiler) generateOutputCollectionStep(yaml *strings.Builder, data *Wor domainsStr = computed } if domainsStr != "" { - fmt.Fprintf(yaml, " GH_AW_ALLOWED_DOMAINS: %q\n", domainsStr) + writeFormattedYAML(yaml, " GH_AW_ALLOWED_DOMAINS: %q\n", domainsStr) } if data.SafeOutputs != nil && data.SafeOutputs.URLs != "" { - fmt.Fprintf(yaml, " GH_AW_SAFE_OUTPUTS_URLS: %q\n", data.SafeOutputs.URLs) + writeFormattedYAML(yaml, " GH_AW_SAFE_OUTPUTS_URLS: %q\n", data.SafeOutputs.URLs) } // Add allowed GitHub references configuration for reference escaping if data.SafeOutputs != nil && data.SafeOutputs.AllowGitHubReferences != nil { refsStr := strings.Join(data.SafeOutputs.AllowGitHubReferences, ",") - fmt.Fprintf(yaml, " GH_AW_ALLOWED_GITHUB_REFS: %q\n", refsStr) + writeFormattedYAML(yaml, " GH_AW_ALLOWED_GITHUB_REFS: %q\n", refsStr) } // Add GitHub server URL and API URL for dynamic domain extraction @@ -421,15 +439,15 @@ func (c *Compiler) generateOutputCollectionStep(yaml *strings.Builder, data *Wor // Add command names for command trigger prevention in safe outputs if len(data.Command) > 0 { if commandsJSON, err := json.Marshal(data.Command); err == nil { - fmt.Fprintf(yaml, " GH_AW_COMMANDS: %q\n", string(commandsJSON)) + writeFormattedYAML(yaml, " GH_AW_COMMANDS: %q\n", string(commandsJSON)) } if data.CommandPlaceholder != "" { - fmt.Fprintf(yaml, " GH_AW_COMMAND_PLACEHOLDER: %q\n", data.CommandPlaceholder) + writeFormattedYAML(yaml, " GH_AW_COMMAND_PLACEHOLDER: %q\n", data.CommandPlaceholder) } } if len(data.LabelCommand) > 0 { if labelCommandsJSON, err := json.Marshal(data.LabelCommand); err == nil { - fmt.Fprintf(yaml, " GH_AW_LABEL_COMMANDS: %q\n", string(labelCommandsJSON)) + writeFormattedYAML(yaml, " GH_AW_LABEL_COMMANDS: %q\n", string(labelCommandsJSON)) } } diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/claude.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/claude.golden index 5ab81b2b21a..9f9c4bb077c 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/claude.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/claude.golden @@ -108,6 +108,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden index 659be783236..5393eceb746 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/codex.golden @@ -108,6 +108,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/copilot.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/copilot.golden index 6bb993969af..b0c86679462 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/copilot.golden @@ -108,6 +108,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/gemini.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/gemini.golden index 93ea9f2931a..30ae45acce0 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/gemini.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/gemini.golden @@ -108,6 +108,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden b/pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden index c96bfe78e40..7163b5231c2 100644 --- a/pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden +++ b/pkg/workflow/testdata/TestWasmGolden_AllEngines/pi.golden @@ -108,6 +108,8 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden index 125344d001c..530815eca39 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden @@ -100,6 +100,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/playwright-cli-mode.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/playwright-cli-mode.golden index 930549d0aef..b39b7219ee0 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/playwright-cli-mode.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/playwright-cli-mode.golden @@ -100,6 +100,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden index a40c86f0790..8c40c57bb56 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/smoke-copilot.golden @@ -121,6 +121,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_INFO_CACHE_MEMORY: "true" GH_AW_COMPILED_STRICT: "true" GH_AW_INFO_MODEL_COSTS: '{"providers":{"anthropic":{"models":{"my-custom-claude":{"cost":{"cache_read":"3e-07","cache_write":"3.75e-06","input":"3e-06","output":"1.5e-05"}}}}}}' diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden index 419bd12acbd..5d33be1506e 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden @@ -100,6 +100,9 @@ jobs: GH_AW_INFO_AWMG_VERSION: "" GH_AW_INFO_FIREWALL_TYPE: "squid" GH_AW_INFO_AGENT_RUNTIME: "" + GH_AW_INFO_ENGINE_HARNESS: "copilot-cli" + GH_AW_INFO_MODEL_CONFIG: '{"routing":{"enabled":false},"models":{"allowed":[],"blocked":[]},"max_ai_credits_source":"default"}' + GH_AW_INFO_MAX_AI_CREDITS: ${{ vars.GH_AW_DEFAULT_MAX_AI_CREDITS || '1000' }} GH_AW_COMPILED_STRICT: "true" uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: