feat: git-aware context tools#2832
Open
TheArchitectit wants to merge 8 commits intoultraworkers:mainfrom
Open
Conversation
…w, GitBlame) Add five native git tools that provide structured read-only access to repository state, replacing ad-hoc bash git commands with purpose-built tool definitions the model can discover and invoke directly. - GitStatus: working tree status with --short --branch - GitDiff: diff with optional staged/commit/path filters - GitLog: commit log with count, oneline, author, since/until, path - GitShow: show commit/tree content with optional stat and path - GitBlame: line-level blame with optional start/end line range All tools use the existing git_stdout() helper and are PermissionMode::ReadOnly.
Some OpenAI-compatible providers (e.g., GLM-5) omit the `id` field in streaming and non-streaming responses. Adding #[serde(default)] allows the parser to accept these responses instead of failing with "missing field `id`". Co-Authored-By: Claude Opus 4.7 <[email protected]>
Adds scripts/install.sh that builds the release binary and links it to ~/.local/bin/claw. Run after code changes to update the CLI. Co-Authored-By: Claude Opus 4.7 <[email protected]>
When a provider returns HTML (e.g., error page, wrong endpoint) instead of JSON in an SSE stream, provide a clear error message instead of hanging or failing with a cryptic parse error. Co-Authored-By: Claude Opus 4.7 <[email protected]>
When a provider returns a JSON error (e.g., {"error":{"message":"..."}})
without SSE framing (no "data:" prefix), the SSE parser was silently
ignoring it and hanging. Now detects and surfaces these errors.
Also handles HTML responses that lack SSE framing.
Co-Authored-By: Claude Opus 4.7 <[email protected]>
Some providers (GLM, DeepSeek) emit reasoning tokens in `reasoning_content` or nested `thinking.content` fields instead of `content`. Added support for these fields so reasoning models work correctly. Co-Authored-By: Claude Opus 4.7 <[email protected]>
The final streaming chunk from some providers contains only finish_reason and usage, with no delta field. Made it optional to prevent parse errors. Co-Authored-By: Claude Opus 4.7 <[email protected]>
When preserve_recent_messages == 0, raw_keep_from equals messages.len(), causing index out of bounds when accessing session.messages[k]. Added k >= session.messages.len() check to prevent panic. Reason: Compaction with preserve_recent_messages=0 triggered OOB access when checking for tool-use/tool-result pair preservation at boundary. Co-Authored-By: Claude Opus 4.7 <[email protected]>
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.
Summary
GitStatus,GitDiff,GitLog,GitShow,GitBlamegitcommands via bash with structured, discoverable tool definitionsPermissionMode::ReadOnlyand the existinggit_stdout()helperWhy native git tools?
Before this PR, the model had to use the
bashtool for git operations, which:DangerFullAccesseven for read-only git commandsToolSearchWith native git tools:
ReadOnly— safe in restricted permission modesToolSearchwith keywords like "git", "diff", "blame"Test plan
GitStatusreturns branch and file statusGitDiffwithstaged: trueshows cached changesGitLogwithcountandonelinereturns condensed historyGitShowwith a commit hash shows the diffGitBlamewith a file path and line range works