Commit Graph

2 Commits

Author SHA1 Message Date
Rex Liu
3a1ca0ea8b
feat(hooks): Add message:received hook event
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
2026-01-26 22:01:54 -05:00
Rex Liu
b85810a550
feat(hooks): Add memory system hooks for session continuity
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.
2026-01-26 21:57:06 -05:00