| Age | Commit message (Collapse) | Author |
|
- Add explicit --time 0 argument to bild test command
- Add debug logging for BILD_ARGS environment variable
- Strip ANSI escape sequences and carriage returns from error messages
- Fixes ^M characters appearing in git notes
- Ensures timeout is properly disabled for CI runs
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Add extractErrorMessage function to filter meaningful errors
- Extract only lines containing fail/error keywords
- Filter out progress output and warnings
- Limit to first 5 error lines for concise reporting
- Fixes issue with unhelpful progress output in CI notes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Add -r, --rerun option to run CI even when already verified
- Allows re-running CI for testing or validation purposes
- Fixes "verification failed" error when wanting to rerun CI
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Use lint without arguments to leverage git diff instead of all files
- Avoids passing 289 individual files as arguments to lint
- Much faster for clean repos and smaller diffs
- Resolves CI hanging issues during lint phase
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Add isLikelySourceFile filter to exclude dotfiles and config files
- Apply filter before namespaceFromPathOrDie to prevent crashes
- Removes need to add every config file type to namespace system
- Fixes CI failures from .dir-locals.el and similar files
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Add Ctags extension type to Namespace.Ext
- Allow dots in namespace path components for .ctags.d directories
- Mark ctags files as non-buildable in bild
- Fixes CI failure when processing .ctags.d/base.ctags
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Capture stderr from lint/test failures in git notes
- Add progress logging showing file counts
- Fix date format to use UTC
- Include truncated error messages for easier debugging
|
|
Only record user's chat_id for private chats, not group chats.
Previously, interacting in a group would overwrite the user's
chat_id, causing personal reminders to be sent to that group.
|
|
- Add subagent completion callback to notify user when subagent finishes
- Show tool name in 'view trace' link (e.g. 'view web_search trace')
- Pretty-print JSON on trace web page using aeson-pretty
Amp-Thread-ID: https://ampcode.com/threads/T-019b3a13-bc75-7368-9ec9-362d462a022c
Co-authored-by: Amp <amp@ampcode.com>
|
|
Matches the patterns used in Omni/Jr/Web.
|
|
Also added HTML escaping for input/output JSON.
|
|
Tools.hs:
- run_bash now uses mkSuccess (applies truncation)
- read_file requires line ranges for files >500 lines
- read_file rejects ranges >400 lines
Engine.hs:
- Added engine-level truncateToolResult (10k char cap)
- Fixed test detection: bash -> run_bash
|
|
- Rewrote system prompt with TOKEN EFFICIENCY section
- Reduced defaults: timeout 600s, maxCost 50¢, maxTokens 100k
- Added output truncation (8000 char cap) to all tools
- Tightened search limits (30 results, 5 context lines)
|
|
Traces are inserted via Memory.withMemoryDb but web server was using
a different path (AVA_DATA_ROOT/ava.db). Now both use getMemoryDbPath.
|
|
|
|
|
|
|
|
The table creation was in Memory.initMemoryDb but Web.hs opened the
database directly without calling it. Now Trace.hs has its own
initTraceDb function that Web.startWebServer calls on startup.
|
|
|
|
- Add SQLite storage for tool traces (Omni/Ava/Trace.hs)
- Add web server to serve trace viewer (Omni/Ava/Web.hs)
- Add HTML/CSS/JS trace viewer UI (Omni/Ava/Web/trace.html)
- Integrate trace storage into Engine.hs tool execution callback
- Add trace links to Telegram responses when AVA_WEB_URL is set
- Configure Tailscale Funnel for public access
- Fix pre-push hook variable scope bug
- Add direnv, bash, nix to Ava service PATH
- Add mustache dep to Ava.hs for template rendering
Epic: t-272
|
|
- Telegram.hs: add loadTelegramSystemPrompt with fallback
- Subagent.hs: add loadSystemPromptForRole with fallback
- Coder.hs: add loadCoderSystemPrompt with fallback
- Ava.nix: add tmpfiles rules for /home/ava/prompts/
- Prompts.hs: fix test to expect .mustache extension
Templates loaded at runtime from $AVA_DATA_ROOT/prompts/.
Falls back to hardcoded prompts if templates not found.
Amp-Thread-ID: https://ampcode.com/threads/T-019b3878-73be-77ec-97cc-d092a28d211e
Co-authored-by: Amp <amp@ampcode.com>
|
|
- Add promptsDir to Paths.hs for $AVA_DATA_ROOT/prompts/
- Create Omni.Agent.Prompts module with:
- Mustache template loading and rendering
- Automatic partial resolution via automaticCompile
- Frontmatter/metadata parsing for list command
- Create omni-agent-prompt CLI for previewing prompts:
- list: show all available prompts
- render: render prompt with --var and --json context
- Prompts use .mustache extension for automaticCompile compatibility
- Partials referenced with full extension: {{> shared/memory.mustache}}
|
|
- Add AuditLog import to Telegram.hs
- Call writeAvaLog for user messages in both handleEngagement paths
- Call writeAvaLog for assistant responses
- Add logs directories to Ava.nix tmpfiles rules
|
|
- Add direnv to ava's PATH via wrapper
- Create .bashrc with direnv hook on activation
|
|
|
|
|
|
|
|
- Add chat_history table with embeddings in memory.db
- Add saveChatHistoryEntry for live message ingestion
- Add searchChatHistorySemantic for vector similarity search
- Update search_chat_history tool to use semantic search
- Add backfill command: run.sh Omni/Agent/Memory.hs backfill
- Add stats command: run.sh Omni/Agent/Memory.hs stats
- Change default memory.db path to ~/memory.db
- Wire Telegram message handling to save to chat_history async
|
|
Allows Ava to search her conversation logs for past discussions.
Searches UserMessage/AssistantMessage events with case-insensitive
matching, configurable days_back (default 7) and max_results (default 20).
|
|
|
|
Previously used 'enable --now' which only starts stopped services.
Now explicitly calls 'restart' to ensure running services pick up new versions.
|
|
|
|
The coder role no longer requires task_id, only namespace.
|
|
|
|
- Strengthen Telegram MarkdownV2 formatting guidance in Ava's system prompt
- Add DNS record beryl.bensima.com -> 100.127.197.132 (Tailscale IP)
- Modify push.sh to detect local deploys and skip SSH
- Add Tailscale hostname fallback when domain is unreachable
|
|
Remove task_id requirement and all jr task CLI calls. The Coder subagent
now only requires namespace and task description - no external task
tracking needed.
Changes:
- Remove coderTaskId from CoderConfig
- Remove jr task show/update/comment calls
- Commit message uses namespace prefix instead of task ID
- Recovery phase just reverts git, no task comment
- Subagent.hs only validates namespace for Coder role
|
|
Security improvement: subagents now require explicit user confirmation via
Telegram inline buttons, preventing the agent from bypassing approval.
Changes:
- Add InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery types
- Add parseCallbackQuery for handling button presses
- Add sendMessageWithKeyboard and answerCallbackQuery API functions
- Add PendingSpawn registry for tracking unconfirmed spawn requests
- Add spawnSubagentToolWithApproval that sends approval buttons
- Add handleCallbackQuery to process approve/reject button clicks
- Add approveAndSpawnSubagent and rejectPendingSpawn functions
Flow:
1. Agent calls spawn_subagent → creates pending request
2. User receives message with ✅ Approve / ❌ Reject buttons
3. Button click (outside agent loop) spawns or cancels
4. Pending requests expire after 10 minutes
|
|
- Add global subagent registry to track running handles by ID
- Modify executeSpawnSubagent to use spawnSubagentAsync and return immediately
- Add check_subagent tool for querying status or getting results
- Export subagentTools convenience function with both tools
- Update Telegram.hs to use subagentTools instead of just spawnSubagentTool
Ava can now spawn subagents in the background and continue
conversations while checking on progress via check_subagent.
|
|
Based on Anthropic's effective harnesses research.
New modules:
- Omni/Agent/AuditLog.hs: JSONL audit logging with SubagentId linking
- Omni/Agent/Tools/AvaLogs.hs: Tool for Ava to query her own logs
- Omni/Agent/Subagent/HARDENING.md: Design documentation
Key features:
- SubagentHandle with TVar status for async execution and polling
- spawnSubagentAsync, querySubagentStatus, waitSubagent, cancelSubagent
- User confirmation: spawn_subagent requires confirmed=true after approval
- Audit logs stored in $AVA_DATA_ROOT/logs/{ava,subagents}/
- CLI: ava logs [--last=N] [<subagent_id>]
- read_ava_logs tool for Ava self-diagnosis
Tasks: t-267, t-268, t-269, t-270, t-271
|
|
- Wrap ava binary with Python (requests, httpx, pandas, etc.)
- Add CLI tools: curl, pandoc, ffmpeg, imagemagick, csvkit
- Add local whisper-cli fallback when OPENAI_API_KEY unavailable
Amp-Thread-ID: https://ampcode.com/threads/T-019b2dc2-36e0-75e1-90c1-622901fc9847
Co-authored-by: Amp <amp@ampcode.com>
|
|
|
|
- Add LineBuffering to stdout/stderr in Ava.hs
- Add StandardOutput/StandardError=journal to systemd service
|
|
|
|
- Add Omni.Agent.Paths module for configurable AVA_DATA_ROOT
- Create ava Linux user in Users.nix with SSH key
- Add systemd service in Beryllium/Ava.nix with graceful shutdown
- Update Skills.hs and Outreach.hs to use configurable paths
- Add startup logging of resolved paths in Telegram.hs
- Create migration script for moving data from _/var/ava to /home/ava
- Add deployment documentation in Beryllium/AVA.md
In dev: AVA_DATA_ROOT unset uses _/var/ava/
In prod: AVA_DATA_ROOT=/home/ava via systemd
Amp-Thread-ID: https://ampcode.com/threads/T-019b2d7e-bd88-7355-8133-275c65157aaf
Co-authored-by: Amp <amp@ampcode.com>
|
|
Enables orchestrator to spawn specialized subagents for focused tasks:
- WebCrawler: web search + page reading (haiku, fast)
- CodeReviewer: code analysis tools (sonnet, thorough)
- DataExtractor: structured data extraction (haiku)
- Researcher: combined web + codebase research (sonnet)
Key features:
- spawn_subagent tool with role-based tool selection
- Per-subagent resource limits (timeout, cost, tokens)
- Structured output with citations (claim, source_url, quote)
- Separate API keys for OpenRouter vs Kagi
- Efficiency-focused system prompts
Defaults: 200k tokens, $1.00 cost cap, 600s timeout, 20 iterations
|
|
Wrap parser chains in parentheses to fix compilation errors from
incorrect use of </ operator.
|
|
The deployer compared its in-memory stateServices map to decide if a
service needed restarting. When the deployer restarted, this state was
lost, causing it to think services were 'already at' the desired path
when they were actually running old code.
Changes:
- Add getRunningStorePath to Systemd module to read actual store path
- Update deployService to query systemd instead of stale in-memory state
- Add DerivingStrategies extension to Deployer.hs
|
|
|
|
- Systemd: use list comprehension instead of if-then-else
- Manifest: use </> operator, replace case with maybe
- Deployer: use newtype, use flip removeService
- Caddy: use newtype for single-field types
|
|
- Create Omni/Agent/Skills.hs with skill loader and tools
- Skills follow Claude Skills format (SKILL.md + scripts/references/assets)
- Directory structure: _/var/ava/skills/{shared,<user>}/
- Three tools: skill, list_skills, publish_skill
- Users can publish private skills to shared
- Integrate skills tools into Telegram bot
- Create skill-creator meta-skill at _/var/ava/skills/shared/skill-creator/
|