Repository navigation
Conversation
|
Warning This organization's free trial has ended, so Indent couldn't start this review. Manage billing to resume reviews on this repository. |
handle, or before the Exit handler recorded its replay, left WAIT answering NotFound (the intermittent uplink_cli_remote_execution_and_authentication failure on `yas run sh -c 'exit 7'`). This adds the regression test: spawn `exit 7` 50 times and check WAIT returns code 7 after the exit event.
AbstractUnixSocketTransport length-prefixed every send, including the 8-byte preface, and left yasFraming unset, so YasConnection used message framing and the server closed the link on the bad preface. The Node, Bun and Deno Unix socket transports never reached HELLO. The socket is a byte stream: the raw preface followed by u32 length-prefixed frames. Declare yasFraming = "stream" and pass bytes through unchanged in both directions, as the WebTransport, WebRTC and Relay transports do; YasConnection owns the framing. Bun's socket.write accepts only what fits in the kernel buffer and drops the rest, which corrupts a byte stream on large writes. Queue the remainder and flush it on drain.
tsc with moduleResolution "bundler" emitted relative imports exactly as written, without extensions, so importing the published @yas-run/core or @yas-run/react dist from Node ESM failed with ERR_MODULE_NOT_FOUND. Write explicit .js (or /index.js) extensions on every relative import and compile with module/moduleResolution NodeNext, so tsc rejects an extensionless relative import instead of shipping it. Solid's Vite build already rewrote its JS; its emitted .d.ts now resolve under NodeNext too.
The Nix build's local @yas-run/browser package has no "type": "module", so under NodeNext its default export types as the module namespace and tsc rejects init() as not callable. Using the default export from the dynamic import types the same way in both layouts.
@yas-run/core declared a peer on @yas-run/browser >=0.9.0, but the browser package is versioned with each YAS release (0.3.0 today), so a plain npm install failed with ERESOLVE. Use ^0.3.0 and have prepare-release stamp ^<version> alongside the package versions. The browser package is built from crates/browser outside the pnpm workspace, so workspace:* cannot do this at publish. Document the install and wait for the workspace to be ready before creating a session in the Node example; createSession throws until the Terminal family is negotiated.
YasSurfaceCanvas and both views default touchMode to "direct"; the view prop comments claimed pointer emulation.
`yas remote add` writes the home server's `remotes` KV key, but `--on NAME`, YAS_TARGET and `yas.target` were looked up in the legacy yas.remotes file, so a freshly added remote was an unknown target and `yas remote set-default NAME` broke every command. Bare names now resolve against the home server (YAS_SOCK, else the default local instance), following name-to-name entries with cycle detection and refusing disabled entries. `yas remote` verbs without --on also edit the home server rather than the default target, so `toggle` after `set-default` reaches the catalogue that defines the name. Help text and docs describe the catalogue instead of the file.
read_remotes_full wrote `local = local` to a missing yas.remotes, so a lookup created a file. A missing file now reads as an empty list.
A SEQUENCE cursor beyond the terminal's output produced an OutputResult whose start lay after its next cursor. Encoding rejected it and the server answered Internal, so `yas terminal history ID --since SEQ` with a future cursor failed. seq_text now clamps such a cursor to the end and returns no text.
The CLI capped the collected OUTPUT reply at the requested text size, but the reply is an encoded OutputResult with 36 bytes of fixed fields ahead of the text. The cursor probe asks for 1 byte of text, so every probe failed with "query returned 36 bytes; collection limit is 1". That broke `yas terminal wait --pattern` and `yas terminal history --since now` outright, and a full-size `output`/`history` page could trip the same check. The collection limit now adds the framing. With the probe working, `wait --pattern` again takes the cursor before reading and matches only output produced after the wait began.
A command wait that expired before any command it could report on had started answered NOT_FOUND, so `output --wait` without an index exited 1 with a NotFound error instead of the documented 124. The server now answers TIMEOUT in that case (NOT_FOUND stays for an exited terminal or an evicted index), and the CLI maps it to exit 124 with a "timed out" message. A command that is still running at the deadline also prints a timeout note alongside the existing 124. The index-less wait keeps waiting for the running command, or for the next one to start when none is running, so `send` followed by `output --wait` cannot race to the previous command's result. The help, learn.md, and design docs now say so. Adds a server test covering this and the past-end OUTPUT cursor.
`yas terminal start --wait CMD | head -1` panicked with "failed printing to stdout: Broken pipe" once head exited, because the terminal commands printed with println!. They now write through a helper that treats EPIPE as success, so the command finishes normally and exits with its own status (the command's exit code for `start --wait`). Other stdout errors are reported on stderr.
WRITE is a fire-and-forget event, so sending to an exited terminal (or a nonexistent id) silently did nothing and exited 0. The CLI now looks the terminal up first and fails with a clear error and exit 1 when it does not exist or has exited, pointing at `yas terminal restart`.
Restart: the replayable launch record lived in a per-connection map, so RESTART with REPLAY only worked on the connection that created the terminal. Every CLI command opens a new connection, so `yas terminal restart` always answered Unsupported. The launch record now lives on the terminal itself and is replaced by a successful REPLACE restart. Environment: --export-sock / YAS_EXPORT_SOCK and --inject-path / YAS_INJECT_PATH only applied to the Derived environment base, which native launches never use. They now apply to the Server base as well. A Server-base terminal also no longer inherits a YAS_SOCK that names a different server (for example when the server was started from a shell inside another YAS server); an inherited YAS_SOCK equal to this server's own socket is kept, and --export-sock always sets it. Missing program: a CREATE whose argv program is not on the child's PATH answered ResourceExhausted, and a RESTART with one answered Io. Both now answer NotFound, and `yas terminal start` prints "PROGRAM: command not found".
… them follow_until_terminal returned as soon as a snapshot showed the definition stopped, skipping any attempt it had not followed yet. A short attempt that started and finished between two snapshots printed nothing. Follow every new attempt before honoring a terminal phase; FOLLOW replays retained output for a stopped attempt. Human output now also names a trapped or failed attempt and its detail on stderr, and a DEPLOY conflict on a name still held by another definition says which one and what to do, instead of 'Conflict: no detail'.
It only accepts https:// or loopback http:// URLs, never a directory.
yas clipboard set offers text/plain;charset=utf-8, but get asks for exactly text/plain by default, so set-then-get failed with NotFound. Get now resolves a plain-text request (text/plain with or without a charset, or UTF8_STRING) to whichever plain-text type the owner offered.
- capture --scale now resizes the surface with the RESIZE scale extension before capturing instead of being rejected. - capture --quality is removed: Surface CAPTURE has no quality input. - record --codec h264-444/av1-444 announce 4:4:4 through the view color capabilities extension instead of being rejected. - record help names the real default files (.h264, or .obu for AV1). - surface scroll accepts a negative amount, as learn.md shows.
- YAS_AUDIO=0 only kept PipeWire from starting when media input and portals were also off. With either on, the runtime started and desktop audio was still offered and streamed. The output device is now unavailable and OPEN_OUTPUT is refused under YAS_AUDIO=0 regardless of why PipeWire runs. - A viewer at "Desktop default" (0 kbps) reset the encoder to a built-in 64 kbps, overriding YAS_AUDIO_BITRATE. The configured bitrate is now what a server-default viewer, the last unsubscribe, and a pipeline restart use. - When audio cannot start and was not disabled, print one line naming the reason at normal verbosity; -v keeps the detailed lines.
e7afe8d to
82908a4
Compare
0379371 to
4f4945f
Compare
Coverage
|
yas clipboard set offers text/plain;charset=utf-8, but get asks for exactly text/plain by default, so set-then-get failed with NotFound. Get now resolves a plain-text request (text/plain with or without a charset, or UTF8_STRING) to whichever plain-text type the owner offered.
…apture-record-flags; port capture quality removal from main.rs to lib.rs
There was a problem hiding this comment.
Ultimator's review of 6903a67
Gates desktop audio output on YAS_AUDIO separately from the PipeWire runtime, so YAS_AUDIO=0 no longer offers audio when PipeWire runs for media. Makes YAS_AUDIO_BITRATE the "server default" bitrate everywhere, and prints one line when audio can't start. The logic looks right; I found one misplaced doc comment.
1 issue: 1 nit
The open issues and Fix are in the review of 0f93884.
Reviewed in 21s · Session · @ultimator-agent review reviews again · @ultimator-agent fix fixes the open issues
| /// Returns the list of required PipeWire / D-Bus binaries that are not | ||
| /// found on `$PATH`. Empty list means audio can run (provided | ||
| /// libpipewire is also loadable at runtime; see `pipewire_available`). | ||
| /// One-line reason desktop audio could not start, for normal verbosity. |
There was a problem hiding this comment.
⚪ Nit · New function split missing_pipewire_binaries from its doc comment
unavailable_reason was inserted between the existing doc comment of missing_pipewire_binaries ("Returns the list of required PipeWire / D-Bus binaries that are not found on $PATH...", lines 499-501) and that function. That comment now documents unavailable_reason, with a second doc line stacked under it, and missing_pipewire_binaries has none.
Ultimator · issue #1 · reply @ultimator-agent fix 1 to have it fixed
Stacked on #67. Replaces #39, which was opened from indent-com/yas. The help overlay now labels Ctrl+B r "Preview panel" and Tab "Prev / Next pane", which matches what those bindings do. [](https://app.indent.com/c/01a0db15-330c-717e-9ec3-032c80770b1c) Tag `@indent` to continue the conversation here. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Stacked on #69. Replaces #41, which was opened from indent-com/yas. **Restacked onto #25.** #25 moved the native client into `yas-client`, so `Error::GoAway` gained `reason: Option<String>`. Its `Display` prints `disconnected by the YAS server: REASON` when the reason is set. The test is in `crates/client/src/error.rs`. The reason given when a client is kicked now reaches that client. It travels as a new optional Core extension in GOAWAY detail (`GOAWAY_REASON_EXTENSION`, regenerated schema). The CLI prints `yas: disconnected by the YAS server: REASON`. [](https://app.indent.com/c/01a0db15-330c-717e-9ec3-032c80770b1c) Tag `@indent` to continue the conversation here. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
There was a problem hiding this comment.
Ultimator's review of 0f93884
The new commit 1916484 is #68 (help overlay labels, yas open flag refusal) merged into this branch, and it doesn't touch the audio changes. The misplaced doc comment in audio.rs is still there, so issue #1 stays open.
No new issues.
The open issues and Fix are in the review of 0f93884.
Reviewed in 10s · Session · @ultimator-agent review reviews again · @ultimator-agent fix fixes the open issues
ghost
left a comment
There was a problem hiding this comment.
Ultimator's review of 0f93884
The two new commits are other PRs' work merged into this branch (#68 help overlay and yas open flags, #70 GOAWAY disconnect reason), and the base moved to fix/ext-run-output. The audio changes are untouched, so issue #1 (misplaced doc comment at audio.rs:502) is still open.
No new issues.
Open issues: check the ones to fix, then Fix.
- ⚪
#1New function split missing_pipewire_binaries from its doc comment ·crates/server/src/audio.rs:502 - 🔧 Fix the checked issues (all of them if none is checked)
Reviewed in 9s · Session · @ultimator-agent review reviews again · @ultimator-agent fix fixes the open issues
Stacked on #66. Replaces #38, which was opened from indent-com/yas.
YAS_AUDIO=0: desktop audio is no longer offered to viewers, even while PipeWire is running for the camera, microphone, or portals.YAS_AUDIO_BITRATE: a viewer set to "Desktop default" now gets the configured bitrate. Before this change it got a built-in 64 kbps.Tag
@indentto continue the conversation here.🤖 Generated with Claude Code