Releases: amlyczz/dsh-agy-link
Release list
v0.3.5
v0.3.4 — first-turn thinking, deferred placement
v0.3.4 — first-turn thinking chip restored, placement fixed by deferral
agy attaches usage (and with it thinking_tokens) to the answer step's
DONE tail, after the text fragments already streamed. Two previous
attempts at placing the thinking annotation both failed:
- v0.3.2 annotated at DONE arrival -> the chip wedged mid-sentence
between two text fragments; - v0.3.3 guarded against that by skipping the annotation whenever the
step had streamed text -> the FIRST turn of a conversation (a simple
streamed answer) showed no thinking at all, and later tool turns then
showed theirs, reading as "the first turn's thinking arrived late".
Now the annotation is deferred: steps that have not streamed text yet
(thinking-only turns, one-shot envelopes) annotate first as before;
streamed steps emit the chip right after the step's text completes, so
it is always present and never inside a sentence. Verified against a
live agy 1.1.15 run: fresh conversation, trivial question -> reasoning
chip present, full text intact, stop finish.
v0.3.3 — run_code dispatch path + clean thinking placement
v0.3.3 — ride the run_code dispatch path; stop mid-text thinking chips
Fixes the two issues reported on 0.3.2 in the live GUI:
- unknown tool "agy_tool" on dispatch: this DSH deployment only lets a
model call run_code directly; every other tool must be invoked from
inside a run_code program. Span cuts now address run_code with a
generated one-line program that calls the registered agy_tool mirror —
the inner dispatch replays the recording and renders the native tool
card (terminal / diff / read / search). Cursor-only (run, step)
invocations are first-class: the mirror schema makes tool/input optional
and presenters enrich them from the recording. - thinking chip wedged mid-text: agy streams answers in fragments and
attaches thinking_tokens to the DONE tail; v0.3.2 annotated at that
point, splitting the reply. The annotation now fires only while the step
has not yet streamed text — one-shot answers keep their leading thinking
line, streamed answers stay clean.
Also: tool cards read agy's PascalCase argument keys (CommandLine,
AbsolutePath, SearchDirectory, WorkingDirectory, …) instead of falling
back to raw JSON titles.
v0.3.2 — fix unknown-tool race + one-shot thinking
Fixes two regressions reported on 0.3.1:
- unknown tool "agy_tool": tool registration used a one-shot ctx.get at plugin load, losing the race against the tools service startup (same root cause as the earlier /status 404). Registration is now reactive via ctx.inject and survives any load order.
- First question showed no thinking: agy answers trivial questions in a single DONE envelope (text + usage together, no separate thinking step), which the mapper never annotated. Every text step carrying thinking_tokens now annotates the thinking turn first.
v0.3.1 — fuller agy tool vocabulary
Maps the rest of the agy tool vocabulary (view_file, list_dir, delete_file, search_file_content) onto the matching native card kinds: read cards with follow-along file locations, delete cards, and search cards.
v0.3.0 — native tool cards
Native tool cards. agy tool activity now renders with DSH's own tool-call UI instead of text annotations: terminal cards for run_command, inline diff cards for file writes, read/search cards for the rest, and errored tools as native error results.
Each completed agy tool step cuts the adapter's span with finish: tool-calls addressed to the internal agy_tool mirror; DSH's agent loop dispatches it (replaying the recorded output), records real tool events, and re-calls the provider to continue the same run.
v0.2.9 - tool activity in the reply body
What's changed (0.2.9)
Tool activity now renders in the reply body
User feedback on 0.2.8: tool annotations buried inside the DSH thinking fold were invisible and felt wrong. agy tools now render as visible lines in the message body:
🔧 [agy tool: write_to_file] {"TargetFile": "..."}
-> 7 lines, 180 bytes
They cannot become native DSH tool cards: a finish: tool-calls would make the DSH agent try to execute tools it does not own — agy runs its own closed tool loop inside its child process.
The thinking panel keeps only real thinking signal
[agy thinking turn · N thinking tokens]turn annotations (agy print mode never streams thinking text — verified against the live CLI at effort=high)- terminal error notes when a run ends with an error
74 tests green.
v0.2.8 - fix real agy 1.1.15 stream parsing + webserver race
What's fixed (0.2.8)
Real agy 1.1.15 stream format
The parser only understood hypothesized flat event shapes — the live CLI nests every step payload under a step_update envelope and uses a different vocabulary (agent_response + text_delta fragments, tool with tool_name/tool_info). Thinking and tool activity were silently dropped; only the final result text survived. Both shapes are now parsed.
Visible thinking turns + tool activity
agy print mode never streams thinking text (only thinking_tokens usage), so each thinking turn surfaces as [agy thinking turn · N thinking tokens], tools render [agy tool: name] args -> output, failures render [agy tool error: name] message.
Settings page was stuck on "binary: not found"
/plugins/agy-link/* routes never registered on dsh web — a one-shot ctx.get('webServer') raced the server startup. Routes now attach reactively via ctx.inject.
Auth always showed "unknown"
Status surfaces now lazily probe the real login state via agy models (60s cache) and report ok / signed-out truthfully.
agy models deadlock
agy reads stdin when it is a pipe and never sees EOF — model discovery silently timed out and the catalog always fell back. Stdin now closes right after spawn. Also parses the TAB-separated table format.
Removed: sidebar footer AGY button
Login (QR + authorization code) and mode/effort controls moved to Settings → Antigravity.
74 tests green.
v0.2.7
What's Changed
- Visible agy status in DSH:
- conversation header
AGYpill - Settings → Antigravity status page
- sidebar footer label
- conversation header
- Workspace auto-binding: agy runs in the DSH session cwd when
workspaceRootis not configured - New
/agy workspace [path]command andDSH_AGY_WORKSPACE_ROOTenv - README language switcher at the top (中文 / English)
Full diff: v0.2.6...v0.2.7
v0.2.6 - fix streaming: lossless-JSON chunks
v0.2.6 - fix streaming: lossless-JSON chunks
Real agy sessions crashed with: session event "assistant/chunk" carries non-JSON-serializable data.
DSH's session layer rejects any chunk whose fields are undefined (lossless-JSON boundary). Four sites assigned undefined into chunk/event objects - every usage event, replayState-less finish, and parser event could kill the turn, which also stopped thinking from streaming:
usageFromRaw: cacheRead/cacheWrite/reasoningTokens set to undefinedfinish:replayState: undefinedwhen no conversation idparseUsage: input/output/thinking/cache fields set to undefined- parser events:
tool/error/conversationIdset to undefined
All four now omit absent optional fields instead of assigning undefined. New test/lossless-json.test.ts replicates the dsh-session lossless-JSON walker and asserts every emitted chunk survives it (63 tests green).