openvibers/openvibe.exchange CHANGELOG.md
CHANGELOG.md
Changelog
What changed in OpenVibe.Exchange, newest first.
Unreleased
- Search: one engine by default, honest prices, one combined cap when you compare (2026-11-13). A search now
runs one engine, the router's pick unless you name one; comparing two or three engines is an explicit choice and
shares ONE spending cap that is shown before the run. Prices are words, never "Free": no provider fee, your
instance, included allowance (with the allowance), or your key. Every filter says whether the chosen engine
applies it, we filter the results, or it is not supported and will be refused rather than dropped. Image results
keep the provider's rank beside our order, and the engine list names each supplier's upstream (Google, Bing,
Yandex). New image engines: SerpAPI Google Images and reverse image, SearchAPI Images, TinEye. Pexels says new
keys are paused. Unsplash results have a "Use this picture" action that records its required download event once.
The picture and search views now allow provider thumbnails and the AI image proxy in the CSP.
- Measured, and your own AI usage (2026-11-12). A model page now has a Measured panel from
OpenVibe.Report's public performance rows: first token and whole-answer percentiles, tokens a second, success,
cache hits, what a call and a million output tokens were charged, and calls in the last 30 days. A model below
Report's floor of 20 calls says "Not measured yet". A signed-in person's dashboard Usage adds Your AI usage
(calls, tokens, charged, a call a day and the products), read from Report with the person's own Network session.
Both draw withopenvibe-shared/ov-metrics; the same numbers stay as plain text without JavaScript.
- The public pages of ai.openvibe.services are here now (2026-11-07). The old site's home, prices and latency,
changelog, legal pages and discovery files answer 301 on an exact page map; every API route there is unchanged.
Three pages carry the content:/start(the endpoint, four steps, OpenAI/Anthropic/Link samples, AI's six
operations and app-token path, the sandbox and production table, and the links to the session pages/youand
/runs/:id),/why(the router's own explanation, with a signed-in one-question demo that prints a real run's
explain: objective, selected, every candidate's cost and latency, and why each was passed over) and/faq(AI's
six questions merged with Exchange's, with FAQPage JSON-LD). Sitemap, llms.txt, llms-full.txt and the Markdown
twins (/start.md,/why.md,/faq.md) carry them;openvibe-shared/indexnowpings the new pages on deploy when
INDEXNOW_KEYis set./apiand/startlink to AI's own provider-keys page (/you) because it needs the
person's session. - Pooled machines (
/sell). Under the single-machine card, a signed-in person with two or more of their
machines sees "Pool your machines": the four steps of the design as stacked cards. Choose the machines lists
each machine with its GPU, free VRAM and RAM and Link's measured link in words ("2 ms, 940 Mb/s: good"; a failed
link says the number and the limit, "40 ms; a pool needs under 5 ms"), and a machine on another network is
greyed with its reason. What fits is Link's fit table: a measured speed, or "not measured yet". Approve on
each machine says "Waiting for approval on Laptop" until that machine approves on itself. Offer it shows the
same price, audience and idle-only controls as one machine, with the privacy sentence (the head sees the prompt,
the others only numbers in transit), and nothing is offered until every member approves. "Stop pooling" says what
it does. The machines, pools, links and fit come from Network and AI with the person's own token: Exchange
measures nothing and keeps no pool. The offer card on model pages and/modelssays "Community pool (N
machines)" and only the count; the owner sees the machine names on/sell.
- Private AI. Strict privacy is a switch on
/chatand on the API page's keys. It sends AI theprivatepreset:
only offers that keep nothing and train on nothing (or OpenVibe's own deployments) may answer, the router refuses
with a plain message when none can, and every answer's receipt carries its label (Private, No training, Anonymized,
Community, Standard). - Sealed history. A chat can be sealed with the person's Locker: the browser seals the whole conversation
(ov-locker.js, people-locked to the person) and Exchange stores only the envelope. The chat list shows a neutral
title until it is opened, the model still receives the turn it answers, and the page says so plainly. Account
export carries the envelope and deletion erases it. - The Arena (
/arena). One prompt, two models answering side by side with no names, one vote (left, right, a
tie, or both bad), then both names and their receipts. The pair is chosen from the live catalogue, free-tier
capacity first and different families where possible, and each answer is a normal run on the person's own
allowance. A vote is a Benchhuman_pairwisejudgement for that person, filed under the prompt's task category
(code, writing, chat, reasoning, translation, analysis), rate-limited per person and counted once per round. - Rankings (
/rankings). Bench's board by task category beside the cheapest live price per million in and
out, the measured p50 and uptime, and a value column (rating points above 1000 per dollar of output). A
products-and-apps panel shows which models OpenVibe's products run, and developers' apps as one unnamed row, from AI's aggregate usage
and never a person. - Model changelog (
/status). A daily snapshot of the catalogue inexchange_model_snapshotsnames the
models that arrived, left or changed their price between the last two recorded days, with the dates. - Account data. A person's arena rounds and votes are exported and erased with their account.
- Theme palettes. A Design theme's listing keeps the preview palette from Design's public API (background,
surface, text, accent and up to two more), in a newpalettearray on the API; the card and the listing page draw
it as small swatches. Only#rrggbbvalues are stored and painted; a second refresh leaves the row untouched.
0.1.0 — 2026-10-28
The first version: trade what people make, free and swap only.
- Listings.
exchange_listingswith a unique slug, kind (agent,mcp_tool,template,theme,game_asset,
service), free/swap mode, SPDX licence, semantic version, public manifest, permission passport and a revision
that goes up on every change. There is no price, currency or Billing column; a passport'sspendsis[]and a
table check, the form and the API all enforce it. - The passport. Reads, writes, spends and contacts, declared in the manifest and shown before and after install.
An install stores its own snapshot, so a later edit cannot widen an old install. A manifest that looks like a
credential is refused. - Conformance tests. Submitting a draft runs
manifest,passport,licenceandno_moneyfor its version and
stores one row each. Only the owner can publish, and only when all four passed. - Sandbox. A trial is a manifest/passport dry run with four recorded checks, a 60-minute TTL and at most 20 a
day. A passed trial is consumed by the install. v1 does not execute the listing's code; a real Run sandbox is the
next version's job and the page says so. - Install and revoke.
exchange_installswith one active install per (listing, person), the passport snapshot,
a version and a revision. Revoke is one tap, idempotent, and a fresh trial is needed to install again. - Free and swap. A free listing takes claims (
exchange_offerskindclaim); a swap listing says what it wants
in return and takes offers with a requiredgive. The owner accepts or declines; the sender withdraws. Accepting
closes the listing asgivenorswapped, declines the other open offers and tombstones its Search document. - Safety. The fixed prohibited-items and no-money filter is applied to every listing and offer, in the form and
the API alike;/safetycarries the local-swap rules. - Search. Each public listing is one
search.index-document@1(ownerexchange, typelisting,
/listings/<slug>) queued inexchange_outboxin the same transaction; closing or hiding writes a tombstone. The
relay waits for thesearch.document.writegrant. - Account data. Listings, installs, sandbox trials and offers are exported and erased with an account. A deleted
listing has its words replaced, is closed and is tombstoned in Search; a draft is deleted outright; other people's
listings stay. - The service. Network sign-in as OAuth client
exchange(PKCE S256,exchange_at/exchange_rt/
exchange_oauth), truthful readiness, Prometheus metrics on loopback, discovery, deploy files, and
server-rendered pages with stableex-ids.public/css/exchange.cssandpublic/js/exchange.jsare one-comment
placeholders for the main session. - The first proof.
scripts/seed-proof.jslists a CC0-1.0 Website template, runs its conformance tests, tries it
in the sandbox, installs it with its passport and revokes that install; it is idempotent. - Tests. Migration and constraints, the API, sandbox/install/revoke, free/swap offers, pages and cache, SSO,
Search, account export/deletion, noLooks, safety and the first proof — each file in its own process on a temporary
PGlite database with a mock Network.