Changelog
v0.14.0
Security
- Path traversal fix: agent supervisor validates all relative paths with
Path.resolve()+ workspace bounds check, blocking../escapes. - Global state mutation fix: removed
os.chdir()from supervisor — was mutating process-wide working directory, breaking concurrent agents.
Bug Fixes
- Engine race condition: fixed check-then-act race on
generation_lockduring model switching. Atomic acquire with proper release. - React refs-during-render: moved callback ref updates in
MessageFeed.tsxintouseEffecthooks. - RAG error masking:
get_collections()now distinguishesFileNotFoundError/JSONDecodeError/OSError.
Improvements
- Model cache type safety:
_CachedModelNamedTuple replaces raw tuple — eviction uses.last_usedinstead of magic index. - Edit history bounded:
deque(maxlen=200)prevents memory leaks in long sessions. - ESLint zero errors: resolved all 86 ESLint errors across 25+ files — replaced
anytypes with proper interfaces. - E2E tests fixed: aligned all 87 Playwright tests with current UI. First green CI in project history.
- CI badge added to README.
Tests
- 314 backend tests passing.
- 87 Playwright E2E tests passing.
- 0 ESLint errors, 0 TypeScript errors.
v0.13.0
Component Modularization
- Split
EngineInterface.tsx(695 lines) intoengine/LoraTabandengine/DpoTab. - Split
ModelsInterface.tsx(901 lines) intomodels/MyModelsTab,models/DiscoverTab,models/AddModelModal, andmodels/ModelsUtils. - Split
Settings.tsx(1066 lines) intosettings/WebIndexerSection,settings/CodebaseIndexSection,settings/LogViewerSection, andsettings/SettingsUtils. - Split
RagKnowledge.tsx(621 lines) intorag/CollectionsTab,rag/IngestTab, andrag/AnalyticsTab.
Security Hardening
- Preview command injection:
shell=Truereplaced withshlex.split()+shell=False. - Model cache thread safety:
_cache_lockaround all_model_cachemutations. - RAG concurrency:
threading.Lockon create/delete/ingest to prevent data corruption. - Air-gap bypass fix: AST-based import detection replaces string matching; blocks
__import__(). - Path validation: Pydantic
field_validatoronworkspace_dirin terminal/plan requests. - OOM recovery: cache cleared before retry, protected by lock.
Fixes
pre_flight_check.pyreads version frompackage.jsoninstead of hardcoded string.- Resolved
tarsymlink traversal vulnerability in npm dependencies.
v0.12.0
Inference Engine Improvements
- Smart GC:
gc.collect()+mx.metal.clear_cache()now triggers conditionally (memory > 80%, 10+ generations, or 5+ minutes) instead of after every generation. - Disk KV cache: Cross-session cache for KV prompt state in
~/.silicon-studio/cache/kv/with 2 GB LRU eviction. - Speculative decoding: Optional draft model for faster generation. Memory-aware, falls back silently if the draft model cannot fit.
- New API:
POST/GET /api/engine/draft-model,GET/DELETE /api/engine/kv-cache.
Model Routing
- Role-based model selection (planner, coder, reviewer, inspector) via
~/.silicon-studio/routing.json. - Multi-model LRU cache (up to 2 models) for near-instant role switching.
- Prelayer suggests model role based on intent and complexity.
- Supervisor, Swarm, and Inspector all route through the resolver. Falls back to single model when disabled.
- New API:
GET/PUT /api/engine/routing.
Subagent System
SubagentWorker: focused single-task workers with independent context. Roles:code_reviewer(read-only),test_writer,docs_generator,bug_fixer.SubagentOrchestrator: parallel (asyncio.gather) and pipeline (sequential chain) execution.- The LLM can invoke
spawn_workeras a tool. Results injected back as tool output. - SSE events:
worker_start,worker_done.
Live Preview
- Auto-detects Vite, Next.js, CRA, Nuxt, Svelte, Astro, Flask, FastAPI, and static HTML projects. Detects package manager (npm/pnpm/yarn/bun).
- Starts dev server on a free port (3100-3199), renders in an iframe below the editor with resize handle.
- New API:
POST /api/preview/start|stop,GET /api/preview/status|detect|logs.
DPO Preference Training
- Every diff approve/reject is captured as a DPO training pair via
DatasetEngine.log_dpo_pair(). - Dedicated "Preference Training" tab in the fine-tuning UI with pair counter and training button.
- Inspector scoring adds a numeric quality signal to each agent response.
Tests
- 314 backend tests passing (65 new across 5 test files).
v0.11.1
Fixes
- TypeScript build errors from hook extraction refactor.
- UX, code quality, and maintainability improvements.
- Security hardening: auth middleware edge cases, error handling.
v0.11.0
Features
- NanoCoder model integration (4 variants in models.json).
- App hotkey fixes for non-US keyboard layouts.
v0.10.5
Fixes
- Proposed change overlay moved to bottom-right to avoid obscuring code.
v0.10.4
Fixes
- Fix broken "Start Server" due to missing python executable path.
- Fix avatar paths and code block overflow.
v0.10.3
Features
- Codebase API documentation with hybrid search.
Fixes
- Avatar paths and code block overflow styling.
v0.10.2
Evaluations
- Expanded each benchmark from 3 hardcoded questions to a pool of 30
- Sample count configurable (10 / 20 / 30) per run; questions are sampled randomly from the pool
- History table now shows question count alongside score
DatasetEngine
- New API endpoints:
GET /api/terminal/dataset/status,POST /api/terminal/dataset/export,POST /api/terminal/dataset/prepare - Fine-tuning tab shows a "Use N captured samples" button when NanoCore interactions have been logged
Engine
- Validation loss (
val_loss) now stored in job status during fine-tuning - Predictive pre-loader now calls
load_active_modelviaasyncio.run_coroutine_threadsafewhen the event loop is available
Sandbox / Debugger
- Registered three missing routes:
POST /debug/start,POST /debug/{id}/command,GET /debug/{id}/events
Bug Fixes
CommandPaletteactions now navigate to real tabs and callunloadModel(previously all stubs)useAgentSessionSSE fetch now sendsAuthorizationheader- Dead
backend/app/api/training.pyandbackend/app/engine/training.pymodules removed - Deployment
/statusdocs corrected: returnsrunning,pid,uptime_seconds(not model_path/host/port)
v0.10.1
Engine
- Prompt cache uses
mlx_lm.models.cache.make_prompt_cacheandtrim_prompt_cache(mlx-lm 0.30.7 API) - Generation uses
stream_generatewithprompt_cache=kwarg; KV quantization passed askv_bits=(4 or 8) kv_quantizationfield on load-model request accepts 4 or 8 (optional; omit for no KV quantization)
Auth
SILICON_AUTH_TOKENenv var: Bearer token required on all non-public API endpoints when set- SSE endpoints that cannot send headers (e.g.
EventSource) pass the token as?token=query parameter - Public paths exempt from auth:
/health,/docs,/openapi.json
API Routers
- Added
/api/indexer,/api/codebase,/api/workspace,/api/memory,/api/trainingto backend - Architecture doc updated to reflect all registered routers
Bug Fixes
q_bitson export validated against{0, 2, 3, 4, 6, 8}(doc previously stated range 0–16)
v0.10.0
Knowledge Graph
- SQLite-backed graph storing nodes (facts, decisions, files) and edges (relationships) extracted from conversations
KnowledgeExtractorprocesses conversation turns and writes to graph via LLM-based fact extraction- Knowledge Map panel (
Alt+Shift+K) with force-directed graph visualization usingreact-force-graph-2d - API endpoints:
/api/memory/nodes,/api/memory/edges
Scout Agent
- Background worker monitors Knowledge Graph for high-activity files (>5 cross-conversation mentions)
- Flags refactoring candidates as
recommendationnodes in the graph - Non-blocking
start()viaasyncio.create_task, asyncstop()with task cancellation - Integrated into terminal SSE stream via event callback
Training Orchestrator
- Triggers local fine-tuning via
mlx-lmsubprocess - Configurable: base model, dataset path, output adapter directory, epochs, batch size, learning rate
- API endpoints:
/api/training/start,/api/training/status
Command Palette
- Keyboard-driven action launcher (
Alt+Shift+P) - Tab navigation, Knowledge Map toggle, training trigger
TopBar
- GPU utilization and VRAM usage display (Apple Silicon)
- Scout Agent risk count indicator
Bug Fixes
SupervisorAgent.__init__: addedengine_serviceparameter (wasAttributeErroron test)ScoutAgent.start(): changed from blocking loop to background taskScoutAgent.stop(): made async to matchawaitin terminal cleanupuseRefinitializers added for strict TypeScript build (KnowledgeMap,useTokenEstimate)- Removed unused
BookOpenimport (ChatInterface) andanchorRefparameter (InputOverlay)
Testing
- 242 backend tests passing (0 failures)
- Production build verified (DMG + ZIP)
v0.9.4
Coder Agent
- Time Machine checkpoint system — every AI edit creates a checkpoint, rollback to any point via TimelineRail sidebar
- Undo fixed — sessions preserved after SSE stream ends (10min TTL)
/planrouting through PlannerEditor with PlanCard approval UI- Parser unescape for literal
\n,\tfrom small models in tool args
UI Polish
- Coder sidebar header redesigned: dynamic info ticker, inline role icons
- Input bar: fixed two-line wrapping, aligned prompt
- Tool labels cleaned up (underscores removed, smaller text)
- Diff header spacing fixed
- Error messages use consistent mono font
- Context Discovery simplified (icon + snippet count)
- React key warning in RagKnowledge fixed
Testing
- New e2e integration test for coder flow (3 models: Qwen3-0.6B, 1.7B, 4B)
- All 89 Playwright E2E tests updated and passing
- All 214 backend unit tests passing
v0.9.3
Adaptive RAG Search
- Multi-method retrieval: BM25, keyword, vector, and hybrid fusion
- Per-query method selection based on query type
- RAG collection analytics and usage tracking
UI Overhaul
- Redesigned Models page with architecture-based color coding
- Split-view model details with README rendering
- Recommended models section for new users
v0.9.2
UI Polish
- Sidebar diff auto-collapses when inline Accept/Reject is used
- "LOCAL EXECUTION ONLY" badge reduced to compact shield icon with tooltip
- Context menu: removed redundant "NanoCore:" prefix, added brain icon per action
- Fixed crash when clicking files in Code panel (
useHolographicDiffnull editor guard)
Bug Fixes
- Fixed Python 3.14 conditional import shadowing across backend (
mx,re,tempfile,os,sys) - Fixed missing model directory error with clear message instead of cryptic HF repo ID error
- Fixed npm audit vulnerabilities (tar, minimatch)
v0.9.1
Swarm Progress Events
- Real-time SSE events for MoA swarm map/reduce phases
- Frontend shows pulsing status for each expert during swarm execution
Enriched Session Summary
- Agent
doneevent now includes iteration count and edits count
Security
- Air-gapped web search blocking verification
- npm dependency audit fixes
v0.9.0
Phase 8 — UX
- Context health bar (token usage indicator)
- Energy manager (low-power mode)
- Pinned context items
- Scout issues panel
Phase 9 — Architecture
- Agent mode toggle (edit/review)
- Undo support for agent edits
- Emergency stop shortcut (Cmd+Esc)
- Agency HUD (Architetto/Operaio/Ispettore roles)
Phase 10 — MoA Swarm
- Map-Reduce Mixture of Agents orchestrator
- Security, Performance, and Syntax expert personas
- Lead Developer Synthesizer reducer
Phase 11 — Agent Capabilities
- Codebase indexing and search tools
- Escalation flow with user-in-the-loop
- Auto-retry with self-healing on tool failures
v0.7.4
PII Redaction Settings
- PII redaction toggle added to main Settings page (Privacy section)
- Redacts emails, phone numbers, IPs, credit cards, SSNs, and API keys from chat messages
- Disabled by default, configurable from both Settings and Chat drawer
Version Alignment
- Synchronized version across package.json, pyproject.toml, main.py, README badge, docs config, and pre-flight check
Docs Site
- Reordered features sidebar to match app menu (Local Server / Advanced Tools / App)
- Added Code Workspace documentation page
v0.7.3
NanoCore Agent Improvements
- Workspace directory passed from frontend to agent — tools run in the correct working directory
- Active file path injected into agent system prompt — agent knows which file is open in the editor
- Fixed think block boundary bug — text after
</think>in the same token was silently lost - Diagnostic logging for raw model output (debug level)
In-App Documentation
- Built-in documentation viewer accessible from sidebar
- Renders all feature docs as styled markdown cards
- Sections match sidebar menu order
Error Reporting
- User-facing error reporting dialog with optional description
- Copies error details to clipboard for bug reports
Log Viewer
- Electron main process log viewer in Settings
- Shows last 200 lines with auto-refresh and copy-to-clipboard
v0.7.2
Bug Fixes
- Fixed sandbox process leak causing 100% CPU — orphaned
silicon-sandboxprocesses are now cleaned up - Hidden oversized models (>available RAM) from Discover page to prevent failed loads
- Fixed active model state sync between frontend TopBar and backend polling
v0.7.1
Security Hardening
- Input validation on all API endpoints (Pydantic field constraints)
- Path traversal protection on file read/write operations
- Sandboxed command execution blocklist expanded
Stability Fixes
- Fixed stale closures in React components (useRef pattern for callbacks)
- Typed IPC channels between Electron main and renderer
- Stabilized E2E test suite (reduced flakiness)
v0.7.0
Security Fixes
- Added command blocklist for dangerous shell operations
- Protected paths prevent writes outside workspace
- Sandboxed code execution with timeout enforcement
E2E Test Suite
- Comprehensive Playwright test coverage across all pages
- Mock API routes for deterministic testing
- Console error monitoring during navigation
Type Safety
- TypeScript strict mode enabled for renderer
- Typed API client with proper error handling
Honest Evaluations
- Eval benchmarks report real scores (no inflated metrics)
- Score history tracking with timestamps
v0.6.2
AI-Assisted Code Workspace
- NanoCore agent integrated into the Code page — autonomous reasoning, tool execution, and diff proposals directly alongside the editor
- Three-column layout: file tree | Monaco editor | agent panel (collapsible)
- Inline Monaco DiffEditor for reviewing proposed changes with Apply/Reject actions
- Agent panel with streaming message feed, telemetry sidebar, and dedicated input bar
- Diff proposals auto-open the target file in the editor
Terminal Simplified
- Terminal page is now bash-only — cleaner and faster for shell commands
- Agent mode removed from Terminal (moved to Code workspace where it belongs)
- Removed mode toggle, telemetry sidebar, and model dependency from Terminal
v0.6.1
Code Workspace Enhancements
- New File creation: FilePlus button in file tree header, inline filename input, auto-creates parent dirs
- File context menu: right-click or
...button on any file/folder for Rename, Delete, Copy Path - Inline rename with auto-selection of name without extension
- Delete with confirmation dialog, auto-closes open tabs
- Workspace dir now saved independently from codebase indexer — Code tab works even if no source files are found for semantic search
Monaco Editor Fix
- Fixed
Cannot read properties of null (reading 'useState')crash when opening files - Root cause: dual React instances —
@monaco-editor/reactwas in root package.json but renderer has its own React - Moved Monaco to renderer dependencies + Vite resolve alias to guarantee single React instance
DMG Build Fix
- Added
"size": "2g"to DMG config for larger app bundles (~950MB with mlx-vlm) - Fixed "No space left on device" error during DMG creation
Settings Fix
- "Select Directory" button now correctly opens Finder dialog (was calling wrong IPC method)
- Improved error message when codebase indexer finds no source files
v0.6.0
Vision Model Support
- VLM (Vision-Language Model) chat with image attachments
- Image paste/upload in Chat with drag-and-drop support
- Automatic VLM detection and model path routing (mlx-vlm)
- Qwen3.5-recommended sampling parameters for VL tasks
- Thinking mode disabled for VLM (direct response, no garbled output)
- Repetition detection safety net for small VLM models
VLM Generation Fixes
- Fixed temperature parameter being silently ignored (wrong kwarg name)
- Fixed missing repetition_penalty and top_p in VLM generation path
- Added
</think>tag closure when model finishes without closing thinking - Content-level repetition loop detection (breaks on 100-char repeated blocks)
Frontend Thinking Block Rendering
- Strict regex for
<think>blocks — only matches when</think>is present - During streaming, thinking content shown without eating visible content
- Prevents empty message body when model generates thinking but no response
E2E Test Suite
- Expanded Playwright test suite from ~40 visibility checks to 74 interaction tests
- Full coverage across all 13 app pages (Terminal, Code, Settings, Model Export, etc.)
- Input interaction tests: typing, form submission, toggle clicks, dropdown changes
- Console error monitoring during navigation
- Mock routes for all backend API endpoints
v0.5.8
Vector Codebase Indexer
- AST-aware Python chunking (classes, methods, functions as individual chunks)
- Sliding-window chunking for JS/TS/Go/Rust and 30+ other languages
- Hybrid search: BM25 keyword + vector cosine + Reciprocal Rank Fusion
- NanoCore
search_codebasetool for semantic code queries - Index/re-index/delete from Settings UI
- Stored at
~/.silicon-studio/codebase_index/
Live Workspace Editor
- New "Code" tab with file tree sidebar + Monaco editor
- Read/write files through the backend API
- Syntax highlighting for 40+ languages
- Cmd+S to save, dirty-file indicators, tabbed interface
diff_proposalevents from NanoCore auto-open the target file- Cmd+E shortcut to jump to Code tab
v0.5.6
Self-Healing Loop
- NanoCore detects non-zero exit codes from
run_command - Automatically retries with a fix (up to 2 attempts)
- SSE events:
self_heal_start,self_heal_attempt,self_heal_success,self_heal_fail - Telemetry sidebar shows heal status in real-time
v0.5.4
Build & Release Fixes
- Pre-flight check script for release builds
- Backend crash handling improvements in Settings
- Version alignment across package.json, pyproject.toml, main.py
v0.4.2
Port Auto-Detection
- Backend scans 8000-8099 for a free port instead of crashing if 8000 is busy
- Electron reads the chosen port from backend stdout via IPC
- Frontend
API_BASEis resolved dynamically at startup
JSON Data Migration
- Added
_schema_versionfield to conversations and notes - Lazy migration on read: old files get missing fields (
pinned, timestamps, etc.) auto-filled and re-saved - Future schema changes just add a new
if version < Nblock
Auto-Updater
- Wired
electron-updaterto check GitHub Releases on launch (packaged builds only) - Update banner appears below the top bar when a new version is downloaded
- One-click "Restart & Update" button
Electron File Logging
- Replaced
console.logwithelectron-login the main process - Logs written to
~/Library/Logs/SiliconDev/main.log(5 MB rotating) - Log file path shown in Settings for bug reports
OpenAPI Type Codegen
- Added
openapi-typescripttoolchain (npm run generate:typesin renderer) - Types can be gradually adopted from the generated file
Error Boundary
- React
ErrorBoundarywrapping the entire app (inline styles, immune to CSS crashes) - Shows error message + "Reload Application" button instead of white screen
v0.4.0
Backend Hardening
- Thread-safe
active_jobsandmodels_configin engine service viathreading.Lock - Thread-safe
server_processin deployment service viathreading.Lock - Async-safe
_active_sessionsin terminal API viaasyncio.Lock - Atomic JSON writes (tempfile +
os.replace) in conversations, notes, and models config — prevents data corruption on crash get_job_statusreturns a copy to prevent external mutation
Terminal UX
- Input bar retains focus after submitting a command (no need to re-click)
Docs
- Added Agent Terminal feature page and API reference
- Updated changelog and version references
v0.3.0
UI/UX Consistency Audit
- Global iOS-style
:activescale-down on all buttons and switches - Upgraded
focus-visibleto 2px solid blue with 2px offset - Apple-style tight letter-spacing on headings (
-0.02em) - Fixed placeholder contrast from gray-600 to gray-500 (WCAG 3:1)
- ToggleSwitch keyboard support (spacebar and Enter)
- AI text width capped at
max-w-prosefor readability - Slim 6px scrollbars with Firefox fallback
Terminal Improvements
- Full-bleed terminal layout (no padding, fills viewport)
- Removed 240px output truncation — output streams naturally
- Auto-scroll follows bottom unless user scrolls up manually
- Dark-themed code blocks in streaming markdown
- AbortController on SSE streams for proper stop/cancel
- Stop button works in both Terminal and Agent modes
v0.2.0
NanoCore Agent Terminal
- Dual-mode terminal: direct bash (PTY) and NanoCore agent
- Streaming SSE output for both modes
- XML-based tool call parsing with safety checks
- Diff proposals with human approval before writing files
- Telemetry sidebar (agent state, tokens, elapsed time)
- Sandboxed command execution with blocked patterns and protected paths
VitePress Documentation Site
- Custom Apple-inspired theme
- Full feature documentation and API reference
- Guide, architecture, and configuration pages
v0.1.0
Initial release. Based on Silicon-Studio by Riley Cleavenger with significant additions.
Core
- Electron + React + TypeScript frontend with TailwindCSS dark theme
- FastAPI + MLX backend for Apple Silicon
- All data stored locally in
~/.silicon-studio/
Models
- Browse and download models from Hugging Face
- Auto-discover models from LM Studio, Ollama, HuggingFace cache
- Register custom models by local path
- Load/unload from top bar dropdown
- Delete downloaded models
Chat
- Streaming inference with SSE
- Conversation persistence with CRUD
- Conversation branching (fork at any message)
- Conversation search (sidebar)
- In-chat text search with match navigation (Ctrl+F)
- Collapsible parameters sidebar (collapsed by default)
- Quick actions: rewrite, translate, perspectives, self-critique, ethical assessment
- Code syntax checking and sandbox execution
- PII redaction via Presidio
- Memory map (auto-summarize context)
- RAG knowledge injection
- Web search injection (DuckDuckGo)
- Reasoning mode control (off, auto, low, high)
Fine-Tuning
- LoRA and QLoRA via MLX
- Preset configurations (draft, balanced, deep)
- Configurable hyperparameters and LoRA settings
- Real-time loss curves and job monitoring
Data Preparation
- CSV preview and JSONL conversion
- Column mapping for instruction/input/output
- MCP-based synthetic dataset generation
RAG Knowledge
- Collection CRUD
- File ingestion with chunking
- Keyword-overlap querying (no vector embeddings yet)
- Chat integration toggle
MCP Integration
- Server management (add, remove, test)
- Tool discovery via MCP protocol
- Tool execution
- Dataset generation from tool schemas
Pipelines & Jobs
- Pipeline CRUD with sequential steps
- Step types: LLM inference, shell command, keyword filter
- Execution is mocked (placeholder results)
Notes
- Markdown editor with auto-save
- Pin, rename, delete
- Import from .md and .txt files
- Export as .md, .txt, or PDF
- Legacy note auto-migration
- AI Commands sidebar (Continue Writing, Summarize, Draft Introduction)
- AI Transforms (To Table, Key Points, Expand, Outline)
- Send to chat
Model Export
- Export fine-tuned adapters with quantization
- 4-bit, 8-bit, or full precision
- Uses mlx_lm.fuse()
Deployment
- Deploy model as OpenAI-compatible HTTP server
- Start/stop with real-time logs
Evaluations
- Benchmark runner (MMLU, HellaSwag, HumanEval, TruthfulQA)
- Score tracking and history
Settings
- Centralized settings page
- Chat defaults, RAG defaults, MCP server management
- Reset all settings
UI
- Dark theme throughout
- Collapsible left sidebar with conversation/note panels
- Collapsible right sidebar (parameters)
- Top bar with model switcher and system stats
- Search within conversations