Skip to content

LiveContext CE v0.2.12

Latest

Choose a tag to compare

@livecontext-ai livecontext-ai released this 14 Aug 08:01

What is new

Generation: images, video and sound from one tool

  • One generation tool produces any asset, whatever its format. The tool that used to be called image_generation now also makes video and audio, so the format has left its name. You name a model; the registry resolves the format, the endpoint, the provider, the parameters that model accepts and what it costs. Onboarding a provider adds no new surface to learn. image_generation stays callable as a deprecated alias, because agent tool configurations store names verbatim and dropping the old one would have silently stripped the capability from every agent already configured with it. A new action='models' returns every model id with what it accepts, its limits and its rate, so an agent can weigh the cost before spending anything.

  • A generation modal that goes from a format to a finished asset. Three steps in the order the decision is actually made: what to produce, then which model and what to say, then the result. The parameters offered are the chosen model's own, read from the live catalogue rather than hardcoded, and the price is stated with its floor and its ceiling next to the rate, because "4 credits per second" for a model whose minimum is 8 advertises a price no short call can have. It runs through the same path an agent uses, so nothing about validation or pricing is special-cased for the button. A refusal is shown in the provider's own words, since every refusal on this path is something the reader can act on.

  • Start a generation from every message composer. Making an image, a video or a sound is often what a message is about, so the entry point now sits in the composer beside the tools that consume one. Direct messages and the builder's chat trigger panels included. The Files page keeps its own button, which moved to the left of "New folder".

  • A core:generate node, with the price shown before the run. Generation is a first-class workflow step now, priced per model and per quantity, per image or per second depending on what the model sells.

  • Eight more providers, plus OpenAI and Google back on the list. Input assets actually work now, Flux exposes its reference image, and each provider is marked in the dialog. A model that takes files says what each input file is and how many it accepts.

  • An agent can be granted generation, with its own toggle. The permission is deliberately separate from the image one rather than inherited from it: that grant was given for images, and a per-second video model spends an order of magnitude more per call, so reusing it would have quietly widened what an already-configured agent may spend.

  • A key-based integration now asks whether you want to use your own. Creating a credential opened straight on "paste your API key" whether or not the platform had a key of its own. OAuth2 always had that conversation through the Standard and Custom toggle; key-based integrations never did. For the ones most likely to be resold, which is every generation provider, that quietly made bring-your-own-key the only path ever shown, and the choice it hid is not cosmetic: it decides who pays.

  • A fresh install has generation models and prices with no network at all. The catalog dump a new install boots from was last refreshed before generation existed, so an air-gapped or never-linked install had every endpoint with an empty descriptor, a registry that resolved zero models, and no prices to attach to anything. A generated seed now ships inside the image, copied verbatim from the same files that author the catalog, so a descriptor and its price cannot disagree. A shipped price stays replaceable by the first real bundle, while a price an administrator set here is preserved.

  • A cloud-linked install can run a seeded generation on the platform key. Every one used to be refused, and the refusal was correct: the relay resolved a price without knowing which model was called or how big the call was, which is two thirds of the question. The cloud now measures the call itself, from the body it already received and with the same descriptor that produced it. Nothing extra travels from the install, and there is nothing for a caller to under-report, which matters because a self-hosted install is the customer's own server: one that declared its own size could call a ten second video one second.

  • The legacy image subsystem is gone. Everything goes through the one path, including the interface that displays a generated asset, which had been built against the old shape and was what made deleting the old module unsafe.

Workflow runs

  • Run a single node without building a workflow around it. workflow(action='run_node') executes one node immediately from a config, with no persisted workflow and no run, so an agent can check that a configuration works before wiring it in. Nothing is written to the run history; the tool result is the only trace.

  • Restart a run from one node instead of firing the whole thing again. An agent whose run went wrong at step 9 of 12 had only "execute", which redid all twelve and paid for them again. workflow(action='restart_from_node') re-runs that node and continues from there, keeping everything the run already produced upstream. On the canvas, "restart from a node" is reachable in automatic mode too, not only step by step.

  • The step list is ordered by the graph, not by arrival. A workflow with parallel branches used to list its nodes shuffled, in whatever order the updates arrived, and an epoch that re-fired part of the graph reshuffled them again. The list is now sorted so that a node never appears above anything feeding it, a branch stays contiguous, and each trigger's graph is emitted whole before the next. The Logs table follows the same order.

  • Every epoch carries its own outcome. A run accumulates one epoch per trigger fire, and its status could only ever describe the last one, so epoch 2 failing among five green fires was not representable and a failed epoch announced "Completed". Each epoch row is badged from its own recorded state now, named by the same rule the run badge uses, so the two cannot contradict each other.

  • "Partial success" describes a node, never a whole run. The verdict is computed in one place on the backend and travels with the run, so the canvas, the panel and the badge cannot each reach their own conclusion from a second copy of the rule.

  • Running out of credits fails the run instead of silently not starting it. An out-of-credit workspace was refused before the run even opened, so nothing was persisted and an unattended workflow, a schedule, a webhook, a form, simply looked like it had stopped working, with the only trace in a server log. The check now happens at each node: the trigger node fails with an explicit "credits exhausted" error and the rest of the graph is marked skipped, which is visible in the run. The run stays reusable, so topping up revives the schedule with no further action.

  • A run is born with its real trigger. Runs were being created against a placeholder trigger identity that no graph matched, which is the kind of defect that surfaces later as a reset acting on the wrong branch.

  • A new epoch no longer inherits the previous one's finished loop. A loop that had terminated stayed terminated for the next fire, so the second run of a workflow could skip its body entirely.

  • A rerun after a closed cycle no longer lands in an empty epoch. It resolves its epoch once instead of twice, takes the same per-run lock the trigger and cycle paths already take, so a concurrent fire cannot move the epoch under the decision, and the wave cap that stops a runaway now says that is what it is.

  • The derived status of a run counts every node. Core, agent and table nodes were left out of the calculation, so a run could report an outcome that its own steps contradicted.

Step-by-step runs

  • A refused step says which of four situations it is in. "Cannot run this node" covered a node already running, a node in another epoch, a node in a different graph and a genuine server error, which need four different reactions from the reader. Each is now named, the live state is read from the shared cache rather than re-derived, the classification is done against the current epoch, and a server error is no longer reported as a refusal. Advice to re-run a node that is running right now is gone.

Integrations

  • 181 new integrations, and the catalog now says 700+. Three lots: 98 chosen by comparing the catalog against the full n8n integration inventory, 38 more closing the remainder of that gap, and 45 widely-used platforms picked from npm download weight and by category. Every one ships with its own icon. Integrations that could not be made to work honestly were documented and left out rather than shipped broken.

  • Request bodies on GET and DELETE were being dropped. A whole class of endpoints declared body parameters that never reached the provider, so the call went out incomplete and the failure looked like the provider's. Fixed at the engine and in every endpoint that matched, with a check in the build so the shape cannot come back.

  • Eleven asynchronous endpoints returned an empty object on success. They now describe what they actually hand back.

  • An integration that declares no authentication prefix gets none. "Bearer" was being forced onto keys that must travel bare.

  • A refusal from an integration reads as a sentence. The raw machine envelope was being handed to the reader.

  • WhatsApp integrations describe what they really return. The Evolution API and WAHA endpoints had output shapes that were partly invented: group creation, participant updates, contact and chat lookups, instance lists, number checks, QR codes and screenshots are all corrected against live responses, and endpoints that could not work were removed rather than left in the list.

Files

  • The folder you are in lives in the URL. A refresh, a Back, or a shared link lands on the same folder, and the breadcrumb is rebuilt from scratch when you arrive cold. Your view and sort choice are remembered.

  • Clicking the same folder twice no longer stacks the breadcrumb. A slow listing keeps the previous folder's cards on screen, and every extra click pushed another crumb, so the header could read "Run 12 / Run 12 / Run 12" and took three Backs to leave. A click that is being ignored now dims the stale cards, so it is visible rather than mysterious.

  • A file produced by an integration is filed under the run that produced it, instead of landing loose.

  • The type filter is a select beside Category, rather than a separate row of controls.

Marketplace and applications

  • The marketplace ranks by popularity instead of by date. It was a chronological feed, so a popular application sank as soon as anything else was published. Browsing now orders by a score built from measured signals only: favourites, installs, and rating weighted by how many reviews back it, so a lone five-star cannot outrank a 4.5 with twenty behind it. Publications with no engagement keep their previous order rather than moving somewhere arbitrary. The default sort is by rating, and the explore filters have been extended.

  • Reviews show who wrote them. Every review was rendered as "Anonymous", because the name was read on one end and injected by nobody on the other. Highlights carry the rating and the install count too.

  • An application can load its example values and reset its data. Two actions in the application toolbar, so they reach the page, the side panel and fullscreen from one place. Loading the examples seeds the interface forms and the trigger panel without submitting anything. Publishers can see the example values they are shipping.

  • The Application tab opens on the epoch you picked in the Run tab, instead of resetting to the newest one.

Your account

  • Deleting an account is cancellable, from inside the app. The backend already refused to purge anyone who signed back in, so nobody was being destroyed by mistake, but that left them stranded: the account stayed blocked, and nothing in the app offered a way back. Signing in now opens a dialog that names the date the purge will act on, explains that nothing has been deleted yet, and offers to reactivate or sign out, translated in all six languages. The deletion itself now removes everything it claims to, the deferral is bounded, and the interstitial no longer defers the deletion it just triggered.

Builder and interfaces

  • Opening a workflow is no longer an undoable edit. The first Undo after loading a workflow undid the loading.

  • File previews stay open when you pan the canvas, and whether they are open is a remembered preference rather than a one-shot action on whatever is currently on screen. The control stays available in edit mode and on runs that produced no file, which is exactly when you would want to ask for it.

  • A navigate action in an interface is matched by its event, not by guessing from a prefix.

  • An agent-facing description now names where a file object comes from, on both ends of the join, and the mocking rules state that a mocked file reference needs its id.

Look and feel

  • One radius ladder across the app. The accent button in the corner of the agent fleet canvas and the one on the workflow canvas are the same object in the same place, and they were drawn as a 44px circle and a 36px square. They share one shape now, and so does everything else that had stayed a capsule: node icons became square-rounded tiles, the step buttons in modals, the send button in the composer, the Install and Open buttons in highlights, and the loading placeholders in Settings, which now have the shape of what they are standing in for. A collapsed sidebar icon looks like the row it stands for.

  • Every multi-step dialog has the same header, including the green completed step.

  • Page actions no longer push list pages sideways on a phone.

Under the hood

  • Tool results keep their metadata on OpenAI-style CLI backends. One missing unwrap was dropping every tool result's trusted metadata on those paths, which is what draws the Connect and approval cards, so they never appeared.

  • The gateway strips the headers that decide what a call costs, so a client cannot describe its own bill. An unreadable success response is an error again rather than a silent acknowledgement, on both the tool path and signal resolution.

  • A pinned credential may only reach its own provider, and never leaves in a shared plan.

  • Two more browser-agent models route correctly. Qwen and Moonshot go through the OpenAI-compatible mapping.

  • Cloud-linked installs are told what the cloud switch covers, and when it cannot pay.

  • A public export no longer carries the production network range, and the Keycloak guards fire for the lane that actually edits production.

Update an existing install

git pull
docker compose pull
docker compose up -d

The compose file pins this release's image tag, so run git pull first. Your data lives in Docker volumes and is kept across updates.

Fresh install

git clone https://github.com/livecontext-ai/livecontext-ce
cd livecontext-ce
docker compose up -d

Then open http://localhost:3000

Images

Pull from whichever registry you prefer, the digests are identical.

  • ghcr.io/livecontext-ai/livecontext-ce:v0.2.12

  • ghcr.io/livecontext-ai/livecontext-ce-frontend:v0.2.12

  • ghcr.io/livecontext-ai/livecontext-ce-bridge:v0.2.12

  • ghcr.io/livecontext-ai/livecontext-ce-screenshot-renderer:v0.2.12 (opt-in renderer profile)

  • docker.io/livecontext/livecontext-ce:v0.2.12

  • docker.io/livecontext/livecontext-ce-frontend:v0.2.12

  • docker.io/livecontext/livecontext-ce-bridge:v0.2.12

  • docker.io/livecontext/livecontext-ce-screenshot-renderer:v0.2.12 (opt-in renderer profile)

  • quay.io/livecontext/livecontext-ce:v0.2.12

  • quay.io/livecontext/livecontext-ce-frontend:v0.2.12

  • quay.io/livecontext/livecontext-ce-bridge:v0.2.12

  • quay.io/livecontext/livecontext-ce-screenshot-renderer:v0.2.12 (opt-in renderer profile)

Each image is also tagged v0.2, v0 and latest if you prefer to track a moving line rather than pin an exact release.