4 Commits

Author SHA1 Message Date
752f765132 feat(dispatcher): object name mapping for human-readable summaries
Config adds names: { '3': '小墨 🖊️', '5': '小橘 🍊' }
Summary now shows '由 小墨 🖊️ 创建' instead of 'agent:3'
Added task_assigned and task_commented to summary format
2026-04-13 08:07:58 +00:00
9d8ebe9f74 feat(dispatcher): AgentClient interface + OC Plugin integration (#32)
- New AgentClient interface: push(actor, events, summary?)
- OcPluginAgentClient: POST to /plugins/ograph/dispatch
- Scheduler rewritten: uses AgentClient instead of Telegram/file/CLI
- Removed OC session-status dependency (Plugin manages backpressure)
- Removed cooldown logic (Plugin debounce replaces it)
- Config supports agents[] array with type/url/secret/actor
- End-to-end verified: Engine → Dispatcher → Plugin → Agent session

Closes #32
2026-04-13 07:38:44 +00:00
a3aa77eb31 feat: add event stream discovery mode for P0 Task system
- Add discovery config with agentId and optional eventTypes filtering
- Add fetchEvents method to OGraphClient for event stream access
- Update Watcher to support both projection and event stream modes
- Update Scheduler to format event stream messages appropriately
- Add comprehensive tests for event stream diff logic and API client
- Maintain backward compatibility with existing projection mode
- Support OGRAPH_AGENT_ID environment variable override

This enables P0 Task system to discover changes from event streams
without requiring Projection fixes (#19). Event stream mode activated
when config.discovery is present, otherwise falls back to projection mode.
2026-04-13 04:52:07 +00:00
小橘 🍊
e82fe8eaba
feat: OGraph Dispatcher — dual-loop actor for task notification (#4 P0) (#17)
* feat: add packages/dispatcher — dual-loop OGraph projection watcher + OC scheduler

Adds a new Node.js daemon that:
- Loop A (ProjectionWatcher): polls OGraph projections, diffs against
  snapshot, merges changes into a pending queue.
  - Idle: 30s poll interval; active (changes detected): 5s
- Loop B (OcScheduler): polls OC session-status, pushes pending queue
  when OC has available slots (>= minAvailable).
  - Idle (no pending): 60s; active (pending): 5s
  - Cooldown of 60s after each push to avoid spam

Tech:
- TypeScript + esbuild (zero runtime external deps)
- Graceful error handling: each poll is independent try-catch, errors
  logged but never crash the process
- Config from ~/.config/ograph/dispatcher.json + env-var overrides
- OGRAPH_CONFIG_FILE env var for config path override
- Push via /tmp/ograph-dispatch.json + openclaw message send (best-effort)

Build: npm run build → dist/index.js
Run:   node dist/index.js

* fix: address PR #17 review — package name, tests, shell safety, first-run

---------

Co-authored-by: 小墨 <xiaomooo@shazhou.work>
2026-04-13 10:01:48 +08:00