Commit Graph
349 Commits
Author SHA1 Message Date
a221ad2dd9 Drop buffered inline comment when it is posted live (#1405) (#1412)
When classify_inline_comments is enabled, create_inline_comment buffers calls
without confirmed=true. The model frequently re-issues the call with confirmed=true
after reading the buffered reply, which posts the comment live but leaves the
original buffered entry behind. The post-session replay step then posts it again,
so every inline comment lands twice.

Reconcile the buffer on a live post: after a confirmed comment is created, remove
any buffered entry matching the same path, line, startLine and body so it cannot be
replayed. Extracts the reconciliation into src/mcp/inline-comment-buffer.ts (the MCP
server module starts a server on import) and adds unit tests.

Co-authored-by: archievi <13202986+archievi@users.noreply.github.com>
2026-07-03 22:37:36 -07:00
GitHub Actions 558b1d6cab chore: bump Claude Code to 2.1.201 and Agent SDK to 0.3.201 2026-07-03 23:51:09 +00:00
GitHub Actions 01872ccc02 chore: bump Claude Code to 2.1.200 and Agent SDK to 0.3.200 2026-07-03 16:53:31 +00:00
GitHub Actions 769e3bdff9 chore: bump Claude Code to 2.1.199 and Agent SDK to 0.3.199 2026-07-02 23:36:20 +00:00
GitHub Actions 6c0083bb72 chore: bump Claude Code to 2.1.198 and Agent SDK to 0.3.198 2026-07-01 20:46:29 +00:00
GitHub Actions fad22eb3fa chore: bump Claude Code to 2.1.197 and Agent SDK to 0.3.197 2026-06-30 17:57:23 +00:00
GitHub Actions 4633baf526 chore: bump Claude Code to 2.1.196 and Agent SDK to 0.3.196 2026-06-29 23:27:52 +00:00
GitHub Actions a92e7c70a4 chore: bump Claude Code to 2.1.195 and Agent SDK to 0.3.195 2026-06-26 21:30:09 +00:00
GitHub Actions 5211368122 chore: bump Claude Code to 2.1.193 and Agent SDK to 0.3.193 2026-06-25 21:46:38 +00:00
GitHub Actions 428971d2ec chore: bump Claude Code to 2.1.191 and Agent SDK to 0.3.191 2026-06-24 21:59:09 +00:00
GitHub Actions 74eedf1a18 chore: bump Claude Code to 2.1.190 and Agent SDK to 0.3.190 2026-06-24 15:55:36 +00:00
GitHub Actions 80b3182633 chore: bump Claude Code to 2.1.187 and Agent SDK to 0.3.187 2026-06-23 21:05:06 +00:00
360be9c8fc fix: allow @ in branch names (valid per git-check-ref-format) (#1411)
`validateBranchName` rejects branch names containing `@`, even though
`git check-ref-format` permits `@` and GitHub itself accepts such
branches. PRs whose head or base branch contains an `@` fail validation
in-process before any git operation, so the action errors out
immediately.

Branch names with `@` show up in real workflows: ticket conventions
like "TICKET-123@add-feature" (#998), leading-prefix conventions like
"@hotfix/...", and agent tooling that appends "@<sessionid>" (#1305).
There is no workaround other than renaming the branch, which is often
not under the user's control.

Branch names are never passed through a shell (git calls use
execFileSync argv arrays), so `@` carries no injection risk. This is
the same reasoning used to add `#` in #1167, `+` in #1248, and `,` in
#1310. The bare name "@" (HEAD shorthand in git revision syntax) and
the "@{" reflog sequence are still rejected.

- Add `@` to the validateBranchName whitelist regex, including the
  leading position (the leading-character rule blocks option injection
  via `-`, which `@` cannot cause)
- Reject the bare name "@" with a dedicated check
- Update the surrounding comment, JSDoc, and error message to match
- Add test cases for @-containing names and bare "@"

Fixes #998

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-06-22 14:42:36 -07:00
Steven Zimmerman, CPAandGitHub 6b8063043e fix: filter PR reviews and inline review comments to trigger time (#1385)
Issue/PR comments (#512) and the issue/PR body (#710) are filtered to the
trigger timestamp so content created or edited after an authorized trigger
cannot be injected into Claude's prompt (TOCTOU protection). Reviews and
inline review comments were not: fetchGitHubData returned reviewData filtered
by actor only, and formatReviewComments renders it into the prompt, so a
review submitted or edited after the trigger reached Claude verbatim.

filterReviewsToTriggerTime already existed (added alongside the comment filter
in #512) but was only wired to the image-download list, never to the returned
reviewData.

Filter reviewData.nodes through filterReviewsToTriggerTime and each review's
inline comments through filterCommentsToTriggerTime, alongside the existing
actor filter, then build the review image-processing lists from those
already-filtered nodes (removing a now-redundant second filter pass).
Strengthen the two integration tests to assert post-trigger and edited-after
reviews/comments are dropped.
2026-06-22 14:41:33 -07:00
GitHub Actions 30544b6743 chore: bump Claude Code to 2.1.186 and Agent SDK to 0.3.186 2026-06-22 20:38:23 +00:00
GitHub Actions 2fee155104 chore: bump Claude Code to 2.1.185 and Agent SDK to 0.3.185 2026-06-20 21:00:13 +00:00
GitHub Actions 51705da45e chore: bump Claude Code to 2.1.183 and Agent SDK to 0.3.183 2026-06-19 01:21:31 +00:00
GitHub Actions 806af32823 chore: bump Claude Code to 2.1.181 and Agent SDK to 0.3.181 2026-06-17 22:08:47 +00:00
Ryan NoonanandGitHub 0a08a86780 fix: skip workflow validation token exchange failures (#1417) 2026-06-17 13:53:35 -07:00
GitHub Actions 9dd8b95a39 chore: bump Claude Code to 2.1.179 and Agent SDK to 0.3.179 2026-06-16 20:23:28 +00:00
GitHub Actions 4d7e1f0cd8 chore: bump Claude Code to 2.1.178 and Agent SDK to 0.3.178 2026-06-15 21:37:45 +00:00
3d9f0dc7dc fix(mcp): align allowed-tools parser with SDK option parser (#1373)
parseAllowedTools (used to decide which GitHub MCP servers to install)
hand-rolled a regex parse of claude_args, while the tools actually
granted to Claude are parsed by parseClaudeArgsToExtraArgs in
base-action/src/parse-sdk-options.ts using shell-quote. The two parsers
diverged on two inputs (#1357):

- Multiple values after a single flag: for
  `--allowedTools "Read" "Grep" "mcp__github__get_commit"` the regex
  captured only "Read", so the github MCP server was not installed even
  though mcp__github__get_commit was granted — tool calls then failed.
- Commented-out lines: the regex counted tools on `#`-prefixed lines
  that the SDK parser strips, installing servers that were never used.

Reimplement parseAllowedTools on the same shell-quote tokenizer and the
same "accumulating flag consumes all consecutive non-flag values"
semantics, stripping comment lines first, so the install decision agrees
with the tools that are actually granted. Unquoted glob patterns (e.g.
`mcp__github__*`), which shell-quote yields as glob objects, are
recovered to their literal text to preserve existing behavior.

Closes #1357

Co-authored-by: bymle <229636660+bymle@users.noreply.github.com>
2026-06-13 22:49:34 -07:00
GitHub Actions d5726de019 chore: bump Claude Code to 2.1.177 and Agent SDK to 0.3.177 2026-06-13 01:25:48 +00:00
GitHub Actions 56fa348258 chore: bump Claude Code to 2.1.176 and Agent SDK to 0.3.176 2026-06-12 21:54:44 +00:00
GitHub Actions 0cb4f3e5e7 chore: bump Claude Code to 2.1.175 and Agent SDK to 0.3.175 2026-06-12 04:24:54 +00:00
8551f4b0aa fix(image-downloader): detect image type from magic bytes (#1396)
GitHub serves pasted attachments from /user-attachments/assets/<uuid>
with no file extension, so getImageExtension() silently defaulted to
".png". When the bytes are actually JPEG/GIF/WebP the downloaded file is
mislabeled, and the Read tool then sends a base64 image whose declared
media_type doesn't match its magic bytes — which the Anthropic API
rejects with `400 invalid_request_error` ("image was specified using the
image/png media type, but the image appears to be a image/jpeg image").

Sniff the real format from the buffer's magic bytes after download and
only fall back to the URL-based extension when the signature is
unrecognized. Adds a regression test for a JPEG at an extensionless URL.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 21:23:35 -07:00
36617bd48b fix(sanitizer): match attribute quotes by type to avoid mangling content (#1371)
stripHiddenAttributes used the pattern `["'][^"']*["']` for each quoted
attribute, which matches an opening quote of either type and stops at the
first quote of either type. When a value contained the other quote
character — e.g. an apostrophe inside a double-quoted attribute like
`title="We'll do it"` — the match terminated at the apostrophe, so the
wrong span was removed and the surrounding text was corrupted (e.g.
`<Tooltip title="We'll do it" placement="top">` became
`<Tooltipll do it" placement="top">`).

This surfaced via the github_inline_comment MCP tool: suggestion blocks
whose code lines contain quotes were mangled before posting (#1366).

Match each quoted form per quote type (`"[^"]*"` and `'[^']*'`),
mirroring stripMarkdownLinkTitles, so a value may freely contain the
other quote character. The unquoted fallback is unchanged.

Closes #1366

Co-authored-by: bymle <229636660+bymle@users.noreply.github.com>
2026-06-11 21:19:44 -07:00
24b915648e Include labels in formatContext() output for issues and PRs (#1298)
The formatted_context block sent to the agent omitted labels for both
issues and pull requests, even though the GraphQL queries already
fetched them. This caused agents to incorrectly report "no labels"
when labels existed, breaking any workflow that routes on label state
(e.g., drift-fix routing on drift:* labels in a Drift Watcher pattern).

Changes:
- Add 'PR Labels:' line to PR context output
- Add 'Issue Labels:' line to issue context output
- Both emit 'none' when no labels are present (explicit > omitted)
- Bump labels(first: 1) → labels(first: 100) in both queries; the
  previous cap meant only one label would appear even after the
  formatter fix
- Update existing tests + add 'with labels' tests for both PR and
  issue branches

Discovered while building a GitHub Actions workflow that uses this
action for drift-watcher routing in an internal seed framework
(joshpayne-joby/slim-routines#6). The agent self-diagnosed the gap
by inspecting this action's source — a satisfying full-loop.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 21:19:15 -07:00
Kyungil ParkandGitHub 9441a7fe22 fix: clear stale claude-prompts dir before each write (#1288)
Previously, prompt files at `${RUNNER_TEMP}/claude-prompts/` from a prior
invocation could persist on non-ephemeral self-hosted runners (where the
documented `RUNNER_TEMP` cleanup contract is not reliably honored). In
particular, `claude-user-request.txt` is only written by `create-prompt`
when a user request exists; an `agent`-mode invocation does not overwrite
it, so a stale value left by an earlier mention-mode job in another repo
would leak into a later agent-mode job's effective context on the same
runner agent.

Fix: `rm -rf` the directory before `mkdir` in both write sites
(`src/create-prompt/index.ts`, `src/modes/agent/index.ts`). Idempotent,
safe on hosted runners (where the dir is already empty), and self-heals
on self-hosted runners.

Closes #1287
2026-06-11 21:18:57 -07:00
GitHub Actions ebcdfe6dc6 chore: bump Claude Code to 2.1.174 and Agent SDK to 0.3.174 2026-06-12 01:17:25 +00:00
GitHub Actions 0f97b95b65 chore: bump Claude Code to 2.1.173 and Agent SDK to 0.3.173 2026-06-11 05:43:00 +00:00
GitHub Actions eee73e2ae5 chore: bump Claude Code to 2.1.172 and Agent SDK to 0.3.172 2026-06-10 21:01:40 +00:00
GitHub Actions 11ba60486e chore: bump Claude Code to 2.1.170 and Agent SDK to 0.3.170 2026-06-09 17:27:26 +00:00
GitHub Actions 593d7a5c4e chore: bump Claude Code to 2.1.169 and Agent SDK to 0.3.169 2026-06-08 21:57:59 +00:00
GitHub Actions fbda2eb1bd chore: bump Claude Code to 2.1.168 and Agent SDK to 0.3.168 2026-06-06 23:42:46 +00:00
GitHub Actions 64de744025 chore: bump Claude Code to 2.1.167 and Agent SDK to 0.3.167 2026-06-06 01:34:14 +00:00
GitHub Actions 410165836e chore: bump Claude Code to 2.1.166 and Agent SDK to 0.3.166 2026-06-06 00:56:12 +00:00
GitHub Actions 41ea7642c1 chore: bump Claude Code to 2.1.165 and Agent SDK to 0.3.165 2026-06-05 05:45:57 +00:00
GitHub Actions 0b1b620029 chore: bump Claude Code to 2.1.163 and Agent SDK to 0.3.163 2026-06-04 21:54:01 +00:00
GitHub Actions 70a6e5256e chore: bump Claude Code to 2.1.162 and Agent SDK to 0.3.162 2026-06-03 21:32:44 +00:00
GitHub Actions 36a69b6a90 chore: bump Claude Code to 2.1.161 and Agent SDK to 0.3.161 2026-06-02 21:59:11 +00:00
Ashwin BhatandGitHub 420335da51 Add workload identity federation support to base-action (#1378)
* Add workload identity federation support to base-action

Move the workload identity module into base-action so the standalone
action can fetch and refresh the GitHub OIDC identity token itself, and
expose the same federation inputs as the outer action. Switch the
base-action test workflows from the anthropic_api_key secret to the
federation repo variables and grant them id-token: write.

* Verify MCP test tool invocation instead of init connection status

MCP servers can connect asynchronously, so the init event may report a
server as pending. Check that the server is registered at init, then
assert the test tool was actually called and returned its response.
Also pass the MCP config through claude_args --mcp-config, replacing the
removed mcp_config input.
2026-06-02 11:52:23 -07:00
GitHub Actions 7f37f2e373 chore: bump Claude Code to 2.1.160 and Agent SDK to 0.3.160 2026-06-02 02:11:04 +00:00
GitHub Actions fb53c379a0 chore: bump Claude Code to 2.1.159 and Agent SDK to 0.3.159 2026-05-31 19:43:36 +00:00
GitHub Actions c5c315c8a1 chore: bump Claude Code to 2.1.158 and Agent SDK to 0.3.158 2026-05-30 02:42:43 +00:00
GitHub Actions f809dea0ba chore: bump Claude Code to 2.1.157 and Agent SDK to 0.3.157 2026-05-29 20:21:24 +00:00
GitHub Actions 0fb1b8f303 chore: bump Claude Code to 2.1.156 and Agent SDK to 0.3.156 2026-05-29 01:43:14 +00:00
GitHub Actions 3d4c9fde8e chore: bump Claude Code to 2.1.154 and Agent SDK to 0.3.154 2026-05-28 18:02:04 +00:00
GitHub Actions 324957b26b chore: bump Claude Code to 2.1.153 and Agent SDK to 0.3.153 2026-05-28 00:52:58 +00:00
GitHub Actions 73c91f04a8 chore: bump Claude Code to 2.1.152 and Agent SDK to 0.3.152 2026-05-27 01:31:47 +00:00