Skip to content

Feature/zoo 442 resolve relative symlinks in rules#106

Merged
krzychdre merged 7 commits into
mainfrom
feature/zoo-442-resolve-relative-symlinks-in-rules
Jun 17, 2026
Merged

Feature/zoo 442 resolve relative symlinks in rules#106
krzychdre merged 7 commits into
mainfrom
feature/zoo-442-resolve-relative-symlinks-in-rules

Conversation

@krzychdre

Copy link
Copy Markdown
Owner

No description provided.

krzychdre and others added 7 commits June 17, 2026 21:58
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>
@krzychdre krzychdre merged commit 0e39f55 into main Jun 17, 2026
5 of 8 checks passed
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.

1 participant