openvibers/openvibe.wiki Commits

The wiki's Link page and references use the new name (#264)

OP OpenVibers committed 3 days ago · 038a0b5cda · 3 files, +21 −11

The seeded OpenVibe.Node page, the pages that link to it, its repository and README citations and the shelf icon still carried the old name. They now say OpenVibe.Link / OpenVibe Link and the openvibe-link command, and a guard test covers the old brand and ids.

Changes

ddiff --git a/seeds/openvibe.json b/seeds/openvibe.json
iindex a101627..02ed67e 100644
---- a/seeds/openvibe.json
++++ b/seeds/openvibe.json
@@@ -10,7 +10,7 @@
{
"title": "OpenVibe",
"parent": null,
-- "body": "The **OpenVibe network** is a set of services built in the open by OpenVibers, whose repositories are published in the [OpenVibers](https://github.com/OpenVibers) GitHub organisation. [[OpenVibe.Network]] is the network's identity and account service. This space describes the network's products as their README and STATUS files state them at the cited commits. How every site looks and behaves is the [[OpenVibe design language]].\n\n## Streaming and media\n\n- [[OpenVibe.Live]] — the streaming front: ingest, viewer playback, channels, streamer tools and moderation.\n- [[OpenVibe.Media]] — the multi-tenant media service for VODs, clips, files, thumbnails and storage tiering.\n- [[OpenVibe.Zone]] — private S3-compatible storage zones for every project.\n- [[OpenVibe.MediaHub]] — openvibe.download (a private drive), openvibe.video (uploads and AI edits) and openvibe.pics (pictures).\n- [[OpenRestream]] — the ingest and restream control plane extracted from OpenVibe.Live.\n\n## Community and content\n\n- [[OpenVibe.Community]] — pastes, the forum, the comment threads other products embed, Pulse and submissions.\n- [[OpenVibe.Blog]] — the official blog and a blog for every member.\n- [[OpenVibe.News]] — editor-written, source-backed stories assembled from collected news items.\n- [[OpenVibe.Reviews]] — members' reviews, every review site in one search, the ratings other sites show, and official records, each with its source.\n- [[OpenVibe.Chat]] — the communication authority for rooms, messages, DMs, calls, TTS and moderation.\n- [[OpenVibe.Space]] — spaces (apps people make on their OpenVibe account, built by AI or from templates) and static hosting.\n- [[OpenVibe.Help]] — the help and support centre generated from the product manifests.\n- [[OpenVibe.Quest]] — one quest log across every OpenVibe site, awarding badges and OpenCoins.\n\n## Tools and games\n\n- [[OpenVibe.Tools]] — the tools suite: a tool registry, a run API, jobs and a shared guard.\n- [[OpenVibe.Games]] — Scraplandia, a persistent multiplayer physics sandbox in the browser, and worlds players build and publish.\n- [[OpenVibe.Play]] — achievements and leaderboards for every OpenVibe game.\n- [[OpenVibe.Food]] — food near a place, a meal planner, a pantry, AI recipes, and delivery apps and meal kits compared.\n\n## Developer platform\n\n- [[OpenVibe.Network]] — identity, OAuth2 SSO, notifications and the OpenCoins wallet.\n- [[OpenVibe.Events]] — the durable event backbone: delivery, retry, dead letters and replay.\n- [[OpenVibe.Search]] — permission-aware discovery with an ACL-filtered query API.\n- [[OpenVibe.Sources]] — the source registry and ingestion workers with recorded provenance.\n- [[OpenVibe.Publishing]] — the shared publishing packages the publication products build on.\n- [[OpenVibe.Wiki]] — this wiki: official and community wikis, page trees, revisions, citations and discussion.\n- [[OpenVibe.Codes]] — the open coding-agent harness.\n- [[OpenVibe.Services]] — the developer console for projects, apps, credentials and grants.\n- [[OpenVibe.Host]] — the deployment and control plane (the ovhost CLI) and tenant static hosting.\n- [[OpenVibe.Run]] — the job service that places jobs on nodes and follows them to an end.\n\n## Agents and automation\n\n- [[OpenVibe.Actor]] — OpenVibe's own general agent and agent router.\n- [[OpenVibe.Bot]] — the open control panel for robots.\n- [[OpenVibe.Node]] — one service on your own computers and robots, used by Bot and Actor.\n- [[OpenVibe.AI]] — the AI authority for providers, workflows, runs and quotas.\n- [[OpenVibe.Watch]] — persistent, user-defined observations and conditions over pages, feeds and events.\n\n## Commerce\n\n- [[OpenVibe.Deals]] — community-submitted deals with observed prices and freshness.\n- [[OpenVibe.Coupons]] — coupon codes with merchant matching and validity reports.\n- [[OpenVibe.Trade]] — informational watchlists and sourced market context, with no order execution.\n- [[OpenVibe.Rent]] — every rental site in one search, a board for listings from anywhere, and OpenVibe.Homes for buying.\n- [[OpenVibe.Inventory]] — the network-wide inventory of items a person owns.\n- [[OpenVibe.Billing]] — the money ledger: payments, Vibes, subscriptions, entitlements, refunds and payouts.\n- [[OpenVibe.Tips]] — creator support at openvibe.tips: tips, goals, paid messages, paid sounds and overlays.\n- [[OpenVibe.VIP]] — memberships at openvibe.vip: creator plans and perks recognised across every site.\n- [[OpenVibe.Work]] — job listings gathered from open job boards.\n",
++ "body": "The **OpenVibe network** is a set of services built in the open by OpenVibers, whose repositories are published in the [OpenVibers](https://github.com/OpenVibers) GitHub organisation. [[OpenVibe.Network]] is the network's identity and account service. This space describes the network's products as their README and STATUS files state them at the cited commits. How every site looks and behaves is the [[OpenVibe design language]].\n\n## Streaming and media\n\n- [[OpenVibe.Live]] — the streaming front: ingest, viewer playback, channels, streamer tools and moderation.\n- [[OpenVibe.Media]] — the multi-tenant media service for VODs, clips, files, thumbnails and storage tiering.\n- [[OpenVibe.Zone]] — private S3-compatible storage zones for every project.\n- [[OpenVibe.MediaHub]] — openvibe.download (a private drive), openvibe.video (uploads and AI edits) and openvibe.pics (pictures).\n- [[OpenRestream]] — the ingest and restream control plane extracted from OpenVibe.Live.\n\n## Community and content\n\n- [[OpenVibe.Community]] — pastes, the forum, the comment threads other products embed, Pulse and submissions.\n- [[OpenVibe.Blog]] — the official blog and a blog for every member.\n- [[OpenVibe.News]] — editor-written, source-backed stories assembled from collected news items.\n- [[OpenVibe.Reviews]] — members' reviews, every review site in one search, the ratings other sites show, and official records, each with its source.\n- [[OpenVibe.Chat]] — the communication authority for rooms, messages, DMs, calls, TTS and moderation.\n- [[OpenVibe.Space]] — spaces (apps people make on their OpenVibe account, built by AI or from templates) and static hosting.\n- [[OpenVibe.Help]] — the help and support centre generated from the product manifests.\n- [[OpenVibe.Quest]] — one quest log across every OpenVibe site, awarding badges and OpenCoins.\n\n## Tools and games\n\n- [[OpenVibe.Tools]] — the tools suite: a tool registry, a run API, jobs and a shared guard.\n- [[OpenVibe.Games]] — Scraplandia, a persistent multiplayer physics sandbox in the browser, and worlds players build and publish.\n- [[OpenVibe.Play]] — achievements and leaderboards for every OpenVibe game.\n- [[OpenVibe.Food]] — food near a place, a meal planner, a pantry, AI recipes, and delivery apps and meal kits compared.\n\n## Developer platform\n\n- [[OpenVibe.Network]] — identity, OAuth2 SSO, notifications and the OpenCoins wallet.\n- [[OpenVibe.Events]] — the durable event backbone: delivery, retry, dead letters and replay.\n- [[OpenVibe.Search]] — permission-aware discovery with an ACL-filtered query API.\n- [[OpenVibe.Sources]] — the source registry and ingestion workers with recorded provenance.\n- [[OpenVibe.Publishing]] — the shared publishing packages the publication products build on.\n- [[OpenVibe.Wiki]] — this wiki: official and community wikis, page trees, revisions, citations and discussion.\n- [[OpenVibe.Codes]] — the open coding-agent harness.\n- [[OpenVibe.Services]] — the developer console for projects, apps, credentials and grants.\n- [[OpenVibe.Host]] — the deployment and control plane (the ovhost CLI) and tenant static hosting.\n- [[OpenVibe.Run]] — the job service that places jobs on nodes and follows them to an end.\n\n## Agents and automation\n\n- [[OpenVibe.Actor]] — OpenVibe's own general agent and agent router.\n- [[OpenVibe.Bot]] — the open control panel for robots.\n- [[OpenVibe.Link]] — one service on your own computers and robots, used by Bot and Actor.\n- [[OpenVibe.AI]] — the AI authority for providers, workflows, runs and quotas.\n- [[OpenVibe.Watch]] — persistent, user-defined observations and conditions over pages, feeds and events.\n\n## Commerce\n\n- [[OpenVibe.Deals]] — community-submitted deals with observed prices and freshness.\n- [[OpenVibe.Coupons]] — coupon codes with merchant matching and validity reports.\n- [[OpenVibe.Trade]] — informational watchlists and sourced market context, with no order execution.\n- [[OpenVibe.Rent]] — every rental site in one search, a board for listings from anywhere, and OpenVibe.Homes for buying.\n- [[OpenVibe.Inventory]] — the network-wide inventory of items a person owns.\n- [[OpenVibe.Billing]] — the money ledger: payments, Vibes, subscriptions, entitlements, refunds and payouts.\n- [[OpenVibe.Tips]] — creator support at openvibe.tips: tips, goals, paid messages, paid sounds and overlays.\n- [[OpenVibe.VIP]] — memberships at openvibe.vip: creator plans and perks recognised across every site.\n- [[OpenVibe.Work]] — job listings gathered from open job boards.\n",
"summary": "Overview of the OpenVibe network and the products described in this space, grouped by area, with their stated status at the cited commits.",
"infobox": [
{
@@@ -1018,7 +1018,7 @@
{
"title": "OpenVibe.Watch",
"parent": "OpenVibe",
-- "body": "**OpenVibe.Watch** is a service for persistent, user-defined observations and conditions over pages, feeds, APIs, webhooks and OpenVibe events, served at `openvibe.watch`. A person or an agent defines what to watch and is told when it changes or fires.\n\n## What it does\n\nThe README states that the registry, the check engine, the pull carriers (`http`, `feed`, `api`), the push sources (OpenVibe events and signed webhooks), Node probes from the owner's own machine, the actions and the public site exist. A check uses a conditional GET, so it never polls when an ETag or an event will do, and the API is loopback-only. Every page of the public site is server-rendered and complete without JavaScript, with sign-in through [[OpenVibe.Network]] using OAuth 2 with PKCE (S256).\n\nThe site has seven starting points: a page that changes, a price that drops below a value, a new item in a feed, a JSON value, something that happens on OpenVibe (an event from [[OpenVibe.Events]], such as a channel going live), a webhook arriving at the watch's own signed address, and something on the person's own network going down, checked by their own computer through [[OpenVibe.Bot]] and [[OpenVibe.Node]]. When a condition fires, Watch can notify the owner on OpenVibe, emit an event, post a webhook, give a task to the owner's [[OpenVibe.Actor]] agent or run one of their agents, run a job on [[OpenVibe.Run]], or start a coding task on [[OpenVibe.Codes]].\n\n## What it does not do yet\n\nBrowser or code polling through [[OpenVibe.Run]] (the `run` source) is a later step, and a kind without a carrier is accepted but never fetched. The `ai` extraction is not a check.\n\n## How it fits the network\n\nWatch depends on [[OpenVibe.Network]] for signing keys and notifications, [[OpenVibe.Events]] for event sources and outbound events, and PostgreSQL 18. Products compose it instead of each growing a watcher: [[OpenVibe.Work]] and [[OpenVibe.Rent]] hand a search to it as a feed. It does not own structured source ingestion (that is [[OpenVibe.Sources]]) or expensive execution ([[OpenVibe.Run]]).\n\n## Status\n\nThe README states the status is alpha (plan T18), and the public site has been live since 2026-10-08. License: AGPL-3.0.",
++ "body": "**OpenVibe.Watch** is a service for persistent, user-defined observations and conditions over pages, feeds, APIs, webhooks and OpenVibe events, served at `openvibe.watch`. A person or an agent defines what to watch and is told when it changes or fires.\n\n## What it does\n\nThe README states that the registry, the check engine, the pull carriers (`http`, `feed`, `api`), the push sources (OpenVibe events and signed webhooks), Node probes from the owner's own machine, the actions and the public site exist. A check uses a conditional GET, so it never polls when an ETag or an event will do, and the API is loopback-only. Every page of the public site is server-rendered and complete without JavaScript, with sign-in through [[OpenVibe.Network]] using OAuth 2 with PKCE (S256).\n\nThe site has seven starting points: a page that changes, a price that drops below a value, a new item in a feed, a JSON value, something that happens on OpenVibe (an event from [[OpenVibe.Events]], such as a channel going live), a webhook arriving at the watch's own signed address, and something on the person's own network going down, checked by their own computer through [[OpenVibe.Bot]] and [[OpenVibe.Link]]. When a condition fires, Watch can notify the owner on OpenVibe, emit an event, post a webhook, give a task to the owner's [[OpenVibe.Actor]] agent or run one of their agents, run a job on [[OpenVibe.Run]], or start a coding task on [[OpenVibe.Codes]].\n\n## What it does not do yet\n\nBrowser or code polling through [[OpenVibe.Run]] (the `run` source) is a later step, and a kind without a carrier is accepted but never fetched. The `ai` extraction is not a check.\n\n## How it fits the network\n\nWatch depends on [[OpenVibe.Network]] for signing keys and notifications, [[OpenVibe.Events]] for event sources and outbound events, and PostgreSQL 18. Products compose it instead of each growing a watcher: [[OpenVibe.Work]] and [[OpenVibe.Rent]] hand a search to it as a feed. It does not own structured source ingestion (that is [[OpenVibe.Sources]]) or expensive execution ([[OpenVibe.Run]]).\n\n## Status\n\nThe README states the status is alpha (plan T18), and the public site has been live since 2026-10-08. License: AGPL-3.0.",
"summary": "A service for persistent, user-defined observations and conditions over pages, feeds, APIs, webhooks and OpenVibe events.",
"infobox": [
{
@@@ -1728,7 +1728,7 @@
{
"title": "OpenVibe.Actor",
"parent": "OpenVibe",
-- "body": "**OpenVibe.Actor** is OpenVibe's own general agent and the router for agent work, public at `openvibe.actor` on port 4950. It takes a task in plain words, sends it to the best agent system for it, streams the steps, has a model of another family check the answer, and gives back the result with its cost and the reason it went where it did.\n\n## What it does\n\nA task runs in five steps: classify it, route it with `openvibe-sdk/placement` over the agent catalog, run it while steps stream as events, check it with a model of another family, then deliver it or hand it on. Modes are cheapest, balanced, best, fastest and private. The OpenVibe runtime acts only through OpenVibe's public APIs: [[OpenVibe.Search]] content, [[OpenVibe.Tools]]' catalog and run API, and the Tools page reader. Private mode runs the open model on OpenVibe's own server, and the README says the task text never leaves OpenVibe. The API covers tasks, live server-sent events, cancel, a route dry run and personal agents.\n\n## What it does not do yet\n\nSince the first release, Actor has added:\n\n- an approval inbox for the steps a person must confirm;\n- signed webhooks on task state changes;\n- computer control on a person's own machine through [[OpenVibe.Node]]: reading the screen and, at the level the person allows, the mouse and keyboard.\n\nCoding tasks need [[OpenVibe.Run]] sandboxes and stay unavailable until an isolated worker host exists. A project secret named by reference is refused until project secrets exist. Paid tiers come later.\n## How it fits the network\n\nActor depends on [[OpenVibe.Network]] for sign-in and tokens, [[OpenVibe.Search]] and [[OpenVibe.Tools]] at runtime, and [[OpenVibe.Events]] for its two boot-time subscriptions. It calls the model providers DeepSeek and OpenAI, plus an OpenAI-compatible local server for private mode. [[OpenVibe.Services]] reads its resource index over loopback.\n\n## Status\n\nNode 22 with Express, PostgreSQL for tasks, event logs and daily spend, and Valkey for shared limit counters. STATUS.json records it deployed; its stage is alpha. License: AGPL-3.0.",
++ "body": "**OpenVibe.Actor** is OpenVibe's own general agent and the router for agent work, public at `openvibe.actor` on port 4950. It takes a task in plain words, sends it to the best agent system for it, streams the steps, has a model of another family check the answer, and gives back the result with its cost and the reason it went where it did.\n\n## What it does\n\nA task runs in five steps: classify it, route it with `openvibe-sdk/placement` over the agent catalog, run it while steps stream as events, check it with a model of another family, then deliver it or hand it on. Modes are cheapest, balanced, best, fastest and private. The OpenVibe runtime acts only through OpenVibe's public APIs: [[OpenVibe.Search]] content, [[OpenVibe.Tools]]' catalog and run API, and the Tools page reader. Private mode runs the open model on OpenVibe's own server, and the README says the task text never leaves OpenVibe. The API covers tasks, live server-sent events, cancel, a route dry run and personal agents.\n\n## What it does not do yet\n\nSince the first release, Actor has added:\n\n- an approval inbox for the steps a person must confirm;\n- signed webhooks on task state changes;\n- computer control on a person's own machine through [[OpenVibe.Link]]: reading the screen and, at the level the person allows, the mouse and keyboard.\n\nCoding tasks need [[OpenVibe.Run]] sandboxes and stay unavailable until an isolated worker host exists. A project secret named by reference is refused until project secrets exist. Paid tiers come later.\n## How it fits the network\n\nActor depends on [[OpenVibe.Network]] for sign-in and tokens, [[OpenVibe.Search]] and [[OpenVibe.Tools]] at runtime, and [[OpenVibe.Events]] for its two boot-time subscriptions. It calls the model providers DeepSeek and OpenAI, plus an OpenAI-compatible local server for private mode. [[OpenVibe.Services]] reads its resource index over loopback.\n\n## Status\n\nNode 22 with Express, PostgreSQL for tasks, event logs and daily spend, and Valkey for shared limit counters. STATUS.json records it deployed; its stage is alpha. License: AGPL-3.0.",
"summary": "OpenVibe's own general agent and agent router: it classifies a task, routes it with openvibe-sdk/placement, streams the steps, checks the answer with another model family and delivers the result with its cost.",
"infobox": [
{
@@@ -1786,7 +1786,7 @@
{
"title": "OpenVibe.Bot",
"parent": "OpenVibe",
-- "body": "**OpenVibe.Bot** is \"The open control panel for robots\" at `openvibe.bot` on port 4630. It pairs a robot's machines, keeps their state and gates every operator command: a device opens one outbound WebSocket to `/device`, and a person drives it from `/control` or the REST API through the same gate of roles, per-robot limits, cooldowns and the turn budget.\n\n## What it does\n\nBot owns robots, their profiles, per-robot limits, allow lists, roles and operators; the curated kit catalogue; devices and their hashed credentials; pairing codes; the `/device` and `/control` WebSockets, the command gate and the latched e-stop; and a command audit kept 30 days. A `sim.rover` robot is driven by an in-process simulator so the panel works before hardware exists, and server-side ONVIF cameras attach in-process. The panel renders from the robot's profile, with a touch joystick, keyboard and gamepad, a latency meter and one camera tile per camera. Owner-only streaming and recording toggles record live sessions to [[OpenVibe.Media]] or mirror them to the owner's [[OpenVibe.Live]] channel, where the robot's read-only panel can also be embedded.\n\nSince its first release Bot has added:\n- a public robot directory at `/robots`, and `/try`, where anyone drives a rover that runs in their own browser, without an account;\n- a phone as the robot: the pairing page shows a QR code that makes the phone's browser the device;\n- routines: the owner writes a robot's steps one per line and runs them on demand, on a schedule or when the robot comes online, each step through the same gate;\n- the owner's [[OpenVibe.Actor]] agent can read and drive the robot once the owner turns that on in the panel's Your agent card;\n- webhooks for a robot's events, and community robots whose driver is their own [[OpenVibe.Node]] plugin;\n- a person's own computer for their agents: a machine set up with OpenVibe.Node's `computer` plugin takes commands, file access and screen reads at the level its owner set, and the owner can watch its screen live.\n\n## What it does not do yet\n\nBot does not own identity, which is [[OpenVibe.Network]]'s, or video: a device publishes over WHIP to [[OpenRestream]]. When OpenVibe.Billing is unset, job usage readings wait in `run_usage_outbox` rather than being dropped.\n\n## How it fits the network\n\nBot depends on [[OpenVibe.Network]] for user and service tokens, node tokens and identity resolution, [[OpenRestream]] for the WHIP ingest base devices publish to, and OpenVibe.Billing for job usage readings. A device's installer command points at the released OpenVibe.Node script.\n\n## Status\n\nProduction runs the Node process under systemd as `openvibe-bot.service` on port 4630 behind nginx, which terminates TLS and upgrades the WebSockets. PostgreSQL applies `migrations/` at boot; Valkey is optional for shared per-actor limit counters. STATUS.json records stage alpha and the service deployed.",
++ "body": "**OpenVibe.Bot** is \"The open control panel for robots\" at `openvibe.bot` on port 4630. It pairs a robot's machines, keeps their state and gates every operator command: a device opens one outbound WebSocket to `/device`, and a person drives it from `/control` or the REST API through the same gate of roles, per-robot limits, cooldowns and the turn budget.\n\n## What it does\n\nBot owns robots, their profiles, per-robot limits, allow lists, roles and operators; the curated kit catalogue; devices and their hashed credentials; pairing codes; the `/device` and `/control` WebSockets, the command gate and the latched e-stop; and a command audit kept 30 days. A `sim.rover` robot is driven by an in-process simulator so the panel works before hardware exists, and server-side ONVIF cameras attach in-process. The panel renders from the robot's profile, with a touch joystick, keyboard and gamepad, a latency meter and one camera tile per camera. Owner-only streaming and recording toggles record live sessions to [[OpenVibe.Media]] or mirror them to the owner's [[OpenVibe.Live]] channel, where the robot's read-only panel can also be embedded.\n\nSince its first release Bot has added:\n- a public robot directory at `/robots`, and `/try`, where anyone drives a rover that runs in their own browser, without an account;\n- a phone as the robot: the pairing page shows a QR code that makes the phone's browser the device;\n- routines: the owner writes a robot's steps one per line and runs them on demand, on a schedule or when the robot comes online, each step through the same gate;\n- the owner's [[OpenVibe.Actor]] agent can read and drive the robot once the owner turns that on in the panel's Your agent card;\n- webhooks for a robot's events, and community robots whose driver is their own [[OpenVibe.Link]] plugin;\n- a person's own computer for their agents: a machine set up with OpenVibe.Link's `computer` plugin takes commands, file access and screen reads at the level its owner set, and the owner can watch its screen live.\n\n## What it does not do yet\n\nBot does not own identity, which is [[OpenVibe.Network]]'s, or video: a device publishes over WHIP to [[OpenRestream]]. When OpenVibe.Billing is unset, job usage readings wait in `run_usage_outbox` rather than being dropped.\n\n## How it fits the network\n\nBot depends on [[OpenVibe.Network]] for user and service tokens, node tokens and identity resolution, [[OpenRestream]] for the WHIP ingest base devices publish to, and OpenVibe.Billing for job usage readings. A device's installer command points at the released OpenVibe.Link script.\n\n## Status\n\nProduction runs the Node process under systemd as `openvibe-bot.service` on port 4630 behind nginx, which terminates TLS and upgrades the WebSockets. PostgreSQL applies `migrations/` at boot; Valkey is optional for shared per-actor limit counters. STATUS.json records stage alpha and the service deployed.",
"summary": "The open control panel for robots: it pairs a robot's machines over one outbound WebSocket and gates every operator command through roles, per-robot limits, cooldowns, a turn budget and a latched e-stop.",
"infobox": [
{
@@@ -1855,7 +1855,7 @@
"url": "https://github.com/OpenVibers/OpenVibe.Bot/blob/7f1b5ce59b910ac039f44385b25226d4957099c0/README.md",
"title": "OpenVibe.Bot README (commit 7f1b5ce)",
"retrievedAt": "2026-10-20T22:00:00.000Z",
-- "quote": "runs OpenVibe.Node's `computer` plugin as the person's own account"
++ "quote": "runs OpenVibe.Link's `computer` plugin as the person's own account"
},
{
"url": "https://github.com/OpenVibers/OpenVibe.Bot/blob/7f1b5ce59b910ac039f44385b25226d4957099c0/README.md",
@@@ -2744,16 +2744,16 @@
]
},
{
-- "title": "OpenVibe.Node",
++ "title": "OpenVibe.Link",
"parent": "OpenVibe",
"summary": "One service for a person's computers, servers, Raspberry Pis, phones and robots: pair it once and OpenVibe.Bot and OpenVibe.Actor can use the device, with a local kill switch.",
-- "body": "**OpenVibe Node** runs on a person's own devices: computers, servers, Raspberry Pis, phones and robots. Paired once with OpenVibe, it lets products such as [[OpenVibe.Bot]] and [[OpenVibe.Actor]] use the device.\n\n## What it does\n\n- **The core** is one static Go binary per platform.\n - It connects out over one WebSocket and needs no open ports.\n - It keeps heartbeats, a deadman and a persisted emergency stop, and owner limits are clamped before any driver sees a value.\n - It publishes video over WHIP.\n - It installs as a system service on Linux, macOS and Windows.\n- **Plugins** run as separate processes: robot drivers (Adeept, Cozmo, ROS 2, and the community's LOOI driver) and the computer plugin. Every plugin stops its own actuators when its link goes quiet.\n- **The computer plugin** lets an AI agent work on the machine only at the level its owner sets:\n - reading the screen;\n - files;\n - a terminal;\n - the mouse and keyboard;\n - a browser of the agent's own, in its own profile.\n\n At the \"ask\" level, each action waits for the owner's approval on the machine. The owner can answer from the tray\n (`openvibe-node tray`, on Linux and Windows), from a notification's Approve and Deny buttons, from a dialog on macOS,\n or from the command line. An approval is not taken while the agent itself is using the mouse or keyboard.\n- **The local kill switch** (`openvibe-node stop`) stops every motor and keeps it stopped.\n\n## How it fits the network\n\nDevices pair through [[OpenVibe.Network]] or [[OpenVibe.Bot]]. Bot drives robots through it, and [[OpenVibe.Actor]] uses its computer plugin for computer control.\n\n## Status\n\nReleased as versioned binaries. Mouse and keyboard input arrived in v0.9.0, the browser in v0.10.0, and approvals from the desktop in v0.11.0.",
++ "body": "**OpenVibe Link** runs on a person's own devices: computers, servers, Raspberry Pis, phones and robots. Paired once with OpenVibe, it lets products such as [[OpenVibe.Bot]] and [[OpenVibe.Actor]] use the device.\n\n## What it does\n\n- **The core** is one static Go binary per platform.\n - It connects out over one WebSocket and needs no open ports.\n - It keeps heartbeats, a deadman and a persisted emergency stop, and owner limits are clamped before any driver sees a value.\n - It publishes video over WHIP.\n - It installs as a system service on Linux, macOS and Windows.\n- **Plugins** run as separate processes: robot drivers (Adeept, Cozmo, ROS 2, and the community's LOOI driver) and the computer plugin. Every plugin stops its own actuators when its link goes quiet.\n- **The computer plugin** lets an AI agent work on the machine only at the level its owner sets:\n - reading the screen;\n - files;\n - a terminal;\n - the mouse and keyboard;\n - a browser of the agent's own, in its own profile.\n\n At the \"ask\" level, each action waits for the owner's approval on the machine. The owner can answer from the tray\n (`openvibe-link tray`, on Linux and Windows), from a notification's Approve and Deny buttons, from a dialog on macOS,\n or from the command line. An approval is not taken while the agent itself is using the mouse or keyboard.\n- **The local kill switch** (`openvibe-link stop`) stops every motor and keeps it stopped.\n\n## How it fits the network\n\nDevices pair through [[OpenVibe.Network]] or [[OpenVibe.Bot]]. Bot drives robots through it, and [[OpenVibe.Actor]] uses its computer plugin for computer control.\n\n## Status\n\nReleased as versioned binaries. Mouse and keyboard input arrived in v0.9.0, the browser in v0.10.0, and approvals from the desktop in v0.11.0.",
"infobox": [
{
"key": "repository",
"label": "Repository",
"type": "url",
-- "value": "https://github.com/OpenVibers/OpenVibe.Node"
++ "value": "https://github.com/OpenVibers/OpenVibe.Link"
},
{
"key": "runtime",
@@@ -2770,8 +2770,8 @@
],
"citations": [
{
-- "url": "https://github.com/OpenVibers/OpenVibe.Node/blob/bf0ebb9e0b43e89beec8e855ef3fdecbba96c1c7/README.md",
-- "title": "OpenVibe.Node README (commit bf0ebb9)",
++ "url": "https://github.com/OpenVibers/OpenVibe.Link/blob/bf0ebb9e0b43e89beec8e855ef3fdecbba96c1c7/README.md",
++ "title": "OpenVibe.Link README (commit bf0ebb9)",
"retrievedAt": "2026-10-14T23:30:00.000Z",
"quote": "One service for your computers, servers, Raspberry Pis, phones and robots"
}
ddiff --git a/server/render/views.js b/server/render/views.js
iindex 4d83874..603c0dc 100644
---- a/server/render/views.js
++++ b/server/render/views.js
@@@ -40,7 +40,7 @@ function vipGateBody({ title, spaceName, joinUrl, signedIn, signInUrl }) {
// A product page's ring icon on the shelf: its slug names the product (openvibe-live → live); the rest are the network's
// libraries and runtimes. Anything else gets the wiki's own.
--const SHELF_ICON = { openrestream: 'stream', 'openvibe-mediahub': 'video', 'openvibe-node': 'plug', 'openvibe-sources': 'feeds', 'openvibe-play': 'games',
++const SHELF_ICON = { openrestream: 'stream', 'openvibe-mediahub': 'video', 'openvibe-link': 'plug', 'openvibe-sources': 'feeds', 'openvibe-play': 'games',
'openvibe-publishing': 'docs', 'openvibe-contracts': 'code', 'openvibe-sdk': 'code', 'openvibe-shared': 'code', 'openvibe-extensions': 'plug', 'openvibe-examples': 'code' };
const RING = new Set(['ov', 'network', 'live', 'tools', 'media', 'games', 'community', 'chat', 'codes', 'bot', 'blog', 'wiki', 'news', 'reviews', 'tips', 'vip', 'trade', 'host', 'deals', 'coupons',
'video', 'search', 'food', 'work', 'rent', 'help', 'quest', 'inventory', 'services', 'space', 'watch', 'actor', 'events', 'ai', 'run', 'billing', 'pics', 'zone', 'download']);
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');