## Summary
- Skip Subconscious ticks before writing per-task activity rows when no OpenHuman session/local provider path is available.
- Add provider availability fields to `subconscious_status` and show a paused/configuration banner in Intelligence > Subconscious.
- Route the tick evaluator through `subconscious_provider` while reusing the existing memory-tree chat provider plumbing.
Closes#1374
## Testing
- [x] `cargo fmt --all --check`
- [x] `pnpm --filter openhuman-app test -- src/components/intelligence/__tests__/IntelligenceSubconsciousTab.test.tsx`
- [x] `pnpm --filter openhuman-app compile`
- [x] `pnpm i18n:check`
- [x] `git diff --check`
- [x] `cargo test -p openhuman subconscious::engine::tests --lib` attempted locally, blocked before tests by `whisper-rs-sys` missing `libclang` (`LIBCLANG_PATH` unset).
## PR Checklist
- [x] I linked the relevant issue(s) above.
- [x] I added or updated tests for the changed behavior, or explained why this is not needed.
- [x] I ran the relevant local checks, or documented why they could not be run.
- [x] I kept the change scoped to the issue.
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit
* **New Features**
* Show an amber warning when the AI provider is unavailable, display the unavailable reason, provide a quick link to AI settings, disable the "Run Now" button, and show a translated tooltip explaining the unavailable status.
* **Internationalization**
* Added provider-unavailable title and settings label translations across multiple languages.
* **Tests**
* Added tests covering the provider-unavailable UI, disabled Run Now behavior, and settings navigation.
<!-- review_stack_entry_start -->
[](https://app.coderabbit.ai/change-stack/tinyhumansai/openhuman/pull/2314?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)
<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Co-authored-by: aqilaziz <gonzes7@gmail.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
## Summary
- Wire a toast on every click of **View Vault** so users always see a result; surface the vault path in the toast.
- Add a **Reveal Folder** fallback action so users without Obsidian still have an OS-native escape hatch to inspect the vault.
- Add a `revealPath` helper (wraps `tauri-plugin-opener`'s `revealItemInDir`) + `opener:allow-reveal-item-in-dir` capability so the renderer can drive a Finder/Explorer reveal.
- 6 new Vitest cases cover the success-toast, reveal-fallback, error-toast, and reveal-error branches.
## Problem
`MemoryWorkspace.tsx` View Vault sent `obsidian://open?path=...` through `openUrl` and relied on the host OS to launch Obsidian. When Obsidian is not installed, the OS shell (LaunchServices on macOS, xdg-open on Linux, ShellExecute on Windows) accepts the URL handoff but launches nothing. No toast, no error, no fallback — the button looks broken to non-technical users.
## Solution
- New `revealPath(path)` helper in `app/src/utils/openUrl.ts` wraps `revealItemInDir` from `@tauri-apps/plugin-opener`. No-op outside Tauri.
- Capability `app/src-tauri/capabilities/default.json` adds `opener:allow-reveal-item-in-dir`.
- `MemoryWorkspace.tsx` replaces the silent module helper with a `handleViewVault` callback. On click:
- Try `openUrl(obsidian://...)`.
- On success: emit an `info` toast that names the vault path and exposes a **Reveal Folder** action.
- On error: emit an `error` toast with the same **Reveal Folder** action.
- **Reveal Folder** calls `revealPath(content_root_abs)`; if that fails too, surface a final error toast with the underlying message.
- New i18n keys (`workspace.openingVault*`, `workspace.openVaultFailed*`, `workspace.revealFolder`, `workspace.revealVaultFailed`) added to `en.ts` + `en-3.ts`, with English fallback into all 11 non-en `-3` chunks so `pnpm i18n:check` exits 0.
## Submission Checklist
- [x] Tests added or updated (happy path + at least one failure / edge case) per Testing Strategy — 6 new Vitest cases across `MemoryWorkspace.test.tsx` and `openUrl.test.ts`.
- [x] **Diff coverage ≥ 80%** — every new branch in `handleViewVault` and `revealPath` has a dedicated test.
- [x] Coverage matrix updated — N/A: behaviour-only fix for an existing UI affordance; no new feature row needed.
- [x] All affected feature IDs from the matrix are listed in the PR description under `## Related` — N/A: no matrix row affected.
- [x] No new external network dependencies introduced — no network calls added.
- [x] Manual smoke checklist updated if this touches release-cut surfaces — N/A: not on the release-cut surface list.
- [x] Linked issue closed via `Closes #NNN` in the `## Related` section.
## Impact
- **Runtime/platform**: desktop (mac/win/linux). No mobile/web/CLI surfaces touched.
- **Performance**: zero — a single extra toast emit + (optional, user-driven) `revealItemInDir` IPC call.
- **Security**: new capability permission is read-only filesystem-reveal scoped to the host file manager; no path escape.
- **Migration / compatibility**: backward-compatible. Existing `obsidian://` deep-link behaviour preserved for users with Obsidian installed.
## Related
- Closes: #2281
- Follow-up PR(s)/TODOs: maintainer-side translations of the new keys (English fallback shipped so `i18n:check` passes).
---
## AI Authored PR Metadata (required for Codex/Linear PRs)
### Linear Issue
- Key: N/A
- URL: N/A
### Commit & Branch
- Branch: `fix/2281-view-vault-no-feedback`
- Commit SHA: 964c122b3b
### Validation Run
- [x] `pnpm --filter openhuman-app format:check`
- [x] `pnpm typecheck`
- [x] Focused tests: `pnpm test src/utils/openUrl.test.ts src/components/intelligence/__tests__/MemoryWorkspace.test.tsx` (23/23 pass); full `pnpm test` (2880 pass, 3 skipped).
- [x] Rust fmt/check (if changed): N/A — no Rust changes.
- [x] Tauri fmt/check (if changed): N/A — Tauri capability JSON only.
### Validation Blocked
- `command:` N/A
- `error:` N/A
- `impact:` N/A
### Behavior Changes
- Intended behavior change: Clicking **View Vault** now always emits a toast with the vault path and a **Reveal Folder** fallback, instead of silently no-op-ing when Obsidian is not installed.
- User-visible effect: visible toast + working fallback on every click.
### Parity Contract
- Legacy behavior preserved: `obsidian://` deep link still dispatched first; users with Obsidian installed see Obsidian launch as before.
- Guard/fallback/dispatch parity checks: `openUrl` reject path still propagates non-http scheme errors; new error branch in `handleViewVault` surfaces those as user-facing toasts.
### Duplicate / Superseded PR Handling
- Duplicate PR(s): None.
- Canonical PR: This PR.
- Resolution (closed/superseded/updated): N/A.
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit
* **New Features**
* Users can now open Obsidian vaults directly from the MemoryWorkspace with improved error handling.
* Added "Reveal Folder" action to vault operations for quick file system access when issues occur.
* Enhanced feedback with toast notifications for success and failure states.
* **Documentation**
* Added translations for vault-opening workflows in 12+ languages.
<!-- review_stack_entry_start -->
[](https://app.coderabbit.ai/change-stack/tinyhumansai/openhuman/pull/2289?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)
<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Co-authored-by: obchain <riteshnikhoriya94@gmail.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
* refactor(accessibility): remove device control and predictive input features from accessibility settings
- Updated accessibility-related components and tests to eliminate device control and predictive input features.
- Adjusted AccessibilityPanel and ScreenIntelligencePanel to reflect the removal of these features.
- Modified related tests to ensure consistency with the updated accessibility status structure.
- Cleaned up accessibility session parameters and state management to focus solely on screen monitoring.
* refactor(accessibility): streamline featureOverrides state initialization
- Simplified the initialization of featureOverrides state in AccessibilityPanel and ScreenIntelligencePanel components for better readability.
- Consolidated parameter definitions in startAccessibilitySession to enhance clarity and maintainability.
- Removed unnecessary re-exports in the screen_intelligence engine module to clean up the codebase.
* chore(dependencies): update OpenHuman to version 0.51.19 in Cargo.lock
* chore(dependencies): update OpenHuman version to 0.51.19 in Cargo.lock
* feat(restart): implement core process restart functionality
- Added a new `SystemRestartRequested` event to the `DomainEvent` enum to handle restart requests.
- Introduced a `RestartSubscriber` that listens for restart events and manages the process respawn.
- Created a `service_restart` function to publish restart requests via the event bus.
- Updated service schemas to include a new `restart` controller with parameters for source and reason.
- Enhanced documentation to reflect changes in behavior and added necessary code comments.
* feat(accessibility): add last restart summary to Screen Intelligence Panel
- Introduced `lastRestartSummary` to the accessibility state and updated relevant components to display the last successful core restart information.
- Modified `PermissionsSection` and `ScreenIntelligencePanel` to include the new summary.
- Updated tests to validate the display of the last restart summary and ensure proper state management during core restarts.
- Refactored accessibility slice to handle the new restart summary in state updates.
* feat(core): enhance startup process with restart delay and subscriber registration
- Added a call to apply startup restart delay from environment variables in `run_core_from_args`.
- Updated the `bootstrap_skill_runtime` function to register a `RestartSubscriber` for handling restart requests, ensuring consistent respawn logic across triggers.
- Introduced a new `core_process` field in the `AccessibilityEngine` to track the core process status, including its PID and start time.
- Implemented a helper function to capture the core process start time using `OnceLock` for efficient initialization.
* feat(screen-intelligence): refactor accessibility state management and UI components
- Replaced direct Redux state access with a new `useScreenIntelligenceState` hook across multiple components, including `AccessibilityPanel`, `ScreenIntelligencePanel`, and their respective subcomponents.
- Streamlined permission and session handling by consolidating related functions and removing unnecessary dispatch calls.
- Updated tests to mock the new state management approach, ensuring consistent behavior and validation of UI elements.
- Removed the `SessionAndVisionSection` component to simplify the structure and improve maintainability.
- Introduced a new API file for screen intelligence to encapsulate related functionality and improve code organization.
* refactor(tests): clean up and optimize test files for accessibility and screen intelligence panels
- Removed redundant imports and streamlined the structure of test files for `AccessibilityPanel` and `ScreenIntelligencePanel`.
- Consolidated core process state initialization in test mocks for better readability.
- Updated dependency imports and ensured consistent mocking of state management hooks across tests.
- Enhanced the `ScreenPermissionsStep` component by improving the dependency array in the useEffect hook for better performance.
* refactor(store): remove unused authentication and user management code
- Deleted the `UserProvider`, `authSlice`, `authSelectors`, `userSlice`, `teamSlice`, and related test files to streamline the codebase.
- This cleanup enhances maintainability by removing legacy code that is no longer in use.
- Updated the store configuration to reflect the removal of these slices and ensure proper state management.
* refactor(webhooks): reorganize types and remove legacy state management
- Moved `TunnelRegistration` and `WebhookActivityEntry` types to a new `types.ts` file for better organization.
- Updated imports in `TunnelList` and `WebhookActivity` components to reference the new types location.
- Refactored `useWebhooks` hook to eliminate Redux state management in favor of local state, enhancing performance and reducing complexity.
- Removed unused `aiSlice`, `inviteSlice`, and `webhooksSlice` along with their associated tests to streamline the codebase.
* refactor(daemon): migrate state management from Redux to a custom store
- Introduced a new `store.ts` file to manage daemon state, replacing the previous Redux slice.
- Updated components and hooks to utilize the new state management approach, enhancing performance and reducing complexity.
- Removed the legacy `daemonSlice` and associated Redux logic, streamlining the codebase.
- Adjusted imports in various components and hooks to reference the new store structure.
* refactor(screen-intelligence): integrate core state management and enhance status handling
- Replaced direct state management in `useScreenIntelligenceState` with a new core state approach, utilizing `useCoreState` for improved performance and consistency.
- Updated status fetching and permission handling to leverage the core state snapshot, streamlining the logic and reducing redundant API calls.
- Introduced a new `CoreRuntimeSnapshot` interface to encapsulate runtime statuses, including screen intelligence, local AI, autocomplete, and service states.
- Adjusted related components and hooks to align with the new state management structure, enhancing maintainability and readability.
- Updated tests to validate the new runtime state structure and ensure proper functionality across the application.
* refactor(components): reorganize imports and streamline function formatting
- Moved the import of `Tunnel` and `tunnelsApi` in `TunnelList.tsx` for better organization.
- Reformatted function definitions in `store.ts`, `useDaemonHealth.ts`, `useDaemonLifecycle.ts`, `useWebhooks.ts` for improved readability.
- Cleaned up the structure of test files in `coreRpcClient.test.ts` by consolidating object properties for clarity.
- These changes enhance code maintainability and readability across the application.
* test(screen-intelligence): fix duplicate hook imports
* fix(tests): update ScreenIntelligenceDebugPanel test to use baseState for refresh status and vision calls
* refactor(invites): simplify error message rendering in Invites component
- Consolidated the conditional rendering of the load error message in the Invites component for improved readability.
- This change enhances the clarity of the code without altering functionality.
* refactor(daemon): streamline state management and function definitions
- Removed the `healthTimeoutId` from the `DaemonUserState` interface and related functions to simplify state management.
- Converted several functions in `store.ts` to arrow function syntax for consistency and improved readability.
- Updated the `Invites` component to handle asynchronous loading and error states more effectively, ensuring that in-flight requests are properly managed.
- Refactored the `CoreStateProvider` to enhance the refresh logic and prevent multiple simultaneous refreshes.
- Introduced a new `register_domain_subscribers` function in `jsonrpc.rs` to centralize event bus subscriber registration, improving code organization and maintainability.
* fix: add debug logging, atomic restart guard, and idempotent subscriber registration
- CoreStateProvider: add namespaced debug logger for polling failure diagnostics
- service/bus.rs: add AtomicBool gate to prevent duplicate restart spawns
- service/bus.rs: use OnceLock for idempotent RestartSubscriber registration
- Invites.tsx: add debug log in loadInviteCodes catch block
* style: apply prettier formatting to CoreStateProvider
* fix: sanitize error logging, serialize refresh, and demote restart logs
- CoreStateProvider: sanitize error objects in poll failure logs to avoid
leaking tokens/headers
- CoreStateProvider: move in-flight guard into refresh() via shared promise
so all callers (poll, updateLocalState, storeSessionToken) are serialized
- CoreStateProvider: log refreshTeams errors instead of swallowing them
- service/bus.rs: demote duplicate-restart log to debug, omit reason from
log output to avoid free-form text emission
* style: apply cargo fmt to service/bus.rs
* feat(settings): add 'Use Vision Model' option to Screen Intelligence Panel
- Introduced a new checkbox in the Screen Intelligence Panel to toggle the use of a vision model for richer context extraction from screenshots.
- Updated state management to handle the new option and integrated it into the configuration and processing logic.
- Adjusted related tests and configurations to support the new feature, ensuring compatibility across the application.
* feat(cli): add --no-vision-model option for screen intelligence
- Introduced a new command-line option `--no-vision-model` to allow users to skip the vision model and use OCR and text LLM only.
- Updated the CLI options parsing to handle the new flag and modified the bootstrap logic to respect this setting.
- Enhanced usage documentation to reflect the new option and its alias `--ocr-only` for clarity.
* fix(screen-intelligence): read use_vision_model from engine runtime config
The processing worker was reading use_vision_model from the persisted
config file (Config::load_or_init), so the CLI --no-vision-model flag
had no effect. Now reads from the engine's in-memory runtime config
which the CLI correctly overrides via apply_config(). Also moves image
compression before OCR pass.
* fix: add use_vision_model to test fixtures and fix rustfmt
Add the new use_vision_model field to all AccessibilityConfig test
fixtures so TypeScript compilation passes. Also includes rustfmt
auto-fix for screen_intelligence_cli.rs.
* feat: add keep_screenshots functionality to Screen Intelligence settings
- Introduced a new `keep_screenshots` option in the Screen Intelligence settings, allowing users to save captured screenshots to the workspace instead of deleting them after processing.
- Updated relevant components and tests to reflect this new feature, ensuring consistent behavior across the application.
- Enhanced the user interface to include a checkbox for the `keep_screenshots` setting, improving user experience and configurability.
* feat: add `openhuman screen-intelligence` CLI for standalone testing
Adds a dedicated CLI (mirroring `openhuman skills`) to run the screen
intelligence capture + vision pipeline without the full desktop app.
Subcommands: run, status, capture, start, stop.
Makes save_screenshot_to_disk public so the CLI capture --keep flag works.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: add keep_screenshots to ScreenIntelligencePanel test assertion
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: patch whisper-rs-sys for Windows MSVC static CRT (/MT)
The upstream whisper-rs-sys builds whisper.cpp via CMake which
defaults to /MD (dynamic CRT), but Rust and all other C deps
use /MT (static CRT). This causes LNK2038/LNK1169 linker errors
on Windows.
Patch whisper-rs-sys from tinyhumansai/whisper-rs-sys fork which
adds config.static_crt(true) and overrides all per-config CMake
flags (Debug/Release/MinSizeRel/RelWithDebInfo) from /MD to /MT.
Closes#273
* feat: surface entity types in memory recall/query text context
Entity types extracted by GLiNER (person, project, organization, etc.)
were stored in graph attrs but not rendered in LLM context text.
Relations now display as Alice (PERSON) -[OWNS]-> Atlas (PROJECT)
instead of Alice -[OWNS]-> Atlas.
Closes#207
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(memory): add entity type UI rendering (#207)
- New MemoryTextWithEntities component with colour-coded type badges
- MemoryWorkspace + MemoryDebugPanel pass structured entity data
- MemoryGraphMap shows entity types below node labels
- MemoryInsights shows EntityTypeBadge for subject/object types
- tauriCommands returns typed MemoryQueryResult with entities
- Updated useConsciousItems and tests for new return types
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix prettier formatting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix cargo fmt in query.rs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: use local regex instead of mutating module-level lastIndex
Avoids react-hooks/immutability ESLint error by using a non-global
regex for the .test() check instead of resetting ENTITY_TYPE_RE.lastIndex.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: sanil jain <jainsanil18@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(dictation): implement voice dictation feature with overlay and settings panel
- Added DictationOverlay component for real-time speech-to-text functionality, including recording, transcribing, and error handling.
- Introduced useDictation hook to manage audio recording and transcription processes.
- Created DictationPanel for configuring dictation settings, including hotkey registration and floating launcher preferences.
- Updated SettingsHome to include a navigation option for the new dictation feature.
- Integrated dictation state management with Redux, allowing for persistent settings and status checks.
- Enhanced Tauri commands for registering global hotkeys and managing dictation state.
This update provides a comprehensive voice dictation experience, enabling users to transcribe speech to text using local AI.
* fix(dictation): update DictationOverlay to conditionally render based on floating launcher state
- Reintroduced the useAppDispatch and useAppSelector hooks for state management.
- Added showFloatingLauncher to the state selection, ensuring the overlay only renders when the floating launcher is active.
- Simplified the return statement for position calculations in the drag handler.
- Improved code readability by formatting JSX elements for better clarity.
This update enhances the user experience by ensuring the dictation overlay behaves correctly based on the application's state.
* feat(settings): add dictation route and panel to settings navigation
- Updated the SettingsRoute type to include 'dictation' as a new route.
- Integrated DictationPanel into the Settings page for user configuration.
- Enhanced dictation state management by adding showFloatingLauncher to the dictationSlice, allowing for better control of the dictation overlay.
This update improves the settings navigation and user experience by providing access to dictation features directly from the settings menu.
* feat(dictation): integrate DictationOverlay and enhance dictation settings
- Added DictationOverlay component to the main App for improved user interaction with dictation features.
- Updated DictationPanel to include a new preference for showing a floating launcher, enhancing user control over dictation functionality.
- Enhanced state management by incorporating showFloatingLauncher into the dictationSlice, allowing for better configuration of the dictation experience.
This update improves the overall user experience by providing direct access to dictation features and customizable settings.
* feat(dictation): enhance DictationOverlay and Conversations for improved text insertion
- Added functionality to insert text into editable elements from the DictationOverlay, improving user interaction with dictation features.
- Implemented event listener in Conversations to handle custom dictation insert events, allowing seamless integration of transcribed text into the input field.
- Updated state management to ensure the correct editable target is used for text insertion, enhancing overall user experience.
This update streamlines the dictation process, making it more intuitive and responsive to user actions.
* fix(dictation): refine STT availability logic in dictationSlice
- Updated the logic for determining STT availability to ensure it only considers the model file as available when both the model file exists and there is a method to run inference (either the in-process engine is loaded or a whisper binary is present).
- This change prevents misleading user experiences by avoiding the display of the overlay when the necessary components for transcription are not available.
This update enhances the reliability of the dictation feature by providing clearer conditions for STT availability.
* refactor(dictation): streamline position management in DictationOverlay
- Removed redundant state management for the position of the dictation overlay, consolidating logic to initialize and reset the position based on the current status.
- Introduced a new `resetLauncherPosition` function to simplify resetting the overlay's position when necessary.
- Updated event handling to ensure the overlay's position is reset appropriately after text insertion actions.
This update enhances the clarity and efficiency of the DictationOverlay component, improving user experience during dictation interactions.
* refactor(dictation): improve hotkey registration and unregistration process
- Streamlined the logic for registering and unregistering dictation hotkeys, ensuring that old shortcuts are properly managed before new ones are registered.
- Introduced rollback mechanisms to restore previous shortcuts in case of registration failures, enhancing reliability.
- Simplified error handling and logging for better clarity during the hotkey management process.
This update enhances the robustness of the dictation feature by ensuring a smoother transition between hotkey states.
* refactor: delete unncessesary pr md file
* refactor(dictation): enhance dictation functionality and error handling
compatibility.
* refactor(dictation): improve code formatting and readability across components
- Enhanced formatting in DictationOverlay for better clarity in asynchronous action handling.
- Streamlined text extraction logic in useDictation for improved readability.
- Consolidated model directory setting in DictationPanel to a single line for simplicity.
- Improved logging consistency in tauriCommands and speech service files.
These changes enhance the maintainability and readability of the dictation-related components.
* refactor(dictation): manage DictationOverlay position based on status changes
- Introduced a reference to track the previous status of the dictation overlay.
- Updated the effect to reset the overlay's position when transitioning from 'idle' to any other status, enhancing user experience during dictation sessions.
This change improves the responsiveness of the DictationOverlay component to status changes, ensuring a smoother interaction for users.
* refactor(tests): update MemoryWorkspace tests to specify span selector
- Modified test assertions in MemoryWorkspace.test.tsx to include a selector for 'span' elements when checking for text presence.
- This change enhances the specificity of the tests, ensuring they accurately target the intended elements in the rendered component.
These updates improve the reliability of the MemoryWorkspace component tests.
* updated memory files
* updated memory
* Refactor MemoryHeatmap component to enhance functionality and improve performance
- Updated the MemoryHeatmap component to track document/relation timestamps over the last 8 months instead of 52 weeks.
- Improved date handling by aligning the start date to the nearest Sunday and counting timestamps within the display range.
- Enhanced grid generation logic to dynamically calculate the number of weeks displayed based on the available data.
- Adjusted SVG dimensions to ensure proper scaling and responsiveness.
- Updated UI text to reflect the new time frame for event tracking.
These changes improve the accuracy and usability of the MemoryHeatmap, providing a clearer view of user activity over time.
* feat(memory): redesign memory workspace with graph, insights, heatmap
Break MemoryWorkspace into focused sub-components (MemoryStatsBar,
MemoryGraphMap, MemoryInsights, MemoryHeatmap). Fix lint errors in
MemoryGraphMap (window.rAF, unused ref). Change heatmap to fixed
8-month range with responsive SVG width.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: format MemoryGraphMap with prettier
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(tests): update MemoryWorkspace tests for refactored components
Align test assertions with the new sub-component structure
(MemoryStatsBar, MemoryGraphMap, MemoryInsights, MemoryHeatmap).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(memory): connect graph query and doc ingest APIs to frontend
Wire up memory.graph.query and memory.doc.ingest RPC endpoints and
integrate graph relations into the MemoryWorkspace UI, replacing
backend-only entity counts with local graph store data.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix Prettier formatting in MemoryWorkspace and tauriCommands
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test: add unit tests for memory graph query, doc ingest, and dispatch routing
Cover the new graph query and doc ingest APIs added in this PR:
- Rust dispatch tests: routing, param validation, unknown method fallthrough
- Frontend tauriCommands tests: Tauri guard, RPC forwarding for memoryGraphQuery/memoryDocIngest
- MemoryWorkspace component tests: graph relations rendering, evidence badges, empty states
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix Prettier and cargo fmt formatting in test files
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix Prettier formatting in tauriCommandsMemory test
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: merge duplicate tauriCommands import in MemoryWorkspace
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix Prettier formatting in MemoryWorkspace
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: sanil jain <jainsanil18@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>