46 lines
1.7 KiB
Markdown
46 lines
1.7 KiB
Markdown
# MACP Phase 2A
|
|
|
|
MACP Phase 2A adds the repo-local event bridge that makes orchestrator lifecycle events consumable by external systems.
|
|
|
|
## What Changed
|
|
|
|
1. `tools/orchestrator-matrix/events/event_watcher.py` polls `.mosaic/orchestrator/events.ndjson`, parses appended NDJSON events, dispatches callbacks, and persists a byte-offset cursor in `.mosaic/orchestrator/event_cursor.json`.
|
|
2. `tools/orchestrator-matrix/events/webhook_adapter.py` forwards selected MACP events to a configured webhook endpoint with bounded retries and optional bearer auth.
|
|
3. `tools/orchestrator-matrix/events/discord_formatter.py` renders task lifecycle events into concise Discord-friendly status lines.
|
|
4. `bin/mosaic-macp` adds `watch` mode for one-shot or continuous event processing.
|
|
|
|
## Watcher Behavior
|
|
|
|
1. File watching is polling-based and stdlib-only for portability.
|
|
2. The watcher resets its cursor if the events file is truncated.
|
|
3. Corrupt JSON lines are logged to stderr and skipped.
|
|
4. A trailing partial line is left unread until the newline arrives, preventing half-written events from being consumed.
|
|
|
|
## Webhook Configuration
|
|
|
|
Configure `.mosaic/orchestrator/config.json` under `macp.webhook`:
|
|
|
|
```json
|
|
{
|
|
"macp": {
|
|
"webhook": {
|
|
"enabled": false,
|
|
"url": "http://localhost:8080/macp/events",
|
|
"auth_token": "",
|
|
"timeout_seconds": 10,
|
|
"retry_count": 2,
|
|
"event_filter": ["task.completed", "task.failed", "task.escalated"]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## CLI
|
|
|
|
```bash
|
|
mosaic macp watch --once
|
|
mosaic macp watch --webhook
|
|
```
|
|
|
|
`--once` performs a single poll and exits. `--webhook` enables delivery via the configured `macp.webhook` block while still printing Discord-formatted event lines to stdout.
|