Skip to content

Releases

spore v1.65.0

Choose a tag to compare

@github-actions github-actions released this 13 Nov 09:35

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 on 127.0.0.1:7762
    (it was 8790) and the webhook service on 127.0.0.1:7763 (it was 8742). A file that names its
    listen is 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.md states 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

Choose a tag to compare

@github-actions github-actions released this 13 Nov 07:47

Added

  • Every command exec and wsexec run finds the inline limit in SPORE_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 bounds out and err each 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_BYTES is a name the runtime sets, so a plugin that declares a variable of that
    name is refused.

Changed

  • The default and perennial sporangia 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

Choose a tag to compare

@github-actions github-actions released this 12 Nov 07:28

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 STOP is 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 as unmappedReason.
  • 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. The spore command adds mo chatgpt login where it shows one; a program built on the
    library adds its own, finding the phrase with CHATGPT_SIGN_IN_AGAIN.

Added

  • mohdel's credential step is available as library functions (mohdel/credentials, and
    startLogin and finishLogin for ChatGPT), for a program that sets up model access without a
    terminal. spore setup still runs mo onboard.

spore v1.62.2

Choose a tag to compare

@github-actions github-actions released this 11 Nov 11:29

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. A grep across 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, in withheld: over 4096 bytes or not text. A write reports neither.

Changed

  • spore send, spore attach, spore log and spore sql drop 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

Choose a tag to compare

@github-actions github-actions released this 10 Nov 21:40

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_DISPLAY or XAUTHORITY. A
    program that ran systemctl --user failed on create, the interaction stayed asked, and it
    went through only when spore tick handed 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 from spore 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.md lists the environment a handler program runs in.

spore v1.62.0

Choose a tag to compare

@github-actions github-actions released this 10 Nov 15:38

Added

  • A connector whose people's section takes spores lets 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 in addresses. 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 take spores.
  • A connector that says can.live gets 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. liveView is that view, exported beside renderLive.
  • namesOf in @rhizogrip/spore/relay says which spores a conversation's routing reaches, "*"
    read from home.
  • A connector may have no credentials: its spec's credentials is [].

spore v1.61.0

Choose a tag to compare

@github-actions github-actions released this 10 Nov 07:58

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.json takes interactions: 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. Only what reaches a turn, never a URL, a path or a secret.
  • spore.cmk takes interactions: <n>, the most one turn may ask, and
    interactions.handlers: [...], the handlers this spore may use. A turn granted a handler
    config.json does 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 into interactions/<id>/, read-only to the
    agent, and stamps who asked and where the answer goes. spore tick hands over what a handler
    could not take at once.
  • The outcome comes back through spore-api, at POST /v1/spores/<name>/interactions/<id>/outcome,
    or on the host through spore interaction outcome <spore> <id> [<file>|-], and from the
    library through interactionOutcome. 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

Choose a tag to compare

@github-actions github-actions released this 08 Nov 17:53

Fixed

  • A picture a spore looked at with read stays 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, with SESSION_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

Choose a tag to compare

@github-actions github-actions released this 08 Nov 14:36

Added

  • mohdel 4.10.0, on both the npm and the Cargo side. It adds the tinker provider, Thinking
    Machines' serverless inference for the Inkling models, with the key in TINKER_API_SK. A spore
    can name a tinker/ model in spore.cmk once the catalog has an entry for it. Tinker lists no
    models, so the entries come from a file, with mo model apply.
  • spore setup's expert path lists Thinking Machines Tinker among the providers, and sets up its key.

spore v1.59.0

Choose a tag to compare

@github-actions github-actions released this 08 Nov 10:28

Fixed

  • A spore made from a sporangium other than the default kept that sporangium's name in its
    spore.cmk, and spore show printed it as the spore's name: spore define substack --sporangium humanizer showed name humanizer. A spore made from the default one showed
    name spore. define, from a sporangium, a file or another spore, and fork now write the
    spore's own name, its directory's. Existing spores keep what they have; spore edit changes it.

Changed

  • Redefining a spore with spore define <name> --definition <file> keeps the spore's name, and
    says what changed, as spore edit does. In the library, define's redefined is now
    { changes } rather than { from, to }.