diff --git a/.changeset/engine-model-to-top-level.md b/.changeset/engine-model-to-top-level.md new file mode 100644 index 00000000000..d8d1c32447c --- /dev/null +++ b/.changeset/engine-model-to-top-level.md @@ -0,0 +1,10 @@ +--- +"gh-aw": minor +--- + +Add top-level `model` field that replaces and deprecates `engine.model`. + +- New top-level `model` field for specifying the LLM model used by the agentic engine. Takes precedence over `engine.model` when both are set. +- Deprecation warning emitted at compile time when `engine.model` is used. +- `gh aw fix` codemod (`engine-model-to-top-level`) automatically migrates `engine.model` to top-level `model`. +- Updated main JSON schema: top-level `model` added, `engine.model` marked as deprecated. diff --git a/.github/workflows/ab-testing-advisor.lock.yml b/.github/workflows/ab-testing-advisor.lock.yml index a7d86a43e6e..4599296e456 100644 --- a/.github/workflows/ab-testing-advisor.lock.yml +++ b/.github/workflows/ab-testing-advisor.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"f5344357b459de346566d3be63bd12f1dbb93d6717510081a1115fc676203d71","body_hash":"b7cb8146ee513d0babf1ed2942b26c60d25fd145d22e8073c1ecbc5d2c1a62e2","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"6ddaf2f4fe86132b724dd2ffb1b9333e14347e84afc934890037ab61f0dd6061","body_hash":"b7cb8146ee513d0babf1ed2942b26c60d25fd145d22e8073c1ecbc5d2c1a62e2","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/ab-testing-advisor.md b/.github/workflows/ab-testing-advisor.md index ca20e86310d..780a8371345 100644 --- a/.github/workflows/ab-testing-advisor.md +++ b/.github/workflows/ab-testing-advisor.md @@ -32,10 +32,10 @@ safe-outputs: title-prefix: "[ab-advisor] " description: Daily A/B testing advisor that picks a random agentic workflow without an experiments section, devises an experiment campaign to improve it, and creates a GitHub issue with the implementation task emoji: ๐Ÿงช +model: copilot/gpt-5.4 engine: bare: true id: pi - model: copilot/gpt-5.4 strict: true timeout-minutes: 30 tools: diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml index a71c581195b..bc4417b8a76 100644 --- a/.github/workflows/agent-persona-explorer.lock.yml +++ b/.github/workflows/agent-persona-explorer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"a4d920f0c4fd428423b016bde55627cdf09b0569f166c7bdeb1c28796f1ff790","body_hash":"ba8f28145047b919e751f35cecb011044729c0b40a96145b782f6ab777995888","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","detection_agent_id":"copilot","engine_versions":{"copilot":"1.0.71","pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"91044f90e1438bfb47facfb2427999fa58d78b08aa6f2442b9a6bdb8f324d172","body_hash":"ba8f28145047b919e751f35cecb011044729c0b40a96145b782f6ab777995888","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","detection_agent_id":"copilot","engine_versions":{"copilot":"1.0.71","pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"docker/build-push-action","sha":"53b7df96c91f9c12dcc8a07bcb9ccacbed38856a","version":"v7.3.0"},{"repo":"docker/setup-buildx-action","sha":"bb05f3f5519dd87d3ba754cc423b652a5edd6d2c","version":"v4.2.0"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/agent-persona-explorer.md b/.github/workflows/agent-persona-explorer.md index 51fe35afb5f..4230b719633 100644 --- a/.github/workflows/agent-persona-explorer.md +++ b/.github/workflows/agent-persona-explorer.md @@ -4,9 +4,9 @@ emoji: "๐ŸŽญ" description: Explores agentic-workflows custom agent behavior by generating software personas and analyzing responses to common automation tasks on: daily max-daily-ai-credits: 10000 +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 permissions: contents: read actions: read @@ -325,4 +325,4 @@ Execute all phases systematically and maintain an objective, research-focused ap ```json {"noop": {"message": "No action needed: [brief explanation of what was analyzed and why]"}} -``` +``` \ No newline at end of file diff --git a/.github/workflows/auto-triage-issues.lock.yml b/.github/workflows/auto-triage-issues.lock.yml index 775d0d53ebe..586582ab0a6 100644 --- a/.github/workflows/auto-triage-issues.lock.yml +++ b/.github/workflows/auto-triage-issues.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"e26fe2143992534c0e4f595fe316a7cbb797166bb5a986576f40c4a84d4fd6bc","body_hash":"4eeb5a40aec90878678132ad978afda0d44c1fe67be93ffb4a67e3b6c117aef4","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"8e0e6a1c9fb128aefa2bbf3a464619f43d0564d3b353b8fc98aaaa33a234cbff","body_hash":"4eeb5a40aec90878678132ad978afda0d44c1fe67be93ffb4a67e3b6c117aef4","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/auto-triage-issues.md b/.github/workflows/auto-triage-issues.md index 21f53b421f3..b43eb5090e9 100644 --- a/.github/workflows/auto-triage-issues.md +++ b/.github/workflows/auto-triage-issues.md @@ -16,9 +16,9 @@ permissions: contents: read issues: read copilot-requests: write +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 strict: true network: allowed: diff --git a/.github/workflows/avenger.lock.yml b/.github/workflows/avenger.lock.yml index 3eedda43145..131292a461a 100644 --- a/.github/workflows/avenger.lock.yml +++ b/.github/workflows/avenger.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"6807590fb97b42c0858f3b0e068f5f2b823e6d3a5a873b1a1652f5658361eb44","body_hash":"e5fd04fe008ba327d939d9aee395ffb802836e30fd1f3772ca36984bdd1478f4","strict":true,"agent_id":"claude","agent_model":"claude-haiku-4.5","engine_versions":{"claude":"2.1.214"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"4e390949dda8a47d209c4c8a78bf644842eac8d5528d84b66864738153868e1c","body_hash":"e5fd04fe008ba327d939d9aee395ffb802836e30fd1f3772ca36984bdd1478f4","strict":true,"agent_id":"claude","agent_model":"claude-haiku-4.5","engine_versions":{"claude":"2.1.214"}} # gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/avenger.md b/.github/workflows/avenger.md index 643a65b13f7..5ba8299c486 100644 --- a/.github/workflows/avenger.md +++ b/.github/workflows/avenger.md @@ -15,9 +15,9 @@ permissions: pull-requests: read tracker-id: avenger-ci max-turns: 50 +model: claude-haiku-4.5 engine: id: claude - model: claude-haiku-4.5 network: allowed: - defaults @@ -245,4 +245,4 @@ Your pull request should: **Do NOT commit or include any files under `.github/workflows/`** โ€” that directory is protected and excluded by the safe-outputs configuration. -**Important**: If no action is needed (CI already passing, no fixable failures found, or no meaningful changes), you **MUST** call the `noop` safe-output tool with a brief explanation. +**Important**: If no action is needed (CI already passing, no fixable failures found, or no meaningful changes), you **MUST** call the `noop` safe-output tool with a brief explanation. \ No newline at end of file diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index 86ee69da3a7..653cfd80986 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"4732a8b491d4e363b01203f72ec164e23d84dad491bca5b3719effd51197967e","body_hash":"8f391f1c4b6e39cef511a04f28c6500e012e988f25bb4fcf9d967fd7186b6d3c","strict":true,"agent_id":"codex","agent_model":"gpt-5.4","engine_versions":{"codex":"0.144.5"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"3e8a50467b251c77d7dc89785601d15cb4529acc3479bab93b8ee6f767c0a238","body_hash":"8f391f1c4b6e39cef511a04f28c6500e012e988f25bb4fcf9d967fd7186b6d3c","strict":true,"agent_id":"codex","agent_model":"gpt-5.4","engine_versions":{"codex":"0.144.5"}} # gh-aw-manifest: {"version":1,"secrets":["CODEX_API_KEY","COPILOT_GITHUB_TOKEN","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","OPENAI_API_KEY"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}],"has_pull_request":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 # diff --git a/.github/workflows/changeset.md b/.github/workflows/changeset.md index f96f561ad84..752e47aae30 100644 --- a/.github/workflows/changeset.md +++ b/.github/workflows/changeset.md @@ -14,9 +14,9 @@ permissions: contents: read pull-requests: read issues: read +model: gpt-5.4 engine: id: codex - model: gpt-5.4 strict: true safe-outputs: push-to-pull-request-branch: @@ -174,4 +174,4 @@ Your task is to: - **Be Concise**: Keep descriptions brief but informative - **Follow Conventions**: Use the exact changeset format specified above - **Single Package Default**: If unsure about package structure, default to "gh-aw" -- **Smart Naming**: Use descriptive filenames that indicate the change (e.g., `patch-fix-rendering-bug.md`) +- **Smart Naming**: Use descriptive filenames that indicate the change (e.g., `patch-fix-rendering-bug.md`) \ No newline at end of file diff --git a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml index 5067738f363..f9353f00e6a 100644 --- a/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml +++ b/.github/workflows/chaos-pr-bundle-fuzzer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"3ac22783a256d67171bbd6df8d6b3a03ba12bd3cc86848638d57c485211bb491","body_hash":"25bc7a0df38f033065a2f8bd1ef8b90208374e29f88227774251db44083e34fb","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"1575e6a57f39b9dcc0d18cfe359c5c3aa14ef9457184a73e924a207bcea563b4","body_hash":"25bc7a0df38f033065a2f8bd1ef8b90208374e29f88227774251db44083e34fb","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/chaos-pr-bundle-fuzzer.md b/.github/workflows/chaos-pr-bundle-fuzzer.md index b8fe8b5a28e..f52c003fdd1 100644 --- a/.github/workflows/chaos-pr-bundle-fuzzer.md +++ b/.github/workflows/chaos-pr-bundle-fuzzer.md @@ -10,9 +10,9 @@ permissions: contents: read pull-requests: read issues: read +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 strict: true sandbox: agent: diff --git a/.github/workflows/commit-changes-analyzer.lock.yml b/.github/workflows/commit-changes-analyzer.lock.yml index 609282be94d..a1cc8f51d22 100644 --- a/.github/workflows/commit-changes-analyzer.lock.yml +++ b/.github/workflows/commit-changes-analyzer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"fc1b179bb5f73e645e93c7d41ac87c5dff2b93756a55fd3d69150f0c5ec160f0","body_hash":"576318509bc71495f54cb9e9120514a7d7da6754472e27cc9743acd7d72d7666","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"5ffb07f2578c88e14ec02b515e8e8725e5ff664be2a67e75c9e55d6f0a576ea0","body_hash":"576318509bc71495f54cb9e9120514a7d7da6754472e27cc9743acd7d72d7666","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/commit-changes-analyzer.md b/.github/workflows/commit-changes-analyzer.md index cbc3bc98867..8af61b0babf 100644 --- a/.github/workflows/commit-changes-analyzer.md +++ b/.github/workflows/commit-changes-analyzer.md @@ -16,9 +16,9 @@ permissions: issues: read pull-requests: read max-turns: 100 +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 sandbox: agent: sudo: false diff --git a/.github/workflows/constraint-solving-potd.lock.yml b/.github/workflows/constraint-solving-potd.lock.yml index 9f95ad93ab4..ae10d89082f 100644 --- a/.github/workflows/constraint-solving-potd.lock.yml +++ b/.github/workflows/constraint-solving-potd.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"cefd614ab00d8f69abbadd9624a8a29f326b7c1697e99be81a1b3d318fb978fc","body_hash":"759bfaa7cca6f865960fc3394de57cea58352257d1109e741bf2572b8f0add65","strict":true,"agent_id":"copilot","agent_model":"claude-haiku-4.5","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"d6c50261d90bf9ab7338cfadebcf48bc7b7cd1ad5478f28a2581deb4928a55ba","body_hash":"759bfaa7cca6f865960fc3394de57cea58352257d1109e741bf2572b8f0add65","strict":true,"agent_id":"copilot","agent_model":"claude-haiku-4.5","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/constraint-solving-potd.md b/.github/workflows/constraint-solving-potd.md index 917096d1335..71b42c5aafb 100644 --- a/.github/workflows/constraint-solving-potd.md +++ b/.github/workflows/constraint-solving-potd.md @@ -10,9 +10,9 @@ timeout-minutes: 30 permissions: models: read +model: claude-haiku-4.5 engine: id: copilot - model: claude-haiku-4.5 bare: true imports: @@ -149,4 +149,4 @@ When you have written the problem discussion, post it using `create-discussion`. If `create_discussion` fails or returns an error, call `noop` with a short explanation so the failure is recorded. -If today's category was recently covered and you cannot find a sufficiently different problem, call `noop` with an explanation of why you skipped. +If today's category was recently covered and you cannot find a sufficiently different problem, call `noop` with an explanation of why you skipped. \ No newline at end of file diff --git a/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml b/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml index 0cb48b091bc..19325b52be6 100644 --- a/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml +++ b/.github/workflows/daily-awf-spec-compiler-surfacing.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"9528f473284b22c6def6fe8afc3c2d986aa1a6df50c225de2bb07645c6114383","body_hash":"fae582535842882e5b53098df3a4983c1ad015a0a44e1da42f1e7ea3fbd245ee","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"798814ff74acc27a6aeb9ad4b1bcc05ff1b8dc44c7fca35d0ed08b3eeab72e03","body_hash":"fae582535842882e5b53098df3a4983c1ad015a0a44e1da42f1e7ea3fbd245ee","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-awf-spec-compiler-surfacing.md b/.github/workflows/daily-awf-spec-compiler-surfacing.md index 4f1eeb2c4f1..d4cc6fcfcc0 100644 --- a/.github/workflows/daily-awf-spec-compiler-surfacing.md +++ b/.github/workflows/daily-awf-spec-compiler-surfacing.md @@ -11,9 +11,9 @@ permissions: issues: read pull-requests: read tracker-id: daily-awf-spec-compiler-surfacing +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 sandbox: agent: sudo: false @@ -175,4 +175,4 @@ description: Criteria for deciding whether AWF features need gh-aw surfacing wor - treat schema and compiler behavior as the feature source of truth - mark as surfaced only when users can discover and apply the feature without reading implementation code - require at least one concrete user-facing surface: syntax docs, command/docs guidance, or upgrade/fix guidance -- prefer actionable deltas: what changed, where users encounter it, and what must be updated +- prefer actionable deltas: what changed, where users encounter it, and what must be updated \ No newline at end of file diff --git a/.github/workflows/daily-cache-strategy-analyzer.lock.yml b/.github/workflows/daily-cache-strategy-analyzer.lock.yml index c9089d41c48..a12c10d8688 100644 --- a/.github/workflows/daily-cache-strategy-analyzer.lock.yml +++ b/.github/workflows/daily-cache-strategy-analyzer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"538cf18c24c83e9ad6589dc9c80f0429feeee55525d16ad89fdd828737c43758","body_hash":"a21209b792f120067b7d3103c6d0fbb4bdb2af2060c2f4be68b595874b425be8","strict":true,"agent_id":"codex","agent_model":"${{ needs.activation.outputs.model_size }}","engine_versions":{"codex":"0.144.5"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"d667dce64d3ba15796d41787910fd35186139f094bc4cf81c43e5ba3a0cdaf1b","body_hash":"a21209b792f120067b7d3103c6d0fbb4bdb2af2060c2f4be68b595874b425be8","strict":true,"agent_id":"codex","agent_model":"${{ needs.activation.outputs.model_size }}","engine_versions":{"codex":"0.144.5"}} # gh-aw-manifest: {"version":1,"secrets":["CODEX_API_KEY","COPILOT_GITHUB_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","OPENAI_API_KEY"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"docker/build-push-action","sha":"53b7df96c91f9c12dcc8a07bcb9ccacbed38856a","version":"v7.3.0"},{"repo":"docker/setup-buildx-action","sha":"bb05f3f5519dd87d3ba754cc423b652a5edd6d2c","version":"v4.2.0"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-cache-strategy-analyzer.md b/.github/workflows/daily-cache-strategy-analyzer.md index 843b860d570..ecb0517584d 100644 --- a/.github/workflows/daily-cache-strategy-analyzer.md +++ b/.github/workflows/daily-cache-strategy-analyzer.md @@ -14,9 +14,9 @@ permissions: pull-requests: read discussions: read tracker-id: daily-cache-strategy-analyzer +model: "${{ needs.activation.outputs.model_size }}" engine: id: codex - model: "${{ needs.activation.outputs.model_size }}" strict: true experiments: model_size: @@ -65,6 +65,7 @@ imports: features: gh-aw-detection: true --- + {{#runtime-import? .github/shared-instructions.md}} # Daily Cache Strategy Analyzer diff --git a/.github/workflows/daily-caveman-optimizer.lock.yml b/.github/workflows/daily-caveman-optimizer.lock.yml index db6da44ccf0..42ad5cf201d 100644 --- a/.github/workflows/daily-caveman-optimizer.lock.yml +++ b/.github/workflows/daily-caveman-optimizer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"161e6e86cb0bb4a3ee88a109f3aca8cca6d865ce7ad9cc4123f03718f352f5e0","body_hash":"34f55cce9b8a2c1e5f91ab6d940f8bba276e26929d078a83a07bba8b2888e5dd","strict":true,"agent_id":"claude","agent_model":"${{ needs.activation.outputs.model_size }}","engine_versions":{"claude":"2.1.214"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"ce249f95eb1ec2265ed6a6957b4a64fb0ac1c542f63d93e45901cd4b70ae15a7","body_hash":"34f55cce9b8a2c1e5f91ab6d940f8bba276e26929d078a83a07bba8b2888e5dd","strict":true,"agent_id":"claude","agent_model":"${{ needs.activation.outputs.model_size }}","engine_versions":{"claude":"2.1.214"}} # gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-caveman-optimizer.md b/.github/workflows/daily-caveman-optimizer.md index 11321ce8ccb..21c659de81f 100644 --- a/.github/workflows/daily-caveman-optimizer.md +++ b/.github/workflows/daily-caveman-optimizer.md @@ -15,9 +15,9 @@ permissions: issues: read tracker-id: daily-caveman-optimizer +model: "${{ needs.activation.outputs.model_size }}" engine: id: claude - model: "${{ needs.activation.outputs.model_size }}" strict: true experiments: model_size: diff --git a/.github/workflows/daily-community-attribution.lock.yml b/.github/workflows/daily-community-attribution.lock.yml index ecc24a9f36d..1038427a7c4 100644 --- a/.github/workflows/daily-community-attribution.lock.yml +++ b/.github/workflows/daily-community-attribution.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"f4149e46f40db4627f43ab889152d7ef8813a1a7f0f3f724cdbb7b962fda1e04","body_hash":"53f0fe7dbbf20f3fefb9dbdbebf86cf4396210ab5000f3ae6494399bdb1e4b5c","strict":true,"agent_id":"copilot","agent_model":"claude-haiku-4.5","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"5d225b654d65945658670a612b6d6d7b648f3708296a1060fbf86877ffad0b7d","body_hash":"53f0fe7dbbf20f3fefb9dbdbebf86cf4396210ab5000f3ae6494399bdb1e4b5c","strict":true,"agent_id":"copilot","agent_model":"claude-haiku-4.5","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-community-attribution.md b/.github/workflows/daily-community-attribution.md index 7283e0985b1..35269e0a43f 100644 --- a/.github/workflows/daily-community-attribution.md +++ b/.github/workflows/daily-community-attribution.md @@ -14,9 +14,9 @@ permissions: pull-requests: read issues: read +model: claude-haiku-4.5 engine: id: copilot - model: claude-haiku-4.5 timeout-minutes: 20 network: @@ -605,4 +605,4 @@ If you encounter a genuine error that prevents completion (e.g., data fetch fail ### Output Format -Structure reports as: overview โ†’ key metrics/issues โ†’ collapsible detail โ†’ next actions. +Structure reports as: overview โ†’ key metrics/issues โ†’ collapsible detail โ†’ next actions. \ No newline at end of file diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml index aedb7855d1e..ba02cdb1e9b 100644 --- a/.github/workflows/daily-doc-healer.lock.yml +++ b/.github/workflows/daily-doc-healer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"7c388582d92e0a1815dfa7c853c41cc53378895865152d501113ab4cb921c6be","body_hash":"af57da59ed52380a4185c16498c985083189e258025499b906f6871db7b27b0d","strict":true,"agent_id":"claude","agent_model":"${{ needs.activation.outputs.model_size }}","engine_versions":{"claude":"2.1.214"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"d51ffcddaea285f4d844e92b1568b9374761309e1d8c94be00f5e4096b3c8967","body_hash":"af57da59ed52380a4185c16498c985083189e258025499b906f6871db7b27b0d","strict":true,"agent_id":"claude","agent_model":"${{ needs.activation.outputs.model_size }}","engine_versions":{"claude":"2.1.214"}} # gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","GH_AW_AGENT_TOKEN","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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-doc-healer.md b/.github/workflows/daily-doc-healer.md index 7ecb85480f0..5af6e0feed6 100644 --- a/.github/workflows/daily-doc-healer.md +++ b/.github/workflows/daily-doc-healer.md @@ -37,9 +37,9 @@ safe-outputs: noop: null description: Self-healing companion to the Daily Documentation Updater that detects documentation gaps missed by DDUw and proposes corrections emoji: ๐Ÿ“ +model: "${{ needs.activation.outputs.model_size }}" engine: id: claude - model: "${{ needs.activation.outputs.model_size }}" name: Daily Documentation Healer strict: true experiments: @@ -85,6 +85,7 @@ evals: - id: pr-issue-or-noop question: Was a documentation pull request or issue created for confirmed gaps, or was noop used appropriately when nothing required action? --- + {{#runtime-import? .github/shared-instructions.md}} # Daily Documentation Healer @@ -317,4 +318,4 @@ Call `noop` with a summary: ### Output Format -Structure reports as: overview โ†’ key metrics/issues โ†’ collapsible detail โ†’ next actions. +Structure reports as: overview โ†’ key metrics/issues โ†’ collapsible detail โ†’ next actions. \ No newline at end of file diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index 00d9d9699e1..1868488089f 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"484bab13637d692c327deff4b7e0d2db597ed14e4c85c2d634e26846d7f9194f","body_hash":"c0456b27237c17a40b7553d2fff425b5fcd19314e8ca45340391718370045ddc","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"3a911f16d5bd9b46b6cf09029d4852dc4b250fc7ff6213f7f6b0b63476f78ad8","body_hash":"c0456b27237c17a40b7553d2fff425b5fcd19314e8ca45340391718370045ddc","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-doc-updater.md b/.github/workflows/daily-doc-updater.md index 523cac70a87..b42554bcc17 100644 --- a/.github/workflows/daily-doc-updater.md +++ b/.github/workflows/daily-doc-updater.md @@ -31,9 +31,9 @@ safe-outputs: noop: null description: Automatically reviews and updates documentation to ensure accuracy and completeness emoji: ๐Ÿ“ +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 name: Daily Documentation Updater strict: true experiments: @@ -81,6 +81,7 @@ evals: - id: pr_created_or_noop question: Was a documentation pull request created with updates, or was noop used when no documentation changes were required? --- + {{#runtime-import? .github/shared-instructions.md}} # Daily Documentation Updater diff --git a/.github/workflows/daily-evals-report.lock.yml b/.github/workflows/daily-evals-report.lock.yml index 41e411cedf1..bedce8d9385 100644 --- a/.github/workflows/daily-evals-report.lock.yml +++ b/.github/workflows/daily-evals-report.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"81b0e278d4f77323028371f07f6a8aaca6535251f5e002a9015b7f8287634ceb","body_hash":"d04eca501f6443f266570d71e77bc4de533eb38dd5a6cc3c2e3391f443318c26","strict":true,"agent_id":"codex","agent_model":"gpt-5.4","engine_versions":{"codex":"0.144.5"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"388a0d6e4391c9580f1659e7dfbe96f2a483f57e3a8bf81a3cd2ee14939e2810","body_hash":"d04eca501f6443f266570d71e77bc4de533eb38dd5a6cc3c2e3391f443318c26","strict":true,"agent_id":"codex","agent_model":"gpt-5.4","engine_versions":{"codex":"0.144.5"}} # gh-aw-manifest: {"version":1,"secrets":["CODEX_API_KEY","COPILOT_GITHUB_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","OPENAI_API_KEY"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"docker/build-push-action","sha":"53b7df96c91f9c12dcc8a07bcb9ccacbed38856a","version":"v7.3.0"},{"repo":"docker/setup-buildx-action","sha":"bb05f3f5519dd87d3ba754cc423b652a5edd6d2c","version":"v4.2.0"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-evals-report.md b/.github/workflows/daily-evals-report.md index 37bfd6c9591..96929ba77d8 100644 --- a/.github/workflows/daily-evals-report.md +++ b/.github/workflows/daily-evals-report.md @@ -11,9 +11,9 @@ permissions: issues: read pull-requests: read max-daily-ai-credits: 3000 +model: gpt-5.4 engine: id: codex - model: gpt-5.4 tracker-id: daily-evals-report sandbox: agent: @@ -239,4 +239,4 @@ noop("Evals declared in N workflows but no evals.jsonl artifacts found. Use [eva - **Summarize, do not transcribe** โ€” report statistics, not raw JSONL content. - **Stop after `create_issue` or `noop`** โ€” no extra tool calls after publishing. -Begin your analysis now. Download the logs, analyze evals results, and publish the report. +Begin your analysis now. Download the logs, analyze evals results, and publish the report. \ No newline at end of file diff --git a/.github/workflows/daily-fact.lock.yml b/.github/workflows/daily-fact.lock.yml index 383a6a3e54d..1e4f57eaf78 100644 --- a/.github/workflows/daily-fact.lock.yml +++ b/.github/workflows/daily-fact.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"9084acce4cac4b9397271be1c48e7b627dec1cb7ca9b70a5dc808930440d6a98","body_hash":"101f611ec4326a20dbca00b8f7edd0787227ab782dbfd6727574f390ffbba6fe","strict":true,"agent_id":"codex","agent_model":"gpt-5.4","engine_versions":{"codex":"0.144.5"},"agent_image_runner":"aw-gpu-runner-T4"} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"27d0c8e476f7b9f3bc86c406d9703d0c88d6346ec1784a292a81d51ea0ef5893","body_hash":"101f611ec4326a20dbca00b8f7edd0787227ab782dbfd6727574f390ffbba6fe","strict":true,"agent_id":"codex","agent_model":"gpt-5.4","engine_versions":{"codex":"0.144.5"},"agent_image_runner":"aw-gpu-runner-T4"} # gh-aw-manifest: {"version":1,"secrets":["CODEX_API_KEY","COPILOT_GITHUB_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","OPENAI_API_KEY"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/setup-python","sha":"ece7cb06caefa5fff74198d8649806c4678c61a1","version":"v6.3.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-fact.md b/.github/workflows/daily-fact.md index 92d16cdb949..cfc295d491f 100644 --- a/.github/workflows/daily-fact.md +++ b/.github/workflows/daily-fact.md @@ -14,9 +14,9 @@ permissions: actions: read discussions: read tracker-id: daily-fact-thread +model: gpt-5.4 engine: id: codex - model: gpt-5.4 bare: true strict: true experiments: diff --git a/.github/workflows/daily-function-namer.lock.yml b/.github/workflows/daily-function-namer.lock.yml index cd6c82768a8..3acfb73b00f 100644 --- a/.github/workflows/daily-function-namer.lock.yml +++ b/.github/workflows/daily-function-namer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"b1ac9798b5f64d4d50e17d048ddd6d34c1f2112a90ee83625965826a6a22bfbe","body_hash":"f2e339866e75591ddb8f0cd429d8cbaaaee8d491a9936843e11a2958d64e6cbc","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"07e47559020e1d39a03f504b07209261f6afe5201c4f88f2718dd169282837ba","body_hash":"f2e339866e75591ddb8f0cd429d8cbaaaee8d491a9936843e11a2958d64e6cbc","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"},{"image":"ghcr.io/github/serena-mcp-server:latest","digest":"sha256:bf343399e3725c45528f531a230f3a04521d4cdef29f9a5af6282ff0d3c393c5","pinned_image":"ghcr.io/github/serena-mcp-server:latest@sha256:bf343399e3725c45528f531a230f3a04521d4cdef29f9a5af6282ff0d3c393c5"}]} # 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 # diff --git a/.github/workflows/daily-function-namer.md b/.github/workflows/daily-function-namer.md index 871049f4358..10bdce5b70d 100644 --- a/.github/workflows/daily-function-namer.md +++ b/.github/workflows/daily-function-namer.md @@ -15,10 +15,9 @@ permissions: tracker-id: daily-function-namer +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 - imports: - uses: shared/daily-audit-base.md with: @@ -441,4 +440,4 @@ Only include a rename suggestion if you are confident it would measurably improv ### Output Format -Structure reports as: overview โ†’ key metrics/issues โ†’ collapsible detail โ†’ next actions. +Structure reports as: overview โ†’ key metrics/issues โ†’ collapsible detail โ†’ next actions. \ No newline at end of file diff --git a/.github/workflows/daily-hippo-learn.lock.yml b/.github/workflows/daily-hippo-learn.lock.yml index c2bfabeb247..7f20118ebca 100644 --- a/.github/workflows/daily-hippo-learn.lock.yml +++ b/.github/workflows/daily-hippo-learn.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"3dd427d855fdc42845110c79733344f2f70da43ce6b253dd55e280c351ca915c","body_hash":"9f5b220b662f82e5397247ef9639c14044a97813032df328900d78022c5e3f05","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"dca650462b9899834fb22ad21939ceb3165a95fe45e8b3b1e19a89cb41fc2bf1","body_hash":"9f5b220b662f82e5397247ef9639c14044a97813032df328900d78022c5e3f05","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-hippo-learn.md b/.github/workflows/daily-hippo-learn.md index e5150775765..50dcb08d645 100644 --- a/.github/workflows/daily-hippo-learn.md +++ b/.github/workflows/daily-hippo-learn.md @@ -17,9 +17,9 @@ permissions: copilot-requests: write tracker-id: daily-hippo-learn +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 bare: true timeout-minutes: 30 @@ -204,4 +204,4 @@ safe-output tool is the most common cause of safe-output workflow failures. ### Output Format -Structure reports as: overview โ†’ key metrics/issues โ†’ collapsible detail โ†’ next actions. +Structure reports as: overview โ†’ key metrics/issues โ†’ collapsible detail โ†’ next actions. \ No newline at end of file diff --git a/.github/workflows/daily-model-resolution.lock.yml b/.github/workflows/daily-model-resolution.lock.yml index 3808a24bd05..d739d60910f 100644 --- a/.github/workflows/daily-model-resolution.lock.yml +++ b/.github/workflows/daily-model-resolution.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"8f7e8e2827ad724a03b1802e7a27d39f9833bfc07155cfa482dd6883470ccfc9","body_hash":"a007f8080b6a4947470648cae63a8fc804a6809cd77b3d95abd215d715498ba9","strict":true,"agent_id":"copilot","agent_model":"gpt-5.4-mini","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"32e6b7ca88e0a9eb100294fc31e170a79fd8ea8cdc5ff6761e4077929ec0a4f3","body_hash":"a007f8080b6a4947470648cae63a8fc804a6809cd77b3d95abd215d715498ba9","strict":true,"agent_id":"copilot","agent_model":"gpt-5.4-mini","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"docker/build-push-action","sha":"53b7df96c91f9c12dcc8a07bcb9ccacbed38856a","version":"v7.3.0"},{"repo":"docker/setup-buildx-action","sha":"bb05f3f5519dd87d3ba754cc423b652a5edd6d2c","version":"v4.2.0"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-model-resolution.md b/.github/workflows/daily-model-resolution.md index 761c5700280..0e74a777008 100644 --- a/.github/workflows/daily-model-resolution.md +++ b/.github/workflows/daily-model-resolution.md @@ -16,9 +16,9 @@ permissions: issues: read pull-requests: read tracker-id: daily-model-resolution +model: gpt-5.4-mini engine: id: copilot - model: gpt-5.4-mini strict: true tools: agentic-workflows: true @@ -349,4 +349,4 @@ Return **only** a valid JSON object (no prose, no markdown): If `agent-stdio.log` is missing, set `has_subagents: false` and `skipped_reason: "no agent-stdio.log"`. If `token-usage.jsonl` is missing, set `actual_models: []` and note it in the mismatches `status` field as `"unknown"`. -Return only valid JSON โ€” no other text. +Return only valid JSON โ€” no other text. \ No newline at end of file diff --git a/.github/workflows/daily-multi-device-docs-tester.lock.yml b/.github/workflows/daily-multi-device-docs-tester.lock.yml index 8d71a5ce18d..b2e1fc1775f 100644 --- a/.github/workflows/daily-multi-device-docs-tester.lock.yml +++ b/.github/workflows/daily-multi-device-docs-tester.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"3e9cc9af3c7d47aac46529f7608e002cd986d852de761116236813a22bb059e4","body_hash":"dcf9d2d09055c25941e881ebad704af94ad6a85d1f4ee9cbb8e2b89f44a018e3","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"1ecb91321a81f3257b700f2b91ec8045ae96883c7352a0cb48d2ee1a5d00bbbc","body_hash":"dcf9d2d09055c25941e881ebad704af94ad6a85d1f4ee9cbb8e2b89f44a018e3","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-multi-device-docs-tester.md b/.github/workflows/daily-multi-device-docs-tester.md index 0e593566853..971177dd910 100644 --- a/.github/workflows/daily-multi-device-docs-tester.md +++ b/.github/workflows/daily-multi-device-docs-tester.md @@ -22,9 +22,9 @@ sandbox: tracker-id: daily-multi-device-docs-tester max-turns: 80 # 10 devices ร— ~5 turns each + setup/report overhead +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 strict: true timeout-minutes: 30 runtimes: @@ -319,4 +319,4 @@ The workflow will fail if you do not call either the `create-issue` or `noop` to ### Output Format -Structure reports as: overview โ†’ key metrics/issues โ†’ collapsible detail โ†’ next actions. +Structure reports as: overview โ†’ key metrics/issues โ†’ collapsible detail โ†’ next actions. \ No newline at end of file diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index f4611db3736..f6afb9750ba 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"159a9cbca8e0eb0dbc9ceacd4d01204746585c29390b263a33bbcf8b1a5b9c71","body_hash":"6e8e3d46c0d5b1ca97512609394002c87250c65ff6659848e95486cbe790fdd4","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"},"agent_image_runner":"aw-gpu-runner-T4"} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"944473f784f0aced8470319f3d3328658baddba6ac482dc3e1cb16de4df33826","body_hash":"6e8e3d46c0d5b1ca97512609394002c87250c65ff6659848e95486cbe790fdd4","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"},"agent_image_runner":"aw-gpu-runner-T4"} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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","TAVILY_API_KEY"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/setup-python","sha":"ece7cb06caefa5fff74198d8649806c4678c61a1","version":"v6.3.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/chopratejas/headroom:latest","digest":"sha256:af709363c4f9515a88a50939baec513be13c7cd778fb6635527b104d5173cb1e","pinned_image":"ghcr.io/chopratejas/headroom:latest@sha256:af709363c4f9515a88a50939baec513be13c7cd778fb6635527b104d5173cb1e"},{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-news.md b/.github/workflows/daily-news.md index e7556aab965..55e597000bb 100644 --- a/.github/workflows/daily-news.md +++ b/.github/workflows/daily-news.md @@ -16,9 +16,9 @@ permissions: copilot-requests: write tracker-id: daily-news-weekday +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 bare: true timeout-minutes: 30 # Reduced from 45 since pre-fetching data is faster diff --git a/.github/workflows/daily-observability-report.lock.yml b/.github/workflows/daily-observability-report.lock.yml index aa9f5d898ec..bab1836a848 100644 --- a/.github/workflows/daily-observability-report.lock.yml +++ b/.github/workflows/daily-observability-report.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"a61c10fba5791b85862698941c77cc49e036165e70665f6245933e14532888ac","body_hash":"a5dd2caf5941d60224e3ac3a0c9fd629d68d6732d61a708364dc851c3dc46425","strict":true,"agent_id":"codex","agent_model":"gpt-5.4","engine_versions":{"codex":"0.144.5"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"e4cee8e097e071263a8087aa91effe17e9e98ddfd2d861bf25ce0ed4334ce45d","body_hash":"a5dd2caf5941d60224e3ac3a0c9fd629d68d6732d61a708364dc851c3dc46425","strict":true,"agent_id":"codex","agent_model":"gpt-5.4","engine_versions":{"codex":"0.144.5"}} # gh-aw-manifest: {"version":1,"secrets":["CODEX_API_KEY","COPILOT_GITHUB_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","OPENAI_API_KEY"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"docker/build-push-action","sha":"53b7df96c91f9c12dcc8a07bcb9ccacbed38856a","version":"v7.3.0"},{"repo":"docker/setup-buildx-action","sha":"bb05f3f5519dd87d3ba754cc423b652a5edd6d2c","version":"v4.2.0"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/daily-observability-report.md b/.github/workflows/daily-observability-report.md index 855b144851d..06a5a2a7b0d 100644 --- a/.github/workflows/daily-observability-report.md +++ b/.github/workflows/daily-observability-report.md @@ -9,9 +9,9 @@ permissions: discussions: read issues: read pull-requests: read +model: gpt-5.4 engine: id: codex - model: gpt-5.4 strict: true tracker-id: daily-observability-report tools: @@ -36,6 +36,7 @@ sandbox: agent: sudo: false --- + {{#runtime-import? .github/shared-instructions.md}} # Daily Observability Report for AWF Firewall and MCP Gateway diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml index e2eeaa842f1..ce987e025d0 100644 --- a/.github/workflows/dependabot-burner.lock.yml +++ b/.github/workflows/dependabot-burner.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"8f12f325bab26f2b8c6eb93dcbd9cc5d1d626ab8cd810280d6d41a6730c8fdaa","body_hash":"00a1743d9681c97e98f8683b5a481916f3619018e8c80c2442d7d23b4fc9c56f","strict":true,"agent_id":"copilot","agent_model":"gpt-5.4-mini","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"b30d52482fa5f3dd4fe44b25f0319f00d8dbeaebe86d9dadbd9098b036377c6a","body_hash":"00a1743d9681c97e98f8683b5a481916f3619018e8c80c2442d7d23b4fc9c56f","strict":true,"agent_id":"copilot","agent_model":"gpt-5.4-mini","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","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/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/dependabot-burner.md b/.github/workflows/dependabot-burner.md index 7fa4ab37355..e0b1428cd52 100644 --- a/.github/workflows/dependabot-burner.md +++ b/.github/workflows/dependabot-burner.md @@ -29,9 +29,9 @@ sandbox: concurrency: group: dependabot-burner cancel-in-progress: false +model: gpt-5.4-mini engine: id: copilot - model: gpt-5.4-mini strict: true network: allowed: @@ -491,4 +491,4 @@ If no safe bounded remediation is possible, do not create a PR. End with a conci ## Output -End with a concise summary including the selected PR numbers, retry mode, dependency batch handled, source files updated, validation commands run, result file path, and whether a replacement PR was created. +End with a concise summary including the selected PR numbers, retry mode, dependency batch handled, source files updated, validation commands run, result file path, and whether a replacement PR was created. \ No newline at end of file diff --git a/.github/workflows/design-decision-gate.lock.yml b/.github/workflows/design-decision-gate.lock.yml index 0758531b8c3..d4f081fba60 100644 --- a/.github/workflows/design-decision-gate.lock.yml +++ b/.github/workflows/design-decision-gate.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"1add653c616dba162ddd5f114e55e1cf347eaa0248a81d822f1f25fdaa99192b","body_hash":"3321fee3be5cc31a56f8331b12de6d6ce1b9a083b78fe2c023e86263882f4e75","strict":true,"agent_id":"claude","agent_model":"claude-sonnet-4-6","engine_versions":{"claude":"2.1.214"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"15e21b08fa8cc034f748c2c5859b8c7f78d253dc7846b880a3e952b0d9076c03","body_hash":"3321fee3be5cc31a56f8331b12de6d6ce1b9a083b78fe2c023e86263882f4e75","strict":true,"agent_id":"claude","agent_model":"claude-sonnet-4-6","engine_versions":{"claude":"2.1.214"}} # gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}],"has_pull_request":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 # diff --git a/.github/workflows/design-decision-gate.md b/.github/workflows/design-decision-gate.md index d4114f0b62f..ad0710cb161 100644 --- a/.github/workflows/design-decision-gate.md +++ b/.github/workflows/design-decision-gate.md @@ -20,9 +20,9 @@ permissions: pull-requests: read issues: read max-turns: 20 +model: claude-sonnet-4-6 engine: id: claude - model: claude-sonnet-4-6 safe-outputs: add-comment: max: 2 @@ -451,4 +451,4 @@ The ADR and implementation must be in sync before this PR can merge. ```json {"noop": {"message": "No action needed: [brief explanation of what was found and why no action was required]"}} -``` +``` \ No newline at end of file diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index a7dd939731b..d1e6ac633b4 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"fc310466e834d080c9269fb5ffec112953598daf49109cf453ccacb910a298dd","body_hash":"cf77987c9b823d80036083666bcf2720b270bd9254a8a230c9f909b3869cd5b5","agent_id":"codex","agent_model":"gpt-5.4","engine_versions":{"codex":"0.144.5"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"74a0d4a8ea84ea54b5bce2d10da1cc4e2d1117dfb089362e7b4098d7b9fb81ec","body_hash":"cf77987c9b823d80036083666bcf2720b270bd9254a8a230c9f909b3869cd5b5","agent_id":"codex","agent_model":"gpt-5.4","engine_versions":{"codex":"0.144.5"}} # gh-aw-manifest: {"version":1,"secrets":["CODEX_API_KEY","COPILOT_GITHUB_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","OPENAI_API_KEY"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/dev.md b/.github/workflows/dev.md index 7a696878c93..694f5dc88a7 100644 --- a/.github/workflows/dev.md +++ b/.github/workflows/dev.md @@ -12,10 +12,9 @@ name: Dev description: Daily status report for gh-aw project timeout-minutes: 30 strict: false +model: gpt-5.4 engine: id: codex - model: gpt-5.4 - permissions: contents: read issues: read diff --git a/.github/workflows/eslint-monster.lock.yml b/.github/workflows/eslint-monster.lock.yml index b0056df58fb..2f1f66a5207 100644 --- a/.github/workflows/eslint-monster.lock.yml +++ b/.github/workflows/eslint-monster.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"7bc4ba03fb512170f1ad8267f9eb85230aa47cefbe00ba1693f136161edb3cde","body_hash":"cb82d1e610cf30035cdcc2b2756d3c581cb4f252ec0f3e42a419640c296a7bf1","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"1723aaf63d64a4503ba7199fed44df6954dea9fb9d1ce4eb7126e524492372db","body_hash":"cb82d1e610cf30035cdcc2b2756d3c581cb4f252ec0f3e42a419640c296a7bf1","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_AGENT_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/eslint-monster.md b/.github/workflows/eslint-monster.md index 5d162cb9109..3da8c5fdb5e 100644 --- a/.github/workflows/eslint-monster.md +++ b/.github/workflows/eslint-monster.md @@ -17,9 +17,9 @@ sandbox: sudo: false tracker-id: eslint-monster +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 strict: true timeout-minutes: 45 tools: @@ -124,4 +124,4 @@ Read: - Keep all remediation work scoped to `actions/setup/js`. - Do not create duplicate issues for the same root-cause group. - Launch at most three total assignments. -- Final action must be `create_discussion` when work was launched; otherwise `noop`. +- Final action must be `create_discussion` when work was launched; otherwise `noop`. \ No newline at end of file diff --git a/.github/workflows/github-remote-mcp-auth-test.lock.yml b/.github/workflows/github-remote-mcp-auth-test.lock.yml index 204fbe17ae7..3431e14a74f 100644 --- a/.github/workflows/github-remote-mcp-auth-test.lock.yml +++ b/.github/workflows/github-remote-mcp-auth-test.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"4b8be13853ce32da85d4727e53cda464f9708c01b96ecd07aaa6a108f87f3d2e","body_hash":"56f9950ffdb46afae7ca16c12844a211460e171090d34f04b8cfe4ac9ab2e754","strict":true,"agent_id":"copilot","agent_model":"gpt-4.1","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"3f4dc40a7ff6e4de38571a5325980c62f2888b0c95fba273628979892d31237b","body_hash":"56f9950ffdb46afae7ca16c12844a211460e171090d34f04b8cfe4ac9ab2e754","strict":true,"agent_id":"copilot","agent_model":"gpt-4.1","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"}]} # 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 # diff --git a/.github/workflows/github-remote-mcp-auth-test.md b/.github/workflows/github-remote-mcp-auth-test.md index 2955d25c73d..f4a2f2de867 100644 --- a/.github/workflows/github-remote-mcp-auth-test.md +++ b/.github/workflows/github-remote-mcp-auth-test.md @@ -14,9 +14,9 @@ sandbox: agent: sudo: false +model: gpt-4.1 engine: id: copilot - model: gpt-4.1 tools: cli-proxy: true github: @@ -36,6 +36,7 @@ imports: features: gh-aw-detection: true --- + # GitHub Remote MCP Authentication Test You are an automated testing agent that verifies GitHub remote MCP server authentication with the GitHub Actions token. diff --git a/.github/workflows/hippo-embed.lock.yml b/.github/workflows/hippo-embed.lock.yml index 97113cd905c..b1463957c2e 100644 --- a/.github/workflows/hippo-embed.lock.yml +++ b/.github/workflows/hippo-embed.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"0bb28394d36541b9dbc0645ae632cbf58fd7b517e7e9df3f8a6e2280966238d0","body_hash":"64de223dab4a4aa12680edd01e56b6af15403962b2e54339a9091359c073bb02","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"},"agent_image_runner":"aw-gpu-runner-T4"} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"5ebc2e584f0c457ac7fa6cd7f460b51cb5559c674bd97dc362255fff74718fbf","body_hash":"64de223dab4a4aa12680edd01e56b6af15403962b2e54339a9091359c073bb02","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"},"agent_image_runner":"aw-gpu-runner-T4"} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"safedep/pmg","sha":"46cc70db535107183c9e752bb55d1d5c5f1a9290","version":"v1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/hippo-embed.md b/.github/workflows/hippo-embed.md index 97a4cfb437e..99e0e300dd3 100644 --- a/.github/workflows/hippo-embed.md +++ b/.github/workflows/hippo-embed.md @@ -11,9 +11,9 @@ permissions: copilot-requests: write tracker-id: hippo-embed +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 bare: true timeout-minutes: 60 diff --git a/.github/workflows/impeccable-skills-reviewer.lock.yml b/.github/workflows/impeccable-skills-reviewer.lock.yml index 16853fcf103..7ed595b5b1e 100644 --- a/.github/workflows/impeccable-skills-reviewer.lock.yml +++ b/.github/workflows/impeccable-skills-reviewer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"7e959e2a6d30fc1340af1701ec5b13e3aaeca745222eca248638fa922ec328f3","body_hash":"b435c26a5e5cef9f62e5753e0887491b004baa190720e8923247b24e075dd736","strict":true,"agent_id":"copilot","agent_model":"claude-sonnet-4.6","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"30653595e2f17deb13d90d7903ce4ad18437928cbd36db0eafdd35fc3e767947","body_hash":"b435c26a5e5cef9f62e5753e0887491b004baa190720e8923247b24e075dd736","strict":true,"agent_id":"copilot","agent_model":"claude-sonnet-4.6","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}],"has_pull_request":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 # diff --git a/.github/workflows/impeccable-skills-reviewer.md b/.github/workflows/impeccable-skills-reviewer.md index 569de000093..01d132dc5a2 100644 --- a/.github/workflows/impeccable-skills-reviewer.md +++ b/.github/workflows/impeccable-skills-reviewer.md @@ -15,9 +15,9 @@ sandbox: agent: sudo: false +model: claude-sonnet-4.6 engine: id: copilot - model: claude-sonnet-4.6 max-continuations: 6 imports: - uses: shared/pr-review-base.md diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index 19859f40bb5..337af5de797 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"7c7263c2cc000fb7714df29ab418680cefd5a94d6a3e869a2c0d34ba8aa6fcc9","body_hash":"bfda3055b12ee8a51b62d5da483fe2adead74c59e3c8db50292dbe457f7cc7bd","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"97ff7de334c89ca00a39a9aaa8e0d4a3d1270f153cff0cf0bd3c7d1c7c25527a","body_hash":"bfda3055b12ee8a51b62d5da483fe2adead74c59e3c8db50292dbe457f7cc7bd","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_AGENT_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/issue-monster.md b/.github/workflows/issue-monster.md index 4567bf10440..9f4a0e9cbcd 100644 --- a/.github/workflows/issue-monster.md +++ b/.github/workflows/issue-monster.md @@ -400,10 +400,9 @@ sandbox: agent: sudo: false +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 - imports: - shared/github-guard-policy.md - shared/activation-app.md diff --git a/.github/workflows/lint-monster.lock.yml b/.github/workflows/lint-monster.lock.yml index d6db55630f1..ee64beb128b 100644 --- a/.github/workflows/lint-monster.lock.yml +++ b/.github/workflows/lint-monster.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"17916c124e506734fb69571018bc997495a0a2604107b21e90ba2582c2efac17","body_hash":"b20ce5e3f74590f7862e4117c98b61d92695bf9162f9669c662618b859aaf24d","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"036a82e04501ee35ac58b4806e60de3854c5ccf43ac9bacbdb03cfd60b79fcc4","body_hash":"b20ce5e3f74590f7862e4117c98b61d92695bf9162f9669c662618b859aaf24d","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_AGENT_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/lint-monster.md b/.github/workflows/lint-monster.md index 3152142836e..56e7544f2d9 100644 --- a/.github/workflows/lint-monster.md +++ b/.github/workflows/lint-monster.md @@ -17,9 +17,9 @@ sandbox: sudo: false tracker-id: lint-monster +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 strict: true timeout-minutes: 45 tools: @@ -148,4 +148,4 @@ Convert fused guidance into clear, actionable instructions that Copilot can exec - Never assign the same group twice. - Keep exactly one authoritative open issue for the shared `function-length refactoring` backlog. - Always use safe outputs for issue creation, issue updates, comments, assignment, and discussion creation. -- Final action must be `create_discussion` when agents were launched or when existing function-length tracking issues were updated/closed; otherwise `noop`. +- Final action must be `create_discussion` when agents were launched or when existing function-length tracking issues were updated/closed; otherwise `noop`. \ No newline at end of file diff --git a/.github/workflows/mattpocock-skills-reviewer.lock.yml b/.github/workflows/mattpocock-skills-reviewer.lock.yml index 9fcbf8aa5b7..6072c4ae385 100644 --- a/.github/workflows/mattpocock-skills-reviewer.lock.yml +++ b/.github/workflows/mattpocock-skills-reviewer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"a334c02dad3004429f54ffc1c85468ffae684bcc749524c022c761ff5e449d60","body_hash":"c3f13ade4281614d5d35cd7ef735b734cbaa16e58f505b5b3e6670f75b405b42","strict":true,"agent_id":"copilot","agent_model":"claude-sonnet-4.6","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"904b2333eb2187ce0217c95fbd829683d3bbab85bb2ea4917c0b5ca447dc7530","body_hash":"c3f13ade4281614d5d35cd7ef735b734cbaa16e58f505b5b3e6670f75b405b42","strict":true,"agent_id":"copilot","agent_model":"claude-sonnet-4.6","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"skills":["mattpocock/skills/codebase-design@e9fcdf95b402d360f90f1db8d776d5dd450f9234","mattpocock/skills/diagnosing-bugs@e9fcdf95b402d360f90f1db8d776d5dd450f9234","mattpocock/skills/domain-modeling@e9fcdf95b402d360f90f1db8d776d5dd450f9234","mattpocock/skills/grill-with-docs@e9fcdf95b402d360f90f1db8d776d5dd450f9234","mattpocock/skills/improve-codebase-architecture@e9fcdf95b402d360f90f1db8d776d5dd450f9234","mattpocock/skills/tdd@e9fcdf95b402d360f90f1db8d776d5dd450f9234","mattpocock/skills/to-prd@e9fcdf95b402d360f90f1db8d776d5dd450f9234"],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}],"has_pull_request":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 # diff --git a/.github/workflows/mattpocock-skills-reviewer.md b/.github/workflows/mattpocock-skills-reviewer.md index e76ce8f3fd6..3ff3a84b2f8 100644 --- a/.github/workflows/mattpocock-skills-reviewer.md +++ b/.github/workflows/mattpocock-skills-reviewer.md @@ -6,10 +6,10 @@ cache: - pr-prefetch-${{ github.event.pull_request.number }}- description: Reviews pull requests using Matt Pocock's engineering skills to provide targeted, high-quality improvement suggestions based on the type of changes emoji: ๐Ÿ” +model: claude-sonnet-4.6 engine: id: copilot max-continuations: 6 - model: claude-sonnet-4.6 imports: - uses: shared/pr-review-base.md with: @@ -71,6 +71,7 @@ tools: github: mode: gh-proxy --- + # Matt Pocock Skills Reviewer You are a skilled engineering reviewer who applies [Matt Pocock's engineering skills](https://github.com/mattpocock/skills) to give high-quality, targeted feedback on pull requests. diff --git a/.github/workflows/outcome-collector.lock.yml b/.github/workflows/outcome-collector.lock.yml index fb73aba5e7d..0a5fb134acd 100644 --- a/.github/workflows/outcome-collector.lock.yml +++ b/.github/workflows/outcome-collector.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"f1dab46b954625fdf35b98474c7cbf7b15491aa51bbe4aebdfd671f790d9c70c","body_hash":"f26bcc5d8223afda6d4230f0bbb33da461a3703f21ce6630f307d8640355d279","strict":true,"agent_id":"copilot","agent_model":"claude-haiku-4.5","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"074a0f054a83afc645f9301dd744d5b3667b97dadad273725edea974b2e948e5","body_hash":"f26bcc5d8223afda6d4230f0bbb33da461a3703f21ce6630f307d8640355d279","strict":true,"agent_id":"copilot","agent_model":"claude-haiku-4.5","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/outcome-collector.md b/.github/workflows/outcome-collector.md index 3a6376c92c5..fb4f4962e4c 100644 --- a/.github/workflows/outcome-collector.md +++ b/.github/workflows/outcome-collector.md @@ -14,9 +14,9 @@ permissions: actions: read discussions: read tracker-id: outcome-collector +model: claude-haiku-4.5 engine: id: copilot - model: claude-haiku-4.5 bare: true strict: true timeout-minutes: 20 diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 4570120bf95..dae51ff9608 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"22152cfa898a4ccb4a91ece45e89a5bc294fea4507655618e3da4d4d575ee81d","body_hash":"45374cf478a57f9fae5a4714c01a0cc4ae807ea9e234308dbf44934cb59ed8b6","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"a22d8587b9a35a2990061d63a5f8d1ddd40f95e6d7cca45c51c0eb5340854b0b","body_hash":"45374cf478a57f9fae5a4714c01a0cc4ae807ea9e234308dbf44934cb59ed8b6","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_AGENT_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/poem-bot.md b/.github/workflows/poem-bot.md index 26c043df811..1980f152b41 100644 --- a/.github/workflows/poem-bot.md +++ b/.github/workflows/poem-bot.md @@ -27,9 +27,9 @@ permissions: pull-requests: read # AI engine configuration +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 bare: true # Import shared reporting guidelines diff --git a/.github/workflows/pr-sous-chef.lock.yml b/.github/workflows/pr-sous-chef.lock.yml index f64177284b3..61f2d8b9ee3 100644 --- a/.github/workflows/pr-sous-chef.lock.yml +++ b/.github/workflows/pr-sous-chef.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"9b467990b9150b7a4ff43718c31a695f5c76299fcf9cd01ab0311b29154622fe","body_hash":"90129e0aefd2457c2ca2ef498f61185bdbf52f3e5648d02d0eaeb081f8224cd5","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"627c766d6f2e1d44026fc0b0a3585f65d471f01392ba7e59780181eb32dea762","body_hash":"90129e0aefd2457c2ca2ef498f61185bdbf52f3e5648d02d0eaeb081f8224cd5","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["AWI_MAINTENANCE_TOKEN","COPILOT_GITHUB_TOKEN","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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/pr-sous-chef.md b/.github/workflows/pr-sous-chef.md index 88935380976..9c8ac096fc1 100644 --- a/.github/workflows/pr-sous-chef.md +++ b/.github/workflows/pr-sous-chef.md @@ -27,9 +27,9 @@ checkout: fetch-depth: 0 network: allowed: ["defaults", "go"] +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 strict: true imports: - shared/otlp.md diff --git a/.github/workflows/schema-consistency-checker.lock.yml b/.github/workflows/schema-consistency-checker.lock.yml index 79c6cb19862..49e07283a23 100644 --- a/.github/workflows/schema-consistency-checker.lock.yml +++ b/.github/workflows/schema-consistency-checker.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"522c249526eaa3124dfe3ae69834039d4392dbf77f890ef12bc5845b3f5cea02","body_hash":"7938997a97c71f6eecfe93ed0fb19099b2de698163734c765beff98d239e3f34","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"d4e8e181fcf2d8e25e94c9a00f3d30dca78a3fcc05dd7a6e47288d1bb8b93334","body_hash":"7938997a97c71f6eecfe93ed0fb19099b2de698163734c765beff98d239e3f34","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/schema-consistency-checker.md b/.github/workflows/schema-consistency-checker.md index 3cfc3522f6d..86071d53dc7 100644 --- a/.github/workflows/schema-consistency-checker.md +++ b/.github/workflows/schema-consistency-checker.md @@ -9,9 +9,9 @@ permissions: discussions: read issues: read pull-requests: read +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 max-ai-credits: 1500 tools: cli-proxy: true @@ -240,6 +240,7 @@ sandbox: agent: sudo: false --- + # Schema Consistency Checker You are an expert system that detects inconsistencies between: diff --git a/.github/workflows/semantic-function-refactor.lock.yml b/.github/workflows/semantic-function-refactor.lock.yml index 68cb6a9a53c..d2aa2e6ff3d 100644 --- a/.github/workflows/semantic-function-refactor.lock.yml +++ b/.github/workflows/semantic-function-refactor.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"7255df2e48ce5299fb541cf67ad8676348a532388ca1ce1a2046fd01d5565346","body_hash":"4936baa9326a78256f8cef3527461c87bb3ce863460e6b9b283e668948bc0f33","strict":true,"agent_id":"claude","agent_model":"claude-sonnet-4.6","engine_versions":{"claude":"2.1.214"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"8c198e2ab8abad4d8d5e12b24cdacee61e1ee26c98b39c2d025a3ae486f2d2e1","body_hash":"4936baa9326a78256f8cef3527461c87bb3ce863460e6b9b283e668948bc0f33","strict":true,"agent_id":"claude","agent_model":"claude-sonnet-4.6","engine_versions":{"claude":"2.1.214"}} # gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"},{"image":"ghcr.io/github/serena-mcp-server:latest","digest":"sha256:bf343399e3725c45528f531a230f3a04521d4cdef29f9a5af6282ff0d3c393c5","pinned_image":"ghcr.io/github/serena-mcp-server:latest@sha256:bf343399e3725c45528f531a230f3a04521d4cdef29f9a5af6282ff0d3c393c5"}]} # 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 # diff --git a/.github/workflows/semantic-function-refactor.md b/.github/workflows/semantic-function-refactor.md index 082636c0c86..4ba8f2d3cc0 100644 --- a/.github/workflows/semantic-function-refactor.md +++ b/.github/workflows/semantic-function-refactor.md @@ -19,10 +19,9 @@ sandbox: agent: sudo: false +model: claude-sonnet-4.6 engine: id: claude - model: claude-sonnet-4.6 - imports: - shared/go-source-analysis.md diff --git a/.github/workflows/smoke-call-workflow.lock.yml b/.github/workflows/smoke-call-workflow.lock.yml index a6652db08f7..e60036e3d03 100644 --- a/.github/workflows/smoke-call-workflow.lock.yml +++ b/.github/workflows/smoke-call-workflow.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"b4b939b7998c5bb1815f8322527c04e84869bd4c5b0248f2e6c91a0e1482d4c0","body_hash":"045828bb52fffb26f564965bec808ad613f31bdfa48fda8958696e41339e727b","strict":true,"agent_id":"codex","agent_model":"gpt-5.4-mini","engine_versions":{"codex":"0.144.5"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"58c73e751124d690313781a0c51aa4b896eb7cbeb1a028089ed78ca701cdf8a7","body_hash":"045828bb52fffb26f564965bec808ad613f31bdfa48fda8958696e41339e727b","strict":true,"agent_id":"codex","agent_model":"gpt-5.4-mini","engine_versions":{"codex":"0.144.5"}} # gh-aw-manifest: {"version":1,"secrets":["CODEX_API_KEY","COPILOT_GITHUB_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","OPENAI_API_KEY"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}],"has_pull_request":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 # diff --git a/.github/workflows/smoke-call-workflow.md b/.github/workflows/smoke-call-workflow.md index 1a1ded4b040..e3c50e9a157 100644 --- a/.github/workflows/smoke-call-workflow.md +++ b/.github/workflows/smoke-call-workflow.md @@ -15,9 +15,9 @@ on: permissions: contents: read pull-requests: read +model: gpt-5.4-mini engine: id: codex - model: gpt-5.4-mini strict: true network: allowed: @@ -51,4 +51,4 @@ The worker will validate that the repository checkout works correctly in a `work 1. Use the `smoke_workflow_call` MCP tool to select the `smoke-workflow-call` worker. 2. Pass `"smoke test checkout validation"` as the `task-description` input. -**Important**: You MUST call the `smoke_workflow_call` MCP tool with the `task-description` input. Do not use the `noop` tool. +**Important**: You MUST call the `smoke_workflow_call` MCP tool with the `task-description` input. Do not use the `noop` tool. \ No newline at end of file diff --git a/.github/workflows/smoke-claude-on-copilot.lock.yml b/.github/workflows/smoke-claude-on-copilot.lock.yml index 93079a645d1..d3dbcb2eb08 100644 --- a/.github/workflows/smoke-claude-on-copilot.lock.yml +++ b/.github/workflows/smoke-claude-on-copilot.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"7b3f0a89f765a8afa8c71d755cbfdfbae2ea95f90b19bf35663cf3bbb12944ce","body_hash":"15b9fe00b6ac930e381b8c478d953d8944393e0a196d4a148fd323fe9da43fba","strict":true,"agent_id":"claude","agent_model":"claude-haiku-4.5","engine_versions":{"claude":"2.1.214"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"53aece692eb8238d35833b907280b386c6e3baebfdc3305d20324425f9e0f295","body_hash":"15b9fe00b6ac930e381b8c478d953d8944393e0a196d4a148fd323fe9da43fba","strict":true,"agent_id":"claude","agent_model":"claude-haiku-4.5","engine_versions":{"claude":"2.1.214"}} # gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/smoke-claude-on-copilot.md b/.github/workflows/smoke-claude-on-copilot.md index 5ce97b827cc..2151402d1a6 100644 --- a/.github/workflows/smoke-claude-on-copilot.md +++ b/.github/workflows/smoke-claude-on-copilot.md @@ -12,10 +12,10 @@ permissions: contents: read pull-requests: read name: Smoke Claude on Copilot +model: claude-haiku-4.5 engine: id: claude model-provider: github - model: claude-haiku-4.5 bare: true strict: true tools: diff --git a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml index 7530daa0dfa..df454b76906 100644 --- a/.github/workflows/smoke-copilot-aoai-apikey.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-apikey.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"7aae7ef07a5262f6cb7cc652819d8c33d14ed978455cf90ca09dc8f10ebef2c5","body_hash":"35025aaffbb70f75f0abcee6e5039fcc3f5c5d3dcb8931bba69477605f6c0df0","strict":true,"agent_id":"copilot","agent_model":"o4-mini-aw","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"37080dd64465f506c15b5a6782f7d8829a80d536fc08438808f18c616108184f","body_hash":"35025aaffbb70f75f0abcee6e5039fcc3f5c5d3dcb8931bba69477605f6c0df0","strict":true,"agent_id":"copilot","agent_model":"o4-mini-aw","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","FOUNDRY_API_KEY","FOUNDRY_OPENAI_ENDPOINT","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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"docker/build-push-action","sha":"53b7df96c91f9c12dcc8a07bcb9ccacbed38856a","version":"v7.3.0"},{"repo":"docker/setup-buildx-action","sha":"bb05f3f5519dd87d3ba754cc423b652a5edd6d2c","version":"v4.2.0"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"},{"image":"ghcr.io/github/serena-mcp-server:latest","digest":"sha256:bf343399e3725c45528f531a230f3a04521d4cdef29f9a5af6282ff0d3c393c5","pinned_image":"ghcr.io/github/serena-mcp-server:latest@sha256:bf343399e3725c45528f531a230f3a04521d4cdef29f9a5af6282ff0d3c393c5"}]} # 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 # diff --git a/.github/workflows/smoke-copilot-aoai-apikey.md b/.github/workflows/smoke-copilot-aoai-apikey.md index 9c285eafae2..a0c3cb97ee0 100644 --- a/.github/workflows/smoke-copilot-aoai-apikey.md +++ b/.github/workflows/smoke-copilot-aoai-apikey.md @@ -21,9 +21,9 @@ permissions: discussions: read actions: read name: Smoke Copilot - AOAI (apikey) +model: o4-mini-aw engine: id: copilot - model: o4-mini-aw max-continuations: 2 bare: true env: diff --git a/.github/workflows/smoke-copilot-aoai-entra.lock.yml b/.github/workflows/smoke-copilot-aoai-entra.lock.yml index 54889d2e278..3a24def2cff 100644 --- a/.github/workflows/smoke-copilot-aoai-entra.lock.yml +++ b/.github/workflows/smoke-copilot-aoai-entra.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"7d9a3bb1a64904a8eaba45bbc720caf989b583ea97508fd14c158b2b9f730a40","body_hash":"935c8bf9a5490a38e0c80bb969123373d14147b1d33ded672a3243ce43760f63","strict":true,"agent_id":"copilot","agent_model":"o4-mini-aw","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"ece10fb5804835efced981e8369ead7ee92593fbd8abff32942806e89983887b","body_hash":"935c8bf9a5490a38e0c80bb969123373d14147b1d33ded672a3243ce43760f63","strict":true,"agent_id":"copilot","agent_model":"o4-mini-aw","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","FOUNDRY_OPENAI_ENDPOINT","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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"docker/build-push-action","sha":"53b7df96c91f9c12dcc8a07bcb9ccacbed38856a","version":"v7.3.0"},{"repo":"docker/setup-buildx-action","sha":"bb05f3f5519dd87d3ba754cc423b652a5edd6d2c","version":"v4.2.0"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"},{"image":"ghcr.io/github/serena-mcp-server:latest","digest":"sha256:bf343399e3725c45528f531a230f3a04521d4cdef29f9a5af6282ff0d3c393c5","pinned_image":"ghcr.io/github/serena-mcp-server:latest@sha256:bf343399e3725c45528f531a230f3a04521d4cdef29f9a5af6282ff0d3c393c5"}]} # 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 # diff --git a/.github/workflows/smoke-copilot-aoai-entra.md b/.github/workflows/smoke-copilot-aoai-entra.md index 76d47681544..549f20bf48e 100644 --- a/.github/workflows/smoke-copilot-aoai-entra.md +++ b/.github/workflows/smoke-copilot-aoai-entra.md @@ -23,9 +23,9 @@ permissions: actions: read name: Smoke Copilot - AOAI (Entra) environment: aoai-model +model: o4-mini-aw engine: id: copilot - model: o4-mini-aw max-continuations: 2 bare: true env: diff --git a/.github/workflows/smoke-copilot-mai.lock.yml b/.github/workflows/smoke-copilot-mai.lock.yml index 888cc38908d..5c9c57a86ac 100644 --- a/.github/workflows/smoke-copilot-mai.lock.yml +++ b/.github/workflows/smoke-copilot-mai.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"b507228724bd5565b9cc18b5649f0d79457cd6be76ce127b1946d48eb36a5d37","body_hash":"ac436af00c75e045fea53f6252e0853e1627562b2d12b62a70bb78f9e1569f78","strict":true,"agent_id":"copilot","agent_model":"mai-code-1-flash-picker","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"f135d5f2a5181e1f33f017da86cb6806b9cb35d814b174409f35d24afb714a99","body_hash":"ac436af00c75e045fea53f6252e0853e1627562b2d12b62a70bb78f9e1569f78","strict":true,"agent_id":"copilot","agent_model":"mai-code-1-flash-picker","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/smoke-copilot-mai.md b/.github/workflows/smoke-copilot-mai.md index 72eeac88d20..ee1685e491a 100644 --- a/.github/workflows/smoke-copilot-mai.md +++ b/.github/workflows/smoke-copilot-mai.md @@ -19,9 +19,9 @@ permissions: issues: read pull-requests: read name: Smoke Copilot MAI +model: mai-code-1-flash-picker engine: id: copilot - model: mai-code-1-flash-picker bare: true network: allowed: @@ -77,4 +77,4 @@ Retrieve and summarize commit messages from the last 24h in `${{ github.reposito - Run URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - Timestamp -**Only if triggered by a pull_request event**: Use `add_comment` to post a brief comment (max 5 lines) to the triggering PR with the summary and overall status. +**Only if triggered by a pull_request event**: Use `add_comment` to post a brief comment (max 5 lines) to the triggering PR with the summary and overall status. \ No newline at end of file diff --git a/.github/workflows/smoke-copilot-sdk.lock.yml b/.github/workflows/smoke-copilot-sdk.lock.yml index 9f16d28b072..16adeef4d24 100644 --- a/.github/workflows/smoke-copilot-sdk.lock.yml +++ b/.github/workflows/smoke-copilot-sdk.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"cb4a124ef37fd3697ad05447bb9b950a5bb13706b410ebf12a7123ccd645c206","body_hash":"c29aab69d3ce89bf57c600eccadae2604be0217feaf2b4247ae6c5a2d6c1d01d","strict":true,"agent_id":"copilot","agent_model":"gpt-5.4","engine_versions":{"copilot":"1.0.71","copilot-sdk":"1.0.7"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"f326d22c94eb070558aa3dd5bea1009fc9d412fdd842b448a13e1527cd66710d","body_hash":"c29aab69d3ce89bf57c600eccadae2604be0217feaf2b4247ae6c5a2d6c1d01d","strict":true,"agent_id":"copilot","agent_model":"gpt-5.4","engine_versions":{"copilot":"1.0.71","copilot-sdk":"1.0.7"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/smoke-copilot-sdk.md b/.github/workflows/smoke-copilot-sdk.md index 4f15eb4e326..9aa86aa66cf 100644 --- a/.github/workflows/smoke-copilot-sdk.md +++ b/.github/workflows/smoke-copilot-sdk.md @@ -15,10 +15,10 @@ on: permissions: contents: read name: Smoke Copilot SDK +model: gpt-5.4 engine: id: copilot copilot-sdk: true - model: gpt-5.4 bare: true tools: bash: @@ -57,4 +57,4 @@ features: Create an issue titled **"Smoke Test: Copilot SDK - ${{ github.run_id }}"** with: - โœ… or โŒ for each task above - Overall status: PASS or FAIL -- Run URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} +- Run URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} \ No newline at end of file diff --git a/.github/workflows/smoke-copilot-small.lock.yml b/.github/workflows/smoke-copilot-small.lock.yml index d8cd77b53f1..7359a3ad686 100644 --- a/.github/workflows/smoke-copilot-small.lock.yml +++ b/.github/workflows/smoke-copilot-small.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"fbb4aac717ce83a9481a43399959cf36c260188a4fe69c3f77a29ea29233f159","body_hash":"1c3d817def4f5d842d14c3859214c10147cb3215205919b35077f71278773957","strict":true,"agent_id":"copilot","agent_model":"small","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"465074c8fd543366d84678098efba72747d3745a65233e2539b3ebe76c9ac82c","body_hash":"1c3d817def4f5d842d14c3859214c10147cb3215205919b35077f71278773957","strict":true,"agent_id":"copilot","agent_model":"small","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/smoke-copilot-small.md b/.github/workflows/smoke-copilot-small.md index 85249446492..32bf0721dc6 100644 --- a/.github/workflows/smoke-copilot-small.md +++ b/.github/workflows/smoke-copilot-small.md @@ -15,9 +15,9 @@ on: permissions: contents: read name: Smoke Copilot Small +model: small engine: id: copilot - model: small bare: true tools: bash: @@ -53,4 +53,4 @@ Create an issue titled **"Smoke Test: Copilot Small - ${{ github.run_id }}"** wi - The haiku from task 1 - โœ… or โŒ for each task above - Overall status: PASS or FAIL -- Run URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} +- Run URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} \ No newline at end of file diff --git a/.github/workflows/smoke-copilot-sub-agents.lock.yml b/.github/workflows/smoke-copilot-sub-agents.lock.yml index ba7cf7e4c86..4dd59c39278 100644 --- a/.github/workflows/smoke-copilot-sub-agents.lock.yml +++ b/.github/workflows/smoke-copilot-sub-agents.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"693f1a59da30e6cd285d1123c672fdc3620fc52ba1f938ee0be1b00c675823e9","body_hash":"ead03f5b55d16621f4474fb57c28643abfea40c6218edbb0ff309b329c4d4498","strict":true,"agent_id":"copilot","agent_model":"gpt-5.3-codex","engine_versions":{"copilot":"1.0.71","copilot-sdk":"1.0.7"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"8df3b522d89a94ff42e06b6efbfd90673728ba6874ddb4f582ab5f8ad1f67f48","body_hash":"ead03f5b55d16621f4474fb57c28643abfea40c6218edbb0ff309b329c4d4498","strict":true,"agent_id":"copilot","agent_model":"gpt-5.3-codex","engine_versions":{"copilot":"1.0.71","copilot-sdk":"1.0.7"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/smoke-copilot-sub-agents.md b/.github/workflows/smoke-copilot-sub-agents.md index e611931bdf0..46b8fc535e8 100644 --- a/.github/workflows/smoke-copilot-sub-agents.md +++ b/.github/workflows/smoke-copilot-sub-agents.md @@ -11,10 +11,10 @@ permissions: copilot-requests: write name: Smoke Copilot Sub Agents strict: true +model: gpt-5.3-codex engine: id: copilot copilot-sdk: true - model: gpt-5.3-codex bare: true safe-outputs: create-issue: @@ -80,4 +80,4 @@ When asked `who am i?`, reply with exactly: `gpt-5-nano` -No extra words, punctuation, or formatting. +No extra words, punctuation, or formatting. \ No newline at end of file diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index 991c0135a0e..bc4a525ed9a 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"0aaf412b6693a41b394efdc538e95bcbeaa0d39b9ebdb335eae6c95cc311c4ad","body_hash":"128194f82fad48611a37209f51bfb1b28d1aa90f5de109dbe7d14c491f99cd27","strict":true,"agent_id":"copilot","agent_model":"gpt-5.4","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"6ee71b1e0805710194ca5e48fdd658578dc84bf8fa9010dc6d14dc36c787ab75","body_hash":"128194f82fad48611a37209f51bfb1b28d1aa90f5de109dbe7d14c491f99cd27","strict":true,"agent_id":"copilot","agent_model":"gpt-5.4","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-go","sha":"b7ad1dad31e06c5925ef5d2fc7ad053ef454303e","version":"v7.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"docker/build-push-action","sha":"53b7df96c91f9c12dcc8a07bcb9ccacbed38856a","version":"v7.3.0"},{"repo":"docker/setup-buildx-action","sha":"bb05f3f5519dd87d3ba754cc423b652a5edd6d2c","version":"v4.2.0"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"},{"image":"ghcr.io/github/serena-mcp-server:latest","digest":"sha256:bf343399e3725c45528f531a230f3a04521d4cdef29f9a5af6282ff0d3c393c5","pinned_image":"ghcr.io/github/serena-mcp-server:latest@sha256:bf343399e3725c45528f531a230f3a04521d4cdef29f9a5af6282ff0d3c393c5"}]} # 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 # diff --git a/.github/workflows/smoke-copilot.md b/.github/workflows/smoke-copilot.md index b10d212d046..8a393a47a07 100644 --- a/.github/workflows/smoke-copilot.md +++ b/.github/workflows/smoke-copilot.md @@ -22,9 +22,9 @@ permissions: discussions: read actions: read name: Smoke Copilot +model: gpt-5.4 engine: id: copilot - model: gpt-5.4 max-continuations: 2 bare: true imports: diff --git a/.github/workflows/smoke-github-claude.lock.yml b/.github/workflows/smoke-github-claude.lock.yml index ce3baf3eb28..13568da8d91 100644 --- a/.github/workflows/smoke-github-claude.lock.yml +++ b/.github/workflows/smoke-github-claude.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"5e3d286b2d099a6467422dcf5cee57a5ac5a433ef7a2ec55c8432d9a33fbf5d1","body_hash":"1f0cf433b9038121d5fead24f5837a951541a0775afbc2cd8d7bc311fd486903","strict":true,"agent_id":"claude","agent_model":"claude-haiku-4.5","engine_versions":{"claude":"2.1.214"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"b9d11ca282c387e35a547a610e1666a6731a47aff62b64e01d5007afa287b8ce","body_hash":"1f0cf433b9038121d5fead24f5837a951541a0775afbc2cd8d7bc311fd486903","strict":true,"agent_id":"claude","agent_model":"claude-haiku-4.5","engine_versions":{"claude":"2.1.214"}} # gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/smoke-github-claude.md b/.github/workflows/smoke-github-claude.md index 2c5fe15b44b..975f0509635 100644 --- a/.github/workflows/smoke-github-claude.md +++ b/.github/workflows/smoke-github-claude.md @@ -12,10 +12,10 @@ permissions: contents: read pull-requests: read name: Smoke GitHub Claude +model: claude-haiku-4.5 engine: id: claude model-provider: github - model: claude-haiku-4.5 bare: true strict: true tools: @@ -42,4 +42,4 @@ Goal: validate that Claude with `model-provider: github` can read the current pu - a 2-3 sentence high-level summary of what changed 4. Post exactly one `add_comment` safe output to the current PR with this summary. -Keep the comment compact (max 8 lines). +Keep the comment compact (max 8 lines). \ No newline at end of file diff --git a/.github/workflows/smoke-opencode.lock.yml b/.github/workflows/smoke-opencode.lock.yml index fb90109b73b..0010e621288 100644 --- a/.github/workflows/smoke-opencode.lock.yml +++ b/.github/workflows/smoke-opencode.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"973e48f7f29ade8ce06bc5086e8a105ed6df5299d231e16baefaded2c82b9e81","body_hash":"6aed5308f601e778cb17f8633be1ffa70ea5f86dc607b36e5d66243bd9945634","strict":true,"agent_id":"opencode","agent_model":"copilot/claude-sonnet-4.5","engine_versions":{"opencode":"1.2.14"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"6814ee004706d6e0b8da1eec5ec358a92700376302c02505e7e3d13e2733bda9","body_hash":"6aed5308f601e778cb17f8633be1ffa70ea5f86dc607b36e5d66243bd9945634","strict":true,"agent_id":"opencode","agent_model":"copilot/claude-sonnet-4.5","engine_versions":{"opencode":"1.2.14"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}],"has_pull_request":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 # diff --git a/.github/workflows/smoke-opencode.md b/.github/workflows/smoke-opencode.md index 571a87aabeb..c59337e1a09 100644 --- a/.github/workflows/smoke-opencode.md +++ b/.github/workflows/smoke-opencode.md @@ -18,9 +18,9 @@ permissions: issues: read pull-requests: read name: Smoke OpenCode +model: copilot/claude-sonnet-4.5 engine: id: opencode - model: copilot/claude-sonnet-4.5 strict: true imports: - shared/gh.md diff --git a/.github/workflows/smoke-pi.lock.yml b/.github/workflows/smoke-pi.lock.yml index cdff3fb4977..34a697465fc 100644 --- a/.github/workflows/smoke-pi.lock.yml +++ b/.github/workflows/smoke-pi.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"f584953d4ec12394b3df1c2137bb81d8b28ba8ad6a1f7b2b6f8cea71b66c4b48","body_hash":"c8872add5e6d0bf978304d64fb3eb1e3e7d5b7bd7d5832e7d6ec4e9b7a50a509","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"0e0d6ad7bc5fb42fc74e3fc22f126c50a95cdd0768ccf533f0fb5d63379ea499","body_hash":"c8872add5e6d0bf978304d64fb3eb1e3e7d5b7bd7d5832e7d6ec4e9b7a50a509","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}],"has_pull_request":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 # diff --git a/.github/workflows/smoke-pi.md b/.github/workflows/smoke-pi.md index 1e7d353b4e1..c73c257b5e8 100644 --- a/.github/workflows/smoke-pi.md +++ b/.github/workflows/smoke-pi.md @@ -18,9 +18,9 @@ permissions: issues: read pull-requests: read name: Smoke Pi +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 strict: true sandbox: agent: diff --git a/.github/workflows/spec-enforcer.lock.yml b/.github/workflows/spec-enforcer.lock.yml index d79ca6cbca9..224eb202642 100644 --- a/.github/workflows/spec-enforcer.lock.yml +++ b/.github/workflows/spec-enforcer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"98765c72b6beda80c4b15e9ee39904d80129d2dacddaeb7635054d37b9ca219a","body_hash":"ea3183a957a16e055dc653dd17fcec7b5c6a54cbb7105976398079921c03dd37","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"7eef8cf17e8a62a3fbffcae10fd66ea81a6da63f732b2bbd86f1f66d22159bdc","body_hash":"ea3183a957a16e055dc653dd17fcec7b5c6a54cbb7105976398079921c03dd37","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/spec-enforcer.md b/.github/workflows/spec-enforcer.md index 8b19e6ef3a4..c1b5c78798c 100644 --- a/.github/workflows/spec-enforcer.md +++ b/.github/workflows/spec-enforcer.md @@ -33,9 +33,9 @@ safe-outputs: description: Generates and maintains specification-driven test suites for each Go package, relying on README.md specifications rather than source code emoji: ๐Ÿ“‹ max-turns: 100 +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 name: Package Specification Enforcer strict: true timeout-minutes: 30 diff --git a/.github/workflows/test-quality-sentinel.lock.yml b/.github/workflows/test-quality-sentinel.lock.yml index cb4a532cf92..50fb8d7ae18 100644 --- a/.github/workflows/test-quality-sentinel.lock.yml +++ b/.github/workflows/test-quality-sentinel.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"43d494f6d7b1efb3dc346436b1351976b58399f99aeda7e51cc4dea483905e87","body_hash":"d8b4870a9a2fd8e4adda12053af38a9d1cb46f7f6d4d45bfaedb88aef8d18a88","strict":true,"agent_id":"copilot","agent_model":"${{ needs.activation.outputs.model_size }}","engine_versions":{"copilot":"1.0.71"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"c2c4d9b1af560cfc4588283f85ed606637e32601efc4b1dd63348ec32c6f7db5","body_hash":"d8b4870a9a2fd8e4adda12053af38a9d1cb46f7f6d4d45bfaedb88aef8d18a88","strict":true,"agent_id":"copilot","agent_model":"${{ needs.activation.outputs.model_size }}","engine_versions":{"copilot":"1.0.71"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}],"has_pull_request":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 # diff --git a/.github/workflows/test-quality-sentinel.md b/.github/workflows/test-quality-sentinel.md index 619343a7c07..3b4d210d2d9 100644 --- a/.github/workflows/test-quality-sentinel.md +++ b/.github/workflows/test-quality-sentinel.md @@ -14,9 +14,9 @@ permissions: contents: read pull-requests: read copilot-requests: write +model: "${{ needs.activation.outputs.model_size }}" engine: id: copilot - model: "${{ needs.activation.outputs.model_size }}" max-continuations: 15 tools: cli-proxy: true diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 301f4c813f9..da8f82fdc95 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"43e958c8d4488dc4e22c99f26f3b79cf03cd5337d2e597752bfabfc749e0924a","body_hash":"4fe2f07a2ac03520b96c2677feff2f69ca7c65e6f85de6fa2ad92f7786d7510b","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"6249e1421ac9fa6d9d2094e7ef64fd0aca7ce7bd0043c0e3c58144e9c9706521","body_hash":"4fe2f07a2ac03520b96c2677feff2f69ca7c65e6f85de6fa2ad92f7786d7510b","strict":true,"agent_id":"pi","agent_model":"copilot/gpt-5.4","engine_versions":{"pi":"0.80.10"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","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/cache/restore","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/cache/save","sha":"55cc8345863c7cc4c66a329aec7e433d2d1c52a9","version":"v6.1.0"},{"repo":"actions/checkout","sha":"9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0","version":"v7.0.0"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"820762786026740c76f36085b0efc47a31fe5020","version":"v7.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35","digest":"sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.35@sha256:2202f63e8650b2b8b0d38033b44a05387b2b71ad3e690c4d23a34786f5462aed"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35","digest":"sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.35@sha256:755b79d0dfda82bd6b43a208d68666721e504110c5d342a4eeb199802644ff04"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35","digest":"sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.35@sha256:fe83cd274636efa9de3f456e2b078fae137328b9bb6ee4986ae510acaef0cec5"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35","digest":"sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.35@sha256:f69282ec7b1326ba53891c399cf5b10475c0d3ccf4e1519b33d234a5427b57d3"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.4.1","digest":"sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.4.1@sha256:ad2a979c2cd8b50098e84938ca9c9c1580eb8e91526f101a90adfba7859b2c32"},{"image":"ghcr.io/github/gh-aw-node","digest":"sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b","pinned_image":"ghcr.io/github/gh-aw-node@sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b"},{"image":"ghcr.io/github/github-mcp-server:v1.6.0","digest":"sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3","pinned_image":"ghcr.io/github/github-mcp-server:v1.6.0@sha256:2b0c48b070f61e9d3969269ead600f62d00fb237b60ac849ef3d166ee7de9ad3"}]} # 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 # diff --git a/.github/workflows/unbloat-docs.md b/.github/workflows/unbloat-docs.md index 700e12d94fa..844a8d297ea 100644 --- a/.github/workflows/unbloat-docs.md +++ b/.github/workflows/unbloat-docs.md @@ -34,9 +34,9 @@ runtimes: # AI engine configuration max-turns: 90 # Reduce from avg 115 turns +model: copilot/gpt-5.4 engine: id: pi - model: copilot/gpt-5.4 # Shared instructions imports: - uses: shared/daily-pr-base.md diff --git a/docs/adr/46570-add-top-level-model-field.md b/docs/adr/46570-add-top-level-model-field.md new file mode 100644 index 00000000000..ec79af9c936 --- /dev/null +++ b/docs/adr/46570-add-top-level-model-field.md @@ -0,0 +1,46 @@ +# ADR-46570: Add Top-Level `model` Field, Deprecate `engine.model` + +**Date**: 2026-07-19 +**Status**: Draft +**Deciders**: Unknown + +--- + +### Context + +Workflow frontmatter currently requires users to nest a single scalar (the LLM model name) inside the `engine` object as `engine.model`. This forces users to understand the engine object structure just to set a model, even when they do not need to customize any other engine behavior. Other top-level scalar configuration fields (`max-turns`, `max-runs`, `max-tool-denials`) follow a flat, top-level convention. `engine.model` is therefore an ergonomic outlier that increases cognitive load and verbosity for a common operation. A top-level `model` field would align model selection with the existing convention and reduce friction. + +### Decision + +We will introduce a canonical top-level `model` field in workflow frontmatter for specifying the LLM model used by the agentic engine. The top-level field takes precedence over `engine.model` when both are present. We will simultaneously deprecate `engine.model`, emit a compile-time warning when it is encountered, and provide an automated codemod (`engine-model-to-top-level` via `gh aw fix`) to migrate existing workflows. + +### Alternatives Considered + +#### Alternative 1: Keep `engine.model` as the Canonical Location + +Retain the existing `engine.model` syntax with no changes. Users who want to change the model must still nest it inside an engine object. This avoids migration complexity and any risk of naming conflicts at the top level. However, it perpetuates the ergonomic inconsistency: users must learn the engine object structure to perform a common operation, and documentation becomes harder to write because `model` and other engine fields are at different levels of the hierarchy. + +#### Alternative 2: Use a Distinct Name (e.g., `llm-model`) for the Top-Level Field + +Introduce a top-level `llm-model` field instead of `model` to avoid any potential ambiguity with other hypothetical uses of `model`. This eliminates the name-collision risk but introduces a less intuitive, hyphenated field name that diverges from both YAML conventions and common agentic tooling vocabulary. Given that `model` is already the universally understood name for LLM model selection, the disambiguation is not worth the usability cost. + +### Consequences + +#### Positive +- Simpler, flatter YAML: users can set `model: gpt-5.4` without understanding the engine object structure. +- Consistent with the existing convention for top-level scalar fields (`max-turns`, `max-runs`, etc.). +- Schema deprecation markers and a compile-time warning guide existing users toward migration automatically. +- The `gh aw fix` codemod enables zero-effort automated migration for the common case. + +#### Negative +- A deprecation period means two syntactically valid ways to configure the model coexist, increasing implementation complexity (precedence logic) and potential user confusion. +- The inline-map engine syntax (`engine: { id: copilot, model: gpt-4 }`) cannot be automatically migrated by the codemod and requires manual intervention. +- Maintaining the codemod and deprecation warning adds ongoing test surface area that must be kept in sync. + +#### Neutral +- The `FrontmatterConfig` struct gains a new `Model` field; consumers that serialize or deserialize frontmatter must account for it. +- The JSON schema gains a top-level `model` property and `deprecated`/`x-deprecation-message` markers on both `engine_config` variants โ€” tooling that surfaces schema metadata will reflect this. + +--- + +*ADR created by [adr-writer agent]. Review and finalize before changing status from Draft to Accepted.* diff --git a/pkg/cli/codemod_engine_model.go b/pkg/cli/codemod_engine_model.go new file mode 100644 index 00000000000..1fd831cf8d2 --- /dev/null +++ b/pkg/cli/codemod_engine_model.go @@ -0,0 +1,30 @@ +package cli + +import "github.com/github/gh-aw/pkg/logger" + +var engineModelCodemodLog = logger.New("cli:codemod_engine_model") + +// getEngineModelToTopLevelCodemod migrates deprecated engine.model to top-level model. +func getEngineModelToTopLevelCodemod() Codemod { + return Codemod{ + ID: "engine-model-to-top-level", + Name: "Move engine.model to top-level model", + Description: "Moves deprecated 'engine.model' to the top-level 'model' field. The top-level field is the canonical location for LLM model configuration and takes precedence over engine.model.", + IntroducedIn: "0.78.0", + Apply: func(content string, frontmatter map[string]any) (string, bool, error) { + return migrateEngineFieldToTopLevel( + content, + frontmatter, + migrateEngineFieldToTopLevelOptions{ + engineField: "model", + targetTopLevelField: "model", + preserveTopLevelFields: []string{"model"}, + log: engineModelCodemodLog, + skipInlineMessage: "Skipping engine.model migration for inline-map engine syntax; migrate to top-level model manually", + removedMessage: "Removed deprecated engine.model (top-level model already present)", + migratedMessage: "Migrated engine.model to top-level model", + }, + ) + }, + } +} diff --git a/pkg/cli/codemod_engine_model_test.go b/pkg/cli/codemod_engine_model_test.go new file mode 100644 index 00000000000..205e5e9be64 --- /dev/null +++ b/pkg/cli/codemod_engine_model_test.go @@ -0,0 +1,182 @@ +//go:build !integration + +package cli + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestEngineModelToTopLevelCodemod_Metadata(t *testing.T) { + codemod := getEngineModelToTopLevelCodemod() + + assert.Equal(t, "engine-model-to-top-level", codemod.ID) + assert.Equal(t, "Move engine.model to top-level model", codemod.Name) + assert.NotEmpty(t, codemod.Description) + assert.Equal(t, "0.78.0", codemod.IntroducedIn) + require.NotNil(t, codemod.Apply) +} + +func TestEngineModelToTopLevelCodemod_NoOp(t *testing.T) { + codemod := getEngineModelToTopLevelCodemod() + + content := `--- +on: push +engine: + id: copilot +--- +` + frontmatter := map[string]any{ + "on": "push", + "engine": map[string]any{ + "id": "copilot", + }, + } + + result, applied, err := codemod.Apply(content, frontmatter) + require.NoError(t, err) + assert.False(t, applied) + assert.Equal(t, content, result) +} + +func TestEngineModelToTopLevelCodemod_IdempotentWhenAlreadyMigrated(t *testing.T) { + codemod := getEngineModelToTopLevelCodemod() + + content := `--- +model: gpt-5.4 +engine: + id: copilot +--- +` + frontmatter := map[string]any{ + "model": "gpt-5.4", + "engine": map[string]any{ + "id": "copilot", + }, + } + + result, applied, err := codemod.Apply(content, frontmatter) + require.NoError(t, err) + assert.False(t, applied) + assert.Equal(t, content, result) +} + +func TestEngineModelToTopLevelCodemod_MigratesField(t *testing.T) { + codemod := getEngineModelToTopLevelCodemod() + + content := `--- +on: push +engine: + id: copilot + model: gpt-5.4 +--- + +# Body` + frontmatter := map[string]any{ + "on": "push", + "engine": map[string]any{ + "id": "copilot", + "model": "gpt-5.4", + }, + } + + want := `--- +on: push +model: gpt-5.4 +engine: + id: copilot +--- + +# Body` + + result, applied, err := codemod.Apply(content, frontmatter) + require.NoError(t, err) + assert.True(t, applied) + assert.Equal(t, want, result) +} + +func TestEngineModelToTopLevelCodemod_PreservesCommentsAndBody(t *testing.T) { + codemod := getEngineModelToTopLevelCodemod() + + content := `--- +on: workflow_dispatch +engine: + id: claude + model: claude-3-5-sonnet-20241022 # pinned version +--- + +# Prompt body +Keep this content.` + frontmatter := map[string]any{ + "on": "workflow_dispatch", + "engine": map[string]any{ + "id": "claude", + "model": "claude-3-5-sonnet-20241022", + }, + } + + want := `--- +on: workflow_dispatch +model: claude-3-5-sonnet-20241022 # pinned version +engine: + id: claude +--- + +# Prompt body +Keep this content.` + + result, applied, err := codemod.Apply(content, frontmatter) + require.NoError(t, err) + assert.True(t, applied) + assert.Equal(t, want, result) +} + +func TestEngineModelToTopLevelCodemod_RespectsExistingTopLevel(t *testing.T) { + codemod := getEngineModelToTopLevelCodemod() + + content := `--- +model: gpt-5.4 +engine: + id: copilot + model: gpt-4 +--- +` + frontmatter := map[string]any{ + "model": "gpt-5.4", + "engine": map[string]any{ + "id": "copilot", + "model": "gpt-4", + }, + } + + result, applied, err := codemod.Apply(content, frontmatter) + require.NoError(t, err) + assert.True(t, applied) + assert.Contains(t, result, "model: gpt-5.4") + assert.NotContains(t, result, "model: gpt-4") + assert.NotContains(t, result, "\n model:") +} + +func TestEngineModelToTopLevelCodemod_InlineEngineMapNoOp(t *testing.T) { + codemod := getEngineModelToTopLevelCodemod() + + content := `--- +on: push +engine: { id: copilot, model: gpt-5.4 } +--- +` + frontmatter := map[string]any{ + "on": "push", + "engine": map[string]any{ + "id": "copilot", + "model": "gpt-5.4", + }, + } + + result, applied, err := codemod.Apply(content, frontmatter) + require.NoError(t, err) + assert.False(t, applied) + assert.Equal(t, content, result) +} diff --git a/pkg/cli/fix_codemods.go b/pkg/cli/fix_codemods.go index 15914c14d06..9661e73a951 100644 --- a/pkg/cli/fix_codemods.go +++ b/pkg/cli/fix_codemods.go @@ -107,6 +107,7 @@ func GetAllCodemods() []Codemod { getRunInstallScriptsToRuntimesNodeCodemod(), // Move top-level run-install-scripts under runtimes.node getMentionsAllowTeamMembersCodemod(), // Rename allow-team-members to allowed-collaborators in safe-outputs.mentions getEngineCopilotSDKDriverToDriverCodemod(), // Rename deprecated engine.copilot-sdk-driver to engine.driver + getEngineModelToTopLevelCodemod(), // Move engine.model to top-level model } fixCodemodsLog.Printf("Loaded codemod registry: %d codemods available", len(codemods)) return codemods diff --git a/pkg/cli/fix_codemods_test.go b/pkg/cli/fix_codemods_test.go index b3c457d60fa..63356192b0b 100644 --- a/pkg/cli/fix_codemods_test.go +++ b/pkg/cli/fix_codemods_test.go @@ -129,6 +129,7 @@ func TestGetAllCodemods_ContainsExpectedCodemods(t *testing.T) { "run-install-scripts-to-runtimes-node", "mentions-allow-team-members-to-allowed-collaborators", "engine-copilot-sdk-driver-to-driver", + "engine-model-to-top-level", } for _, expectedID := range expectedIDs { @@ -245,5 +246,6 @@ func expectedCodemodOrder() []string { "run-install-scripts-to-runtimes-node", "mentions-allow-team-members-to-allowed-collaborators", "engine-copilot-sdk-driver-to-driver", + "engine-model-to-top-level", } } diff --git a/pkg/cli/workflow_secrets.go b/pkg/cli/workflow_secrets.go index ff2dae80f7d..d9c41ca2f91 100644 --- a/pkg/cli/workflow_secrets.go +++ b/pkg/cli/workflow_secrets.go @@ -106,7 +106,7 @@ func extractEngineConfigFromFile(filePath string) (string, *workflow.EngineConfi } compiler := &workflow.Compiler{} - engineSetting, engineConfig := compiler.ExtractEngineConfig(result.Frontmatter) + engineSetting, engineConfig, _ := compiler.ExtractEngineConfig(result.Frontmatter) if engineConfig != nil && engineConfig.ID != "" { return engineConfig.ID, engineConfig, result.Frontmatter diff --git a/pkg/cli/workflows.go b/pkg/cli/workflows.go index 52c79f4cd2d..ffa7af59a91 100644 --- a/pkg/cli/workflows.go +++ b/pkg/cli/workflows.go @@ -476,7 +476,7 @@ func extractWorkflowNameFromFile(filePath string) (title string, err error) { func extractEngineIDFromFrontmatter(frontmatter map[string]any) string { // Use the workflow package's ExtractEngineConfig to handle both string and object formats compiler := &workflow.Compiler{} - engineSetting, engineConfig := compiler.ExtractEngineConfig(frontmatter) + engineSetting, engineConfig, _ := compiler.ExtractEngineConfig(frontmatter) if engineConfig != nil && engineConfig.ID != "" { return engineConfig.ID diff --git a/pkg/linters/README.md b/pkg/linters/README.md index 2af2f13dc91..a2dc507b127 100644 --- a/pkg/linters/README.md +++ b/pkg/linters/README.md @@ -55,6 +55,7 @@ This package currently provides custom Go analyzers in the following subpackages - `timeafterleak` โ€” reports `time.After` calls used as the channel-receive expression in a `select` case inside a `for` or `range` loop that leak a timer channel on each iteration when another case fires first. - `timesleepnocontext` โ€” reports `time.Sleep` calls inside functions that already receive a `context.Context`, where a context-aware `select` should be used instead. - `tolowerequalfold` โ€” reports case-insensitive string comparisons using `strings.ToLower`/`ToUpper` that should use `strings.EqualFold`. +- `trimleftright` โ€” reports `strings.TrimLeft`/`TrimRight` calls with a multi-character literal cutset where `TrimPrefix`/`TrimSuffix` was likely intended. - `uncheckedtypeassertion` โ€” reports single-value type assertions where unchecked panics are possible. - `wgdonenotdeferred` โ€” reports non-deferred `sync.WaitGroup.Done()` calls that can deadlock on panics or early returns. - `writebytestring` โ€” reports `w.Write([]byte(s))` calls where `s` is a string, which can be replaced with `io.WriteString` to avoid an unnecessary `[]byte` allocation. @@ -115,6 +116,7 @@ This package currently provides custom Go analyzers in the following subpackages | `timeafterleak` | Custom `go/analysis` analyzer that flags `time.After` in `select` cases inside loops that leak a timer channel on each iteration when another case fires first | | `timesleepnocontext` | Custom `go/analysis` analyzer that flags `time.Sleep` calls in context-aware functions | | `tolowerequalfold` | Custom `go/analysis` analyzer that flags case-insensitive comparisons via `strings.ToLower`/`ToUpper` that should use `strings.EqualFold` | +| `trimleftright` | Custom `go/analysis` analyzer that flags `strings.TrimLeft`/`TrimRight` calls with a multi-character literal cutset where `TrimPrefix`/`TrimSuffix` was likely intended | | `uncheckedtypeassertion` | Custom `go/analysis` analyzer that flags unchecked single-value type assertions | | `wgdonenotdeferred` | Custom `go/analysis` analyzer that flags non-deferred `sync.WaitGroup.Done()` calls | | `writebytestring` | Custom `go/analysis` analyzer that flags `w.Write([]byte(s))` calls where `s` is a string that can be replaced with `io.WriteString` | diff --git a/pkg/parser/import_field_extractor.go b/pkg/parser/import_field_extractor.go index 8e9278d31a3..9dee5fb6353 100644 --- a/pkg/parser/import_field_extractor.go +++ b/pkg/parser/import_field_extractor.go @@ -300,6 +300,11 @@ func parseFrontmatterForExtraction(rawContent string, wasSubstituted bool, origF // Side effects: acc.engines, acc.mergedEngineMCPToolTimeout, // acc.mergedEngineMCPSessionTimeout, acc.mergedEngineModel. func (acc *importAccumulator) extractEngineConfig(fm map[string]any, fullPath string) { + if modelStr, ok := fm["model"].(string); ok && modelStr != "" && acc.mergedEngineModel == "" { + acc.mergedEngineModel = modelStr + parserLog.Printf("Extracted top-level model preference from import %s: %s", fullPath, modelStr) + } + engineVal, hasEngine := fm["engine"] if !hasEngine { return diff --git a/pkg/parser/schemas/main_workflow_schema.json b/pkg/parser/schemas/main_workflow_schema.json index 515e0414ab0..989eeb06929 100644 --- a/pkg/parser/schemas/main_workflow_schema.json +++ b/pkg/parser/schemas/main_workflow_schema.json @@ -11748,6 +11748,11 @@ } ] }, + "model": { + "type": "string", + "description": "Optional top-level LLM model override. Sets the model used by the agentic engine for this workflow. Takes precedence over engine.model when both are specified. Supports full model IDs (e.g. 'claude-3-5-sonnet-20241022', 'gpt-5.4') and model aliases (e.g. 'small', 'large').", + "examples": ["gpt-5.4", "claude-3-5-sonnet-20241022", "gpt-4"] + }, "evals": { "description": "\u26a0\ufe0f Experimental. BinEval binary evaluation questions to run after safe-outputs and before the conclusion job. Can be a plain list of questions (shorthand) or an object with questions, model, and runs-on fields.", "oneOf": [ @@ -12250,7 +12255,9 @@ }, "model": { "type": "string", - "description": "Optional specific LLM model to use (e.g., 'claude-3-5-sonnet-20241022', 'gpt-4'). Has sensible defaults and can typically be omitted." + "description": "Optional specific LLM model to use (e.g., 'claude-3-5-sonnet-20241022', 'gpt-4'). Has sensible defaults and can typically be omitted.", + "deprecated": true, + "x-deprecation-message": "'engine.model' is deprecated. Use top-level 'model' instead. Run 'gh aw fix' to automatically migrate." }, "model-provider": { "type": "string", @@ -12976,7 +12983,9 @@ "properties": { "model": { "type": "string", - "description": "Model preference or size category (e.g. 'small', 'large', 'gpt-4.1'). Applied to the default engine when engine.id is not specified." + "description": "Model preference or size category (e.g. 'small', 'large', 'gpt-4.1'). Applied to the default engine when engine.id is not specified.", + "deprecated": true, + "x-deprecation-message": "'engine.model' is deprecated. Use top-level 'model' instead. Run 'gh aw fix' to automatically migrate." } }, "required": ["model"], diff --git a/pkg/workflow/agent_validation.go b/pkg/workflow/agent_validation.go index d46086bdcfa..8bea4b55db8 100644 --- a/pkg/workflow/agent_validation.go +++ b/pkg/workflow/agent_validation.go @@ -129,7 +129,7 @@ func validateCapabilitySupport(featureName string, featureSet bool, capabilitySu // validateMaxTurnsSupport validates that max-turns is only used with engines that support this feature func (c *Compiler) validateMaxTurnsSupport(frontmatter map[string]any, engine CodingAgentEngine) error { // Check if max-turns is specified in the engine config - _, engineConfig := c.ExtractEngineConfig(frontmatter) + _, engineConfig, _ := c.ExtractEngineConfig(frontmatter) hasMaxTurns := engineConfig != nil && engineConfig.MaxTurns != "" @@ -142,7 +142,7 @@ func (c *Compiler) validateMaxTurnsSupport(frontmatter map[string]any, engine Co // validateMaxContinuationsSupport validates that max-continuations is only used with engines that support this feature func (c *Compiler) validateMaxContinuationsSupport(frontmatter map[string]any, engine CodingAgentEngine) error { // Check if max-continuations is specified in the engine config - _, engineConfig := c.ExtractEngineConfig(frontmatter) + _, engineConfig, _ := c.ExtractEngineConfig(frontmatter) hasMaxContinuations := engineConfig != nil && engineConfig.MaxContinuations != 0 @@ -155,7 +155,7 @@ func (c *Compiler) validateMaxContinuationsSupport(frontmatter map[string]any, e // validateMaxToolDenialsSupport validates that max-tool-denials is only used with // the Copilot engine in Copilot SDK mode. func (c *Compiler) validateMaxToolDenialsSupport(frontmatter map[string]any, engine CodingAgentEngine) error { - _, engineConfig := c.ExtractEngineConfig(frontmatter) + _, engineConfig, _ := c.ExtractEngineConfig(frontmatter) if engineConfig == nil || engineConfig.MaxToolDenials == "" { return nil @@ -182,12 +182,12 @@ func (c *Compiler) validateUniversalLLMConsumerModel(frontmatter map[string]any, return nil } - _, engineConfig := c.ExtractEngineConfig(frontmatter) - if engineConfig == nil || strings.TrimSpace(engineConfig.Model) == "" { + _, engineConfig, model := c.ExtractEngineConfig(frontmatter) + if engineConfig == nil || strings.TrimSpace(model) == "" { return fmt.Errorf("engine.model is required for engine '%s' and must use provider/model format (for example: copilot/gpt-5, anthropic/claude-sonnet-4, openai/gpt-4.1)", engine.GetID()) } - if _, err := resolveUniversalLLMBackendFromModel(engineConfig.Model); err != nil { + if _, err := resolveUniversalLLMBackendFromModel(model); err != nil { return fmt.Errorf("invalid engine.model for engine '%s': %w", engine.GetID(), err) } @@ -235,7 +235,7 @@ func (c *Compiler) validateWebSearchSupport(tools map[string]any, engine CodingA // validateBareModeSupport validates that bare mode is only used with engines that support this feature. // Emits a warning and has no effect on engines that do not support bare mode. func (c *Compiler) validateBareModeSupport(frontmatter map[string]any, engine CodingAgentEngine) { - _, engineConfig := c.ExtractEngineConfig(frontmatter) + _, engineConfig, _ := c.ExtractEngineConfig(frontmatter) if engineConfig == nil || !engineConfig.Bare { // bare mode not requested, no validation needed diff --git a/pkg/workflow/agentic_output_test.go b/pkg/workflow/agentic_output_test.go index ba4734532db..376df1f38c7 100644 --- a/pkg/workflow/agentic_output_test.go +++ b/pkg/workflow/agentic_output_test.go @@ -369,10 +369,10 @@ func TestClaudeEngineNetworkHookCleanup(t *testing.T) { t.Run("No hook cleanup with Claude engine and network permissions (AWF mode)", func(t *testing.T) { // Test data with Claude engine and network permissions with firewall enabled data := &WorkflowData{ - Name: "test-workflow", + Name: "test-workflow", + Model: "claude-3-5-sonnet-20241022", EngineConfig: &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", }, NetworkPermissions: &NetworkPermissions{ Allowed: []string{"example.com", "*.trusted.com"}, @@ -405,10 +405,10 @@ func TestClaudeEngineNetworkHookCleanup(t *testing.T) { // Test data with Claude engine and defaults network permissions // (This simulates what happens when no network section is specified - defaults to "defaults" mode) data := &WorkflowData{ - Name: "test-workflow", + Name: "test-workflow", + Model: "claude-3-5-sonnet-20241022", EngineConfig: &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", }, NetworkPermissions: &NetworkPermissions{ Allowed: []string{"defaults"}, // Default network mode @@ -434,10 +434,10 @@ func TestClaudeEngineNetworkHookCleanup(t *testing.T) { t.Run("No cleanup with Claude engine but no network permissions", func(t *testing.T) { // Test data with Claude engine but no network permissions data := &WorkflowData{ - Name: "test-workflow", + Name: "test-workflow", + Model: "claude-3-5-sonnet-20241022", EngineConfig: &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", }, NetworkPermissions: nil, // No network permissions } @@ -461,10 +461,10 @@ func TestClaudeEngineNetworkHookCleanup(t *testing.T) { t.Run("No cleanup with empty network permissions (AWF deny-all)", func(t *testing.T) { // Test data with Claude engine and empty network permissions with firewall enabled data := &WorkflowData{ - Name: "test-workflow", + Name: "test-workflow", + Model: "claude-3-5-sonnet-20241022", EngineConfig: &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", }, NetworkPermissions: &NetworkPermissions{ Allowed: []string{}, // Empty allowed list (deny-all) diff --git a/pkg/workflow/antigravity_engine.go b/pkg/workflow/antigravity_engine.go index 2efc4232708..a1ebbf0f368 100644 --- a/pkg/workflow/antigravity_engine.go +++ b/pkg/workflow/antigravity_engine.go @@ -170,7 +170,7 @@ func (e *AntigravityEngine) GetExecutionSteps(workflowData *WorkflowData, logFil // configured. When not configured, the Antigravity CLI uses its built-in default model. // This avoids embedding the value directly in the shell command (which fails template injection // validation for GitHub Actions expressions like ${{ inputs.model }}). - modelConfigured := workflowData.EngineConfig != nil && workflowData.EngineConfig.Model != "" + modelConfigured := workflowData.Model != "" // Antigravity CLI reads MCP config from .antigravity/settings.json (project-level) // The conversion script (convert_gateway_config_antigravity.sh) writes settings.json @@ -316,8 +316,8 @@ touch %s // template injection validation for GitHub Actions expressions like ${{ inputs.model }}). // When model is not configured, let the Antigravity CLI use its built-in default model. if modelConfigured { - antigravityLog.Printf("Setting %s env var for model: %s", constants.AntigravityCLIModelEnvVar, workflowData.EngineConfig.Model) - env[constants.AntigravityCLIModelEnvVar] = workflowData.EngineConfig.Model + antigravityLog.Printf("Setting %s env var for model: %s", constants.AntigravityCLIModelEnvVar, workflowData.Model) + env[constants.AntigravityCLIModelEnvVar] = workflowData.Model } // Add custom environment variables from engine config. diff --git a/pkg/workflow/antigravity_engine_test.go b/pkg/workflow/antigravity_engine_test.go index c364e1d2f1a..0b9f9de6163 100644 --- a/pkg/workflow/antigravity_engine_test.go +++ b/pkg/workflow/antigravity_engine_test.go @@ -164,10 +164,9 @@ func TestAntigravityEngineExecution(t *testing.T) { t.Run("with model", func(t *testing.T) { workflowData := &WorkflowData{ - Name: "test-workflow", - EngineConfig: &EngineConfig{ - Model: "antigravity-1.5-pro", - }, + Name: "test-workflow", + Model: "antigravity-1.5-pro", + EngineConfig: &EngineConfig{}, } steps := engine.GetExecutionSteps(workflowData, "/tmp/test.log") @@ -251,10 +250,9 @@ func TestAntigravityEngineExecution(t *testing.T) { // When model is configured, use the native ANTIGRAVITY_MODEL env var modelWorkflow := &WorkflowData{ - Name: "model-configured", - EngineConfig: &EngineConfig{ - Model: "antigravity-2.0-flash", - }, + Name: "model-configured", + Model: "antigravity-2.0-flash", + EngineConfig: &EngineConfig{}, } steps = engine.GetExecutionSteps(modelWorkflow, "/tmp/test.log") diff --git a/pkg/workflow/behavior_defined_engine.go b/pkg/workflow/behavior_defined_engine.go index 5dd16e5fef9..3c4797a674a 100644 --- a/pkg/workflow/behavior_defined_engine.go +++ b/pkg/workflow/behavior_defined_engine.go @@ -376,8 +376,8 @@ func (e *BehaviorDefinedEngine) GetExecutionSteps(workflowData *WorkflowData, lo applyMCPScriptsSecretEnv(env, workflowData) if exec.ModelEnvVarName != "" { - if workflowData != nil && workflowData.EngineConfig != nil && workflowData.EngineConfig.Model != "" { - modelVal := workflowData.EngineConfig.Model + if workflowData != nil && workflowData.Model != "" { + modelVal := workflowData.Model if exec.ModelEnvProviderPrefix != "" { if parts := strings.SplitN(modelVal, "/", 2); len(parts) == 2 { modelVal = exec.ModelEnvProviderPrefix + "/" + parts[1] @@ -408,7 +408,7 @@ func (e *BehaviorDefinedEngine) modelFlagFragment(exec *EngineExecutionDefinitio if exec.ModelEnvVarName == "" || exec.ModelFlag == "" { return "" } - if workflowData == nil || workflowData.EngineConfig == nil || workflowData.EngineConfig.Model == "" { + if workflowData == nil || workflowData.EngineConfig == nil || workflowData.Model == "" { return "" } return fmt.Sprintf(`%s "$%s"`, exec.ModelFlag, exec.ModelEnvVarName) @@ -451,7 +451,7 @@ func (e *BehaviorDefinedEngine) buildFirewallCommand(exec *EngineExecutionDefini func (e *BehaviorDefinedEngine) allowedDomains(workflowData *WorkflowData) string { engineName := constants.EngineName(e.GetID()) if e.usesUniversalLLMConsumer() && workflowData != nil && workflowData.EngineConfig != nil { - return mustGetAllowedDomainsForEngineWithModel(engineName, workflowData.EngineConfig.Model, workflowData.NetworkPermissions, workflowData.Tools, workflowData.Runtimes) + return mustGetAllowedDomainsForEngineWithModel(engineName, workflowData.Model, workflowData.NetworkPermissions, workflowData.Tools, workflowData.Runtimes) } return GetAllowedDomainsForEngine(engineName, workflowData.NetworkPermissions, workflowData.Tools, workflowData.Runtimes) } diff --git a/pkg/workflow/claude_engine.go b/pkg/workflow/claude_engine.go index 47c2db56a2d..8cf2070a4e7 100644 --- a/pkg/workflow/claude_engine.go +++ b/pkg/workflow/claude_engine.go @@ -186,7 +186,7 @@ func (e *ClaudeEngine) GetExecutionSteps(workflowData *WorkflowData, logFile str // This avoids embedding the value directly in the shell command (which fails template injection // validation for GitHub Actions expressions like ${{ inputs.model }}). // Fallback for unconfigured model uses GH_AW_MODEL_AGENT_CLAUDE with shell expansion. - modelConfigured := workflowData.EngineConfig != nil && workflowData.EngineConfig.Model != "" + modelConfigured := workflowData.Model != "" // Add max_turns if specified (in CLI it's max-turns) if workflowData.EngineConfig != nil && workflowData.EngineConfig.MaxTurns != "" { @@ -474,8 +474,8 @@ func (e *ClaudeEngine) GetExecutionSteps(workflowData *WorkflowData, logFile str // When model is not configured, fall back to GH_AW_MODEL_AGENT/DETECTION_CLAUDE so users // can set a default via GitHub Actions variables. if modelConfigured { - claudeLog.Printf("Setting %s env var for model: %s", constants.ClaudeCLIModelEnvVar, workflowData.EngineConfig.Model) - env[constants.ClaudeCLIModelEnvVar] = workflowData.EngineConfig.Model + claudeLog.Printf("Setting %s env var for model: %s", constants.ClaudeCLIModelEnvVar, workflowData.Model) + env[constants.ClaudeCLIModelEnvVar] = workflowData.Model } else { // No model configured - use fallback GitHub variable with shell expansion isDetectionJob := workflowData.SafeOutputs == nil diff --git a/pkg/workflow/claude_engine_network_test.go b/pkg/workflow/claude_engine_network_test.go index 2056fcdef15..bde9498c07f 100644 --- a/pkg/workflow/claude_engine_network_test.go +++ b/pkg/workflow/claude_engine_network_test.go @@ -12,9 +12,9 @@ func TestClaudeEngineNetworkPermissions(t *testing.T) { t.Run("InstallationSteps without network permissions", func(t *testing.T) { workflowData := &WorkflowData{ + Model: "claude-3-5-sonnet-20241022", EngineConfig: &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", }, } @@ -27,9 +27,9 @@ func TestClaudeEngineNetworkPermissions(t *testing.T) { t.Run("InstallationSteps with network permissions and firewall enabled", func(t *testing.T) { workflowData := &WorkflowData{ + Model: "claude-3-5-sonnet-20241022", EngineConfig: &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", }, NetworkPermissions: &NetworkPermissions{ Allowed: []string{"example.com", "*.trusted.com"}, @@ -53,10 +53,10 @@ func TestClaudeEngineNetworkPermissions(t *testing.T) { t.Run("ExecutionSteps without network permissions", func(t *testing.T) { workflowData := &WorkflowData{ - Name: "test-workflow", + Name: "test-workflow", + Model: "claude-3-5-sonnet-20241022", EngineConfig: &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", }, } @@ -81,10 +81,10 @@ func TestClaudeEngineNetworkPermissions(t *testing.T) { t.Run("ExecutionSteps with network permissions and firewall enabled", func(t *testing.T) { workflowData := &WorkflowData{ - Name: "test-workflow", + Name: "test-workflow", + Model: "claude-3-5-sonnet-20241022", EngineConfig: &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", }, NetworkPermissions: &NetworkPermissions{ Allowed: []string{"example.com"}, @@ -123,8 +123,7 @@ func TestClaudeEngineNetworkPermissions(t *testing.T) { t.Run("ExecutionSteps with empty allowed domains and firewall enabled", func(t *testing.T) { config := &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", } networkPermissions := &NetworkPermissions{ @@ -132,7 +131,7 @@ func TestClaudeEngineNetworkPermissions(t *testing.T) { Firewall: &FirewallConfig{Enabled: true}, } - steps := engine.GetExecutionSteps(&WorkflowData{Name: "test-workflow", EngineConfig: config, NetworkPermissions: networkPermissions}, "test-log") + steps := engine.GetExecutionSteps(&WorkflowData{Name: "test-workflow", Model: "claude-3-5-sonnet-20241022", EngineConfig: config, NetworkPermissions: networkPermissions}, "test-log") if len(steps) == 0 { t.Fatal("Expected at least one execution step") } @@ -150,8 +149,7 @@ func TestClaudeEngineNetworkPermissions(t *testing.T) { // Note: This test uses Claude engine but with non-Claude engine config ID // The behavior should still be based on the actual engine type, not the config ID config := &EngineConfig{ - ID: "codex", // Non-Claude engine ID - Model: "gpt-4", + ID: "codex", // Non-Claude engine ID } networkPermissions := &NetworkPermissions{ @@ -159,7 +157,7 @@ func TestClaudeEngineNetworkPermissions(t *testing.T) { Firewall: &FirewallConfig{Enabled: true}, } - steps := engine.GetExecutionSteps(&WorkflowData{Name: "test-workflow", EngineConfig: config, NetworkPermissions: networkPermissions}, "test-log") + steps := engine.GetExecutionSteps(&WorkflowData{Name: "test-workflow", Model: "gpt-4", EngineConfig: config, NetworkPermissions: networkPermissions}, "test-log") if len(steps) == 0 { t.Fatal("Expected at least one execution step") } @@ -179,8 +177,7 @@ func TestNetworkPermissionsIntegration(t *testing.T) { t.Run("Full workflow generation with AWF", func(t *testing.T) { engine := NewClaudeEngine() config := &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", } networkPermissions := &NetworkPermissions{ @@ -189,7 +186,7 @@ func TestNetworkPermissionsIntegration(t *testing.T) { } // Get installation steps - steps := engine.GetInstallationSteps(&WorkflowData{EngineConfig: config, NetworkPermissions: networkPermissions}) + steps := engine.GetInstallationSteps(&WorkflowData{Model: "claude-3-5-sonnet-20241022", EngineConfig: config, NetworkPermissions: networkPermissions}) // With AWF enabled: Node.js setup + AWF install + Claude install = 3 steps // (secret validation is now in the activation job) if len(steps) != 3 { @@ -203,7 +200,7 @@ func TestNetworkPermissionsIntegration(t *testing.T) { } // Get execution steps - execSteps := engine.GetExecutionSteps(&WorkflowData{Name: "test-workflow", EngineConfig: config, NetworkPermissions: networkPermissions}, "test-log") + execSteps := engine.GetExecutionSteps(&WorkflowData{Name: "test-workflow", Model: "claude-3-5-sonnet-20241022", EngineConfig: config, NetworkPermissions: networkPermissions}, "test-log") if len(execSteps) == 0 { t.Fatal("Expected at least one execution step") } @@ -241,8 +238,7 @@ func TestNetworkPermissionsIntegration(t *testing.T) { engine2 := NewClaudeEngine() config := &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", } networkPermissions := &NetworkPermissions{ @@ -250,15 +246,15 @@ func TestNetworkPermissionsIntegration(t *testing.T) { Firewall: &FirewallConfig{Enabled: true}, } - steps1 := engine1.GetInstallationSteps(&WorkflowData{EngineConfig: config, NetworkPermissions: networkPermissions}) - steps2 := engine2.GetInstallationSteps(&WorkflowData{EngineConfig: config, NetworkPermissions: networkPermissions}) + steps1 := engine1.GetInstallationSteps(&WorkflowData{Model: "claude-3-5-sonnet-20241022", EngineConfig: config, NetworkPermissions: networkPermissions}) + steps2 := engine2.GetInstallationSteps(&WorkflowData{Model: "claude-3-5-sonnet-20241022", EngineConfig: config, NetworkPermissions: networkPermissions}) if len(steps1) != len(steps2) { t.Errorf("Engine instances should produce same number of steps, got %d and %d", len(steps1), len(steps2)) } - execSteps1 := engine1.GetExecutionSteps(&WorkflowData{Name: "test", EngineConfig: config, NetworkPermissions: networkPermissions}, "log") - execSteps2 := engine2.GetExecutionSteps(&WorkflowData{Name: "test", EngineConfig: config, NetworkPermissions: networkPermissions}, "log") + execSteps1 := engine1.GetExecutionSteps(&WorkflowData{Name: "test", Model: "claude-3-5-sonnet-20241022", EngineConfig: config, NetworkPermissions: networkPermissions}, "log") + execSteps2 := engine2.GetExecutionSteps(&WorkflowData{Name: "test", Model: "claude-3-5-sonnet-20241022", EngineConfig: config, NetworkPermissions: networkPermissions}, "log") if len(execSteps1) != len(execSteps2) { t.Errorf("Engine instances should produce same number of execution steps, got %d and %d", len(execSteps1), len(execSteps2)) diff --git a/pkg/workflow/claude_engine_test.go b/pkg/workflow/claude_engine_test.go index cf0e29c4328..314bcfa8660 100644 --- a/pkg/workflow/claude_engine_test.go +++ b/pkg/workflow/claude_engine_test.go @@ -515,11 +515,11 @@ func TestClaudeEngineWithVersion(t *testing.T) { engineConfig := &EngineConfig{ ID: "claude", Version: "v1.2.3", - Model: "claude-3-5-sonnet-20241022", } workflowData := &WorkflowData{ Name: "test-workflow", + Model: "claude-3-5-sonnet-20241022", EngineConfig: engineConfig, } @@ -567,12 +567,12 @@ func TestClaudeEngineWithoutVersion(t *testing.T) { // Test without version (should use default) engineConfig := &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", } workflowData := &WorkflowData{ Name: "test-workflow", + Model: "claude-3-5-sonnet-20241022", EngineConfig: engineConfig, } diff --git a/pkg/workflow/codex_engine.go b/pkg/workflow/codex_engine.go index c85586d9e3c..9f53295235a 100644 --- a/pkg/workflow/codex_engine.go +++ b/pkg/workflow/codex_engine.go @@ -205,7 +205,7 @@ func (e *CodexEngine) GetHarnessScriptName() string { // GetExecutionSteps returns the GitHub Actions steps for executing Codex func (e *CodexEngine) GetExecutionSteps(workflowData *WorkflowData, logFile string) []GitHubActionStep { - modelConfigured := workflowData.EngineConfig != nil && workflowData.EngineConfig.Model != "" + modelConfigured := workflowData.Model != "" firewallEnabled := isFirewallEnabled(workflowData) codexEngineLog.Printf("Building Codex execution steps: workflow=%s, modelConfigured=%v, firewall=%v", workflowData.Name, modelConfigured, firewallEnabled) @@ -487,8 +487,8 @@ mkdir -p "$CODEX_HOME/logs" // When model is configured (static or GitHub Actions expression), set the env var directly. // When not configured, use the GitHub variable fallback so users can set a default. if modelConfigured { - codexEngineLog.Printf("Setting %s env var for model: %s", modelEnvVar, workflowData.EngineConfig.Model) - env[modelEnvVar] = workflowData.EngineConfig.Model + codexEngineLog.Printf("Setting %s env var for model: %s", modelEnvVar, workflowData.Model) + env[modelEnvVar] = workflowData.Model } else { env[modelEnvVar] = compilerenv.BuildModelOverrideExpression(modelEnvVar, compilerenv.DefaultModelCodex, constants.CodexDefaultModel) } diff --git a/pkg/workflow/compiler_activation_job_test.go b/pkg/workflow/compiler_activation_job_test.go index 2f564c6410b..f819dc61cf6 100644 --- a/pkg/workflow/compiler_activation_job_test.go +++ b/pkg/workflow/compiler_activation_job_test.go @@ -1072,9 +1072,9 @@ func TestBuildActivationJobWrapsRepositoryStepErrors(t *testing.T) { data := &WorkflowData{ Name: "test-workflow", NeedsTextOutput: true, + Model: "/bad-provider", EngineConfig: &EngineConfig{ - ID: "opencode", - Model: "/bad-provider", + ID: "opencode", }, } diff --git a/pkg/workflow/compiler_model_pricing.go b/pkg/workflow/compiler_model_pricing.go index a8fac06629d..7b21bfacc47 100644 --- a/pkg/workflow/compiler_model_pricing.go +++ b/pkg/workflow/compiler_model_pricing.go @@ -20,17 +20,17 @@ var compilerModelPricingLog = logger.New("workflow:compiler_model_pricing") // Frontmatter-provided pricing always takes precedence; models already present in the // embedded actions/setup/js/models.json are skipped by the resolver (the runtime will // supply their pricing without an override). -func (c *Compiler) resolveModelPricingIfMissing(modelCosts map[string]any, engineConfig *EngineConfig) map[string]any { +func (c *Compiler) resolveModelPricingIfMissing(modelCosts map[string]any, workflowData *WorkflowData) map[string]any { if c.modelPricingResolver == nil { return modelCosts } - if engineConfig == nil || engineConfig.Model == "" { + if workflowData == nil || workflowData.Model == "" { return modelCosts } - provider, model, ok := resolveProviderAndModelForPricing(engineConfig) + provider, model, ok := resolveProviderAndModelForPricing(workflowData) if !ok { - compilerModelPricingLog.Printf("Skipping external pricing lookup: unable to normalize provider/model for %q", engineConfig.Model) + compilerModelPricingLog.Printf("Skipping external pricing lookup: unable to normalize provider/model for %q", workflowData.Model) return modelCosts } @@ -59,6 +59,9 @@ func (c *Compiler) resolveModelPricingIfMissing(modelCosts map[string]any, engin // lookup. It checks the EngineConfig fields in priority order and falls back to a // well-known mapping from engine ID. func resolveEngineProviderForPricing(engineConfig *EngineConfig) string { + if engineConfig == nil { + return "github-copilot" // default provider when no engine is specified + } if engineConfig.LLMProvider != "" { return normalizeProviderForPricing(engineConfig.LLMProvider) } @@ -87,9 +90,9 @@ func normalizeProviderForPricing(provider string) string { } } -func resolveProviderAndModelForPricing(engineConfig *EngineConfig) (string, string, bool) { - provider := resolveEngineProviderForPricing(engineConfig) - model := strings.ToLower(strings.TrimSpace(engineConfig.Model)) +func resolveProviderAndModelForPricing(workflowData *WorkflowData) (string, string, bool) { + provider := resolveEngineProviderForPricing(workflowData.EngineConfig) + model := strings.ToLower(strings.TrimSpace(workflowData.Model)) if model == "" { return "", "", false } diff --git a/pkg/workflow/compiler_model_pricing_test.go b/pkg/workflow/compiler_model_pricing_test.go index e16c9c2f504..86955d4dcb9 100644 --- a/pkg/workflow/compiler_model_pricing_test.go +++ b/pkg/workflow/compiler_model_pricing_test.go @@ -162,7 +162,7 @@ func TestResolveEngineProviderForPricing(t *testing.T) { func TestResolveModelPricingIfMissing_NilResolver(t *testing.T) { c := &Compiler{} // No resolver registered โ€” should be a no-op. - result := c.resolveModelPricingIfMissing(nil, &EngineConfig{Model: "gpt-99", ID: "codex"}) + result := c.resolveModelPricingIfMissing(nil, &WorkflowData{Model: "gpt-99", EngineConfig: &EngineConfig{ID: "codex"}}) assert.Nil(t, result) } @@ -182,7 +182,7 @@ func TestResolveModelPricingIfMissing_AlreadyPresent(t *testing.T) { called = true return nil, false }) - result := c.resolveModelPricingIfMissing(existing, &EngineConfig{Model: "gpt-99", ID: "codex"}) + result := c.resolveModelPricingIfMissing(existing, &WorkflowData{Model: "gpt-99", EngineConfig: &EngineConfig{ID: "codex"}}) assert.False(t, called, "resolver should not be called when pricing is already present") assert.Equal(t, existing, result) } @@ -196,7 +196,7 @@ func TestResolveModelPricingIfMissing_InjectsFromResolver(t *testing.T) { return nil, false }) - result := c.resolveModelPricingIfMissing(nil, &EngineConfig{Model: "claude-new-model", ID: "claude"}) + result := c.resolveModelPricingIfMissing(nil, &WorkflowData{Model: "claude-new-model", EngineConfig: &EngineConfig{ID: "claude"}}) require.NotNil(t, result) providers := result["providers"].(map[string]any) require.Contains(t, providers, "anthropic") @@ -209,7 +209,7 @@ func TestResolveModelPricingIfMissing_ResolverReturnsNothing(t *testing.T) { c.SetModelPricingResolver(func(_ context.Context, _, _ string) (map[string]float64, bool) { return nil, false }) - result := c.resolveModelPricingIfMissing(nil, &EngineConfig{Model: "mystery-model", ID: "claude"}) + result := c.resolveModelPricingIfMissing(nil, &WorkflowData{Model: "mystery-model", EngineConfig: &EngineConfig{ID: "claude"}}) // Should return the original (nil) map unchanged. assert.Nil(t, result) } @@ -222,9 +222,9 @@ func TestResolveModelPricingIfMissing_SplitsQualifiedModelAndNormalizesProvider( return map[string]float64{"input": 3e-06}, true }) - result := c.resolveModelPricingIfMissing(nil, &EngineConfig{ - ID: "unknown-engine", - Model: "github_models/claude-sonnet-4.6", + result := c.resolveModelPricingIfMissing(nil, &WorkflowData{ + Model: "github_models/claude-sonnet-4.6", + EngineConfig: &EngineConfig{ID: "unknown-engine"}, }) require.NotNil(t, result) providers := result["providers"].(map[string]any) @@ -241,9 +241,9 @@ func TestResolveModelPricingIfMissing_SkipsWhenProviderCannotBeNormalized(t *tes return map[string]float64{"input": 1e-06}, true }) - result := c.resolveModelPricingIfMissing(nil, &EngineConfig{ - ID: "unknown-engine", - Model: "claude-sonnet-4.6", + result := c.resolveModelPricingIfMissing(nil, &WorkflowData{ + Model: "claude-sonnet-4.6", + EngineConfig: &EngineConfig{ID: "unknown-engine"}, }) assert.False(t, called) @@ -258,7 +258,7 @@ func TestResolveModelPricingIfMissing_SkipsMalformedQualifiedModel(t *testing.T) return map[string]float64{"input": 1e-06}, true }) - assert.Nil(t, c.resolveModelPricingIfMissing(nil, &EngineConfig{Model: "/gpt-4.1"})) - assert.Nil(t, c.resolveModelPricingIfMissing(nil, &EngineConfig{Model: "openai/"})) + assert.Nil(t, c.resolveModelPricingIfMissing(nil, &WorkflowData{Model: "/gpt-4.1", EngineConfig: &EngineConfig{}})) + assert.Nil(t, c.resolveModelPricingIfMissing(nil, &WorkflowData{Model: "openai/", EngineConfig: &EngineConfig{}})) assert.False(t, called) } diff --git a/pkg/workflow/compiler_orchestrator_engine.go b/pkg/workflow/compiler_orchestrator_engine.go index e2f05c77b5d..3282cf48f65 100644 --- a/pkg/workflow/compiler_orchestrator_engine.go +++ b/pkg/workflow/compiler_orchestrator_engine.go @@ -18,6 +18,7 @@ var orchestratorEngineLog = logger.New("workflow:compiler_orchestrator_engine") // engineSetupResult holds the results of engine configuration and validation type engineSetupResult struct { engineSetting string + model string engineConfig *EngineConfig agenticEngine CodingAgentEngine networkPermissions *NetworkPermissions @@ -35,7 +36,7 @@ type engineSetupResult struct { // - Strict mode validations func (c *Compiler) setupEngineAndImports(result *parser.FrontmatterResult, cleanPath string, content []byte, markdownDir string) (*engineSetupResult, error) { orchestratorEngineLog.Printf("Setting up engine and processing imports") - engineSetting, engineConfig := c.ExtractEngineConfig(result.Frontmatter) + engineSetting, engineConfig, model := c.ExtractEngineConfig(result.Frontmatter) preservedMaxTurns, preservedMaxAICredits, preservedMaxRuns, preservedMaxTurnCacheMisses := extractEngineBudgetLimits(engineConfig) if err := c.validateAndRegisterInlineEngineConfig(engineConfig); err != nil { return nil, err @@ -64,11 +65,11 @@ func (c *Compiler) setupEngineAndImports(result *parser.FrontmatterResult, clean return nil, err } sandboxConfig = mergeImportedSandboxAgentMounts(sandboxConfig, importsResult.MergedSandboxAgentMounts) - engineSetting, engineConfig, err = c.resolveEngineFromIncludesAndImports(result, markdownDir, importsResult, engineSetting, engineConfig) + engineSetting, engineConfig, model, err = c.resolveEngineFromIncludesAndImports(result, markdownDir, importsResult, engineSetting, engineConfig, model) if err != nil { return nil, err } - engineConfig = c.applyEngineImportDefaults(engineConfig, engineSetting, importsResult, preservedMaxTurns, preservedMaxAICredits, preservedMaxRuns, preservedMaxTurnCacheMisses) + engineConfig, model = c.applyEngineImportDefaults(engineConfig, model, engineSetting, importsResult, preservedMaxTurns, preservedMaxAICredits, preservedMaxRuns, preservedMaxTurnCacheMisses) agenticEngine, configSteps, err := c.resolveEngineRuntimeConfig(engineSetting, engineConfig) if err != nil { return nil, err @@ -78,6 +79,7 @@ func (c *Compiler) setupEngineAndImports(result *parser.FrontmatterResult, clean } return &engineSetupResult{ engineSetting: engineSetting, + model: model, engineConfig: engineConfig, agenticEngine: agenticEngine, networkPermissions: networkPermissions, @@ -254,37 +256,38 @@ func (c *Compiler) resolveEngineFromIncludesAndImports( importsResult *parser.ImportsResult, engineSetting string, engineConfig *EngineConfig, -) (string, *EngineConfig, error) { + model string, +) (string, *EngineConfig, string, error) { orchestratorEngineLog.Printf("Expanding includes for engine configurations") includedEngines, err := parser.ExpandIncludesForEngines(result.Markdown, markdownDir) if err != nil { orchestratorEngineLog.Printf("Failed to expand includes for engines: %v", err) - return "", nil, fmt.Errorf("failed to expand includes for engines: %w", err) + return "", nil, "", fmt.Errorf("failed to expand includes for engines: %w", err) } allEngines := append(importsResult.MergedEngines, includedEngines...) orchestratorEngineLog.Printf("Validating single engine specification") finalEngineSetting, err := c.validateSingleEngineSpecification(engineSetting, allEngines) if err != nil { orchestratorEngineLog.Printf("Engine specification validation failed: %v", err) - return "", nil, err + return "", nil, "", err } if finalEngineSetting != "" { engineSetting = finalEngineSetting } for _, engineJSON := range allEngines { if err := c.registerNamedEngineDefinitionFromJSON(engineJSON); err != nil { - return "", nil, fmt.Errorf("failed to register engine definition from included file: %w", err) + return "", nil, "", fmt.Errorf("failed to register engine definition from included file: %w", err) } } if engineConfig == nil && len(allEngines) > 0 { orchestratorEngineLog.Printf("Extracting engine config from included file") - engineConfig, err = c.extractEngineConfigFromJSON(allEngines[0]) + engineConfig, model, err = c.extractEngineConfigFromJSON(allEngines[0]) if err != nil { orchestratorEngineLog.Printf("Failed to extract engine config: %v", err) - return "", nil, fmt.Errorf("failed to extract engine config from included file: %w", err) + return "", nil, "", fmt.Errorf("failed to extract engine config from included file: %w", err) } if err := c.validateAndRegisterInlineEngineConfig(engineConfig); err != nil { - return "", nil, err + return "", nil, "", err } } if engineSetting == "" { @@ -298,7 +301,7 @@ func (c *Compiler) resolveEngineFromIncludesAndImports( engineConfig.ID = engineSetting orchestratorEngineLog.Printf("Normalized engineConfig.ID from engineSetting: %s", engineSetting) } - return engineSetting, engineConfig, nil + return engineSetting, engineConfig, model, nil } // applyEngineImportDefaults merges import-derived engine defaults into engineConfig. @@ -307,13 +310,14 @@ func (c *Compiler) resolveEngineFromIncludesAndImports( // when the input engineConfig is nil. func (c *Compiler) applyEngineImportDefaults( engineConfig *EngineConfig, + model string, engineSetting string, importsResult *parser.ImportsResult, preservedMaxTurns string, preservedMaxAICredits int64, preservedMaxRuns int, preservedMaxTurnCacheMisses int, -) *EngineConfig { +) (*EngineConfig, string) { if engineConfig == nil { engineConfig = &EngineConfig{ID: engineSetting} } @@ -382,11 +386,11 @@ func (c *Compiler) applyEngineImportDefaults( engineConfig.MCPSessionTimeout = importsResult.MergedEngineMCPSessionTimeout orchestratorEngineLog.Printf("Applied engine.mcp.session-timeout from import: %s", engineConfig.MCPSessionTimeout) } - if engineConfig.Model == "" && importsResult.MergedEngineModel != "" { - engineConfig.Model = importsResult.MergedEngineModel - orchestratorEngineLog.Printf("Applied engine.model preference from import: %s", engineConfig.Model) + if model == "" && importsResult.MergedEngineModel != "" { + model = importsResult.MergedEngineModel + orchestratorEngineLog.Printf("Applied model preference from import: %s", model) } - return engineConfig + return engineConfig, model } func (c *Compiler) resolveEngineRuntimeConfig(engineSetting string, engineConfig *EngineConfig) (CodingAgentEngine, []map[string]any, error) { diff --git a/pkg/workflow/compiler_orchestrator_workflow.go b/pkg/workflow/compiler_orchestrator_workflow.go index b8b942a97f3..8512dee7b91 100644 --- a/pkg/workflow/compiler_orchestrator_workflow.go +++ b/pkg/workflow/compiler_orchestrator_workflow.go @@ -132,7 +132,7 @@ func (c *Compiler) validateWorkflowBuildContext(ctx *workflowBuildContext) error func (c *Compiler) validateWorkflowModelAliasMap(ctx *workflowBuildContext) error { var engineModel string if ctx.workflowData.EngineConfig != nil { - engineModel = ctx.workflowData.EngineConfig.Model + engineModel = ctx.workflowData.Model } return c.validateModelAliasMap(ctx.workflowData.ModelMappings, nil, engineModel, ctx.cleanPath) } diff --git a/pkg/workflow/compiler_safe_outputs_job.go b/pkg/workflow/compiler_safe_outputs_job.go index 362917c7161..5ac687eed37 100644 --- a/pkg/workflow/compiler_safe_outputs_job.go +++ b/pkg/workflow/compiler_safe_outputs_job.go @@ -831,8 +831,8 @@ func (c *Compiler) buildJobLevelSafeOutputEnvVars(data *WorkflowData, workflowID } // Prefer explicit compile-time model; fall back to the runtime model captured by the // activation job so footers always show the actual model used for auditability. - if data.EngineConfig.Model != "" { - envVars["GH_AW_ENGINE_MODEL"] = fmt.Sprintf("%q", data.EngineConfig.Model) + if data.Model != "" { + envVars["GH_AW_ENGINE_MODEL"] = fmt.Sprintf("%q", data.Model) } else { envVars["GH_AW_ENGINE_MODEL"] = fmt.Sprintf("${{ needs.%s.outputs.model }}", constants.AgentJobName) } diff --git a/pkg/workflow/compiler_safe_outputs_job_test.go b/pkg/workflow/compiler_safe_outputs_job_test.go index be626645f6b..0866c1b42c3 100644 --- a/pkg/workflow/compiler_safe_outputs_job_test.go +++ b/pkg/workflow/compiler_safe_outputs_job_test.go @@ -593,11 +593,11 @@ func TestBuildJobLevelSafeOutputEnvVars(t *testing.T) { { name: "with engine config", workflowData: &WorkflowData{ - Name: "Test Workflow", + Name: "Test Workflow", + Model: "gpt-4", EngineConfig: &EngineConfig{ ID: "copilot", Version: "0.0.375", - Model: "gpt-4", }, SafeOutputs: &SafeOutputsConfig{}, }, diff --git a/pkg/workflow/compiler_yaml_header.go b/pkg/workflow/compiler_yaml_header.go index a7a85f8b63a..6ca2ebd3e3c 100644 --- a/pkg/workflow/compiler_yaml_header.go +++ b/pkg/workflow/compiler_yaml_header.go @@ -34,13 +34,13 @@ func (c *Compiler) generateWorkflowHeader(yaml *strings.Builder, data *WorkflowD agentInfo.AgentID = data.AI } // Agent model: only include if statically configured - if data.EngineConfig != nil && data.EngineConfig.Model != "" { - agentInfo.AgentModel = data.EngineConfig.Model + if data.Model != "" { + agentInfo.AgentModel = data.Model } // Detection agent info: only if threat detection has its own engine config if data.SafeOutputs != nil && data.SafeOutputs.ThreatDetection != nil && data.SafeOutputs.ThreatDetection.EngineConfig != nil { agentInfo.DetectionAgentID = data.SafeOutputs.ThreatDetection.EngineConfig.ID - agentInfo.DetectionAgentModel = data.SafeOutputs.ThreatDetection.EngineConfig.Model + agentInfo.DetectionAgentModel = data.SafeOutputs.ThreatDetection.Model } agentInfo.EngineVersions = collectEngineVersionsForMetadata(data) agentInfo.AgentImageRunner = resolveAgentImageRunnerIdentifier(data.RawFrontmatter) diff --git a/pkg/workflow/compiler_yaml_step_lifecycle.go b/pkg/workflow/compiler_yaml_step_lifecycle.go index a83ffc65a72..a07ac5ee03e 100644 --- a/pkg/workflow/compiler_yaml_step_lifecycle.go +++ b/pkg/workflow/compiler_yaml_step_lifecycle.go @@ -56,7 +56,7 @@ func (c *Compiler) generateCreateAwInfo(yaml *strings.Builder, data *WorkflowDat } // Model - explicit config or runtime env var via vars context - modelConfigured := data.EngineConfig != nil && data.EngineConfig.Model != "" + modelConfigured := data.Model != "" var modelEnvVar string if !modelConfigured { switch engineID { @@ -133,7 +133,7 @@ func (c *Compiler) generateCreateAwInfo(yaml *strings.Builder, data *WorkflowDat fmt.Fprintf(yaml, " GH_AW_INFO_ENGINE_ID: \"%s\"\n", engineID) fmt.Fprintf(yaml, " GH_AW_INFO_ENGINE_NAME: \"%s\"\n", engine.GetDisplayName()) if modelConfigured { - fmt.Fprintf(yaml, " GH_AW_INFO_MODEL: \"%s\"\n", data.EngineConfig.Model) + fmt.Fprintf(yaml, " GH_AW_INFO_MODEL: \"%s\"\n", data.Model) } 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)". diff --git a/pkg/workflow/copilot_engine_execution.go b/pkg/workflow/copilot_engine_execution.go index 5d379d0b0bc..15fb7b3afb0 100644 --- a/pkg/workflow/copilot_engine_execution.go +++ b/pkg/workflow/copilot_engine_execution.go @@ -155,7 +155,7 @@ func (e *CopilotEngine) GetExecutionSteps(workflowData *WorkflowData, logFile st providerOverrideBYOK := llmProvider != LLMProviderGitHub && sandboxEnabled isBYOKMode := providerOverrideBYOK || engineEnvHasKey(workflowData, constants.CopilotProviderBaseURL) isDetectionJob := workflowData.SafeOutputs == nil - modelConfigured := workflowData.EngineConfig != nil && workflowData.EngineConfig.Model != "" + modelConfigured := workflowData.Model != "" copilotArgs := e.buildCopilotArgs(workflowData) mkdirCommands := buildCopilotMkdirCommands(copilotArgs) modelEnvVar := getCopilotModelEnvVar(isDetectionJob) @@ -588,8 +588,8 @@ func (e *CopilotEngine) addCopilotModelEnv(env map[string]string, workflowData * // The model is always passed via the native COPILOT_MODEL env var, which the Copilot CLI reads directly. // When model is not configured, map the GitHub org variable to COPILOT_MODEL so users can set a default. if modelConfigured { - copilotExecLog.Printf("Setting %s env var for model: %s", constants.CopilotCLIModelEnvVar, workflowData.EngineConfig.Model) - env[constants.CopilotCLIModelEnvVar] = workflowData.EngineConfig.Model + copilotExecLog.Printf("Setting %s env var for model: %s", constants.CopilotCLIModelEnvVar, workflowData.Model) + env[constants.CopilotCLIModelEnvVar] = workflowData.Model return } env[constants.CopilotCLIModelEnvVar] = compilerenv.BuildModelOverrideExpression(modelEnvVar, compilerenv.DefaultModelCopilot, constants.CopilotBYOKDefaultModel) diff --git a/pkg/workflow/domains.go b/pkg/workflow/domains.go index 939ab3f3fab..e67d07ca26f 100644 --- a/pkg/workflow/domains.go +++ b/pkg/workflow/domains.go @@ -908,7 +908,7 @@ func (c *Compiler) computeAllowedDomainsForSanitization(data *WorkflowData) (str constants.PiEngine, constants.OpenCodeEngine: model := "" if data.EngineConfig != nil { - model = data.EngineConfig.Model + model = data.Model } var err error base, err = GetAllowedDomainsForEngineWithModel(engine, model, data.NetworkPermissions, data.Tools, data.Runtimes) diff --git a/pkg/workflow/enable_api_proxy_test.go b/pkg/workflow/enable_api_proxy_test.go index 410c0000ea7..d3ea61874f7 100644 --- a/pkg/workflow/enable_api_proxy_test.go +++ b/pkg/workflow/enable_api_proxy_test.go @@ -147,10 +147,10 @@ func TestEngineAWFEnableApiProxy(t *testing.T) { "cli-proxy": true, } workflowData := &WorkflowData{ - Name: "test-workflow", + Name: "test-workflow", + Model: "copilot/claude-sonnet-4-20250514", EngineConfig: &EngineConfig{ - ID: "pi", - Model: "copilot/claude-sonnet-4-20250514", + ID: "pi", }, Tools: toolsRaw, ParsedTools: NewTools(toolsRaw), diff --git a/pkg/workflow/engine.go b/pkg/workflow/engine.go index e337de5f3b0..8032698194e 100644 --- a/pkg/workflow/engine.go +++ b/pkg/workflow/engine.go @@ -4,9 +4,11 @@ import ( "encoding/json" "errors" "fmt" + "os" "strconv" "strings" + "github.com/github/gh-aw/pkg/console" "github.com/github/gh-aw/pkg/constants" "github.com/github/gh-aw/pkg/logger" "github.com/github/gh-aw/pkg/parser" @@ -44,7 +46,6 @@ func toEngineEnvValueString(value any) (string, bool) { type EngineConfig struct { ID string Version string - Model string LLMProvider string // Inference provider override for this engine (engine.provider / engine.model-provider) PermissionMode string MaxTurns string @@ -193,8 +194,9 @@ func (e *EngineConfig) GetMaxTurnCacheMisses() int { return e.MaxTurnCacheMisses } -// ExtractEngineConfig extracts engine configuration from frontmatter, supporting both string and object formats -func (c *Compiler) ExtractEngineConfig(frontmatter map[string]any) (string, *EngineConfig) { +// ExtractEngineConfig extracts engine configuration from frontmatter, supporting both string and object formats. +// It returns the resolved engine setting, the parsed engine configuration, and the resolved model string. +func (c *Compiler) ExtractEngineConfig(frontmatter map[string]any) (string, *EngineConfig, string) { topLevelMaxTurns := parseMaxTurnsValue(frontmatter["max-turns"]) topLevelMaxToolDenials := parseMaxToolDenialsValue(frontmatter["max-tool-denials"]) topLevelMaxAICredits := parseMaxAICreditsValue(frontmatter["max-ai-credits"]) @@ -203,6 +205,7 @@ func (c *Compiler) ExtractEngineConfig(frontmatter map[string]any) (string, *Eng if topLevelMaxRuns == 0 { topLevelMaxRuns = parseMaxRunsValue(frontmatter["max-runs"]) } + topLevelModel, _ := frontmatter["model"].(string) if engine, exists := frontmatter["engine"]; exists { engineLog.Print("Extracting engine configuration from frontmatter") @@ -217,13 +220,14 @@ func (c *Compiler) ExtractEngineConfig(frontmatter map[string]any) (string, *Eng MaxRuns: topLevelMaxRuns, MaxTurnCacheMisses: topLevelMaxTurnCacheMisses, MaxAICredits: topLevelMaxAICredits, - } + }, topLevelModel } // Handle object format if engineObj, ok := engine.(map[string]any); ok { engineLog.Print("Found engine in object format, parsing configuration") config := &EngineConfig{} + resolvedModel := "" // Detect inline definition: engine.runtime sub-object present instead of engine.id if runtime, hasRuntime := engineObj["runtime"]; hasRuntime { @@ -252,7 +256,7 @@ func (c *Compiler) ExtractEngineConfig(frontmatter map[string]any) (string, *Eng config.InlineProviderID = id } if model, ok := providerTyped["model"].(string); ok { - config.Model = model + resolvedModel = model } if auth, hasAuth := providerTyped["auth"]; hasAuth { if authObj, ok := auth.(map[string]any); ok { @@ -298,9 +302,18 @@ func (c *Compiler) ExtractEngineConfig(frontmatter map[string]any) (string, *Eng config.MaxRuns = topLevelMaxRuns config.MaxTurnCacheMisses = topLevelMaxTurnCacheMisses config.MaxAICredits = topLevelMaxAICredits + if model, hasModel := engineObj["model"]; hasModel { + if modelStr, ok := model.(string); ok { + resolvedModel = modelStr + fmt.Fprintln(os.Stderr, console.FormatWarningMessage("'engine.model' is deprecated. Use top-level 'model' instead. Run 'gh aw fix' to automatically migrate.")) + } + } + if topLevelModel != "" { + resolvedModel = topLevelModel + } engineLog.Printf("Extracted inline engine definition: runtimeID=%s, providerID=%s", config.ID, config.InlineProviderID) - return config.ID, config + return config.ID, config, resolvedModel } // Extract required 'id' field @@ -318,9 +331,14 @@ func (c *Compiler) ExtractEngineConfig(frontmatter map[string]any) (string, *Eng // Extract optional 'model' field if model, hasModel := engineObj["model"]; hasModel { if modelStr, ok := model.(string); ok { - config.Model = modelStr + resolvedModel = modelStr + fmt.Fprintln(os.Stderr, console.FormatWarningMessage("'engine.model' is deprecated. Use top-level 'model' instead. Run 'gh aw fix' to automatically migrate.")) } } + // Top-level 'model' takes precedence over engine.model. + if topLevelModel != "" { + resolvedModel = topLevelModel + } // Extract optional 'model-provider' field. providerValue, hasProvider := engineObj["model-provider"] @@ -588,23 +606,23 @@ func (c *Compiler) ExtractEngineConfig(frontmatter map[string]any) (string, *Eng } engineLog.Printf("Extracted engine configuration: ID=%s", config.ID) - return config.ID, config + return config.ID, config, resolvedModel } } - if topLevelMaxTurns != "" || topLevelMaxToolDenials != "" || topLevelMaxAICredits != 0 || topLevelMaxRuns > 0 || topLevelMaxTurnCacheMisses > 0 { + if topLevelMaxTurns != "" || topLevelMaxToolDenials != "" || topLevelMaxAICredits != 0 || topLevelMaxRuns > 0 || topLevelMaxTurnCacheMisses > 0 || topLevelModel != "" { return "", &EngineConfig{ MaxTurns: topLevelMaxTurns, MaxToolDenials: topLevelMaxToolDenials, MaxRuns: topLevelMaxRuns, MaxTurnCacheMisses: topLevelMaxTurnCacheMisses, MaxAICredits: topLevelMaxAICredits, - } + }, topLevelModel } // No engine specified engineLog.Print("No engine configuration found in frontmatter") - return "", nil + return "", nil, "" } // getAgenticEngine returns the agentic engine for the given engine setting @@ -649,15 +667,15 @@ func (c *Compiler) getAgenticEngine(engineSetting string) (CodingAgentEngine, er return nil, errors.New(errMsg) } -// extractEngineConfigFromJSON parses engine configuration from JSON string (from included files) -func (c *Compiler) extractEngineConfigFromJSON(engineJSON string) (*EngineConfig, error) { +// extractEngineConfigFromJSON parses engine configuration from JSON string (from included files). +func (c *Compiler) extractEngineConfigFromJSON(engineJSON string) (*EngineConfig, string, error) { if engineJSON == "" { - return nil, nil + return nil, "", nil } var engineData any if err := json.Unmarshal([]byte(engineJSON), &engineData); err != nil { - return nil, fmt.Errorf("failed to parse engine JSON: %w", err) + return nil, "", fmt.Errorf("failed to parse engine JSON: %w", err) } // Use the existing ExtractEngineConfig function by creating a temporary frontmatter map @@ -665,8 +683,8 @@ func (c *Compiler) extractEngineConfigFromJSON(engineJSON string) (*EngineConfig "engine": engineData, } - _, config := c.ExtractEngineConfig(tempFrontmatter) - return config, nil + _, config, model := c.ExtractEngineConfig(tempFrontmatter) + return config, model, nil } // applyEngineAuthEnv populates config.Env with AWF_AUTH_* environment variables diff --git a/pkg/workflow/engine_args_test.go b/pkg/workflow/engine_args_test.go index d46a200f623..f490149ceca 100644 --- a/pkg/workflow/engine_args_test.go +++ b/pkg/workflow/engine_args_test.go @@ -18,7 +18,7 @@ func TestEngineArgsFieldExtraction(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") } @@ -41,7 +41,7 @@ func TestEngineArgsFieldExtraction(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") } @@ -60,7 +60,7 @@ func TestEngineArgsFieldExtraction(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") } @@ -77,7 +77,7 @@ func TestEngineArgsFieldExtraction(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") } @@ -97,7 +97,7 @@ func TestEngineArgsFieldExtraction(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") } @@ -124,7 +124,7 @@ func TestEnginePermissionModeFieldExtraction(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") } @@ -140,7 +140,7 @@ func TestEnginePermissionModeFieldExtraction(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") } @@ -161,7 +161,7 @@ func TestEngineExtensionsFieldExtraction(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") } @@ -181,7 +181,7 @@ func TestEngineExtensionsFieldExtraction(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") } @@ -200,7 +200,7 @@ func TestEngineExtensionsFieldExtraction(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") } @@ -217,7 +217,7 @@ func TestEngineExtensionsFieldExtraction(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") } diff --git a/pkg/workflow/engine_concurrency_test.go b/pkg/workflow/engine_concurrency_test.go index 0fb425148dd..9ce8e5a61dc 100644 --- a/pkg/workflow/engine_concurrency_test.go +++ b/pkg/workflow/engine_concurrency_test.go @@ -110,7 +110,7 @@ func TestExtractEngineConcurrencyField(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, config := compiler.ExtractEngineConfig(tt.frontmatter) + _, config, _ := compiler.ExtractEngineConfig(tt.frontmatter) if config == nil { t.Fatalf("Expected config to be non-nil") diff --git a/pkg/workflow/engine_config_test.go b/pkg/workflow/engine_config_test.go index 4fb3290f477..7ad2f77ec5a 100644 --- a/pkg/workflow/engine_config_test.go +++ b/pkg/workflow/engine_config_test.go @@ -21,6 +21,7 @@ func TestExtractEngineConfig(t *testing.T) { frontmatter map[string]any expectedEngineSetting string expectedConfig *EngineConfig + expectedModel string }{ { name: "no engine specified", @@ -176,7 +177,8 @@ func TestExtractEngineConfig(t *testing.T) { }, }, expectedEngineSetting: "codex", - expectedConfig: &EngineConfig{ID: "codex", Model: "gpt-4o"}, + expectedConfig: &EngineConfig{ID: "codex"}, + expectedModel: "gpt-4o", }, { name: "object format - with model-provider override", @@ -233,7 +235,8 @@ func TestExtractEngineConfig(t *testing.T) { }, }, expectedEngineSetting: "claude", - expectedConfig: &EngineConfig{ID: "claude", Version: "beta", Model: "claude-3-5-sonnet-20241022"}, + expectedConfig: &EngineConfig{ID: "claude", Version: "beta"}, + expectedModel: "claude-3-5-sonnet-20241022", }, { name: "object format - with max-turns", @@ -313,7 +316,8 @@ func TestExtractEngineConfig(t *testing.T) { }, }, expectedEngineSetting: "claude", - expectedConfig: &EngineConfig{ID: "claude", Version: "beta", Model: "claude-3-5-sonnet-20241022", MaxTurns: "10"}, + expectedConfig: &EngineConfig{ID: "claude", Version: "beta", MaxTurns: "10"}, + expectedModel: "claude-3-5-sonnet-20241022", }, { // float64 is what json.Unmarshal produces for numbers when deserializing engine @@ -374,7 +378,8 @@ func TestExtractEngineConfig(t *testing.T) { }, }, expectedEngineSetting: "claude", - expectedConfig: &EngineConfig{ID: "claude", Version: "beta", Model: "claude-3-5-sonnet-20241022", MaxTurns: "5", Env: map[string]string{"AWS_REGION": "us-west-2", "API_ENDPOINT": "https://api.example.com"}}, + expectedConfig: &EngineConfig{ID: "claude", Version: "beta", MaxTurns: "5", Env: map[string]string{"AWS_REGION": "us-west-2", "API_ENDPOINT": "https://api.example.com"}}, + expectedModel: "claude-3-5-sonnet-20241022", }, { name: "object format - missing id", @@ -385,7 +390,8 @@ func TestExtractEngineConfig(t *testing.T) { }, }, expectedEngineSetting: "", - expectedConfig: &EngineConfig{Version: "beta", Model: "gpt-4o"}, + expectedConfig: &EngineConfig{Version: "beta"}, + expectedModel: "gpt-4o", }, { name: "object format - with user-agent (hyphen)", @@ -459,7 +465,8 @@ func TestExtractEngineConfig(t *testing.T) { }, }, expectedEngineSetting: "codex", - expectedConfig: &EngineConfig{ID: "codex", Version: "beta", Model: "gpt-4o", MaxTurns: "3", UserAgent: "complete-custom-agent", Env: map[string]string{"CUSTOM_VAR": "value1"}}, + expectedConfig: &EngineConfig{ID: "codex", Version: "beta", MaxTurns: "3", UserAgent: "complete-custom-agent", Env: map[string]string{"CUSTOM_VAR": "value1"}}, + expectedModel: "gpt-4o", }, { name: "object format - harness sub-object retry policy fields (integer literals)", @@ -523,7 +530,7 @@ func TestExtractEngineConfig(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - engineSetting, config := compiler.ExtractEngineConfig(test.frontmatter) + engineSetting, config, model := compiler.ExtractEngineConfig(test.frontmatter) if engineSetting != test.expectedEngineSetting { t.Errorf("Expected engineSetting '%s', got '%s'", test.expectedEngineSetting, engineSetting) @@ -547,8 +554,8 @@ func TestExtractEngineConfig(t *testing.T) { t.Errorf("Expected config.Version '%s', got '%s'", test.expectedConfig.Version, config.Version) } - if config.Model != test.expectedConfig.Model { - t.Errorf("Expected config.Model '%s', got '%s'", test.expectedConfig.Model, config.Model) + if model != test.expectedModel { + t.Errorf("Expected model '%s', got '%s'", test.expectedModel, model) } if config.MaxTurns != test.expectedConfig.MaxTurns { @@ -614,7 +621,7 @@ func TestExtractEngineConfig(t *testing.T) { func TestExtractEngineConfig_EngineAuthMapsToAWFEnv(t *testing.T) { compiler := NewCompiler() - _, config := compiler.ExtractEngineConfig(map[string]any{ + _, config, _ := compiler.ExtractEngineConfig(map[string]any{ "engine": map[string]any{ "id": "copilot", "auth": map[string]any{ @@ -648,7 +655,7 @@ func TestExtractEngineConfig_EngineAuthMapsToAWFEnv(t *testing.T) { func TestExtractEngineConfig_EngineEnvTakesPrecedenceOverEngineAuth(t *testing.T) { compiler := NewCompiler() - _, config := compiler.ExtractEngineConfig(map[string]any{ + _, config, _ := compiler.ExtractEngineConfig(map[string]any{ "engine": map[string]any{ "id": "copilot", "env": map[string]any{ @@ -669,7 +676,7 @@ func TestExtractEngineConfig_EngineEnvTakesPrecedenceOverEngineAuth(t *testing.T func TestExtractEngineConfig_AnthropicWIFMapsToAWFEnv(t *testing.T) { compiler := NewCompiler() - _, config := compiler.ExtractEngineConfig(map[string]any{ + _, config, _ := compiler.ExtractEngineConfig(map[string]any{ "engine": map[string]any{ "id": "claude", "auth": map[string]any{ @@ -710,6 +717,7 @@ func TestCompileWorkflowWithExtendedEngine(t *testing.T) { content string expectedAI string expectedConfig *EngineConfig + expectedModel string }{ { name: "string engine format", @@ -748,7 +756,8 @@ engine: This is a test workflow.`, expectedAI: "claude", - expectedConfig: &EngineConfig{ID: "claude", Version: "beta", Model: "claude-3-5-sonnet-20241022"}, + expectedConfig: &EngineConfig{ID: "claude", Version: "beta"}, + expectedModel: "claude-3-5-sonnet-20241022", }, { name: "object engine format - codex with model", @@ -768,7 +777,8 @@ engine: This is a test workflow.`, expectedAI: "codex", - expectedConfig: &EngineConfig{ID: "codex", Model: "gpt-4o"}, + expectedConfig: &EngineConfig{ID: "codex"}, + expectedModel: "gpt-4o", }, } @@ -809,8 +819,8 @@ This is a test workflow.`, t.Errorf("Expected EngineConfig.Version '%s', got '%s'", test.expectedConfig.Version, workflowData.EngineConfig.Version) } - if workflowData.EngineConfig.Model != test.expectedConfig.Model { - t.Errorf("Expected EngineConfig.Model '%s', got '%s'", test.expectedConfig.Model, workflowData.EngineConfig.Model) + if workflowData.Model != test.expectedModel { + t.Errorf("Expected WorkflowData.Model '%s', got '%s'", test.expectedModel, workflowData.Model) } } }) @@ -829,8 +839,7 @@ func TestEngineConfigurationWithModel(t *testing.T) { name: "Claude with model", engine: NewClaudeEngine(), engineConfig: &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", }, expectedModel: "claude-3-5-sonnet-20241022", expectedAPIKey: "", @@ -839,8 +848,7 @@ func TestEngineConfigurationWithModel(t *testing.T) { name: "Codex with model", engine: NewCodexEngine(), engineConfig: &EngineConfig{ - ID: "codex", - Model: "gpt-4o", + ID: "codex", }, expectedModel: "gpt-4o", expectedAPIKey: "", @@ -851,6 +859,7 @@ func TestEngineConfigurationWithModel(t *testing.T) { t.Run(tt.name, func(t *testing.T) { workflowData := &WorkflowData{ Name: "test-workflow", + Model: tt.expectedModel, EngineConfig: tt.engineConfig, } steps := tt.engine.GetExecutionSteps(workflowData, "test-log") @@ -1087,7 +1096,7 @@ func TestEngineBareFieldExtraction(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, config := compiler.ExtractEngineConfig(tt.frontmatter) + _, config, _ := compiler.ExtractEngineConfig(tt.frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") } @@ -1320,7 +1329,7 @@ func TestEngineMCPSessionTimeoutExtraction(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, config := compiler.ExtractEngineConfig(tt.frontmatter) + _, config, _ := compiler.ExtractEngineConfig(tt.frontmatter) if config == nil { t.Fatal("Expected non-nil config") } @@ -1388,7 +1397,7 @@ func TestEngineMCPToolTimeoutExtraction(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, config := compiler.ExtractEngineConfig(tt.frontmatter) + _, config, _ := compiler.ExtractEngineConfig(tt.frontmatter) if config == nil { t.Fatal("Expected non-nil config") } diff --git a/pkg/workflow/engine_definition_test.go b/pkg/workflow/engine_definition_test.go index 419b8bf97b3..b967b0e99e9 100644 --- a/pkg/workflow/engine_definition_test.go +++ b/pkg/workflow/engine_definition_test.go @@ -103,7 +103,7 @@ func TestEngineCatalog_Resolve_ConfigPassthrough(t *testing.T) { registry := NewEngineRegistry() catalog := NewEngineCatalog(registry) - cfg := &EngineConfig{ID: "copilot", Model: "gpt-4o", MaxTurns: "10"} + cfg := &EngineConfig{ID: "copilot", MaxTurns: "10"} resolved, err := catalog.Resolve("copilot", cfg) require.NoError(t, err, "copilot with config should resolve without error") assert.Equal(t, cfg, resolved.Config, "resolved Config should be the same pointer passed in") diff --git a/pkg/workflow/engine_includes_test.go b/pkg/workflow/engine_includes_test.go index e5f43f25e21..3e0e5849a52 100644 --- a/pkg/workflow/engine_includes_test.go +++ b/pkg/workflow/engine_includes_test.go @@ -595,7 +595,7 @@ func TestExtractEngineConfigFromJSON(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - config, err := compiler.extractEngineConfigFromJSON(tt.engineJSON) + config, _, err := compiler.extractEngineConfigFromJSON(tt.engineJSON) if tt.expectError { if err == nil { diff --git a/pkg/workflow/engine_inline_test.go b/pkg/workflow/engine_inline_test.go index 006472af174..59c90979af0 100644 --- a/pkg/workflow/engine_inline_test.go +++ b/pkg/workflow/engine_inline_test.go @@ -114,14 +114,14 @@ func TestExtractEngineConfig_InlineDefinition(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { c := NewCompiler() - engineSetting, config := c.ExtractEngineConfig(tt.frontmatter) + engineSetting, config, model := c.ExtractEngineConfig(tt.frontmatter) require.NotNil(t, config, "should return non-nil EngineConfig for inline definition") assert.Equal(t, tt.expectedEngineSetting, engineSetting, "engineSetting should equal runtime.id") assert.Equal(t, tt.expectedID, config.ID, "config.ID should equal runtime.id") assert.Equal(t, tt.expectInlineFlag, config.IsInlineDefinition, "IsInlineDefinition flag should be set") assert.Equal(t, tt.expectedVersion, config.Version, "Version should match runtime.version") - assert.Equal(t, tt.expectedModel, config.Model, "Model should match provider.model") + assert.Equal(t, tt.expectedModel, model, "Model should match provider.model") assert.Equal(t, tt.expectedProviderID, config.InlineProviderID, "InlineProviderID should match provider.id") if tt.expectedSecret != "" { require.NotNil(t, config.InlineProviderAuth, "InlineProviderAuth should be set when secret is expected") @@ -143,7 +143,7 @@ func TestExtractEngineConfig_InlineDefinition_NotTriggeredByIDField(t *testing.T "id": "copilot", }, } - _, config := c.ExtractEngineConfig(frontmatter) + _, config, _ := c.ExtractEngineConfig(frontmatter) require.NotNil(t, config, "should return non-nil EngineConfig") assert.Equal(t, "copilot", config.ID, "ID should be set from 'id' field") @@ -159,7 +159,7 @@ func TestExtractEngineConfig_LegacyStringFormat_Regression(t *testing.T) { for _, engineID := range []string{"copilot", "claude", "codex", "gemini"} { t.Run(engineID, func(t *testing.T) { frontmatter := map[string]any{"engine": engineID} - engineSetting, config := c.ExtractEngineConfig(frontmatter) + engineSetting, config, _ := c.ExtractEngineConfig(frontmatter) require.NotNil(t, config, "should return non-nil EngineConfig for string format") assert.Equal(t, engineID, engineSetting, "engineSetting should equal the engine string") @@ -263,7 +263,7 @@ func TestInlineEngineDefinition_ResolvesViaCatalog(t *testing.T) { }, } - _, config := c.ExtractEngineConfig(frontmatter) + _, config, _ := c.ExtractEngineConfig(frontmatter) require.NotNil(t, config, "should extract EngineConfig from inline definition") require.True(t, config.IsInlineDefinition, "should be flagged as inline definition") @@ -317,7 +317,7 @@ func TestExtractEngineConfig_InlineDefinition_Bare(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) require.NotNil(t, config, "inline definition with bare:true should produce a config") assert.True(t, config.IsInlineDefinition, "Expected inline definition") assert.True(t, config.Bare, "Expected Bare=true for inline definition with bare:true") @@ -333,7 +333,7 @@ func TestExtractEngineConfig_InlineDefinition_Bare(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) require.NotNil(t, config, "inline definition with bare:false should produce a config") assert.True(t, config.IsInlineDefinition, "Expected inline definition") assert.False(t, config.Bare, "Expected Bare=false") @@ -348,7 +348,7 @@ func TestExtractEngineConfig_InlineDefinition_Bare(t *testing.T) { }, } - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, _ := compiler.ExtractEngineConfig(frontmatter) require.NotNil(t, config, "inline definition without bare field should produce a config") assert.True(t, config.IsInlineDefinition, "Expected inline definition") assert.False(t, config.Bare, "Expected Bare=false by default for inline definition") diff --git a/pkg/workflow/engine_test.go b/pkg/workflow/engine_test.go index 22608a85292..98d498194a5 100644 --- a/pkg/workflow/engine_test.go +++ b/pkg/workflow/engine_test.go @@ -117,7 +117,7 @@ func TestEngineVersionTypeHandling(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, config := compiler.ExtractEngineConfig(tt.frontmatter) + _, config, _ := compiler.ExtractEngineConfig(tt.frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") @@ -157,7 +157,7 @@ func TestEngineVersionNotProvided(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, config := compiler.ExtractEngineConfig(tt.frontmatter) + _, config, _ := compiler.ExtractEngineConfig(tt.frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") @@ -185,7 +185,7 @@ func TestEngineVersionWithOtherFields(t *testing.T) { } compiler := NewCompiler() - _, config := compiler.ExtractEngineConfig(frontmatter) + _, config, model := compiler.ExtractEngineConfig(frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") @@ -199,8 +199,8 @@ func TestEngineVersionWithOtherFields(t *testing.T) { t.Errorf("Expected version '0.0.369', got %q", config.Version) } - if config.Model != "gpt-4" { - t.Errorf("Expected model 'gpt-4', got %q", config.Model) + if model != "gpt-4" { + t.Errorf("Expected model 'gpt-4', got %q", model) } if len(config.Env) != 1 { @@ -264,7 +264,7 @@ func TestEngineCommandField(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, config := compiler.ExtractEngineConfig(tt.frontmatter) + _, config, _ := compiler.ExtractEngineConfig(tt.frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") @@ -340,7 +340,7 @@ func TestAPITargetExtraction(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, config := compiler.ExtractEngineConfig(tt.frontmatter) + _, config, _ := compiler.ExtractEngineConfig(tt.frontmatter) if config == nil { t.Fatal("Expected config to be non-nil") diff --git a/pkg/workflow/evals_steps.go b/pkg/workflow/evals_steps.go index 0bdd199fd2b..82cacd4af60 100644 --- a/pkg/workflow/evals_steps.go +++ b/pkg/workflow/evals_steps.go @@ -166,8 +166,6 @@ func (c *Compiler) buildEvalsEngineSteps(data *WorkflowData) []string { evalsEngineConfig.APITarget = data.EngineConfig.APITarget } - evalsEngineConfig.Model = c.resolveEvalsExecutionModel(data) - // Build a minimal WorkflowData for evals engine execution. // IsDetectionRun reuses detection-style network restrictions and MaxAI credits, // which are appropriate for binary (YES/NO) evaluation tasks. @@ -179,6 +177,7 @@ func (c *Compiler) buildEvalsEngineSteps(data *WorkflowData) []string { "bash": []any{"*"}, }, SafeOutputs: nil, + Model: c.resolveEvalsExecutionModel(data), EngineConfig: evalsEngineConfig, AI: engineID, Features: data.Features, @@ -379,8 +378,8 @@ func (c *Compiler) getEvalsEngineID(data *WorkflowData) string { func (c *Compiler) resolveEvalsExecutionModel(data *WorkflowData) string { model := "" - if data.EngineConfig != nil && data.EngineConfig.Model != "" { - model = data.EngineConfig.Model + if data.Model != "" { + model = data.Model } if data.Evals != nil && data.Evals.Model != "" { model = data.Evals.Model diff --git a/pkg/workflow/evals_steps_test.go b/pkg/workflow/evals_steps_test.go index 0893dd374f6..a834aaaab2b 100644 --- a/pkg/workflow/evals_steps_test.go +++ b/pkg/workflow/evals_steps_test.go @@ -174,10 +174,10 @@ func TestBuildParseEvalsResultsStepUsesResolvedExecutionModel(t *testing.T) { compiler := NewCompiler() data := &WorkflowData{ - AI: "claude", + AI: "claude", + Model: "claude-sonnet-4.6", EngineConfig: &EngineConfig{ - ID: "claude", - Model: "claude-sonnet-4.6", + ID: "claude", }, Evals: &EvalsConfig{ Questions: []EvalDefinition{ diff --git a/pkg/workflow/firewall_default_enablement_test.go b/pkg/workflow/firewall_default_enablement_test.go index 90aea606014..ae81c55ba27 100644 --- a/pkg/workflow/firewall_default_enablement_test.go +++ b/pkg/workflow/firewall_default_enablement_test.go @@ -143,7 +143,7 @@ func TestCopilotFirewallDefaultIntegration(t *testing.T) { c.SetSkipValidation(true) // Extract engine config - engineSetting, engineConfig := c.ExtractEngineConfig(frontmatter) + engineSetting, engineConfig, _ := c.ExtractEngineConfig(frontmatter) if engineSetting != "copilot" { t.Fatalf("Expected engine 'copilot', got '%s'", engineSetting) } @@ -212,7 +212,7 @@ func TestCopilotFirewallDefaultIntegration(t *testing.T) { c.SetSkipValidation(true) // Extract engine config - engineSetting, engineConfig := c.ExtractEngineConfig(frontmatter) + engineSetting, engineConfig, _ := c.ExtractEngineConfig(frontmatter) if engineSetting != "copilot" { t.Fatalf("Expected engine 'copilot', got '%s'", engineSetting) } @@ -272,7 +272,7 @@ func TestCopilotFirewallDefaultIntegration(t *testing.T) { c.SetSkipValidation(true) // Extract engine config - engineSetting, engineConfig := c.ExtractEngineConfig(frontmatter) + engineSetting, engineConfig, _ := c.ExtractEngineConfig(frontmatter) if engineSetting != "claude" { t.Fatalf("Expected engine 'claude', got '%s'", engineSetting) } @@ -310,7 +310,7 @@ func TestDailyTeamStatusFirewallEnabled(t *testing.T) { c.SetSkipValidation(true) // Extract engine config (should default to copilot) - _, engineConfig := c.ExtractEngineConfig(frontmatter) + _, engineConfig, _ := c.ExtractEngineConfig(frontmatter) // If no engine is specified, it should default to copilot var engineID string diff --git a/pkg/workflow/firewall_workflow_test.go b/pkg/workflow/firewall_workflow_test.go index 2df0f9e02ce..4d32ccbce8f 100644 --- a/pkg/workflow/firewall_workflow_test.go +++ b/pkg/workflow/firewall_workflow_test.go @@ -19,10 +19,10 @@ import ( func TestFirewallWorkflowNetworkConfiguration(t *testing.T) { // Create workflow data with network defaults, firewall enabled, and web-fetch tool workflowData := &WorkflowData{ - Name: "firewall", + Name: "firewall", + Model: "claude-3-5-sonnet-20241022", EngineConfig: &EngineConfig{ - ID: "claude", - Model: "claude-3-5-sonnet-20241022", + ID: "claude", }, NetworkPermissions: &NetworkPermissions{ Firewall: &FirewallConfig{Enabled: true}, diff --git a/pkg/workflow/frontmatter_types.go b/pkg/workflow/frontmatter_types.go index 57b989f8d25..f4e09bb204d 100644 --- a/pkg/workflow/frontmatter_types.go +++ b/pkg/workflow/frontmatter_types.go @@ -414,6 +414,11 @@ type FrontmatterConfig struct { CheckoutConfigs []*CheckoutConfig `json:"-"` // Parsed checkout configs (not in JSON) CheckoutDisabled bool `json:"-"` // true when checkout: false is set in frontmatter + // Model is the top-level LLM model override. When set, it takes precedence over + // engine.model. Use this field instead of engine.model. + // Example: model: gpt-5.4 + Model string `json:"model,omitempty"` + // BinEval evaluations: list of binary questions evaluated after safe-outputs. // Can be a plain list (shorthand) or an object with a questions list and optional // engine-config / runs-on overrides. diff --git a/pkg/workflow/gemini_engine.go b/pkg/workflow/gemini_engine.go index ff18878b950..b2ca517bf65 100644 --- a/pkg/workflow/gemini_engine.go +++ b/pkg/workflow/gemini_engine.go @@ -172,7 +172,7 @@ func (e *GeminiEngine) GetExecutionSteps(workflowData *WorkflowData, logFile str // configured. When not configured, the Gemini CLI uses its built-in default model. // This avoids embedding the value directly in the shell command (which fails template injection // validation for GitHub Actions expressions like ${{ inputs.model }}). - modelConfigured := workflowData.EngineConfig != nil && workflowData.EngineConfig.Model != "" + modelConfigured := workflowData.Model != "" // Gemini CLI reads MCP config from .gemini/settings.json (project-level) // The conversion script (convert_gateway_config_gemini.sh) writes settings.json @@ -328,8 +328,8 @@ touch %s // template injection validation for GitHub Actions expressions like ${{ inputs.model }}). // When model is not configured, let the Gemini CLI use its built-in default model. if modelConfigured { - geminiLog.Printf("Setting %s env var for model: %s", constants.GeminiCLIModelEnvVar, workflowData.EngineConfig.Model) - env[constants.GeminiCLIModelEnvVar] = workflowData.EngineConfig.Model + geminiLog.Printf("Setting %s env var for model: %s", constants.GeminiCLIModelEnvVar, workflowData.Model) + env[constants.GeminiCLIModelEnvVar] = workflowData.Model } // Add custom environment variables from engine config. diff --git a/pkg/workflow/gemini_engine_test.go b/pkg/workflow/gemini_engine_test.go index b7f30d5c306..556c678e707 100644 --- a/pkg/workflow/gemini_engine_test.go +++ b/pkg/workflow/gemini_engine_test.go @@ -167,10 +167,9 @@ func TestGeminiEngineExecution(t *testing.T) { t.Run("with model", func(t *testing.T) { workflowData := &WorkflowData{ - Name: "test-workflow", - EngineConfig: &EngineConfig{ - Model: "gemini-1.5-pro", - }, + Name: "test-workflow", + Model: "gemini-1.5-pro", + EngineConfig: &EngineConfig{}, } steps := engine.GetExecutionSteps(workflowData, "/tmp/test.log") @@ -253,10 +252,9 @@ func TestGeminiEngineExecution(t *testing.T) { // When model is configured, use the native GEMINI_MODEL env var modelWorkflow := &WorkflowData{ - Name: "model-configured", - EngineConfig: &EngineConfig{ - Model: "gemini-2.0-flash", - }, + Name: "model-configured", + Model: "gemini-2.0-flash", + EngineConfig: &EngineConfig{}, } steps = engine.GetExecutionSteps(modelWorkflow, "/tmp/test.log") diff --git a/pkg/workflow/model_env_vars_test.go b/pkg/workflow/model_env_vars_test.go index b35af2f598c..9a048d657c2 100644 --- a/pkg/workflow/model_env_vars_test.go +++ b/pkg/workflow/model_env_vars_test.go @@ -177,11 +177,11 @@ func TestModelEnvVarInjectionForDetectionJob(t *testing.T) { // TestExplicitModelConfigOverridesEnvVar tests that explicit model configuration takes precedence func TestExplicitModelConfigOverridesEnvVar(t *testing.T) { workflowData := &WorkflowData{ - Name: "test-explicit-model", - AI: "copilot", + Name: "test-explicit-model", + AI: "copilot", + Model: "gpt-4", EngineConfig: &EngineConfig{ - ID: "copilot", - Model: "gpt-4", + ID: "copilot", }, Tools: map[string]any{ "bash": []any{"echo"}, @@ -346,11 +346,11 @@ func TestExpressionModelUsesEnvVar(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { workflowData := &WorkflowData{ - Name: "test-expression-model", - AI: tt.engine, + Name: "test-expression-model", + AI: tt.engine, + Model: tt.model, EngineConfig: &EngineConfig{ - ID: tt.engine, - Model: tt.model, + ID: tt.engine, }, Tools: map[string]any{ "bash": []any{"echo"}, @@ -402,11 +402,11 @@ func TestExpressionModelUsesEnvVar(t *testing.T) { // for Copilot use the native COPILOT_MODEL environment variable. func TestExpressionModelDetectionJobUsesEnvVar(t *testing.T) { workflowData := &WorkflowData{ - Name: "test-detection-expression-model", - AI: "copilot", + Name: "test-detection-expression-model", + AI: "copilot", + Model: "${{ inputs.model }}", EngineConfig: &EngineConfig{ - ID: "copilot", - Model: "${{ inputs.model }}", + ID: "copilot", }, Tools: map[string]any{ "bash": []any{"cat", "grep"}, diff --git a/pkg/workflow/opencode_engine_test.go b/pkg/workflow/opencode_engine_test.go index ff6f4595005..a65b1e49508 100644 --- a/pkg/workflow/opencode_engine_test.go +++ b/pkg/workflow/opencode_engine_test.go @@ -62,10 +62,9 @@ func TestOpenCodeEngineInstallationAndExecution(t *testing.T) { t.Run("firewall sets OpenCode gateway base URL and OPENAI_BASE_URL", func(t *testing.T) { workflowData := &WorkflowData{ - Name: "test-workflow", - EngineConfig: &EngineConfig{ - Model: "copilot/gpt-5", - }, + Name: "test-workflow", + Model: "copilot/gpt-5", + EngineConfig: &EngineConfig{}, NetworkPermissions: &NetworkPermissions{ Allowed: []string{"defaults"}, Firewall: &FirewallConfig{ @@ -83,10 +82,9 @@ func TestOpenCodeEngineInstallationAndExecution(t *testing.T) { t.Run("firewall passes model through awf-proxy prefix rewrite in OPENCODE_MODEL", func(t *testing.T) { workflowData := &WorkflowData{ - Name: "test-workflow", - EngineConfig: &EngineConfig{ - Model: "copilot/gpt-5", - }, + Name: "test-workflow", + Model: "copilot/gpt-5", + EngineConfig: &EngineConfig{}, NetworkPermissions: &NetworkPermissions{ Allowed: []string{"defaults"}, Firewall: &FirewallConfig{ @@ -109,7 +107,8 @@ func TestOpenCodeEngineProviderProfiles(t *testing.T) { t.Run("anthropic model uses anthropic secret", func(t *testing.T) { workflowData := &WorkflowData{ - EngineConfig: &EngineConfig{Model: "anthropic/claude-sonnet-4"}, + Model: "anthropic/claude-sonnet-4", + EngineConfig: &EngineConfig{}, ParsedTools: &ToolsConfig{}, Tools: map[string]any{}, } @@ -120,7 +119,8 @@ func TestOpenCodeEngineProviderProfiles(t *testing.T) { t.Run("openai model uses codex/openai secrets", func(t *testing.T) { workflowData := &WorkflowData{ - EngineConfig: &EngineConfig{Model: "openai/gpt-4.1"}, + Model: "openai/gpt-4.1", + EngineConfig: &EngineConfig{}, ParsedTools: &ToolsConfig{}, Tools: map[string]any{}, } diff --git a/pkg/workflow/pi_engine.go b/pkg/workflow/pi_engine.go index e19117fabfa..55f5e50aef0 100644 --- a/pkg/workflow/pi_engine.go +++ b/pkg/workflow/pi_engine.go @@ -72,10 +72,10 @@ func (e *PiEngine) ResolveLLMProvider(workflowData *WorkflowData) string { // "github-copilot/" is accepted as an alias for "copilot/" since that is the // provider name used by Pi CLI's built-in model registry. func resolvePiBackend(workflowData *WorkflowData) UniversalLLMBackend { - if workflowData == nil || workflowData.EngineConfig == nil || workflowData.EngineConfig.Model == "" { + if workflowData == nil || workflowData.EngineConfig == nil || workflowData.Model == "" { return UniversalLLMBackendCopilot } - model := workflowData.EngineConfig.Model + model := workflowData.Model if !strings.Contains(model, "/") { // No provider prefix โ€” default to Copilot (backward compatibility). return UniversalLLMBackendCopilot @@ -301,7 +301,7 @@ func (e *PiEngine) GetExecutionSteps(workflowData *WorkflowData, logFile string) } // Resolve backend and profile early so we can use them when building piArgs. - modelConfigured := workflowData.EngineConfig != nil && workflowData.EngineConfig.Model != "" + modelConfigured := workflowData.Model != "" backend := resolvePiBackend(workflowData) profile := getUniversalLLMBackendProfile(backend, hasCopilotRequestsWritePermission(workflowData)) firewallEnabled := isFirewallEnabled(workflowData) @@ -327,7 +327,7 @@ func (e *PiEngine) GetExecutionSteps(workflowData *WorkflowData, logFile string) // the firewall is disabled we use Pi's built-in provider directly. var piModelsJSONSetup string // shell fragment prepended to piCommand when needed if modelConfigured { - modelID := extractPiModelID(workflowData.EngineConfig.Model) + modelID := extractPiModelID(workflowData.Model) // Determine the env var name to use as the "apiKey" in the models.json gateway // config. Pi's resolveConfigValue() reads process.env[apiKey] at runtime to @@ -404,7 +404,7 @@ func (e *PiEngine) GetExecutionSteps(workflowData *WorkflowData, logFile string) } else { model := "" if modelConfigured { - model = workflowData.EngineConfig.Model + model = workflowData.Model } // The model was validated before reaching here; a malformed model (leading slash) // must never occur at this point โ€” panic is the correct invariant guard. @@ -455,7 +455,7 @@ touch %s } injectWorkflowCallNetworkAllowedEnv(env, workflowData) if modelConfigured { - env["GH_AW_PI_MODEL"] = workflowData.EngineConfig.Model + env["GH_AW_PI_MODEL"] = workflowData.Model } // Inject provider-specific credentials from the backend profile. diff --git a/pkg/workflow/pi_engine_test.go b/pkg/workflow/pi_engine_test.go index af0c607f8c0..bad37a5646b 100644 --- a/pkg/workflow/pi_engine_test.go +++ b/pkg/workflow/pi_engine_test.go @@ -44,7 +44,8 @@ func TestPiEngine_GetRequiredSecretNames_CopilotProvider(t *testing.T) { engine := NewPiEngine() workflowData := &WorkflowData{ Name: "test-workflow", - EngineConfig: &EngineConfig{ID: "pi", Model: "copilot/claude-sonnet-4-20250514"}, + Model: "copilot/claude-sonnet-4-20250514", + EngineConfig: &EngineConfig{ID: "pi"}, } secrets := engine.GetRequiredSecretNames(workflowData) assert.Contains(t, secrets, "COPILOT_GITHUB_TOKEN", "copilot/ prefix should require COPILOT_GITHUB_TOKEN") @@ -54,7 +55,8 @@ func TestPiEngine_GetRequiredSecretNames_AnthropicProvider(t *testing.T) { engine := NewPiEngine() workflowData := &WorkflowData{ Name: "test-workflow", - EngineConfig: &EngineConfig{ID: "pi", Model: "anthropic/claude-sonnet-4-20250514"}, + Model: "anthropic/claude-sonnet-4-20250514", + EngineConfig: &EngineConfig{ID: "pi"}, } secrets := engine.GetRequiredSecretNames(workflowData) assert.Contains(t, secrets, "ANTHROPIC_API_KEY", "anthropic/ prefix should require ANTHROPIC_API_KEY") @@ -65,7 +67,8 @@ func TestPiEngine_GetRequiredSecretNames_CodexProvider(t *testing.T) { engine := NewPiEngine() workflowData := &WorkflowData{ Name: "test-workflow", - EngineConfig: &EngineConfig{ID: "pi", Model: "codex/gpt-4o"}, + Model: "codex/gpt-4o", + EngineConfig: &EngineConfig{ID: "pi"}, } secrets := engine.GetRequiredSecretNames(workflowData) assert.Contains(t, secrets, "CODEX_API_KEY", "codex/ prefix should require CODEX_API_KEY") @@ -76,7 +79,8 @@ func TestPiEngine_GetRequiredSecretNames_NoPrefix(t *testing.T) { engine := NewPiEngine() workflowData := &WorkflowData{ Name: "test-workflow", - EngineConfig: &EngineConfig{ID: "pi", Model: "claude-sonnet-4-20250514"}, + Model: "claude-sonnet-4-20250514", + EngineConfig: &EngineConfig{ID: "pi"}, } secrets := engine.GetRequiredSecretNames(workflowData) assert.Contains(t, secrets, "COPILOT_GITHUB_TOKEN", "bare model (no prefix) should default to COPILOT_GITHUB_TOKEN") @@ -200,7 +204,8 @@ func TestPiEngine_GetExecutionSteps_WithModel(t *testing.T) { engine := NewPiEngine() workflowData := &WorkflowData{ Name: "test-workflow", - EngineConfig: &EngineConfig{ID: "pi", Model: "copilot/claude-sonnet-4"}, + Model: "copilot/claude-sonnet-4", + EngineConfig: &EngineConfig{ID: "pi"}, ParsedTools: NewTools(map[string]any{}), } steps := engine.GetExecutionSteps(workflowData, "/tmp/gh-aw/agent-stdio.log") @@ -270,7 +275,8 @@ func TestPiEngine_GetExecutionSteps_ProviderPrefixCopilot(t *testing.T) { engine := NewPiEngine() workflowData := &WorkflowData{ Name: "test-workflow", - EngineConfig: &EngineConfig{ID: "pi", Model: "copilot/claude-sonnet-4-20250514"}, + Model: "copilot/claude-sonnet-4-20250514", + EngineConfig: &EngineConfig{ID: "pi"}, ParsedTools: NewTools(map[string]any{}), } steps := engine.GetExecutionSteps(workflowData, "/tmp/gh-aw/agent-stdio.log") @@ -289,7 +295,8 @@ func TestPiEngine_GetExecutionSteps_ProviderPrefixAnthropic(t *testing.T) { engine := NewPiEngine() workflowData := &WorkflowData{ Name: "test-workflow", - EngineConfig: &EngineConfig{ID: "pi", Model: "anthropic/claude-sonnet-4-20250514"}, + Model: "anthropic/claude-sonnet-4-20250514", + EngineConfig: &EngineConfig{ID: "pi"}, ParsedTools: NewTools(map[string]any{}), } steps := engine.GetExecutionSteps(workflowData, "/tmp/gh-aw/agent-stdio.log") @@ -312,7 +319,8 @@ func TestPiEngine_GetExecutionSteps_FirewallCopilotProvider(t *testing.T) { } workflowData := &WorkflowData{ Name: "test-workflow", - EngineConfig: &EngineConfig{ID: "pi", Model: "copilot/claude-sonnet-4-20250514"}, + Model: "copilot/claude-sonnet-4-20250514", + EngineConfig: &EngineConfig{ID: "pi"}, Tools: toolsRaw, ParsedTools: NewTools(toolsRaw), NetworkPermissions: &NetworkPermissions{ @@ -351,7 +359,8 @@ func TestPiEngine_GetExecutionSteps_FirewallAnthropicProvider(t *testing.T) { } workflowData := &WorkflowData{ Name: "test-workflow", - EngineConfig: &EngineConfig{ID: "pi", Model: "anthropic/claude-opus-4-20251101"}, + Model: "anthropic/claude-opus-4-20251101", + EngineConfig: &EngineConfig{ID: "pi"}, Tools: toolsRaw, ParsedTools: NewTools(toolsRaw), NetworkPermissions: &NetworkPermissions{ @@ -384,7 +393,8 @@ func TestPiEngine_GetExecutionSteps_FirewallCodexProvider(t *testing.T) { } workflowData := &WorkflowData{ Name: "test-workflow", - EngineConfig: &EngineConfig{ID: "pi", Model: "codex/gpt-4.1"}, + Model: "codex/gpt-4.1", + EngineConfig: &EngineConfig{ID: "pi"}, Tools: toolsRaw, ParsedTools: NewTools(toolsRaw), NetworkPermissions: &NetworkPermissions{ @@ -422,7 +432,8 @@ func TestPiEngine_GetExecutionSteps_FirewallCopilotProvider_CopilotRequestsWrite } workflowData := &WorkflowData{ Name: "test-workflow", - EngineConfig: &EngineConfig{ID: "pi", Model: "copilot/gpt-5.4"}, + Model: "copilot/gpt-5.4", + EngineConfig: &EngineConfig{ID: "pi"}, Tools: toolsRaw, ParsedTools: NewTools(toolsRaw), Permissions: "permissions:\n copilot-requests: write", diff --git a/pkg/workflow/safe_output_helpers_test.go b/pkg/workflow/safe_output_helpers_test.go index e5f66d26a53..a2b4c12021c 100644 --- a/pkg/workflow/safe_output_helpers_test.go +++ b/pkg/workflow/safe_output_helpers_test.go @@ -563,6 +563,7 @@ func TestBuildEngineMetadataEnvVars(t *testing.T) { tests := []struct { name string engineConfig *EngineConfig + model string expected []string }{ { @@ -585,8 +586,8 @@ func TestBuildEngineMetadataEnvVars(t *testing.T) { engineConfig: &EngineConfig{ ID: "copilot", Version: "1.0.0", - Model: "gpt-5", }, + model: "gpt-5", expected: []string{ " GH_AW_ENGINE_ID: \"copilot\"\n", " GH_AW_ENGINE_VERSION: \"1.0.0\"\n", @@ -608,9 +609,9 @@ func TestBuildEngineMetadataEnvVars(t *testing.T) { { name: "engine with model and no version", engineConfig: &EngineConfig{ - ID: "copilot", - Model: "claude-sonnet-4", + ID: "copilot", }, + model: "claude-sonnet-4", expected: []string{ " GH_AW_ENGINE_ID: \"copilot\"\n", " GH_AW_ENGINE_MODEL: \"claude-sonnet-4\"\n", @@ -627,7 +628,7 @@ func TestBuildEngineMetadataEnvVars(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - result := buildEngineMetadataEnvVars(tt.engineConfig) + result := buildEngineMetadataEnvVars(tt.engineConfig, tt.model) if len(result) != len(tt.expected) { t.Errorf("Expected %d env vars, got %d", len(tt.expected), len(result)) diff --git a/pkg/workflow/safe_outputs_env.go b/pkg/workflow/safe_outputs_env.go index 2a6c204efe6..d1f9574596b 100644 --- a/pkg/workflow/safe_outputs_env.go +++ b/pkg/workflow/safe_outputs_env.go @@ -142,7 +142,7 @@ func (c *Compiler) buildStandardSafeOutputEnvVars(data *WorkflowData, targetRepo customEnvVars = append(customEnvVars, buildWorkflowMetadataEnvVarsWithTrackerID(data.Name, data.Source, data.TrackerID, buildLocalWorkflowSourceURL(c.markdownPath))...) // Add engine metadata (id, version, model) for XML comment marker - customEnvVars = append(customEnvVars, buildEngineMetadataEnvVars(data.EngineConfig)...) + customEnvVars = append(customEnvVars, buildEngineMetadataEnvVars(data.EngineConfig, data.Model)...) // Add common safe output job environment variables (staged/target repo) customEnvVars = append(customEnvVars, buildSafeOutputJobEnvVars( @@ -167,7 +167,7 @@ func (c *Compiler) buildStandardSafeOutputEnvVars(data *WorkflowData, targetRepo // buildEngineMetadataEnvVars builds engine metadata environment variables (id, version, model) // These are used by the JavaScript footer generation to create XML comment markers for traceability -func buildEngineMetadataEnvVars(engineConfig *EngineConfig) []string { +func buildEngineMetadataEnvVars(engineConfig *EngineConfig, model string) []string { var customEnvVars []string if engineConfig == nil { @@ -189,8 +189,8 @@ func buildEngineMetadataEnvVars(engineConfig *EngineConfig) []string { // Add engine model: prefer explicit compile-time config; fall back to the runtime model // captured by the activation job so safe-output footers can show the actual model used // (e.g. the value of the GH_AW_MODEL_AGENT_* variable) rather than showing nothing. - if engineConfig.Model != "" { - customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_ENGINE_MODEL: %q\n", engineConfig.Model)) + if model != "" { + customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_ENGINE_MODEL: %q\n", model)) } else { customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_ENGINE_MODEL: ${{ needs.%s.outputs.model }}\n", string(constants.AgentJobName))) } diff --git a/pkg/workflow/safe_outputs_test.go b/pkg/workflow/safe_outputs_test.go index 6599573f23e..20a0d84cdfe 100644 --- a/pkg/workflow/safe_outputs_test.go +++ b/pkg/workflow/safe_outputs_test.go @@ -958,10 +958,10 @@ func TestBuildStandardSafeOutputEnvVars(t *testing.T) { workflowData: &WorkflowData{ Name: "Test Workflow", SafeOutputs: &SafeOutputsConfig{}, + Model: "gpt-4", EngineConfig: &EngineConfig{ ID: "copilot", Version: "1.0.0", - Model: "gpt-4", }, }, targetRepoSlug: "", diff --git a/pkg/workflow/strict_mode_env_validation.go b/pkg/workflow/strict_mode_env_validation.go index f9c45d8a4c0..31ce1ace0a6 100644 --- a/pkg/workflow/strict_mode_env_validation.go +++ b/pkg/workflow/strict_mode_env_validation.go @@ -38,7 +38,7 @@ func (c *Compiler) validateEnvSecrets(frontmatter map[string]any) error { // Determine which env var keys may carry secrets: those that the engine itself // requires (e.g. COPILOT_GITHUB_TOKEN for the copilot engine). // The second return value is *EngineConfig (not an error); we only need the engine ID. - engineSetting, _ := c.ExtractEngineConfig(frontmatter) + engineSetting, _, _ := c.ExtractEngineConfig(frontmatter) allowedEnvVarKeys := c.getEngineBaseEnvVarKeys(engineSetting) if err := c.validateEnvSecretsSection(engineObj, "engine.env", allowedEnvVarKeys); err != nil { diff --git a/pkg/workflow/threat_detection_config.go b/pkg/workflow/threat_detection_config.go index 70d5f022d88..05c15f1afcb 100644 --- a/pkg/workflow/threat_detection_config.go +++ b/pkg/workflow/threat_detection_config.go @@ -9,6 +9,7 @@ type ThreatDetectionConfig struct { Steps []any `yaml:"steps,omitempty"` // Array of extra job steps to run before engine execution PostSteps []any `yaml:"post-steps,omitempty"` // Array of extra job steps to run after engine execution MaxAICredits int64 `yaml:"max-ai-credits,omitempty"` // Maximum AI credits budget for threat-detection engine execution + Model string `yaml:"model,omitempty"` // Model override for threat detection engine execution EngineConfig *EngineConfig `yaml:"engine-config,omitempty"` // Extended engine configuration for threat detection EngineDisabled bool `yaml:"-"` // Internal flag: true when engine is explicitly set to false RunsOn string `yaml:"runs-on,omitempty"` // Runner override for the detection job @@ -174,8 +175,9 @@ func (c *Compiler) parseThreatDetectionObjectConfig(configMap map[string]any) *T } else if engineObj, ok := engine.(map[string]any); ok { threatLog.Print("Parsing threat detection engine configuration") // Handle object format - use extractEngineConfig logic - _, engineConfig := c.ExtractEngineConfig(map[string]any{"engine": engineObj}) + _, engineConfig, model := c.ExtractEngineConfig(map[string]any{"engine": engineObj}) threatConfig.EngineConfig = engineConfig + threatConfig.Model = model } } diff --git a/pkg/workflow/threat_detection_inline_engine.go b/pkg/workflow/threat_detection_inline_engine.go index 443417c058d..bba53d48c9f 100644 --- a/pkg/workflow/threat_detection_inline_engine.go +++ b/pkg/workflow/threat_detection_inline_engine.go @@ -52,7 +52,7 @@ func (c *Compiler) buildDetectionEngineExecutionStep(data *WorkflowData) []strin return []string{" # Engine not found, skipping execution\n"} } - // Build a detection engine config inheriting ID, Model, Version, Env, Config, Args, APITarget. + // Build a detection engine config inheriting ID, Version, Env, Config, Args, APITarget. // MaxTurns, Concurrency, UserAgent, Firewall, Agent, and MaxAICredits are intentionally // omitted โ€” MaxAICredits is set independently below from safe-outputs.threat-detection // so the detection budget is always resolved from its own default expression rather than @@ -63,7 +63,6 @@ func (c *Compiler) buildDetectionEngineExecutionStep(data *WorkflowData) []strin } else { detectionEngineConfig = &EngineConfig{ ID: detectionEngineConfig.ID, - Model: detectionEngineConfig.Model, Version: detectionEngineConfig.Version, Env: detectionEngineConfig.Env, Config: detectionEngineConfig.Config, @@ -80,15 +79,20 @@ func (c *Compiler) buildDetectionEngineExecutionStep(data *WorkflowData) []strin detectionEngineConfig.MaxAICredits = data.SafeOutputs.ThreatDetection.MaxAICredits } + resolvedDetectionModel := data.Model + if data.SafeOutputs != nil && data.SafeOutputs.ThreatDetection != nil && data.SafeOutputs.ThreatDetection.Model != "" { + resolvedDetectionModel = data.SafeOutputs.ThreatDetection.Model + } + // Apply enterprise and engine default detection models when no model was explicitly configured. // GetDefaultDetectionModel() returns a cost-effective model optimised for detection // (e.g. "gpt-5.1-codex-mini" for Copilot). Other engines return "" (no default). // This was accidentally removed in commit a93e36ea4 while fixing engine.agent propagation. - if detectionEngineConfig.Model == "" { + if resolvedDetectionModel == "" { if defaultModel := compilerenv.ResolveDefaultDetectionModel(""); defaultModel != "" { - detectionEngineConfig.Model = defaultModel + resolvedDetectionModel = defaultModel } else if defaultModel := engine.GetDefaultDetectionModel(); defaultModel != "" { - detectionEngineConfig.Model = defaultModel + resolvedDetectionModel = defaultModel } } @@ -103,7 +107,7 @@ func (c *Compiler) buildDetectionEngineExecutionStep(data *WorkflowData) []strin // Copilot CLI expects only the model ID. extractPiModelID preserves bare model // names unchanged, so empty or already-normalized values keep their current // fallback behavior while provider-scoped Pi models become Copilot-compatible. - detectionEngineConfig.Model = extractPiModelID(detectionEngineConfig.Model) + resolvedDetectionModel = extractPiModelID(resolvedDetectionModel) } // Create minimal WorkflowData for threat detection. @@ -122,6 +126,7 @@ func (c *Compiler) buildDetectionEngineExecutionStep(data *WorkflowData) []strin threatDetectionData.Tools = map[string]any{ "bash": []any{"*"}, } + threatDetectionData.Model = resolvedDetectionModel threatDetectionData.EngineConfig = detectionEngineConfig threatDetectionData.ModelMappings = data.ModelMappings // propagate alias map so detection awf-config.json can resolve model aliases threatDetectionData.NetworkPermissions = &NetworkPermissions{ diff --git a/pkg/workflow/threat_detection_test.go b/pkg/workflow/threat_detection_test.go index 15167611347..bb801654a79 100644 --- a/pkg/workflow/threat_detection_test.go +++ b/pkg/workflow/threat_detection_test.go @@ -727,9 +727,9 @@ func TestBuildDetectionEngineExecutionStepWithThreatDetectionEngine(t *testing.T }, SafeOutputs: &SafeOutputsConfig{ ThreatDetection: &ThreatDetectionConfig{ + Model: "gpt-4", EngineConfig: &EngineConfig{ - ID: "copilot", - Model: "gpt-4", + ID: "copilot", }, }, }, @@ -1166,10 +1166,10 @@ func TestBuildDetectionEngineExecutionStepStripsAgentField(t *testing.T) { { name: "agent field stripped when model is explicitly configured", data: &WorkflowData{ - AI: "copilot", + AI: "copilot", + Model: "claude-opus-4.6", EngineConfig: &EngineConfig{ ID: "copilot", - Model: "claude-opus-4.6", Agent: "my-agent", }, SafeOutputs: &SafeOutputsConfig{ @@ -1259,10 +1259,10 @@ func TestCopilotDetectionDefaultModel(t *testing.T) { { name: "copilot engine with custom model uses specified model", data: &WorkflowData{ - AI: "copilot", + AI: "copilot", + Model: "gpt-4", EngineConfig: &EngineConfig{ - ID: "copilot", - Model: "gpt-4", + ID: "copilot", }, SafeOutputs: &SafeOutputsConfig{ ThreatDetection: &ThreatDetectionConfig{}, @@ -1274,10 +1274,10 @@ func TestCopilotDetectionDefaultModel(t *testing.T) { { name: "pi engine threat detection normalizes provider-scoped model for copilot fallback", data: &WorkflowData{ - AI: "pi", + AI: "pi", + Model: "copilot/gpt-5.4", EngineConfig: &EngineConfig{ - ID: "pi", - Model: "copilot/gpt-5.4", + ID: "pi", }, SafeOutputs: &SafeOutputsConfig{ ThreatDetection: &ThreatDetectionConfig{}, @@ -1292,9 +1292,9 @@ func TestCopilotDetectionDefaultModel(t *testing.T) { AI: "claude", SafeOutputs: &SafeOutputsConfig{ ThreatDetection: &ThreatDetectionConfig{ + Model: "gpt-4o", EngineConfig: &EngineConfig{ - ID: "copilot", - Model: "gpt-4o", + ID: "copilot", }, }, }, @@ -1391,9 +1391,9 @@ func TestBuildDetectionEngineExecutionStepPropagatesAPITarget(t *testing.T) { }, SafeOutputs: &SafeOutputsConfig{ ThreatDetection: &ThreatDetectionConfig{ + Model: "gpt-4", EngineConfig: &EngineConfig{ - ID: "copilot", - Model: "gpt-4", + ID: "copilot", // No APITarget set - should be inherited from main engine config }, }, @@ -2666,10 +2666,10 @@ func TestBuildDetectionEngineExecutionStepPropagatesModelMappings(t *testing.T) compiler := NewCompiler() data := &WorkflowData{ - AI: "copilot", + AI: "copilot", + Model: "small", EngineConfig: &EngineConfig{ - ID: "copilot", - Model: "small", + ID: "copilot", }, ModelMappings: map[string][]string{ "small": {"mini"}, diff --git a/pkg/workflow/universal_llm_consumer_engine.go b/pkg/workflow/universal_llm_consumer_engine.go index 16c1615fb2b..3818da7d5c3 100644 --- a/pkg/workflow/universal_llm_consumer_engine.go +++ b/pkg/workflow/universal_llm_consumer_engine.go @@ -104,7 +104,7 @@ func getUniversalLLMBackendProfile(backend UniversalLLMBackend, useCopilotReques func (e *UniversalLLMConsumerEngine) resolveBackend(workflowData *WorkflowData) UniversalLLMBackend { model := "" if workflowData != nil && workflowData.EngineConfig != nil { - model = workflowData.EngineConfig.Model + model = workflowData.Model } backend, err := resolveUniversalLLMBackendFromModel(model) if err != nil { @@ -253,7 +253,7 @@ func (e *UniversalLLMConsumerEngine) BuildCLIEngineExecutionSteps( steps = append(steps, cfg.ConfigStep) } - modelConfigured := workflowData.EngineConfig != nil && workflowData.EngineConfig.Model != "" + modelConfigured := workflowData.Model != "" // Build CLI command: run "". cliArgs := append([]string{}, cfg.ExtraCLIArgs...) @@ -270,7 +270,7 @@ func (e *UniversalLLMConsumerEngine) BuildCLIEngineExecutionSteps( if firewallEnabled { model := "" if modelConfigured { - model = workflowData.EngineConfig.Model + model = workflowData.Model } // Get allowed domains: prefer the pre-warmed cache on WorkflowData to avoid // re-running the expensive map+sort operation. @@ -345,8 +345,8 @@ func (e *UniversalLLMConsumerEngine) BuildCLIEngineExecutionSteps( // Model env var (only when explicitly configured and the engine supports it). if modelConfigured && cfg.ModelEnvVarName != "" { - universalLLMConsumerLog.Printf("Setting %s env var for model: %s", cfg.ModelEnvVarName, workflowData.EngineConfig.Model) - env[cfg.ModelEnvVarName] = workflowData.EngineConfig.Model + universalLLMConsumerLog.Printf("Setting %s env var for model: %s", cfg.ModelEnvVarName, workflowData.Model) + env[cfg.ModelEnvVarName] = workflowData.Model } // Custom env from engine config (allows provider key override). diff --git a/pkg/workflow/workflow_builder.go b/pkg/workflow/workflow_builder.go index 8d72ee1912c..09872dacb3c 100644 --- a/pkg/workflow/workflow_builder.go +++ b/pkg/workflow/workflow_builder.go @@ -64,6 +64,7 @@ func (c *Compiler) buildInitialWorkflowData( RunInstallScripts: toolsResult.runInstallScripts, MarkdownContent: toolsResult.markdownContent, AI: engineSetup.engineSetting, + Model: engineSetup.model, EngineConfig: engineSetup.engineConfig, AgentFile: agentFile, AgentImportSpec: agentImportSpec, @@ -161,7 +162,7 @@ func (c *Compiler) buildInitialWorkflowData( // Attempt to resolve pricing for the workflow model from models.dev when it is absent // from both the frontmatter overlay and the embedded models.json catalog. The result // is injected into ModelCosts so the runtime receives it via GH_AW_INFO_MODEL_COSTS. - workflowData.ModelCosts = c.resolveModelPricingIfMissing(workflowData.ModelCosts, workflowData.EngineConfig) + workflowData.ModelCosts = c.resolveModelPricingIfMissing(workflowData.ModelCosts, workflowData) mainModelPolicy := extractMainModelPolicyOverlay(toolsResult, result.Frontmatter) allowedModels, disallowedModels := mergeModelPolicyOverlays(importsResult.MergedModelPolicies, mainModelPolicy) if len(allowedModels) > 0 { diff --git a/pkg/workflow/workflow_data.go b/pkg/workflow/workflow_data.go index d8610ee1f3a..3390e1969f1 100644 --- a/pkg/workflow/workflow_data.go +++ b/pkg/workflow/workflow_data.go @@ -83,6 +83,7 @@ type WorkflowData struct { ParsedTools *Tools // Structured tools configuration (NEW: parsed from Tools map) MarkdownContent string AI string // "claude" or "codex" (for backwards compatibility) + Model string // Top-level LLM model override (from frontmatter model: field or imports) EngineConfig *EngineConfig // Extended engine configuration AgentFile string // Path to custom agent file (from imports) AgentImportSpec string // Original import specification for agent file (e.g., "owner/repo/path@ref")