| 2026-03-07 |
feat(mesh): robust node connectivity and sync reliability fixes
...
- Fixed Node Registry persistence by adding missing db.commit() for online/offline status updates.
- Resolved 'Seed from Local' sync failures by correctly tracking mesh memberships in the TaskAssistant service.
- Enhanced frontend safety: disabled offline node selection and filtered source node candidates.
- Added 'Receiver Only' toggle for more granular control over multi-node synchronization.
- Corrected false-positive 'Source Node Disconnected' alert by verifying global connection status.
- Improved logging in Hub and Agent Nodes for better debugging of file transfer events.
Antigravity AI
committed
8 days ago
|
| 2026-03-05 |
feat(terminal): overhaul with xterm.js, raw TTY streaming, and dynamic resizing
...
- Replaced simulated terminal with xterm.js for native emulation
- Implemented raw TTY byte streaming over WebSockets
- Added support for persistent shell sessions and window resizing (ioctl TIOCSWINSZ)
- Improved SkillManager with a transparent TTY bypass to prevent thread pool saturation
- Added periodic heartbeat-based latency monitoring (RTT)
- Fixed skill_config parsing crash in AI Hub registry
- Enabled auto-scrolling and terminal-to-PTY grid synchronization
Antigravity AI
committed
9 days ago
|
| 2026-03-04 |

feat(M3+M4): persistent sessions with node attachment + invite token auth
...
M3 — Persistent Session Model:
DB:
- Session model: +sync_workspace_id, +attached_node_ids (JSON), +node_sync_status (JSON)
- Migration: auto-adds 3 new columns to existing sessions table
API (sessions router):
- POST /sessions/ now auto-attaches user's default_node_ids from preferences
on creation, generates sync_workspace_id, seeds 'pending' sync status
- POST /sessions/{id}/nodes attach nodes to an existing session
- DELETE /sessions/{id}/nodes/{node_id} detach a node
- GET /sessions/{id}/nodes live sync status (merges DB + live registry)
Schemas: NodeAttachRequest, NodeSyncStatusEntry, SessionNodeStatusResponse
M4 — Invite Token Validation:
API (nodes router):
- GET /nodes/admin/{id}/config.yaml generate ready-to-deploy agent_config.yaml
(contains node_id, hub_url, grpc_endpoint, invite_token, skill toggles)
- POST /nodes/validate-token internal endpoint called by gRPC server;
validates token against DB, returns skill_config for SandboxPolicy
gRPC (grpc_server.py):
- SyncConfiguration now calls POST /nodes/validate-token before registering node
- HUB_API_URL env var controls this; empty = dev mode (skip validation)
- Shell skill disabled by admin → empty allowed_commands in SandboxPolicy
- Gracefully degrades if Hub is unreachable (logs warning, proceeds in dev)
Antigravity AI
committed
10 days ago
|

feat(M1+M2): Agent Node API — admin-owned nodes, group access, DB persistence
...
DB Models:
- AgentNode: admin-owned, display_name, skill_config toggles (shell/browser/sync),
invite_token, is_active, last_status/last_seen_at persisted on every connect
- NodeGroupAccess: admin grants groups access with access_level (view/use/admin)
- Migration updated for all new columns + node_group_access table
NodeRegistryService (M2 persistence):
- register() → upserts AgentNode in DB (status=online)
- deregister() → marks AgentNode offline in DB, keeps record for UI
- update_stats() → bumps last_seen_at on every heartbeat
- EventBus with 20 event types: per-node + per-user WS fan-out
- Uses get_db_session() context manager (no extra deps)
API (13 routes):
Admin:
POST /nodes/admin — Create node + generate invite_token
GET /nodes/admin — List all nodes (full detail)
GET /nodes/admin/{id} — Node detail incl. invite_token
PATCH /nodes/admin/{id} — Update skill_config toggles, description
POST /nodes/admin/{id}/access — Grant group access
DELETE /nodes/admin/{id}/access/{group_id} — Revoke group access
User:
GET /nodes/ — List user-accessible nodes (group-filtered)
GET /nodes/{id}/status — Quick probe
POST /nodes/{id}/dispatch — Dispatch task
PATCH /nodes/preferences — Set default_node_ids + data_source config
GET /nodes/preferences — Read node preferences
WebSocket:
WS /nodes/{id}/stream — Single node live execution stream
WS /nodes/stream/all — Multi-node global bus (split-pane UI)
Antigravity AI
committed
10 days ago
|
feat(M1): add Agent Node REST + WebSocket API to AI Hub
...
- NodeRegistryService: in-memory live node registry with rich EventBus
- emit() delivers all execution events to per-node and per-user subscribers
- EVENT_TYPES: 20 structured event types (task_start, sync_drift, retry, etc.)
- AgentNode DB model: persists node registrations + invite_token + last_status
- DB migration: auto-creates agent_nodes table + adds new columns
- REST API (/nodes):
GET /nodes - list all user's nodes (live+DB merged)
GET /nodes/{node_id} - full live status
GET /nodes/{node_id}/status - quick online/offline probe
POST /nodes/{node_id}/dispatch - dispatch shell/browser task to a node
- WebSocket API:
WS /nodes/{node_id}/stream - single-node live execution stream
WS /nodes/stream/all - multi-node global bus (split-pane UI ready)
Antigravity AI
committed
10 days ago
|
| 2026-03-01 |
feat: track STT/TTS models in session; fix audio progress bar; add token usage bar
Antigravity AI
committed
13 days ago
|
chore: cleanup test scripts, secure deployment script, and implement Voice/TTS frontend refinements
...
- Removed all temporary root Python test scripts
- Secured remote_deploy.sh credentials using environment variables
- Added data/audio payloads directory to .gitignore
- Added automatic DB migration script (migrate.py) via uvicorn lifespan
- Applied major refactors to UI Voice Chat, Session handling, and unified React API configs
- Updated models and dependencies natively syncing with Nginx proxy features
Antigravity AI
committed
13 days ago
|