diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 33ae094b..7611c254 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -8,21 +8,21 @@ body: value: | Thanks for reporting a bug. Keep it short — we only need enough to reproduce it. - If the desktop app starts, please consider attaching your OpenPets log. It is not required, but it is highly recommended because it often explains startup, tray, pet display, and integration issues. + If the desktop app starts, please consider attaching your FamiliarOS log. It is not required, but it is highly recommended because it often explains startup, tray, familiar display, and integration issues. - To find it: open OpenPets from the tray/menu bar, choose **Open Logs Folder**, then attach `openpets.log` to this issue. If OpenPets cannot start, check these folders manually: - - macOS: `~/Library/Application Support/OpenPets/logs/` - - Windows: `%APPDATA%\OpenPets\logs\` - - Linux: `~/.config/OpenPets/logs/` + To find it: open FamiliarOS from the tray/menu bar, choose **Open Logs Folder**, then attach `familiaros.log` to this issue. If FamiliarOS cannot start, check these folders manually: + - macOS: `~/Library/Application Support/FamiliarOS/logs/` + - Windows: `%APPDATA%\FamiliarOS\logs\` + - Linux: `~/.config/FamiliarOS/logs/` - If the problem happened before the latest restart, `openpets.previous.log` may also be useful. + If the problem happened before the latest restart, `familiaros.previous.log` may also be useful. - type: textarea id: what-happened attributes: label: What happened? description: Describe the bug. Include your OS/app version if you know it. - placeholder: "The desktop pet disappeared after..." + placeholder: "The desktop familiar disappeared after..." validations: required: true @@ -30,7 +30,7 @@ body: id: logs attributes: label: Logs (optional, highly recommended) - description: Attach openpets.log if you can. If the app cannot start or you cannot find it, leave this blank. - placeholder: "Drag openpets.log here, or paste the most relevant lines." + description: Attach familiaros.log if you can. If the app cannot start or you cannot find it, leave this blank. + placeholder: "Drag familiaros.log here, or paste the most relevant lines." validations: required: false diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml index beee65cf..20cb5e54 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.yml +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -1,5 +1,5 @@ name: Feature request -description: Suggest an improvement for OpenPets. +description: Suggest an improvement for FamiliarOS. title: "Feature: " labels: ["feature"] body: @@ -13,7 +13,7 @@ body: attributes: label: What do you want? description: Describe the feature or change you would like to see. - placeholder: "I want OpenPets to..." + placeholder: "I want FamiliarOS to..." validations: required: true diff --git a/.github/ISSUE_TEMPLATE/submit-pet.yml b/.github/ISSUE_TEMPLATE/submit-pet.yml index 4b333ced..3d3f88c4 100644 --- a/.github/ISSUE_TEMPLATE/submit-pet.yml +++ b/.github/ISSUE_TEMPLATE/submit-pet.yml @@ -1,18 +1,18 @@ -name: Submit a pet -description: Suggest a pet for the OpenPets gallery. -title: "Pet submission: " -labels: ["pet submission"] +name: Submit a familiar +description: Suggest a familiar for the FamiliarOS gallery. +title: "Familiar submission: " +labels: ["familiar submission"] body: - type: markdown attributes: value: | - Thanks for suggesting a pet. Keep it short — we only need the essentials. + Thanks for suggesting a familiar. Keep it short — we only need the essentials. - type: input - id: pet-idea + id: familiar-idea attributes: - label: Pet idea or name - description: What should the pet be called, and what is it? + label: Familiar idea or name + description: What should the familiar be called, and what is it? placeholder: "Pixel Penguin — a tiny penguin coding companion" validations: required: true diff --git a/.slim/codemap.json b/.slim/codemap.json index 3924058e..21f0cffd 100644 --- a/.slim/codemap.json +++ b/.slim/codemap.json @@ -2,7 +2,7 @@ "metadata": { "version": "1.0.0", "last_run": "2026-05-24T09:29:48.346Z", - "root": "/Volumes/external/repos/pets", + "root": "/Volumes/external/repos/familiars", "include_patterns": [ "apps/**/*.ts", "packages/**/*.ts", @@ -32,21 +32,21 @@ "apps/desktop/contracts/local-ipc-protocol.contract.ts": "76d45670b202ebd96cbee64d1e8e53ec", "apps/desktop/contracts/plugin-manifest.contract.ts": "2b0eaa64d1e02dce6b14cfee9c6d2b3d", "apps/desktop/package.json": "b83883566725e5c9a97fc9d7b5fd189a", - "apps/desktop/src/agent-pet-controller.ts": "179491dc5e838b5cf042b4630380d1e5", + "apps/desktop/src/agent-familiar-controller.ts": "179491dc5e838b5cf042b4630380d1e5", "apps/desktop/src/agent-setup.ts": "c2193dd06fa7686b4446ea7dc5686b92", "apps/desktop/src/app-state-core.ts": "9f4ea019ddb620bf8ad70dfe83f27496", "apps/desktop/src/app-state.ts": "89a68328e992076d114b90de5b8fbe1b", "apps/desktop/src/assets.ts": "d59129388a45ae10b5319242fd7a67ee", - "apps/desktop/src/built-in-pet.ts": "eff5b3375b2a9eccad401f6048c9c5f1", + "apps/desktop/src/built-in-familiar.ts": "eff5b3375b2a9eccad401f6048c9c5f1", "apps/desktop/src/catalog-validation.ts": "6bd6974357781c0f972ef2b2da76eb12", "apps/desktop/src/catalog.ts": "37fe90b36fa2eee976c3617fe1ee5989", "apps/desktop/src/check-cursor-desktop.ts": "80b0d5c1913a47143970447153762617", "apps/desktop/src/check-opencode-desktop-setup.ts": "08b86952c137b2e917d296c0c4590e5c", "apps/desktop/src/check-packaging-contract.ts": "c5f74134e8e5e98623e2c69e71a79eec", "apps/desktop/src/claude-memory.ts": "37f0a29734fad5e2bb5bd97110e7ddfa", - "apps/desktop/src/codex-pets-core.ts": "f20c529df55934b632ac8e02dec4df15", - "apps/desktop/src/codex-pets.ts": "885f214e14db799953b1ccf13a264478", - "apps/desktop/src/default-pet-controller.ts": "a46002d908de6596947cdaa1d122ea84", + "apps/desktop/src/codex-familiars-core.ts": "f20c529df55934b632ac8e02dec4df15", + "apps/desktop/src/codex-familiars.ts": "885f214e14db799953b1ccf13a264478", + "apps/desktop/src/default-familiar-controller.ts": "a46002d908de6596947cdaa1d122ea84", "apps/desktop/src/display.ts": "366ab73790c796771ee0df94affe0642", "apps/desktop/src/lease-manager.ts": "a8a84622bbd73a3b680a15b709c8dff0", "apps/desktop/src/lifecycle.ts": "a346d3ebe789e6d434858481af0757d0", @@ -55,9 +55,9 @@ "apps/desktop/src/local-ipc.ts": "a8f25fd0b47d560782f2332e30acc115", "apps/desktop/src/logger.ts": "a92e8de9ede984afc378d2d29d5fce0e", "apps/desktop/src/main.ts": "5678745b8ea5c311ada5259545bb694e", - "apps/desktop/src/pet-installation.ts": "79cdc67778448f2e3876d22194c1ada1", - "apps/desktop/src/pet-paths.ts": "73d7313fe19254ea0dcf24ab2f0929b3", - "apps/desktop/src/pet-window.ts": "5fafece7a49d2c43fa42d84f327c4a83", + "apps/desktop/src/familiar-installation.ts": "79cdc67778448f2e3876d22194c1ada1", + "apps/desktop/src/familiar-paths.ts": "73d7313fe19254ea0dcf24ab2f0929b3", + "apps/desktop/src/familiar-window.ts": "5fafece7a49d2c43fa42d84f327c4a83", "apps/desktop/src/plugin-catalog-validation.ts": "507deea55077a1130f9d4623a8fe8342", "apps/desktop/src/plugin-catalog.ts": "10cffa1505a621f2e4ec4d4e1379823c", "apps/desktop/src/plugin-config.ts": "4f1f0b6a83d6f705c7ef7b98b2412677", @@ -66,7 +66,7 @@ "apps/desktop/src/plugin-manifest-reader.ts": "2ba5d272ed3ae1b7e0131d2efdaf4caf", "apps/desktop/src/plugin-manifest.ts": "15fe4e34408053cebe8b1b42e84cc6e7", "apps/desktop/src/plugin-package.ts": "2aa09526568e4fd4f961d883ef373a38", - "apps/desktop/src/plugin-pet-api.ts": "b6d35ff512c9954462d82bf84dc50929", + "apps/desktop/src/plugin-familiar-api.ts": "b6d35ff512c9954462d82bf84dc50929", "apps/desktop/src/plugin-runtime.ts": "5065842b784ca91207bf8e6ce3d1fab5", "apps/desktop/src/plugin-sdk-bridge.ts": "a925bdd85834f00474e058e2c711d097", "apps/desktop/src/plugin-service.ts": "7a6ecfc1f62a35e5c6d440e876dac788", @@ -110,9 +110,9 @@ "packages/cursor/src/cursor-rules.ts": "a05f35efb92e61e2493ca122bcf42aab", "packages/cursor/src/cursor-status.ts": "c0d0a4dc377998336cf034c82d5bf56a", "packages/cursor/src/index.ts": "324347811550c7206820993f68651cba", - "packages/install-pet/package.json": "171c0fdaa8b13597c67c8c06be7adc6d", - "packages/install-pet/src/check-install-pet.ts": "de740e86393f3d7e4e30bf807c8e489c", - "packages/install-pet/src/index.ts": "04eaea5b38365061ae310c22626e077e", + "packages/install-familiar/package.json": "171c0fdaa8b13597c67c8c06be7adc6d", + "packages/install-familiar/src/check-install-familiar.ts": "de740e86393f3d7e4e30bf807c8e489c", + "packages/install-familiar/src/index.ts": "04eaea5b38365061ae310c22626e077e", "packages/mcp/package.json": "220512b0569b05ea9ec17950df4eb429", "packages/mcp/src/args.ts": "6b84e85ab049f35181294be5ad3efb7a", "packages/mcp/src/check-mcp-contract.ts": "0029e9dc79f600482b4c3d1ff1a0e630", @@ -131,8 +131,8 @@ "packages/opencode/src/opencode-project-setup.ts": "84b378ea0b22f9a99eced35edd5e584b", "packages/opencode/src/opencode-status.ts": "2640eed91327a35c57a7162ab6730ccc", "packages/opencode/src/plugin.ts": "8265624c6f4d87274928dde47405d893", - "packages/pet-format/package.json": "de5f4dee65e316fd9968a07928ec6558", - "packages/pet-format/src/index.ts": "6e94caf8463f6c6139f8f7364691f2e4", + "packages/familiar-format/package.json": "de5f4dee65e316fd9968a07928ec6558", + "packages/familiar-format/src/index.ts": "6e94caf8463f6c6139f8f7364691f2e4", "packages/pi/package.json": "e539f5df26ab1f7aabe73ef0f924ebb6", "packages/pi/src/check-pi-compat.ts": "e2f02e876e051e7f302f9ccf835953e3", "packages/pi/src/check-pi.ts": "47a4f7d28b07fffe130419975f1cc7a4", @@ -161,14 +161,14 @@ "packages/client/src": "a036a1f04099db816b2cd6b552fda034", "packages/cursor": "bc481b08e9fbe5e0464e6aef98f8c2ef", "packages/cursor/src": "e6ff31505d96d16dcbea0afcb680d2a3", - "packages/install-pet": "1ead7cc70de4c772c4c230c446d5e4ad", - "packages/install-pet/src": "5882ef53808f2a7d7152446d1d46e196", + "packages/install-familiar": "1ead7cc70de4c772c4c230c446d5e4ad", + "packages/install-familiar/src": "5882ef53808f2a7d7152446d1d46e196", "packages/mcp": "786e8bc32d478dbaa34bc3d1831cc6ec", "packages/mcp/src": "e89d476284c4ec2814c11a064fcb210b", "packages/opencode": "dd2382941a7bfe672b2f27dcbfa51e45", "packages/opencode/src": "ed024a6207b42efd076da44ab9587adb", - "packages/pet-format": "ca85af1412e98214135e22bdcba5f406", - "packages/pet-format/src": "e01c13d845950b7c825b8ecde0c12b80", + "packages/familiar-format": "ca85af1412e98214135e22bdcba5f406", + "packages/familiar-format/src": "e01c13d845950b7c825b8ecde0c12b80", "packages/pi": "df51ca2497141871a94e3383d042f051", "packages/pi/src": "2a70d56d1b7ce40ed8a0416141834dd4" } diff --git a/AGENTS.md b/AGENTS.md index 735768e0..16076b94 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -35,15 +35,15 @@ When plugin work is finished, update these docs if behavior, commands, manifests ## Logging for Fast DX -When working on desktop UI, renderer, IPC, catalog, plugin, or pet-window behavior, add targeted logging as part of the implementation when it helps diagnose issues quickly. +When working on desktop UI, renderer, IPC, catalog, plugin, or familiar-window behavior, add targeted logging as part of the implementation when it helps diagnose issues quickly. Prefer concise, scoped logs that capture data shape, selected IDs, load/error states, and boundary decisions. -Route renderer diagnostics into the app log when possible so failures are visible in `openpets.log`, not only DevTools. +Route renderer diagnostics into the app log when possible so failures are visible in `familiaros.log`, not only DevTools. Avoid noisy permanent logs, secrets, full payload dumps, or logging in tight animation/render loops. ## Control Center CSP When adding any renderer-visible URL scheme, image source, dev server endpoint, or internal protocol, update the Control Center CSP in both `apps/desktop/vite.config.ts` and `apps/desktop/src/renderer/index.html`. -Common pet image protocols include `openpets-codex:`, `openpets-installed:`, and `openpets-pet-preview:`; forgetting CSP causes images to load as the default/fallback pet even when install/render logic is correct. +Common familiar image protocols include `familiaros-codex:`, `familiaros-installed:`, and `familiaros-familiar-preview:`; forgetting CSP causes images to load as the default/fallback familiar even when install/render logic is correct. ## Ubuntu VMware Testing @@ -51,16 +51,16 @@ An Ubuntu 24.04 ARM64 VMware/Vagrant development VM exists for Linux GUI testing - VM directory: `/Volumes/external/vmware/ubuntu24` - Provider: `vmware_desktop` / VMware Fusion on Apple Silicon -- Guest OpenPets checkout: `/home/vagrant/src/openpets` -- Guest helper aliases: `cdpets` and `openpets-dx` +- Guest FamiliarOS checkout: `/home/vagrant/src/familiaros` +- Guest helper aliases: `cdpets` and `familiaros-dx` -Do not mount the macOS OpenPets checkout into Ubuntu for development. The macOS `node_modules` tree contains platform-specific packages and ownership metadata; using it from Linux can break local macOS development. Ubuntu testing should use the isolated guest clone and its own Linux `node_modules`. +Do not mount the macOS FamiliarOS checkout into Ubuntu for development. The macOS `node_modules` tree contains platform-specific packages and ownership metadata; using it from Linux can break local macOS development. Ubuntu testing should use the isolated guest clone and its own Linux `node_modules`. For Linux GUI bug reproduction or Electron desktop testing: 1. Start or inspect the VM from `/Volumes/external/vmware/ubuntu24` with `vagrant up` / `vagrant status`. 2. SSH with `vagrant ssh`. -3. In the guest, run `cdpets` then `openpets-dx` to update dependencies, fix Electron sandbox permissions, and launch OpenPets in the Ubuntu desktop session. -4. Check guest logs at `~/.config/@open-pets/desktop/logs/openpets.log`. +3. In the guest, run `cdpets` then `familiaros-dx` to update dependencies, fix Electron sandbox permissions, and launch FamiliarOS in the Ubuntu desktop session. +4. Check guest logs at `~/.config/@familiaros/desktop/logs/familiaros.log`. -The VM is configured to boot into the Ubuntu desktop (`graphical.target`) with GDM auto-login for the `vagrant` user. Prefer this VM when validating Linux-specific renderer, Electron, tray, pet-window, IPC, plugin, or packaging behavior. +The VM is configured to boot into the Ubuntu desktop (`graphical.target`) with GDM auto-login for the `vagrant` user. Prefer this VM when validating Linux-specific renderer, Electron, tray, familiar-window, IPC, plugin, or packaging behavior. diff --git a/DESIGN.md b/DESIGN.md index 7ae02912..3bd360c2 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -1,12 +1,12 @@ -# OpenPets Control Center: Design System & Engineering Manual +# FamiliarOS Control Center: Design System & Engineering Manual -This document outlines the visual direction, component patterns, and front-end engineering guidelines for the OpenPets Control Center. It serves as a practical implementation guide for migrating existing views (Settings, Plugins, Integrations, Onboarding) and building new pages using a cohesive, high-fidelity tactile design system. +This document outlines the visual direction, component patterns, and front-end engineering guidelines for the FamiliarOS Control Center. It serves as a practical implementation guide for migrating existing views (Settings, Plugins, Integrations, Onboarding) and building new pages using a cohesive, high-fidelity tactile design system. --- ## 1. Visual Direction & Heritage -The OpenPets Control Center blends the nostalgic, playful charm of late-90s/early-2000s desktop pet managers with a modern, glassmorphic utility interface. +The FamiliarOS Control Center blends the nostalgic, playful charm of late-90s/early-2000s desktop familiar managers with a modern, glassmorphic utility interface. - **The Core Tension**: Playful nostalgia meets crisp, modern desktop productivity. - **Atmospheric Depth**: Instead of flat, sterile surfaces, interfaces leverage rich color gradients, subtle mesh backdrops, structured panels, and tactile control elements. @@ -43,7 +43,7 @@ Surfaces are layered to establish clear spatial hierarchy and keep the interface The desktop shell is designed to be self-contained, fitting exactly within the viewport height without scrolling the entire window. - **Page Shell**: Max-width of `1160px` centered, utilizing a full-height flexbox column (`h-screen p-6`). -- **Hero Header**: A balanced layout placing title text and description on the left (`.hero-content`) and the wider brand artwork (`openpets.webp`) on the right (`.hero-logo-container`). Keep artwork large enough to feel intentional, use `object-contain`, and avoid rounded wrappers or distortion. +- **Hero Header**: A balanced layout placing title text and description on the left (`.hero-content`) and the wider brand artwork (`familiaros.webp`) on the right (`.hero-logo-container`). Keep artwork large enough to feel intentional, use `object-contain`, and avoid rounded wrappers or distortion. - **Layout Split**: A clean grid split, typically: - **Left Gallery/List Panel**: `1.25fr` — for browsing, searching, and filtering. - **Right Detail/Action Panel**: `0.75fr` — for contextual inspection and heavy operations. @@ -61,7 +61,7 @@ The desktop shell is designed to be self-contained, fitting exactly within the v - **Eyebrow / Section Header**: `text-xs font-bold uppercase tracking-[.18em] text-brand` - **Card Title**: `text-sm font-semibold text-navy` - **Metadata / Descriptions**: `text-xs text-slate-500` -- **Copy Tone**: Conversational, clean, and helpful. Avoid overly dense technical jargon; explain state transitions clearly (e.g., *"Ready to become your default pet"* instead of *"State: INSTALLED, ACTIVE: FALSE"*). +- **Copy Tone**: Conversational, clean, and helpful. Avoid overly dense technical jargon; explain state transitions clearly (e.g., *"Ready to become your default familiar"* instead of *"State: INSTALLED, ACTIVE: FALSE"*). --- @@ -78,14 +78,14 @@ All colors are mapped to functional roles to ensure consistency across themes. | **Success / Ready** | `#059669` / `#34d399` | `emerald` | Active indicators, successfully installed badges | | **Warning / Import** | `#d97706` / `#fbbf24` | `amber` | Codex source indicators, imports, attention states | | **Featured** | `#7e22ce` / `#a855f7` | `purple` | Featured catalog filters and badges | -| **Originals** | `#ca8a04` / `#facc15` | `yellow` | Original OpenPets catalog filters and badges | +| **Originals** | `#ca8a04` / `#facc15` | `yellow` | Original FamiliarOS catalog filters and badges | | **Danger / Remove** | `#dc2626` / `#ff6b6b` | `red` | Destructive actions, broken states, error messages | --- ## 6. Tactile Button System -Buttons are the core interactive elements. They reject flat modern trends in favor of a chunky, tangible 3D appearance inspired by physical pet hardware and OS controls. +Buttons are the core interactive elements. They reject flat modern trends in favor of a chunky, tangible 3D appearance inspired by physical familiar hardware and OS controls. ### Visual Architecture - **Borders**: Darker semi-transparent bottom/side borders (`rgba(..., 0.32)`). @@ -130,12 +130,12 @@ Buttons are the core interactive elements. They reject flat modern trends in fav - Amber/yellow-orange for `Originals` - Match catalog v3/web gallery taxonomy where possible: `Featured` excludes originals, and category filters like `Western`/`Asian` exclude featured and originals. -### Pet Cards & Badges +### Familiar Cards & Badges - Card grids need inner padding so selected rings and focus states are not clipped by the scroll container. - Use badges to expose catalog identity, not just install state: - - `Original` for original/OpenPets pets - - `Featured` for featured non-original catalog pets - - `Western` / `Asian` for standard category pets + - `Original` for original/FamiliarOS familiars + - `Featured` for featured non-original catalog familiars + - `Western` / `Asian` for standard category familiars - `Default`, `Installed`, and `Codex` for local state/source - Avoid low-value detail badges such as `Available`; reserve detail badges for meaningful state or catalog identity. @@ -192,8 +192,8 @@ When refactoring other Control Center views, apply the following structural mapp ### B. Plugins Page - **Old Layout**: Flat list of available integrations. -- **New Layout**: Grid-based layout matching the `.pets-grid` structure. -- **Cards**: Use the `.pet-card` styling with a thumbnail on the left, author/description text on the right, and semantic status pills (e.g., `.pill-green` for "Active", `.pill-slate` for "Disabled"). +- **New Layout**: Grid-based layout matching the `.familiars-grid` structure. +- **Cards**: Use the `.familiar-card` styling with a thumbnail on the left, author/description text on the right, and semantic status pills (e.g., `.pill-green` for "Active", `.pill-slate` for "Disabled"). ### C. Onboarding - **Old Layout**: Full screen wizard. diff --git a/FEATURES.md b/FEATURES.md index b8761d0a..c28d376b 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -1,6 +1,6 @@ -# OpenPets Feature Inventory +# FamiliarOS Feature Inventory -This file is the current feature roll-up for this working fork of OpenPets. +This file is the current feature roll-up for this working fork of FamiliarOS. It combines: - the shipped baseline described in `README.md` @@ -15,34 +15,34 @@ It combines: ## Desktop Companion Core - Tray-first desktop companion app -- Desktop pet that can idle, react, wave, move, and speak -- Default pet plus installed non-default pets -- Per-agent pet routing when integrations request a specific installed pet -- Manual pet dismissal with lease-aware recovery rules -- Native right-click pet context menu -- Always-on-top pet window with click-through background behavior +- Desktop familiar that can idle, react, wave, move, and speak +- Default familiar plus installed non-default familiars +- Per-agent familiar routing when integrations request a specific installed familiar +- Manual familiar dismissal with lease-aware recovery rules +- Native right-click familiar context menu +- Always-on-top familiar window with click-through background behavior - Drag support with mouse passthrough recovery for Windows/Linux edge cases -- Adaptive pet scale setting (continuous slider from 0.16x to 10x in Settings) -- Reset default pet position +- Adaptive familiar scale setting (continuous slider from 0.16x to 10x in Settings) +- Reset default familiar position - Launch at login support where the platform allows it - Update checking against GitHub releases - Open logs folder from the app -## Pet Packs And Gallery +## Familiar Packs And Gallery -- Built-in default pet -- Installed pet pack loading -- Local pet import from ZIP -- Local pet import from folder -- Codex pet import flow -- Pet catalog browsing -- Pet preview thumbnails and spritesheets -- Default pet selection -- Pet gallery linkout +- Built-in default familiar +- Installed familiar pack loading +- Local familiar import from ZIP +- Local familiar import from folder +- Codex familiar import flow +- Familiar catalog browsing +- Familiar preview thumbnails and spritesheets +- Default familiar selection +- Familiar gallery linkout ## Reactions And Speech -- Explicit pet speech bubbles +- Explicit familiar speech bubbles - Reaction-only decorative bubble messages - Reaction animation mapping - User-configurable reaction-to-animation overrides @@ -51,9 +51,9 @@ It combines: - Safer speech rules for agent-driven bubble content - Bubble behavior that avoids showing code, logs, URLs, paths, or secrets in normal integration speech -## Pet Text-to-Speech (Phase 2) +## Familiar Text-to-Speech (Phase 2) -- Settings > **Text-to-Speech** panel controls voice output for the pet and floating chat. +- Settings > **Text-to-Speech** panel controls voice output for the familiar and floating chat. - **System voice** uses the OS speech engine through the renderer (`window.speechSynthesis`) with optional voice-name matching and a 0.5×–2.0× speed multiplier. - **Cloud TTS providers**: OpenAI TTS, ElevenLabs, and an **OpenAI-compatible** preset for OpenRouter, LiteLLM, WaveSpeedAI, or a custom endpoint. - **Local TTS provider**: Piper (spawned as a local process) for fully offline speech. @@ -61,25 +61,25 @@ It combines: - Per-provider model, voice, speed, endpoint preset, and custom endpoint controls. - Dynamic voice list fetching for ElevenLabs; static voice lists for OpenAI / OpenAI-compatible. - In-app **Test voice** and **Stop** buttons to preview the configured voice. -- Assistant replies and other speech are spoken through the pet window renderer via a shared TTS service (`apps/desktop/src/tts-service.ts`). +- Assistant replies and other speech are spoken through the familiar window renderer via a shared TTS service (`apps/desktop/src/tts-service.ts`). - Respects quiet-hours: speech is skipped while quiet hours are active. - Audio returned by cloud providers is validated (MP3/WAV magic bytes) and played through a renderer `