52 Commits
Author SHA1 Message Date
JohnRiceMLandClaude Opus 4.6 7c44a6d969 fix: onboarding misreports cron parse failure as gateway error (#23)
When OpenClaw CLI prints debug log lines (e.g. "[plugins] [debug] ...")
to stdout before JSON, extractJson() failed because bracketed log lines
look like JSON array starts. Now tries each candidate position until one
actually parses. Also fixes the onboarding wizard to show a specific
"CLI log output" error instead of the misleading "Could not reach
gateway" message when /api/crons fails due to JSON parsing. Bumps to
v0.8.6.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 10:18:00 -05:00
JohnRiceMLandClaude Opus 4.6 c7da43e8c3 perf: TTL caching for registry/crons + OrgMap layout memoization
Add 5s in-memory TTL cache to loadRegistry() and getCrons() to eliminate
duplicate execSync CLI calls on page load. Memoize dagre layout in OrgMap
so agent selection changes only restyle nodes instead of recomputing
positions. Includes agents-provider, useAgents hook, fingerprint API,
and GlobalSearch refactors. Bumps to v0.8.4.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 09:22:00 -05:00
JohnRiceMLandClaude Opus 4.6 ecb4dbe62d Fix onboarding wizard not re-triggering after workspace change + add contributor guardrails
The wizard checked localStorage before verifying the server-side onboarded
flag, so users who moved their workspace (or upgraded OpenClaw) were stuck
with no wizard and had to use incognito to re-configure. Now the wizard
always validates with the server and clears the stale localStorage flag
when the workspace has changed.

Also adds GitHub PR/issue templates, English-first and scope boundary
policies in CONTRIBUTING.md, OpenClaw integration docs, and updates test
counts across all docs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:38:42 -05:00
JohnRiceMLandClaude Opus 4.6 15800979c5 feat: draggable LiveStreamWidget + README screenshots
Add click-and-drag repositioning to the LiveStreamWidget with position
persistence via localStorage settings. Add dashboard screenshots to
README from the marketing site.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 13:46:07 -05:00
JohnRiceMLandClaude Opus 4.6 ad2adc4381 feat: per-agent model field from OpenClaw CLI
Add model: string | null to Agent type, enriched from openclaw agents
list --json. Chat routes use agent.model with claude-sonnet-4-6 fallback.
Model badge shown on agent detail, chat header, and org map nodes when
CLI data is available.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 13:21:52 -05:00
caaa784e13 feat: v0.8.1 — server-side chat persistence with sync UI
JSONL-based conversation storage (mirrors kanban chat-store pattern) with
background merge on load and fire-and-forget writes. Conversations now sync
across devices automatically. Includes cross-device onboarding flag, "Synced"
indicator in chat header, and "Clear Server Data" button in settings.

Based on #8 by @raphfeuer with review fixes applied: agent ID validation in
lib layer, Promise.all for parallel fetches, unlinkSync for cleanup,
lightweight listAgentIds, MAX_MESSAGES cap, and 26 new tests.

Co-Authored-By: raphfeuer <raphfeuer@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 12:40:22 -05:00
JohnRiceMLandClaude Opus 4.6 be523cee72 feat: v0.8.0 — configurable gateway port, Agent Optimizer redesign, markdown code blocks
- Add OPENCLAW_GATEWAY_PORT env var support (default 18789) — auto-detected
  from openclaw.json during setup, all API routes use gatewayBaseUrl() helper
- Redesign AI Cost Analysis as "Agent Optimizer" with action chips, structured
  prompts for Max plan users, and follow-up suggestions
- Fix renderMarkdown to handle fenced code blocks (extract before escape,
  reinsert after rules)
- Rewrite buildCostAnalysisPrompt: throughput-focused, structured response
  format, 350 word cap
- Fix efficiency score using effective input (input + cache tokens)
- Unified OptimizationCard with UUID resolution and responsive layout
- Update all docs and in-app help to mention configurable port
- Remove auto-scroll from cost analysis chat
- Change insight button from "Fix" to "How to fix"

Closes #9

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 09:25:07 -05:00
JohnRiceMLandClaude Opus 4.6 5a91983f48 feat: v0.7.0 — sidebar usage widget, costs page breakup, live logs overhaul
- Break CostsPage (1500 lines) into 8 sub-components under components/costs/
- Add sidebar usage widget showing Claude Code 5-hour and weekly utilization
- Fix usage API: never cache zeros, retry on 429 with backoff, hide when unavailable
- Remove system theme option (dark/glass/color/light only)
- Compact sidebar nav (36px items, scrollable nav area, pinned footer)
- LiveStreamWidget: always visible as collapsed pill, play/pause on pill
- Live logs: add search bar and level filter pills (INF/WRN/ERR/DBG)
- Rename "Live Stream" to "Live Logs" throughout
- Weekly cap shows reset day instead of countdown
- Add PipelineDetailPanel and pipelines API route
- Add cron-utils with parseCronExpression and tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 16:20:39 -05:00
JohnRiceMLandClaude Opus 4.6 e20c9cacce feat: add Claude Code usage tracker + costs page UX overhaul
Add real-time subscription utilization (5-hour window + weekly cap)
via SSE stream from Anthropic OAuth API. Collapse insights to top 2
with expand toggle, and apply Apple HIG polish (hover lift, chart
depth, tabular-nums, mobile responsive usage cards).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 15:00:39 -05:00
JohnRiceMLandClaude Opus 4.6 a197f2b811 feat: add cost optimization engine with AI analysis and self-heal actions
Adds optimization scoring (cache, tiering, anomaly, efficiency), actionable
insights with projected savings, inline AI cost analysis with streaming chat,
and "Fix" buttons that send targeted prompts to the root agent. 12 new tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 14:12:58 -05:00
JohnRiceMLandClaude Opus 4.6 c384628c80 feat: format health check as markdown with self-heal quick-action buttons
- Render health check response using renderMarkdown() instead of raw
  pre-wrap text — headings, bold, lists, and inline code now styled
- Derive quick-action buttons from actual cron/pipeline data:
  - "Fix N errored jobs" (red) — when jobs are in error state
  - "Assign N unowned jobs" (orange) — when jobs lack an agent owner
  - "Fix N missing delivery targets" (orange) — when delivery has no 'to'
  - "Investigate N overdue jobs" (orange) — when jobs are past next run
  - "How can I improve reliability?" (accent) — fallback when all is healthy
- Each button sends a targeted prompt to the inline chat with specific
  job names and context, triggering the agent to diagnose and suggest fixes
- Increased maxHeight from 300 to 400 for the formatted content
- Refactored sendHealthChatMessage to accept optional override text

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 13:54:34 -05:00
JohnRiceMLandClaude Opus 4.6 1139f450b2 feat: improve pipeline wizard UX with progress indicators and time expectations
Step 0 (setup):
- Visual card showing cron count + agent emoji with numbered steps
  explaining what the agent will do (read jobs, infer deps, generate config)
- Time expectation banner that scales with cron count: "15-30s" for small,
  "30-60s" for medium, "a minute or more" for 20+ jobs
- Agent selector demoted to secondary, AI icon added to analyze button

Step 1 (analysis):
- Progress banner with spinner, phase text that evolves:
  "Connecting to agent..." -> "Mapping job dependencies..." -> "Finalizing..."
- Live elapsed timer so user knows it's still working
- Shimmer skeleton before first chunk arrives (replaces bare "Waiting...")
- Blinking cursor on streamed text
- Green "Analysis complete" banner when done with contextual next-step hint
- Header subtitle updates dynamically during streaming vs review

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 13:49:42 -05:00
JohnRiceMLandClaude Opus 4.6 a34ee60469 feat: add inline chat, agent ownership, clear button, and streaming UX to pipeline health check
- Add inline chat below health check results so users can discuss findings
  with the root agent without leaving the panel (same SSE pattern as
  PipelineDetailPanel)
- Thread agent ownership into health check prompt -- each job shows its
  owning agent name or "UNOWNED", and the AI flags unowned jobs
- Add "Clear Pipelines" button to reset to the empty/setup state
- Improve streaming UX: spinner + skeleton before first chunk, pulsing dot
  in header, green "Complete" badge when done
- Add pipeline-utils with tests (56 tests covering layout, prompt builder,
  context builder, ownership)
- Update CLAUDE.md with pipeline architecture docs, new component table,
  API routes, and updated test counts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 13:42:11 -05:00
JohnRiceMLandClaude Opus 4.6 96cd7789db Fix system message integration with chat layout
- shouldShowAvatar/shouldShowTimestamp now skip system messages and
  look through to the previous non-system message for comparison,
  preventing avatar re-display and spurious timestamp dividers
- Role-switch spacing skips system messages so they don't create
  visual gaps between consecutive assistant messages
- Skip media parsing and text stripping for system messages since
  they only contain slash command output

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 01:28:01 -06:00
zackbartandClaude Opus 4.6 9efebfdac0 Add slash commands to agent chat UI
Introduce client-side slash commands (/clear, /help, /info, /soul,
/tools, /crons) with an autocomplete dropdown in the chat input.

- New lib/slash-commands.ts with command registry, parser, matcher,
  and executor
- Autocomplete dropdown appears when typing "/" with keyboard
  navigation (arrow keys, Enter/Tab to select, Escape to dismiss)
- System messages render as accent-bordered cards, filtered from
  API calls so they never reach the gateway
- 35 new tests covering all parser and executor paths

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 18:42:06 -05:00
JohnRiceMLandClaude Opus 4.6 95a7bdf26f Fix crypto.randomUUID runtime error, add logo as default sidebar icon
Replace all crypto.randomUUID() calls with generateId() helper that
falls back to a Math.random-based UUID in non-secure contexts (HTTP,
older browsers). Fixes #1. Also sets the ClawPort logo as the default
sidebar icon in place of the lobster emoji.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 16:51:09 -06:00
JohnRiceMLandClaude Opus 4.6 6b7afb9051 Add Cost Dashboard and remaining unstaged changes
New:
- Cost Dashboard: page (app/costs/), API route (app/api/costs/),
  CostsPage component, lib/costs.ts with getCostSummary(), and
  21 tests in lib/costs.test.ts
- Additional cron-runs and logs tests

Changed:
- AgentNode, MobileSidebar, NavLinks, Sidebar component updates
- .gitignore: exclude research/ directory

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 13:22:15 -06:00
JohnRiceMLandClaude Opus 4.6 bfd5e64ec4 Add floating Live Stream widget with expandable log rows
Replace the Activity page's Feed tab with a global floating widget
that persists across page navigation. Clean top-level view with
level pills (INF/WRN/ERR/DBG) and truncated messages; click any
row to expand the raw JSON payload. Widget states: hidden, collapsed
pill, and expanded panel with play/pause, copy, and auto-scroll.

- Create components/LiveStreamWidget.tsx (global floating widget)
- Mount in app/layout.tsx alongside OnboardingWizard
- Simplify Activity page: remove tabs, render LogBrowser directly,
  add "Open Live Stream" button dispatching custom DOM event
- Delete components/activity/ActivityFeed.tsx (replaced by widget)
- Add raw field to LiveLogLine type for expandable detail view
- Add lib/sse.ts (SSE buffer parser, client-safe)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 12:56:14 -06:00
JohnRiceMLandClaude Opus 4.6 02a0b0f49b Add Activity Console with live feed and log browser
Two-tab Activity Console for real-time gateway monitoring and historical
log browsing. Live Feed streams via SSE from `openclaw logs --follow --json`.
Log Browser parses cron run + config audit JSONL files with filter pills,
text search, and expandable detail rows. Includes 21 unit tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 11:17:25 -06:00
JohnRiceMLandClaude Opus 4.6 6cad2657c3 Add dagre-powered org map with team-column layout
Replace flat BFS org map with dagre-based auto-layout. Two modes:
Hierarchy (full tree) and Teams (grouped columns with labels).
Richer agent cards show description, tool count, reports, cron health.
Extract shared buildTeams() into lib/teams.ts for GridView + OrgMap reuse.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 10:24:50 -06:00
JohnRiceMLandClaude Opus 4.6 39aa8e5d11 Fix: handle { crons, pipelines } response format in all consumers
The /api/crons route now returns { crons, pipelines } instead of a plain
array. The crons page already handled both formats, but the home page,
agent detail page, NavLinks, and GlobalSearch assumed a plain array.
All consumers now normalize the response with backward compat for both
formats.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 21:13:53 -06:00
JohnRiceMLandClaude Opus 4.6 744ad201a8 feat: rebuild Memory page as 3-tab dashboard with live config
Memory page now has Overview (stat cards, 30-day timeline, config panel),
Browser (dynamic file discovery, category badges, sort controls), and
Guide (decay visualizer, hybrid balance bar, best practices) tabs.

- Add 8 new types for memory dashboard (MemoryFileInfo, MemoryConfig, etc.)
- Rewrite lib/memory.ts: dynamic file discovery, openclaw.json config reader,
  CLI status integration, pure stats computation
- Add 28 tests in lib/memory.test.ts (18 suites, 347 tests total)
- API returns { files, config, status, stats } with backward compat
- Pipeline graph and cron improvements included

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 11:25:13 -06:00
JohnRiceMLandClaude Opus 4.6 6d19fcf47a docs: add 405 troubleshooting, auto-discovery info, fix clone URL
- TroubleshootingSection: add 405 Method Not Allowed entry with fix
- GettingStartedSection: fix clone URL to JohnRiceML/clawport-ui, add
  HTTP endpoint warning callout
- AgentsSection: document auto-discovery, update registry resolution
  to show 3-tier (user override -> auto-discover -> bundled)
- CLAUDE.md: update test count to 317

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:03:55 -06:00
JohnRiceMLandClaude Opus 4.6 8a754144b8 feat: auto-discover agents from OpenClaw workspace + kanban hardening
Agent registry now auto-discovers agents from $WORKSPACE_PATH/agents/
instead of requiring a manual agents.json or falling back to bundled
defaults. Resolution: user override -> auto-discover -> bundled fallback.

Cron-to-agent matching is now dynamic (by agent ID prefix) instead of
using a hardcoded PREFIX_MAP tied to the developer's specific agents.

Also includes: kanban robustness (timeouts, concurrent limits, input
validation, dedup, stale work recovery), onboarding name input moved
to step 1, operator name on settings page, agent profile image upload,
TTS speaker icon removed, npm install troubleshooting docs.

298 tests passing (up from 288).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 22:39:57 -06:00
JohnRiceMLandClaude Opus 4.6 93ff2871b7 feat: default accent color to red, clarify package vs CLI naming
- Change default accent from gold (#F5C518) to red (#EF4444) across
  all five themes with proper white contrast text
- Move Red to top of accent color presets in onboarding and settings
- Add callouts in README, SETUP, CLAUDE.md, and in-app docs clarifying
  that the npm package is clawport-ui but the CLI command is clawport
  (the separate clawport npm package is unrelated)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:03:07 -06:00
JohnRiceMLandClaude Opus 4.6 7d4fc586a3 feat: add CLI entry point and bump to v0.2.0
Users can now run ClawPort after `npm install -g clawport-ui` via the
`clawport` command (dev, start, setup, status, help). The CLI resolves
its own package root so commands work from any directory.

- Add bin/clawport.mjs with subcommands
- Add bin field to package.json
- Add --cwd flag to scripts/setup.mjs for CLI usage
- Update README, SETUP, CLAUDE.md, and in-app docs
- Add BestPracticesSection and npm troubleshooting to docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 18:16:07 -06:00
JohnRiceMLandClaude Opus 4.6 4d25d07b76 Open-source readiness: LICENSE, repo URLs, rename ManorMap, strip voice IDs
- Add MIT LICENSE file
- Rename ManorMap.tsx → OrgMap.tsx and update all imports
- Fix package.json repository/bugs URLs to JohnRiceML/clawport-ui
- Fix README clone URL to match actual repo
- Null out all ElevenLabs voice IDs in bundled agents.json (move to
  workspace override for custom voices)
- Update BRANDING.md references

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 13:32:41 -06:00
JohnRiceMLandClaude Opus 4.6 9c056d5fe5 chore: publish clawport-ui to npm, default emoji to lobster
- Published as clawport-ui@0.1.0 on npm (unscoped, clawport was taken)
- Changed default favicon/sidebar emoji from castle to lobster
- Removed "private": true, added npm metadata (description, homepage, repo, keywords, license)
- Added prepublishOnly safety gate (tsc + vitest)
- Updated README, SETUP, BRANDING docs with npm install instructions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 11:49:26 -06:00
JohnRiceMLandClaude Opus 4.6 f20984620e rebrand: rename from Agent Claw / Manor UI to ClawPort
Full product rebrand across the entire codebase:

- User-facing strings: "Agent Claw" -> "ClawPort" everywhere (title,
  sidebar, search, onboarding wizard, chat header, setup script)
- TypeScript interfaces: ManorSettings -> ClawPortSettings, ManorMap ->
  OrgMap, ManorPage -> HomePage
- Settings fields: manorName -> portalName, manorSubtitle ->
  portalSubtitle, manorEmoji -> portalEmoji, manorIcon -> portalIcon
  (with matching setters)
- localStorage keys: manor-settings -> clawport-settings (with legacy
  migration), manor-theme -> clawport-theme, manor-onboarded ->
  clawport-onboarded, manor-conversations -> clawport-conversations,
  manor-kanban -> clawport-kanban
- Custom events: manor:open-search -> clawport:open-search
- API keys: agent:main:manor-ui -> agent:main:clawport
- Workspace paths: $WORKSPACE_PATH/manor/ -> $WORKSPACE_PATH/clawport/
- Package name: manor-ui -> clawport
- All documentation (README, SETUP, CLAUDE.md, BRANDING, docs/)
- All test files updated to match new keys and field names
- 288/288 tests passing, tsc --noEmit clean

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 11:25:39 -06:00
JohnRiceMLandClaude Opus 4.6 3fd836f3f8 feat: add Lucide icons to all action buttons + dynamic accent contrast
Add missing icons to every actionable button across the app for a more
polished feel. Also introduce dynamic text contrast on accent-colored
backgrounds so dark accents (red, purple, indigo) get white text
automatically via WCAG luminance calculation.

- ErrorState: RotateCcw icon on Try Again, add focus-ring + btn-scale
- Memory: RefreshCw, Copy/Check, Download icons on toolbar buttons
- Crons: RefreshCw refresh, BarChart3/Calendar/GitBranch tab icons,
  Copy/Check on error copy buttons
- Home: Map/LayoutGrid/List view switcher icons, X close icon,
  MessageSquare + btn-scale on Message, User + btn-scale on Profile
- Kanban: Plus icon on New Ticket, add btn-scale
- Settings: RotateCcw on Reset to Default + Re-run Setup, Trash2 on
  Reset All Settings, btn-scale on CTAs
- Onboarding: ArrowLeft/ArrowRight/Rocket/RotateCcw on nav buttons
- New hexToContrastText() in lib/settings.ts (WCAG 2.0 luminance)
- --accent-contrast CSS var set in all 5 theme blocks + settings provider
- All hardcoded #000 on accent backgrounds replaced with var(--accent-contrast)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 10:19:00 -06:00
JohnRiceMLandClaude Opus 4.6 8da78b3519 feat: add onboarding wizard, rebrand to Agent Claw, open-source readiness
7-step onboarding wizard (welcome, system check, naming, theme, accent,
voice input, overview) with live previews and OpenClaw health checks.

Add operatorName to settings — replaces all hardcoded "John Rice" references
in sidebar, chat prompts, and system messages with dynamic operator name.

Rebrand user-facing strings from "Manor" to "Agent Claw" with BRANDING.md
documenting every reference for future rebranding.

Open-source readiness: configurable agent registry (workspace override),
requireEnv() for safe env access, npm run setup auto-detection script,
SETUP.md guide, and comprehensive developer documentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 09:58:39 -06:00
JohnRiceMLandClaude Opus 4.6 678dc3c22f remove voice recording and audio playback from chat
The mic/voice message feature wasn't working reliably so removing it
entirely: recording UI, transcribing state, VoiceMessage waveform
rendering, plain audio player, and mic button. Chat now always shows
the send button. File and image attachments remain.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 21:56:26 -06:00
JohnRiceMLandClaude Opus 4.6 353a89634f feat: add Grid + Feed views, branding settings, and light theme fixes
Add Map/Grid/Feed view switcher to the Manor Map page with a floating
segmented control. GridView shows agents grouped by team in card columns
with colored accents and hierarchy. FeedView shows a reverse-chronological
cron activity timeline with stat cards and filter pills.

Add emoji-only avatar toggle and logo background toggle to Settings >
Branding. Add DynamicFavicon component that syncs the manor logo to the
browser tab icon. Fix light theme text readability by bumping tertiary
and quaternary text opacity. Fix SSR hydration mismatch by deferring
localStorage reads to useEffect. Fix detail panel positioning with
explicit inline styles.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 19:26:22 -06:00
JohnRiceMLandClaude Opus 4.6 f26b4a7506 feat: move kanban chat persistence from localStorage to filesystem JSONL
Replace localStorage-based chat storage with per-ticket JSONL files at
~/.openclaw/kanban/chats/{ticketId}.jsonl, eliminating the 5MB cap and
surviving browser data clears.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 19:20:01 -06:00
JohnRiceMLandClaude Opus 4.6 6567508374 feat: cron dashboard upgrade, kanban enhancements, and AgentAvatar integration
- Cron dashboard: 3-tab layout (Overview/Schedule/Pipelines), delivery status,
  run history, weekly CSS Grid schedule, React Flow pipeline graph, categorized
  error banners, parseSchedule fix for expr/tz format
- Kanban: custom AgentPicker with search and profile images, expand/collapse
  toggle on detail panel, richer ticket cards (description preview, priority
  label, timestamps, AgentAvatar)
- Nav sidebar: cron count badge with error indicator
- AgentAvatar used across agent detail, chat list, and kanban components

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 18:58:55 -06:00
JohnRiceMLandClaude Opus 4.6 ee4fb518bd feat: add settings page with accent color, branding, and agent customization
Adds a full settings page (/settings) with four sections:
- Accent Color: 12 preset swatches + custom color picker, overrides CSS vars
- Branding: custom name, subtitle, emoji, and icon image for the sidebar
- Agent Customization: per-agent emoji and profile image overrides
- Reset All: destructive reset to defaults

New files: SettingsProvider context, AgentAvatar component, settings
types/helpers with tests. Replaces hardcoded gold accent rgba values
in globals.css and button.tsx with CSS var references. All settings
persist in localStorage (manor-settings key).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 17:40:56 -06:00
JohnRiceMLandClaude Opus 4.6 4057312382 feat: enrich agent map cards and redesign detail panel (Apple HIG)
Map nodes get color accent border, inline emoji+name, description snippet,
and inline cron health row. Detail panel redesigned with centered hero header,
grouped inset sections (iOS Settings pattern), navigation rows with chevrons,
and capability list rows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 17:04:51 -06:00
JohnRiceMLandClaude Opus 4.6 f97a230a45 fix: panels overlay from right instead of crushing layout
Detail panels (agent map + kanban) were flex children that shrank main
content on desktop. Now they overlay from the right edge with a slide
animation, leaving content at full width.

- Add panelSlideIn keyframe + .panel-slide-in / .backdrop-fade classes
- Switch both panels from md:relative to md:absolute overlay positioning
- Remove permanent 360px empty-state panel that stole map space
- Remove legend right-offset hack (panel no longer pushes content)
- Add left-edge shadow for depth on overlay panels
- Improve formatContent: code blocks, headings, numbered lists,
  inline bold/code rendering for agent work results
- Pass workResult context to agent chat for follow-up awareness

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 15:36:51 -06:00
JohnRiceMLandClaude Opus 4.6 d4fc3719de feat: kanban board with agent automation (V2)
Full kanban board (backlog/todo/in-progress/review/done) with drag-and-drop,
agent chat, and automated agent work. Assigning an agent and moving a ticket
to "To Do" triggers the agent to auto-pick it up, stream role-based work
(Lead Dev/UX-UI/QA), save the result to the ticket, and move to "Review".
Work result displays prominently in the detail panel's top section.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 14:39:34 -06:00
JohnRiceMLandClaude Opus 4.6 3ab27384b8 fix: image pipeline — resize client-side, use CLI execFile, check only latest msg
- Resize images to 1200px max before base64 encoding (fits 1MB ARG_MAX)
- Revert sendViaOpenClaw from broken WebSocket to execFile CLI approach
  (WebSocket requires device keypair auth for operator.write scope)
- Only check latest user message for images, not full history
  (prevents text messages from routing through image path after an image was sent)
- Add clear chat button, TDD tests for sendViaOpenClaw (6 new tests)
- Minor Tailwind class consolidation in layout components

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 13:35:15 -06:00
JohnRiceMLandClaude Opus 4.6 1f05426356 feat: route image messages through OpenClaw chat.send pipeline
Images sent in chat now go through the gateway's WebSocket agent pipeline
(chat.send + chat.history) instead of the /v1/chat/completions endpoint
which strips multimodal content. This is the same path Discord/Telegram
use, requires only the gateway token -- no separate Anthropic API key.

Also adds transcription module (lib/transcribe.ts) with clear fallback
messaging when Whisper fails, and integration tests for the full image
pipeline.

146 tests passing, 0 type errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 12:47:26 -06:00
JohnRiceMLandClaude Opus 4.6 b816109389 test: add TDD coverage for multimodal, validation, and audio-recorder
Extract buildApiContent to lib/multimodal.ts for testability. Add 43 new
tests covering: multimodal message building (images, files, audio, mixed
media, text file inlining), validation of content parts and legacy wrapper,
and audio-recorder utilities (formatDuration, estimateStorageSize).

111 tests total, all passing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 17:11:12 -06:00
JohnRiceMLandClaude Opus 4.6 f5ce3153f9 feat: multimodal chat (vision + files) and TTS listen button
Images attached by users are now sent to the agent as OpenAI vision
content parts so the model can actually see them. Text files are inlined,
binary files described. Validation updated to accept multimodal content arrays.

Added /api/tts endpoint (OpenAI TTS via gateway) and a speaker button on
assistant messages for on-demand text-to-speech playback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 16:24:53 -06:00
JohnRiceMLandClaude Opus 4.6 7ce92bce48 feat: add voice messages, file attachments, and enhanced media input
Voice recording with waveform playback (tap-to-record, cancel/send buttons),
file attachment bubbles with type icons and download, image paste/drag-and-drop,
pre-send attachment preview strip, and base64 persistence for all media types.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 16:11:21 -06:00
JohnRiceMLandClaude Opus 4.6 32f5b403b0 feat: complete Apple-quality UI/UX remake
Design System:
- Apple HIG typography scale (caption2 → large-title)
- 4px spacing grid (space-1 → space-16)
- 7 new CSS tokens across all 5 themes
- Interactive state CSS classes (hover-lift, btn-primary, focus-ring, etc.)
- Shimmer skeleton, slideDown, bounce-dot animations
- Light theme polish: deeper shadows, better accent contrast

Navigation:
- Lucide icons replacing emoji in sidebar
- Cmd+K global search command palette (agents, pages, crons)
- Breadcrumbs component for page context
- Sidebar wrapper orchestrating desktop + mobile
- Mobile hamburger menu with spring-animated slide-out
- Cron error dot badge on nav item

Manor Map + Agent Detail:
- Polished agent nodes: tinted squircle emoji, status dots with border ring
- Smooth bezier edges, selected agent edge highlighting
- Map legend (top-right), skeleton loading state
- Detail panel: hierarchy navigation, cron status, dual CTAs
- Agent detail: single-column scrollable layout, card sections
- SOUL.md viewer with copy button, voice ID copy

Chat:
- iMessage-style agent list with gradient avatars, online dots
- Desktop + mobile variants with responsive master/detail
- Sticky header with agent info, profile link, clear button
- Time gap timestamps between messages
- Typing indicator (bouncing dots) before first stream token
- Thin blinking cursor replacing block cursor
- Code blocks with copy button, URL auto-linking
- Rounded input capsule with SVG icons

Cron + Memory:
- Sticky header with summary counts, spinning refresh, auto-update timer
- Filter pills with ARIA tablist, keyboard cycling
- Expandable cron rows with colored borders, error tinting, copy
- Memory: 260px sidebar with search, file icons, arrow key nav
- Content header with breadcrumb path, copy + download buttons
- Mobile master/detail pattern with back button

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 14:08:52 -06:00
JohnRiceMLandClaude Opus 4.6 28c4269539 feat: security hardening, UX/UI overhaul, test infrastructure
- Fix XSS in memory browser (escape-first markdown pipeline)
- Add API input validation with discriminated union returns
- Fix chat race condition with useRef for message freshness
- Wire up agent search filtering in chat sidebar
- Remove debug logging, add proper error responses to all API routes
- Fix NavLinks silent error swallowing
- Handle overdue cron timestamps
- Extract agent registry to JSON config
- Remove unused @anthropic-ai/sdk dependency
- Set up Vitest with 68 tests (conversations, agents, crons)
- Add skeleton loaders, ErrorState component, keyboard navigation
- Add responsive mobile sidebar with hamburger menu
- Add ARIA labels, roles, prefers-reduced-motion support
- Fix broken CSS vars in agent detail page
- Replace hardcoded colors with theme variables
- Define typography scale (--text-xs through --text-4xl)
- Move inline hover styles to CSS classes
- Polish light theme shadows and accent contrast
- Add shimmer/slideDown animations, code block copy button

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 13:40:20 -06:00
JohnRiceML dd851cace5 feat: full Messenger rebuild — persistent threads, all agents, media support
- /chat unified two-panel layout: agent list left, conversation right
- 20 agents in sidebar, sorted by recency, unread badges, last msg preview
- Conversations persist in localStorage across refreshes
- Streaming chat with full markdown rendering (code, bullets, bold, etc)
- Image attachments: render inline with click-to-open
- Audio attachments: native <audio> player inline in messages
- File upload via 📎 button (image/audio)
- /chat/[id] redirects to /chat?agent=[id] for backward compat
- URL syncs to ?agent=id as you switch threads
2026-02-27 13:04:25 -06:00
JohnRiceML 547f41e9ed fix: chat via OpenClaw gateway — sonnet-4-6, no separate API key 2026-02-27 12:45:29 -06:00
JohnRiceML 751b7435d2 feat: 5-theme system + visible map connectors
- CSS variable theme system: dark, glass, color, light, system
- ThemeProvider with localStorage persistence + OS detection
- ThemeToggle picker in sidebar (emoji pills)
- lib/themes.ts + app/providers.tsx + components/ThemeToggle.tsx
- Map connectors: strokeWidth 1→2, opacity 0.3→0.85, per-theme overrides
- Glass/Color/Light theme CSS foundations wired into globals.css
2026-02-27 12:17:34 -06:00
JohnRiceML 252e283bac design: Apple dark mode full pass via claude-opus
- Apple system fonts (-apple-system, SF Pro), 8pt grid spacing
- True Apple dark: #000 bg, #1c1c1e elevated, #2c2c2e grouped
- Sidebar: icon containers, JR avatar, smooth 150ms transitions
- Chat: rounded-[20px] bubbles, glass assistant msgs, gold user msgs
- Agent map: apple card nodes, gradient panel headers, empty state
- Crons: grouped table rows, pulsing error dots, chevron hints
- Memory: JSON syntax highlight, word count, hover arrows
- All pages: line-numbered SOUL viewer, emoji watermark, color glows
2026-02-27 12:05:44 -06:00