Commit Graph

28 Commits

Author SHA1 Message Date
zhixian
ffcdcd22b2 feat: move Check for Updates to Settings, add sidebar links, customize title
- Move ClawPal self-update from Home page and sidebar to Settings page
  as a "Current Version" card showing version + check/update button
- Set window title to "ClawPal by zhixian"
- Add Website · @zhixian links at bottom of sidebar

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 22:34:52 +09:00
zhixian
7138e97e87 feat: remote rollback support, fix analyze sessions, set app product name
- Add remote_preview_rollback and remote_rollback Tauri commands
- Enable rollback UI for remote instances in History page
- Fix remote_analyze_sessions SSH script: JSON-escape agent/session names,
  fix comma logic, improve grep error resilience
- Set productName to "ClawPal" in tauri.conf.json (was defaulting to lowercase)

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 21:11:00 +09:00
zhixian
d6f7bad09c chore: bump version to 0.1.3
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 20:21:58 +09:00
zhixian
fdbfe0936f feat: per-agent model switching on Home page, fix recipe persona pre-fill
- Add per-agent model Select dropdown in Home page agent cards
- Register set_agent_model command and add remote_set_agent_model for SSH
- Add setAgentModel/remoteSetAgentModel API bindings
- Fix set_agent_model_value to preserve object model format (update primary)
- Pre-populate recipe textarea fields from existing config values (Cook.tsx)

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 20:21:21 +09:00
zhixian
66c259fffb chore: bump version to 0.1.2
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 20:00:46 +09:00
zhixian
fc58e64342 chore: bump version to 0.1.1
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 19:07:30 +09:00
zhixian
92e1b7e4c8 feat: add remote backup support (create, list, restore, delete)
Remote instances now get the same backup experience as local:
- 4 new SSH-based Rust commands for remote backup operations
- UpgradeDialog always runs backup step for both local and remote
- Home page Backups section visible and functional for remote instances
- Show button hidden for remote (no local path to open)

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 19:03:20 +09:00
zhixian
b7799627ea feat: in-app OpenClaw upgrade dialog with backup flow
Replace the old "Backup & Upgrade" button (which opened GitHub releases)
with a proper multi-step upgrade dialog: confirm → backup → run upgrade
command → done. Works for both local and remote (SSH) instances.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 17:47:59 +09:00
zhixian
ac9c1647f7 feat: add in-app auto-update via Tauri updater plugin
Integrates tauri-plugin-updater and tauri-plugin-process to enable
ClawPal self-updates. The Home page now checks for app updates and
shows a download progress bar with an "Update & Restart" button.
CI workflow wired to sign release artifacts with TAURI_SIGNING_PRIVATE_KEY.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 14:47:16 +09:00
zhixian
11fab41b86 feat: macOS code signing, SSH auth fixes, UX improvements
- Configure macOS code signing + notarization in CI (certificate import,
  API key, cleanup steps)
- Set signingIdentity in tauri.conf.json for local builds
- Fix SSH auth: try default key paths (id_ed25519, id_rsa, id_ecdsa)
  before falling back to agent, matching OpenSSH behavior
- Fix SSH agent in GUI apps: fall back to launchctl getenv when
  SSH_AUTH_SOCK is not set
- Show SSH connection errors via toast instead of silent console.error
- Error toasts persist until manually dismissed
- Add loading indicators for Discord channels, model profiles, and
  update checks
- Fix update check: query npm registry via HTTP instead of local npm CLI
- Hide Windows console window in release builds
- Upload portable Windows exe in CI release workflow

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 14:31:48 +09:00
zhixian
77994cab6b fix: gate SSH agent auth behind #[cfg(unix)] for Windows compat
AgentClient::connect_env() uses Unix domain sockets and is unavailable
on Windows. Add a #[cfg(not(unix))] stub that returns an error message.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 11:47:26 +09:00
zhixian
9717a64310 feat: add cross-platform release pipeline and app icons
- Update tauri.conf.json with multi-platform bundle config (macOS unsigned, Windows unsigned)
- Add app icon (1024x1024 source) and generate all required sizes (png, icns, ico)
- Add generate-icons.sh script for regenerating icons from source PNG
- Add GitHub Actions release workflow for 4-target parallel builds (macOS ARM/x64, Linux, Windows)
- Simplify release.sh with tag-based publish instructions

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 11:27:13 +09:00
zhixian
3b0a776a9f fix: comprehensive remote/local parity review fixes
- Add RemoteSystemStatus & Binding types for type safety (no more unsafe casts)
- Add dedicated password field to SshHost (was reusing keyPath)
- Fix remote_read_raw_config to return String instead of parsed JSON Value
- Fix remote_list_history timestamps: convert Unix epoch to ISO 8601
- Add !isConnected guards: Chat send, Home delete agent, App apply changes
- Fix History fallthrough to local API when remote but disconnected
- Fix Doctor: runDoctorCmd rejects when remote+disconnected, listBackups
  skips fetch for remote, remove dead memoryFiles/totalMemoryBytes code
- Fix Channels: add isRemote guard to refresh handlers, remove local
  Binding interface in favor of shared type, remove unsafe casts
- Fix Chat: reset agentId on instance switch, add isConnected to deps
- Fix App.tsx: narrow connectionStatus dependency to isConnected only
- Use shared formatBytes from utils instead of local copy in Doctor
- CreateAgentDialog uses useInstance() context instead of props

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 10:28:46 +09:00
zhixian
3eacff3acd feat: achieve full remote/local feature parity across all pages
- Remote config dirty state: baseline/diff/apply/discard mechanism
  matching local behavior (RemoteConfigBaselines managed state)
- Remote update check: fallback to npm registry query via reqwest
  when `openclaw update status` unavailable on remote
- Discord guild names: resolve via Discord REST API using bot token
  from config, fixing guild IDs showing as names
- InstanceContext: add discordGuildChannels to prevent local/remote
  data mixing (replaces prop drilling through Cook/ParamForm)
- Remote agent creation: resolve profile ID to provider/model string
  before writing to config
- Remote profile creation: auto-reuse API key from same-provider
  existing profile; show auth suggestion in Settings UI
- Instance-aware: Chat, actions, ParamForm, Channels, Doctor,
  History, Home, Settings all branch on isRemote/isConnected
- Remote commands: chat, session management, model profiles,
  config baseline, Discord guild channels, update check

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-19 01:26:51 +09:00
zhixian
4da9e2bd03 feat: add SSH CRUD, connection, exec, SFTP, and remote status commands
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 21:19:15 +09:00
zhixian
3e71459f85 feat: add SSH connection pool module with exec and SFTP primitives
Implements SshConnectionPool with connect/disconnect/is_connected/exec/
sftp_read/sftp_write/sftp_list/sftp_remove methods using russh async SSH.
Supports key-based and ssh-agent authentication. Accepts all host keys
for now (TODO Phase 3).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 21:16:28 +09:00
zhixian
592ad4a95c chore: add russh SSH/SFTP dependencies
Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-18 21:01:48 +09:00
zhixian
b81d2636f4 feat: add session analysis and management to Doctor page
- Add analyze_sessions backend command that scans all agent sessions,
  classifies them as empty/low_value/valuable based on message count,
  age, and file size
- Add delete_sessions_by_ids command with support for both sessions
  and sessions_archive directories
- Add preview_session command to view full session message content
- Doctor page now has Analyze button (primary color) showing two-level
  view: agent summary with category badges, expandable session details
  with checkboxes for batch deletion
- Session IDs are clickable to preview conversation content in a dialog
- Delete/Deselect buttons placed next to clean buttons for easy access
- Optimistic UI updates on deletion without requiring re-analysis
- All heavy I/O commands run via spawn_blocking to avoid UI freezes
- Add Doctor route to App navigation sidebar
- Hide Memory section from Doctor page

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-18 20:04:27 +09:00
zhixian
2208f33177 feat: UI/UX overhaul — shared CreateAgentDialog, multi-platform Channels, skeleton loading, inline Chat panel
- Extract shared CreateAgentDialog with progressive disclosure (independent agent expands identity/persona fields)
- Redesign Channels page: self-contained, groups all channel types (Discord, Telegram, Feishu, QBot) with per-group refresh
- Add skeleton loading states for Home page agents and backups
- Replace Chat Sheet overlay with inline aside panel that pushes main content
- Add RecipeCard compact mode for Home page, with visible tag backgrounds
- Upgrade toast system to support multi-toast stacking with close buttons
- Unify SelectTrigger heights to size="sm" across all pages
- Add "Done" button to Cook completion card
- Replace ~25 silent .catch(() => {}) with console.error or user-visible feedback
- Fix create_agent to inherit default workspace for non-independent agents
- Register list_channels_minimal backend command for frontend access
- Remove unused globalLoading state and refreshDiscord from App.tsx

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 02:10:45 +09:00
zhixian
45e8e4d99b fix: prevent hang on gateway restart, fix delete_agent binding loss, add health check grace period
- Add 30s timeout to gateway restart command to prevent UI from hanging indefinitely
- Change delete_agent to reset bindings to "main" instead of removing them, preventing loss of channel binding entries
- Add health status grace period: show "Checking..." badge while gateway is restarting, retry every 2s up to 5 times before showing "Unhealthy"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 00:27:52 +09:00
zhixian
01d131f977 feat: add model param to dedicated-channel-agent recipe
Model is required with a default of "use global default". Adds
defaultValue support to RecipeParam so params can have initial values.
Model profile selector now includes a "Use global default" option.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 23:32:10 +09:00
zhixian
1a97705f2b feat: add dependsOn for conditional params, boolean checkbox support
Add "Create independent agent" checkbox that toggles visibility of
name/emoji/persona fields. Params with dependsOn are hidden when the
referenced boolean is unchecked, and their steps are auto-skipped.
Template substitution now converts "true"/"false" to native booleans.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 23:23:10 +09:00
zhixian
a373a7c068 fix: make name/emoji/persona optional, auto-skip empty steps, back button
- Make name, emoji, persona params optional in dedicated-channel-agent
- Auto-skip steps whose template args resolve to empty strings
- Move "Back to Recipes" to a back arrow next to the title

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 23:18:20 +09:00
zhixian
1c636c35fd refactor: update Recipe to use steps, add apply_config_patch command
Replace patchTemplate/impactCategory/impactSummary with steps-based
recipe format. Remove preview_apply/apply_recipe commands, add
apply_config_patch for inline merge patches.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 22:43:12 +09:00
zhixian
99dbe35d46 feat: global chat drawer, setup-agent recipe, profile sync, UX improvements
- Chat as collapsible right-side Sheet drawer, accessible from all pages
- Replace default-model-switch recipe with setup-agent identity recipe
- Add setup_agent_identity backend command (writes IDENTITY.md)
- Add "agent" param type to ParamForm for agent picker dropdown
- Custom action support in Cook flow (non-config-patch recipes)
- Profile save/delete in Settings now syncs to other pages via configVersion
- Move Backups section from Doctor to Settings
- Hide Doctor tab from sidebar navigation
- History preview now opens in Dialog instead of inline at page bottom
- Simplify History.tsx from useReducer to useState

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 21:40:10 +09:00
zhixian
3286ae3af1 feat: Discord guild/channel pickers, apply flow, agent identity
- Replace raw guild_id/channel_id text inputs with dropdown pickers
  showing human-readable names from openclaw config
- Add persistent file-level cache for Discord channel data with
  dedicated Channels tab and refresh button
- Read agent name/emoji from IDENTITY.md in workspace directories
- Rename Install→Cook throughout UI
- Add step-by-step apply flow: apply config → restart gateway → done
- Add global loading overlay for blocking operations
- Use react-diff-viewer-continued for config diff preview
- Fix validation bugs (Option<usize> null handling, discord type bypass)
- Fix serde camelCase on PreviewResult/ApplyResult structs
- Make slow commands async (refresh_discord, restart_gateway)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 18:37:28 +09:00
zhixian
60d1595b8e feat: fix version display, add backup/restore before upgrade
- Fix Home showing "Update available" when versions are identical
  by adding frontend guard (latest !== installed)
- Add Rust backup commands: backup_before_upgrade copies openclaw dir
  (excluding sessions/archive) to .clawpal/backups/{timestamp}/,
  list_backups, restore_from_backup, delete_backup
- Home: add "Backup & Upgrade" button next to "View update" that
  creates a backup then opens the releases page
- Doctor: add "Backups" section listing available backups with
  Show, Restore (with confirmation), and Delete (with confirmation)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 13:49:18 +09:00
zhixian
700c5e9ab2 feat: ClawPal v0.1 — Tauri desktop GUI for OpenClaw
4-page layout (Home, Recipes, Settings, Doctor) with sidebar nav
and integrated Chat panel powered by OpenClaw agent (--local).

- Home: status, agents overview, recommended recipes, recent activity
- Recipes: browse, preview diff, apply with params
- Settings: model profiles CRUD, chat model selection, provider catalog
- Doctor: diagnostics with auto-fix
- Chat: OpenClaw agent integration with session persistence,
  agent selector, read-only advisory context injection
- Progressive data loading to avoid UI blocking
- API key resolution from OpenClaw agent auth-profiles
- Model catalog from openclaw CLI with cache

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 01:16:38 +09:00