Commit Graph

64 Commits

Author SHA1 Message Date
William Valentin 7c904ef0fd Add browser workflow reliability primitives and guardrails 2026-02-26 14:06:46 -08:00
William Valentin 3cc9e16ef5 feat(subagents): complete queue, budgets, audit, and inspection controls 2026-02-26 13:28:10 -08:00
William Valentin b679261683 feat(subagents): add idle ttl cleanup and summary tool 2026-02-26 13:12:53 -08:00
William Valentin 2171346116 feat(subagents): add multi-turn subagent session runtime 2026-02-26 13:07:34 -08:00
William Valentin 00b2d646f7 feat(google-auth): centralize oauth token store and service checks 2026-02-23 17:11:09 -08:00
William Valentin 0bf69acafe fix(lint): clear error-level violations across runtime and ui 2026-02-23 16:51:44 -08:00
William Valentin 49fd2b5327 fix(daily-briefing): add calendar/tasks scope re-auth guidance 2026-02-23 16:07:12 -08:00
William Valentin 056b8ce515 feat(tools): support per-tool timeout override for council runs 2026-02-23 00:01:27 -08:00
William Valentin f04f8a241d feat(gmail): add filter creation tool and auth scope 2026-02-22 22:25:05 -08:00
William Valentin f27aabae3b Improve local service checks and web search tooling 2026-02-22 22:12:44 -08:00
William Valentin 3d59e5ea9d Add localhost->127.0.0.1 fallback for transcription fetch 2026-02-22 20:26:38 -08:00
William Valentin ba6abfb078 feat: add brave search container and toolset 2026-02-22 20:12:54 -08:00
William Valentin 487f26e36d Harden audio transcription fetch path with retries and timeout 2026-02-22 19:54:58 -08:00
William Valentin db4e52dd7e Harden audio transcription arg hydration and add rewrite audit event 2026-02-22 18:56:22 -08:00
William Valentin 44c7409a20 feat(councils): add preflight, schema-driven outputs, and artifact reporting 2026-02-22 15:56:30 -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 bcb7e7b658 feat(councils): add deterministic councils engine and council.run tool 2026-02-21 10:49:14 -08:00
William Valentin d4f4be068c fix(minio): support mc_path and harden sync against transient objects 2026-02-19 13:18:20 -08:00
William Valentin b0ae5f638b feat(system-info): improve human-readable snapshot formatting 2026-02-18 18:06:46 -08:00
William Valentin 9de52b7d93 feat(system-info): include disk usage in health output 2026-02-18 18:04:35 -08:00
William Valentin 9a2f1e2bb2 chore: checkpoint browser tooling and routing updates 2026-02-17 15:18:37 -08:00
William Valentin 8394086446 Wire agent.delegate into TUI tool registry 2026-02-17 11:03:55 -08:00
William Valentin 776b47f80f feat: wire agent.delegate tool with sub-agent configs
- Export createAgentDelegateTool through builtin/index.ts → tools/index.ts
- Register agent.delegate in routing.ts with lazy orchestrator pattern
- Add agent.delegate + agents.list to messaging and coding policy profiles
- Add group:agents tool group to policy.ts
- Add research/code/comms agent config examples to default.yaml
- Add research/code/comms agent configs to user config.yaml
- Add 11 tests for agent-delegate tool (all pass)
- Typecheck clean, no regressions
2026-02-17 10:28:29 -08:00
William Valentin 0548ab3833 feat(tools): add docx extraction for minio ingestion 2026-02-16 14:45:45 -08:00
William Valentin e8a785b61f feat(tools): add pdf extraction for minio ingestion 2026-02-16 14:45:45 -08:00
William Valentin 63df791b26 feat(tools): add kubernetes homelab awareness tools 2026-02-16 14:45:45 -08:00
William Valentin 22f225998f feat(tools): add minio prefix sync into memory 2026-02-16 14:45:45 -08:00
William Valentin 0be93c20b5 feat(tools): add minio ingestion into memory namespaces 2026-02-16 14:45:45 -08:00
William Valentin 426145386f feat(tools): add minio.share upload and presigned link tool 2026-02-16 14:45:45 -08:00
William Valentin 56854f04bd feat(automation): add timezone-safe daily briefing dedupe 2026-02-16 14:45:45 -08:00
William Valentin 83b8e38b11 feat(runtime): add talk mode and capture tools 2026-02-16 10:17:24 -08:00
William Valentin ae70818ec1 fix: resolve strict typecheck fallout in setup, routing, and tests 2026-02-15 23:22:05 -08:00
William Valentin 948d4ac6d8 chore(lint): burn down remaining warnings to zero 2026-02-15 23:14:21 -08:00
William Valentin 92da407e22 audit follow-up: trim image-analyze test lint warnings 2026-02-15 22:54:36 -08:00
William Valentin 021435ac27 test(lint): reduce warning debt in selected test suites 2026-02-15 22:31:47 -08:00
William Valentin b4006e91ff feat(tools): extend cancellation to browser, web, and process tools 2026-02-15 22:12:03 -08:00
William Valentin 2cdfb66071 feat(tools): propagate timeout abort signals to tool execution 2026-02-15 22:05:43 -08:00
William Valentin 81c97a9df1 feat(memory): add experimental qmd search backend 2026-02-15 19:33:43 -08:00
William Valentin 3451df41b9 feat(tools): enforce skill capabilities and secret scopes 2026-02-15 10:16:51 -08:00
William Valentin 955b9e28e0 feat: add OpenAI OAuth, strict model overrides, and Gmail pull mode 2026-02-13 14:55:40 -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 0b44adbaea fix(audio): add SSRF protection, MIME type fix, and tests for audio-transcribe tool
- Add URL validation blocking localhost, private IPs, and non-http protocols
- Use response Content-Type header instead of hardcoded audio/wav for URL downloads
- Add 25 tests covering validation, SSRF, config errors, transcription paths, and error handling

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:57:45 -08:00
William Valentin a875bcc4ae feat(audio): add audio.transcribe tool with Whisper-compatible API support
- Add createAudioTranscribeTool with OpenAI/Groq/Ollama/llama.cpp provider support
- Refactor audio config schema to nested audio.enabled + audio.provider structure
- Move audio tool registration to initTools() for conditional enablement
- Fix duplication bug in audio-transcribe.ts URL download handler
- Support base64 data and URL-based audio input with format detection
2026-02-11 18:13:19 -08:00
William Valentin 6090508bad style: auto-fix ESLint issues (curly braces and formatting)
- Add curly braces to all if/else/for/while statements
- Fix indentation and trailing spaces
- Auto-fixed 372 linting errors using eslint --fix
- Remaining issues are warnings only (non-null assertions, explicit any types)
2026-02-11 10:30:24 -08:00
William Valentin 5270234bbb feat: improve tool usage guidance in SOUL.md and add cron.create/cron.delete tools
- SOUL.md: list all available tools (web.search, memory.*, cron.*, etc.)
  and add Tool Usage Rules section enforcing 'act, don't narrate'
- cron.ts: add getJob(), addJob(), removeJob() to CronScheduler for
  runtime (ephemeral) cron job management
- cron tools: add cron.create and cron.delete tools, enhance cron.list
  to show schedule/output/message details
- policy.ts: add cron tools to messaging and coding profiles, add
  group:cron to tool groups

Fixes issue where models would narrate tool intent ('let me search...')
then stop without actually calling tools.
2026-02-11 09:32:36 -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 4ce8e81c01 fix(gmail): sanitize HTML entities and tags in tool output
Gmail API returns snippets with HTML entities (&amp;, &#39;, <br>, etc.)
that leaked into LLM responses as raw HTML. Added shared sanitizeHtml()
utility in src/utils/html.ts and applied it to gmail tool snippets,
HTML body fallback, and gmail watcher snippets.
2026-02-10 16:30:14 -08:00
William Valentin f204ff1dd7 feat(tools): add Google Docs, Drive, and Tasks read-only tools
Add three new Google service integrations following the established
Gmail/GCal pattern:

- Google Docs (docs.list, docs.search, docs.read): list, search, and
  read document content as plain text via Docs + Drive APIs
- Google Drive (drive.list, drive.search, drive.read): list, search,
  and read files with export support for Workspace files (Docs→text,
  Sheets→CSV, Slides→text)
- Google Tasks (tasks.lists, tasks.list): list task lists and tasks
  with status, due dates, and notes

Each service has its own config section, OAuth auth command, tool
policy group, and test suite (53 new tests). The setup wizard now
offers to configure all Google services together and run OAuth auth
flows automatically after saving config.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 12:59:15 -08:00
William Valentin 50471d63af feat(tools): add gmail.read tool for full email content
The existing gmail.list and gmail.search tools only return snippets.
gmail.read fetches the full message by ID using format: 'full', decodes
base64url body parts (preferring text/plain, falling back to stripped
HTML), and returns headers + body text. This enables workflows like
searching for invoices and extracting amounts from the full content.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 12:01:49 -08:00
William Valentin 94264e848c feat(tools): add Google Calendar tools and register Gmail/GCal in daemon
Add calendar.today, calendar.list, calendar.search tools mirroring the
Gmail tool pattern. Includes gcal-auth CLI command, config schema, tool
policy entries (messaging/coding profiles + group:gcal), and 17 tests.
Also wires up gmail and gcal tool registration in the daemon and TUI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 11:40:53 -08:00