From 4d99cd32fef7b34e6cc84d1b7122daf1edaccdc6 Mon Sep 17 00:00:00 2001
From: OpenPets Dev
- Your AI Companion That Lives With You. + Create your Familiar.
- Most AI assistants live in a browser tab. Most AI agents live in a terminal. FamiliarOS lives on your desktop. + Your Familiar remembers, speaks, and acts across your system.
- At its heart is your Familiar: a persistent AI companion that remembers who you are, learns your preferences, speaks with you, helps with everyday tasks, and can grow into a powerful local agent with access to tools, knowledge, and workflows. + A local-first AI companion with memory, voice, knowledge, and tools.
- This fork includes a floating chat surface, local memory, Knowledge Store, MCP Tool Servers, a FamiliarOS MCP Server panel, a Curated MCP Toolkit, Text-to-Speech, Familiar naming, and expanded familiar sizing. See FEATURES.md, FEATURE_REGISTRY.md, and PULL_REQUEST.md for details.
+ This fork includes a floating chat surface, local memory, Knowledge Store, MCP Tool Servers, a FamiliarOS MCP Server panel, an MCP Toolkit Guide, Text-to-Speech, Familiar naming, and expanded familiar sizing. See FEATURES.md, FEATURE_REGISTRY.md, and PULL_REQUEST.md for details.
@@ -39,6 +39,8 @@ FamiliarOS is a **local-first AI companion platform**. Create your own Familiar: a persistent desktop companion with memory, voice, knowledge, and powerful agent capabilities. +> **Not just an assistant. A Familiar.** + Your Familiar can: - 🧠 **Remember** preferences, facts, notes, identities, and important details across sessions. @@ -119,7 +121,7 @@ The best software creates habits. The best companions create relationships. - **Voice** — system voices, OpenAI TTS, ElevenLabs, Piper, or OpenAI-compatible endpoints for speech input and output. - **MCP Tool Servers** — activate filesystem, terminal, web, Git, GitHub, Docker, Playwright, SQLite, memory, and reasoning tools directly from chat. - **FamiliarOS MCP Server** — external agents (Claude Code, Cursor, OpenCode, Codex CLI) can control your Familiar through a safe, limited tool surface. -- **Curated MCP Toolkit** — a permission-aware reference surface for adopting the broader MCP ecosystem safely. +- **MCP Toolkit Guide** — a hand-picked guide to popular MCP tools: what each does, what permissions it needs, and how to add it yourself. Nothing installs automatically. - **Virtual-Familiar status** — hunger, energy, happiness, bond, mood, and level live in the right-click context menu, never blocking chat clicks. - **Privacy-conscious by design** — automatic hook speech is static and local; prompts, code, logs, command output, URLs, paths, and secrets are not shown in bubbles. @@ -179,9 +181,9 @@ The **MCP Tool Servers** panel lets the built-in floating chat do real work. Tur The **FamiliarOS MCP Server** panel exposes your Familiar to Claude Code, Cursor, OpenCode, Codex CLI, or any other MCP-capable host. Those agents can then make your Familiar react, speak a safe bubble, or read/write memory. This is a small, controlled bridge — external agents do not get unrestricted access to your desktop. -### Curated MCP Toolkit — a safe manual for the wider MCP world +### MCP Toolkit Guide — a safe manual for the wider MCP world -The **Curated MCP Toolkit** is not an automatic installer. It is a curated reference that explains what popular MCP tools do, what permissions they need, and how to set them up manually or as a persistent bundle in supported hosts. It is designed so you can adopt the MCP ecosystem deliberately instead of clicking "install everything." +The **MCP Toolkit Guide** is not an automatic installer. It is a hand-picked reference that explains what popular MCP tools do, what permissions they need, and how to set them up manually or as a persistent bundle in supported hosts. It is designed so you can adopt the MCP ecosystem deliberately instead of clicking "install everything." --- diff --git a/README_OUR_CHANGES.md b/README_OUR_CHANGES.md index 903a9638..3066c220 100644 --- a/README_OUR_CHANGES.md +++ b/README_OUR_CHANGES.md @@ -52,9 +52,9 @@ The **FamiliarOS MCP Server** panel exposes your Familiar to Claude Code, Cursor - One-click **Copy MCP JSON** for pasting into your agent's MCP configuration. - This is a small, controlled bridge: external agents can make your Familiar react, speak a safe bubble, or read/write memory, but they do not get unrestricted access to your desktop. -## New: Curated MCP Toolkit — A Safe Manual for the Wider MCP World +## New: MCP Toolkit Guide — A Safe Manual for the Wider MCP World -The **Curated MCP Toolkit** is a permission-aware reference surface for adopting the broader MCP ecosystem deliberately. +The **MCP Toolkit Guide** is a hand-picked reference surface for adopting the broader MCP ecosystem deliberately. - It is **not** an automatic installer; it explains what popular MCP tools do, what permissions they need, and how to set them up manually. - Each entry includes copy-paste snippets and guidance for supported hosts. @@ -110,4 +110,4 @@ No additional setup is required beyond the normal FamiliarOS desktop app. The ne - Settings → Knowledge Store for file-based knowledge. - Integrations → MCP Tool Servers for built-in chat tool activation. - Integrations → FamiliarOS MCP Server for external-agent bridge configuration. -- Integrations → Curated MCP Toolkit for optional persistent bundles and copy-paste snippets. +- Integrations → MCP Toolkit Guide for optional persistent bundles and copy-paste snippets. diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 827db89e..e58c4c48 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -2,11 +2,11 @@ "name": "@familiaros/desktop", "version": "3.1.0", "private": true, - "description": "FamiliarOS tray-first desktop companion app.", + "description": "Create your Familiar. A local-first AI companion with memory, voice, knowledge, and tools.", "license": "MIT", "repository": { "type": "git", - "url": "git+https://github.com/alvinunreal/familiaros.git", + "url": "git+https://github.com/verticaltension/familiaros.git", "directory": "apps/desktop" }, "author": "FamiliarOS", diff --git a/apps/desktop/src/check-packaging-contract.ts b/apps/desktop/src/check-packaging-contract.ts index ce619c9e..7f907a8f 100644 --- a/apps/desktop/src/check-packaging-contract.ts +++ b/apps/desktop/src/check-packaging-contract.ts @@ -16,7 +16,7 @@ const workspaceConfig = readFileSync(join(repoRoot, "pnpm-workspace.yaml"), "utf const builderConfigPath = join(appDir, "electron-builder.yml"); const builderConfig = readFileSync(builderConfigPath, "utf8"); -assert.equal(packageJson.description, "FamiliarOS tray-first desktop companion app."); +assert.equal(packageJson.description, "Create your Familiar. A local-first AI companion with memory, voice, knowledge, and tools."); assert.equal(packageJson.author, "FamiliarOS"); assert.match(packageJson.scripts?.["dev:debug"] ?? "", /FAMILIAROS_LOG_LEVEL=debug FAMILIAROS_LOG_CONSOLE=1 pnpm dev/, "desktop debug dev script must enable verbose log mirroring."); assert.match(packageJson.scripts?.package ?? "", /node scripts\/clean-package-output\.cjs && electron-builder/); @@ -152,6 +152,7 @@ assert.match(petWindowSource, /next\.catch\(\(\) => \{\}\)\.finally/, "familiar assert.match(petWindowSource, /destroyed-after-write/, "familiar content reloads must re-check destroyed windows after writing HTML."); assert.match(petWindowSource, /process\.platform === "win32" \? "none" : "drop-shadow/, "Windows familiar windows must avoid CSS drop-shadow on transparent layered windows."); assert.match(petWindowSource, /process\.platform === "win32" \? "none" : "blur\(10px\)"/, "Windows familiar windows must avoid backdrop-filter on transparent layered windows."); +assert.match(petWindowSource, /\.bubble\.is-pinned \{[\s\S]*?backdrop-filter: \$\{process\.platform === "win32" \? "none" : "blur\(8px\)"\}/, "Windows pinned bubbles must avoid backdrop-filter on transparent layered windows."); assert.match(petWindowSource, /\.familiar-shell[\s\S]*?-webkit-app-region: no-drag; cursor: grab;/, "familiar dragging must avoid Electron draggable regions so right-click context menus work."); assert.match(petPreloadSource, /familiaros:familiar-hit-test/, "familiar preload must report visible familiar and bubble hit testing for passthrough."); assert.match(petPreloadSource, /familiaros:familiar-ready/, "familiar preload must report readiness after installing mouse handlers."); diff --git a/apps/desktop/src/familiar-window.ts b/apps/desktop/src/familiar-window.ts index 707631cf..6e71f12e 100644 --- a/apps/desktop/src/familiar-window.ts +++ b/apps/desktop/src/familiar-window.ts @@ -1121,7 +1121,7 @@ function createPetWindowCss(paused: boolean, scale: PetScaleValue, layout?: Part border: 1px solid rgba(255, 255, 255, 0.7); border-radius: 12px; box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 1px 3px rgba(15, 23, 42, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.5); - backdrop-filter: blur(8px); + backdrop-filter: ${process.platform === "win32" ? "none" : "blur(8px)"}; text-align: center; max-height: none; max-width: none; diff --git a/apps/desktop/src/i18n/locales/en.ts b/apps/desktop/src/i18n/locales/en.ts index 2593f412..cdda033b 100644 --- a/apps/desktop/src/i18n/locales/en.ts +++ b/apps/desktop/src/i18n/locales/en.ts @@ -566,8 +566,8 @@ export const en = { "integrations.familiarosMcpServer.testError": "Server test failed: {error}", "integrations.familiarosMcpServer.copyMcpJson": "Copy MCP JSON", "integrations.familiarosMcpServer.status": "Ready", - "integrations.curatedToolkit.name": "Curated MCP Toolkit", - "integrations.curatedToolkit.description": "A permission-aware reference for the wider MCP ecosystem. Browse what popular tools do, what access they need, and how to set them up manually or as a persistent bundle. This is not an automatic installer.", + "integrations.curatedToolkit.name": "MCP Toolkit Guide", + "integrations.curatedToolkit.description": "A hand-picked guide to popular MCP tools. See what each tool does, what permissions it needs, and copy the setup snippet if you want to add it to your agent. Nothing installs automatically.", "integrations.linkToCentralPanel": "Configure the external-agent bridge in the panel above.", // --- Settings: Language section (renderer) --- diff --git a/apps/desktop/tests/custom-familiar-name.test.ts b/apps/desktop/tests/custom-familiar-name.test.ts new file mode 100644 index 00000000..4bf8d9fa --- /dev/null +++ b/apps/desktop/tests/custom-familiar-name.test.ts @@ -0,0 +1,19 @@ +import assert from "node:assert/strict"; + +import { normalizeFamiliarName } from "../src/app-state.js"; + +assert.equal(normalizeFamiliarName("Mochi"), "Mochi"); +assert.equal(normalizeFamiliarName(" Mochi "), "Mochi"); +assert.equal(normalizeFamiliarName("A".repeat(64)), "A".repeat(64)); +assert.equal(normalizeFamiliarName("A".repeat(65)), "A".repeat(64)); +assert.equal(normalizeFamiliarName(""), undefined); +assert.equal(normalizeFamiliarName(" "), undefined); +assert.equal(normalizeFamiliarName("Mochi\n"), undefined); +assert.equal(normalizeFamiliarName("Mochi\x00"), undefined); +assert.equal(normalizeFamiliarName("\x7f"), undefined); +assert.equal(normalizeFamiliarName(undefined), undefined); +assert.equal(normalizeFamiliarName(null), undefined); +assert.equal(normalizeFamiliarName(123), undefined); +assert.equal(normalizeFamiliarName({}), undefined); + +console.log("Custom Familiar name validation passed."); diff --git a/docs/bug-squashing.md b/docs/bug-squashing.md index ed35b837..a69b9fe8 100644 --- a/docs/bug-squashing.md +++ b/docs/bug-squashing.md @@ -68,7 +68,7 @@ Useful references: Try these in order: -1. Gate/remove `backdrop-filter` on Windows. +1. Gate/remove `backdrop-filter` on Windows (including `.bubble.is-pinned`). 2. Gate/remove or simplify `.familiar-shell` `drop-shadow` on Windows. 3. Delay showing the familiar until first successful load/render (`ready-to-show` or an explicit renderer-ready signal). 4. If still broken, test Windows-specific GPU/compositor mitigations. Do **not** start with global `app.disableHardwareAcceleration()` unless the safer CSS/lifecycle fixes fail, because it may vary by machine and can regress other rendering. @@ -87,6 +87,7 @@ Ask Windows testers to confirm: | Date | Version/Build | Attempt | Local result | Community result | Notes | | --- | --- | --- | --- | --- | --- | | 2026-05-14 | unreleased | Gate Windows `.familiar-shell` `drop-shadow` and `.bubble` `backdrop-filter` to `none` | Pending checks | Pending | First low-risk compositor mitigation; needs Windows tester confirmation. | +| 2026-06-17 | unreleased | Also gate `.bubble.is-pinned` `backdrop-filter` on Windows; add packaging contract assertion | Implemented | Pending | Extends compositor mitigation to pinned plugin bubbles; tracked in `check-packaging-contract.ts`. | --- diff --git a/package.json b/package.json index 8b5a82c4..fcabcb16 100644 --- a/package.json +++ b/package.json @@ -2,11 +2,11 @@ "name": "familiaros-v2-workspace", "version": "3.1.0", "private": true, - "description": "FamiliarOS 2.0 workspace", + "description": "FamiliarOS — create your Familiar. A local-first AI companion with memory, voice, knowledge, and tools.", "license": "MIT", "repository": { "type": "git", - "url": "git+https://github.com/alvinunreal/familiaros.git" + "url": "git+https://github.com/verticaltension/familiaros.git" }, "type": "module", "packageManager": "pnpm@11.0.8",