openvibers/openvibe.wiki Commits
Wiki seed: Zone (multipart, copies, usage), Node (browser, desktop approvals), Services (control) (#50)
Changes
@@@ -588,7 +588,7 @@{"title": "OpenVibe.Services","parent": "OpenVibe",-- "body": "**OpenVibe.Services** is the developer platform of the OpenVibe network, serving `https://openvibe.services` on port 4930 (service id `services`). It is alpha. Its README describes it as \"one console for projects and apps over OpenVibe.Network\".\n\n## What it does\n\nIt shows and forwards what the signed-in person asks for, with that person's own [[OpenVibe.Network]] token: projects, members, apps, credentials, capability grants and quotas; a per-project usage page from Network's rollups; project export as JSON and a full archive as a zip; OAuth and webhook tools that speak signature v2 only; and Media and Events playgrounds. Its merged resource index reads each authority with its own token and merges the pages, naming any authority it could not read. Secrets are shown once and never stored. Everything is server-rendered and usable without JavaScript.\n\n## What it does not do yet\n\nThe developer portal moved here from [[OpenVibe.Codes]] on 2026-10-08, when its production data was nil, so nothing was copied. The playgrounds have never been used on production; the one end-to-end run used curl and is not a committed, repeatable check. Not built yet: Billing sandbox, Chat bot and Realtime playgrounds, a CLI and scaffolding, templates, and a third-party consent screen. Governance material is in drafts pending owner review.\n\n## How it fits the network\n\nServices depends on [[OpenVibe.Network]] for identity, projects and the registry; on [[OpenVibe.Events]] for the outbox relay and the Events playground; and on [[OpenVibe.Media]] for uploads and the archive. It never copies another authority's data, and it never fetches a URL a developer types.\n\n## Runtime and status\n\nNode 22 and Express 4, PostgreSQL 18 (`ov_services`) and Valkey 9, unit `openvibe-services.service` on `127.0.0.1:4930`. STATUS.json records the stage as \"alpha\" and the service deployed. License: AGPL-3.0.",++ "body": "**OpenVibe.Services** is the developer platform of the OpenVibe network, serving `https://openvibe.services` on port 4930 (service id `services`). It is alpha. Its README describes it as \"one console for projects and apps over OpenVibe.Network\".\n\n## What it does\n\nIt shows and forwards what the signed-in person asks for, with that person's own [[OpenVibe.Network]] token: projects, members, apps, credentials, capability grants and quotas; a per-project usage page from Network's rollups; project export as JSON and a full archive as a zip; OAuth and webhook tools that speak signature v2 only; and Media and Events playgrounds. Its merged resource index reads each authority with its own token and merges the pages, naming any authority it could not read.\n\nIt also sends control requests to the service that holds a resource, which decides:\n- **project resources:** an admin can suspend, resume, stop or delete them (watches, event subscriptions, Actor tasks, Media objects, Space sites, Zone zones);\n- **a person's own resources**, on \"Your resources\": they can stop or resume their robot, archive a chat room, suspend or resume a restream, and delete a paste.\n\nEvery request is idempotent and audited. An agent's sensitive request waits for its owner's approval. Secrets are shown once and never stored. Everything is server-rendered and usable without JavaScript.\n\n## What it does not do yet\n\nThe developer portal moved here from [[OpenVibe.Codes]] on 2026-10-08, when its production data was nil, so nothing was copied. The playgrounds have never been used on production; the one end-to-end run used curl and is not a committed, repeatable check. Not built yet: Billing sandbox, Chat bot and Realtime playgrounds, a CLI and scaffolding, templates, and a third-party consent screen. Governance material is in drafts pending owner review.\n\n## How it fits the network\n\nServices depends on [[OpenVibe.Network]] for identity, projects and the registry; on [[OpenVibe.Events]] for the outbox relay and the Events playground; and on [[OpenVibe.Media]] for uploads and the archive. It never copies another authority's data, and it never fetches a URL a developer types.\n\n## Runtime and status\n\nNode 22 and Express 4, PostgreSQL 18 (`ov_services`) and Valkey 9, unit `openvibe-services.service` on `127.0.0.1:4930`. STATUS.json records the stage as \"alpha\" and the service deployed. License: AGPL-3.0.","summary": "The developer platform: a console over OpenVibe.Network for projects, apps, credentials and grants, plus a merged resource index over every service.","infobox": [{@@@ -2067,7 +2067,7 @@"title": "OpenVibe.Zone","parent": "OpenVibe","summary": "Private S3-compatible storage zones for OpenVibe projects at openvibe.zone: named buckets per project environment, scoped access keys and quotas, with the objects kept by OpenVibe.Media.",-- "body": "**OpenVibe.Zone** gives every OpenVibe project private storage zones at `openvibe.zone`. A zone is an S3 bucket of one project environment, sandbox or production.\n\n## What it does\n\n- **Default zones.** Each environment has a default zone, which holds its existing objects.\n- **Named zones.** A project creates more zones by name, each with an optional quota.\n- **Names are never reused.** A zone's name is never given to another zone, even after it is deleted, so a URL signed for one bucket can never reach a different one.\n- **Access keys** read, write or both. A key can be limited to some zones, and its secret is shown once.\n- **S3 tools.** The AWS SDKs, rclone and backup tools reach zones over S3, path style.\n- **Deletion.** Deleting a zone removes every object and every copy of it. A zone holding an object under a retention hold cannot be deleted.\n\n## How it fits the network\n\n- **Zone owns** the zone records and their control API.\n- **[[OpenVibe.Media]] owns** what is inside a zone: the objects, their bytes and copies, the S3 surface, the access keys, quota enforcement and the one deletion path. Every object in a zone is an ordinary Media object, reachable through Media's own API too.\n- Projects and roles come from [[OpenVibe.Network]].\n- [[OpenVibe.Services]] lists zones beside a project's other resources and can delete one.\n\n## Status\n\nSTATUS.json's stage is \"alpha\". Not yet built: multipart uploads, server-side copy, and per-zone usage history.",++ "body": "**OpenVibe.Zone** gives every OpenVibe project private storage zones at `openvibe.zone`. A zone is an S3 bucket of one project environment, sandbox or production.\n\n## What it does\n\n- **Default zones.** Each environment has a default zone, which holds its existing objects.\n- **Named zones.** A project creates more zones by name, each with an optional quota.\n- **Names are never reused.** A zone's name is never given to another zone, even after it is deleted, so a URL signed for one bucket can never reach a different one.\n- **Access keys** read, write or both. A key can be limited to some zones, and its secret is shown once.\n- **S3 tools.** The AWS SDKs, rclone and backup tools reach zones over S3, path style.\n- **Large files and copies.** Multipart uploads carry big objects in parts, and server-side copies (CopyObject and UploadPartCopy) move data between zones without downloading it.\n- **Usage.** Requests, egress and stored bytes are counted per zone by the hour. The console shows each zone's month so far, and the project's usage page adds them up.\n- **Deletion.** Deleting a zone removes every object and every copy of it. A zone holding an object under a retention hold cannot be deleted.\n\n## How it fits the network\n\n- **Zone owns** the zone records and their control API.\n- **[[OpenVibe.Media]] owns** what is inside a zone: the objects, their bytes and copies, the S3 surface, the access keys, quota enforcement and the one deletion path. Every object in a zone is an ordinary Media object, reachable through Media's own API too.\n- Projects and roles come from [[OpenVibe.Network]].\n- [[OpenVibe.Services]] lists zones beside a project's other resources and can delete one.\n\n## Status\n\nSTATUS.json's stage is \"alpha\". Multipart uploads, server-side copies and per-zone usage were added on 2026-10-15. The S3 endpoint is `s3.openvibe.network` until `s3.openvibe.media` has its DNS record.","infobox": [{"key": "repository",@@@ -2119,7 +2119,7 @@"title": "OpenVibe.Node","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\n At the \"ask\" level, each action waits for the owner's approval on the machine.\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; the computer plugin's input level arrived in v0.9.0.",++ "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.","infobox": [{"key": "repository",
@@ -588,7 +588,7 @@
@@ -588,7 +588,7 @@
{
{
"title": "OpenVibe.Services",
"title": "OpenVibe.Services",
"parent": "OpenVibe",
"parent": "OpenVibe",
- "body": "**OpenVibe.Services** is the developer platform of the OpenVibe network, serving `https://openvibe.services` on port 4930 (service id `services`). It is alpha. Its README describes it as \"one console for projects and apps over OpenVibe.Network\".\n\n## What it does\n\nIt shows and forwards what the signed-in person asks for, with that person's own [[OpenVibe.Network]] token: projects, members, apps, credentials, capability grants and quotas; a per-project usage page from Network's rollups; project export as JSON and a full archive as a zip; OAuth and webhook tools that speak signature v2 only; and Media and Events playgrounds. Its merged resource index reads each authority with its own token and merges the pages, naming any authority it could not read. Secrets are shown once and never stored. Everything is server-rendered and usable without JavaScript.\n\n## What it does not do yet\n\nThe developer portal moved here from [[OpenVibe.Codes]] on 2026-10-08, when its production data was nil, so nothing was copied. The playgrounds have never been used on production; the one end-to-end run used curl and is not a committed, repeatable check. Not built yet: Billing sandbox, Chat bot and Realtime playgrounds, a CLI and scaffolding, templates, and a third-party consent screen. Governance material is in drafts pending owner review.\n\n## How it fits the network\n\nServices depends on [[OpenVibe.Network]] for identity, projects and the registry; on [[OpenVibe.Events]] for the outbox relay and the Events playground; and on [[OpenVibe.Media]] for uploads and the archive. It never copies another authority's data, and it never fetches a URL a developer types.\n\n## Runtime and status\n\nNode 22 and Express 4, PostgreSQL 18 (`ov_services`) and Valkey 9, unit `openvibe-services.service` on `127.0.0.1:4930`. STATUS.json records the stage as \"alpha\" and the service deployed. License: AGPL-3.0.",
+ "body": "**OpenVibe.Services** is the developer platform of the OpenVibe network, serving `https://openvibe.services` on port 4930 (service id `services`). It is alpha. Its README describes it as \"one console for projects and apps over OpenVibe.Network\".\n\n## What it does\n\nIt shows and forwards what the signed-in person asks for, with that person's own [[OpenVibe.Network]] token: projects, members, apps, credentials, capability grants and quotas; a per-project usage page from Network's rollups; project export as JSON and a full archive as a zip; OAuth and webhook tools that speak signature v2 only; and Media and Events playgrounds. Its merged resource index reads each authority with its own token and merges the pages, naming any authority it could not read.\n\nIt also sends control requests to the service that holds a resource, which decides:\n- **project resources:** an admin can suspend, resume, stop or delete them (watches, event subscriptions, Actor tasks, Media objects, Space sites, Zone zones);\n- **a person's own resources**, on \"Your resources\": they can stop or resume their robot, archive a chat room, suspend or resume a restream, and delete a paste.\n\nEvery request is idempotent and audited. An agent's sensitive request waits for its owner's approval. Secrets are shown once and never stored. Everything is server-rendered and usable without JavaScript.\n\n## What it does not do yet\n\nThe developer portal moved here from [[OpenVibe.Codes]] on 2026-10-08, when its production data was nil, so nothing was copied. The playgrounds have never been used on production; the one end-to-end run used curl and is not a committed, repeatable check. Not built yet: Billing sandbox, Chat bot and Realtime playgrounds, a CLI and scaffolding, templates, and a third-party consent screen. Governance material is in drafts pending owner review.\n\n## How it fits the network\n\nServices depends on [[OpenVibe.Network]] for identity, projects and the registry; on [[OpenVibe.Events]] for the outbox relay and the Events playground; and on [[OpenVibe.Media]] for uploads and the archive. It never copies another authority's data, and it never fetches a URL a developer types.\n\n## Runtime and status\n\nNode 22 and Express 4, PostgreSQL 18 (`ov_services`) and Valkey 9, unit `openvibe-services.service` on `127.0.0.1:4930`. STATUS.json records the stage as \"alpha\" and the service deployed. License: AGPL-3.0.",
"summary": "The developer platform: a console over OpenVibe.Network for projects, apps, credentials and grants, plus a merged resource index over every service.",
"summary": "The developer platform: a console over OpenVibe.Network for projects, apps, credentials and grants, plus a merged resource index over every service.",
"infobox": [
"infobox": [
{
{
@@ -2067,7 +2067,7 @@
@@ -2067,7 +2067,7 @@
"title": "OpenVibe.Zone",
"title": "OpenVibe.Zone",
"parent": "OpenVibe",
"parent": "OpenVibe",
"summary": "Private S3-compatible storage zones for OpenVibe projects at openvibe.zone: named buckets per project environment, scoped access keys and quotas, with the objects kept by OpenVibe.Media.",
"summary": "Private S3-compatible storage zones for OpenVibe projects at openvibe.zone: named buckets per project environment, scoped access keys and quotas, with the objects kept by OpenVibe.Media.",
- "body": "**OpenVibe.Zone** gives every OpenVibe project private storage zones at `openvibe.zone`. A zone is an S3 bucket of one project environment, sandbox or production.\n\n## What it does\n\n- **Default zones.** Each environment has a default zone, which holds its existing objects.\n- **Named zones.** A project creates more zones by name, each with an optional quota.\n- **Names are never reused.** A zone's name is never given to another zone, even after it is deleted, so a URL signed for one bucket can never reach a different one.\n- **Access keys** read, write or both. A key can be limited to some zones, and its secret is shown once.\n- **S3 tools.** The AWS SDKs, rclone and backup tools reach zones over S3, path style.\n- **Deletion.** Deleting a zone removes every object and every copy of it. A zone holding an object under a retention hold cannot be deleted.\n\n## How it fits the network\n\n- **Zone owns** the zone records and their control API.\n- **[[OpenVibe.Media]] owns** what is inside a zone: the objects, their bytes and copies, the S3 surface, the access keys, quota enforcement and the one deletion path. Every object in a zone is an ordinary Media object, reachable through Media's own API too.\n- Projects and roles come from [[OpenVibe.Network]].\n- [[OpenVibe.Services]] lists zones beside a project's other resources and can delete one.\n\n## Status\n\nSTATUS.json's stage is \"alpha\". Not yet built: multipart uploads, server-side copy, and per-zone usage history.",
+ "body": "**OpenVibe.Zone** gives every OpenVibe project private storage zones at `openvibe.zone`. A zone is an S3 bucket of one project environment, sandbox or production.\n\n## What it does\n\n- **Default zones.** Each environment has a default zone, which holds its existing objects.\n- **Named zones.** A project creates more zones by name, each with an optional quota.\n- **Names are never reused.** A zone's name is never given to another zone, even after it is deleted, so a URL signed for one bucket can never reach a different one.\n- **Access keys** read, write or both. A key can be limited to some zones, and its secret is shown once.\n- **S3 tools.** The AWS SDKs, rclone and backup tools reach zones over S3, path style.\n- **Large files and copies.** Multipart uploads carry big objects in parts, and server-side copies (CopyObject and UploadPartCopy) move data between zones without downloading it.\n- **Usage.** Requests, egress and stored bytes are counted per zone by the hour. The console shows each zone's month so far, and the project's usage page adds them up.\n- **Deletion.** Deleting a zone removes every object and every copy of it. A zone holding an object under a retention hold cannot be deleted.\n\n## How it fits the network\n\n- **Zone owns** the zone records and their control API.\n- **[[OpenVibe.Media]] owns** what is inside a zone: the objects, their bytes and copies, the S3 surface, the access keys, quota enforcement and the one deletion path. Every object in a zone is an ordinary Media object, reachable through Media's own API too.\n- Projects and roles come from [[OpenVibe.Network]].\n- [[OpenVibe.Services]] lists zones beside a project's other resources and can delete one.\n\n## Status\n\nSTATUS.json's stage is \"alpha\". Multipart uploads, server-side copies and per-zone usage were added on 2026-10-15. The S3 endpoint is `s3.openvibe.network` until `s3.openvibe.media` has its DNS record.",
"infobox": [
"infobox": [
{
{
"key": "repository",
"key": "repository",
@@ -2119,7 +2119,7 @@
@@ -2119,7 +2119,7 @@
"title": "OpenVibe.Node",
"title": "OpenVibe.Node",
"parent": "OpenVibe",
"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.",
"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\n At the \"ask\" level, each action waits for the owner's approval on the machine.\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; the computer plugin's input level arrived in v0.9.0.",
+ "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.",
"infobox": [
"infobox": [
{
{
"key": "repository",
"key": "repository",