openvibers/openvibe.exchange CHANGELOG.md

CHANGELOG.md

main 9.4 KB · 109 lines · markdown

1# Changelog
2
3What 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
73The 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