Upivia changelog

2026-06-20 — Phase 24: Developer Platform Completion (12 remaining features)

  • MCP client support. External MCP servers via ~/.upivia/mcp.json. stdio JSON-RPC, auto-merged tools. upivia mcp list/add/remove.
  • Slash-command autocomplete. Typing / shows filterable dropdown of all 23 commands. Tab/Enter to select.
  • local_todo_write tool. Agents create/update structured todo lists. Displayed as progress tracker in TUI.
  • AGENTS.md/CLAUDE.md ingestion. Project rules auto-loaded into system prompt (AGENTS.md, CLAUDE.md, .cursorrules, .upivia/rules.md).
  • Mobile-optimized Sessions tab. Sidebar collapses to top panel at 640px.
  • Per-message cost badge. Tool call cost + count shown per assistant message.
  • Image rendering. Kitty/iTerm2 graphics protocol for inline images.
  • LSP diagnostics. local_diagnostics tool runs tsc --noEmit, returns structured errors.
  • Git integration. local_git tool (status/diff/log/commit/push/branch). Read commands always allowed, write needs permission.
  • Multi-instance WS. Redis pub/sub for horizontal scaling (optional, env-gated).
  • Theme switcher. 4 CLI themes (amber/blue/green/mono), persisted to ~/.upivia/theme.json.
  • CLI subcommands. upivia mcp (manage MCP servers), upivia doctor (diagnostics), upivia update (self-update).
  • Delegation model override. delegate_task accepts model_id — delegating agent can override worker's model (priority: explicit > agent default > tier).
  • TUI fixes. Landing page shows on auto-resume. Removed black box in composer (transparent textarea).

2026-06-20 — Phase 22+23: Realtime Sessions, Agent Studio, 3D Memory Graph, Personality, Voice, Self-Adjusting Skills

  • WebSocket chat protocol. WS server with PAT auth, session fan-out (CLI + web see same stream), chat_turn relay, cancel/approve/reject. CLI uses WS with SSE fallback.
  • Background TUI. upivia --background runs headless — WS + heartbeat + local tools, no terminal renderer. Control from web app or other devices.
  • upivia list live indicators. Green dot for active sessions, gray for offline.
  • New Sessions tab. Replaces ChatSandbox + Devices. Dual-panel chat UI with session sidebar, streaming, voice (STT+TTS), model picker. 10s liveness polling.
  • Tab consolidation 8→4. Sessions | Agents | Automations | Integrations.
  • AgentTerminal → Quick Command Bar. Slim inline command bar with flyout panel. Only on Sessions/Agents tabs.
  • Per-agent default model. Agent.defaultModelId. Session creation uses agent's default. Settings has model picker.
  • OpenRouter models page. 340+ models, fuzzy search, favorites, capability filters (vision, tools, reasoning, caching). /api/v1/models/openrouter + /api/v1/models/favorites.
  • Agent personality. Agent.personality + Agent.systemPrompt. 4 preset templates. Injected into chat turn system prompt. Voice config (rate, pitch, language, test button).
  • Voice in Sessions. Mic button (STT) + TTS toggle in chat composer. Reads responses aloud using agent's voice config.
  • Persistent agent messaging. AgentConversation + AgentMessage tables. Async DMs in Sessions tab sidebar. Messages persist across sessions.
  • 3D memory graph. Three.js force-directed graph. Glowing neurons colored by ConMem card type. Directional pulse particles along edges. Theme-aware (dark/light). Sidebar with filter pills, zoom-to-node, detail panel.
  • Self-adjusting skills. AgentSkillProposal table. Agents propose workflow improvements from memory feedback. Approve creates new draft version. Skills tab shows proposals.
  • ConMem memory enhancements. accessCount + relevanceScore. Retrieval ordered by relevance. Access tracking on each retrieval.
  • Agent Studio redesign. 6 sub-tabs → 4 (Identity, Services, Memory, Settings).
  • local_edit_file tool. Surgical string replacement — token-efficient alternative to full-file rewrites.
  • Real context compaction. /compact now uses LLM summarization instead of naive truncate.
  • Session auto-resume. upivia resumes most recent open session on launch.
  • TUI speed. Skip image parsing when no image mentions. Optimized stream read loop.

2026-06-20 — Phase 21.5: CLI TUI Stability, VCS, Code Graph Tools, and Skills

  • TUI crash fixes. Fixed recurring OpenTUI crashes caused by nested <text> nodes in ModelPicker, Transcript, and AgentTreePanel. These caused the TUI to crash when switching models, entering select mode, or viewing agent model badges.
  • Readable text colors. All text hierarchy colors in theme.ts were too dark to read (muted was #5a5a62, faint was #3e3e44). Lightened to #9a9aa4 and #7a7a84 respectively. New rule: no dark colors for text.
  • Model picker scroll. Model picker now scrolls to follow selection. Added j/k, Ctrl+D/Ctrl+B (page), g/G (top/bottom) navigation through 300+ OpenRouter models.
  • Landing screen. New welcome screen shown on startup with ASCII UPIVIA logo, agent/model/project context, and shortcut hints. Disappears after the first message.
  • Sidebar alignment. Fixed mismatched margins causing Team and Tools sidebar panels to start at different x positions. All panels now use width=24 with no per-panel offsets.
  • File changes VCS. Ctrl+D panel rewritten with git-like version control: branches, commits (full file snapshots), checkout (restores files to disk), revert file/all. State persists to ~/.upivia/vcs/<projectHash>.json across TUI restarts. Three views: changes, log (commit history with per-file diff), branches.
  • Code graph tool. New local_code_graph(query) agent tool bridges Graphify for token-efficient codebase navigation. Auto-builds AST graph on first query, answers natural-language questions. ~6x token reduction vs blind file reading.
  • Search tool. New local_search(pattern, path?, glob?) agent tool — grep-style regex content search with glob filtering. Pure Node.js, no external deps.
  • Session management. New upivia list command shows recent sessions and can open one by number or ID. /sessions slash command now opens the CommandPalette session picker instead of printing plain text.
  • Skills system. New GET /api/v1/agents/:id/skills endpoint returns the agent's capabilities (granted workflows + enabled services) as a unified skill list. CLI tool local_skill_list lets the agent discover its own skills. Web app gained a "Skills" tab in agent detail. No schema changes — skills are a derived view over existing data.

2026-06-12 — Phase 17b: Workflow UX + Scheduler clock + Terminal sessions

  • Workflow visibility fix. Unpublished workflows now show a "Draft" badge instead of "Team"/"Org". has_published_version flag added to the list API, with client-side fallback when the backend lacks the field. Share toggle hidden for unpublished workflows.
  • Draft workflow testing. Built-in test panel now runs the latest version regardless of publish status (test_run: true). The API accepts allowDraft for dashboard/terminal test runs. Scheduled tasks and agent run_workflow still require a published version.
  • Terminal publish message fixed. workflow publish now says "Publish request created — review in Tasks" instead of falsely claiming the workflow was published.
  • Command parser cron fix. parseAiCommands no longer strips * characters from AI-generated commands, fixing cron expressions in scheduled tasks.
  • Schedule workflow name resolution. The schedule command now resolves workflow names to IDs in the payload automatically, so payload={"workflow_id":"daily_weather",...} works with workflow names.
  • Scheduler clock. A live "Your scheduling clock" card showing current time + date + persisted timezone selector was added to the Scheduler page. Timezone (upivia:time:timezone) persists in localStorage. Calendar navigation respects the selected timezone.
  • Terminal session improvements. Each visible terminal session now gets its own backend chat session (previously all shared one hidden session). Sessions auto-name from the first user prompt. Session delete correctly adjusts the active index.
  • Dark mode calendar fix. Today's circle and active event chips use --bg/--text directly instead of --accent/white, fixing white-on-white in dark mode.
  • Scheduler modal defaults. The create-task modal defaults to the user's scheduler timezone. Draft workflow scheduling is allowed (no more "publish it first" error).
  • Scheduler docs updated. Guidance now shows valid quoted cron examples and notes that workflow names work in workflow_id.

2026-06-12 — Phase 17: Terminal agent v2 + Categories + Governance

  • Opencode-style terminal rendering. AI Builder terminal now renders structured blocks instead of flat ANSI lines. Grey frosted "Thinking..." card streams live reasoning from models like DeepSeek. Yellow-tinted command queue card appears when AI suggests commands in BUILD mode. Dim status lines for progress updates. All emojis replaced with ASCII markers ([ok], [err]).
  • Plan-first BUILD mode. AI is instructed to explain its plan concisely before emitting executable commands. PLAN and ASK modes remain non-executing.
  • Workflow scheduling fixed. parseKVs rewritten with balanced-bracket parsing to handle nested JSON payloads (e.g., {"workflow_id":"x","input":{"topic":"test"}}). workflow.run added to terminal COMMAND_DOC so the AI knows how to schedule workflows. Chat schedule_task tool now always lists org workflows with published versions, not just granted ones. Scheduler tab shows human-readable labels for workflow tasks (e.g., "Workflow: My Research").
  • Workflow publish governance. Workflow version publish now requires publish.manage permission (owners bypass). Previously had zero auth — any authenticated user could publish any workflow version. Audit logged on each publish.
  • Workflow unpublish endpoint. New POST /api/v1/workflows/:id/versions/:versionId/unpublish reverts a published version back to draft. Requires publish.manage permission. Audited with reason.
  • Terminal sessions persistence. Session logs now survive page refresh via localStorage. Sessions tab shows entry counts and supports rename/delete/switch.
  • Dedicated terminal agent. A new "Terminal Agent" is auto-provisioned per org with only text_generation.generate enabled and its own $50/month budget. Separate from the Chat Agent for clean billing isolation.
  • Per-session spend tracking. Terminal cost bar now shows dollars spent this session, computed from balance deltas across turns.
  • Memory scope fix. Terminal memory add command now uses scope "agent" instead of the invalid "knowledge" which was silently rejected by the service.
  • Categories system. category String? added to Agent, Workflow, Service, and ScheduledTask models. Category filter pill bar at the top of My Agents tab with "All" grouped view showing category headers and item counts. Category chips on agent tiles. Category field in agent "Edit details" form. Terminal categorize command and enhanced agents listing showing category labels.
  • Published tab unpublish buttons. Revoke buttons (✕) added to all three resource types in the Published tab: Agents (revokes publication), Workflows (reverts version to draft), Custom APIs (sets visibility back to private). Error messages displayed inline.
  • Unpublish audit log. Tasks → Publishing tab now includes an "Unpublish Log" section showing audit events for unpublish/revoke actions with date, event type, resource name, and reason.
  • Scroll-to-detail on agent expand. Clicking an agent tile now smooth-scrolls the page to the expanded detail area.
  • Agent PATCH now accepts category. The PATCH /v1/agents/:id endpoint was updated to handle the category field alongside name, description, and other properties.

2026-06-08 — Workspace UI bugfixes + Reusable tabs component + Landing page updates

  • Teams scope fix. Team switcher now only shows teams from the current workspace. Previously, when viewing an invited workspace, the dropdown incorrectly showed teams from all workspaces.
  • Reusable Tabs component. All tab bars (Agents nav, Activity, Tasks, Teams, Workspace) now use a single <Tabs> component from src/ui/Tabs.tsx. Supports button mode (content switching) and link mode (URL navigation). Tabs scroll horizontally when overflowing at any viewport width, not just mobile.
  • Table scroll wrappers. Wide tables on Activity, Tasks, Teams, and Workspace pages now scroll horizontally within their cards on mobile instead of overflowing the page width.
  • Dark mode select dropdowns. Native <select> dropdown options now use theme colors in dark mode (light text on dark background). Previously unreadable due to browser default white background.
  • Landing page: Custom API budgeting. Added mention that users can budget external APIs and custom endpoints alongside built-in services.
  • Landing page: Bug reporting in contact form. Added "Found a bug?" tab to the contact form segmented control (alongside "General inquiry" and "Integrate a service"). Bug reports go to the same ops inbox as other leads.

2026-06-05 — Phase 8: Voice mode + UX polish

  • Voice input in chat. Click the mic button to speak your message. Uses the browser's built-in Web Speech API (Chrome, Edge, Safari). Auto-sends after ~1.5s of silence.
  • Text-to-speech. Toggle "Read responses aloud" in the chat sidebar. Assistant responses are spoken via the browser's voice synthesis. No external API needed.
  • Teams page redesign (M1). Teams now render as a grid of cards instead of a vertical stack of forms. Click a team to expand its detail panel with tabs for Budget, Services, and Settings. Icon picker lets you assign emoji icons to teams.
  • Permissions page cleanup (M2). Removed the long paragraph blurb — help text is now behind a ? tooltip. Cleaner header with service/operation counts.
  • Sidebar reorganization (M3). Moved "Permissions" from Settings to Build group (after Agents) — it's about configuring what agents can do, so it belongs in the Build workflow.
  • Theme preferences (M4). Light/dark/system mode toggle + 8 preset accent colors. Click theme button in sidebar footer to cycle modes; right-click to open color picker. Persists to localStorage.
  • Get-started simplification (M5). Reduced from 8 sections to 4 cards. Each card is scannable in 2 seconds with icon, one-sentence lede, and CTA button. Detailed explanations in "Learn more" expanders. Quick links grid at bottom.
  • Subtle polish animations (M6). Page content fades in with staggered timing. Cards lift on hover. Buttons have press feedback. Sidebar nav items slide on hover. Table rows highlight. All animations respect prefers-reduced-motion.
  • Usage chart (M6). New bar chart on /usage showing daily spend for the last 14 days. Animated bars grow on load with tooltips on hover. Pure CSS — no chart library needed.
  • Unified workspace settings. Organization, Teams, and Invites consolidated into a single /settings/workspace page with tabs. Workspace is now its own nav section separate from Settings.
  • Inbox for pending invitations. Topbar now shows an inbox icon with a badge count when you have pending workspace invitations.
  • Access token revoke and delete. Tokens can now be revoked (soft-delete) or permanently deleted with confirmation modals that require typing the token name.
  • Default to light theme. New users now start with light mode instead of system preference. Theme toggle still available in sidebar.
  • Dark mode contrast fixes. Improved readability for badges, tool chips, code blocks, and navigation in dark mode.

2026-06-06 — Phase 9: Teams & Budget Hierarchy

  • Per-team member roles. Team members can now be assigned as "manager" or "worker" within each team. Managers can allocate budgets to workers and manage team settings.
  • Hierarchical budget system. Owners allocate funds from the org balance to team pools. Managers allocate from team pools to individual worker budgets. Worker budgets are enforced during service execution.
  • Worker budget allocation. Managers and owners can allocate specific budget amounts to workers via the Teams page Members tab. Workers see their allocated/spent/available budget.
  • Budget request flow. Workers can request additional budget from managers/owners. Requests appear in a new inbox and can be approved or rejected with notes.
  • Scheduled team top-ups. Owners can configure recurring budget allocations to teams (daily, weekly, or monthly) that run automatically via the scheduler.
  • Budget enforcement. The dispatcher now checks worker budgets before executing service requests. Exhausted worker budgets block with worker_budget_exceeded status.
  • Team pool management. Teams page Budget tab now shows pool balance, allocated-to-workers, and unallocated funds with an "Add funds" button for owners.
  • Free plan limit. Free workspaces are limited to 3 teams maximum (soft limit, will be lifted for Pro/Business when Stripe subscriptions ship).
  • API endpoints. New endpoints for team pool allocation (POST /v1/teams/{id}/budget/allocate), worker budget allocation (POST /v1/teams/{id}/workers/{userId}/budget/allocate), member role changes (PATCH /v1/teams/{id}/members/{membershipId}), and budget requests (POST /v1/budget-requests, PATCH /v1/budget-requests/{id}).

2026-06-05 — Phase 6: Chat UX polish + sandbox approvals

  • Live SSE streaming in chat. /chat now streams progress in real time via Server-Sent Events (8 event types: status, tool_planned, tool_executing, tool_done, tool_pending, message, done, error). No more 15–40s spinners; users see "Calling email.send…" → "Got result, processing…" step-by-step.
  • Expandable thinking panel. Each assistant turn shows a collapsible chip list ("Thought for Xs · N steps") tracking what the agent did. Defaults open while live, collapses after landing.
  • Inline approval card in chat. When a tool call needs approval, an inline card appears in the thread (not a modal, not a redirect to /approvals). Shows tool name, args preview, estimated cost, Approve/Reject buttons. After the user decides, the card updates and the turn resumes as one continuous bubble.
  • Per-session "Ask before every action" toggle. Sidebar switch forces every tool call through approval regardless of per-binding thresholds. Useful when exploring a new agent. State persisted in localStorage; no DB schema change.
  • Chat-aware approval wrapper at /api/v1/chat/approvals/{id}. Backfills the ChatToolCall + placeholder chat message so the LLM sees coherent history when resuming after an approval decision. The base /v1/approvals/* endpoints and standalone /approvals page are unchanged.
  • Implementation notes: No DB migrations (force-approval is in-memory). No dependency changes. Tests: 661 passed (including 3 new force-approval cases). See DEC-088 in docs/09-decisions.md.

2026-05-26 — Phase 6: Member management + team service access

  • Per-team service access controls. Owners and admins can pick which services agents on each team can call from Settings → Teams. Defaults to "no restrictions" for back-compat.
  • Member edit page. Change a member's role, toggle their team memberships, or remove them from the workspace at /settings/org/[id]. Includes guardrails: sole owners can't be demoted, admins can't promote to owner or remove owners.
  • Invitations inbox. New /invitations page lists pending invites you can accept or decline plus a "My workspaces" list with a Leave button.
  • Role permissions reference. Plain-English explanation of owner/admin/member on the Org settings page, with the role × action matrix.
  • Forgot/reset password. Matching branded shells.
  • Production hardening. Sidebar overflow fix, prod auth-guard on /settings/*, recovered from a disk-full incident on the swarm node.

2026-05-26 — Phase 5: B2B foundations + upivia.com migration

  • Workspaces, teams, memberships, invites.
  • Per-team budgets (daily / monthly / hard cap) enforced by the dispatcher between agent budget and org balance.
  • Live Stripe top-ups stabilized.
  • Production migrated from agentwallet.shahmu.com to www.upivia.com with dedicated Postgres.

2026-05-23 — Phase 4.6: Catalog sprint

  • 22 new services wired on existing adapters; catalog now 40 services across communication, AI inference, storage, payments, search, CRM, and ticketing.

2026-05-23 — Phase 4.5: Developer experience

  • Test-mode keys with zero-cost sandbox execution and a separate audit tag.
  • @agentwallet/ai-sdk adapter, @agentwallet/mcp stdio server, create-agentwallet-app scaffold.
  • Local dev dispatcher.

Phase 4 — Capable services

  • Stored objects, knowledge collections, triggers (cron + webhook), reconcilable async executions, connected apps with OAuth refresh.

Phase 3 — Chat surface

  • Chat sessions, tool-calling loop wired directly to the dispatcher, chat artifacts, approval-required UI in chat.

Phase 2 — Real providers

  • Resend (email), Twilio (voice), OpenRouter (text generation + embeddings), Tavily (web search), and more.

Phase 1 — Core platform

  • The single service-request API. Policy + budget + approval pipeline. Auditable execution.