Repository navigation
Releases
Releases · RHIZOGRIP/spore
spore v1.65.0
Changed
- The default ports moved into one block, 7760 to 7769, which holds no registered service and
sits away from the ports development tools contend for. A console listens on127.0.0.1:7762
(it was 8790) and the webhook service on127.0.0.1:7763(it was 8742). A file that names its
listenis unaffected. One that relies on the default moves, so a program or a proxy pointed at
the old port has to follow, or the file has to name the old address. docs/operating.mdstates the block: 7760 is left for a program that puts its own address in
front of spores, 7761 is the web connector's, 7762 a console's, 7763 the webhook's. Teams and
WhatsApp bots keep 3978 and 3979.
spore v1.64.0
Added
- Every command
execandwsexecrun finds the inline limit inSPORE_INLINE_BYTES, in bytes
(4096). An output at or under it comes back in the call record; a longer one is withheld and has
to be read back from its file. The limit boundsoutanderreach on its own. A program can
now cut what it prints into parts that each come back inline. An enzyme sees the same value,
from the command that started its cell. SPORE_INLINE_BYTESis a name the runtime sets, so a plugin that declares a variable of that
name is refused.
Changed
- The
defaultandperennialsporangia describe themselves by what the spore does for the
person: an assistant for whatever you bring it, and one that stays on the job between your
messages.
spore v1.63.0
Changed
- mohdel 4.11.0, on both the npm and the Cargo side. A reply the provider cut is now reported the
same way by every provider, so some turns that went on with a partial reply now stop with
MODEL_REPLY_INCOMPLETE:- Gemini: every finish but
STOPis a cut, a malformed function call among them, and so is a
prompt Gemini blocks. These were taken as complete replies. - Anthropic and Gemini: a stream that ends without the provider's finish is an error. It was
taken as a complete reply holding the partial output. - OpenAI Responses (openai, chatgpt, meta, xai) and Anthropic: a cut for a reason mohdel does not
name is reported asunmappedReason.
- Gemini: every finish but
- The error of a cut reply carries the provider's own reason in its detail on every cut. It was
there only for Gemini blocks and some Anthropic refusals. - A ChatGPT error that signing in again fixes ends with "sign in to ChatGPT again" and names no
command. Thesporecommand addsmo chatgpt loginwhere it shows one; a program built on the
library adds its own, finding the phrase withCHATGPT_SIGN_IN_AGAIN.
Added
- mohdel's credential step is available as library functions (
mohdel/credentials, and
startLoginandfinishLoginfor ChatGPT), for a program that sets up model access without a
terminal.spore setupstill runsmo onboard.
spore v1.62.2
Fixed
- A short output was left out of its call record whenever it held a control character other than
tab, line feed or carriage return, and the record gave no reason, so it read as a command that
found nothing. Agrepacross text extracted from a PDF hit this at every page break, and a
program that colours its output hit it on every line. An output is now text when it is valid
UTF-8 with no NUL byte, and comes back whole.
Added
- A call record shown to the agent names the control characters its inlined content holds, in
controlCharacters, when there are any beyond tab, line feed, form feed and carriage return. - A call record shown to the agent says why a file that is not empty came back without its
content, inwithheld:over 4096 bytesornot text. Awritereports neither.
Changed
spore send,spore attach,spore logandspore sqldrop what a terminal would act on from
what they print to one: escape and control characters, and bidirectional overrides, the same
rule the terminal app already applied. Printed to a file or a pipe, the text is byte for byte
what it was.- The library exports
printable, that rule.
spore v1.62.1
Fixed
- A handler that is a program was started from a turn without the operator's session: no
XDG_RUNTIME_DIR,DBUS_SESSION_BUS_ADDRESS,DISPLAY,WAYLAND_DISPLAYorXAUTHORITY. A
program that ransystemctl --userfailed oncreate, the interaction stayedasked, and it
went through only whenspore tickhanded it over, up to a minute later. A program that opened
a page in the browser opened none. The runner now gives the handler those five from its own
environment, so a handler behaves the same from a turn as fromspore tick. A turn started
where there is no display, over SSH for one, has none to give.
Changed
- A handler program started from a turn no longer gets
SPORE_PATH, which it never got from
spore tick. docs/interactions.mdlists the environment a handler program runs in.
spore v1.62.0
Added
- A connector whose people's section takes
sporeslets a person's entry reach several spores,
{ "spores": ["research", "ops"] }, or every spore in home,"*", read again for each
message, so a spore made or removed is reached or not without a restart. The platform says
which spore each message is for inaddresses. A name the conversation does not reach is
refused there, and so is a message naming none where the entry is"*". "*"is refused in a conversation many people share, and in any connector whose people's
section does not takespores.- A connector that says
can.livegets the running turn as data with each edit of its
working…message, and an edit each time the answer being written grows, so it can show the
answer as it is written.liveViewis that view, exported besiderenderLive. namesOfin@rhizogrip/spore/relaysays which spores a conversation's routing reaches,"*"
read from home.- A connector may have no credentials: its spec's
credentialsis[].
spore v1.61.0
Added
- Interactions. A spore can hand data to a handler the operator describes, end its turn, and
read the result when it comes back, as a new message, however much later. The handler does
whatever it does: shows a page to a person, writes a file a cron job answers, asks another
system. Spore ships no handler. It defines only the protocol between them, in
docs/interactions.md. config.jsontakesinteractions: each handler by name, as{ url, secret, what }or
{ program, what }. A handler at a URL gets signed requests; a program gets the request on
stdin. Onlywhatreaches a turn, never a URL, a path or a secret.spore.cmktakesinteractions: <n>, the most one turn may ask, and
interactions.handlers: [...], the handlers this spore may use. A turn granted a handler
config.jsondoes not describe is refused when it starts.- The agent asks through
$SPORE_INTERACT(handlers,create <handler> <dir>,status,ls,
cancel). The runner freezes the data intointeractions/<id>/, read-only to the
agent, and stamps who asked and where the answer goes.spore tickhands over what a handler
could not take at once. - The outcome comes back through
spore-api, atPOST /v1/spores/<name>/interactions/<id>/outcome,
or on the host throughspore interaction outcome <spore> <id> [<file>|-], and from the
library throughinteractionOutcome. Spore checks it against what it asked, says it once to
the conversation the interaction was asked from, and starts a turn to read it. - A flush's note lists the interactions not yet answered, beside the open question, approvals
and jobs.
Changed
- The workspace schema is 17. A spore migrates on the first open; an older spore then refuses
the workspace.
spore v1.60.1
Fixed
- A picture a spore looked at with
readstays in its conversation as the file's path, and every
later call sends it again. Once that file was deleted, every turn failed before the model
answered, withSESSION_INVALID_IMAGE, until the conversation was flushed. A picture that can
no longer be read, because it was deleted or is no longer granted, is now replaced by a note:
[a picture was looked at here: <path>, which is no longer on disk]. The turn goes on, and
the spore's log has a warning. If the file comes back, the picture is sent again.
spore v1.60.0
Added
- mohdel 4.10.0, on both the npm and the Cargo side. It adds the
tinkerprovider, Thinking
Machines' serverless inference for the Inkling models, with the key inTINKER_API_SK. A spore
can name atinker/model inspore.cmkonce the catalog has an entry for it. Tinker lists no
models, so the entries come from a file, withmo model apply. spore setup's expert path lists Thinking Machines Tinker among the providers, and sets up its key.
spore v1.59.0
Fixed
- A spore made from a sporangium other than the default kept that sporangium's name in its
spore.cmk, andspore showprinted it as the spore's name:spore define substack --sporangium humanizershowedname humanizer. A spore made from the default one showed
name spore.define, from a sporangium, a file or another spore, andforknow write the
spore's own name, its directory's. Existing spores keep what they have;spore editchanges it.
Changed
- Redefining a spore with
spore define <name> --definition <file>keeps the spore's name, and
says what changed, asspore editdoes. In the library,define'sredefinedis now
{ changes }rather than{ from, to }.