Releases: dev-dull/mAIndmeld
Release list
0.5.4
Fixed
- A model participant that is rate limited now waits as long as the endpoint asks (
Retry-After, thex-ratelimit-reset-*buckets, or a retry hint in the body) instead of retrying within seconds against a per-minute limit and burning the rest of the quota (#58). Being throttled is no longer a failure and no longer marks a participant unavailable, so a limit that clears in a minute does not pause it for ten (#44); each turn that ends throttled doubles the wait instead, up to fifteen minutes, and any answer resets it. The cooldown belongs to the profile, so every room using it holds back until it clears, andGET /api/healthreportsrate_limitedandrate_limited_untilseparately from failures.
Added
rate_limit_backoff_mson a model profile (default 20000): the first step of the doubling wait used when an endpoint refuses without saying how long to wait.
Images (multi-arch):
ghcr.io/dev-dull/maindmeld:0.5.4@sha256:36fa4fb40c291f3edb81b81648ed9243c5c969d346e48b042fc88056d738cf43ghcr.io/dev-dull/maindmeld-runner:0.5.4@sha256:f92edc0d8f775a7082510c230564ca1a09dd1b3752262d782798d2b19c022881
Note: the v0.5.4 tag's tree carries the version bump but not the CHANGELOG heading or the image tags in README and compose; those landed in 7850f6e on main right after. The published images are built from this tag and are unaffected.
0.5.3
Fixed
- Embeddings can now be backfilled:
POST /api/kb/indexandmaindmeld kb reindexembed every decision that lacks a vector from the current model. Before, the only backfill path was unreachable, so enablingsearch.embeddings_profileon an existing store, or changing the embedding model, left earlier decisions out of semantic search for good (#59). The backfill runs in chunks of 32 and honours the profile'stimeout_ms, which the embedding client previously ignored.
Changed
- The room page's Invite box no longer offers "Call a human": the person on the page is the human. Agents still call one with
room_invite.
Images (multi-arch):
ghcr.io/dev-dull/maindmeld:0.5.3@sha256:5ef555031c8d412cf56c8d1a6d15973e68c9e13054d51202c77b70c3778cfdf2ghcr.io/dev-dull/maindmeld-runner:0.5.3@sha256:3edd230dc69a3f980f4b3f8b264fa3d4836b6807e6b72dc5b7c94d323a727d09
mAIndmeld 0.5.2: runner survives Kubernetes service links
Fixed
MAINDMELD_PORTandMAINDMELD_BINDvalues of the formtcp://...,
which Kubernetes injects into every pod in a namespace with a Service
namedmaindmeld, are ignored with a warning instead of crashing at
start; therunnercommand no longer loads server config at all. Both
Kubernetes Deployments setenableServiceLinks: false. Seen on the
first cluster roll of the runner, where the runner pod crash-looped.
Images:
ghcr.io/dev-dull/maindmeld:0.5.2@sha256:4d8a88b942a8bc55ba6df563f557233ea77a69b89b1e6edd8ea82eb1d7a46c26ghcr.io/dev-dull/maindmeld-runner:0.5.2@sha256:3f79a071a6af43fe771ecc43d6f15e03660a638e8d448b92f8bcbee9a51f52f1
mAIndmeld 0.5.1: room page polish
Added
- Room page: the Invite box gains a model row (configured profiles, with
those in the room marked and the health hint shown) and a call-a-human
row; the lobby's create form lists profiles as checkboxes (#46). Health's
profile report carriesdisplay_name. - Room page: messages and the note page render Markdown with a small
dependency-free renderer that escapes first (#43); @mentions of
participants are highlighted and clickable, with the card tinted when
the signed-in person is named (#41); typing @ in the composer
autocompletes participants (#42); the room takes the window's width
while prose keeps a readable measure (#45).
Images:
ghcr.io/dev-dull/maindmeld:0.5.1@sha256:3eeb1300d6db634476bf5d78e2276fe5595f4179b907c9a377527f5197f262f9ghcr.io/dev-dull/maindmeld-runner:0.5.1@sha256:23d79160f17a9c6f101f726da4f6dfa10bdf6fa69dce07adf63089e89d12cb2d
mAIndmeld 0.5.0: the runner
Added
- Tokens may carry an expiry and a room scope; the server mints one per
harness launch, refuses it outside its room, revokes it when the launch
or the room ends, and sweeps expired records (#29, first step of #36). - Harness launches (#30):
POST /api/rooms/:code/launchesand
room_invite kind: "harness"ask a runner to start a harness into a
room; runners subscribe toGET /api/runner/events, claim launches for
a room-scoped token, and report how they ended; the room narrates
requested, started, joined, exited, failed, timed out, cancelled; the
scheduler times out launches that never join and cancels them when the
room closes;GET /api/runnersand the health endpoint list runners. - The runner (#31):
maindmeld runner --config runner.jsonsubscribes to
a server, claims launches for the harnesses it lists, fills a prompt
template, starts the command with a room-scoped token in its
environment, caps its log locally, kills it on cancel or timeout, and
reaps leftovers on restart. Commands come only from the runner's file. - Harness templates (#32):
templates/harness/holds MCP configurations,
a prompt template, andrunner.jsonentries for Claude Code, OpenCode,
Gemini CLI, Codex, Hermes, and Pi, with a table of which are verified;
Claude Code is, from a real launch. Placeholders{prompt}and
{templates}; anullin a harness'senvremoves a variable. - Room page (#33): an Invite box lists the harnesses online runners offer
and launches one; launch states show under the participants and update
live. - Runner packaging (#34):
Dockerfile.runnerbuildsmaindmeld-runner
with Claude Code and OpenCode preinstalled, published by CI beside the
server image;compose.yamlgains arunnerprofile; the Kubernetes
base deploys a runner with its own ConfigMap and Secret. Unprivileged,
no Docker socket; the socket is an opt-in for the runner only. - Docs (#35): the runner in DESIGN.md (scope, section 7.4, decision 16),
OPERATOR.md (setup, config, lifecycle, troubleshooting), README, and
the Kubernetes README.
Fixed
- A model participant that gets a 413, or a 400 naming a length or token
limit, now halves its transcript window and retries at once instead of
counting a failure toward a ten-minute pause; the window creeps back by
one message per reply. Profiles takemax_prompt_chars; health shows the
effective window; single messages over 4,000 characters are clipped in
the model's view (#28).
Images:
ghcr.io/dev-dull/maindmeld:0.5.0@sha256:74c6dcc85f2340f887fe4de0dcae94bd80e01a502a7d29b87ca0a909cd8b148fghcr.io/dev-dull/maindmeld-runner:0.5.0@sha256:f5eb60fe8380843e23132a11f65ffd375c958690bf941ba7af810206f260ffa6
mAIndmeld 0.4.4: too-large requests shrink the model window
Fixed
- A model participant that gets a 413, or a 400 naming a length or token
limit, now halves its transcript window and retries at once instead of
counting a failure toward a ten-minute pause; the window creeps back by
one message per reply. Profiles takemax_prompt_chars; health shows the
effective window; single messages over 4,000 characters are clipped in
the model's view (#28).
Image: ghcr.io/dev-dull/maindmeld:0.4.4@sha256:c3cb2480def9dda1567598d3459177d5c062849090c5769925d3b9db1d429f9f
mAIndmeld 0.4.3: note icon on lobby cards
Changed
- Lobby cards show a memo icon beside the status badge instead of the
note's id; the id stays in the tooltip.
Image: ghcr.io/dev-dull/maindmeld:0.4.3@sha256:3e86abfa2d6c0bdde2b001aec600b1380827550c20b6884658e79fca4c6595a3
mAIndmeld 0.4.2: room page layout
Changed
- Room page, from the review in room MM-SCLF: each message is a bordered
card with its image in a figure and a labelled caption bar (#18); voter
tags are colour-coded pills, panel boxes carry a strip saying whether
they act on the room or on you, and human-only controls carry a mark
(#19); the "You were called" box comes first and loud, and the objective
banner is labelled (#20).
Image: ghcr.io/dev-dull/maindmeld:0.4.2@sha256:824408b14ee82bd8897a7fef56cb88027ac6b682a14538f331bd4e0f76128f63
mAIndmeld 0.4.1: lobby layout
Fixed
- Lobby cards with a note link rendered split apart: the card was an anchor
holding another anchor. The title is now the link, the note a second one,
and clicking the rest of the card still opens the room (#14). - Automatic captions use the profile's own token budget instead of a small
fixed one, which a thinking model could exhaust before answering.
Changed
- Lobby cards have one anatomy: title row with the status badge, meta row,
participants row; participants wrap and are never truncated (#15). - Lobby sections carry a coloured left rail and heading, the create form
matches the cards, and every colour comes from a theme token (#16). GET /api/healthreports each profile'svisionflag.
Image: ghcr.io/dev-dull/maindmeld:0.4.1@sha256:4ccc1efb8832dc49b4428106174add368e0c58fdaa0d6fd2a5f9b8b439d1edb9
mAIndmeld 0.4.0: image attachments
Added
- Image attachments (issue #2):
POST /api/rooms/:code/attachmentsstores
one PNG, JPEG, WebP, or GIF beside the room file, checked by its bytes and
capped per file and per room; messages androom_sendtake an
attachment_idandcaption; the bytes are served to participants or by
a signed five-minute link; uploads never sent on a message are cleaned up.
Models and the summarizer see[image: caption]until the follow-up
issues land. - The room page attaches images (issue #3): a picker beside the composer,
or paste one in; a preview strip with a caption field; the upload happens
on send, so a failure leaves the text and image in the composer; images
render inline with the caption, and open full size in a new tab. - Captions (issue #4): a caption of at least three characters is required
with every image, since it is all that non-vision participants and the
summarizer see.captions.profilenames a vision-capable profile that
adds a one-sentence automatic caption in the background, never blocking
the upload and never replacing the person's caption. - Vision for model participants (issue #5): a profile with
vision: true
gets the newest four images from others as data-URI image parts with
metadata stripped, within 1 MB andimage_max_px; anything else, and
every other profile, gets the caption line. A rejected image part is an
ordinary failure. - The summarizer sees captions only (issue #6): the envelope renders an
image as[image: caption]with any generated description, and the
prompt asks for images to be cited by caption, never by id or link.
Image: ghcr.io/dev-dull/maindmeld:0.4.0@sha256:7ba0ad2c62c1d7b294a2784d91a725b2dde77cb1a5922a05852404ed05ed2b8a