diff --git a/FEATURES.md b/FEATURES.md index 5b1a94c2..72cfb4b3 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -55,9 +55,9 @@ It combines: - Bundled `openpets.virtual-pet` plugin tracks hunger, energy, happiness, and affection - Stats decay slowly while the app is running and recover when you feed, play, pet, or nap -- Status HUD appears only when summoned, so it never blocks the pet or chat -- Triple-click the pet to show the status HUD for 6 seconds -- Actions (feed, play, pet, nap) briefly display the HUD after updating stats +- Status values live in the right-click pet context menu (Virtual Pet ▸ Mood, Food, Energy, Play, Bond, Level); no on-pet HUD overlay +- Single-click the pet to pet it (increases bond and happiness) +- Feed, play, and nap actions are also available from the pet context menu - Automatic nudges when a stat gets low ## Floating Chat Surface diff --git a/FEATURES_OUR_CHANGES.md b/FEATURES_OUR_CHANGES.md index c09fcf21..3075921d 100644 --- a/FEATURES_OUR_CHANGES.md +++ b/FEATURES_OUR_CHANGES.md @@ -101,9 +101,9 @@ This document lists only the features, UI surfaces, and capabilities added by ou ## Virtual Pet Status HUD - Bundled `openpets.virtual-pet` plugin tracks hunger, energy, happiness, and affection. -- Status HUD is hidden by default and never blocks pet clicks or double-click chat. -- Triple-click the pet to show the HUD for 6 seconds. -- Feed / play / pet / nap commands briefly show the HUD after updating stats. +- Status values are shown as read-only labels inside the right-click pet context menu (Virtual Pet ▸ Mood, Food, Energy, Play, Bond, Level), so they never block pet clicks or double-click chat. +- Single-click the pet to pet it (increases bond and happiness). +- Feed / play / pet / nap commands live in the pet context menu. - Low-stat nudges continue to work in the background. ## Build & Packaging @@ -111,3 +111,8 @@ This document lists only the features, UI surfaces, and capabilities added by ou - Sharp Windows native binary packaging resolved via `asarUnpack` + post-build copy. - `prompt-window-preload.cjs` added for the floating chat renderer bridge. - Additional preload scripts and assets packaged for the new surfaces. + +## Bug Fixes + +- Floating-chat memory capture/retrieval is now more resilient: capture is logged and errors are caught instead of breaking the send path. +- Long speech-bubble text no longer clips; bubble bodies scroll when content exceeds the bubble max-height. diff --git a/PULL_REQUEST.md b/PULL_REQUEST.md index ee055358..ef03fa9e 100644 --- a/PULL_REQUEST.md +++ b/PULL_REQUEST.md @@ -55,7 +55,7 @@ This PR adds a complete in-app chat layer, a durable local memory system, intera - Dynamic window sizing so larger scales are never clipped. - Multi-screen positioning (`clampToNearestWorkArea`). - Removed the on-pet drag-to-resize handle in favor of the Settings slider. -- Virtual-pet status HUD (`openpets.virtual-pet`) now appears only on triple-click and auto-hides, so it does not block double-click chat. +- Virtual-pet status (`openpets.virtual-pet`) moved from an on-pet triple-click HUD overlay to the right-click pet context menu, so it never blocks chat clicks. Single-clicking the pet triggers the `pet()` care action. ### Settings additions @@ -64,6 +64,11 @@ This PR adds a complete in-app chat layer, a durable local memory system, intera - Pet character / system prompt field. - Memory viewer with search/edit/delete. +### 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. + ### Updated files - `README.md` — added floating chat, memory, and vanilla chat tool bullets. @@ -71,7 +76,7 @@ This PR adds a complete in-app chat layer, a durable local memory system, intera - `docs/pr-chat-memory-mcp-toolkit.md` — implementation explainer. - `docs/phases/phase-14-pet-scale-setting.md` — expanded with new sizes and drag resize. - `apps/desktop/src/pet-window.ts` — removed scale handle; IPC handlers; dynamic window sizing. -- `apps/desktop/pet-preload.cjs` — triple-click detection (`pet:tripleClicked`) and double-click chat handling. +- `apps/desktop/pet-preload.cjs` — single/double-click detection; single-click emits `pet:clicked` for virtual-pet 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. @@ -109,7 +114,7 @@ All existing tests pass. Additional manual verification: 4. Say "remember that my favorite color is blue" — memory should be captured. 5. Open Settings > Memory — the memory should be searchable, editable, and deletable. 6. Open Integrations > MCP Toolkit — activate Filesystem + Fetch/Web, then chat "list my home directory files" — tools should run. -7. Drag the pet's bottom-right handle — scale should change smoothly. +7. Right-click the pet → choose Virtual Pet ▸ Feed/Play/Pet/Nap; stats update and the context menu reflects the new values. 8. Change display — pet should stay on the display it is currently near. ## Backwards compatibility diff --git a/README.md b/README.md index 40bcafde..0bed5037 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,8 @@ OpenPets is a tray-first desktop companion app. A pet appears on your desktop, k - **Developer integrations** - advanced setup for Claude Code, OpenCode, Cursor, Pi, and MCP-capable tools when you want coding activity to drive the pet. - **MCP ready** - any MCP-capable agent can send short safe speech bubbles and reactions through the OpenPets MCP server. - **Floating chat** - double-click the pet to open an always-on-top chat window with BYOK OpenAPI-compatible providers, conversation history, and optional MCP tool activation. -- **Virtual-pet status** - triple-click the pet to briefly show hunger, energy, happiness, and bond bars; the HUD auto-hides so it never interferes with chat. +- **Virtual-pet status** - right-click the pet and open the Virtual Pet submenu to see hunger, energy, happiness, bond, mood, and level. No on-pet HUD overlay, so chat clicks stay unobstructed. +- **Single-click petting** - click the pet once to pet it; the virtual-pet bond and happiness increase. - **Local memory** - the pet remembers facts, preferences, and notes across sessions. - **Pet-pack friendly** - loads installed animated pet packs and can route a selected agent/project to its own pet window. - **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. diff --git a/README_OUR_CHANGES.md b/README_OUR_CHANGES.md index b8b8022f..cbd3ef4d 100644 --- a/README_OUR_CHANGES.md +++ b/README_OUR_CHANGES.md @@ -40,8 +40,8 @@ Activate MCP tools directly inside the floating chat window for autonomous task ## New: Virtual Pet Status - Bundled virtual-pet plugin tracks hunger, energy, happiness, and affection. -- Triple-click the pet to briefly show the status HUD; it auto-hides so double-click chat stays unobstructed. -- Feed, play, pet, and nap commands are available from the pet context menu and briefly display the HUD. +- Status values live in the right-click pet context menu (Virtual Pet ▸ Mood, Food, Energy, Play, Bond, Level) instead of an on-pet HUD overlay, so double-click chat stays unobstructed. +- Feed, play, pet, and nap commands are available from the pet context menu. ## New: Pet Character & Base Instructions @@ -56,8 +56,9 @@ The pet now stays on the display it is currently near, rather than always snappi No additional setup is required beyond the normal OpenPets desktop app. The new surfaces appear automatically: +- Single-click the pet → pet the virtual pet. - Double-click the pet → floating chat. -- Triple-click the pet → virtual-pet status HUD. +- Right-click the pet → Virtual Pet status and care commands. - Settings → OpenAPI Chat for model/credential setup. - Settings → Memory for memory management. - Integrations → MCP Toolkit for tool activation. diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 17b94d0b..548d2136 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -21,7 +21,7 @@ "package": "pnpm build && node scripts/clean-package-output.cjs && electron-builder", "package:dir": "pnpm build && node scripts/clean-package-output.cjs && electron-builder --dir && node dist/check-packaging-contract.js --output", "test": "node scripts/run-tests.mjs", - "build:deps": "cd ../.. && pnpm --filter './packages/*' build", + "build:deps": "node scripts/build-deps.mjs", "test:build": "pnpm build:deps && tsc -p tsconfig.tests.json", "check": "pnpm typecheck && pnpm build && pnpm test", "typecheck": "pnpm build:deps && tsc --noEmit && tsc -p tsconfig.renderer.json --noEmit", diff --git a/apps/desktop/scripts/build-deps.mjs b/apps/desktop/scripts/build-deps.mjs new file mode 100644 index 00000000..e76d12ab --- /dev/null +++ b/apps/desktop/scripts/build-deps.mjs @@ -0,0 +1,32 @@ +#!/usr/bin/env node +// Cross-platform workspace dependency build for the desktop app. +// Replaces the shell-glob build:deps command so Windows packaging hosts +// can build the exact same set of packages without relying on './packages/*' +// glob quoting behavior. + +import { execFileSync } from "node:child_process"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); + +const filters = [ + "@open-pets/agent-events", + "@open-pets/client", + "@open-pets/claude", + "@open-pets/cli", + "@open-pets/cursor", + "@open-pets/mcp", + "@open-pets/opencode", + "@open-pets/pet-format", + "@open-pets/pi", + "@open-pets/plugin-sdk", +]; + +const args = []; +for (const filter of filters) { + args.push("--filter", filter); +} +args.push("build"); + +execFileSync("pnpm", args, { cwd: root, stdio: "inherit" });