One spec version since 0.79.0 (v0.80).
Behaviour changes worth reading before upgrading:
- Extensions (Part L). A plain pip install monkeyllm is unchanged: nothing
is loaded until an operator installs an extension (vine ext install)
and a forest enables it in _meta/extensions.yaml. That file is versioned
and travels in a snapshot; validate reports an extension a forest
expects and this deployment does not have, as a health line and never
as an install. A declared secret may not be written there.
- An extension contributes at named seams (converters, curation, events,
tools, routes under /v1/ext/<id>/, jobs, ranking, prompt, roles) and
never patches. A contribution the host cannot serve is inert and
named, never an error. Handlers marked heavy run in the extension's
own environment and process.
- Audit rows gain via (ext:<id>), nullable. A row written before this
version reads it as absent. principal stays whoever caused the act.
- Model roles carry a kind (chat, embed, vision, transcribe, rerank). An
extension registers a role and is handed a bound caller, never an
endpoint or a key; its spend is metered and capped per extension per
forest, and exhaustion is a refusal.
- The MCP tools/list menu may carry extension tools; its visibility
filter fails closed, so an unrecognised SDK shape yields fewer tools,
never more.
- Station: /v1/ext routes, admin-gated; Studio gains an Extensions
console. New environment: MONKEYLLM_EXT_HOME, MONKEYLLM_EXT_INDEX,
MONKEYLLM_EXT_WORKER_TIMEOUT. pyproject declares an empty extensions
extra as the name a future dependency lands under.
- The demo harness (examples/demo) accepts a model's native function-call
syntax beside the JSON it asks for. Product behaviour is unchanged.
Signed-off-by: Jimmy Wesley <rededown@hotmail.com>