Releases: unohee/OpenSwarm
Releases · unohee/OpenSwarm
Release list
v0.17.7
Added
Fixed
openswarm stopactually stops a launchd-managed daemon — runslaunchctl bootoutitself instead of only printing a hint. (INT-2798, #296)- Dashboard project disable survives a daemon restart — records the project in the hard
removedConfigPathsdenylist in both tilde and absolute forms. (INT-2799, #301, #302) - Failed-session partial work is committed before the worktree is preserved — captured as a WIP commit on the swarm branch so a manual dir cleanup can't lose it. (INT-2729, #301)
- Lance memory writes no longer collide under
review --max— removed the dead per-searchlastAccessedwrite and added jittered-backoff retry to every memory write. (INT-2817, #303, #304)
Full notes: CHANGELOG.md
v0.17.5
v0.17.4
Fixed
- Reviewer-revise treadmill: failed/rejected attempts persist reviewer feedback and re-attempts start with it injected (both heartbeat paths); a repeating reviewer ends the session early (INT-2474, #230)
- Fan-out winner promotion no longer dies on dirty projects (plain worktree apply + graceful single-worker fallback) (#230)
Full details in CHANGELOG.md.
v0.17.3
Fixed
- Duplicate daemons are no longer spawned next to a launchd-managed instance —
:3847port probe before spawn;status/stopare probe-aware (INT-2473, #228) - Adaptive worker fan-out actually executes — dirty-worktree snapshot seeding instead of a clean-tree bail; execution is visible in stdout (#227)
- Worker validation-evidence gate false-positives: chained commands, .mts/.cts, data-dir exemption scoping, defer-to-reviewer instead of hard-fail (#227)
Added
- Optional
autonomous.maxConcurrentPerProjectcap (#227)
Full details in CHANGELOG.md.
v0.17.2
Fixed
- Review fix workers no longer die at the 5-minute default —
review --max --fixnow gives each area worker a 15-minute timeout, and timeout failures are classified as infrastructure errors instead of being mislabeled as auth/permission problems. Direct API adapters now preserve the sharedtimeoutMs: 0contract as "no deadline". (INT-2350) - Heartbeat Live Log skip spam is collapsed — unmapped/disabled Linear project skips are aggregated per project and repeated identical summaries stay silent across heartbeats. (INT-2350)
- OAuth browser launch is safer and shared — Linear, GPT, and OpenRouter PKCE flows now use one
spawn-based browser opener instead of shell-quoting URLs into per-providerexechelpers. - Auth, MCP, memory, and registry APIs fail more cleanly — auth profile files are shape-validated before use, unknown OAuth providers fail explicitly, MCP registry/tool schemas are sanitized, memory metadata parsing is tolerant, vector search pushes filters into LanceDB, and registry GraphQL list/search resolvers avoid broad in-memory filtering.
- Web/TUI runtime hardening — mutating GraphQL and local filesystem reads now honor origin/token checks, the web server clears its git-status poller on stop, monitor fetches are abortable with timeouts, SSE reconnects reject invalid streams and cap partial buffers, and resumed chat goals/model selectors avoid stale async state updates.
- Task-state and multibyte input regressions restored — Linear sync comments without author metadata still hydrate canonical state when the OpenSwarm marker/prefix match, and the TUI again deduplicates doubled multibyte keystroke events.
v0.17.1
Fixed
- Worktree PRs are actually created now — the
ghhelper inworktreeManagerran with the daemon's own cwd (typically not a git repository, e.g.$HOME), so everygh pr list/gh pr createafter a completed task died withfatal: not a git repositorywhile the branch push succeeded — completed work stranded on remote branches with no PR (80 recorded failures; the only successes were when the daemon's cwd happened to be the target repo).ghnow runs inside the task's worktree, mirroring thegithelper. (INT-2327, #202)
v0.17.0
Added
- Same-project parallel agents — the daemon can now run multiple agents on one project concurrently. The DecisionEngine's hard "one task per project per cycle" rule (whose justifying comment was stale) is replaced by round-robin selection: every pass adds at most one task per project, so no project monopolizes the slots, and later passes fill the remaining slots from the same projects. Active only when the scheduler can actually isolate the runs (
allowSameProjectConcurrent+worktreeMode); file-overlapping tasks within a project are still deferred by the knowledge-graph conflict detection — which this change finally exercises (it was dead code). Verified live: 4 tasks from one project running in parallel worktrees. (INT-2318)
Changed
- Per-project 5h task cap removed — the rolling-window cap (
dailyTaskCap, default 6) silently stalled a project after a productive burst (throttled with an idle scheduler and no error). Like the previously-removed global pace gate, throughput is now governed only by the cron schedule and the Linear rate limiter. Completion records (daily-pace.json) are kept as cost/throughput telemetry. ThedailyTaskCapconfig field is gone; stale keys in existing configs are ignored. (INT-2317)
Fixed
- Vendored dirs no longer poison conflict detection — with same-project parallelism live, the KG conflict detector deferred 4/5 tasks as "conflicting" via vendored
google-cloud-sdk/files (a.py,run.py,api.pysubstring-matched every issue text). The scanner now skips vendored trees (google-cloud-sdk,third_party,vendor(s)), and issue-impact filename matching requires a whole-word boundary and ≥3 chars. A poisoned cached graph shrank 14MB → 52KB on rescan. (INT-2320) - Project cancellation path normalization —
~expansion and relative-path resolution before the exact-or-descendant match, plus a fix for a latent traversal bypass (/dev/WAVE/../WAVE-nextwas cancelled by disabling/dev/WAVE). Thanks to @ag-linden. (#192) An empty/blank cancellation path now cancels nothing instead of resolving to the daemon's cwd. (#197)
v0.16.0
Security
- taskState store hardened — prototype-pollution-safe task map (null-prototype via schema preprocess), fail-closed on a corrupt persisted state file (no silent overwrite), Linear sync-comment trust filter (marker/prefix + author allowlist,
OPENSWARM_TASK_STATE_TRUSTED_COMMENT_USERSfor extras) with an issueId mismatch guard against cross-issue poisoning. (INT-2316) - Telemetry privacy tightened —
command/adapter/eventlabels are sanitized to a strict token shape so dynamic strings can never leak paths or prompt text;installIdis shape-validated; the send timeout is unref'd so fire-and-forget telemetry cannot keep the process alive. (INT-2316) - Web dashboard auth: linear-time bearer parse — replaced a polynomially-backtracking
Bearerheader regex (CodeQLjs/polynomial-redos) with a regex-free parse. (INT-2316) - BS detector catches env-fallback secrets —
process.env.X || "hardcoded-secret"is now flagged (any line mentioningprocess.envused to be excluded wholesale). (INT-2316)
Changed
- Audit hardening batch landed — two full-codebase
openswarm review --max --fixpasses (~130 files) applied per-area fixes: R5 Linear reconcile extended to done→reopened transitions, fix-loop worker errors surfaced (all-failed round stops early),readOnlyadapter option plumbed through the tool layer, locale key coverage, GraphQL resolver and memory-ops cleanups — plus 13 new test files (suite 1326 → 1389). (INT-2316)
v0.15.0
Added
openswarm fixis now multi-language — check resolution auto-detects the project's ecosystem instead of requiringpackage.jsonscripts. First non-empty source wins: an explicit"checks"map inopenswarm.json(key → shell command — the escape hatch for any language and for mixed repos),package.jsonscripts,Cargo.toml(Rust:cargo check --all-targets+cargo testby default;clippy/buildvia--checks lint,build), or Python markers (ruff check ./mypy ./pytest, each included only when the repo is configured for the tool;--checksbypasses the gating). Previously Rust/Python projects always exited withNo checks resolved. (INT-2303)
v0.14.0
Added
- Auto-release on version bump — a push to
mainthat changespackage.jsonnow runs the gate (lint / typecheck / build) and automatically publishes to npm + tags + creates a GitHub release (notes sliced from this file). The release flow is just "merge a version-bump PR". Idempotent. Requires a repo secretNPM_TOKEN. (INT-2270) - CLI update notifier — when the running version is behind npm's latest, the CLI prints a two-line "update available" notice. 24h cached (
~/.openswarm/update-check.json) so it's near-instant and non-blocking; skips non-TTY / CI /--version/NO_UPDATE_NOTIFIER. (INT-2270)
Changed
checkHandlercolors unified onto the shared NO_COLOR/TTY-safe helper (src/support/colors), finishing the CLI/TUI status-consistency work — ~108 hand-rolled ANSI sites now go throughc/status. Output is byte-identical when piped. (INT-2260)- CI
testjob promoted to a hard gate (the suite is green), and lint is now warning-free (36 → 0).
Fixed
- Stale
service.test.tsprovider-override tests — the reapply lives inside the autonomous-start block; the tests drove it with a non-autonomous config. Fixed → the full suite is green (1315 passing). (INT-2271) postbuildchmod +x dist/cli.js— a cleanrm -rf dist && buildno longer leaves the global CLI unexecutable ("permission denied").