Skip to content

Commit 86dbc3a

Browse files
committed
release: merge develop into main for v0.30.0
2 parents 23a2e44 + bfe5715 commit 86dbc3a

11 files changed

Lines changed: 733 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,25 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.30.0] - 2026-04-23
9+
10+
Minor release adding a unified Activity Log — a single page aggregating execution history across routines, heartbeats and triggers so the user can answer "what did the system just do?" without visiting three separate pages.
11+
12+
### Added
13+
14+
- **`/activity` — Unified Activity Timeline** — new page aggregating execution history across all three automation primitives: scheduler routines, agent heartbeats, and event-based triggers. Presented as a reverse-chronological timeline (Linear / Vercel Logs / GitHub Actions style). Each row shows name + type badge + status pill (success / error / running) + duration + relative time. Click opens a right-side drawer (480px) with full output, metadata (started / finished / exit code / cost / tokens), and a "Open in dedicated page" link.
15+
- **Filters:** multi-select type chips (Routines / Heartbeats / Triggers), status dropdown (All / Success / Error / Running), period tabs (Today / 7d / 30d / All), debounced search (300ms, client-side).
16+
- **Auto-refresh:** 30s interval, paused automatically when the browser tab is in background (`visibilitychange`).
17+
- **Load more:** client-side pagination at 50 items per page.
18+
- **Accessibility:** drawer is `role="dialog"` `aria-modal="true"`, Escape closes, click-outside closes.
19+
- **Nav:** new sidebar item "Activity" (`Atividade` pt-BR / `Actividad` es) under the operations group. `View all →` on the Overview Routines card now points to `/activity` for a unified journey.
20+
- **Data sources:** reuses existing backend endpoints — `GET /api/routines/logs`, `GET /api/heartbeats/{id}/runs`, `GET /api/triggers/{id}`. Client-side aggregation (N+1 fetches via `Promise.all`) — acceptable for v1 volume; server-side aggregated endpoint can come later if needed.
21+
22+
### Known limitations (v1)
23+
24+
- `/api/routines/logs` only accepts `?date=`, so the period filter (7d / 30d / All) affects heartbeats and triggers only — routines always show today. The routine log endpoint will need `from`/`to` params to honor longer periods; deferred to a follow-up.
25+
- Client-side aggregation means timeline loads can do up to `1 + N + M` requests (1 for routines today, N for each heartbeat's last 10 runs, M for each trigger's detail). Fine under ~20 heartbeats/triggers, may need batching later.
26+
827
## [0.29.3] - 2026-04-23
928

1029
Patch release: fix the infinite page scroll in thread mode so the embedded chat behaves exactly like the agent chat (fixed input at the bottom, messages scroll inside the container), and harden `.gitignore` against nested `.claude/` folders that agents were accidentally creating from subdirectory cwds.

cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@evoapi/evo-nexus",
3-
"version": "0.29.3",
3+
"version": "0.30.0",
44
"description": "Unofficial open source toolkit for Claude Code — AI-powered business operating system",
55
"keywords": [
66
"claude-code",

dashboard/frontend/src/App.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import Settings from './pages/Settings'
3030
import ShareView from './pages/ShareView'
3131
import ShareLinks from './pages/ShareLinks'
3232
import HeartbeatsList, { HeartbeatDetail } from './pages/Heartbeats'
33+
import Activity from './pages/Activity'
3334
import Goals from './pages/Goals'
3435
import Topics from './pages/Topics'
3536
import TicketDetail from './pages/TicketDetail'
@@ -109,6 +110,7 @@ function AppContent() {
109110
<Route path="/agents" element={<Agents />} />
110111
<Route path="/agents/:name" element={<AgentDetail />} />
111112
<Route path="/routines" element={<Routines />} />
113+
{hasPermission('scheduler', 'view') && <Route path="/activity" element={<Activity />} />}
112114
<Route path="/tasks" element={<Tasks />} />
113115
{hasPermission('triggers', 'view') && <Route path="/triggers" element={<Triggers />} />}
114116
<Route path="/skills" element={<Skills />} />

dashboard/frontend/src/components/Sidebar.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
LayoutDashboard, Bot, Clock, Zap, Layout, Calendar, CalendarClock,
88
Brain, Plug, DollarSign, FolderOpen, Cpu,
99
Monitor, Users, ScrollText, LogOut, Menu, X, Shield, BookOpen, Library, Database,
10-
ArrowUpCircle, ChevronDown, Webhook, HardDriveDownload, Settings, Share2, Heart, Target, Ticket,
10+
ArrowUpCircle, ChevronDown, Webhook, HardDriveDownload, Settings, Share2, Heart, Target, Ticket, Activity,
1111
} from 'lucide-react'
1212

1313
interface VersionInfo {
@@ -51,6 +51,7 @@ const navGroups: NavGroup[] = [
5151
{ to: '/tasks', labelKey: 'tasks', icon: CalendarClock, resource: 'tasks' },
5252
{ to: '/triggers', labelKey: 'triggers', icon: Webhook, resource: 'triggers' },
5353
{ to: '/heartbeats', labelKey: 'heartbeats', icon: Heart, resource: 'heartbeats' },
54+
{ to: '/activity', labelKey: 'activity', icon: Activity, resource: 'scheduler' },
5455
{ to: '/goals', labelKey: 'goals', icon: Target, resource: 'goals' },
5556
{ to: '/topics', labelKey: 'issues', icon: Ticket, resource: 'tickets' },
5657
{ to: '/templates', labelKey: 'templates', icon: Layout, resource: 'templates' },

dashboard/frontend/src/i18n/locales/en-US/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ const translations = {
185185
tasks: 'Tasks',
186186
triggers: 'Triggers',
187187
routines: 'Routines',
188+
activity: 'Activity',
188189
scheduler: 'Services',
189190
integrations: 'Integrations',
190191
providers: 'Providers',

dashboard/frontend/src/i18n/locales/es/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ const translations = {
173173
tasks: 'Tareas',
174174
triggers: 'Disparadores',
175175
routines: 'Rutinas',
176+
activity: 'Actividad',
176177
scheduler: 'Servicios',
177178
integrations: 'Integraciones',
178179
providers: 'Proveedores',

dashboard/frontend/src/i18n/locales/pt-BR/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ const translations = {
180180
tasks: 'Tarefas',
181181
triggers: 'Gatilhos',
182182
routines: 'Rotinas',
183+
activity: 'Atividade',
183184
scheduler: 'Serviços',
184185
integrations: 'Integrações',
185186
providers: 'Provedores',

0 commit comments

Comments
 (0)