feat: parameterize tools.timeout and tools.startup-timeout to accept GitHub Actions expressions#23869
Closed
feat: parameterize tools.timeout and tools.startup-timeout to accept GitHub Actions expressions#23869
Conversation
6 tasks
Closed
…essions - Change ToolsConfig.Timeout and StartupTimeout from *int to *string - Change WorkflowData.ToolsTimeout and ToolsStartupTimeout from int to string - Update extractToolsTimeout/extractToolsStartupTimeout to accept expressions - Update parseTimeoutTool/parseStartupTimeoutTool to return *string - Update all engine code (claude, copilot, codex) to handle string timeout values - Update mcp_renderer_github.go to use templatableIntValue for TOML config - Update JSON schema for timeout/startup-timeout to accept expression strings - Update all tests for the new string type Agent-Logs-Url: https://github.com/github/gh-aw/sessions/6a1e2ad5-17e1-4016-ac71-7f788290b130 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Parameterize tools config fields to accept expressions
feat: parameterize tools.timeout and tools.startup-timeout to accept GitHub Actions expressions
Apr 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
tools.timeoutandtools.startup-timeoutonly accepted literal integers, blocking reusableworkflow_callworkflows from accepting these as inputs at call time.Changes
Type changes
ToolsConfig.Timeout,ToolsConfig.StartupTimeout:*int→*stringWorkflowData.ToolsTimeout,WorkflowData.ToolsStartupTimeout:int→string(empty = use engine default)toolsProcessingResult.toolsTimeout/toolsStartupTimeout:int→stringParsing (
tools_parser.go,frontmatter_extraction_metadata.go)parseTimeoutTool/parseStartupTimeoutToolnow return*string, accepting both numeric types and${{ ... }}expressions; free-form strings are rejected with a clear errorextractToolsTimeout/extractToolsStartupTimeoutreturnstring; same validation logicEngine emission (
claude_engine.go,copilot_engine_execution.go,codex_engine.go)GH_AW_TOOL_TIMEOUT/GH_AW_STARTUP_TIMEOUTenv vars: literal string passed directly (nostrconv.Itoa), expression strings pass through unquoted for runtime evaluationMCP_TOOL_TIMEOUT,BASH_DEFAULT_TIMEOUT_MS, etc.) usetemplatableIntValue()— expressions fall back to engine defaultsCodex TOML config (
mcp_renderer_github.go)startup_timeout_sec/tool_timeout_secusetemplatableIntValue()— expressions fall back to defaults since TOML requires literal integersSchema (
main_workflow_schema.json)tools.timeoutandtools.startup-timeoutchanged tooneOf: [integer, expression string]Example
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
https://api.github.com/graphql/usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw(http block)/usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw bash(http block)/usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE node(http block)https://api.github.com/orgs/test-owner/actions/secrets/usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name --local committer.email nfig/composer/ve-nilfunc(http block)https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1/usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq .object.sha(http block)/usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel ache/go/1.25.0/xrev-parse /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel go /usr/bin/git git(http block)/usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq .object.sha c55fcaba091ac027615bbe45d322dc40b415c075:pkg/parser/schemas/main_workflow_schema.json go /usr/local/.ghcup/bin/git -json GO111MODULE 64/bin/go git show�� c55fcaba091ac027615bbe45d322dc40b415c075:pkg/workflow/copilot_engine_execution.go go /usr/local/sbin/git -json GO111MODULE 64/bin/go git(http block)https://api.github.com/repos/actions/checkout/git/ref/tags/v3/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq .object.sha k/gh-aw/gh-aw/pkg/mathutil/mathutil.go k/gh-aw/gh-aw/pkg/mathutil/mathutil_test.go ache/go/1.25.0/x64/pkg/tool/linux_amd64/vet get --local de/node/bin/bash--show-toplevel ache/go/1.25.0/x64/pkg/tool/linux_amd64/vet -o /tmp/go-build212625184/b423/_pkg_.a -trimpath /usr/bin/git -p github.com/githurev-parse -lang=go1.25 git(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq .object.sha bin/sh git /usr/bin/git --show-toplevel bash /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel 64/pkg/tool/linurev-parse /usr/bin/git git(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq .object.sha b415c075:pkg/workflow/copilot_engine_execution.go rev-parse ache/uv/0.11.2/x86_64/git WOjr/dGyv62hoTCPgit GO111MODULE 64/bin/go git -C /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse cal/bin/git che/go-build/b7/git GOPROXY 64/bin/go git(http block)https://api.github.com/repos/actions/checkout/git/ref/tags/v5/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha --noprofile(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha Secret: ${{ secrets.TOKEN }} 64/pkg/tool/linux_amd64/vet /usr/bin/git --noprofile cfg 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linux_amd64/vet /usr/bin/git --noprofile(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha --show-toplevel ache/go/1.25.0/x64/pkg/tool/linux_amd64/vet /usr/bin/git ithub/workflows pkg/mod/github.crev-parse ache/go/1.25.0/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.0/x64/pkg/tool/linux_amd64/vet /usr/bin/git -unreachable=falgit /tmp/go-build173rev-parse 342981/b331/vet.--show-toplevel git(http block)https://api.github.com/repos/actions/checkout/git/ref/tags/v6/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha -test.paniconexit0 -test.v=true /opt/hostedtoolcache/node/24.14.0/x64/bin/node -test.timeout=10git -test.run=^Test -test.short=true--show-toplevel node /tmp�� /home/REDACTED/work/gh-aw/gh-aw/.github/workflows/agent-performance-analyzer.md x_amd64/vet /usr/bin/git --noprofile(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha --show-toplevel x_amd64/vet /usr/bin/git --noprofile 53 x_amd64/vet git init��(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha --show-toplevel ache/go/1.25.0/x64/pkg/tool/linutest@example.com /usr/bin/git 1943-13895/test-git 342981/b226/vet.rev-parse ache/go/1.25.0/x--show-toplevel git rev-�� --show-toplevel rtcfg /usr/bin/git dcfg(http block)https://api.github.com/repos/actions/github-script/git/ref/tags/v8/usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha --local committer.name ash(http block)/usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha --verify main ache/uv/0.11.2/x-nilfunc(http block)/usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha origin main tnet/tools/bash(http block)https://api.github.com/repos/actions/setup-go/git/ref/tags/v4/usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq .object.sha --property=Memor-test.paniconexit0 x_amd64/vet /usr/bin/git assword=$GITHUB_git assword=$GITHUB_rev-parse x_amd64/vet git -C /tmp/gh-aw-test-runs/20260401-121943-13895/test-3835285173 status /usr/bin/git .github/workflowgit(http block)/usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel x_amd64/link /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel Fj/loOf-cgjR6MKzrev-parse /usr/bin/git git(http block)/usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq .object.sha 615bbe45d322dc40b415c075:pkg/workflow/tools_timeout_test.go go /home/REDACTED/.local/bin/git -json GO111MODULE $name) { has--show-toplevel git diff�� --name-only HEAD /opt/hostedtoolcache/go/1.25.0/x64/bin/git -json GO111MODULE 64/bin/go git(http block)https://api.github.com/repos/actions/setup-node/git/ref/tags/v4/usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq .object.sha /tmp/go-build212625184/b456/_pkg_.a -trimpath /usr/bin/git -p github.com/githurev-parse -lang=go1.25 git rev-�� --git-dir -goversion /usr/bin/git -c=4 -nolocalimports -importcfg git(http block)/usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel 64/pkg/tool/linurev-parse /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel ache/go/1.25.0/xrev-parse /usr/bin/git git(http block)/usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq .object.sha 615bbe45d322dc40b415c075:pkg/workflow/tools_timeout_test.go --others /home/REDACTED/work/_temp/ghcca-node/node/bin/git -json GO111MODULE r: $owner, name:--show-toplevel git diff�� --name-only HEAD /home/REDACTED/.local/bin/git -json GO111MODULE r: $owner, name:--show-toplevel git(http block)https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b/usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq .object.sha -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE sh -c npx prettier --cGOSUMDB GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go node(http block)https://api.github.com/repos/github/gh-aw/usr/bin/gh gh api /repos/github/gh-aw --jq .visibility -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE r: $owner, name: $name) { hasDiscussionsEnabled } } GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0 --jq .object.sha -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE node /opt�� prettier --check 64/bin/go **/*.ts **/*.json --ignore-path /bin/sh(http block)https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0.1.2/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq .object.sha /tmp/TestHashStability_SameInputSameOutput2224846116/001/stabiliv1.0.0 x_amd64/vet /usr/bin/git --noprofile(http block)/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel 64/pkg/tool/linurev-parse /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel ache/go/1.25.0/xrev-parse /usr/bin/git git(http block)/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq .object.sha 615bbe45d322dc40b415c075:pkg/workflow/tools_parser.go --others /usr/local/.ghcup/bin/git -json GO111MODULE $name) { has--show-toplevel git add . go /home/REDACTED/.local/bin/git -json GO111MODULE r: $owner, name:--show-toplevel git(http block)https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.0.0/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq .object.sha -unreachable=false /tmp/go-build173342981/b233/vet.cfg 625184/b126/vet.cfg get --local -d /opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linux_amd64/vet -ato�� -bool -buildtags /opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linux_amd64/vet -errorsas -ifaceassert -nilfunc /opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linux_amd64/vet(http block)/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq .object.sha --show-toplevel git /usr/bin/git --git-dir x_amd64/vet /usr/bin/git git conf�� user.name Test User /usr/bin/git --git-dir x_amd64/vet /usr/bin/gh git(http block)/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq .object.sha GOMODCACHE go /usr/bin/git ck 'scripts/**/*git GO111MODULE 64/bin/go git -C b415c075:pkg/workflow/compiler_orchestrator_tools_test.go config ache/go/1.25.0/x64/bin/git remote.origin.urgit GO111MODULE 64/bin/go infocmp(http block)https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq .object.sha 1943-13895/test-3835285173 /tmp/go-build173342981/b236/vet.cfg /opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linux_amd64/vet get --local 86_64/git /opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linux_amd64/vet 6251�� -bool 625184/b070/_testmain.go /opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linux_amd64/link -errorsas -ifaceassert -nilfunc /opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linuREDACTED(http block)/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq .object.sha -maxdepth 4 /usr/bin/git d -name bin git init�� x_amd64/vet git /usr/bin/git --show-toplevel x_amd64/vet /opt/hostedtoolc--show-toplevel git(http block)/usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq .object.sha ode-gyp-bin/sh go 0/x64/bin/git ck 'scripts/**/*git GO111MODULE 64/bin/go git -C b415c075:pkg/workflow/compiler_orchestrator_tools_test.go config cal/bin/git remote.origin.urgit GO111MODULE DiscussionsEnabl--show-toplevel git(http block)https://api.github.com/repos/github/gh-aw/actions/runs/1/artifacts/usr/bin/gh gh run download 1 --dir test-logs/run-1(http block)https://api.github.com/repos/github/gh-aw/actions/runs/12345/artifacts/usr/bin/gh gh run download 12345 --dir test-logs/run-12345(http block)https://api.github.com/repos/github/gh-aw/actions/runs/12346/artifacts/usr/bin/gh gh run download 12346 --dir test-logs/run-12346 cfg 64/pkg/tool/linux_amd64/vet(http block)https://api.github.com/repos/github/gh-aw/actions/runs/2/artifacts/usr/bin/gh gh run download 2 --dir test-logs/run-2(http block)https://api.github.com/repos/github/gh-aw/actions/runs/3/artifacts/usr/bin/gh gh run download 3 --dir test-logs/run-3(http block)https://api.github.com/repos/github/gh-aw/actions/runs/4/artifacts/usr/bin/gh gh run download 4 --dir test-logs/run-4(http block)https://api.github.com/repos/github/gh-aw/actions/runs/5/artifacts/usr/bin/gh gh run download 5 --dir test-logs/run-5(http block)https://api.github.com/repos/github/gh-aw/actions/workflows/usr/bin/gh gh workflow list --json name,state,path --local gpg.program(http block)/usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 100(http block)/usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 6(http block)https://api.github.com/repos/github/gh-aw/git/ref/tags/v0.47.4/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq .object.sha --show-toplevel 64/pkg/tool/linutest@example.com /usr/bin/git --noprofile cfg 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linux_amd64/vet /usr/bin/git rity3897525835/0git(http block)/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq .object.sha --show-toplevel git /usr/bin/git --show-toplevel /opt/hostedtoolcrev-parse /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel 625184/b001/imposhow-ref /usr/bin/git git(http block)/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq .object.sha --show-toplevel go /usr/bin/git -json rty ache/go/1.25.0/x--show-toplevel git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE repository(owne--verify git(http block)https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq .object.sha --noprofile X6D161nAi 64/pkg/tool/linux_amd64/vet logs/user.env(http block)/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq .object.sha --show-toplevel /opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linux_amd64/vet /usr/bin/git -unreachable=falgit /tmp/go-build173rev-parse 625184/b273/vet.--show-toplevel git rev-�� --show-toplevel /opt/hostedtoolcache/go/1.25.0/x64/pkg/tool/linux_amd64/vet /usr/bin/git ithub-script/gitgit -buildtags ache/node/24.14.--show-toplevel git(http block)Find playwrgit` (http block)