Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
222 commits
Select commit Hold shift + click to select a range
3299c16
Docs/i18n batch c1 developing foundation (#2504)
JAYcodr May 22, 2026
4a76f22
docs(i18n): add zh-CN translations for developing modules (C2) (#2505)
JAYcodr May 22, 2026
533208b
docs(i18n): add zh-CN translation for developing/README.md (C2b) (#2506)
JAYcodr May 22, 2026
ae0464b
feat(memory): two-lane user preferences (save_preference) + model-awa…
sanil-23 May 22, 2026
1f9a23d
fix(cef): auto-disable prewarm webview on Wayland/XWayland to prevent…
M3gA-Mind May 22, 2026
0826de4
feat(composio): add GitHub as a native memory provider (#2488)
M3gA-Mind May 22, 2026
e7e660f
fix(inference): fail closed when BYOK intent cannot resolve a provide…
M3gA-Mind May 22, 2026
9ac9613
feat: make CORS origin configurable for cloud deployments (#2344)
hobostay May 23, 2026
03d1e25
feat(e2e): complete E2E v2 suite — 66 specs, orchestrator, bug fixes …
YellowSnnowmann May 23, 2026
d6ee4aa
Fix expired pending approvals lingering after restart (#2357)
Alexxigang May 23, 2026
9b2eb90
chore(shortcuts): self-assign PR in pnpm review fix (#2510)
senamakel May 23, 2026
b0facb5
fix(config): preserve built-in reserved-slug cloud_providers across s…
YellowSnnowmann May 23, 2026
a6b19ce
fix(agent-harness): dedup visible tool specs in all provider-call pat…
YellowSnnowmann May 23, 2026
50c84f9
feat(composio): add Linear as a native memory provider (#2452)
M3gA-Mind May 23, 2026
49528de
fix(integrations): distinguish mid-OAuth / expired / failed states in…
CodeGhost21 May 23, 2026
50172f4
Fix provider setup error wrapping (#2369)
graycyrus May 23, 2026
04e1bcb
docs(model-routing): document per-agent model pins (#2431)
aqilaziz May 23, 2026
4572972
packaging(arch): add openhuman-bin AUR recipe (#2428)
aqilaziz May 23, 2026
d42835f
docs(cloud): document remote web UI preview (#2434)
aqilaziz May 23, 2026
33dc4ec
docs(search): document SearXNG setup (#2435)
aqilaziz May 23, 2026
1a852cd
docs: clarify managed backend defaults (#2426)
sunilkumarvalmiki May 23, 2026
05e1e5d
test(e2e): add stable UI hooks (#2421)
aqilaziz May 23, 2026
7e9c29d
fix(triage): defer malformed cloud replies (#2415)
aqilaziz May 23, 2026
299e54d
fix(memory): localize background LLM prompts (#2447)
sunilkumarvalmiki May 23, 2026
2f5db77
feat(approval): persist post-execution audit row alongside approval (…
CodeGhost21 May 23, 2026
27bea24
fix(auth): deliver OAuth JWT to remote core in cloud mode (#2453)
M3gA-Mind May 23, 2026
333bd52
fix(config): log RPC URL and core mode as strings, not object wrapper…
M3gA-Mind May 23, 2026
ae6909f
feat(tauri): support workspace file links (#2476)
YOMXXX May 23, 2026
b087d70
fix(observability,composio): demote direct-mode Composio 401/Invalid …
oxoxDev May 23, 2026
f346476
chore(staging): v0.54.8
github-actions[bot] May 23, 2026
2c68eae
i18n: polish Indonesian UI translations (#2475)
aqilaziz May 23, 2026
e9c9374
feat(composio): curate OneDrive/Excel/Todoist + UI preview badge for …
CodeGhost21 May 23, 2026
0b2e9fe
fix(memory): bound ingestion queue to prevent OOM under runaway produ…
M3gA-Mind May 23, 2026
1cb6a14
fix(tauri): forward deep-link URLs on Linux before CEF preflight exit…
M3gA-Mind May 23, 2026
5b29725
feat(composio): add Linear provider for Memory Tree ingest (#2402)
justinhsu1477 May 23, 2026
934546b
chore(staging): v0.54.9
github-actions[bot] May 23, 2026
bbec0d6
feat(auth): loopback OAuth redirect with deep-link fallback (#2511)
senamakel May 23, 2026
e53204c
test(e2e): expand e2e coverage for 12 missing high-priority flows (#2…
senamakel May 23, 2026
67c943b
chore(staging): v0.54.10
github-actions[bot] May 23, 2026
9bae6d5
feat(analytics): forward x-tauri-version and x-core-version on every …
senamakel May 23, 2026
25da30f
test(e2e): expand agent-harness coverage for channels + prompt flows …
senamakel May 23, 2026
ac67a95
feat(keyring): OS keychain for secrets with dev-mode file backend (#2…
senamakel May 23, 2026
f29a20f
fix(agent): remove welcome agent flow (#2517)
senamakel May 23, 2026
6a09030
feat(search): unified search-engine selector + Brave Search (#2516)
senamakel May 23, 2026
838309e
Docs/i18n batch fix link localization (#2508)
JAYcodr May 23, 2026
95aeab5
docs(i18n): add zh-CN translations for features cloud-deploy, tool-me…
JAYcodr May 23, 2026
48548a2
feat(app): UI control for max_actions_per_hour (#2486) (#2500)
EvanCarson May 23, 2026
c6f5a8b
Add custom GIF mascot avatar override (#2347)
vaddisrinivas May 23, 2026
0d83851
fix(release): build linux arm64 target artifact (#2404)
aqilaziz May 23, 2026
ae164f5
fix(installer): let linux arm64 dry-run report unsupported asset (#2405)
aqilaziz May 23, 2026
2f913a2
fix(composio): show waiting state before opening browser (#2406)
aqilaziz May 23, 2026
f62bc96
Feat/2358 clear reembed skipped (#2443)
MrMrVlad May 23, 2026
8371755
fix(logging): print stored RPC URL as string in configPersistence (#2…
leighstillard May 23, 2026
ebdd03e
Document Linux/Wayland AppImage launch-crash workaround in README (#2…
distorx May 23, 2026
97553ca
feat(wallet): complete multi-chain signing + broadcast (EVM/BTC/Solan…
senamakel May 23, 2026
5aa6fbb
feat(analytics): enable low-rate browser Sentry tracing (#2520)
senamakel May 23, 2026
186498b
fix(linux): include libxdo3 in deb dependencies (#2498)
NgoQuocViet2001 May 23, 2026
a2d1b12
fix(i18n): add missing settings.mascot.customGif* keys for de (#2522)
senamakel May 23, 2026
fe37b13
fix(observability): demote OpenHuman backend unknown-model 400 (TAURI…
CodeGhost21 May 23, 2026
3e5a083
feat(ios): iOS client with QR pairing, E2E-encrypted tunnel, and push…
senamakel May 23, 2026
974abba
fix(memory/ingestion): bound the job channel + reject submits at cap …
obchain May 23, 2026
27f8d77
Fix/channels i18n hardcoded text (#2509)
JAYcodr May 23, 2026
b47b71e
fix(core): clean up startup timeout task (#2407)
NgoQuocViet2001 May 23, 2026
f4ea6a4
fix(docker): lower default build memory (#2420)
aqilaziz May 23, 2026
d93f834
feat(mascot): react to conversation cues (#2423)
aqilaziz May 23, 2026
7745d58
refactor(config): optimize backend URL resolution & local AI endpoint…
manucian-official May 23, 2026
f8c9698
feat(inference): OpenAI-compatible /v1 router with user-managed API k…
senamakel May 23, 2026
2a5d821
fix(docker): normalize core entrypoint line endings (#2545)
YOMXXX May 23, 2026
4c6007b
fix(oauth): make loopback redirect actually work, plus settings clean…
senamakel May 23, 2026
6a06bae
fix(windows): make port/process takeover actually free the port (#2552)
senamakel May 23, 2026
cf600a9
feat(memory_tree): consolidate module + add agentic walk tool + tests…
senamakel May 24, 2026
85e8421
feat: prod-test 2026-05-23 — composer, settings reorg, MCP/search, al…
senamakel May 24, 2026
f66e7e4
feat(encapsulation): cross-platform directory jail for agents/tools (…
senamakel May 24, 2026
e9ca97c
feat(mcp): split mcp_client/registry, multi-registry, boot-spawn + se…
senamakel May 24, 2026
d52abe5
fix(ai): add OpenRouter OAuth provider flow (#2571)
senamakel May 24, 2026
59c1687
Fix provider model testing and add MCP coming soon placeholder (#2570)
senamakel May 24, 2026
a47740d
test(memory): extend memory coverage across retrieval and tooling (#2…
senamakel May 24, 2026
b62409a
perf(e2e): full-suite hardening — sharded build/test, loopback auth, …
senamakel May 24, 2026
b08998d
i18nize remaining React UI strings (#2577)
senamakel May 24, 2026
61cfabb
docs(skill): make ship-and-babysit proactive (#2581)
senamakel May 24, 2026
76ce014
fix(ai): route local inference through provider router + revamp setti…
senamakel May 24, 2026
fa62b7b
feat(auth): add local offline login (#2208)
shadowdoggie May 24, 2026
a222808
test(memory): share workspace env lock (#2582)
senamakel May 24, 2026
dc1e64d
feat(embeddings): configurable embedding providers with dedicated set…
senamakel May 24, 2026
2903607
feat(voice): add voice provider registry with third-party STT/TTS sup…
senamakel May 25, 2026
41c6686
refactor(memory): separate tree policy from generic engine + E2E test…
senamakel May 25, 2026
29ac3ec
fix(i18n): backfill locale translations (#2588)
senamakel May 25, 2026
45a1502
fix(e2e): stabilize appium docker harness (#2589)
senamakel May 25, 2026
8f2e68d
feat(embeddings): onboarding step + graceful degradation when disable…
senamakel May 25, 2026
ddfb611
chore(repo): expose PR sync script (#2595)
senamakel May 25, 2026
91f2774
refactor(security): move secret store under keyring (#2592)
senamakel May 25, 2026
5a7f204
test(memory): expand sync, vault, and artifact rust coverage (#2594)
senamakel May 25, 2026
b969c3e
fix(memory): clarify missing ollama embedding model (#2533)
YOMXXX May 25, 2026
3cf3b1f
feat: add ToolPolicy middleware for tool-loop allow/deny gate (#2303)
Liohtml May 25, 2026
cd86444
feat(mcp): add memory.store and memory.note write tools (#2306)
Liohtml May 25, 2026
646c812
docs(i18n): add zh-CN translations for legal docs, README, and SUMMAR…
JAYcodr May 25, 2026
0122678
docs(readme): sync PR #2426 managed-backend clarifications to all lan…
JAYcodr May 25, 2026
8ba259c
feat(memory): route summaries through workspace paths (#2527)
YOMXXX May 25, 2026
e0e9a11
fix(app): preserve local runtime choice on rehydrate (#2529)
YOMXXX May 25, 2026
9cffd3a
fix(memory): sanitize fts5 user queries (#2531)
YOMXXX May 25, 2026
c6029e1
fix(ci): avoid persisted credentials for public submodules (#2535)
YOMXXX May 25, 2026
819a83e
test(auth): cover Composio upstream 401 session guard (#2544)
YOMXXX May 25, 2026
fdd56a8
fix: remove obsolete sidecar staging from worktree bootstrap (#2561)
Subharup-31 May 25, 2026
83e4e57
[codex] Enforce LF line endings for text checkouts (#2564)
Felyx-Fu May 25, 2026
c88fea1
fix(core): compare RPC bearer tokens in constant time (#2572)
NgoQuocViet2001 May 25, 2026
36fe567
fix(i18n): remove duplicate German mascot GIF keys (#2597)
YOMXXX May 25, 2026
753776b
fix(i18n): translate custom GIF mascot strings for zh-CN (#2538)
mengqiuzhen May 25, 2026
2f3f626
fix: add VoiceOver accessibility support to onboarding button (#2593)
1363033915 May 25, 2026
4a373ab
feat(mcp-registry): cursor pagination + wrapped-response fix for offi…
justinhsu1477 May 25, 2026
7939eb4
fix format (#2599)
senamakel May 25, 2026
cc67177
Fix signed-out Ollama prompt/chat with Gemma 4 (#2563)
JZKK720 May 25, 2026
03d6898
docs(claude-md): make git workflow contributor-agnostic (#2568)
hakaitech May 25, 2026
bf2400f
feat(composio): promote GitHub from catalog-only to native memory pro…
justinhsu1477 May 25, 2026
484e31d
feat(memory): clear source memory on disconnect (#2528)
YOMXXX May 25, 2026
d0ed10b
Fix secret scrubbing in Sentry before_send: cover Anthropic/OpenAI-sc…
shriii257 May 25, 2026
147e2bc
fix(security): allow bare date in default autonomy policy (#2534)
YOMXXX May 25, 2026
ae699a0
Add runtime policy, revocation, and audit correlation for generated t…
vaddisrinivas May 25, 2026
ace44fb
[codex] Add MCP write audit log (#2566)
Felyx-Fu May 25, 2026
b7b8ba6
feat(thread): support manual editing of conversation thread titles (#…
neillee95 May 25, 2026
b399eab
feat(settings): add Persona Pack v1 (closes #2345) (#2558)
hemanth1999k May 25, 2026
9a65e86
chore(staging): v0.54.11
github-actions[bot] May 25, 2026
7ac685e
feat(core): opt-in memory deletion on channel / composio disconnect (…
mengqiuzhen May 25, 2026
d997394
feat(channels/yuanbao): add Yuanbao channel provider (#2600)
senamakel May 25, 2026
cdee8f7
fix(startup): recover from core port 7788 conflict automatically (#2626)
M3gA-Mind May 25, 2026
f756893
test(e2e): default file keyring + RPC diagnostics to unblock Linux Ap…
sanil-23 May 25, 2026
5d380c3
fix(observability,embeddings): demote Ollama embed user-config reject…
oxoxDev May 25, 2026
c28d9da
fix(app): guard CEF IPC fallback sync throw via safeInvoke wrapper (S…
oxoxDev May 25, 2026
c244f58
fix: harden workspace routing and local-first gates (#2445)
YOMXXX May 25, 2026
8a44abc
fix(boot): unstick "Initializing OpenHuman" after kill/reopen (auth-p…
sanil-23 May 25, 2026
5493b92
fix(installer): require python3 in prereq loop (#2624) (#2627)
oxoxDev May 25, 2026
1eb5b24
fix(ci): harden contributor-rewards pull_request_target (#2621) (#2628)
oxoxDev May 25, 2026
440c016
docs(install): promote native packages as primary install path (#2620…
oxoxDev May 25, 2026
7044003
refactor(app/deps): move redux-logger to devDependencies (#2625) (#2630)
oxoxDev May 25, 2026
20c349f
fix(ai): contain provider setup errors (#2411)
aqilaziz May 25, 2026
b237cc2
chore(staging): v0.54.12
github-actions[bot] May 25, 2026
5e31d3e
fix(release): rewrite sharun lib.path CI runner paths to bundle-relat…
senamakel May 25, 2026
83cb7c5
chore(staging): v0.54.13
github-actions[bot] May 25, 2026
0d62e84
fix(inference): preserve connected-app tools when BYOK provider is co…
M3gA-Mind May 25, 2026
0e4729e
test(memory): serialize tests that drive the process-global memory cl…
sanil-23 May 25, 2026
e05cab9
fix(memory-workspace): detect Obsidian vault registration before deep…
sanil-23 May 25, 2026
f946d10
feat(mascot): replace SVG animations with Rive renderer (#2659)
senamakel May 26, 2026
982f789
feat(keyring): encrypted-file backend with single OS keychain master …
senamakel May 26, 2026
705b76c
chore(staging): v0.54.14
github-actions[bot] May 26, 2026
b6d3158
fix(settings): blur recovery phrase by default (#2658)
iamrhn May 26, 2026
b91e498
fix(keyring): cache availability probe with OnceLock to prevent repea…
M3gA-Mind May 26, 2026
d809628
chore(staging): v0.54.15
github-actions[bot] May 26, 2026
0a9f7a0
feat(agent): agentic coding runtime — gated OS capabilities (filesyst…
sanil-23 May 26, 2026
e7e7e8a
Migrate E2E coverage to Playwright (#2610)
senamakel May 26, 2026
de2a78a
fix: graceful decrypt failure + CSP wasm-unsafe-eval for Rive mascot …
M3gA-Mind May 26, 2026
099570c
fix(channels): thread workspace identity through channel events to pr…
M3gA-Mind May 26, 2026
730017e
test(loopback-oauth): extract classify_request and add routing unit t…
M3gA-Mind May 26, 2026
4e7c6e1
refactor(mcp_server): extract write-dispatch and audit pipeline into …
M3gA-Mind May 26, 2026
ef7a94d
fix(security): stop classifying read-only pacman -S queries as Instal…
sanil-23 May 26, 2026
fa85d5c
fix(i18n): localize agentAccess.pathPlaceholder across non-English lo…
sanil-23 May 26, 2026
1aee7de
test(agent-harness): restore TAURI-RUST-4 dedup seam test (#2665)
sanil-23 May 26, 2026
844a26c
test(memory-sync/github): assert involves: query qualifier (#2664)
obchain May 26, 2026
b616f48
feat: make autonomy action budget configurable (#2499)
YOMXXX May 26, 2026
c42e249
fix: runtime snapshot timeouts, config perms, stale lock recovery, su…
M3gA-Mind May 26, 2026
60050aa
feat: tighten runtime policy + transport guards v2 (#2636)
oxoxDev May 26, 2026
de7d8bb
fix(memory): retry truncated extractions + release job locks on grace…
sanil-23 May 26, 2026
6736467
fix(agent): resumable checkpoint at tool-call cap + tolerant tool par…
sanil-23 May 26, 2026
87f8ef4
chore(staging): v0.54.16
github-actions[bot] May 26, 2026
77c15cb
feat(search): unified web-access firewall (fetch + browser) with tri-…
sanil-23 May 26, 2026
6d0657e
feat(skills): hide preview Composio toolkits by default + add Preview…
M3gA-Mind May 26, 2026
5c035d8
fix(test): pin OPENHUMAN_WORKSPACE under TEST_ENV_LOCK in memory docu…
sanil-23 May 26, 2026
99ad663
feat(composio): add tags query param to GitHub tool list API (#2714)
M3gA-Mind May 26, 2026
a3023d0
fix(agent): prevent orphaned tool messages from reaching the provider…
sanil-23 May 27, 2026
0fddf11
feat(approval): consolidate on ApprovalGate + persistent "Always allo…
sanil-23 May 27, 2026
a7190c3
chore(staging): v0.54.17
github-actions[bot] May 27, 2026
5ccce3e
fix(test): make memory ingestion-status test residue-robust (queue_de…
sanil-23 May 27, 2026
c3e773a
chore(staging): v0.54.18
github-actions[bot] May 27, 2026
f946eda
fix(tauri): harden Windows pre-CEF single-instance mutex handling (#2…
YellowSnnowmann May 27, 2026
e2601a2
feat(doctor): surface embedding model health to user (#2474) (#2674)
YellowSnnowmann May 27, 2026
e6192e2
fix(security): expand default allowed_commands and auto_approve (#248…
YellowSnnowmann May 27, 2026
6efed78
chore(staging): v0.54.19
github-actions[bot] May 27, 2026
abbde49
chore(staging): v0.54.20
github-actions[bot] May 27, 2026
ee63a9d
fix(e2e/oauth): gate Redux store exposure and fix loopback listener t…
YellowSnnowmann May 27, 2026
d7fb5a1
chore(staging): v0.54.21
github-actions[bot] May 27, 2026
b94545b
chore(skills): remove Composio Preview badge and filter pill (#2749)
M3gA-Mind May 27, 2026
fae1608
fix(memory-workspace): show all native Composio memory-sync sources (…
YellowSnnowmann May 27, 2026
7465bac
fix(release): handle missing desktop-file-validate in AppImage repack…
senamakel May 27, 2026
99b3aff
docs(readme): fix Homebrew tap namespace in macOS install instruction…
YellowSnnowmann May 27, 2026
996e3ad
fix(ui): equal-height Composio tiles and visible agent icon on dark s…
M3gA-Mind May 27, 2026
6ff03cd
chore(staging): v0.54.22
github-actions[bot] May 27, 2026
1975296
fix(i18n): correct key/value semantic mismatch in en-5.ts and all loc…
M3gA-Mind May 27, 2026
7048f39
fix(tools): normalise persisted tool names on read to fix web-search …
M3gA-Mind May 27, 2026
035f344
fix(test): eliminate memory::ops flakes under cargo-llvm-cov (#2722) …
M3gA-Mind May 27, 2026
4d9fe20
fix(security): gate all cron/schedule mutation tools behind ApprovalG…
M3gA-Mind May 27, 2026
ba278ec
fix(voice): prevent rdev TSMGetInputSourceProperty crash on macOS 26 …
M3gA-Mind May 27, 2026
cc4665b
fix(tools): make http_request web-fetch work with empty allowed_domai…
M3gA-Mind May 27, 2026
93bad38
feat(analytics): dual GA4 + OpenPanel, disable Sentry profiling (#2750)
senamakel May 27, 2026
4043d03
feat(i18n): add Polish (pl) locale at ~91% coverage (#2731)
mysma-9403 May 27, 2026
0164a5c
fix(channels): surface structured rate-limit metadata on chat_error (…
CodeGhost21 May 27, 2026
3573d3c
chore(release): v0.55.0
github-actions[bot] May 27, 2026
fcb6dcf
fix(voice): auto-select first preset when mascot voice gender changes…
M3gA-Mind May 27, 2026
8b702c7
fix(auth): keep a valid session across the first-login restart (corro…
sanil-23 May 27, 2026
21ab20f
feat(memory-tree): status panel + on/off toggle (#1856 Part 1) (#2719)
YOMXXX May 27, 2026
7b16112
test: unblock cargo test --lib on main (3 stale test fixtures) (#2710)
oxoxDev May 27, 2026
82dd260
fix(tools): coerce zero http_request timeout/size + migrate stale-zer…
sanil-23 May 27, 2026
26295df
fix(config): reconcile orphaned provider references on upgrade (#2759…
sanil-23 May 27, 2026
5629301
chore(staging): v0.55.1
github-actions[bot] May 27, 2026
7624efc
fix(ci): bump Windows test timeout to 35m and fix dead security::secr…
M3gA-Mind May 27, 2026
e896807
chore(release): v0.56.0
github-actions[bot] May 27, 2026
fd9e0cb
chore(release): v0.57.0
github-actions[bot] May 27, 2026
54c1725
test(memory): avoid PII-like tool rule names (#2680)
YOMXXX May 27, 2026
976e564
fix(tauri): verify openhuman:// registry registration on Windows (#26…
CodeGhost21 May 27, 2026
7fc88c1
feat(mcp): expose bundled prompts as static MCP resources (#2745)
M3gA-Mind May 27, 2026
cde5f65
feat(inference): add claude_agent_sdk provider (Claude CLI subprocess…
M3gA-Mind May 27, 2026
d696d82
fix(composio): forward tags filter in direct (BYO-key) tool listing (…
sanil-23 May 27, 2026
2b1e22a
fix(i18n): correct key/value semantic mismatch in chunk-5 locale file…
graycyrus May 27, 2026
d8696c1
feat(settings): add Dev Workflow config panel (#2703)
graycyrus May 27, 2026
129abfe
feat(chat): render agent-bubble LaTeX with KaTeX and safe math detect…
YellowSnnowmann May 28, 2026
4c11942
feat(cost): add settings cost dashboard with global tracker, dashboar…
YellowSnnowmann May 28, 2026
3f2e2f2
fix(observability): demote backend Cloudflare anti-bot wrap (Sentry T…
oxoxDev May 28, 2026
145e768
chore(staging): v0.57.1
github-actions[bot] May 28, 2026
d578b57
fix(observability): demote expected-error Sentry buckets across embed…
YellowSnnowmann May 28, 2026
1884e10
fix: resolve Sentry issue 5677 (#2810)
CodeGhost21 May 28, 2026
8365e0c
fix(inference): distinguish missing-data-field from wrong-type in /mo…
CodeGhost21 May 28, 2026
cac54c6
fix(observability): classify 'operation timed out' transport phrase a…
CodeGhost21 May 28, 2026
629369b
fix(config): retry transient config-read race on Windows (Sentry TAUR…
CodeGhost21 May 28, 2026
f7babff
fix(observability): demote unknown-provider list_models error (Sentry…
CodeGhost21 May 28, 2026
4adf6b6
fix(agent): suppress empty-provider-response from Sentry (TAURI-RUST-…
CodeGhost21 May 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
32 changes: 32 additions & 0 deletions .claude/memory.md
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,10 @@ Quick reference for anyone starting with Claude on this project. Updated by the
- **Global static cache tests need a reset guard** — When testing code that reads/writes a `Lazy<Mutex<Option<...>>>` global cache, use a `struct CacheResetGuard; impl Drop for CacheResetGuard { fn drop(&mut self) { *CACHE.lock() = None; } }` pattern so each test starts clean. See `SnapshotCacheResetGuard` / `CacheResetGuard` in `ops_tests.rs`.
- **Test assertions must match the actual dummy value** — When a builder (e.g. `build_dummy_runtime_snapshot()`) wraps `degraded_runtime_snapshot()`, assert against `dummy.field` rather than a hardcoded string (e.g. `"idle"` vs the actual `"degraded"`) to verify round-trip correctness without false mismatches.
- **`composio::action_tool::tests::mode_toggle_between_calls_is_observed` is flaky in full suite** — Fails intermittently due to shared global composio session state; passes in isolation. Pre-existing; not caused by snapshot perf work.
- **`GLOBAL_MEMORY_TEST_LOCK` only serializes test bodies, not background workers** — Background ingestion spawned by a prior test can still be running when the next test acquires the lock. Call `state.reset_for_test()` at test start (after acquiring the lock) to clear accumulated `queue_depth`/`running` state; do not rely on delta assertions alone.
- **`IngestionState::reset_for_test()` is `#[cfg(test)]`-gated** — Lives in `src/openhuman/memory/ingestion/state.rs`. Zeroes `queue_depth` (AtomicUsize) and clears running/current fields in the snapshot while preserving completion history. This is the canonical reset for any test asserting exact queue or running state.
- **cargo-llvm-cov widens SQLITE_BUSY window** — Flakes that only appear under coverage (`cargo-llvm-cov`) but not plain `cargo test` are usually (a) a SQLite connection missing `busy_timeout`, or (b) shared global state not reset between tests. Always set `busy_timeout` on new SQLite connections (see pattern below).
- **All new SQLite connections must set `busy_timeout = 15s`** — Call `conn.busy_timeout(Duration::from_secs(15))` immediately after `Connection::open()`, before any `execute_batch()`. Pattern set by `chunks/store.rs` (`SQLITE_BUSY_TIMEOUT`) and now also used by `memory_store/unified/init.rs` (fixed in issue #2722). Without it, concurrent ingestion + test writes produce `SQLITE_BUSY` under cargo-llvm-cov.

## App State Snapshot (Issue #2155 — first-launch perf)

Expand Down Expand Up @@ -257,3 +261,31 @@ Quick reference for anyone starting with Claude on this project. Updated by the
## Pre-existing Flaky Tests

- **`composio::action_tool` and `agent::harness::session::turn` intermittent failures** — These tests fail randomly when run as part of the full suite (likely shared state or timing), but pass individually. Not related to security/policy changes. Do not treat as blockers for security-module PRs.

## Windows OAuth Deep Link (Issue #2562)

- **Three-layer fix**: (1) named-pipe IPC in `deep_link_ipc_windows.rs` — secondary process forwards `openhuman://` URL to primary via `\\.\pipe\com.openhuman.app-deeplink`, 40 retries × 50ms; (2) loopback OAuth server in `loopback_oauth.rs` — RFC 8252 one-shot `127.0.0.1:53824`, preferred path that eliminates deep link dispatch entirely; (3) Linux analog in `deep_link_ipc.rs` — Unix domain socket at `$XDG_RUNTIME_DIR/com.openhuman.app-deeplink.sock`.
- **`OAuthProviderButton.tsx` loopback flow** — tries loopback first, sets `redirectUri` for backend, awaits callback, rewrites `http://127.0.0.1:PORT/auth?...` → `openhuman://auth?...` → `handleDeepLinkUrls`. Falls back to deep link if bind fails.
- **Pipe binding location** — primary binds the named pipe in `lib.rs` right after the mutex guard (line 2269); `drain_pending_urls()` wired in `setup()` at line 2578.
- **Issue was already fixed before we picked it up** — PRs #2469, #2511, #2550 had already merged the fix. Our contribution was extracting `classify_request` as a pure function and adding 11 Rust unit tests.
- **Pure-function extraction pattern** — when async/AppHandle-gated Tauri code is untestable, extract a `classify_request(head, expected_state, bound_port) -> RequestOutcome` pure function returning an enum. Enables comprehensive unit tests with zero Tauri context. `RequestOutcome` has 4 variants: `AuthCallback`, `StateMismatch`, `NotFound`, `MethodNotAllowed`.

## Port Conflict Recovery (Issue #2617)

- **Port fallback already in `pick_listen_port`** — `src/openhuman/connectivity/rpc.rs` tries ports 7789–7798 when 7788 is busy. Gap was: frontend `getCoreRpcUrl()` cached the URL on first resolution so it never picked up the fallback port, and stale-process reaping was macOS-only.
- **`process_recovery.rs` is platform-gated** — `reap_stale_openhuman_processes` had only a macOS impl. Linux uses `/proc/<pid>/cmdline`; Windows uses `wmic process get`. Tests for each platform's parsing logic live in the same file, following the existing macOS test pattern.
- **`recover_port_conflict` is a Tauri IPC command, not JSON-RPC** — Rust E2E test for port fallback lives in `tests/json_rpc_e2e.rs` and calls `pick_listen_port` directly: bind port 7788 with a `std::net::TcpListener` (std, not tokio) to simulate conflict, confirm fallback, then serve via `tokio::net::TcpListener::from_std(pick_result.listener.into_std())`.
- **`BootCheckTransport` is the right hook for frontend recovery** — `app/src/lib/bootCheck/index.ts` is the injection point for new recovery capabilities; don't add them directly to the BootCheck component.
- **i18n bootCheck keys live in `-3.ts` chunks** — New keys must be added to all 13 language files simultaneously (the `-3.ts` chunk for each language).
- **Workflow folder** — `workflow/` at repo root has 5 markdown files (00–05) defining the full PR workflow: pick issue → architectobot plan → user approval → codecrusher → architectobot verify → checks → memory-keeper → commit → push/PR.

## Channel Event Workspace Routing (Issue #2602)

- **Workspace identity is `PathBuf`** — Represented as the workspace directory path on `ChannelRuntimeContext` as `ctx.workspace_dir: Arc<PathBuf>`. Use `ctx.workspace_dir.as_ref().clone()` at publish sites. There is no abstract `WorkspaceId` type.
- **`DomainEvent` workspace routing contract** — Publisher populates workspace field from context; subscriber compares against `self.workspace_dir` and early-returns with `log::debug!` on mismatch. Follow this pattern for any workspace-scoped `DomainEvent` variant.
- **`ChannelMessageReceived` and `ChannelMessageProcessed` carry `workspace_dir`** — Added in PR for issue #2602. Guards in `ConversationPersistenceSubscriber` (memory_conversations/bus.rs) and `TelegramRemoteSubscriber` (telegram/bus.rs) prevent cross-workspace persistence during login/workspace-change races.

## Pre-existing Upstream Failures (from issue #2602 session)

- **Upstream `main` has 5 Vitest failures and 4 TypeScript compile errors** — Caused by missing iOS experimental dependencies: `@noble/ciphers/chacha`, `@noble/ciphers/webcrypto`, `qrcode.react`, `@tauri-apps/plugin-barcode-scanner`. Breaks `pnpm compile`, `pnpm build`, `pnpm test:coverage` on a clean checkout. Always verify by stashing changes and running checks on the base branch before blaming your PR.
- **`cargo fmt` must run after codecrusher** — codecrusher does not reliably produce `cargo fmt`-clean Rust. Always run `cargo fmt --manifest-path Cargo.toml` after codecrusher finishes and before committing.
Loading