* feat: emit plugin-internal activity events for distinct failure shapes Plugins (scm/tracker/workspace/notifier) call recordActivityEvent directly to surface failure shapes the lifecycle layer can't distinguish from generic "plugin call failed": - scm-github: scm.gh_unavailable (gh CLI missing, deduped per-process), scm.batch_enrich_pr_failed (one PR fails inside an OK batch), scm.ci_summary_failclosed (getCIChecks threw, fell closed to "failing") - scm-gitlab: scm.ci_summary_failclosed, scm.review_fetch_failed - workspace-worktree: workspace.post_create_failed (which command failed), workspace.branch_collision (concurrent session on same branch), workspace.destroy_fell_back (rmSync after git failure → stale metadata) - workspace-clone: workspace.branch_collision, workspace.corrupt_clone_skipped - tracker-linear: tracker.dep_missing (Composio SDK not installed, deduped per-process), tracker.api_timeout (30s abort) - notifier-openclaw: notifier.auth_failed (401/403 distinct from 5xx), notifier.unreachable (ECONNREFUSED) - notifier-discord: notifier.rate_limited (429 budget exhausted) - notifier-composio: notifier.dep_missing (deduped per-process) Adds "tracker", "workspace", "notifier" to ActivityEventSource and the 13 new kinds to ActivityEventKind. Includes regression tests for the 5 MUST emits. Closes #1659 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix: refine plugin activity event classification * fix(openclaw): retry transient unreachable errors before logging * Deduplicate corrupt clone activity events * Deduplicate poll-path activity events --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Co-authored-by: whoisasx <adil.business4064@gmail.com> |
||
|---|---|---|
| .. | ||
| src | ||
| CHANGELOG.md | ||
| README.md | ||
| package.json | ||
| tsconfig.json | ||
README.md
notifier-openclaw
OpenClaw notifier plugin for AO escalation events.
Quick setup
ao setup openclaw
This interactive wizard auto-detects your OpenClaw gateway, validates the connection, and writes the config. For non-interactive use (e.g., in CI/CD pipelines or automation scripts):
ao setup openclaw --url http://127.0.0.1:18789/hooks/agent --token YOUR_TOKEN --non-interactive
Required OpenClaw config (openclaw.json)
{
"hooks": {
"enabled": true,
"token": "<your-hooks-token>",
"allowRequestSessionKey": true,
"allowedSessionKeyPrefixes": ["hook:"]
}
}
AO config (agent-orchestrator.yaml)
notifiers:
openclaw:
plugin: openclaw
url: http://127.0.0.1:18789/hooks/agent
token: ${OPENCLAW_HOOKS_TOKEN}
Behavior
- Sends
POST /hooks/agentpayloads with per-session keyhook:ao:<sessionId>. - Defaults
wakeMode: nowanddeliver: true. - Retries on
429and5xxresponses with exponential backoff.
Token rotation
- Rotate
hooks.tokenin OpenClaw. - Update
OPENCLAW_HOOKS_TOKENused by AO. - Verify old token returns
401and new token returns200.
Known limitation (Phase 0)
- OpenClaw hook ingest is not idempotent by default. Replayed webhook payloads are processed as separate runs.
- Owner: AO integration.
- Follow-up: add stable event id/idempotency key support.