openvibers/openvibe.exchange Commits

Point Exchange machine docs to OpenVibe Link (#142)

OP OpenVibers committed 4 days ago · dd6a6e5cb2 · 4 files, +16 −6

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 639d888..e9400dd 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -6,7 +6,7 @@ What changed in OpenVibe.Exchange, newest first.
- **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/Node samples, AI's six
++ 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 `/you` and
`/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
@@@ -16,9 +16,9 @@ What changed in OpenVibe.Exchange, newest first.
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 Node's measured link in words ("2 ms, 940 Mb/s: good"; a failed
++ 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 Node's fit table: a measured speed, or "not measured yet". **Approve on
++ 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
ddiff --git a/README.md b/README.md
iindex 01ac693..03c343a 100644
---- a/README.md
++++ b/README.md
@@@ -48,7 +48,7 @@ signed-in person is `private, no-store`; a public page is `public, max-age=60`.
- `GET https://openvibe.network/api/v1/machines` and `/api/v1/machine-pools` — the person's own machines, their
pools and the machines they can pool, with the person's Network token: names, free VRAM and RAM, the local
network key, and each member's approval and readiness. `POST /api/v1/machine-pools` proposes a pool and
-- `POST /api/v1/machine-pools/:id/revoke` stops it. Node measures the links and the fit; Exchange shows what
++ `POST /api/v1/machine-pools/:id/revoke` stops it. Link measures the links and the fit; Exchange shows what
Network carries and says "not measured yet" when it carries nothing.
AI unreachable is said, not papered over: the catalog read keeps the last good copy for five minutes and the
ddiff --git a/STATUS.json b/STATUS.json
iindex bd883ff..d959cf7 100644
---- a/STATUS.json
++++ b/STATUS.json
@@@ -4,7 +4,7 @@
"stage": "product",
"code": true,
"wave": "W21",
-- "plan": "OpenVibe.Exchange, remade (2026-11-06, round two per the design review): every AI model, one account — live prices, speed and uptime from OpenVibe.AI, model pages with every offer, a three-model chat on the shared conversation UI, one OpenAI/Anthropic-compatible endpoint, selling compute through Node, the uncensored tier with its floor, and AI in OpenVibe. Exchange v1 is retired: pages answer 410 with a pointer, tables read-only.",
++ "plan": "OpenVibe.Exchange, remade (2026-11-06, round two per the design review): every AI model, one account — live prices, speed and uptime from OpenVibe.AI, model pages with every offer, a three-model chat on the shared conversation UI, one OpenAI/Anthropic-compatible endpoint, selling compute through Link, the uncensored tier with its floor, and AI in OpenVibe. Exchange v1 is retired: pages answer 410 with a pointer, tables read-only.",
"runtime": "node 22, express 4, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9",
"port": "5150",
"domain": "openvibe.exchange",
@@@ -16,7 +16,7 @@
"openvibe-sdk v0.103.0",
"openvibe-shared v4.163.0"
],
-- "summary": "OpenVibe.Exchange is the network's AI front. It reads OpenVibe.AI's public catalog and aggregate usage and renders: the home (popular now, cheapest per million, uncensored, community machines, live numbers), /models and /m/<org>/<model> (every offer with price in/out, measured p50/p95, uptime and data policy, a Try it box, curl and the SDK), /chat (one to three models side by side, system prompt, temperature, history in the account, on openvibe-shared/thread), /api, /sell (Node's offer to the network; what is not sold, said plainly), /uncensored (an 18+ confirmation on the account and the hard floor) and /ai (which products run which models, and the daily cost). Chat and Try it are ai.complete runs on the person's behalf (on_behalf_of) with the service's ai.run.create token. Exchange v1 (free/swap listings, passports, sandboxes, installs, offers) is retired: every v1 page answers 410 with a pointer, its JSON API answers 410 exchange.retired, and its tables stay read-only; its tests live in test/retired/.",
++ "summary": "OpenVibe.Exchange is the network's AI front. It reads OpenVibe.AI's public catalog and aggregate usage and renders: the home (popular now, cheapest per million, uncensored, community machines, live numbers), /models and /m/<org>/<model> (every offer with price in/out, measured p50/p95, uptime and data policy, a Try it box, curl and the SDK), /chat (one to three models side by side, system prompt, temperature, history in the account, on openvibe-shared/thread), /api, /sell (Link's offer to the network; what is not sold, said plainly), /uncensored (an 18+ confirmation on the account and the hard floor) and /ai (which products run which models, and the daily cost). Chat and Try it are ai.complete runs on the person's behalf (on_behalf_of) with the service's ai.run.create token. Exchange v1 (free/swap listings, passports, sandboxes, installs, offers) is retired: every v1 page answers 410 with a pointer, its JSON API answers 410 exchange.retired, and its tables stay read-only; its tests live in test/retired/.",
"works": [
"A live home in one centred column: popular models (mark, badges, price, speed, uptime, Try it), a three-line product strip, the endpoint and AI in OpenVibe; a side-by-side answer preview with live prices marked as an example",
"Model family marks drawn as inline SVG glyphs on theme tokens, with the family name as the label; products use their own app marks and full names (OpenVibe.Live)",
ddiff --git a/test/link-brand.test.js b/test/link-brand.test.js
nnew file mode 100644
iindex 0000000..eaa904f
---- /dev/null
++++ b/test/link-brand.test.js
@@@ -0,0 +1,10 @@
++'use strict';
++const assert = require('node:assert/strict');
++const { spawnSync } = require('node:child_process');
++const path = require('node:path');
++const root = path.resolve(__dirname, '..');
++const oldName = ['OpenVibe[ .-]No' + 'de', 'openvibe-' + 'node', 'no' + 'd_', 'node[.]openvibe[.]network', 'node:lnk_', 'openvibe[.](bot|my|network)/mach' + 'ines'].join('|');
++const result = spawnSync('git', ['grep', '-n', '-I', '-i', '-E', oldName, '--', '.', ':!migrations/**', ':!test/link-brand.test.js'], { cwd: root, encoding: 'utf8' });
++assert.ok(result.status === 0 || result.status === 1, result.stderr || 'git grep failed');
++assert.equal(result.status, 1, `Old Link brand or principal returned:\n${(result.stdout || '').split('\n').slice(0, 10).join('\n')}`);
++console.log(' ok old Link brand and principal IDs are absent');