Netclaw 0.7.9
0.7.9 2026-03-21
Netclaw v0.7.9 — Slack delivery hardening, config watcher fix, webhook schema fix, and token usage fix
Slack
- Fixed Slack delivery failures being silently swallowed —
SlackReplyClientwas discarding the return value ofChat.PostMessage()and relying on SlackNet to throw onok:false. A bug in SlackNet 0.17.9 causes phantomOk=trueresponses when the HTTP body is empty, so delivery failures were counted as successes. Responses are now validated — null or emptyTsthrowsSlackMessageDeliveryExceptionwith aphantom_successerror code, and the full error is fed back to the LLM session. AddedSlackExceptioncatch and response validation toSlackOutboundClient, which previously had zero error handling.netclaw statsnow showsposted/rejected/failedcounters instead of the oldposted/failed/plain_text_fallbackcolumns. (#375)
Config
- Fixed OAuth token refreshes causing daemon restarts mid-session —
ConfigWatcherServicewas watching bothnetclaw.jsonandsecrets.json, so writing a refreshed OAuth token triggered a full daemon restart, killing active turns. The watcher now monitors onlynetclaw.json; secret changes are loaded on-demand and never require a restart. (#373) - Fixed
netclaw doctorrejecting configs with"Format": "Slack"on webhook targets — theFormatfield was added toWebhookTargetbut omitted fromnetclaw-config.v1.schema.json, which uses"additionalProperties": falsethroughout. Anynetclaw.jsonthat set"Format": "Slack"on a webhook was flagged as invalid by the schema doctor check. The schema now includes theFormatenum and the field is optional (defaults toGeneric). (#369)
Stats
- Fixed
netclaw statsalways showing zero token usage — OpenAI-compatible providers send token counts in a final SSE chunk that has an emptychoicesarray.ParseStreamingUpdatesreturned early on empty choices before reachingParseUsage, silently discarding all token data. Usage-only chunks are now processed before the early return so token statistics flow through toDailyStatsActor. (#367)