# Changelog

All notable changes to OpenAlice will be documented in this file.

## [Unreleased]

### 🏗️ Architecture — UTA-split v1

Split the trading domain into a dedicated UTA service co-located with
Alice. Broker connections, the git-like approval state machine, snapshot
scheduling, FX, and the broker SDKs (CCXT / Alpaca / Longbridge / IBKR
TWS port) all live in `services/uta/` now. Alice talks to UTA over
loopback HTTP through `UTAManagerSDK` + `UTAAccountSDK` — the public
surface (`ctx.utaManager`, the 19 AI trading tools, `UnifiedTradingAccount`
method shapes) is preserved, the implementation underneath swapped to
an HTTP adapter.

Three carriers of the L2 supervisor (Guardian) now share a module:
`scripts/guardian/{shared.ts, dev.ts, prod.mjs}`. Guardian probes
ports, spawns UTA + Alice (+ Vite in dev), gates Alice's boot on
`/__uta/health`, and watches `data/control/restart-uta.flag` for
config-change-triggered UTA respawns.

Docker image now produces both `dist/main.js` (Alice) and
`services/uta/dist/uta.js` (UTA), runs them under tini + Guardian.

Shared wire types + the broker preset catalog moved into a new
`@traderalice/uta-protocol` workspace package. Alice ↔ UTA both depend
on this; it's the long-term boundary contract if UTA later migrates to
a separate carrier (mobile / home server / etc).

Not yet shipped: auth gate between Alice and UTA (deliberately deferred
— v1 binds UTA to 127.0.0.1 and trusts same-host); public-internet
deployment + admin-token session cookie path; physical UTA migration
off the Alice host.

### Config

- Default crypto to bybit demo, securities to alpaca paper with tickers

### Merge

- Unified trading architecture + AGPL-3.0 relicense

### ⚙️ CI

- Add GitHub Actions workflow and fix time-sensitive test

### ⚡ Performance

- Decouple CCXT init from startup, allow plugins to start immediately

### 🎨 UI

- Polish frontend design — chat input, sidebar, card system
- Round 2 polish — shared components, transitions, table hover
- Round 3 polish — toast system, send spinner, mobile fixes

### 🐛 Bug Fixes

- Inject persona + brain state into Claude Code provider
- Extract assistant text when Claude Code result is empty
- Align SettingsPanel with actual backend config structure
- Use --disallowedTools instead of --allowedTools for evolution mode
- Restore --allowedTools and hot-reload evolutionMode
- **ui**: Batch quality fixes — XSS, toggle, SSE dedup, error feedback
- Default mcpPort to 3001 so MCP tools server always starts
- Inject MCP tool permissions via --allowedTools, gitignore .claude/
- Skip crypto trading tools when engine is null
- **openbb**: Remove commodity from provider config, fix provider option lists
- Pass ccxt options under `options` key instead of spreading at top level
- **tools**: Set correct providers for equity fundamental and news tools
- **openbb**: Split news providers and handle 204 No Content
- Make MCP Server always-on — Claude Code provider depends on it for tools
- **test**: Update engine.spec.ts to match new VercelAIProvider constructor
- Connectors config auto-init and migration defaults
- Derive validSections from sectionSchemas to prevent config API drift
- **news-collector**: Retry RSS fetch once on failure
- **docs**: Replace Mermaid & syntax for broader renderer compatibility
- SSE stability — auto-reconnect with exponential backoff
- Clarify searchContracts/getContractDetails tool descriptions
- Update stale equitySearch/cryptoSearch references in tool descriptions
- Soften marketSearchForResearch description to avoid mandatory pre-search
- Seed platforms.json + accounts.json to disk on legacy migration
- Sequential loadMarkets with per-type retries for CCXT
- Add init retry with exponential backoff for AlpacaAccount
- Enforce aliceId as required contract identifier for trading tools
- **opentypebb**: Point exports to src/ so tsx resolves without build
- Upgrade opentypebb hono 4.7.4 → 4.12.7 to resolve type mismatch
- Allow 'agent-sdk' in backend switch API validation
- **ui**: Persist streamed tool calls and show thinking dots during text generation
- **ci**: Let pnpm version come from package.json packageManager field
- **streaming**: Push intermediate text events from Claude Code and Agent SDK providers
- **session**: Persist intermediate text blocks during tool loops

### 📚 Documentation

- Sync README with recent features
- Document Web UI dev workflow and dual-port architecture
- Sync README with OpenBB integration and provider default change
- Overhaul README to reflect recent architecture changes
- Delete stale scheduling.md, fix mcp-ask config section
- Add Key Concepts glossary and simplify Quick Start
- Delete stale scheduling_zh.md
- Remove dead live demo link, update header badges
- Add browser tool description prefix clarifying Chrome extension requirement
- Update README for unified trading architecture and AGPL-3.0
- Update README to reflect TypeScript-native OpenBB engine
- Update README for Engine removal, Agent SDK, and ConnectorCenter rename
- Add CI and license badges, remove redundant license section
- Add contributing guide (issues welcome, PRs not accepted)

### 🔧 Refactoring

- Split persona/heartbeat into default + user override
- Move Settings from slide drawer to dedicated page tab
- Unify AI provider default into Zod config system
- **ui**: Replace header tabs with sidebar navigation and widescreen layout
- Split analysis-kit into thinking-kit + analysis-tools
- Split Sandbox into KlineStore + NewsStore
- Merge analysis-kit + analysis-tools into archive-analysis
- Disconnect archive-analysis from runtime
- Remove lookback from indicator formula, use interval-based data window
- Extract unified indicator calculator to extension/analysis-kit
- **openbb**: Per-asset-class default provider instead of single global default
- **ui**: Extract shared form components and deduplicate config pages
- Absorb archive-analysis into news-collector, delete dead module
- Remove trading whitelist, replace with optional symbol-whitelist guard
- Consolidate AI provider config into single file and dedicated page
- Unify connector interface with structured delivery
- Introduce ConnectorCenter to centralize outbound notification logic
- Event-driven interaction tracking in ConnectorCenter
- Simplify heartbeat status to binary HEARTBEAT_OK / CHAT_YES
- Rename wallet* to trading*, make commit/push/sync source optional
- Provider tool injection + slim AccountCapabilities
- Remove adjustLeverage and leverage from OrderRequest
- IBKR-aligned OrderRequest + modifyOrder + dead code cleanup
- Split resolveContract into searchContracts + getContractDetails
- Unify equitySearch + cryptoSearch + currencySearch into marketSearchForResearch
- Merge platform into account flow in TradingPage
- Replace slide panel with centered modal dialogs
- Split CcxtAccount into smaller modules
- Split AlpacaAccount into smaller modules
- **ai-provider**: Align VercelAIProvider with ClaudeCodeProvider interface
- **ui**: Redesign DataSourcesPage with two distinct conceptual zones
- AgentCenter becomes orchestration center, providers slim down, Engine deleted
- **persistence**: Unify session persistence in AgentCenter

### 🚀 Features

- Add MCP Ask connector for external agent conversation
- Add evolution mode — two-tier permission system
- Auto-seed config files on first startup, untrack from git
- **ui**: Add responsive sidebar — collapse to hamburger menu on narrow screens
- **ui**: Add section descriptions to Settings and fix nav highlight
- **ui**: Beautify chat — ChatGPT/Claude-style layout, code copy, animations
- **ui**: Polish layout — SVG sidebar icons, Alice avatar, message grouping, safe area
- Add OpenBB equity data layer (src/openbb/equity)
- Equity symbol search with local regex index
- Equity indicator calculator with OpenBB data
- Make interval a required parameter in indicator formula syntax
- Add OpenBB crypto data layer (types + client)
- Add OpenBB commodity data layer (types + client)
- Add EIA petroleum status and energy outlook endpoints to commodity client
- Add OpenBB currency data layer (types + client)
- Add crypto search tool (adapter layer)
- Add currency search tool (adapter layer)
- Register crypto search, currency search, and analysis-kit tools
- Add Data Sources page with connection test and provider key management
- **web**: Render tool calls as collapsible groups in chat history
- Add multi-provider model support with hot-reload
- **openbb**: Inject provider credentials via HTTP header and add economy client
- **ui**: Expand provider keys to 8 providers with descriptions
- **ui**: Add per-provider Test button for API key validation
- **ccxt**: Add ticker, funding rate queries and fix realizedPnL
- **ccxt**: Expose order book depth query for liquidity evaluation
- **alpaca**: Add real-time quote and native closePosition
- **crypto**: Add extensible guard pipeline for trading operations
- **ui**: Add Crypto Trading config page with exchange and guard management
- **ui**: Replace manual save buttons with auto-save and debounce
- **securities**: Add extensible guard pipeline for trading operations
- **ui**: Add Securities Trading config page with broker and guard management
- **openbb**: Add News client and complete Commodity client coverage
- **tools**: Expose equity fundamentals and news tools to AI loop
- **ui**: Add Portfolio Dashboard + split routes and API into domain modules
- **ui**: Add card-based SDK selector and enable/disable toggles to trading pages
- **ui**: Add sidebar nested navigation for trading config pages
- Consolidate connector configs into connectors.json with enable/disable toggles
- **ui**: Multi-select card grid for connectors enable/disable
- **news-collector**: Add persistent news collection with RSS and OpenBB piggyback
- Hot-reload connector enable/disable without restart
- **ui**: Add News Collector section to DataSourcesPage with enable/disable cards
- Add Custom provider option for relay/proxy endpoints
- Add /dev debug page + rename deliver() to send() with kind
- Persist push messages to session for history survival
- Persistent media store with 3-word content-addressable names
- Image ContentBlock + date-based media storage
- Add paginated event log with full disk history
- Add dedicated Heartbeat page with config, prompt editor, and recent events
- Add Tool Panel for granular tool enable/disable with hot-reload
- Add unified trading types — Contract, ITradingAccount, AccountManager, TradingGit
- Add unified guard pipeline — merge crypto + securities guards
- Unified trading architecture — provider adapters, tool factory, main.ts rewrite
- Add test coverage, fix CCXT bug, merge frontend trading UI
- Unified multi-account tool routing with source parameter
- Aggregate getQuote across all accounts
- Add read-only mode to CcxtAccount for keyless market data access
- Introduce Platform layer for multi-account trading
- Trading config CRUD API + table/panel UI redesign
- Alpaca realized PnL via FILL activities + Portfolio page redesign
- Add React Router for URL-based navigation
- Replace Python OpenBB sidecar with in-process OpenTypeBB SDK
- **openbb**: Add backend selector and embedded API server support
- **opentypebb**: Add ~40 economy/commodity routes with FRED, OECD, BLS, EIA providers
- **web**: Add sub-channel support with per-channel AI config
- **ui**: Redesign channel UI with popover + config modal
- Per-channel Vercel AI SDK model override (provider/model/baseUrl/apiKey)
- Add Agent SDK as third AI provider backend
- **ui**: Add Agent SDK to frontend provider UI
- Add streaming event layer to AI providers
- **ui**: Consume SSE streaming events for real-time AI response progress

### 🧪 Testing

- Add 48 unit tests for equity indicator calculator
- Add unit tests for trading dispatchers and wallet state machines
- Add message pipeline integration tests (42 tests)
- Add core module unit tests (134 tests)

