Commit Graph

39 Commits

Author SHA1 Message Date
William Valentin b39010d602 fix(tests): resolve 4 post-phase test failures
- platformClients.integration: iOS/Android push tests lacked
  setStatus() call before listNodes(), so platform filter excluded
  nodes. Added publishHeartbeat() to set platform on connection state.
- server.test: agent.send now emits run_state events before done (Phase
  1). Added sendAndWaitForDone() helper and updated test to find done
  event rather than assuming index 0.
- handlers.test: updated agent.send/cancel assertions to use find()
  and pass send arg to agent.cancel, consistent with run_state events.
- httpBody: req.destroy() closed socket before 413 response could be
  sent. Removed socket destruction from body reader; 413 responses now
  send Connection: close so Node closes the connection cleanly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 11:55:14 -08:00
William Valentin 092a9baeae fix(router): align fallback semantics and oauth provider behavior 2026-02-23 17:11:15 -08:00
William Valentin ca463d5ca2 feat(gateway): add observability sources, series, and service log RPCs 2026-02-22 20:54:37 -08:00
William Valentin abaa9be3f1 Add whisper docker dependency controls to dashboard 2026-02-22 19:48:27 -08:00
William Valentin 8fcbb5f521 Add whisper docker dependency status to gateway dashboard 2026-02-22 19:20:09 -08:00
William Valentin c79e082905 gateway: add local backend update action 2026-02-22 16:57:57 -08:00
William Valentin 6f2925ed10 gateway: add local backend daemon controls to dashboard 2026-02-22 16:36:31 -08:00
William Valentin 7c121b82c6 feat(councils-ui): add on-demand council conversations panel and model config controls 2026-02-21 11:26:04 -08:00
William Valentin 7a2176c15c feat(dashboard): configure services from clickable service cards 2026-02-19 10:50:16 -08:00
William Valentin 708683297a feat(gateway): global tier provider/model defaults with catalog-backed options 2026-02-19 10:17:16 -08:00
William Valentin 182827d612 feat(config): support assistant briefing runtime edits and setup defaults 2026-02-18 12:15:37 -08:00
William Valentin 43b9324c14 feat(webchat): add personal assistant mode controls in settings 2026-02-18 12:04:37 -08:00
William Valentin 9c9ab92e9d feat(gateway): expand sessions surface with operator metadata and paging hardening 2026-02-17 16:14:06 -08:00
William Valentin fee8be1de0 feat(gateway): expose context usage and warning events 2026-02-16 15:44:09 -08:00
William Valentin 93621bbe6e feat(analytics): add top tools and topics to session analytics 2026-02-16 14:45:45 -08:00
William Valentin 3d7144b2c5 feat(gateway): add system.sessionAnalytics usage snapshot RPC 2026-02-16 14:45:45 -08:00
William Valentin 58c4b0b9bb Add iOS node push-token registration foundation 2026-02-16 12:47:34 -08:00
William Valentin bea4c54f3b Add macOS companion node status and system.nodes APIs 2026-02-16 12:41:58 -08:00
William Valentin 8a0b4f3dbb Add canvas artifact RPC foundation for A2UI 2026-02-16 12:36:02 -08:00
William Valentin fe8674e108 Add node location access RPCs and operator visibility 2026-02-16 12:30:55 -08:00
William Valentin de0c1f41b3 feat(channels): add mattermost adapter and wiring 2026-02-16 12:09:44 -08:00
William Valentin 813a0dc5c5 feat(gateway): complete openclaw phase1 queue parity v2 2026-02-16 12:04:33 -08:00
William Valentin 1a075e62b0 audit follow-up: burn down lint hotspots and dedupe channel gating flows 2026-02-15 22:44:04 -08:00
William Valentin 0220ec10dd feat(config): persist config.patch updates atomically 2026-02-15 22:03:21 -08:00
William Valentin c6e3d09ecc feat(gateway): add sender presence tracking 2026-02-15 19:28:16 -08:00
William Valentin e0cb3b96cc feat(gateway): report Matrix service and redact access token 2026-02-15 18:02:14 -08:00
William Valentin 0493660e7d feat(gateway): add system.services and dashboard services grid 2026-02-14 00:42:41 -08:00
William Valentin cc54b3a10c feat(webchat): support image attachments 2026-02-13 15:03:48 -08:00
William Valentin 46099664f0 feat(gateway): wire safe-point runtime cancellation for agent.cancel 2026-02-13 08:51:14 -08:00
William Valentin 9f81c01603 feat(session): persist model tier overrides per session
Store per-session config in SQLite and route /model and /reset through command fast-paths so channel sessions keep independent model selection across reconnects and restarts.
2026-02-13 01:04:26 -08:00
William Valentin eea7ca62a8 chore: increase GmailWatcher default poll interval from 60s to 300s 2026-02-11 08:43:48 -08:00
William Valentin 1e29da4da2 feat: complete DM pairing codes with channel adapters, gateway handlers, and TUI command (Tier 4 feature 4) 2026-02-09 18:28:10 -08:00
William Valentin 4413c4dc7c feat: add gateway lock, shell completion, and tailscale serve (Tier 4 features 1-3) 2026-02-09 13:29:59 -08:00
William Valentin 9be8f76bc7 feat: implement Tier 3 features — lane queue, credential redaction, token dashboard, xAI, Voyage AI
- Lane Queue: per-session FIFO queue in gateway replacing reject-when-busy (9 tests)
- Credential Redaction: redactConfig() expanded to cover 18+ secret fields (16 tests)
- Web UI Token Dashboard: system.tokenUsage endpoint + Usage page with summary cards
- xAI (Grok) Provider: OpenAI-compatible client with model pricing
- Voyage AI Embeddings: new embedding provider with configurable dimensions (5 tests)
- Update gap analysis: 90→95 match (70%→74%), Tier 3 section marked DONE
- Update state.json: test count 1001→1034, add tier3_completion entry

Total: 1034 tests passing across 85 files, typecheck clean
2026-02-09 10:32:57 -08:00
William Valentin e052778b0a feat: add gateway protocol attachment support
Extends the gateway wire protocol with GatewayAttachment type and
attachment event. agent.send handler now accepts optional attachments
parameter and converts them for the agent pipeline. Includes 5 new
tests for protocol and handler layers.
2026-02-07 09:09:06 -08:00
William Valentin ee0af0cc06 feat: add tool allow/deny profiles with per-agent and per-provider filtering
Implements configurable tool filtering with four built-in profiles
(minimal, messaging, coding, full), global and per-agent/per-provider
allow/deny lists with glob pattern support, and defense-in-depth
enforcement at both tool listing and execution time.

New: src/tools/policy.ts (ToolPolicy engine), src/tools/policy.test.ts (37 tests)
Modified: config schema, tool registry, tool executor, NativeAgent,
AgentOrchestrator, daemon wiring, gateway tool handler, test mocks
2026-02-06 15:30:34 -08:00
William Valentin 306e11bd2e feat: add multi-model delegation (Phase 0) and context compaction (Phase 1)
Phase 0 — Multi-Model Delegation:
- AgentOrchestrator wraps NativeAgent with delegate() for stateless
  single-turn calls to any model tier (fast/default/complex/local)
- DelegationConfig maps task types (compaction, classification, etc.)
  to model tiers
- Delegation prompts for compaction, memory extraction, classification,
  and tool summarisation
- Per-tier usage tracking for cost visibility
- Config schema: agents.delegation and agents.primary_tier

Phase 1 — Context Compaction:
- Token estimation (char/4 heuristic) with context window lookup
- shouldCompact() threshold check against context window percentage
- compactHistory() splits old/recent messages, delegates summary to
  fast tier, returns CompactionResult
- Automatic compaction in AgentOrchestrator.process() when configured
- Force-compact via orchestrator.compact() with session persistence
- Session.replaceHistory() with atomic SQLite transaction
- /compact TUI command with feedback on compacted token counts
- Config schema: compaction.enabled, threshold_pct, keep_turns,
  summary_max_tokens

Tests: 385 passing across 50 files (22 new tests in 2 new test files)
2026-02-06 13:17:02 -08:00
William Valentin aa95f2132c feat: add channel adapter abstraction with Telegram and WebChat adapters
Implement Phase 3 channel adapters that decouple message sources from
the agent via a uniform ChannelAdapter interface and ChannelRegistry.

- Add ChannelAdapter/InboundMessage/OutboundMessage types
- Add ChannelRegistry for adapter lifecycle and message routing
- Add TelegramAdapter (grammy bot, auth middleware, confirmations, chunking)
- Add WebChatAdapter (thin shim over GatewayServer)
- Refactor daemon to use ChannelRegistry with per-channel-per-user agents
- Add config.get/config.patch gateway handlers (Phase 2 loose end)
- Add system.restart gateway handler (Phase 2 loose end)
- Add implementation plans and design docs

Tests: 225 passing (33 new channel adapter + gateway handler tests)
2026-02-05 20:00:36 -08:00
William Valentin f30a8bc318 feat(gateway): add WebSocket gateway with JSON-RPC protocol and auth
Phase 2 of the Flynn roadmap. Adds a WebSocket gateway server that
starts alongside the Telegram bot, providing real-time API access to
the agent, sessions, and tools.

Protocol: JSON-RPC-like (request/response/event) over WebSocket.
8 methods: agent.send, agent.cancel, sessions.list, sessions.history,
sessions.create, tools.list, tools.invoke, system.health.

Auth: Bearer token + Tailscale identity header support.
Session bridge: per-connection agent instances with shared model router.

New files: src/gateway/ (protocol, router, server, auth, session-bridge,
handlers for agent/sessions/tools/system).
57 new tests (181 total), typecheck clean.
2026-02-05 19:11:25 -08:00