Skip to content

v0.2.5

Choose a tag to compare

@github-actions github-actions released this 01 Sep 13:29
· 3 commits to main since this release
b82ffb2

Everything here landed after v0.2.4. The full
record is in CHANGELOGS/v0.2.5.md.

Reading the world

Word documents can be read for their meaning rather than their markup — .docx into markdown, plain
text or a typed block tree, with no Office on the machine — and spreadsheets are addressed by column
header instead of cell coordinates, so appending a row does not depend on knowing where the table
currently ends.

The two tools an agent navigates a project with were brought up to what a person at a shell expects.
system_search_text gained context lines, multiline patterns and cheap files_with_matches / count
modes; system_list_files gained max_depth and returns an indented tree in one call instead of one
call per directory. Both came out of watching weak models fail — one walked a 32,000-page reference
without ever reaching the search tool, another descended a project directory by directory — so their
descriptions now say when to reach for them, not how they are built. Ripgrep ships with the agent
and is resolved by an explicit path: finding rg on PATH meant whoever could write earlier into
PATH got to run code inside a tool declared read-only.

Talking to other people's tools

SPLA has served its own tools over MCP for a while; it can now consume somebody else's. A project
lists servers in its configuration, they connect at startup concurrently — one bad server cannot take
down the rest — and their tools appear under a prefix, rebuilt when a server says its list changed
and torn down when it drops.

The permission story is deliberately blunt. A foreign tool declares none of SPLA's own risk axes, and
guessing them from a description a stranger wrote would hand the boundary to that stranger — so
foreign tools get their own axis, are denied in Chat and asked about everywhere else, and the grant
is taken on the whole server, not per tool
. The settings panel says that out loud rather than
implying a finer model exists. Secrets in a server's env or headers resolve at connect time and never
travel back into settings.

Work that outlives the turn that started it

A tool call can run detached from its turn: the agent gets a task id immediately and the result
arrives on the chat's next turn, with task_list / task_output / task_cancel managing what is in
flight. Its progress reaches the chat window live and survives the human's next turn. A message sent
into a busy chat queues instead of being refused, and Stop stops everything at once and says what it
stopped.

Chats, shells and the hub

A chat can be archived instead of deleted, and delete now cleans up the backups and images it used to
leave behind. A shell command that stops to ask a question surfaces the question instead of hanging,
and one that simply goes quiet reports itself as still running after a configurable idle period
rather than holding the call open forever. The hub can follow the OS light/dark setting, and
spla mcp joins an already-running instance instead of starting a second runtime.

The architecture diagram editor — experimental, as-is

The diagram editor (@spla/diagram) is an experimental feature and is shipped as-is. It is under
active development, its model contract is still moving, and neither the file format nor the editor's
behaviour is stable between releases yet. It is included because it is already useful for working on
SPLA's own architecture, not because it is finished. Expect rough edges, and do not build anything on
the file format that you are not prepared to migrate by hand.

With that said, it changed more than anything else this cycle. It stopped being a single 1954-line
index.html and became a real package with a canvas usable on its own, then grew into a workbench:
a ribbon, dockable panels that can be grouped or floated, persistent layout, filters, a theme
gallery, and interface localization kept strictly separate from the language the diagram's data is
written in. The model moved to a multi-file project format and then to contract v3, where every
translatable value records who wrote it and what it was translated from — so a translation whose
original has since changed is a finding rather than a silent lie — and every view declares what its
containers classify. Prose and source code can now be read and written on the element itself instead
of in the JSON. Connection routing stopped guessing at geometry: a shape states its own safe
attachment zones, which is why parallel edges no longer collapse into one line, and what makes
non-rectangular shapes possible at all.