- Rename all user-facing and technical identifiers from OpenPets/Pet to FamiliarOS/Familiar. - Rename packages from @open-pets/* to @familiaros/*; rename install-pet/pet-format packages. - Rename plugin IDs and directories from openpets.* to familiaros.*. - Rename IPC namespace from openpets:* to familiaros:* and state filenames from openpets-* to familiaros-* with legacy migration. - Rename source files (pet-window, built-in-pet, default-pet-controller, etc.) to familiar equivalents. - Update locales (en, es-419, ja, ko, pt-BR, zh-Hans, zh-Hant) and tray/pet context menu strings. - Add Familiar naming feature: preference, settings input, tray menu display. - Update assets and packaging config; all desktop tests pass.
10 KiB
Pull Request: Floating Chat, Memory, Knowledge Store, MCP Servers, Curated MCP Toolkit, TTS Phase 2 & Familiar Sizing
Title: feat(desktop): add floating chat, local memory, Knowledge Store, MCP Tool Servers, FamiliarOS MCP Server panel, Curated MCP Toolkit, Text-to-Speech Phase 2, expanded familiar sizing, and multi-screen support
Author: VectorShell working fork
Base: upstream main at cba81b7
Status: ready for review / adopt selectively
Summary
This PR adds a complete in-app chat layer, a durable local memory system, interactive MCP tool activation, and several companion-quality improvements to the desktop familiar. Every change is additive and preserves existing MCP/agent integration behavior.
Motivation
- Users wanted to chat with the familiar without a terminal or external agent.
- Long-running companions benefit from remembering facts, preferences, and identity.
- A curated but practical MCP surface helps users adopt tools without unsafe one-click installs.
- Familiar sizing was limited to three presets with no continuous or interactive adjustment.
What changed
New surfaces
-
Floating Prompt Window (
apps/desktop/src/prompt-window.ts)- Frameless, always-on-top chat UI opened by double-clicking the familiar.
- Compact mode at 96px height; expanded editor/history mode at 280px.
- Built as inline HTML/CSS/JS with a dedicated preload bridge.
-
Chat History List UI
- Replaced plain-text history textarea with styled per-entry cards.
- Role badges (You / Familiar / System / Error), color coding, timestamps.
- Persists to disk (
familiaros-chat-history.json).
-
Memory Viewer
- New Settings section to search, edit, and delete FamiliarOS memories.
-
MCP Tool Servers Panel
- New top-level Integrations card to activate MCP tools for the built-in floating chat.
- Works without Claude, Cursor, OpenCode, or Pi installed.
- Tiered chip selector (Starter / Terminal & Systems / Advanced).
-
FamiliarOS MCP Server Panel
- New central Integrations card for the external-agent bridge.
- Command mode, node path, and familiar routing in one place.
- One-click server health test and MCP JSON copy.
-
Text-to-Speech (Phase 2)
- Settings > Text-to-Speech panel with provider, voice, model, speed, endpoint, and credential controls.
- Providers: system OS voice, OpenAI TTS, ElevenLabs, Piper (local), and OpenAI-compatible (OpenRouter / LiteLLM / WaveSpeedAI / custom).
- Credentials stored with
safeStorage(plain fallback) and tied to the selected provider. - Shared TTS service (
tts-service.ts) routes speech to the familiar / floating-chat renderer viafamiliaros:tts-speak,familiaros:tts-audio, andfamiliaros:tts-stopIPC. - Cloud audio validated for MP3/WAV; endpoints validated for HTTPS / localhost rules.
- Skips speech during quiet hours.
New core modules
apps/desktop/src/openapi-chat.ts— OpenAPI BYOK chat with responses + chat/completions support.apps/desktop/src/mcp-chat-client.ts— Internal stdio MCP client for floating chat tools.apps/desktop/src/familiaros-memory.ts— Local memory engine with JSON store and markdown mirror.apps/desktop/src/knowledge-store-core.ts— Electron-free file + memory knowledge repository with search and context building.apps/desktop/src/knowledge-store.ts— Electron wrapper that wires the core toapp.getPath('userData').apps/desktop/src/tts-service.ts— Shared TTS dispatcher for familiar / floating chat with quiet-hours check.apps/desktop/src/tts-engine.ts— Provider-specific synthesis and voice fetching (OpenAI, ElevenLabs, Piper, OpenAI-compatible).apps/desktop/src/tts-catalog.ts— Provider catalog, defaults, and endpoint presets.apps/desktop/src/tts-credentials.ts— Secure credential storage for TTS providers.apps/desktop/src/mcp-toolkit-installer.ts— Toolkit install orchestration.apps/desktop/src/renderer/src/mcp-toolkit-catalog.ts— Catalog data for the toolkit UI.apps/desktop/prompt-window-preload.cjs— Preload for the floating chat renderer.
Familiar improvements
- Continuous familiar scale slider from 0.16x to 10x in Settings.
- Dynamic window sizing so larger scales are never clipped.
- Multi-screen positioning (
clampToNearestWorkArea). - Removed the on-familiar drag-to-resize handle in favor of the Settings slider.
- Virtual-familiar status (
familiaros.virtual-familiar) moved from an on-familiar triple-click HUD overlay to the right-click familiar context menu, so it never blocks chat clicks. Single-clicking the familiar triggers thefamiliar()care action.
Settings additions
- OpenAPI chat: endpoint preset, model, credential, theme, base-instructions toggle.
- Moonshot/Kimi endpoint preset.
- Familiar character / system prompt field.
- Memory viewer with search/edit/delete.
- Knowledge Store tab: upload files, search stored knowledge, delete files, and add manual memory entries.
Bug fixes
- Memory capture/retrieval is now more robust in floating chat: capture is logged and errors are caught instead of breaking the send path.
- Speech bubble text no longer clips for long messages; bubble bodies scroll when content exceeds the bubble max-height.
- Fixed a packaged-build
SyntaxErrorin the floating prompt window's inline script: newline literals in attachment separator strings are now correctly escaped so the script parses in the signed Windows installer. - Verified the packaged prompt window with a Windows-hosted E2E smoke test over the reverse tunnel (CDP-driven: bridge present, input/send/attach elements render, typing enables send, no renderer exceptions).
Knowledge Store integration
- Files stored in Settings > Knowledge Store are indexed and can be searched from the same panel.
- Stored files are automatically considered when building OpenAPI chat instructions: relevant files are appended to the system prompt.
- Attachments in the floating prompt window can be stored directly into the Knowledge Store via the toolbar button.
Updated files
README.md— added floating chat, memory, MCP Tool Servers, FamiliarOS MCP Server, and Curated MCP Toolkit bullets.FEATURES.md— comprehensive inventory of new capabilities.docs/pr-chat-memory-mcp-toolkit.md— implementation explainer.docs/phases/phase-14-familiar-scale-setting.md— expanded with new sizes and drag resize.apps/desktop/src/familiar-window.ts— removed scale handle; IPC handlers; dynamic window sizing.apps/desktop/familiar-preload.cjs— single/double-click detection; single-click emitsfamiliar:clickedfor virtual-familiar petting, double-click opens floating chat.apps/desktop/src/app-state-core.ts— expanded scale range.apps/desktop/src/renderer/src/main.tsx— Settings/Integrations UI additions.apps/desktop/src/windows.ts— memory IPC, toolkit IPC, preference handling.apps/desktop/tests/onboarding-state.test.ts— updated scale assertions.
New files
FEATURES.md
README_OUR_CHANGES.md
FEATURES_OUR_CHANGES.md
PULL_REQUEST.md
apps/desktop/prompt-window-preload.cjs
apps/desktop/src/mcp-chat-client.ts
apps/desktop/src/mcp-toolkit-installer.ts
apps/desktop/src/openapi-chat.ts
apps/desktop/src/familiaros-memory.ts
apps/desktop/src/prompt-window.ts
apps/desktop/src/renderer/src/mcp-toolkit-catalog.ts
apps/desktop/src/knowledge-store-core.ts
apps/desktop/src/knowledge-store.ts
apps/desktop/tests/knowledge-store.test.ts
apps/desktop/src/tts-service.ts
apps/desktop/src/tts-engine.ts
apps/desktop/src/tts-catalog.ts
apps/desktop/src/tts-credentials.ts
apps/desktop/tests/tts-engine.test.ts
How to test
pnpm install
pnpm --filter @familiaros/desktop build
pnpm --filter @familiaros/desktop test
All existing tests pass. Additional manual verification:
- Launch the desktop app and double-click the familiar — floating chat should open.
- Add an OpenAI-compatible API key in Settings > OpenAPI Chat.
- Send a message; assistant reply should appear in the familiar bubble and in the history list.
- Say "remember that my favorite color is blue" — memory should be captured.
- Open Settings > Memory — the memory should be searchable, editable, and deletable.
- Open Integrations > MCP Tool Servers — activate Filesystem + Fetch/Web, then chat "list my home directory files" — tools should run.
- Open Integrations > FamiliarOS MCP Server — choose a command mode, click Test Server, and verify the server responds.
- Open Integrations > Curated MCP Toolkit to browse copy-paste snippets and optional persistent bundles.
- Open Settings > Text-to-Speech, choose System voice, click Speak — the familiar should speak the test phrase.
- Add an OpenAI TTS key, select a voice, click Speak — audio should play through the familiar window.
- Store a
.txtfile in Settings > Knowledge Store and ask the assistant about its content — the reply should reference the stored file. - Right-click the familiar → choose Virtual Familiar ▸ Feed/Play/Familiar/Nap; stats update and the context menu reflects the new values.
- Change display — familiar should stay on the display it is currently near.
Backwards compatibility
- Existing MCP server behavior is unchanged.
- Existing agent integrations (Claude, OpenCode, Cursor, Pi) are unchanged.
- Existing plugin system is unchanged.
- TTS defaults to the system voice; no API key is required until a cloud provider is chosen.
- Preferences default safely: users without API keys see a clear "Add credential" state.
Notes for upstream
- Two documentation styles are provided:
- Merged:
README.mdandFEATURES.mdare updated in-place for easy adoption. - Isolated:
README_OUR_CHANGES.md,FEATURES_OUR_CHANGES.md, andPULL_REQUEST.mddescribe only our additions so you can pick and choose.
- Merged:
- If you prefer smaller PRs, this can be split along these boundaries:
- Floating chat + OpenAPI BYOK
- Memory system + memory viewer
- Vanilla chat MCP tools
- Familiar sizing expansion + drag handle
- Multi-screen positioning