Self-updating worker release: an idle worker keeps itself current from the npm registry, task polling fills free concurrency slots instead of stalling after the first batch, and worker-generated PRs no longer include DevIntern runtime files.
Added
- Worker keeps itself up to date while idle (DEV-123): a globally installed
devintern(npm or bun-g) checks the npm registry at most once per calendar day and, when idle, installs the newer@getdevintern/codeand restarts itself on the new version — no operator action, no interrupted work. The check that comes due while agent work is in flight waits for it to finish and runs on a later idle pass; once idle, new work is held only for the duration of the check and install, and a skip releases the hold immediately. After a successful install the worker shuts down cleanly — under a service manager (systemd user unit, launchd agent) the exit asks for a restart and the manager relaunches it, while in a plain terminal the worker hands over to a freshly spawned process on the new binary by itself. Registry, network, or install failures are logged, the current version keeps serving, and the next idle window retries after the daily interval. Source checkouts,bun link, and localnode_modulesinstalls are never self-updated,DEVINTERN_NO_UPDATE=1/--no-updateskip the check entirely, and[worker].auto_update = falsedisables it for a workspace durably (live-reloaded). Steps are logged into the same capture files the dashboard tails ([update] checking npm …, skip reasons,⬆ Auto-updating devintern X → Y, and the restart)
Fixed
- Worker PRs no longer include DevIntern runtime files (DEV-126): task subprocesses derive auth and license state from their worker workspace and keep it under
<workspace>/state/codeinstead of a throwaway worktree. Worker-managed clones exclude known runtime files from Git while allowing new project config files in PRs. Worker setup copies an existing project sign-in when the workspace has none, existing workspace credentials and relay pairing are migrated, anddevintern worker loginsigns in to the workspace later. Regular single-repo commands remain project scoped. - Worker fills free concurrency slots instead of stalling after the first batch (DEV-127): task polling no longer holds its re-entry gate until every task in a batch finishes. The detect/evaluate/claim phase stays serialized, but polling now continues on its normal interval while tasks run, so a task created during a run is picked up on the next tick and admitted to a free slot instead of waiting for the whole batch to drain. The shared admission supervisor still caps global and per-repository concurrency, a task edited mid-run waits for its in-flight execution rather than starting a concurrent duplicate, cursor compare-and-set prevents overlapping ticks from regressing a newer cursor, and deferred tasks still release their claim and re-detect