Skip to content

Terminal ghost suggetions - #86

Merged
gajendraxdev merged 4 commits into
zync-sh:mainfrom
gajendraxdev:main
Jul 14, 2026
Merged

Terminal ghost suggetions#86
gajendraxdev merged 4 commits into
zync-sh:mainfrom
gajendraxdev:main

Conversation

@gajendraxdev

@gajendraxdev gajendraxdev commented Jul 13, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • Bug Fixes

    • Improved Ghost suggestion spacing and normalization for new path arguments, mid-token completions, and path fragments.
    • Enhanced suggestion ranking so mid-token completions can correctly override higher-frecency spaced history.
    • Fixed Ghost overlay positioning by anchoring to the first-caret origin and compensating for SSH/local echo lag.
    • Improved terminal rendering/segmentation for wide characters, emoji (ZWJ), and combining marks; prevented duplicate or missing spaces.
  • Release

    • Updated version to 2.22.1 and refreshed the changelog.
  • Tests

    • Added/expanded unit coverage for spacing behavior, ranking, and ghost cursor/width calculations.

Stop inventing leading spaces on history completions (ls/lsblk), prefer mid-token ranking, position ghost from line origin under echo lag, and size overlay glyphs with terminal display width. Backend owns suffix spacing; frontend clamp removed.
Promote ghost mid-token spacing and SSH lag overlay fixes to 2.22.1.
@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 04f86f80-2f22-44ae-80bb-f6cb3d6e551c

📥 Commits

Reviewing files that changed from the base of the PR and between bb613d2 and 64fb421.

📒 Files selected for processing (4)
  • src-tauri/src/ghost/path_suggest.rs
  • src-tauri/src/ghost/ranking.rs
  • src/lib/ghostSuggestions/displayWidth.ts
  • tests/ghostSuggestionsHelpers.test.mjs

📝 Walkthrough

Walkthrough

Ghost suggestion spacing and ranking now favor provider-defined boundaries and mid-token continuations. The terminal overlay gains SSH-lag-aware positioning, display-width segmentation, layout propagation, updated tests, and 2.22.1 release metadata.

Changes

Ghost Suggestions

Layer / File(s) Summary
Backend spacing and ranking
src-tauri/src/ghost/{suffix.rs,ranking.rs,path_suggest.rs}, src/lib/ghostSuggestions/{suggestionSuffix.ts,client.ts}, tests/ghostSuggestionsHelpers.test.mjs
Suffix normalization preserves provider spacing, path completions identify new arguments, and ranking prefers mid-token continuations with regression coverage.
Ghost position and cell measurement
src/lib/ghostSuggestions/{cursorPosition.ts,displayWidth.ts}, tests/ghostSuggestionsHelpers.test.mjs, tsconfig.agent-tests.json
Ghost layout contracts, lag-aware caret resolution, terminal display-width utilities, segmentation, and helper tests are added.
Layout capture and overlay rendering
src/components/terminal/{useTerminalGhost.ts,Terminal.tsx,TerminalHost.tsx,GhostSuggestionOverlay.tsx}
Typed-line origin and width flow through the terminal components, while the overlay tracks echo events and renders cell-sized suffix segments.
Release metadata
package.json, src-tauri/Cargo.toml, src-tauri/tauri.conf.json, CHANGELOG.md
Version references and changelog links are updated for release 2.22.1.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant TerminalInput
  participant useTerminalGhost
  participant TerminalHost
  participant GhostSuggestionOverlay
  participant getGhostPixelPosition
  TerminalInput->>useTerminalGhost: process typed input and echo events
  useTerminalGhost->>useTerminalGhost: capture origin and typed cell count
  useTerminalGhost->>TerminalHost: provide ghostLayout
  TerminalHost->>GhostSuggestionOverlay: pass layout and suggestion
  GhostSuggestionOverlay->>getGhostPixelPosition: resolve ghost pixel position
  getGhostPixelPosition-->>GhostSuggestionOverlay: return predicted or live position
Loading

Possibly related PRs

  • zync-sh/zync#60: Introduced the related ghost suggestion Rust and frontend implementation.
  • zync-sh/zync#79: Updated the shared ghost cursor-positioning logic.
  • zync-sh/zync#83: Modified the related ghost suffix, ranking, and path suggestion behavior.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and clearly points to the main theme of the change: terminal ghost suggestions.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Fix ghost suggestion spacing and SSH echo-lag overlay alignment

🐞 Bug fix 🧪 Tests 📝 Documentation ⚙️ Configuration changes 🕐 40+ Minutes

Grey Divider

AI Description

• Stop ghost suffix normalization from inventing leading spaces; providers own word boundaries.
• Prefer mid-token history continuations in ranking to avoid lsls blk regressions.
• Reposition and size ghost overlay using predicted typed-cell layout and terminal cell metrics.
Diagram

graph TD
  U["User typing"] --> UTG["useTerminalGhost"] --> IT["InputTracker"] --> GL["GhostLayoutHint"] --> CP["cursorPosition"] --> GSO["GhostSuggestionOverlay"] --> XT["xterm.js"]
  UTG --> CL["ghost client"] --> BK["Rust ghost engine"]
  BK --> RK["ranking + suffix"] --> CL
  BK --> PS["path_suggest"] --> CL
  DW["displayWidth helpers"] --> UTG
  DW --> GSO
  subgraph Legend
    direction LR
    _ui["UI/React"] ~~~ _lib["TS helpers"] ~~~ _be["Rust backend"]
  end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Use xterm's internal unicode/wcwidth service
  • ➕ Better fidelity with xterm rendering rules across edge-case Unicode sequences
  • ➕ Avoids maintaining a partial EastAsianWidth/combining-range table
  • ➖ May rely on private/internal APIs that can change across xterm versions
  • ➖ Harder to test outside of a real terminal instance
2. Adopt a dedicated wcwidth/grapheme library
  • ➕ More complete Unicode coverage than a curated subset
  • ➕ Potentially simpler to reason about and reuse
  • ➖ Adds dependency weight (bundle size/audit surface)
  • ➖ Still needs careful integration with terminal cell measurement and overlay spans
3. Keep frontend spacing heuristics (status quo) but tighten rules
  • ➕ Less backend change; fewer provider contracts
  • ➕ No need to coordinate path/history spacing ownership
  • ➖ Heuristics are fragile and already caused ls blk-style corruption
  • ➖ Harder to ensure consistent behavior across Rust/TS test layers

Recommendation: The PR’s approach (provider-owned spacing + explicit mid-token preference + lag-aware overlay layout) is the most robust: it eliminates a class of heuristic spacing bugs, makes history/path providers responsible for boundaries, and fixes SSH echo lag without needing to depend on xterm internals. If Unicode-width edge cases become frequent, consider switching the new display-width subset to a well-maintained wcwidth implementation or xterm-provided width logic.

Files changed (17) +579 / -242

Enhancement (4) +236 / -4
Terminal.tsxPlumb ghost layout hint through terminal component +2/-0

Plumb ghost layout hint through terminal component

• Exposes 'ghostLayout' from the ghost hook and passes it down to the terminal host so the overlay can use lag-aware positioning.

src/components/terminal/Terminal.tsx

TerminalHost.tsxPass ghost layout hint into GhostSuggestionOverlay +8/-1

Pass ghost layout hint into GhostSuggestionOverlay

• Extends host props to accept an optional 'ghostLayout' and forwards it to the overlay when inline ghost suggestions are enabled.

src/components/terminal/TerminalHost.tsx

cursorPosition.tsAdd lag-aware ghost cell resolution and wrapping helpers +105/-3

Add lag-aware ghost cell resolution and wrapping helpers

• Introduces layout hint types, terminal wrapping math, and a resolver that prefers predicted end-of-line when the live caret lags remote echo. Exposes 'getGhostPixelPosition' for overlays while keeping 'getCursorPixelPosition' as a live-caret wrapper.

src/lib/ghostSuggestions/cursorPosition.ts

displayWidth.tsAdd terminal display-width and segmentation utilities +121/-0

Add terminal display-width and segmentation utilities

• Adds a lightweight wcwidth-like implementation for zero-width, wide, and emoji ranges plus helpers to compute display-cell counts. Provides grapheme-aware segmentation (Intl.Segmenter when available) for cell-aligned overlay rendering.

src/lib/ghostSuggestions/displayWidth.ts

Bug fix (6) +258 / -228
path_suggest.rsMake path provider own leading space for new path args +14/-1

Make path provider own leading space for new path args

• Introduces a 'new_path_arg' flag to distinguish a new argument after a bare command vs a mid-token fragment. When completing a new path argument, the provider prepends a leading space to the suggested piece, preventing suffix normalization from inventing spaces for history mid-token completions.

src-tauri/src/ghost/path_suggest.rs

ranking.rsPrefer mid-token history continuations in suffix ranking +60/-19

Prefer mid-token history continuations in suffix ranking

• Adds mid-token detection and incorporates it into an effective score so command-name continuations outrank spaced new-word entries. Updates candidate sorting accordingly and adds a regression test ensuring 'ls' completes to 'lsblk' over 'ls blk' even with higher frecency.

src-tauri/src/ghost/ranking.rs

suffix.rsStop normalizer from inventing spaces; treat spacing as provider-owned +48/-139

Stop normalizer from inventing spaces; treat spacing as provider-owned

• Simplifies suffix normalization to only strip duplicate leading whitespace when the typed line already ends with whitespace. Removes heuristic glue/space insertion logic and updates unit tests to reflect provider-owned boundaries (history/path).

src-tauri/src/ghost/suffix.rs

GhostSuggestionOverlay.tsxRender ghost suffix at predicted typed end and align spans to cell width +50/-9

Render ghost suffix at predicted typed end and align spans to cell width

• Switches overlay positioning from live cursor-only to lag-aware ghost positioning using a layout hint. Adds remeasure triggers on both input and terminal writes, and renders the suggestion via per-cell segments sized with measured xterm cell width to prevent drift with wide/combining glyphs.

src/components/terminal/GhostSuggestionOverlay.tsx

useTerminalGhost.tsTrack typed-line origin and display-cell count for SSH lag compensation +81/-4

Track typed-line origin and display-cell count for SSH lag compensation

• Adds 'ghostLayout' state capturing the first typed cell origin and the display-cell width of the locally typed line buffer. Updates event handling to seed origin before feed, refresh layout on suggestion/accept/clear, and reset layout on disconnect/disable.

src/components/terminal/useTerminalGhost.ts

suggestionSuffix.tsMirror Rust normalizer: never add leading space in TS helper +5/-56

Mirror Rust normalizer: never add leading space in TS helper

• Removes the frontend heuristic spacing logic so the TS mirror matches the simplified Rust behavior: only strip duplicate leading whitespace after trailing whitespace; otherwise pass suffix through.

src/lib/ghostSuggestions/suggestionSuffix.ts

Tests (1) +67 / -6
ghostSuggestionsHelpers.test.mjsAdd tests for display width, segmentation, and lag-aware positioning +67/-6

Add tests for display width, segmentation, and lag-aware positioning

• Extends agent tests to cover display-cell width calculations, segmentation behavior for wide glyphs, the updated spacing invariant (never invent leading spaces), and the ghost cell prediction logic for SSH echo lag and wrapping/clamping.

tests/ghostSuggestionsHelpers.test.mjs

Documentation (2) +13 / -1
CHANGELOG.mdDocument ghost spacing, lag overlay, and cell-metric fixes +12/-1

Document ghost spacing, lag overlay, and cell-metric fixes

• Adds a 2.22.1 release entry detailing fixes for mid-token spacing, SSH echo-lag overlay placement, and terminal display-width alignment. Updates compare links for the new tag.

CHANGELOG.md

client.tsClarify backend ownership of suffix spacing +1/-0

Clarify backend ownership of suffix spacing

• Documents that the backend owns spacing/ranking and the frontend should not rewrite suffixes.

src/lib/ghostSuggestions/client.ts

Other (4) +5 / -3
package.jsonBump app version to 2.22.1 +1/-1

Bump app version to 2.22.1

• Updates the JS package version to 2.22.1 to match the release.

package.json

Cargo.tomlBump Tauri/Rust package version to 2.22.1 +1/-1

Bump Tauri/Rust package version to 2.22.1

• Updates the Rust crate version to 2.22.1 for the release.

src-tauri/Cargo.toml

tauri.conf.jsonBump Tauri config version to 2.22.1 +1/-1

Bump Tauri config version to 2.22.1

• Updates the Tauri app version field to 2.22.1.

src-tauri/tauri.conf.json

tsconfig.agent-tests.jsonInclude new cursor/layout and display-width helpers in agent test build +2/-0

Include new cursor/layout and display-width helpers in agent test build

• Adds the new TS helper modules to the agent test compilation set.

tsconfig.agent-tests.json

@qodo-code-review

qodo-code-review Bot commented Jul 13, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Wrong cd cd completion ✓ Resolved 🐞 Bug ≡ Correctness
Description
In path_suggestions, any directory-only command whose last arg equals the command name is treated
as a bare command, clearing partial and setting new_path_arg. This breaks completing paths like
cd cd (directory named cd) and can insert an extra leading space into the suggested suffix.
Code

src-tauri/src/ghost/path_suggest.rs[R374-380]

        partial = last_arg.clone();
        if is_directory_only && partial.to_ascii_lowercase() == command_name.to_ascii_lowercase() {
            partial.clear();
+            new_path_arg = true;
+        } else if last_arg.is_empty() {
+            new_path_arg = true;
        }
Relevance

⭐⭐⭐ High

Team heavily iterates on ghost path spacing/correctness; similar ghost path reliability fixes
accepted in PR #83.

PR-#83

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
get_last_arg() returns the last whitespace-delimited token, so for cd cd it returns cd, which
equals the command name; the new directory-only branch clears partial and marks new_path_arg,
which then triggers space-prefixing in the output builder.

src-tauri/src/ghost/token.rs[66-97]
src-tauri/src/ghost/path_suggest.rs[374-381]
src-tauri/src/ghost/path_suggest.rs[577-582]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`path_suggestions()` treats `last_arg == command_name` as a bare directory-only command invocation and clears `partial`, which is incorrect when the user actually typed an argument equal to the command name (e.g. `cd cd`). This also sets `new_path_arg`, causing the path provider to prepend a space and generating an invalid completion.

## Issue Context
- `get_last_arg()` returns the substring after the last unquoted space; for `"cd cd"` it returns `"cd"`, matching `get_command_name()`.
- The current heuristic doesn’t verify that the command truly has *no* arguments (token count == 1 / ends-with-space handling).

## Fix Focus Areas
- src-tauri/src/ghost/path_suggest.rs[374-381]
- src-tauri/src/ghost/path_suggest.rs[577-582]

## Suggested fix
- Only enter the `partial.clear(); new_path_arg = true;` path when the input is truly a bare directory-only command (e.g. token count is 1, or the line has no whitespace after the command).
 - Example: compute a token count from `parse_line.trim_end()` (quote-aware if needed), and require `token_count == 1` before treating `last_arg == command_name` as “bare”.
- Add a regression test for `cd cd` (and optionally `pushd pushd` / `popd popd`) verifying that `partial` remains `"cd"` and suggestions are filtered/prefixed correctly (no injected leading space unless starting a new arg).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Combining marks become invisible ✓ Resolved 🐞 Bug ☼ Reliability
Description
When Intl.Segmenter is unavailable, segmentTerminalCells() falls back to per-code-point
segmentation, producing standalone combining-mark segments with cells = 0.
GhostSuggestionOverlay renders these as 0px-wide spans with overflow: hidden, making the marks
disappear in the ghost overlay.
Code

src/components/terminal/GhostSuggestionOverlay.tsx[R125-142]

+      {segments && cellWidth
+        ? segments.map((seg, i) => (
+            <span
+              key={`${i}:${seg.text}`}
+              style={{
+                display: 'inline-block',
+                // Wide CJK/emoji → 2 cells; combining-only clusters → skip width 0
+                width: Math.max(seg.cells, 0) * cellWidth,
+                minWidth: seg.cells > 0 ? undefined : 0,
+                height: cellHeight,
+                lineHeight: `${cellHeight}px`,
+                textAlign: 'center',
+                overflow: 'hidden',
+              }}
+            >
+              {seg.text}
+            </span>
+          ))
Relevance

⭐⭐⭐ High

They prioritize ghost overlay width accuracy (wide/combining marks); recent ghost overlay/layout
fixes accepted in PR #83.

PR-#83

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The fallback segmentation can emit standalone code points; combining marks are classified as
zero-width, yielding segments with cells=0, and the overlay then renders those segments in
0-width, clipped spans.

src/lib/ghostSuggestions/displayWidth.ts[7-72]
src/lib/ghostSuggestions/displayWidth.ts[85-121]
src/components/terminal/GhostSuggestionOverlay.tsx[125-142]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
In the no-`Intl.Segmenter` fallback, combining marks (width 0) can become standalone segments. The overlay renders each segment in its own `inline-block` with `width = seg.cells * cellWidth` and `overflow: hidden`, so any segment with `cells = 0` has zero render area and the mark becomes invisible.

## Issue Context
- `segmentTerminalCells()` explicitly supports a fallback segmentation path.
- `codePointDisplayWidth()` assigns many combining marks width 0.
- The overlay’s segmented rendering assumes segments with `cells == 0` are still safe to render as individual spans.

## Fix Focus Areas
- src/lib/ghostSuggestions/displayWidth.ts[85-121]
- src/components/terminal/GhostSuggestionOverlay.tsx[125-142]

## Suggested fix
- In `segmentTerminalCells()` fallback mode (and/or generally), merge any leading/standalone zero-width code points (combining marks, variation selectors, ZWJ sequences as appropriate) into the previous non-zero segment’s `text` instead of emitting a separate `{ cells: 0 }` segment.
 - This keeps `cells` driven by the base glyph while preserving the full grapheme text.
- Optionally harden the overlay rendering by avoiding `overflow: hidden` for `cells == 0` spans (or skipping standalone zero-cell spans entirely after merge).
- Add/extend agent tests to cover a string like `"e\u0301"` in a forced fallback path and assert that the segments preserve the combining mark without producing a separate zero-cell span.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment thread src-tauri/src/ghost/path_suggest.rs Outdated
Comment thread src/components/terminal/GhostSuggestionOverlay.tsx

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
src-tauri/src/ghost/ranking.rs (1)

71-77: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the mid-token bonus into a named constant.

50.0 is a hard-coded value that fully dominates suffix_bonus_for_command's bonus range (including the -3 shell-separator and -2 chained-command penalties). That's likely intentional per the PR's stated goal, but as a bare magic number it's hard to tune/reason about later, and it effectively neutralizes the existing safety-oriented penalties for mid-token candidates.

♻️ Proposed refactor
+/// Mid-token continuations should outrank a "new word" match unless the
+/// combined structural bonus for the new-word candidate is enormous. Chosen
+/// to be larger than the full `suffix_bonus_for_command` range.
+const MID_TOKEN_BONUS: f64 = 50.0;
+
 fn effective_rank_score(frecency: f64, bonus: i32, mid_token: bool) -> f64 {
-    let mid = if mid_token { 50.0 } else { 0.0 };
+    let mid = if mid_token { MID_TOKEN_BONUS } else { 0.0 };
     frecency + mid + f64::from(bonus)
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src-tauri/src/ghost/ranking.rs` around lines 71 - 77, Extract the hard-coded
50.0 mid-token score in effective_rank_score into a clearly named constant, then
use that constant when mid_token is true. Keep the existing scoring behavior and
suffix bonus handling unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/lib/ghostSuggestions/displayWidth.ts`:
- Around line 85-121: Update segmentTerminalCells to calculate each grapheme
cluster’s terminal width using grapheme-aware logic rather than relying solely
on stringDisplayWidth(segment). Ensure ZWJ emoji, skin-tone sequences, and
combining-mark clusters receive the correct cell count while preserving
zero-width standalone characters and the existing segment filtering behavior.

---

Nitpick comments:
In `@src-tauri/src/ghost/ranking.rs`:
- Around line 71-77: Extract the hard-coded 50.0 mid-token score in
effective_rank_score into a clearly named constant, then use that constant when
mid_token is true. Keep the existing scoring behavior and suffix bonus handling
unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1b367e26-792d-4e71-8f85-43abf116d7e0

📥 Commits

Reviewing files that changed from the base of the PR and between 31b8893 and bb613d2.

⛔ Files ignored due to path filters (2)
  • package-lock.json is excluded by !**/package-lock.json
  • src-tauri/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (17)
  • CHANGELOG.md
  • package.json
  • src-tauri/Cargo.toml
  • src-tauri/src/ghost/path_suggest.rs
  • src-tauri/src/ghost/ranking.rs
  • src-tauri/src/ghost/suffix.rs
  • src-tauri/tauri.conf.json
  • src/components/terminal/GhostSuggestionOverlay.tsx
  • src/components/terminal/Terminal.tsx
  • src/components/terminal/TerminalHost.tsx
  • src/components/terminal/useTerminalGhost.ts
  • src/lib/ghostSuggestions/client.ts
  • src/lib/ghostSuggestions/cursorPosition.ts
  • src/lib/ghostSuggestions/displayWidth.ts
  • src/lib/ghostSuggestions/suggestionSuffix.ts
  • tests/ghostSuggestionsHelpers.test.mjs
  • tsconfig.agent-tests.json

Comment thread src/lib/ghostSuggestions/displayWidth.ts Outdated
Require a single-token line before treating last_arg as bare cd/pushd/popd (fixes cd cd). Merge zero-width marks into the previous base glyph, use grapheme-aware display width for ZWJ/emoji, and name the mid-token ranking bonus constant.
@gajendraxdev
gajendraxdev merged commit b387f86 into zync-sh:main Jul 14, 2026
6 of 7 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