- Add autoSaveDelayMs to TaskBehaviorSettings (default: 500ms)
- Update useDebouncedSave hook to use config setting instead of hardcoded value
- Add UI control in Tasks settings tab (slider: 200-5000ms, step 100)
- Add validation schema (min: 200ms, max: 5000ms)
The default 500ms delay was too aggressive for comfortable text editing,
causing interruptions mid-sentence. This makes the delay user-configurable
to accommodate different typing speeds and preferences.
Co-authored-by: OpenClaw Agent <agent@openclaw.ai>
Add individual on/off toggles for each dashboard widget in
Settings > Board & Display. When 'Show Dashboard' is enabled,
a nested list of 12 widget toggles appears:
- Token Usage, Run Duration, Agent Comparison, Status Timeline
- Cost per Task, Agent Utilization, Wall Time, Session Metrics
- Activity Clock, Where Time Went, Hourly Activity, Trends Charts
All default to ON. Server-side Zod schema updated to accept
the new dashboardWidgets object. Shared types already had the
DashboardWidgetSettings interface from a prior commit.
Archive:
- Optimistic removal from cache on archive (instant UI update)
- Rollback on error, refetch on settle
Agent Registry:
- Fix RegistryStats interface to match server (total/online/busy/idle/offline)
- Add 'idle' status style (blue) to MultiAgentPanel
- Panel already dynamic — no hardcoded agent limit
Cost Per Task:
- Enhanced clickable styling (border, hover highlight, arrow indicator)
- Tasks already wired to open-task event
Telemetry:
- Capped 3 Feb 2 outliers from 15-19min to 10min
- Token events verified present for Feb 3-5 (backfilled earlier)
Data fixes:
- Backfill agent='veritas' on 987 telemetry events (were 'unknown')
- Backfill run.tokens events for Feb 3-5 (46 events, estimated from durations)
- Reset stuck agent status to idle
Utilization:
- Switch from status-history (1 entry!) to telemetry-based computation
- Timezone-aware date bucketing via tz query param
- Current day uses elapsed time, not full 24h
Dashboard layout:
- Remove Success Rate chart (redundant with Session Metrics)
- Task Activity Per Day now full width
- Fix tooltip info icons (delayDuration=0, asChild, button wrapper)
- Default period changed from 3d to 7d (token data starts Jan 31)
- Add ?tz=<offset> to metrics endpoints (e.g. ?tz=-6 for CST, ?tz=9 for JST)
- Server defaults to system time when tz is omitted
- Client auto-sends browser timezone offset on utilization requests
- Shared helpers: toLocalDateStr(), getTodayStr(), getElapsedTodayMs()
- Date bucketing and 'today' detection respect the requested timezone
- Works for any timezone — not hardcoded to any region
Every API response now includes:
meta.timezone: 'UTC-06:00' (human-readable)
meta.utcOffset: -6 (numeric, for client-side math)
Uses system time — no config needed.
- 'Today' detection uses local time (getHours) not UTC (getUTCHours)
- Event timestamps converted to local dates for daily bucketing
- Fixes Feb 5 CST events being bucketed into Feb 6 UTC
- Server uses system timezone (America/Chicago = CST/CDT)
- Fix daily utilization: use elapsed time for current day (was 100% because
active time ÷ 0 hours elapsed = infinity, capped to 100%)
- Activity Clock + Hourly Activity: switch from broken activity.json (1 record)
to status-history endpoint (has actual agent state transitions)
- Task-cost API: add project + totalDurationMs fields for Where Time Went
- Where Time Went: pull real project data from task-cost telemetry
- Wall Time toggle: rewrite with clear labels + info tooltips
- Normalize Feb 3 telemetry outlier (66min → 19min)
GH #92 created: Dashboard widget toggles with descriptions
- Remove Success/Errors card (Sessions widget covers it)
- Activity Over Time: add Y-axis 'Events' label
- Where Time Went: pull real data from telemetry by project (was blank)
- Wall Time: rewrite as Total Agent Time + Avg Run Duration with tooltips
- Activity Clock: add info tooltip explaining the visualization
- Agent Comparison: lower minRuns to 1 so all agents show
- Task-cost API: add project + totalDurationMs fields for widgets
- Normalize Feb 3 time outlier (66min → 19min, capped at p95)
- TrendsCharts (Task Activity per Day): full width layout
- Replace non-existent getStorageBase with DATA_DIR inline constant
- Fix import ordering (path must be imported before DATA_DIR declaration)
- Fix req.params/req.query type casts for Express strict mode
- Add createNotification() to NotificationService for failure-alert backward compat
- Export NotificationService class for type imports
- Cast telemetry events properly in cost-prediction service
- Server builds clean and starts successfully
Inspired by @nateherk's Klouse branded PDF reports.
- 5 report templates: audit, summary, analysis, standup, custom
- Brand config: company name, logo, colors, font, tagline
- Markdown → HTML conversion with print-optimized CSS
- Template-specific styles (audit findings, metrics cards, status colors)
- HTML served directly or printable to PDF via browser
- Reports stored in docs/reports/ and accessible via docs tab
- REST API: generate, list, get, brand CRUD, templates, HTML serve
Inspired by @nateherk's Klouse scheduled deliverables view.
- Deliverables: daily/weekly/biweekly/monthly/custom schedules
- Run tracking: success/failed/skipped with output files and summaries
- Next run calculation, enable/disable toggle
- REST API: CRUD deliverables, record runs, run history
- Tags, agent assignment, output path configuration
- Persistent storage with 500-run history cap
- WhereTimeWent (#57): Time breakdown by workstream with progress bars
- ActivityClock (#58): 24-hour donut chart showing activity distribution
- HourlyActivityChart (#59): Bar chart of hourly activity over time
- WallTimeToggle (#60): Toggle between wall time and active time with efficiency %
- SessionMetrics (#61): Session count, success rate, avg duration, completed/failed/abandoned
- All widgets responsive, using existing useMetrics + activity API
- Integrated into Dashboard in new grid layout sections
The dashboard's Success Rate, Token Usage, and Average Run Duration
graphs are powered by run.* telemetry events that agents must emit
manually — they are NOT auto-captured like task.* events.
This has broken multiple times when agents lost their AGENTS.md
instructions. Now documented in:
- AGENTS-TEMPLATE.md (copy-paste for new agents)
- SOP-agent-task-workflow.md (full API flow with telemetry steps)
Both docs now include the exact curl commands for run.started,
run.completed, and run.tokens events, plus a table clarifying
what's auto-captured vs. manual.
- MultiAgentPanel component: shows all registered agents with live status
- Agent cards: status dot, model, capabilities, current task, heartbeat
- Merges registry data with real-time WebSocket status
- Registry API client: list, stats, get agent
- Integrated into BoardSidebar below existing AgentStatusPanel
- Color scheme: green=online, purple=busy, gray=offline, red=error
- Expandable cards show capabilities, provider, version, heartbeat
Inspired by @nateherk's Klouse dashboard approach:
'Spin up agents to analyze what broke, why, and how to prevent it'
- Error Learning Service: submit errors, structured analysis, pattern detection
- Auto-tags, severity estimation, repeat detection
- Links analyses to task lessonsLearned field
- Similarity search for 'have we seen this before?'
- Aggregate stats: by type, severity, repeat rate, top prevention steps
- REST API: POST /submit, PATCH /:id, GET /, GET /stats, GET /search
- Cost Prediction Service: predicts task cost based on type, priority, complexity, history
- Prediction factors: type multiplier, priority multiplier, description complexity, project adjustment
- Historical base cost: calculated from telemetry data for similar tasks
- Confidence levels: low/medium/high based on sample size
- Accuracy tracking: predicted vs actual cost comparison for completed tasks
- Accuracy stats: MAE, mean/median accuracy, within-20%/50% metrics, per-type breakdown
- Task schema: added costPrediction and actualCost fields
- REST API: POST /predict, GET /accuracy, GET /accuracy/stats
- Agent Registry Service: registration, heartbeat, capability discovery, stale detection
- REST API: POST /register, POST /:id/heartbeat, DELETE /:id, GET /stats, GET /capabilities/:cap
- Persistent storage: .veritas-kanban/agent-registry.json
- Auto-offline: agents without heartbeat for 5min marked offline
- AGENTS.md template: docs/AGENTS-TEMPLATE.md with full integration guide
## Highlights
- Activity Page Redesign — Full-width status history, clickable navigation, color-coded badges
- Task Templates UI (#39) — Full management interface for templates
- Analytics API (#43) — Timeline and aggregate metrics endpoints
- Status Transition Hooks — Quality gates for task status changes
- 7 GitHub Issues Closed (#47, #48, #49, #51, #53, #56, #82)
## Changes
- Bump all packages to 1.6.0
- Update CHANGELOG.md with comprehensive release notes
- Update README.md version badge and roadmap
- Update FEATURES.md with new sections:
- Task Templates (v1.6.0)
- Analytics API (v1.6.0)
- Dashboard Filter Bar (v1.6.0)
- Redesigned Activity Feed section
- Activity page: purple for sub-agent, amber for in-progress, blue for done
- Status badges: uniform width, color-coded by status type
- Merged agent status and task status changes into unified view
- Task status badges use kanban column colors:
- todo → slate
- in-progress → blue
- blocked → amber
- done → green
- Both types sorted by timestamp, grouped by day
- Task ID + title clickable to open task