Skip to content

Releases: dev-dull/mAIndmeld

0.5.4

Choose a tag to compare

@dev-dull dev-dull released this 26 Sep 22:54

Fixed

  • A model participant that is rate limited now waits as long as the endpoint asks (Retry-After, the x-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, and GET /api/health reports rate_limited and rate_limited_until separately from failures.

Added

  • rate_limit_backoff_ms on 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:36fa4fb40c291f3edb81b81648ed9243c5c969d346e48b042fc88056d738cf43
  • ghcr.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

Choose a tag to compare

@dev-dull dev-dull released this 26 Sep 19:39

Fixed

  • Embeddings can now be backfilled: POST /api/kb/index and maindmeld kb reindex embed every decision that lacks a vector from the current model. Before, the only backfill path was unreachable, so enabling search.embeddings_profile on 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's timeout_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:5ef555031c8d412cf56c8d1a6d15973e68c9e13054d51202c77b70c3778cfdf2
  • ghcr.io/dev-dull/maindmeld-runner:0.5.3@sha256:3edd230dc69a3f980f4b3f8b264fa3d4836b6807e6b72dc5b7c94d323a727d09

mAIndmeld 0.5.2: runner survives Kubernetes service links

Choose a tag to compare

@dev-dull dev-dull released this 25 Sep 02:03

Fixed

  • MAINDMELD_PORT and MAINDMELD_BIND values of the form tcp://...,
    which Kubernetes injects into every pod in a namespace with a Service
    named maindmeld, are ignored with a warning instead of crashing at
    start; the runner command no longer loads server config at all. Both
    Kubernetes Deployments set enableServiceLinks: 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:4d8a88b942a8bc55ba6df563f557233ea77a69b89b1e6edd8ea82eb1d7a46c26
  • ghcr.io/dev-dull/maindmeld-runner:0.5.2@sha256:3f79a071a6af43fe771ecc43d6f15e03660a638e8d448b92f8bcbee9a51f52f1

mAIndmeld 0.5.1: room page polish

Choose a tag to compare

@dev-dull dev-dull released this 25 Sep 01:30

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 carries display_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:3eeb1300d6db634476bf5d78e2276fe5595f4179b907c9a377527f5197f262f9
  • ghcr.io/dev-dull/maindmeld-runner:0.5.1@sha256:23d79160f17a9c6f101f726da4f6dfa10bdf6fa69dce07adf63089e89d12cb2d

mAIndmeld 0.5.0: the runner

Choose a tag to compare

@dev-dull dev-dull released this 25 Sep 00:53

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/launches and
    room_invite kind: "harness" ask a runner to start a harness into a
    room; runners subscribe to GET /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/runners and the health endpoint list runners.
  • The runner (#31): maindmeld runner --config runner.json subscribes 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, and runner.json entries 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}; a null in a harness's env removes 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.runner builds maindmeld-runner
    with Claude Code and OpenCode preinstalled, published by CI beside the
    server image; compose.yaml gains a runner profile; 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 take max_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:74c6dcc85f2340f887fe4de0dcae94bd80e01a502a7d29b87ca0a909cd8b148f
  • ghcr.io/dev-dull/maindmeld-runner:0.5.0@sha256:f5eb60fe8380843e23132a11f65ffd375c958690bf941ba7af810206f260ffa6

mAIndmeld 0.4.4: too-large requests shrink the model window

Choose a tag to compare

@dev-dull dev-dull released this 24 Sep 20:08

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 take max_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

Choose a tag to compare

@dev-dull dev-dull released this 22 Sep 16:49

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

Choose a tag to compare

@dev-dull dev-dull released this 22 Sep 16:25

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

Choose a tag to compare

@dev-dull dev-dull released this 22 Sep 15:52

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/health reports each profile's vision flag.

Image: ghcr.io/dev-dull/maindmeld:0.4.1@sha256:4ccc1efb8832dc49b4428106174add368e0c58fdaa0d6fd2a5f9b8b439d1edb9

mAIndmeld 0.4.0: image attachments

Choose a tag to compare

@dev-dull dev-dull released this 22 Sep 15:05

Added

  • Image attachments (issue #2): POST /api/rooms/:code/attachments stores
    one PNG, JPEG, WebP, or GIF beside the room file, checked by its bytes and
    capped per file and per room; messages and room_send take an
    attachment_id and caption; 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.profile names 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 and image_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