Skip to content

fix(aft-bridge): align PATH defaults to plugin#127

Open
tobwen wants to merge 1 commit into
cortexkit:mainfrom
tobwen:fix/standalone-storage-defaults
Open

fix(aft-bridge): align PATH defaults to plugin#127
tobwen wants to merge 1 commit into
cortexkit:mainfrom
tobwen:fix/standalone-storage-defaults

Conversation

@tobwen

@tobwen tobwen commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Fixes #128

What is this about?

Three functions defaulted to ~/.cache/aft instead of the plugin's ~/.local/share/cortexkit/aft, causing standalone aft warmup to write to a different path than the plugin. The fallback now mirrors resolveCortexKitStorageRoot() from the plugin.

warmup.rs also never set ORT_DYLIB_PATH, so semantic index warmup failed with dlopen('libonnxruntime.so'). Now resolves the cached library from <storage_dir>/onnxruntime/1.24.4/ (and lib/ subdir) if ORT_DYLIB_PATH is not already set.

Hint

Currently, the version of onnxruntime was hardcoded, so I didn't change this.


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.


Summary by cubic

Aligns standalone storage defaults with the plugin so both use the same cortexkit/aft path, and fixes semantic warmup by auto-setting ORT_DYLIB_PATH from the cached ONNX Runtime to avoid dlopen errors.

  • Bug Fixes
    • Unified storage fallbacks to match the plugin’s resolveCortexKitStorageRoot(): prefer XDG_DATA_HOME; on Windows use LOCALAPPDATA/APPDATA; else ~/.local/share/cortexkit/aft (Windows: AppData/Local/cortexkit/aft). Applied in bash_background::storage_dir, warmup_storage_dir, and search_index::resolve_cache_dir.
    • aft warmup --semantic now sets ORT_DYLIB_PATH if unset by locating the cached library under <storage_dir>/onnxruntime/1.24.4/ (also checks lib/). Prevents dlopen('libonnxruntime.*')/missing DLL errors.

Written for commit a058506. Summary will update on new commits.

Review in cubic

Greptile Summary

Aligns the storage path fallback in three independent functions (bash_background::storage_dir, warmup_storage_dir, search_index::resolve_cache_dir) from the old ~/.cache/aft to ~/.local/share/cortexkit/aft, mirroring resolveCortexKitStorageRoot() from the TS plugin. Additionally adds try_set_ort_dylib_path to auto-detect the cached ONNX Runtime dylib before configure() runs, fixing the dlopen failure for standalone aft warmup --semantic.

  • Path alignment: All three storage-root derivations now follow the same XDG → Windows LOCALAPPDATA/APPDATA → HOME/.local/share fallback chain, keeping standalone CLI and plugin writes co-located.
  • ONNX dylib probe: try_set_ort_dylib_path checks two candidate paths under <storage_dir>/onnxruntime/1.24.4/ (root and lib/ subdir) and sets ORT_DYLIB_PATH when found; it silently no-ops if the library is absent or the env var is already set.
  • Code duplication: The identical fallback resolution block is now repeated verbatim in all three locations and will need to stay in sync if the storage root convention changes.

Confidence Score: 5/5

Safe to merge; the path-alignment changes are mechanical and consistent across all three sites, and the new ONNX probe is additive with a correct early-exit guard.

All three fallback rewrites produce identical path logic and match the TS plugin's documented convention. The try_set_ort_dylib_path addition is additive: it guards on ORT_DYLIB_PATH already being set, only touches the env before configure() runs, and has a unit test covering the happy path. The remaining concerns (silent no-op on missing library, hardcoded ONNX version, duplicated resolution block) are already tracked in prior review threads or are purely maintenance-oriented.

No files require special attention beyond what is already covered in prior review threads on warmup.rs.

Important Files Changed

Filename Overview
crates/aft/src/cli/warmup.rs Adds try_set_ort_dylib_path (probes two candidate paths, sets ORT_DYLIB_PATH) and updates warmup_storage_dir to the new XDG/Windows fallback chain; hardcoded version "1.24.4" and silent no-op when library is absent are previously-flagged concerns.
crates/aft/src/bash_background/mod.rs Straightforward path fallback update from ~/.cache/aft to ~/.local/share/cortexkit/aft; logic is correct and mirrors the other two functions exactly.
crates/aft/src/search_index.rs Fallback for resolve_cache_dir updated to the new storage root; appends /index/<key> consistently with the configured-path branch, no logic regressions.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A([storage_dir / warmup_storage_dir / resolve_cache_dir]) --> B{configured / AFT_STORAGE_DIR\nAFT_CACHE_DIR set?}
    B -->|Yes| C[Return override path]
    B -->|No| D{XDG_DATA_HOME set?\n all platforms}
    D -->|Yes| E["Return XDG_DATA_HOME/cortexkit/aft"]
    D -->|No| F{Windows build?}
    F -->|Yes| G{LOCALAPPDATA or\nAPPDATA set?}
    G -->|Yes| H["Return dir/cortexkit/aft"]
    G -->|No| I["Return USERPROFILE or HOME\n/AppData/Local/cortexkit/aft"]
    F -->|No| J["Return HOME/.local/share/cortexkit/aft"]

    K([try_set_ort_dylib_path]) --> L{ORT_DYLIB_PATH\nalready set?}
    L -->|Yes| M[Return early — no-op]
    L -->|No| N["Probe storage_dir/onnxruntime/1.24.4/lib"]
    N --> O{Root path\nexists?}
    O -->|Yes| P[set_var ORT_DYLIB_PATH]
    O -->|No| Q["Probe .../lib/lib"]
    Q --> R{lib/ path\nexists?}
    R -->|Yes| P
    R -->|No| S["Silent return - ORT_DYLIB_PATH unset"]
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A([storage_dir / warmup_storage_dir / resolve_cache_dir]) --> B{configured / AFT_STORAGE_DIR\nAFT_CACHE_DIR set?}
    B -->|Yes| C[Return override path]
    B -->|No| D{XDG_DATA_HOME set?\n all platforms}
    D -->|Yes| E["Return XDG_DATA_HOME/cortexkit/aft"]
    D -->|No| F{Windows build?}
    F -->|Yes| G{LOCALAPPDATA or\nAPPDATA set?}
    G -->|Yes| H["Return dir/cortexkit/aft"]
    G -->|No| I["Return USERPROFILE or HOME\n/AppData/Local/cortexkit/aft"]
    F -->|No| J["Return HOME/.local/share/cortexkit/aft"]

    K([try_set_ort_dylib_path]) --> L{ORT_DYLIB_PATH\nalready set?}
    L -->|Yes| M[Return early — no-op]
    L -->|No| N["Probe storage_dir/onnxruntime/1.24.4/lib"]
    N --> O{Root path\nexists?}
    O -->|Yes| P[set_var ORT_DYLIB_PATH]
    O -->|No| Q["Probe .../lib/lib"]
    Q --> R{lib/ path\nexists?}
    R -->|Yes| P
    R -->|No| S["Silent return - ORT_DYLIB_PATH unset"]
Loading

Reviews (3): Last reviewed commit: "fix: align standalone storage dir fallba..." | Re-trigger Greptile

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

2 issues found across 3 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="crates/aft/src/cli/warmup.rs">

<violation number="1" location="crates/aft/src/cli/warmup.rs:294">
P1: Hardcoded ONNX Runtime version string can drift from the actual cached ORT version and break semantic warmup.</violation>
</file>

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

} else {
"libonnxruntime.so"
};
let ort_dir = storage_dir.join("onnxruntime").join("1.24.4");

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1: Hardcoded ONNX Runtime version string can drift from the actual cached ORT version and break semantic warmup.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At crates/aft/src/cli/warmup.rs, line 294:

<comment>Hardcoded ONNX Runtime version string can drift from the actual cached ORT version and break semantic warmup.</comment>

<file context>
@@ -248,11 +254,50 @@ fn warmup_storage_dir() -> PathBuf {
+    } else {
+        "libonnxruntime.so"
+    };
+    let ort_dir = storage_dir.join("onnxruntime").join("1.24.4");
+    for candidate in [ort_dir.join(lib_name), ort_dir.join("lib").join(lib_name)] {
+        if candidate.is_file() {
</file context>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Pre-existing pattern! The plugin side already pins 1.24.4 in two separate files (onnx-runtime.ts, onnx.ts). The Rust string is a third copy. Cross-language constant sync would require build-time codegen, which is out of scope for this fix.

Comment thread crates/aft/src/bash_background/mod.rs
@tobwen tobwen force-pushed the fix/standalone-storage-defaults branch from a3b71fb to dc0dae5 Compare June 24, 2026 05:13
Comment on lines +294 to +300
let ort_dir = storage_dir.join("onnxruntime").join("1.24.4");
for candidate in [ort_dir.join(lib_name), ort_dir.join("lib").join(lib_name)] {
if candidate.is_file() {
std::env::set_var("ORT_DYLIB_PATH", &candidate);
break;
}
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Silent no-op when library not cached

try_set_ort_dylib_path returns without setting ORT_DYLIB_PATH (and without any diagnostic) if neither candidate path exists. The subsequent configure call will then hit the same dlopen failure this fix is meant to prevent, with no indication of why. A user who hasn't yet run the plugin (so the library was never downloaded) will see the exact same opaque error as before. At minimum, an eprintln! warning pointing to the expected path would help with diagnosis.

} else {
"libonnxruntime.so"
};
let ort_dir = storage_dir.join("onnxruntime").join("1.24.4");

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 The version string "1.24.4" is hardcoded in the library probe path. When the plugin upgrades its ONNX Runtime cache (e.g. onnxruntime/1.25.0/), try_set_ort_dylib_path will silently find nothing and ORT_DYLIB_PATH will remain unset. Given the PR description already acknowledges this, consider at least making it a named constant so there is a single place to update.

Suggested change
let ort_dir = storage_dir.join("onnxruntime").join("1.24.4");
const ORT_VERSION: &str = "1.24.4";
let ort_dir = storage_dir.join("onnxruntime").join(ORT_VERSION);

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@tobwen tobwen force-pushed the fix/standalone-storage-defaults branch from dc0dae5 to f984b57 Compare June 27, 2026 11:39
…_DYLIB_PATH in warmup

Three functions defaulted to ~/.cache/aft instead of the plugin's
~/.local/share/cortexkit/aft, causing standalone `aft warmup` to
write to a different path than the plugin. Fallback now mirrors
resolveCortexKitStorageRoot() from the TS plugin (XDG_DATA_HOME,
Windows LOCALAPPDATA/APPDATA, ~/.local/share/cortexkit/aft).

warmup.rs also never set ORT_DYLIB_PATH, so semantic index warmup
failed with dlopen('libonnxruntime.so'). Now resolves the cached
library from <storage_dir>/onnxruntime/1.24.4/ (and lib/ subdir)
if ORT_DYLIB_PATH is not already set.
@tobwen tobwen force-pushed the fix/standalone-storage-defaults branch from f984b57 to a058506 Compare July 7, 2026 23:28
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.

Standalone aft warmup uses wrong storage default and fails to load ONNX Runtime

1 participant