chore(dev): add Windows dev runner and align lockfile versions#1015
Conversation
Add a Windows-focused dev startup script that auto-discovers pnpm/ninja and configures CEF tooling, while also bumping lockfile package versions to 0.53.4 for consistency. Made-with: Cursor
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughAdds Windows-focused developer tooling and CI script support, broadens platform-aware test behavior across the codebase, conditions UI permission controls on platform support, and updates ignore/config files for Windows dev flows. Changes
Sequence Diagram(s)sequenceDiagram
participant DevShell as Developer Shell
participant Runner as scripts/run-dev-win.sh
participant FS as Filesystem / WinGet dirs
participant Tools as pnpm/ninja/CMake
participant CEF as CEF runtime
participant Tauri as pnpm (Tauri tasks)
DevShell->>Runner: invoke run-dev-win.sh
Runner->>FS: compute repo/app/script paths\nsource load-dotenv.sh
Runner->>FS: locate WinGet package dirs\n(find newest pnpm/ninja)
FS-->>Runner: return tool paths
Runner->>Tools: export CMAKE_MAKE_PROGRAM / update PATH
Runner->>FS: locate CEF runtime under LOCALAPPDATA
FS-->>Runner: return CEF runtime (if found)
Runner->>Runner: update PATH with CEF runtime
Runner->>Tauri: run `pnpm --filter ... tauri:ensure`, `core:stage`, `tauri dev`
Tauri-->>DevShell: start dev server / Tauri dev output
Estimated Code Review Effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly Related PRs
Suggested Reviewers
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Review rate limit: 4/5 reviews remaining, refill in 12 minutes. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
scripts/run-dev-win.sh (1)
19-49: Consider extracting a shared WinGet executable resolver.
find_pnpmandfind_ninjaduplicate the same control flow; one helper would reduce drift and simplify future updates.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@scripts/run-dev-win.sh` around lines 19 - 49, find_pnpm and find_ninja duplicate the same WinGet lookup/control flow; extract a single helper (e.g., find_winget_exe or resolve_winget_package) that accepts the package pattern/name and expected exe filename, performs the to_unix_path("${LOCALAPPDATA:-}") conversion, finds the package directory with ls/.../Microsoft/WinGet/Packages/<pattern>_* , checks for -x "<candidate>/<exe>.exe" and prints the path if found, and returns appropriate status; then simplify find_pnpm and find_ninja to call that helper (keeping existing behavior of checking command -v first and falling back to the helper) so both functions reuse the shared resolver.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@scripts/run-dev-win.sh`:
- Around line 12-17: The to_unix_path function should fail fast when cygpath is
not installed; modify to_unix_path to first check for cygpath availability
(e.g., command -v cygpath or type -P cygpath) and if missing print a clear error
to stderr and exit with a non-zero status so callers don’t proceed and produce
misleading “pnpm/ninja not found” errors; update every instance/definition of
to_unix_path (the function used in both the early block and the later block
around lines 51-61) to perform this check before attempting cygpath -u and
validate the input argument as currently done.
- Line 27: The script currently picks the first WinGet package directory match
into the candidate variable using head -n1 which can return an older install;
change the selection logic in the candidate assignment (and the identical
occurrence later) to pick the latest package directory instead — e.g., list
matches, sort them by version (or by name) and choose the last entry so
candidate points to the newest pnpm.pnpm_* directory; update both places that
use head -n1 (the candidate assignment and the similar line around Line 43) to
use this “latest” selection approach.
---
Nitpick comments:
In `@scripts/run-dev-win.sh`:
- Around line 19-49: find_pnpm and find_ninja duplicate the same WinGet
lookup/control flow; extract a single helper (e.g., find_winget_exe or
resolve_winget_package) that accepts the package pattern/name and expected exe
filename, performs the to_unix_path("${LOCALAPPDATA:-}") conversion, finds the
package directory with ls/.../Microsoft/WinGet/Packages/<pattern>_* , checks for
-x "<candidate>/<exe>.exe" and prints the path if found, and returns appropriate
status; then simplify find_pnpm and find_ninja to call that helper (keeping
existing behavior of checking command -v first and falling back to the helper)
so both functions reuse the shared resolver.
🪄 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: 2cb33e59-fcf4-4fa6-aba7-2a1b6cc033dc
⛔ Files ignored due to path filters (2)
Cargo.lockis excluded by!**/*.lockapp/src-tauri/Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (1)
scripts/run-dev-win.sh
Adjust settings messaging and harden Rust test suites for Windows path/runtime differences so staged frontend and core tests behave consistently across environments. Made-with: Cursor
Refactor test assertions across multiple files for better readability by aligning code formatting and ensuring consistent style. This includes adjustments in the ScreenIntelligencePanel test, Rust tests for skill resources, and various shell command tests. Made-with: Cursor
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/openhuman/composio/trigger_history.rs (1)
116-141:⚠️ Potential issue | 🟠 MajorRestore write synchronization on Windows to avoid archive corruption
Gating out locking on Windows removes write serialization in
record_trigger; concurrent appends can race and produce malformed/incomplete JSONL lines. Keep a Windows-safe lock path (at least process-local mutex) instead of fully unsynchronized writes.Suggested patch (Windows mutex fallback)
use std::sync::{Arc, OnceLock}; +#[cfg(windows)] +use std::sync::Mutex; static GLOBAL_TRIGGER_HISTORY: OnceLock<Arc<ComposioTriggerHistoryStore>> = OnceLock::new(); +#[cfg(windows)] +static WINDOWS_TRIGGER_WRITE_LOCK: OnceLock<Mutex<()>> = OnceLock::new(); @@ - #[cfg(not(windows))] + #[cfg(windows)] + let _windows_guard = WINDOWS_TRIGGER_WRITE_LOCK + .get_or_init(|| Mutex::new(())) + .lock() + .map_err(|_| { + format!( + "[composio][history] windows write mutex poisoned for archive file {}", + path.display() + ) + })?; + + #[cfg(not(windows))] file.lock_exclusive().map_err(|error| { format!( "[composio][history] failed to lock archive file {}: {error}", path.display() ) })?;🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/openhuman/composio/trigger_history.rs` around lines 116 - 141, The Windows build currently skips file locking in record_trigger, allowing concurrent appends to corrupt the JSONL archive; restore synchronization by using a Windows-safe fallback (a process-local mutex) instead of removing locking entirely: in trigger_history::record_trigger acquire a global/static Mutex (e.g., a Lazy/static Mutex<()>) on Windows before performing writeln! and flush, map mutex lock errors into the same formatted error strings as the existing file.lock_exclusive/unlock branches, and release the mutex after flush; keep the existing file.lock_exclusive()/unlock() behavior on non-Windows targets and ensure write_result? and unlock/fallback-mutex release happen after successful write/flush.
🧹 Nitpick comments (3)
src/openhuman/tools/impl/browser/screenshot.rs (1)
357-359: Prefer partial platform adaptation over full test skip.Line 357 skips the whole unsafe-filename test on unsupported OS, which drops coverage for the shell-safety guard. Consider keeping the test active and only making path-separator-sensitive cases platform-conditional.
♻️ Suggested adjustment
- if !matches!(std::env::consts::OS, "macos" | "linux") { - return; - } let tool = ScreenshotTool::new(test_security()); - for ch in ['\'', '"', '`', '$', '\\', ';', '|', '&', '(', ')'] { + let mut chars = vec!['\'', '"', '`', '$', ';', '|', '&', '(', ')']; + if matches!(std::env::consts::OS, "macos" | "linux") { + chars.push('\\'); + } + for ch in chars { let filename = format!("test{ch}name.png"); let result = tool .execute(serde_json::json!({"filename": filename}))🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/openhuman/tools/impl/browser/screenshot.rs` around lines 357 - 359, The test currently returns early using the if !matches!(std::env::consts::OS, "macos" | "linux") { return; } guard which skips the entire unsafe-filename test on non-mac/linux; instead remove the full-test early return and keep the test active, making only the path-separator or platform-specific assertions conditional (use cfg!(target_os = "...") or check std::path::MAIN_SEPARATOR to branch expectations), or normalize paths (Path/PathBuf and to_string_lossy) so assertions that are platform-agnostic still run; update the code around the std::env::consts::OS check to only wrap/adjust the specific path-sensitive cases rather than skipping the whole test.tests/autocomplete_memory_e2e.rs (1)
57-57: Consider making the best-effort cleanup explicit.Silently discarding
clear_history()errors can make setup regressions harder to diagnose. A brief comment/log onErrwould keep intent clear without making tests brittle.♻️ Minimal clarity tweak
- let _ = history::clear_history().await; + if let Err(_e) = history::clear_history().await { + // Best-effort cleanup: each test has isolated HOME/temp workspace. + }Also applies to: 107-107, 158-158, 200-200
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@tests/autocomplete_memory_e2e.rs` at line 57, The call to history::clear_history().await is currently discarding errors (let _ = ...); change it to explicitly handle the Result by matching or using if let Err(e) = history::clear_history().await { /* log or comment */ } so failures are noted; include a short log message or test comment that this is a best-effort cleanup (do the same for the other occurrences) to make setup regressions visible without failing the test.src/openhuman/tools/impl/system/shell.rs (1)
347-347: Use camelCase for newly introduced local variables.At Line 347 and Line 359,
home_cmdandpath_cmddon’t follow the repository’s Rust naming rule.Proposed fix
- let home_cmd = if cfg!(windows) { + let homeCmd = if cfg!(windows) { "echo $env:USERPROFILE" } else { "echo $HOME" }; - let result = tool.execute(json!({"command": home_cmd})).await.unwrap(); + let result = tool.execute(json!({"command": homeCmd})).await.unwrap(); @@ - let path_cmd = if cfg!(windows) { + let pathCmd = if cfg!(windows) { "echo $env:PATH" } else { "echo $PATH" }; - let result = tool.execute(json!({"command": path_cmd})).await.unwrap(); + let result = tool.execute(json!({"command": pathCmd})).await.unwrap();As per coding guidelines
src/openhuman/**/*.rs: “Use camelCase for variable names”.Also applies to: 359-359
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/openhuman/tools/impl/system/shell.rs` at line 347, Rename the newly introduced locals home_cmd and path_cmd to camelCase (e.g., homeCmd and pathCmd) and update all usages and pattern matches accordingly in the same module; locate these identifiers in the shell command construction code (the block that sets let home_cmd = if cfg!(windows) { ... } and the similar let path_cmd = ...) and replace every reference so compilation and name resolution remain correct, then run cargo build/tests to ensure no remaining references or clippy warnings.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/openhuman/tools/impl/cron/run.rs`:
- Around line 117-125: The test currently returns early inside the cfg!(windows)
branch which skips the later history assertions; modify the Windows-specific
branch so it still checks the Windows-specific expectations (assert! on
result.is_error and spawn error in result.output()) but do not return — allow
execution to continue to call cron::list_runs and assert the records_history
behavior. Specifically, remove the early `return` in the Windows branch (or move
the Windows-only asserts into a block that does not exit), keeping references to
`result`, `result.output()`, and `cron::list_runs` and ensuring the final
`records_history` assertion runs on Windows as well.
---
Outside diff comments:
In `@src/openhuman/composio/trigger_history.rs`:
- Around line 116-141: The Windows build currently skips file locking in
record_trigger, allowing concurrent appends to corrupt the JSONL archive;
restore synchronization by using a Windows-safe fallback (a process-local mutex)
instead of removing locking entirely: in trigger_history::record_trigger acquire
a global/static Mutex (e.g., a Lazy/static Mutex<()>) on Windows before
performing writeln! and flush, map mutex lock errors into the same formatted
error strings as the existing file.lock_exclusive/unlock branches, and release
the mutex after flush; keep the existing file.lock_exclusive()/unlock() behavior
on non-Windows targets and ensure write_result? and unlock/fallback-mutex
release happen after successful write/flush.
---
Nitpick comments:
In `@src/openhuman/tools/impl/browser/screenshot.rs`:
- Around line 357-359: The test currently returns early using the if
!matches!(std::env::consts::OS, "macos" | "linux") { return; } guard which skips
the entire unsafe-filename test on non-mac/linux; instead remove the full-test
early return and keep the test active, making only the path-separator or
platform-specific assertions conditional (use cfg!(target_os = "...") or check
std::path::MAIN_SEPARATOR to branch expectations), or normalize paths
(Path/PathBuf and to_string_lossy) so assertions that are platform-agnostic
still run; update the code around the std::env::consts::OS check to only
wrap/adjust the specific path-sensitive cases rather than skipping the whole
test.
In `@src/openhuman/tools/impl/system/shell.rs`:
- Line 347: Rename the newly introduced locals home_cmd and path_cmd to
camelCase (e.g., homeCmd and pathCmd) and update all usages and pattern matches
accordingly in the same module; locate these identifiers in the shell command
construction code (the block that sets let home_cmd = if cfg!(windows) { ... }
and the similar let path_cmd = ...) and replace every reference so compilation
and name resolution remain correct, then run cargo build/tests to ensure no
remaining references or clippy warnings.
In `@tests/autocomplete_memory_e2e.rs`:
- Line 57: The call to history::clear_history().await is currently discarding
errors (let _ = ...); change it to explicitly handle the Result by matching or
using if let Err(e) = history::clear_history().await { /* log or comment */ } so
failures are noted; include a short log message or test comment that this is a
best-effort cleanup (do the same for the other occurrences) to make setup
regressions visible without failing the test.
🪄 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: cbe25caf-e4e8-43e9-831d-22033c688449
📒 Files selected for processing (17)
.gitignoreapp/src/components/settings/panels/ScreenIntelligencePanel.tsxapp/src/components/settings/panels/__tests__/ScreenIntelligencePanel.test.tsxsrc/openhuman/agent/harness/self_healing.rssrc/openhuman/composio/periodic.rssrc/openhuman/composio/trigger_history.rssrc/openhuman/cron/scheduler_tests.rssrc/openhuman/local_ai/paths.rssrc/openhuman/security/policy_tests.rssrc/openhuman/skills/ops_tests.rssrc/openhuman/tools/impl/browser/screenshot.rssrc/openhuman/tools/impl/cron/run.rssrc/openhuman/tools/impl/network/curl.rssrc/openhuman/tools/impl/system/node_exec.rssrc/openhuman/tools/impl/system/npm_exec.rssrc/openhuman/tools/impl/system/shell.rstests/autocomplete_memory_e2e.rs
✅ Files skipped from review due to trivial changes (4)
- src/openhuman/skills/ops_tests.rs
- src/openhuman/cron/scheduler_tests.rs
- src/openhuman/tools/impl/system/node_exec.rs
- .gitignore
Add 'target-test-run' to .prettierignore and correct the syntax in the lint:commands-tokens script for improved compatibility.
Harden husky pre-push to auto-discover node and pnpm via where.exe/cygpath in Git Bash so pushes don't fail when PATH is incomplete. Made-with: Cursor
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.husky/pre-push:
- Around line 33-42: The hook attempts to recover pnpm via
prepend_windows_exe_dir but does not fail when pnpm remains absent, causing
downstream noisy failures; after the recovery attempt in the pre-push script
check for pnpm (e.g., using command -v pnpm or the existing pnpm check) and if
still missing produce a clear error message and exit non-zero immediately
(similar to the existing has_node guard), so add a hard guard that echoes an
actionable message about installing/exposing pnpm and calls exit 1 before
proceeding to run Prettier/ESLint/tsc/Rust checks.
🪄 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: eaf851a6-7f38-4548-8b7f-415a3e54c241
📒 Files selected for processing (3)
.husky/pre-pushapp/.prettierignoreapp/package.json
✅ Files skipped from review due to trivial changes (2)
- app/.prettierignore
- app/package.json
|
Caution Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted. Error details |
graycyrus
left a comment
There was a problem hiding this comment.
This PR adds genuine value — Windows dev support and cross-platform test fixes are both worth having. A few issues need attention before merge.
PR description is boilerplate. The Summary / Problem / Solution / Impact / Checklist sections were left as template placeholders. Please fill them in — reviewers (and future git log readers) need to know why these tests were changed, what broke on Windows, and whether the locking removal in trigger_history.rs is safe.
Three substantive issues flagged below, plus a few minor items. The biggest one is the scripts/run-dev-win.sh path hardcoding macOS cache directories while targeting Windows — that's a copy-paste bug that will confuse the next person who tries to use the script.
scripts/run-dev-win.sh: - Add cygpath availability guard before to_unix_path; fail fast with clear error - Extract shared find_winget_exe helper to eliminate duplicated WinGet lookup flow - Pick newest WinGet package dir via sort -V | tail -n1 instead of head -n1 - Fix CEF_PATH to use Windows LOCALAPPDATA instead of macOS Library/Caches - Replace bare cargo tauri dev with $PNPM_EXE tauri dev (uses vendored CEF CLI) - Remove macOS-only APPLE_SIGNING_IDENTITY from Windows script .husky/pre-push: - Add has_pnpm() guard after Windows recovery; exit 1 with actionable message if pnpm is still unavailable so callers don't see cascading noisy failures src/openhuman/composio/trigger_history.rs: - Add WINDOWS_TRIGGER_WRITE_LOCK (process-local Mutex) to restore write serialization on Windows where fs2 file locking is unavailable src/openhuman/tools/impl/cron/run.rs: - Remove early return in force_runs_job_and_records_history; verify history persistence on all platforms (0 records on Windows spawn failure, 1 on Unix) src/openhuman/tools/impl/browser/screenshot.rs: - Remove OS early-exit from screenshot_rejects_all_unsafe_chars; keep test active on Windows, only gate the backslash char on macOS/Linux src/openhuman/tools/impl/system/shell.rs: - Remove dead cfg!(windows) branches from #[cfg(not(windows))]-gated shell_preserves_path_and_home test src/openhuman/agent/harness/self_healing.rs: - Normalize prompt once at top of tool_maker_prompt_includes_command test; use normalized for all three assertions for consistency src/openhuman/composio/periodic.rs: - Reduce run_one_tick_returns_ok test timeout from 15s to 5s for faster CI tests/autocomplete_memory_e2e.rs: - Replace let _ = history::clear_history().await at setup sites with explicit if let Err(e) handling to surface setup regressions without failing the test Made-with: Cursor
M3gA-Mind
left a comment
There was a problem hiding this comment.
Disagree (CodeRabbit shell.rs naming): @coderabbitai suggested renaming home_cmd/path_cmd to camelCase. Rust naming conventions mandate snake_case for local variables — camelCase would be a compiler warning. The dead cfg!(windows) branches inside the #[cfg(not(windows))]-gated test have been removed in this PR commit instead, which was the real underlying issue.
Already addressed (graycyrus shell.rs fixture): The comment noted test_security_with_env_cmd() was missing "set" and "mkdir" — the current code at line 298 already has allowed_commands: vec!["env".into(), "echo".into(), "set".into(), "mkdir".into()]. No change needed.
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@scripts/run-dev-win.sh`:
- Around line 16-19: The fallback to APPDATA is incorrect—ensure the CEF cache
is always rooted under LOCALAPPDATA and fail fast if LOCALAPPDATA is not set:
update the code that sets CEF_PATH (the CEF_PATH assignment and export) to
compute the path only from LOCALAPPDATA using cygpath and, if LOCALAPPDATA is
empty/undefined, print an error and exit non‑zero instead of falling back to
APPDATA so the script does not use Roaming storage.
- Around line 87-93: The script currently sources ../scripts/load-dotenv.sh
after Windows-specific path adjustments, which lets .env overwrite computed
values like CEF_PATH, CEF_RUNTIME_PATH, LIBCLANG_PATH, or PATH and break pnpm
tauri dev; move the source ../scripts/load-dotenv.sh invocation so it runs
before any Windows-specific path computations (i.e., before the code that sets
or modifies CEF_PATH/CEF_RUNTIME_PATH/LIBCLANG_PATH/PATH) so those tailored
values are not clobbered, leaving the PNPM_EXE tauri:ensure/core:stage and
PNPM_EXE tauri dev invocations unchanged.
In `@src/openhuman/composio/periodic.rs`:
- Around line 283-287: The test currently only asserts that tokio::time::timeout
returned Ok (i.e., the future completed within 5s) but doesn't assert the inner
run_one_tick() outcome; change the assertion to inspect the timeout's Ok value
and assert that the inner result from run_one_tick() is also Ok (for example by
matching or using result.expect("...").expect("run_one_tick returned error") or
equivalent) so the test fails when run_one_tick() returns Err; reference the
variables and functions run_one_tick(), result, and
tokio::time::timeout(Duration::from_secs(5), run_one_tick()) to locate where to
add the inner-result check and a clear failure message.
🪄 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: a0fc7615-479b-4f11-bb38-4afdefaaefa7
📒 Files selected for processing (11)
.gitignore.husky/pre-pushscripts/run-dev-win.shsrc/openhuman/agent/harness/self_healing.rssrc/openhuman/composio/periodic.rssrc/openhuman/composio/trigger_history.rssrc/openhuman/cron/scheduler_tests.rssrc/openhuman/tools/impl/browser/screenshot.rssrc/openhuman/tools/impl/cron/run.rssrc/openhuman/tools/impl/system/shell.rstests/autocomplete_memory_e2e.rs
✅ Files skipped from review due to trivial changes (3)
- .gitignore
- src/openhuman/agent/harness/self_healing.rs
- src/openhuman/cron/scheduler_tests.rs
🚧 Files skipped from review as they are similar to previous changes (6)
- .husky/pre-push
- src/openhuman/tools/impl/cron/run.rs
- src/openhuman/composio/trigger_history.rs
- src/openhuman/tools/impl/browser/screenshot.rs
- tests/autocomplete_memory_e2e.rs
- src/openhuman/tools/impl/system/shell.rs
scripts/run-dev-win.sh: - Source load-dotenv.sh before computing Windows-specific paths so .env cannot overwrite CEF_PATH/PATH/LIBCLANG_PATH after they are tailored for Git Bash - Fail fast with a clear error when LOCALAPPDATA is unset (instead of silently falling back to APPDATA/Roaming storage for CEF cache) - Remove now-redundant source at end of script src/openhuman/composio/periodic.rs: - Assert inner run_one_tick() result in addition to timeout guard so the test actually fails when the function returns an error quickly Made-with: Cursor
…umansai#1015) Co-authored-by: oxoxDev <164490987+oxoxDev@users.noreply.github.com>
Add a Windows-focused dev startup script that auto-discovers pnpm/ninja and configures CEF tooling, while also bumping lockfile package versions to 0.53.4 for consistency.
Made-with: Cursor
Summary
Problem
Solution
Submission Checklist
app/) and/orcargo test(core) for logic you add or changeapp/test/e2e, mock backend,tests/json_rpc_e2e.rsas appropriate)//////!(Rust), JSDoc or brief file/module headers (TS) on public APIs and non-obvious modules(Any feature related checklist can go in here)
Impact
Related
Summary by CodeRabbit
New Features
Improvements
Platform Support
Tests
Chores