Repository navigation
Version Packages - #43
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
directa@3.1.0
Minor Changes
#41
e607c00-directa daemon restartanddirecta daemon install(an upgrade) no longer stop your running servers. The old daemon steps aside, leaving every server running, and the new daemon picks them up where they are, so open browser tabs, long builds, and in-memory state survive the swap. Any server the new daemon cannot pick up is started again by name, as before.directa daemon stop,directa uninstallin every form (including the Homebrew upgrade step), a logout, and a machine shutdown still stop every server first, because nothing would be watching them afterward. A daemon started by hand with--foregroundalso still stops its servers when it exits, since only servers run under the background agent can be picked up.#41
e607c00-directa lock --pausenow starts your command only once every paused server, and every process it started, has fully exited, so a worker that was slow to shut down can no longer still be holding the file your command is about to change. If a server's stop gives up with processes still running, the lock fails withresource-locked, names that server and points atdirecta why <name>, puts back any server it had already paused, and never runs your command.The command now also sees a
DIRECTA_LOCKSenvironment variable listing the locks held around it (each as the project's full path,::, and the resource name, comma-separated, added after any value already set), so a tool with its own lock for the same resource can tell it is already protected.directa lockreads that variable itself: a command run under a lock that already lists the one it asks for runs at once, so a guarded script that locks the same resource again no longer waits on its own parent. A resource name containing,or::is refused with a usage error, since the list could not be split back apart.Patch Changes
#41
e607c00- directa now states that it needs an Apple silicon Mac. Releases have only ever run on Apple silicon, but the Homebrew cask let an Intel Mac on macOS 26 install a copy that could not open. Homebrew now refuses the install on an Intel Mac with a clear message instead.#41
e607c00-directa ensurenow restarts a server whose status readsunhealthy(its health checks failed several times in a row after it had been healthy) and waits until the new run is healthy, instead of returning the broken server as it was. The restart is the same single stepdirecta restarttakes, including the check that no leftover process still holds the server's port, and the events log records it as a stop with the detailrestarted by ensure: unhealthy. Two sessions ensuring the same unhealthy server at once cause one restart. A server that isrunningwhile its latest check is failing is still waited on, not restarted.#41
e607c00-directa wait --healthyand the healthy status could report a server healthy right after a restart, before it was listening, when its health URL sent a short cache lifetime (Cache-Control: max-age). The health check reused the answer from the server's previous run instead of connecting. Every health check now reaches the server.#41
e607c00- Health reporting now tells the truth about slow and failing servers. A health check'stimeoutMsnow covers the whole check: a server that answers after six or seven seconds passes when the limit is ten, where before every check gave up at five seconds whatever the config said, so a slow cold boot stayed "starting" and then timed out. A check that fails to connect over IPv4 now tries IPv6 only when the connection was refused, and a timeout is no longer retried (which doubled the wait).directa statusanddirecta whyno longer call a server "running and healthy" when its latest health check failed. A running server whose checks are failing is described as such, with how many failed in a row and why ("HTTP 500", "connection refused", "timed out after 10s"). The same information is instatus --jsonaslastHealthCheck(absent when no healthcheck is configured), and the session context lists such a server first with a pointer todirecta why.When
ensure,wait,up,restart, orswitchtime out while a server is still starting, the output now says it is still starting, not failed, and namesdirecta wait <name> --timeout <seconds>to keep waiting. The exit code is unchanged.#41
e607c00- The after-tool hook no longer repeats a server summary it already gave. When Claude Code subagents run beside their parent, or an agent moves between a project's checkouts, each agent now remembers what it was last told about each checkout separately, so unchanged servers stay quiet instead of being announced as new or removed on every call. Two tool calls that finish at the same moment also take turns, so only one of them speaks. A new session or a compaction clears what the agent was told about its other checkouts, so each of them gets a full summary again when the agent returns to it.#41
e607c00- Asking for a server a project does not have now points at where the name lives. When exactly one other registered project defines it, the error names that project and suggestsdirecta status <name> --project '<path>'. When several do, it lists their paths and suggestsdirecta status --all <name>. When none does, the hint isdirecta status --all, which lists every project. Before, the hint wasdirecta status --json, which listed the servers of the project that was asked about but never pointed at the project that defines the name. This coversstatus,open,monitor,restart, and the commands that start, stop, or read logs for a server. A name is never resolved into another project on its own. In a linked worktree without its owndevservers.json, the message now also says that--projectwith the main checkout's path acts on the main checkout's server.#41
e607c00- Running adirectacommand from a directory that no longer exists (for example a removed worktree) now fails at once with a message saying the current directory is gone, and suggestsdirecta status --allto list projects. Before, every command that works on a project spun at full CPU forever. Pass--projectwith a path to run a command that does not need the current directory from there.directa lockstill needs a current directory to run its command in and refuses either way. Agent session hooks and the statusline stay silent in that case.#40
434b032-directa wait --healthystays blocked until a health check has passed for the process that is up now. A check from the process it replaced no longer counts, so a restart that is still coming up is not reported ready, and a server whose latest check is failing is not treated as ready either.directa ensurewaits in that same window instead of returning immediately. Status for the new process no longer shows the previous process's exit.#41
e607c00-directa wait <name> --stoppednow returns only once the server has no process left running. Before, a server whose port was taken by another server kept its process alive but reported as failed, and the wait returned early while that process was still up. If the wait times out on such a server, the message now namesdirecta stop <name>as the next step.