Releases: oxgeneral/ORCH
Releases · oxgeneral/ORCH
v0.2.0
Changelog
0.2.0 (2026-03-13)
New Features
orch updatecommand — check for updates and install the latest version from npm (orch update --checkfor check-only mode)- Background update notifications — CLI silently checks npm registry (4h cache) and shows a notification when a newer version is available
- Lazy command loading — commands are dynamically imported on demand, reducing CLI startup time ~40%
- Light/Full container split — read-only commands (task, agent, status, logs, config, context, msg, goal, team) use a lightweight container without loading adapters, ProcessManager, or LiquidJS
--helpfast path —orch --helpandorch --versionskip container initialization entirely
Bug Fixes
- OOM fix (runtime) — truncate event data before event bus and JSONL writes; replace unbounded
readlinewith backpressured Buffer-based stream reader - OOM fix (startup) — replace N×M file reads (277 tasks x 376 runs = 104K reads) with single
listAll()pass; add 50MB JSONL file size guard - cancelTask/forceStopAgent lock bug — both methods now auto-acquire lock via
withTemporaryLockwhen called standalone (previously always threwLockConflictErrorfrom fresh Orchestrator) - task cancel for running tasks —
orch task cancelnow usesorchestrator.cancelTaskforin_progresstasks (kills agent process, cleans state) - State machine violation — remove
in_progress → doneshortcut, enforce mandatoryreviewstep - Truncated JSON in TUI logs — add
extractSummaryFromTruncatedregex fallback for truncated event data [undefined]in TUI — fix fallback to[${type ?? role}]$EDITORwith args —code --waitno longer fails with ENOENT--sincein logs — no longer loads entire JSONL into memory- NO_COLOR compliance — respect
NO_COLORenv var per no-color.org spec - Done tasks showing wrong time — use
updated_atinstead ofcreated_at - Race condition in TUI — move
setTaCursorColout ofsetTaLinesupdater - Process spawn — add
proc.unref()after detached spawn to unblock parent exit isProcessAlive— return true on EPERM (process alive, no permission)- Retry backoff — fix off-by-one using
attempts - 1for correct backoff start - Scope overlap — fix
patternsOverlapfalse negative for sibling paths - CJK/emoji titles — fix
prepareWorktreeempty branch name sanitizeId— reject forbidden characters instead of silently strippingappendJsonl— truncate data to PIPE_BUF (4096) for atomic O_APPEND writescancelTaskabort — call.abort()on AbortController before deleteforceTaskToReview— now clearsagent.current_task
Performance
- Progressive history loading — parallel I/O in
onLoadHistorywith batched setState (80ms flush) readJsonlTail— read last N records from JSONL without loading entire file- EMFILE protection — batched
Promise.allreads in groups of 64 - Vitest threads pool — test suite runs ~12% faster
Architecture
buildLightContainer/buildFullContainer— split DI container for fast startupreadLinesgenerator — Buffer-based with backpressure, replacesreadline.createInterfaceserializeEventData— DRY event serialization with 3-layer truncationresolveFailureStatus— extracted from duplicated retry logiccreateTokenUsagefactory — ensurestotal = input + output- Atomic cache writes — update-check uses temp file + rename
Tests
- 851 tests (up from 737 in 0.1.0)
- New coverage: process-manager, streamEvents, lazy routing, task cancel, progressive loading, context, token usage, retry status
0.1.0 (2026-03-12)
Initial release.
v0.1.0 — First Public Release
v0.1.0 — First Public Release (2026-03-12)
61 commits | 74 files changed | +7,246 / -1,016 lines | 737 tests
Major Features
- Inter-agent messaging & team coordination — agents can send direct messages, broadcast, and coordinate within teams (
orch msg send/broadcast/inbox) - Agent Teams — create teams, assign leads, multiselect members via TUI wizard; team section headers and badges in Agents tab
- Goals as first-class entities — dedicated Goals tab in TUI, goal CRUD via
orch goal, pause/resume with autonomous task lifecycle management - Autonomous agent mode — goal-directed work generation; agents auto-create subtasks, track progress, and work in a continuous loop until goal is achieved
- Default Agent Creator —
orch initnow bootstraps an Agent Creator agent out of the box - Global config & settings wizard — activity filter presets, interactive config via TUI
- Log filter bar redesign — split into two logical lines for better UX
Bug Fixes
- Paused goals still executing tasks — now disables autonomous mode and cancels pending tasks on pause; re-enables on resume
- Agents not picking up new tasks — added reactive dispatch on task completion (500ms instead of 30s polling wait)
- Scope overlap dispatch — blocks conflicting tasks instead of just warning
- Orphaned child processes — kills process group (
-pid) instead of single PID - TUI flicker — global animation tick,
React.memo,useMemofor header stats - Inbox expiry bug, logs
--sincetruncation, stale closures, duplicate team headers, layout overlap
Performance
- Reactive dispatch on
task:createdand task completion — agents pick up work immediately - Parallel I/O in logs, cancel operations, and task reads (
Promise.all) readEventsTailfor efficient log reading without loading entire JSONL files
Code Quality
- Agent prompts rewritten — removed 120+ lines of duplicated goal-handling instructions; moved to conditional template section
- Agent Creator prompt translated to English for global use
AUTONOMOUS_LABELconstant used everywhere (no hardcoded strings)- 8 simplify passes — deduplicated wizard code, centralized glyphs, extracted helpers, removed dead code
isDispatchable()— single source of truth for dispatchable task statuses
Documentation
- SPEC.md updated: module structure, dispatch sort, event types (11→31), new sections (Goal, Team, Message)
- USER_STORIES.md audited: 13→142 stories with test coverage, 6 new epics (EP-22..EP-27)
- README updated: 737 tests badge, GitHub stars badge, Community section
Tests
- 737 tests (736 green, 1 known flaky lock-concurrency)
- New test suites: goal-service autonomous mode (21 tests), scope overlap dispatch, default Agent Creator, process signals, readJsonl corrupt lines