Commit Graph

7680 Commits

Author SHA1 Message Date
Artur Do Lago 74455ea5e2 fix(web): update workspace dependency from opencode to agent-core
The web package still referenced the old "opencode" workspace name,
causing bun install to fail with "Workspace dependency not found".

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:58 +01:00
Artur Do Lago 5f046fcaeb docs: add naming convention - never use 'opencode' in new code
Users must be able to run both agent-core and OpenCode without
confusion. All new code, docs, and user-facing text should use
'agent-core' naming instead of 'opencode'.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:58 +01:00
Artur Do Lago 862a3c1961 feat(gateway): add WhatsApp gateway for remote access
- New WhatsApp gateway using whatsapp-web.js
- QR code authentication on first run
- Session persistence across restarts
- Intent-based persona routing (same as Telegram)
- Phone number allowlist support
- Integrated into daemon with --whatsapp flag

Usage:
  opencode daemon --whatsapp --port 4567

Note: Requires whatsapp-web.js and qrcode-terminal packages.
Dynamic imports allow graceful failure if not installed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:58 +01:00
Artur Do Lago 5b08669ddd fix(tui): load todos directly from storage for startup check
sync.data.todo is only populated when sessions are opened, so the
startup check was always finding zero todos. Now uses Todo.get()
to read directly from storage for each session.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:58 +01:00
Artur Do Lago 38fd95f15b feat(tui): add startup check for pending todos across sessions
Phase 0.3 completion:
- Show toast on TUI startup if any sessions have incomplete todos
- Display count: "◐ N pending todos in M sessions"
- Update roadmap: mark Phase 0 as Complete

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:58 +01:00
Artur Do Lago 40670f7cff feat(tui): improve prompt hint for incomplete todos
- Filter out cancelled todos (consistency with other implementations)
- Update display to use ◐ symbol: "◐ N pending · task..."
- Mark Phase 0.2 TUI Integration as complete in roadmap

The prompt hint was already implemented, this commit improves it
for consistency with the session list indicator.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:58 +01:00
Artur Do Lago 2cc1a2df88 docs: mark backend todo reminder as complete in roadmap
The todo continuation reminder was already implemented in prompt.ts
at insertReminders() (lines 1180-1219). Updates roadmap to reflect this.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:58 +01:00
Artur Do Lago 1b815538be feat(tui): add toast notification for incomplete todos when switching sessions
When switching between sessions in the TUI:
- Shows toast warning with count of incomplete todos
- Session list displays ◐{count} indicator for sessions with pending work

This helps users track unfinished tasks across sessions.

Updates roadmap Phase 0.2 TUI Integration status.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:58 +01:00
Artur Do Lago fe0f8ecf64 refactor(ui): replace emojis with sober UTF-8 unicode symbols
Replace all emoji characters with standard Unicode symbols that render
correctly in terminals with UTF-8 support.

Persona icons:
- Zee: 🧠💜🤖 → ★ (U+2605 Black Star)
- Stanley: 📈 → ♦ (U+2666 Black Diamond)
- Johny: 📚🎓🧠 → ◎ (U+25CE Bullseye)

Status indicators:
- Working: ↻ → ⟳ (wider rotating arrow)
- Pending: ◔ → ◐ (wider half circle)
- Completed: ✓ → ✔ (heavier check)
- Hold mode: ◆ → ▣ (square with inner square)
- Release mode: ◇ → ▢ (rounded square)

Other changes:
- Status headers: 🔺📊 → ◆◈
- Calendar indicator: 📅 → ▦
- Make persona parameter required in createSessionPane()
- Fix keybind conflicts: mode_toggle → <leader>h,
  messages_toggle_conceal → <leader>/, tips_toggle → <leader>?
- Add persistent hold/release indicator in prompt

All symbols are in the Basic Multilingual Plane (BMP) for maximum
terminal compatibility.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:58 +01:00
Artur Do Lago da2d7beac8 fix(tui): don't fallback to first provider when agents loading
When using the placeholder agent (before real agents load), return
undefined instead of falling back to the first provider's model.
This prevents showing google-vertex-anthropic models before the
agent's configured model loads.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:58 +01:00
Artur Do Lago b83f23ae27 fix(tui): enable agent cycling and mode toggle commands
- Remove disabled: true from agent_cycle and agent_cycle_reverse
- Remove disabled: true from mode_toggle
- Tab now switches between agents as expected

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:58 +01:00
Artur Do Lago b942644003 fix(tui): add placeholder agent for loading state
Return a placeholder agent object when no agents have loaded yet,
preventing crashes when accessing .name or other properties on
undefined.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:28 +01:00
Artur Do Lago ac29b335db fix(tui): handle undefined agent in current() gracefully
When agents haven't loaded yet or the stored agent name doesn't match
any loaded agent, fallback to the first available agent instead of
returning undefined which caused crashes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:28 +01:00
Artur Do Lago 525fb52f12 fix(tui): trust agent's configured model without validation
Agent-configured models (like cerebras/zai-glm-4.7) may not be in the
provider list returned by the API. Instead of validating and falling
back, trust the agent's configured model directly.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:28 +01:00
Artur Do Lago 6e660cc506 fix(tui): prioritize agent's configured model over cached selection
Agent's model config now takes priority:
1. Agent's configured model (from .agent-core/agent/*.md)
2. User's cached selection (for agents without config)
3. Global fallback

This ensures personas always use their intended models on startup.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:28 +01:00
Artur Do Lago 01883b4b10 fix(agents): inline persona prompts instead of broken {skill:} placeholders
The {skill:zee} placeholder was never implemented - it was being sent
as literal text. Now each agent has its actual prompt inlined:
- Zee: Personal life assistant (memory, messaging, calendar)
- Stanley: Investing system (markets, portfolio, SEC filings)
- Johny: Learning system (knowledge graph, spaced repetition)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:28 +01:00
Artur Do Lago 9055690525 refactor: clean up dead code and fix working directory detection
- Delete unused prompt files (anthropic-20250930.txt, copilot-gpt-5.txt, explore.txt)
- Fix thread.ts to use AGENT_CORE_ORIGINAL_PWD for correct cwd detection
- Remove misleading tips about non-existent vim features (:w, :wq, :help)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:28 +01:00
Artur Do Lago 79e87bad37 fix(llm): filter out non-provider options from agent config
The 'includes' field (for skill loading) was being passed to providers
like Cerebras, causing "body.includes is unsupported" errors.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:26:28 +01:00
Artur Do Lago 938c0f62c2 fix(provider): improve Anthropic model version filtering
- Parse all Claude naming formats (old/new with/without minor version)
- Prioritize highest version number over -latest suffix
- Group by model family (opus, sonnet, haiku) and keep only best version

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:25:42 +01:00
Artur Do Lago f5fb04b208 refactor(tui): hide dated model versions and remove variant cycle
- Auto-hide dated model versions (e.g. claude-opus-4-5-20250202) when
  latest or base version exists for Anthropic and Z.AI providers
- Remove variant cycle command from agent options

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:25:42 +01:00
Artur Do Lago 72c71a3a17 feat: rename .opencode to .agent-core and add vim commands
- Rename config directory from .opencode/ to .agent-core/
- Add vim-style commands: :w (commit), :q (quit), :wq, :e, :help, :mode
- Update version format to V0.YYYYMMDD
- Remove unused plan/build prompt files
- Update SDK generated files

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:25:16 +01:00
Artur Do Lago d22fd66a24 feat(tui): vim-style commands and branding updates
- Change command prefix from / to : (vim-style, e.g. :connect, :models)
- Update tips with vim commands (:w, :q, :wq, :help)
- Update branding from OpenCode to agent-core in sidebar
- Update footer hints to use : prefix

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:16:53 +01:00
Artur Do Lago 91363ca549 refactor(tui): remove favorite and suggested commands features
Simplify the UI by removing:
- Model favorites (toggleFavorite, favorite list, Ctrl+F keybind)
- Suggested commands category in command palette

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:12:28 +01:00
Artur Do Lago 6cc70e30ca feat(config): add Cerebras zai-glm-4.7 model definition
- Add Cerebras provider with GLM-4.7 model
- Context: 131K tokens, Output: 40K tokens
- Supports reasoning and tool calls

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:06:37 +01:00
Artur Do Lago e2b47c9d7e fix(zee): use recommended temperature/top_p for GLM-4.7
Per Cerebras docs, GLM-4.7 recommends temperature=1.0 and top_p=0.95

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:06:37 +01:00
Artur Do Lago 4126df9d2b fix(tui): show persona banners and remove OpenRouter warning
- Replace AGENT-CORE logo with dynamic persona ASCII art
- Logo now shows Zee, Stanley, or Johny based on active persona
- Remove OpenRouter warning dialog (was promoting OpenCode Zen)
- Update CLI logo to show Zee banner (default persona)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:06:37 +01:00
Artur Do Lago 47d3e7ef9a feat(branding): rename package to agent-core and configure personas
- Rename packages/opencode to packages/agent-core
- Update bin entry from opencode to agent-core
- Set default_agent to "zee" for persona-first UX
- Update terminal title to show current persona name
- Fix persona colors:
  - Zee: #2563EB (blue)
  - Stanley: #059669 (emerald green)
  - Johny: #DC2626 (red)
- Update all documentation and build script references
- Update root package.json name and dev script

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:05:26 +01:00
Artur Do Lago 240e989e8f feat(daemon): add lifecycle hooks and WezTerm orchestration (Phase 4-5)
Phase 4: Tiara Hook Integration
- Add lifecycle hooks module (src/hooks/lifecycle.ts)
- Daemon lifecycle hooks: start, ready, shutdown
- Session lifecycle hooks: start, restore, end, transfer
- Todo lifecycle hooks: continuation, completed, blocked
- Integrate hooks with daemon startup/shutdown
- Integrate hooks with Telegram gateway for session events

Phase 5: WezTerm Visual Orchestration
- Add WezTerm orchestration module (src/orchestration/wezterm.ts)
- Display detection (X11 via DISPLAY, Wayland via WAYLAND_DISPLAY)
- Status pane showing daemon health, services, sessions
- Session pane management API (create/close/focus)
- Graceful degradation when no display available
- CLI options: --wezterm, --wezterm-layout
- Integration with lifecycle hooks for auto-updates

Also includes:
- Session persistence module (src/session/persistence.ts)
- Telegram gateway (src/gateway/telegram.ts)
- Daemon CLI command (src/cli/cmd/daemon.ts)
- Systemd service files (scripts/systemd/)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:54:24 +01:00
Artur Do Lago bb5857fb3b feat(todo-continuation): integrate todo continuation into TUI
Phase 0.2 of Always-On Personas architecture:

- Add toast notification on session switch when incomplete todos exist
  (routes/session/index.tsx)
- Inject system reminder into LLM context for incomplete tasks
  (session/prompt.ts)
- Add visual hint in prompt area showing current todo progress
  (component/prompt/index.tsx)
- Create architecture roadmap for Always-On Personas system
  (docs/architecture/ALWAYS-ON-PERSONAS.md)

This enables automatic continuation of incomplete tasks when:
1. Switching to a session with pending todos (toast + hint)
2. Sending any prompt in a session with incomplete tasks (system reminder)

Part of the headless agent infrastructure for remote access via Zee.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:54:09 +01:00
Artur Do Lago 4c893c4624 chore: update tiara with session-restore todo-continuation
Session restore now automatically triggers todo continuation
when incomplete tasks remain from previous session.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:53:31 +01:00
Artur Do Lago 78a02fac75 chore: update tiara submodule with CLI hook improvements
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:53:31 +01:00
Artur Do Lago 7d229e5a44 chore: update tiara submodule with todo-continuation hooks
New features in tiara:
- Todo continuation hook system for automatic session persistence
- System reminder injection when incomplete tasks remain
- CLI command: npx claude-flow hook todo-continuation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:53:31 +01:00
Artur Do Lago d144d36e8c fix: use agent-core config path and guard against empty agents array
- Change app name from "opencode" to "agent-core" so config loads from
  ~/.config/agent-core/ where personas (zee, johny, stanley) are defined
- Add defensive optional chaining to prevent crash if agents array is
  empty during initialization

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:53:31 +01:00
Artur Do Lago 40a30bad90 chore: update tiara submodule with Qdrant adapter
Updates tiara to include the new Qdrant storage adapter for unified
memory storage. This enables migration from SQLite to Qdrant.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:53:31 +01:00
Artur Do Lago b839e53c5c fix(fallback): handle mid-stream errors with automatic fallback
When providers like OpenAI return a stream successfully but error during
iteration (e.g., insufficient_quota mid-stream), the fallback system now
catches these errors and switches to a fallback provider.

Key changes:
- Add wrapFullStream() using Proxy to intercept async iteration
- Add tryMidStreamFallback() for mid-stream recovery
- Wrap all returned streams with the mid-stream error handler
- Emit FallbackUsed event with "mid-stream:" reason prefix

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:53:31 +01:00
Artur Do Lago eaa3df3fe7 fix(fallback): add insufficient_quota error classification
- Classify OpenAI insufficient_quota errors as rate_limit to trigger fallback
- Add quota pattern matching in JSON error body parsing
- Add quota string pattern matching for error messages
- Remove premature success recording - stream might still error during iteration

Note: Stream-time errors (errors during iteration) are not yet caught by
fallback retry logic. This is a known limitation when errors occur mid-stream
rather than at call time.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:53:31 +01:00
Artur Do Lago 3ca5a72a73 feat: Add EXA_API_KEY support to WebSearch tool
Reads EXA_API_KEY from environment for higher rate limits.
Falls back to public MCP endpoint if not set.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:53:31 +01:00
Artur Do Lago 171e2db8b3 feat(personas): add model config, TUI banner, and fallback system
- Configure per-persona models with temperature/top_p:
  - Zee: cerebras/zai-glm-4.7 (0.8/0.9)
  - Stanley: openrouter/xai/grok-4.1-fast (0.7/0.85)
  - Johny: antigravity/claude-opus-4-5 (0.8/0.9)
- Configure internal agents:
  - title: cerebras/gpt-oss-120b (0.5)
  - compaction: antigravity/gemini-3-flash (0.3)
- Add ASCII art banner on startup with Tab switching
- Sort agents reverse alphabetically (Zee, Stanley, Johny)
- Add provider fallback system with circuit breaker

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:53:04 +01:00
Artur Do Lago 00691cd28e chore: update tiara submodule to latest
Includes:
- Required context section for agent-core/personas repos
- Snyk security upgrades (bcrypt, multer, node)
- CI and test fixes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:53:04 +01:00
Artur Do Lago 041cbfb7af chore: update tiara submodule 2026-01-20 11:53:04 +01:00
Artur Do Lago 6d4c0aaf6e feat: replace built-in agents with Personas triad
- Remove hardcoded build/plan/general/explore agents from source
- Add Zee, Stanley, Johny agent definitions in .opencode/agent/
- Remove upstream docs/duplicate-pr/triage agents
- Update CLAUDE.md with agent-core → tiara → personas architecture
- Configure Cerebras as default model for all agents (fast instruct)
- Set small_model for internal agents (title, compaction)

The Personas system now provides all agent functionality through
the triad, with shared orchestration via tiara.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:53:04 +01:00
Artur Do Lago 5984611c48 chore: rename Clawdis references to Zee
- Update all "Clawdis" references to "Zee gateway" in comments/docs
- Clawdis was the old name for the Zee messaging bot (clawdbot fork)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:52:35 +01:00
Artur Do Lago 550b02445b feat(zee): integrate Google Calendar with canvas sidecar
- Add Google Calendar client using OAuth2 tokens from ~/.zee/credentials/google/
- Update zee:calendar tool with real Google Calendar API integration
- Support today, week, month, and custom date range queries
- Auto-display calendar events in canvas sidecar
- Handle token refresh automatically

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:52:35 +01:00
Artur Do Lago ea937786d1 feat(canvas): implement WezTerm-native canvas sidecar
Add canvas TUI system using WezTerm CLI directly (no external deps).
Canvas panes render text, calendar, document, and table views via
ANSI escape codes and box-drawing characters.

New features:
- CanvasManager class with spawn/show/update/close lifecycle
- Built-in renderers: text, calendar, document, table
- IPC methods: canvas:spawn, canvas:show, canvas:update, canvas:close,
  canvas:selection, canvas:list
- Canvas tools now use real IPC instead of placeholders
- WezTerm keybinding: LEADER+c for canvas actions menu

The sidecar daemon now manages:
- LSP server (TCP:7777)
- IPC server (Unix socket)
- Tiara orchestrator (workers, tasks)
- Canvas manager (panes, rendering)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:52:35 +01:00
Artur Do Lago 7229f31e83 feat(nix): add personas devShell and package with stock dependencies
Add full development environment for the Personas system using stock
nixpkgs packages to ensure dogfooding parity with client installations.

New features:
- `nix develop .#personas` - Full devShell with wezterm, yazi, qdrant
- `nix build .#personas` - Bundle with opencode + stock tools
- `nix run .#qdrant` - Run Qdrant vector database server
- `nix run .#setup-python` - Install openbb + nautilus-trader
- NixOS module for declarative system integration

Stock dependencies: wezterm, yazi, qdrant, ripgrep, fd, fzf, jq, gh

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:52:35 +01:00
Artur Do Lago 29b2e6831c chore: update tiara submodule with comprehensive test fixes
Updates tiara to include fixes for:
- terminal-manager.test.ts
- verification-pipeline.test.ts
- cross-agent-communication.test.ts
- false-reporting-scenarios.test.ts
- verification-overhead.test.ts

All 137 tests now pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:51:38 +01:00
Artur Do Lago a42cc80c6e chore: update tiara submodule with test fixes
Tiara unit tests for coordination and memory systems now pass (79 tests).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:51:37 +01:00
Artur Do Lago ee28788606 docs: add fork notice crediting sst/opencode team
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:51:37 +01:00
Artur Do Lago ac8aed235e feat: Agent-core customizations for Personas ecosystem
- Add Personas skills (johny, stanley, zee)
- Add domain tools (stanley finance, zee personal)
- Add personas orchestration and knowledge graphs
- Add LLM Council for multi-model deliberation
- Add memory types for Qdrant vector storage
- Add tiara submodule for orchestration
- Add CLAUDE.md project documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 11:51:37 +01:00
GitHub Action 616329ae97 chore: generate 2026-01-20 06:33:16 +00:00