Implements the message:received hook event that fires when a user message
is received, before processing. This enables hooks to:
- Track user activity in real-time
- Update state files without polling
- React to incoming messages
Changes:
- Add 'message' to InternalHookEventType union
- Fire message:received event in dispatchInboundMessage()
- Event fires async to avoid blocking message processing
- Include context: senderId, channel, messageBody (truncated), timestamp, cfg
New bundled hook:
- activity-tracker: Updates heartbeat-state.json on every user message
- Sets lastUserMessage to current timestamp
- Sets backupActive=true to enable hourly backups
- Enables session-backup hook to work without polling
Tests:
- message-received.test.ts: Tests for the new hook event
Docs:
- Updated hooks.md to document message:received event
- Moved from 'Future Events' to 'Message Events' section
Adds two new bundled hooks:
1. session-backup: Automated hourly session backups with activity-based lifecycle
- Tracks user activity via lastUserMessage timestamp
- Creates hourly backups while user is active
- Grace period (1-2h) triggers final backup then stops
- Respects backupActive flag to avoid unnecessary work
2. context-aggregator: Aggregates memory into CONTEXT.md
- Collects from hourly backups, daily notes, session summaries
- Updates activity state from session logs
- Provides memory management reminders
- Creates unified context for session continuity
Also adds tests for session-backup hook covering:
- State management
- Activity detection
- Backup creation
- Full lifecycle simulation
Resolves the 'new intern each session' problem by providing structured
memory persistence that doesn't rely on agent behavioral compliance.
* feat: Add Ollama provider with automatic model discovery
- Add Ollama provider builder with automatic model detection
- Discover available models from local Ollama instance via /api/tags API
- Make resolveImplicitProviders async to support dynamic model discovery
- Add comprehensive Ollama documentation with setup and usage guide
- Add tests for Ollama provider integration
- Update provider index and model providers documentation
Closes#1531
* fix: Correct Ollama provider type definitions and error handling
- Fix input property type to match ModelDefinitionConfig
- Import ModelDefinitionConfig type properly
- Fix error template literal to use String() for type safety
- Simplify return type signature of discoverOllamaModels
* fix: Suppress unhandled promise warnings from ensureClawdbotModelsJson in tests
- Cast unused promise returns to 'unknown' to suppress TypeScript warnings
- Tests that don't await the promise are intentionally not awaiting it
- This fixes the failing test suite caused by unawaited async calls
* fix: Skip Ollama model discovery during tests
- Check for VITEST or NODE_ENV=test before making HTTP requests
- Prevents test timeouts and hangs from network calls
- Ollama discovery will still work in production/normal usage
* fix: Set VITEST environment variable in test setup
- Ensures Ollama discovery is skipped in all test runs
- Prevents network calls during tests that could cause timeouts
* test: Temporarily skip Ollama provider tests to diagnose CI failures
* fix: Make Ollama provider opt-in to avoid breaking existing tests
**Root Cause:**
The Ollama provider was being added to ALL configurations by default
(with a fallback API key of 'ollama-local'), which broke tests that
expected NO providers when no API keys were configured.
**Solution:**
- Removed the default fallback API key for Ollama
- Ollama provider now requires explicit configuration via:
- OLLAMA_API_KEY environment variable, OR
- Ollama profile in auth store
- Updated documentation to reflect the explicit configuration requirement
- Added a test to verify Ollama is not added by default
This fixes all 4 failing test suites:
- checks (node, test, pnpm test)
- checks (bun, test, bunx vitest run)
- checks-windows (node, test, pnpm test)
- checks-macos (test, pnpm test)
Closes#1531