Skip to content

Add MCP progress notifications to logs, audit, and audit-diff tools#30247

Merged
pelikhan merged 4 commits intomainfrom
copilot/add-progress-notifications-mcp-tools
May 5, 2026
Merged

Add MCP progress notifications to logs, audit, and audit-diff tools#30247
pelikhan merged 4 commits intomainfrom
copilot/add-progress-notifications-mcp-tools

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 5, 2026

The logs, audit, and audit-diff MCP tools can run for 30+ seconds with no client-visible progress, leaving AI clients (Claude, Copilot) without any progress indicator during execution.

Changes

  • notifyProgress helper — nil-safe wrapper around req.Session.NotifyProgress; errors are silently discarded so notification failures never affect tool results
  • logs tool — emits "Downloading workflow logs..." (0%) and "Workflow logs downloaded" (100%)
  • audit tool — emits "Downloading audit artifacts..." (0%) and "Audit complete" (100%)
  • audit-diff tool — emits "Downloading artifacts for diff..." (0%) and "Diff complete" (100%)
  • TestsconnectInMemoryWithProgress helper + 4 tests covering token-present and token-absent cases for all three tools
// Pattern used in each handler:
notifyProgress(ctx, req, 0, 100, "Downloading audit artifacts...")
// ... exec command ...
notifyProgress(ctx, req, 100, 100, "Audit complete")

Notifications are only sent when the client supplies a progressToken in the request metadata; otherwise the helper is a no-op.

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
    • Triggering command: /usr/bin/gh gh repo view --json owner,name --jq .owner.login + "/" + .name ortcfg.link GOINSECURE GOMOD GOMODCACHE UB4Z85HNraJd7B2VBq/aMwv_nfK75JUCd43tsyO/DAaZteIL--json env ortcfg GO111MODULE g_.a GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /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 ache/go/1.25.8/x64/pkg/tool/linutest@example.com sRem�� ortcfg GO111MODULE tartedAt,updatedAt,event,headBranch,headSha,displayTitle GOINSECURE 0922027/b092/ GOMODCACHE ser.test (http block)
    • Triggering command: /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 %H %ct %D (http block)
  • https://api.github.com/orgs/test-owner/actions/secrets
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD s go (http block)
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name /ref/tags/v9 test@example.com sv --show-toplevel ache/go/1.25.8/x--norc /usr/bin/git gh api /repos/actions/github-script/git/ref/tags/v9 --jq (http block)
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name --show-toplevel ache/node/24.14.1/x64/bin/npm (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv /ref/tags/v9 ache/go/1.25.8/x64/pkg/tool/linux_amd64/link sv 7437398/b442/sligit -trimpath 7437398/b442/imp--show-toplevel git rev-�� --show-toplevel yDIvrJo6ipZht/Z2PMNnO1JhWT_hjJlGremote.origin.url /usr/bin/git -instructions-tegh show 7437398/b442/_pk/repos/actions/github-script/git/ref/tags/v9 git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv ithub-script/git/ref/tags/v9 64/pkg/tool/linux_amd64/cgo (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv xec6Bf1es -trimpath /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linu-nolocalimports s-in-body.md /tmp/go-build167rev-parse -I ortcfg 0922�� g/styles/huh_theme.go g/styles/theme.go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -p github.com/segme-1 -lang=go1.17 /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv ithub-script/git/ref/tags/v9 git-receive-pack bject.type] | @tsv k/gh-aw/gh-aw/.ggit /tmp/go-build167rev-parse (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv k/_tool infocmp /usr/bin/infocmp xterm-color ser.test /usr/bin/infocmp--show-toplevel infocmp -1 xterm-color infocmp /home/REDACTED/.local/bin/node xterm-color 64/pkg/tool/linurev-parse /usr/bin/gh node (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv 7437398/b463/_pkg_.a -dwarf=false 7437398/b463=> go1.25.8 -c=4 -nolocalimports 7437398/b447/importcfg /tmp�� 843377515 k/gh-aw/gh-aw/pkg/stringutil/identifiers.go /usr/bin/git b/workflows GO111MODULE 64/bin/go git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv /tmp/gh-aw-test-runs/20260505-011538-47530/test-1927160103/.github/workflows l /opt/hostedtoolcache/node/24.14.1/x64/bin/node -json GO111MODULE 64/bin/go node /tmp�� runs/20260505-011538-47530/test-1098302656 go /usr/bin/git s/test.md GO111MODULE x_amd64/compile git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv /ref/tags/v9 config sv remote.origin.urgit GO111MODULE x_amd64/compile git conf�� user.email test@example.com (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv xterm-color git /usr/bin/git -pack /tmp/go-build274rev-parse /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --oneline epo}/actions/runrev-parse /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v9
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv go1.25.8 -c=4 -nolocalimports -importcfg /tmp/go-build1670922027/b241/importcfg -pack /home/REDACTED/go/pkg/mod/golang.org/x/text@v0.36.0/internal/language/common.go env */*.ts' '**/*.js-p GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv go1.25.8 -c=4 -nolocalimports -importcfg /tmp/go-build1670922027/b001/importcfg -pack /home/REDACTED/work/gh-aw/gh-aw/cmd/gh-aw-wasm/main.go tion�� -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv int:cjs GO111MODULE n-dir/node GOINSECURE GOMOD GOMODCACHE go 1/x6�� -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v9.0.0
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9.0.0 --jq [.object.sha, .object.type] | @tsv -goversion go1.25.8 -c=4 -nolocalimports -importcfg /tmp/go-build1670922027/b234/importcfg -pack env go GO111MODULE 64/pkg/tool/linu-lang=go1.25 GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linu-trimpath (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9.0.0 --jq [.object.sha, .object.type] | @tsv go1.25.8 -c=4 -nolocalimports -importcfg /tmp/go-build1670922027/b140/importcfg -pack /home/REDACTED/go/pkg/mod/github.com/modelcontextprotocol/go-sdk@v1.6.0/auth/auth.go tion�� -json son/json.go 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE ache/go/1.25.8/x-lang=go1.25 GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv /repos/actions/github-script/git/ref/tags/v9 --jq /usr/bin/gh 0922027/b083/impinfocmp ELPw/QEPjXdEopvS-1 e/git-upload-pacxterm-color gh api /repos/actions/github-script/git/ref/tags/v9 --jq /usr/bin/git /ref/tags/v9 -trimpath sv git (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv user.email test@example.com /usr/bin/git Gitbranch_with_hgit Gitbranch_with_hrev-parse x_amd64/compile git conf�� user.email test@example.com (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv xterm-color ache/go/1.25.8/x--jq /usr/bin/infocmp 7437398/b421/filgh log 7437398/b421/imp/repos/actions/github-script/git/ref/tags/v9 infocmp -1 xterm-color QaRiefE3LJ-80/5nodp3IL84tZKq5R-8Dk/Exs2fuW_hbdM5remote.origin.url (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv ithub-script/git/ref/tags/v9 node bject.type] | @tsv /tmp/TestHashCongit go /tmp/go-build274--show-toplevel git rev-�� /ref/tags/v9 /tmp/go-build2747437398/b457/tim--jq sv -test.paniconexiinfocmp -test.v=true /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv 7437398/b463/types.test 9pw3AB5m6U_Ak5qHtlUh/9pw3AB5m6U_Ak5qHtlUh 7437398/b463/importcfg.link -goversion go1.25.8 -c=4 VWw7VJguVlRAx/jN--jq clon�� 843377515 /tmp/TestParseDefaultBranchFromLsRemoteWithRealGitbranch_with_hyphen163056860/00github.com/githurev-parse ache/node/24.14.1/x64/bin/node b/workflows GO111MODULE 64/bin/go ache/node/24.14.1/x64/bin/node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv /tmp/gh-aw-test-runs/20260505-011538-47530/test-1927160103/.github/workflows remote /usr/bin/git -json go 64/bin/go git init�� s/test.md go /usr/bin/git ted-objects.md GO111MODULE x_amd64/asm git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv /tmp/gh-aw-test-runs/20260505-011538-47530/test-1491836038 show /usr/bin/git iant-3776582103/git GO111MODULE x_amd64/compile git remo�� GOMODCACHE (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv 1538-47530/test-843377515 -extld=gcc /opt/hostedtoolcache/node/24.14.1/x64/bin/node 505168574/.githugit GO111MODULE x_amd64/compile /opt/hostedtoolcache/node/24.14.1/x64/bin/node /tmp�� needs.build.outputs.version aWTPZmVH_ghz /usr/bin/git -json GO111MODULE x_amd64/vet git (http block)
  • https://api.github.com/repos/aws-actions/configure-aws-credentials/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/aws-actions/configure-aws-credentials/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git ons-test97310287git 7437398/b463/_terev-parse /usr/bin/infocmp--show-toplevel git rev-�� --show-toplevel infocmp /usr/bin/git xterm-color go _id":222}] git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/aws-actions/configure-aws-credentials/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel ache/node/24.14.1/x64/bin/node /usr/bin/git /tmp/TestGuardPogh remote /usr/bin/git git rev-�� /ref/tags/v9 git sv /tmp/gh-aw-test-git remote /usr/bin/infocmp--show-toplevel git (http block)
  • https://api.github.com/repos/azure/login/git/ref/tags/v2
    • Triggering command: /usr/bin/gh gh api /repos/azure/login/git/ref/tags/v2 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git /tmp/TestGuardPogit remote /usr/bin/git git rev-�� --show-toplevel git /usr/bin/gh ub/gh-aw.git remote.origin.ur-1 ng.md gh (http block)
  • https://api.github.com/repos/docker/login-action/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/docker/login-action/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv ithub-script/git/ref/tags/v9 git bject.type] | @tsv /tmp/TestGuardPogit rev-parse /usr/bin/git git rev-�� --show-toplevel git /usr/bin/infocmp --show-toplevel l /opt/hostedtoolcxterm-color infocmp (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0.1.2
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv --show-toplevel 64/pkg/tool/linux_amd64/vet /usr/bin/git 0922027/b033/impgit EuIi/QLX65JRSUvprev-parse /opt/hostedtoolc--show-toplevel git rev-�� --show-toplevel /opt/hostedtoolcache/go/1.25.8/xTest User /usr/bin/git 1538-47530/test-infocmp -trimpath .cfg git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv --show-toplevel x_amd64/compile /usr/bin/git Gitmain_branch32git Gitmain_branch32rev-parse x_amd64/compile git rev-�� --show-toplevel x_amd64/compile /usr/bin/git ub/workflows GO111MODULE ache/go/1.25.8/x--show-toplevel git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv --show-toplevel NDlTegh/m96EbGrdo5JZ1JqgKLeX /usr/bin/git -json GO111MODULE nch,headSha,disp--show-toplevel git conf�� user.name Test User /usr/bin/git ub/workflows GO111MODULE x_amd64/vet git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --limit 100 --created >=2026-04-28 **/*.json --ignore-path 64/pkg/tool/linuorigin /hom�� g_.a til.go 64/pkg/tool/linux_amd64/compile .prettierignore GO111MODULE abis 64/pkg/tool/linufeature-branch (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --limit 100 --created >=2026-04-05 **/*.json --ignore-path 64/pkg/tool/linuTest User -c g_.a 0/internal/internal.go 64/pkg/tool/linux_amd64/compile tierignore al_wasm.o 64/src/internal/test.txt 64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --limit 100 --created >=2026-02-04 **/*.json --ignore-path 64/pkg/tool/linuremote.origin.url env LsRemoteWithRealGitcustom_branch-test.timeout=10m0s LsRemoteWithRealGitcustom_branch-test.run=^Test x_amd64/compile -json GO111MODULE 64/bin/go x_amd64/compile (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/1/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name J9_2Hh5RJ ache/go/1.25.8/x64/pkg/tool/linu-test.short=true GOINSECURE g GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/asm env qgGwuI4GA GO111MODULE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE 0922027/b012/ GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linutest@example.com (http block)
    • Triggering command: /usr/bin/gh gh run download 1 --dir test-logs/run-1 1Yg0zHCmd 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env 3425109692 GO111MODULE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE erutil GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name mLsRemoteWithRealGitmaster_branch761183941/001' /usr/bin/git ithub-script/git/usr/bin/git ache/go/1.25.8/xconfig bject.type] | @t--get-regexp git rev-�� --show-toplevel git /usr/bin/git /ref/tags/v9 git sv git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12345/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name sNGC5r73k ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE age GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile env /ref/tags/v9 GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh run download 12345 --dir test-logs/run-12345 GO111MODULE x_amd64/vet GOINSECURE _wasm.o 64/src/reflect/asm_wasm.s x_amd64/vet env (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name --jq sv /ref/tags/v9 git sv git rev-�� --show-toplevel git 86_64/bash --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/1234567890
    • Triggering command: /usr/bin/gh gh api repos/{owner}/{repo}/actions/runs/1234567890 --jq {databaseId: .id, number: .run_number, url: .html_url, status: .status, conclusion: .conclusion, workflowName: .name, workflowPath: .path, createdAt: .created_at, startedAt: .run_started_at, updatedAt: .updated_at, event: .event, headBranch: .head_branch, -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api repos/{owner}/{repo}/actions/runs/1234567890 --jq {databaseId: .id, number: .run_number, url: .html_url, status: .status, conclusion: .conclusion, workflowName: .name, workflowPath: .path, createdAt: .created_at, startedAt: .run_started_at, updatedAt: .updated_at, event: .event, headBranch: .head_branch, 27845838/001' 27845838/001' bject.type] | @tsv --show-toplevel git-receive-pack--norc /usr/bin/git git rev-�� --show-toplevel git /usr/bin/infocmp --show-toplevel gh /usr/bin/git infocmp (http block)
    • Triggering command: /usr/bin/gh gh api repos/{owner}/{repo}/actions/runs/1234567890 --jq {databaseId: .id, number: .run_number, url: .html_url, status: .status, conclusion: .conclusion, workflowName: .name, workflowPath: .path, createdAt: .created_at, startedAt: .run_started_at, updatedAt: .updated_at, event: .event, headBranch: .head_branch, 47106634/001' 47106634/001' .cfg --show-toplevel nly /usr/bin/infocmp git rev-�� 2423042610 infocmp 1443922/b001/cli.test /ref/tags/v9 git sv 1443922/b001/cli.test (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12346/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12346/artifacts --jq .artifacts[].name ortcfg ache/go/1.25.8/x64/pkg/tool/linux_amd64/asm GOINSECURE gset GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linu-test.v=true ortc�� 6435/001/stability-test.md 64/src/os/dir.go ache/go/1.25.8/x64/pkg/tool/linu-test.short=true GOINSECURE 0922027/b007/ GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url (http block)
    • Triggering command: /usr/bin/gh gh run download 12346 --dir test-logs/run-12346 ke8fejfLv ache/go/1.25.8/x64/pkg/tool/linux_amd64/asm GOINSECURE util GOMODCACHE ache/go/1.25.8/x--json env FJQqP_gMk GO111MODULE ache/go/1.25.8/x--created GOINSECURE 0922027/b015/ GOMODCACHE ache/go/1.25.8/xremote.origin.url (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12346/artifacts --jq .artifacts[].name git /usr/bin/git ithub-script/gitgit git bject.type] | @tremove git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/gh git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/2/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name til_test.go x_amd64/link GOINSECURE GOMOD GOMODCACHE x_amd64/link env ITIJ8Hyq- GO111MODULE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE Bh/hKJC44cVKMHVntest@example.com (http block)
    • Triggering command: /usr/bin/gh gh run download 2 --dir test-logs/run-2 ortcfg ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linu--json ortc�� 0922027/b027/_pkg_.a om/goccy/go-yaml@v1.19.2/ast/astnonexistent-workflow-12345 ache/go/1.25.8/x64/pkg/tool/linu--limit GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name git /usr/bin/git --show-toplevel ache/go/1.25.8/xrun (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/3/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name Y_7BzNNuM ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE t GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile estl�� F769rPpYG GO111MODULE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE /gc GOMODCACHE ache/go/1.25.8/xorigin (http block)
    • Triggering command: /usr/bin/gh gh run download 3 --dir test-logs/run-3 GO111MODULE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile ortc�� 01/test1.md om/goccy/go-yaml@v1.19.2/token/token.go k GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name git sv ithub-script/gitinfocmp ache/go/1.25.8/x-1 bject.type] | @txterm-color git rev-�� --show-toplevel git 64/bin/go --show-toplevel git /usr/bin/gh git (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/4/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name YfB4YDUdE 64/pkg/tool/linux_amd64/compile GOINSECURE (http block)
    • Triggering command: /usr/bin/gh gh run download 4 --dir test-logs/run-4 verutil_test.go ache/go/1.25.8/x64/pkg/tool/linux_amd64/asm GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url env ortcfg GO111MODULE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE 0922027/b007/ GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name git /usr/bin/git ithub-script/git/usr/bin/git 7437398/b470/worremote bject.type] | @t-v git rev-�� --show-toplevel git 64/pkg/tool/linux_amd64/compile ithub-script/gitgit git bject.type] | @tuser.name 64/pkg/tool/linuTest User (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/5/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name deRMpwyMD x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env ortcfg 2XU_VxRq0 ache/go/1.25.8/x--created GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url (http block)
    • Triggering command: /usr/bin/gh gh run download 5 --dir test-logs/run-5 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linutest@example.com ortc�� 3425109692 g/timeutil/format.go ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE 0922027/b007/ GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url (http block)
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name git /usr/bin/git --show-toplevel 7437398/b473/scrconfig (http block)
  • https://api.github.com/repos/github/gh-aw/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /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 GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /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 GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet ortc�� -json gmGb0FnMM ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/xtest@example.com (http block)
  • https://api.github.com/repos/github/gh-aw/contents/.github/workflows/shared/reporting.md
    • Triggering command: /tmp/go-build2747437398/b404/cli.test /tmp/go-build2747437398/b404/cli.test -test.testlogfile=/tmp/go-build2747437398/b404/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true -nolocalimports -importcfg /tmp/go-build1670922027/b210/importcfg -pack 1/x6�� -json GO111MODULE ache/go/1.25.8/x-lang=go1.25 GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /tmp/go-build1361443922/b001/cli.test /tmp/go-build1361443922/b001/cli.test -test.testlogfile=/tmp/go-build1361443922/b001/testlog.txt -test.paniconexit0 -test.timeout=10m0s -test.v=true ithub-script/git/ref/tags/v9 git bject.type] | @tsv --show-toplevel /opt/hostedtoolcrev-parse /usr/bin/git git rev-�� HEAD git (http block)
    • Triggering command: /tmp/go-build2263442455/b001/cli.test /tmp/go-build2263442455/b001/cli.test -test.testlogfile=/tmp/go-build2263442455/b001/testlog.txt -test.paniconexit0 -test.timeout=10m0s rev-�� --show-toplevel 728716-ma6jk0.txt /usr/bin/git --show-toplevel /usr/bin/git /usr/bin/git git rev-�� t2388437637 git .yml --show-toplevel gh /usr/bin/infocmp--show-toplevel git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v0.47.4
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv b3NCkL0nF GO111MODULE verutil.test GOINSECURE GOMOD GOMODCACHE verutil.test 7474�� 0922027/b216/_pkg_.a stmain.go 0922027/b216=> GOINSECURE g/x/text/secure/api 0922027/b092/sym/repos/actions/github-script/git/ref/tags/v9 /opt/hostedtoolc--jq (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/compile GOINSECURE GOMOD erignore x_amd64/compile env -json GO111MODULE x_amd64/vet GOINSECURE json emmove_wasm.s x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv /repos/actions/github-script/git/ref/tags/v9 --jq (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv 1713-59785/test-461190544/custom/workflows infocmp /usr/bin/git xterm-color git /opt/hostedtoolc--get-regexp git rev-�� --show-toplevel node /usr/bin/git install --package-lock-o-1 /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v2.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/compile GOINSECURE GOMOD erignore x_amd64/compile env -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/compile GOINSECURE GOMOD erignore x_amd64/compile env ub/workflows GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env b/workflows GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v3.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE x_amd64/compile GOINSECURE GOMOD erignore x_amd64/compile env ub/workflows GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv xterm-color git /usr/bin/infocmp /ref/tags/v9 .test sv infocmp 7845�� xterm-color git /usr/bin/infocmp /ref/tags/v9 git sv infocmp (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv /ref/tags/v9 (http block)
  • https://api.github.com/repos/google-github-actions/auth/git/ref/tags/v2
    • Triggering command: /usr/bin/gh gh api /repos/google-github-actions/auth/git/ref/tags/v2 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git ithub-script/gitgit rev-parse bject.type] | @t--show-toplevel git rev-�� --show-toplevel node /usr/bin/git /tmp/TestHashCongit go logs/runs.json"}--show-toplevel git (http block)
  • https://api.github.com/repos/nonexistent/action/git/ref/tags/v999.999.999
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv eutil.go eutil_test.go 64/pkg/tool/linux_amd64/compile GOINSECURE fips140 GOMODCACHE 64/pkg/tool/linux_amd64/compile ortc�� g_.a stmain.go 64/pkg/tool/linux_amd64/compile GOINSECURE s GOMODCACHE 64/pkg/tool/linux_amd64/compile (http block)
  • https://api.github.com/repos/nonexistent/repo/actions/runs/12345
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/xTest User env 1491836038/.github/workflows GO111MODULE .cfg GOINSECURE 0922027/b006/ GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion ithub-script/gitgit git bject.type] | @tsv git rev-�� b/workflows git /usr/bin/git --show-toplevel /usr/bin/git /usr/bin/git git (http block)
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion /repos/actions/ggit --jq (http block)
  • https://api.github.com/repos/owner/repo/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo 64/bin/go GOINSECURE GOMOD (http block)
    • Triggering command: /usr/bin/gh gh workflow list --repo owner/repo --json name,path,state ortcfg.link GOINSECURE GOMOD GOMODCACHE Q9JjIZREDlYiHWP_71/KDaUrle63TPPPorigin ortc�� agent-persona-explorer.md edcfg g_.a GOINSECURE ntio/asm/keyset 0922027/b036/sym--get-regexp ache/go/1.25.8/x^remote\..*\.gh-resolved$ (http block)
  • https://api.github.com/repos/test-owner/test-repo/actions/secrets
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name /tmp/gh-aw/aw-feature-branch.patch git /usr/bin/infocmp --show-toplevel /usr/lib/git-cor--norc (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name --show-toplevel gh /usr/bin/git 70a665eb..HEAD --jq /usr/bin/gh git rev-�� 1713-59785/test-remote.origin.url gh ash ithub-script/gitgit --jq bject.type] | @t--show-toplevel gh (http block)
  • https://api.github.com/repos/test/repo
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch 1491836038/.github/workflows GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env edcfg zm1t/ybsydLQ-bM8eUCGDzm1t ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile GOINSECURE fips140/edwards2remote-https GOMODCACHE ache/go/1.25.8/xREDACTED (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch (http block)
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch -json GO111MODULE k/gh-aw/gh-aw/actions/setup/js/node_modules/.bin/sh GOINSECURE GOMOD GOMODCACHE go env epository GO111MODULE bin/sh GOINSECURE GOMOD GOMODCACHE go (http block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI and others added 2 commits May 5, 2026 01:09
Agent-Logs-Url: https://github.com/github/gh-aw/sessions/2ca949a8-55a7-4b91-b78a-afc946d70c37

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Copilot AI changed the title [WIP] Add progress notifications for long-running MCP tools Add MCP progress notifications to logs, audit, and audit-diff tools May 5, 2026
Copilot AI requested a review from gh-aw-bot May 5, 2026 01:25
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

Hey @copilot-swe-agent 👋 — great start on adding MCP progress notifications for the logs, audit, and audit-diff tool handlers! This is a useful UX improvement for long-running operations.

A couple of things to address before this is ready for review:

  • Still a WIP — the diff currently only touches .github/workflows/metrics-collector.lock.yml (+1 line). The core implementation (notifyProgress helper + handler changes in pkg/cli/mcp_tools_privileged.go) hasn't landed yet. The checklist items in the body are all unchecked.
  • No tests yet — the checklist includes tests for progress notifications in each of the three handlers, but none have been added. These are needed before merge.
  • Description missing — the PR body is a task checklist rather than a summary of what is changing and why. A short paragraph explaining the motivation and approach would help reviewers.

When you're ready to continue the implementation, here's a prompt you can use:

Complete the WIP implementation in PR #30247 (branch: copilot/add-progress-notifications-mcp-tools).

1. In `pkg/cli/mcp_tools_privileged.go`, add a `notifyProgress(ctx context.Context, progressToken any, message string)` helper that sends an MCP progress notification.
2. Call `notifyProgress` at the start and on completion of each of the three tool handlers: `logs`, `audit`, and `audit-diff`.
3. Add unit tests covering progress notifications (start + complete) for each of the three handlers.
4. Update the PR body with a short description explaining the motivation (better UX for long-running MCP tools) and a summary of the changes made.
5. Run `make agent-finish` to validate all changes before marking the PR ready for review.

Generated by Contribution Check · ● 1.4M ·

@pelikhan pelikhan marked this pull request as ready for review May 5, 2026 02:20
Copilot AI review requested due to automatic review settings May 5, 2026 02:20
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds MCP progress notifications to long-running privileged MCP tools (logs, audit, audit-diff) so clients can display visible progress while the underlying CLI commands download artifacts/logs.

Changes:

  • Introduces a notifyProgress helper that emits MCP progress notifications when a progress token is present.
  • Adds 0%/100% progress notifications to the logs, audit, and audit-diff MCP tool handlers.
  • Adds an in-memory MCP connection test helper that captures progress notifications, plus new tests for progress emission.
Show a summary per file
File Description
pkg/cli/mcp_tools_privileged.go Emits start/finish progress notifications for logs, audit, and audit-diff; adds notifyProgress helper.
pkg/cli/mcp_tools_privileged_test.go Adds an in-memory progress-capturing helper and tests validating progress notification behavior.
.github/workflows/metrics-collector.lock.yml Adds GH_AW_INFO_VERSION env var to the workflow configuration.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 3/3 changed files
  • Comments generated: 3

@@ -483,6 +491,8 @@ Returns JSON describing the differences between the base run and each comparison
cmdArgs = append(cmdArgs, "--artifacts", strings.Join(args.Artifacts, ","))
}
Comment on lines +540 to +553
// notifyProgress sends a progress notification to the MCP client if the request
// includes a progress token. Errors are silently ignored because progress
// notifications are best-effort; the tool result is not affected. If the client
// has disconnected or the notification fails for any reason, the tool continues
// executing normally.
func notifyProgress(ctx context.Context, req *mcp.CallToolRequest, progress, total float64, message string) {
if token := req.Params.GetProgressToken(); token != nil {
_ = req.Session.NotifyProgress(ctx, &mcp.ProgressNotificationParams{
ProgressToken: token,
Progress: progress,
Total: total,
Message: message,
})
}
Comment on lines +584 to +607
// TestLogsToolNoProgressWithoutToken verifies that the logs MCP tool
// does not send progress notifications when no progress token is provided.
func TestLogsToolNoProgressWithoutToken(t *testing.T) {
const fakeOutput = `{"file_path":"/tmp/gh-aw/aw-mcp/logs/runs.json"}`

mockExecCmd := func(ctx context.Context, args ...string) *exec.Cmd {
return exec.CommandContext(ctx, "sh", "-c", `printf '%s' "$1"`, "sh", fakeOutput)
}

server := mcp.NewServer(&mcp.Implementation{Name: "test", Version: "1.0"}, nil)
err := registerLogsTool(server, mockExecCmd, "", false)
require.NoError(t, err, "registerLogsTool should succeed")

session, getNotifications := connectInMemoryWithProgress(t, server)

// Call without setting a progress token
_, err = session.CallTool(context.Background(), &mcp.CallToolParams{
Name: "logs",
Arguments: map[string]any{},
})
require.NoError(t, err, "logs tool should succeed")

assert.Empty(t, getNotifications(), "logs tool should not emit progress notifications without a token")
}
@pelikhan
Copy link
Copy Markdown
Collaborator

pelikhan commented May 5, 2026

@copilot review all comments

Copy link
Copy Markdown
Contributor Author

Copilot AI commented May 5, 2026

@copilot review all comments

Addressed all three reviewer comments in ebe0f70:

  1. audit-diff missing appendRepoFlagFromEnv — added cmdArgs = appendRepoFlagFromEnv(cmdArgs) to the audit-diff handler, consistent with logs and audit.

  2. notifyProgress nil safety — added guards for req == nil || req.Session == nil before dereferencing, and updated the docstring to reflect the actual safety guarantees.

  3. Missing no-token tests for audit and audit-diff — added TestAuditToolNoProgressWithoutToken and TestAuditDiffToolNoProgressWithoutToken alongside the existing TestLogsToolNoProgressWithoutToken.

Copilot AI requested a review from pelikhan May 5, 2026 02:37
@pelikhan pelikhan merged commit 13c636e into main May 5, 2026
@pelikhan pelikhan deleted the copilot/add-progress-notifications-mcp-tools branch May 5, 2026 02:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[plan] Add progress notifications to long-running MCP tools (logs, audit, audit-diff)

4 participants