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