You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* feat: v0.6.0 — reliability + remote control
- Fix infinite retry loop: scheduleRetry no longer resets retryCount after MAX_RETRIES
- Orphan PID cleanup on startup: track agent PIDs in data/agent-pids.json, kill survivors on boot
- /status command: active agents, queue depth, uptime via Telegram
- /skills command: lists installed skills with descriptions from .claude/skills/
- setMyCommands() at startup: Telegram command menu auto-populated
- GroupQueue.getStatus(): exposes live queue state for external consumers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* style: apply prettier formatting
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: address CodeRabbit review comments
- Make /skills handler async; await all ctx.reply() calls to preserve chunk order
- Escape skill dir name and description with escapeXml() before HTML interpolation
- Escape group name/JID in /status output with escapeXml()
- Mirror PID tracking on scheduler onProcess hook (scheduled tasks were not tracked)
- Validate agent-pids.json before killing: accept only positive integers, ignore malformed entries
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* style: restage prettier-formatted files
Pre-commit hook was reformatting but not re-staging, causing committed
versions to diverge from what prettier --check expects.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: add setMyCommands mock to telegram tests; fix husky hook to restage formatted files
- telegram.test.ts: add setMyCommands vi.fn() to the mock bot api so connect() doesn't throw
- .husky/pre-commit: add 'git add -u' after format:fix so prettier-reformatted files are
included in the commit rather than left as unstaged changes (was causing CI format checks to fail)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: resolve all pre-existing test failures
- container-runner.ts: replace dynamic require('child_process') with static
import so vi.mock() intercepts execSync in tests
- container-runner.test.ts: add execSync mock to child_process stub
- telegram.test.ts: add setMyCommands to mock bot api (already in previous commit)
All 32 test files, 448 tests now pass locally.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+12Lines changed: 12 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,17 @@
1
1
# Changelog
2
2
3
+
## v0.6.0 (2026-03-19) — Reliability + remote control
4
+
5
+
### Fixes
6
+
- Infinite retry loop eliminated: `scheduleRetry` no longer resets `retryCount` after `MAX_RETRIES`. Previously, a group that hit max retries would silently reset the counter and retry forever.
7
+
- Orphaned agent processes from previous runs are now killed on startup. PIDs are tracked in `data/agent-pids.json` and cleaned up on boot, preventing slot starvation and timeout cascades after a crash or forced restart.
8
+
9
+
### New
10
+
-`/status` command: shows active agents per group, queue depth (pending tasks + messages), and uptime. Available via Telegram.
11
+
-`/skills` command: lists all installed skills with descriptions, read live from `.claude/skills/`. Available via Telegram.
12
+
- Telegram command menu: `setMyCommands()` called at startup so all commands appear with descriptions when the user types `/`.
13
+
-`GroupQueue.getStatus()`: exposes live queue state (active count, waiting groups, per-group task/message queues) for external consumers.
0 commit comments