Feature/zoo 442 resolve relative symlinks in rules#106
Merged
krzychdre merged 7 commits intoJun 17, 2026
Conversation
Port of Zoo-Code PR #537. Adds the gpt-5.5 model definition to the OpenAI native provider registry with matching tests. Co-authored-by: Slava <slava.deb@gmail.com> Co-authored-by: edelauna <54631123+edelauna@users.noreply.github.com>
Port of Zoo-Code PR #281. Adds a user-triggerable diagnostic command that runs ripgrep binary resolution and writes a verbose report to a dedicated output channel + clipboard. Command id and titles adapted to Tumble Code; registered via getCommand() with showRipgrepDiagnostic added to the CommandId union. Co-authored-by: 0xMink <260166390+0xMink@users.noreply.github.com> Co-authored-by: edelauna <54631123+edelauna@users.noreply.github.com> Co-authored-by: Elliott de Launay <edelauna@gmail.com>
Port of Zoo-Code PR #558. Guards listFiles against a non-existent cwd so ripgrep isn't spawned against a missing directory. Co-authored-by: edelauna <54631123+edelauna@users.noreply.github.com>
…ming (zoo #449) LiteLLMHandler.createMessage never read the reasoning_content / reasoning fields from the stream delta, so reasoning output from DeepSeek-R1, QwQ, and other reasoning models routed through LiteLLM was silently dropped. Extract the reasoning-field logic into a shared extractReasoningFromDelta helper, wire it into lite-llm.ts, and replace the inline for-of/break block in base-openai-compatible-provider.ts with it. The helper also fixes two latent bugs in the old inline logic: - the for…break short-circuited as soon as the reasoning_content key existed, so a delta with reasoning_content: null + a populated reasoning field dropped the thinking output instead of falling back; - the .trim() guard discarded whitespace-only chunks (a lone " " or "\n\n"), collapsing word/paragraph boundaries once chunks are concatenated downstream. The helper picks the first field that is a non-empty string (length-based). Co-authored-by: Oh Daewoong <dw.oh@samsung.com>
…malformed commands (zoo #483)
parseCommand split on every newline before any quote handling, so newlines
inside a quoted argument (sh -c '...'), a heredoc body, or an unterminated
quote were treated as separate sub-commands — defeating allowlist
auto-approval and producing spurious entries in the command-pattern UI.
Rewrite the parser around a single scanTopLevelQuotes state machine that masks
quoted regions (single / double / ANSI-C $'...' / locale $"..." / heredocs /
herestrings) before splitting on genuine unquoted newlines, and detects
unterminated quotes/heredocs as shell syntax errors. parseCommand now returns
ParseResult { commands, parseError }; getCommandDecision returns a new
malformed_command decision, ExecuteCommandTool surfaces the syntax error to the
agent as a tool error, and the CommandExecution card renders an error state.
The webview pattern extractor pre-splits via parseCommand so heredoc/quoted
fragments no longer leak into the allow/deny selector.
Co-authored-by: Andrew Schmeder <149117631+awschmeder@users.noreply.github.com>
…#153)
Shrink the chat list pre-render buffer from {top:3000,bottom:1000} to
{top:600,bottom:800}, give Virtuoso a defaultItemHeight (180) and a stable
computeItemKey so off-screen rows are recycled instead of all mounted at once.
On long tasks the old buffer ballooned memory until the webview greyed out.
Also add lightweight diagnostics: when the webview is hidden during an active
task, ClineProvider logs taskId / messageCount / stackDepth / timestamp to the
output channel as a breadcrumb for the grey-screen report.
Ported from Zoo-Code PR #153 (ed868c675); diagnostics string rebranded to
Tumble Code.
Co-authored-by: Toray Altas <6816042+taltas@users.noreply.github.com>
Co-authored-by: edelauna <54631123+edelauna@users.noreply.github.com>
Co-authored-by: Elliott de Launay <edelauna@gmail.com>
When a .roo/rules directory is itself a symlink to an external directory and a file inside is a relative symlink (e.g. ../1-project.txt), resolveSymLink resolved the target against the access path instead of the symlink's real location, pointing at the wrong file. Call fs.realpath() on the symlink's parent directory before resolving the relative target, matching how the OS resolves relative symlinks; fall back to the raw dir if realpath fails. Ported from Zoo-Code PR #442 (4c91a8f24). Co-authored-by: Povilas Kanapickas <povilas@radix.lt>
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.
No description provided.