Releases: SaberMage/spt-releases
spt v0.16.0
A minor release adding a one-lever adapter-update arc (a delegated post-step), a global --json for status queries, an incremental digest cursor, a persistent spt rc identity marker, and manifest substitution primitives — plus the removal of spt send --reply-to.
Added
- Composite adapter update —
[update.post]. A manifest can declare a delegated post-step thatspt adapter updateruns after the primary update avenue resolves, so one command both pulls the adapter's.spt(e.g. from a GitHub release) and runs an in-harness sync. The post-step runs unconditionally (even on an up-to-date no-op), reads a published JSON line on stdin describing the update, and its stdout decides the post-update notice. A post-step failure warns and falls back — it never rolls back the committed pull. - Global
--jsonfor status queries.endpoint list/whoami,daemon status,subnet status/show-code,endpoint description/role,adapter list/version,notif list,grant list,access list,shell list, andhow-tonow accept a global--jsonflag emitting stable, explicit fields for scripted consumption. (Action commands ignore it.) spt endpoint digestincremental cursor.--jsonoutput gains--last <N>(the last N turns;--last 1is the latest turn), a stable per-entryseqthat survives live re-projection and window slides,--after <seq>(only what is newer, with a full-refresh signal if the cursor fell out of the window), apartialflag on the in-progress turn, and a per-entryts— so a consumer can process turn-ends incrementally instead of re-reading the whole window.spt rcidentity marker. An attached controller now shows a persistent top status row — right-alignedSUBNET : ENDPOINT_ID @ NODEin cyan — so you always know which endpoint you are driving. It re-asserts across alt-screen, resize, and scroll-region resets.- Manifest substitution primitives. Two adapter-static substitution keys —
{adapter_dir}(the adapter's install dir, which survives updates) and{adapter_name}— are available wherever command/string substitution runs, and[strings]values are now substituted atget-stringread time. This lets an adapter resolve a path to its own packed binary without spt-core ever executing it. [message-idle-translation-binary]takes acommand. The idle-delivery translation binary can be declared with acommand(program token plus args, with adapter-static substitution) instead of the barepath, so it can be invoked as a subcommand of a consolidated adapter binary. The spawn and stdin/stdout protocol are unchanged.- Empty-scope creation flow. Running
spt endpoint run(or barespt) on a node with no endpoints at all now opens directly on the adapter-creation screen instead of an empty picker.
Changed
[message-idle-translation-binary].pathis deprecated in favor ofcommand. It still parses (and warns at registration); exactly one ofpath/commandmay be set.
Removed
spt send --reply-tois removed. The send target is now a required positional argument; reply correlation rides the structuralfromon the message envelope. (The flag was a target-fallback nicety with no wire effect.)
spt v0.15.0
A minor release adding per-message delivery controls to spt send, an opaque metadata payload, a resume-context pull command, and a Windows console-flash fix.
Added
spt senddelivery-window controls.--idle-onlydelivers a message only while the target is idle (the idle/wake window), holding until then;--active-onlydelivers only through the target's own poll, without ever waking an idle target. (--active-onlyreplaces the old--deferred, which still works as a hidden back-compat alias.)spt sendchannel controls.--prefer-nativedelivers through the target's translation binary when one is running and falls back to the normal channel otherwise;--force-nativedelivers only through the translation binary, with no fallback or spooling (reported undelivered if none is running).spt send --ephemeraldrops a message that can't be delivered to a translation-binary target within its window, or that expires (TTL), instead of spooling it. (A harness-relay target with no live listener still spools — that evaporation case lands in a later release.)spt send --json-payload <JSON>attaches an opaque JSON metadata blob alongside the message body, carried verbatim for the receiving adapter to parse (it does not replace the body).spt api psyche-download <id>pulls an agent's resume context for an adapter to restore at session start, appending any not-yet-synthesized commune/signoff updates.
Fixed
- Inbound messages are no longer silently lost if the delivery worker faults mid-handoff — they re-spool and surface on the next poll (closes the transient gap left after the v0.14.3 raw-inject removal).
- The spt-hosted translation binary no longer flashes a console window on Windows.
spt v0.14.3
A patch release hardening idle message delivery to spt-hosted endpoints.
Fixed
- Idle messages to an spt-hosted endpoint are no longer silently dropped when delivery can't complete. If no working translation helper is available to submit an incoming message to an idle spt-hosted endpoint, the daemon now queues the message for poll-based delivery and honestly reports it as queued — instead of typing it into the endpoint's terminal without ever submitting it (which looked delivered but was not). Delivery via a working helper is unchanged.
spt v0.14.2
A patch release fixing idle message delivery to spt-hosted endpoints.
Fixed
- Messages delivered to an idle SPT-hosted endpoint are now correctly handled by that endpoint's
message-idle-translation-binary. The daemon now resolves an adapter's idle-delivery translation binary against the adapter's install directory, so it launches correctly; previously the helper failed to start and an incoming message was typed into the endpoint's terminal but never sent.
spt v0.14.1
A patch release: spt adapter add no longer clobbers an existing install and reports its outcome more clearly, and the interactive spt endpoint run picker now lets you choose a new endpoint's home subnet on multi-subnet nodes.
Added
- The interactive
spt endpoint runpicker offers a home subnet. On a node that belongs to more than one subnet, choosing Create new now prompts for which subnet the new endpoint should home to, with your most-recently-used subnet first. (The non-interactive--subnetpath from 0.14.0 is unchanged.)
Changed
spt adapter addis non-destructive. Re-adding an already-registered adapter is now refused, with guidance to usespt adapter updateorspt adapter removeinstead. A fresh install stages the new files and swaps them in only once it is complete, so a failed or repeated add can no longer clobber a working install or leave it half-written (previously this could surface as a cryptic "os error 2").spt adapter addreports its outcome more clearly. Its messages now distinguish an adapter that is installed and ready from one whose install is still pending.
spt v0.14.0
A release focused on how endpoints are created: each endpoint now picks its subnet once, when you create it, on nodes that belong to more than one subnet; and you can attach to an endpoint while it is still starting up, before it is ready to receive messages.
Added
- An endpoint chooses its subnet when you create it.
spt endpoint runhomes a new endpoint to a single subnet for its lifetime. On a node that belongs to just one subnet this happens automatically. On a node in two or more subnets,endpoint runnow settles the subnet up front: interactively it proposes your most-recently-used subnet and asks you to confirm; non-interactively it requires--subnet <name>and, if you omit it, refuses immediately with the list of available subnets instead of hanging. Previously a multi-subnet node could stall silently during endpoint bringup. - You can attach to an endpoint before it finishes starting. Between the moment an endpoint is spawned and the moment it binds, it now accepts a connection:
spt rc <id>(andspt endpoint run --attach) drops you into the live pre-bind session, so you can watch startup or clear a bringup prompt before the endpoint is ready. Such an endpoint is not message-addressable yet — it appears as a hollowUNBOUNDrow in the endpoint picker,spt endpoint list, andspt whoami, distinct from an offline endpoint.
spt v0.13.2
A release focused on adapter packaging and updates: one adapter package can cover several platforms, adapters update live without restarting your agents, installs can pull from private GitHub repositories, plus a few adapter-tooling conveniences.
Added
- One adapter package can cover multiple platforms. A
.sptadapter can now bundle binaries for several operating systems and CPU architectures alongside one shared manifest; installing extracts the shared files plus the binary for your platform. Existing single-platform packages keep working. - Adapters update without restarting your agents. When an adapter updates, the daemon stops just that adapter's background binary, swaps it in place, reloads its manifest, and restarts it — running agents continue across the update.
- Adapter installs and updates can use private GitHub repositories.
spt adapter add --releasecan fetch from a private repo through the GitHub CLI, with no access token to manage. New--gh/--httpsflags choose the transport (default: automatic). - Adapters can show a notice after they update. An adapter may declare a short Markdown message shown once, only when an update is actually applied.
spt adapter version <name>prints an installed adapter's version.spt adapter digest-proofandspt adapter translate-proofcan test an unpackaged adapter via new--dir/--manifestoptions — proof a development or bare-file adapter before it's installed.
Fixed
spt --helpand the CLI reference no longer leak internal tracking codes. Generated help and reference text are swept clean of internal identifiers.
spt v0.13.1
A patch release: an author-time proof tool for idle-delivery translation binaries, plus a correction to the translation-binary contract docs.
Added
spt adapter translate-proof <adapter> --event '<EVENT…>'— validate an adapter's[message-idle-translation-binary]without a live session. It spawns and feeds the declared binary exactly as the daemon does at idle delivery and prints the keystroke commands it emits ({key}/{text}/{delay_ms}/{commit}), failing a binary that emits nothing or never sends a terminating{commit}. The author-time mirror ofspt adapter digest-proof.
Fixed
- The
[message-idle-translation-binary]contract now documents{commit}. The published contract had omitted the mandatory{"commit":true}sequence terminator (and its degenerate example would have faulted at the 5-second commit deadline); it now describes{commit}, the inject floor, and the commit-deadline behavior.
spt v0.13.0
A minor release: idle message delivery for spt-hosted endpoints now runs through an adapter translation binary, spt rc gains real paste, key, and mouse support on Windows and stays attached under heavy output, session resume actually resumes a prior session, and the daemon no longer flashes a console window.
Added
- Idle message delivery for spt-hosted endpoints now uses a translation binary. An adapter can declare a
[message-idle-translation-binary]; spt-core brings it up alongside the endpoint, where it polls the relay for incoming messages and optionally emits keypresses, delays, and text injection that spt-core applies to the endpoint's terminal. Idle delivery now flows through the relay poll for every endpoint, instead of spt-hosted endpoints falling back to direct PTY injection. - Windows paste in
spt rc. Ctrl+V and right-click now paste the local clipboard into the attached agent as a single bracketed paste. - Windows special keys in
spt rc. Arrow keys, Home/End, Delete, function keys and other special keys are translated to terminal sequences and reach the agent — previously only plain characters got through. spt rcforwards mouse scroll to the agent's terminal.
Fixed
- Pasting or typing into an spt-hosted endpoint no longer freezes the daemon. A large paste or input burst could wedge the daemon's input path so every new attach died; input now runs on a dedicated per-session writer and never blocks the daemon (this also covers the effect-journal stall on interactive input).
- Session resume actually resumes now. Agent endpoints track session history and offer explicit session resume via
spt endpoint run(--resume <session>or Resume from history); the adapter manifest can now declare a[session.resume]command so the relaunch reattaches the prior session instead of always starting a new one. The run picker now shows each row's working directory and local time. spt rc --viewviewers survive a high-output terminal. A viewer no longer dies when the output backlog rolls over or it is briefly evicted — it snaps forward or skips to live instead of failing — and a slow controller can no longer starve a concurrent viewer.spt rcno longer races a just-started agent. Attach now waits for the endpoint to come online, instead of failing when you attach immediately afterspt endpoint run.- The daemon no longer flashes or respawns a console window on Windows.
- Windows Backspace and Ctrl+Backspace now do the right thing in
spt rc. Backspace deletes a character and Ctrl+Backspace deletes the previous word (Windows-native), instead of both deleting only a character.
Changed
- The
spt endpoint runpicker is clearer. It opens directly on an existing pick, auto-attaches, shows the controlling node name, and produces clean bring-up output. - Human-prose command output renders Markdown. Prose output (how-to topics and similar) now shows styled headers and emphasis in a terminal and clean plain text when piped — matching the v0.12.1
--helpfix.
spt v0.12.1
A patch release fixing the live-agent lifecycle in a real terminal: attaching to a running agent, keeping it alive when you close the terminal, and the daemon staying responsive now all work as intended. Also polishes spt endpoint list, the run picker, and spt --help.
Fixed
- Attaching to a running agent now shows its output.
spt rc <id>against an agent started withspt endpoint runnow delivers the agent's terminal output immediately, instead of connecting to a blank screen. - Closing the terminal that started an agent no longer kills it. When
spt endpoint runlaunches the background daemon for you, closing that terminal tab or window now leaves the agent running and re-attachable withspt rc <id>. - A crashed agent with a disconnected viewer no longer freezes the daemon. A dead agent process combined with an abruptly-closed
spt rccould previously wedge the daemon so new agents wouldn't start; the daemon now stays responsive and marks the dead agent offline.
Changed
spt endpoint listandspt whoamialways include this machine's local agents — your own just-started agent always shows up. The--localflag has been removed: local agents are now always merged into the listing.- The
spt endpoint runpicker offers the right action. An already-running agent now offers Attach instead of a meaningless "Start now". spt --helprenders cleanly. Help text no longer shows raw**and backtick characters — emphasis and command names display as styled text in a terminal, and as plain text when piped or redirected.