openvibers/openvibe.contracts Commits
0.312.0: the skills-hub records (codes.skill@1 and codes.skill-version@1) (#320)
Changes
@@@ -1,5 +1,11 @@# Changelog++## 0.312.0 — 2026-11-07++++- Add the Codes skills-hub records (the Compute plan §5, E6). `codes.skill@1` is one skill, rule, MCP server, command or hook: its owner, kind, stable slug, title, summary, the four sharing audiences (`private`, `people`, `link`, `public`), the harnesses it is written for, the newest version and that version's body. A `private`, `people` or `link` record is never in the gallery; only `public` is. The body is untrusted Markdown and the page renders it through the markup gate.++- Add `codes.skill-version@1`: one immutable version of a record, keyed by `skill_id` and a growing `version`, with the body, summary, tools, audience, author and the note that says why it was written. A rollback copies the chosen version into a new one rather than rewriting history, so a Node that synced version 3 can still name it.++- Valid and invalid fixtures cover a public skill, a private rule, a people-shared MCP record, versions 1 and 4, and the bad ids, kinds, audiences, tools, bodies and authors.++## 0.311.0 — 2026-11-07- Add `<service>.config.manage` for the eight services that hold an owner input and that Network's admin proxy now reaches for the owner's Setup tab (OWNER-SETUP-AND-ADMIN-CLARITY-DESIGN, 2026-11-07): `chat`, `connect`, `deals`, `work`, `sources`, `design`, `domains` and `media`. Each is internal, held only by Network's admin proxy acting for the owner, never grantable to apps, and **planned** until its service mounts openvibe-shared/config's routes on `/internal/config`; the service then turns it active and lists it in its manifest (Deals' own test pins that list, so listing it early would break its pin bump). Planned capabilities verify like active ones, so Network's grant works the day a service mounts the routes.@@@ -454,6 +454,24 @@"status": "retired","adr": "ADR-022"},++ {++ "id": "codes.skill",++ "version": "1.0.0",++ "owner": "codes",++ "schema": "codes/skill.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "codes.skill-version",++ "version": "1.0.0",++ "owner": "codes",++ "schema": "codes/skill-version.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"++ },{"id": "services.app-manifest","version": "1.0.0",nnew file mode 100644@@@ -0,0 +1,74 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/codes/skill-version.v1.json",++ "title": "CodesSkillVersion",++ "description": "codes.skill-version@1: one immutable version of a codes.skill@1 record in the OpenVibe.Codes skills hub. Every save writes a new version; VERSION starts at 1 and only grows, and SKILL_ID plus VERSION is the key. BODY and SUMMARY are the content at that version, TOOLS and AUDIENCE the settings it had, and NOTE says why it was written (created, edited, published, or rolled back to N). A rollback never rewrites an old row: it copies the chosen version into a new one, so the history of what every machine synced stays exact and the Node's state can name the version it wrote.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "skill_id",++ "version",++ "summary",++ "body",++ "tools",++ "audience",++ "created_by",++ "created_at"++ ],++ "properties": {++ "skill_id": {++ "type": "string",++ "pattern": "^skl_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "version": {++ "type": "integer",++ "minimum": 1++ },++ "summary": {++ "type": "string",++ "maxLength": 500++ },++ "body": {++ "type": "string",++ "minLength": 1,++ "maxLength": 131072++ },++ "tools": {++ "type": "array",++ "maxItems": 8,++ "uniqueItems": true,++ "items": {++ "enum": [++ "claude-code",++ "codex",++ "opencode",++ "command-code",++ "minimax-code",++ "aider",++ "agents"++ ]++ }++ },++ "audience": {++ "enum": [++ "public",++ "link",++ "people",++ "private"++ ]++ },++ "created_by": {++ "type": "string",++ "pattern": "^(usr_[0-9A-HJKMNP-TV-Z]{26}|system)$"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "note": {++ "type": "string",++ "maxLength": 200,++ "description": "Why this version was written: created, edited, published, or rolled back to N."++ }++ }++}nnew file mode 100644@@@ -0,0 +1,106 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/codes/skill.v1.json",++ "title": "CodesSkill",++ "description": "codes.skill@1: one skill, rule, MCP server, command or hook in the OpenVibe.Codes hub (the Compute plan §5, E6). KIND says what it is: a skill is a SKILL.md folder the agent tools load, a rule is text for the tools' AGENTS.md/CLAUDE.md files, an mcp record is one MCP server definition, and command/hook are a slash command and a hook. SLUG is the folder name (lowercase letters, digits and hyphens) and is stable within one owner. VERSION is the newest record in codes.skill-version@1; BODY is that version's content. AUDIENCE is the four sharing audiences of openvibe-sdk/share: private (the owner only), people (the owner and the members listed in codes_skill_members), link (anyone with the link, not in the gallery) and public (the gallery, search and agents). A private, people or link record is never in the gallery. OFFICIAL marks OpenVibe's own skills. TOOLS names the harnesses the skill is written for; an empty list means every tool the Node knows. The body is untrusted text: the page renders it through the markup gate (escape first, then a small Markdown subset), never as HTML.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "owner_subject",++ "kind",++ "slug",++ "title",++ "summary",++ "audience",++ "official",++ "tools",++ "version",++ "body",++ "created_at",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^skl_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The hub id (skl_ + ULID)."++ },++ "owner_subject": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The person who owns the record."++ },++ "kind": {++ "enum": [++ "skill",++ "rule",++ "mcp",++ "command",++ "hook"++ ]++ },++ "slug": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9-]{0,63}$",++ "description": "The stable folder name (SKILL.md lives in a folder with this name)."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ },++ "summary": {++ "type": "string",++ "maxLength": 500++ },++ "audience": {++ "enum": [++ "public",++ "link",++ "people",++ "private"++ ],++ "description": "The sharing audience, the same four openvibe-sdk/share uses."++ },++ "official": {++ "type": "boolean",++ "description": "True for OpenVibe's own records; the gallery shows them beside community ones."++ },++ "tools": {++ "type": "array",++ "maxItems": 8,++ "uniqueItems": true,++ "items": {++ "enum": [++ "claude-code",++ "codex",++ "opencode",++ "command-code",++ "minimax-code",++ "aider",++ "agents"++ ]++ }++ },++ "version": {++ "type": "integer",++ "minimum": 1,++ "description": "The newest coded_skill_versions row for this record."++ },++ "body": {++ "type": "string",++ "minLength": 1,++ "maxLength": 131072,++ "description": "The skill's SKILL.md body (or the rule/command/hook/MCP text), untrusted Markdown."++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ }++ }++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "skill_id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",++ "version": 2,++ "summary": "",++ "body": "text",++ "tools": [],++ "audience": "public",++ "created_by": "somebody",++ "created_at": "2026-11-07T09:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "skill_id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",++ "version": 2,++ "summary": "",++ "body": "",++ "tools": [],++ "audience": "private",++ "created_by": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",++ "created_at": "2026-11-07T09:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "skill_id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",++ "version": 0,++ "summary": "",++ "body": "text",++ "tools": [],++ "audience": "public",++ "created_by": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",++ "created_at": "2026-11-07T09:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "skill_id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",++ "version": 1,++ "summary": "Open a pull request, wait for CI, and merge only when it is green.",++ "body": "---\nname: ship-a-change\ndescription: Open a PR, wait for CI, and merge only when it is green.\n---\n\n# Ship a change\n",++ "tools": [++ "claude-code"++ ],++ "audience": "private",++ "created_by": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",++ "created_at": "2026-11-07T09:00:00.000Z",++ "note": "created"++}nnew file mode 100644@@@ -0,0 +1,15 @@++{++ "skill_id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",++ "version": 4,++ "summary": "Open a pull request, wait for CI, and merge only when it is green.",++ "body": "---\nname: ship-a-change\ndescription: Open a PR, wait for CI, and merge only when it is green.\n---\n\n# Ship a change\n\nRolled back to the three-step version.\n",++ "tools": [++ "claude-code",++ "codex",++ "opencode"++ ],++ "audience": "public",++ "created_by": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",++ "created_at": "2026-11-07T10:30:00.000Z",++ "note": "rolled back to 1"++}nnew file mode 100644@@@ -0,0 +1,15 @@++{++ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",++ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",++ "kind": "skill",++ "slug": "ship-a-change",++ "title": "Ship a change",++ "summary": "",++ "audience": "everyone",++ "official": false,++ "tools": [],++ "version": 1,++ "body": "text",++ "created_at": "2026-11-07T09:00:00.000Z",++ "updated_at": "2026-11-07T09:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,15 @@++{++ "id": "skl_bad",++ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",++ "kind": "skill",++ "slug": "ship-a-change",++ "title": "Ship a change",++ "summary": "",++ "audience": "public",++ "official": false,++ "tools": [],++ "version": 1,++ "body": "text",++ "created_at": "2026-11-07T09:00:00.000Z",++ "updated_at": "2026-11-07T09:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,15 @@++{++ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",++ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",++ "kind": "plugin",++ "slug": "ship-a-change",++ "title": "Ship a change",++ "summary": "",++ "audience": "public",++ "official": false,++ "tools": [],++ "version": 1,++ "body": "text",++ "created_at": "2026-11-07T09:00:00.000Z",++ "updated_at": "2026-11-07T09:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,17 @@++{++ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",++ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",++ "kind": "skill",++ "slug": "Ship a change",++ "title": "Ship a change",++ "summary": "",++ "audience": "public",++ "official": false,++ "tools": [++ "not-a-tool"++ ],++ "version": 1,++ "body": "text",++ "created_at": "2026-11-07T09:00:00.000Z",++ "updated_at": "2026-11-07T09:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,14 @@++{++ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",++ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",++ "kind": "skill",++ "slug": "ship-a-change",++ "title": "Ship a change",++ "summary": "",++ "audience": "public",++ "official": false,++ "tools": [],++ "version": 1,++ "created_at": "2026-11-07T09:00:00.000Z",++ "updated_at": "2026-11-07T09:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,18 @@++{++ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW3B",++ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",++ "kind": "mcp",++ "slug": "openvibe-know",++ "title": "OpenVibe Know",++ "summary": "The shared knowledge lookup as an MCP server.",++ "audience": "people",++ "official": true,++ "tools": [++ "claude-code",++ "codex"++ ],++ "version": 2,++ "body": "{\"command\":\"ov-know-mcp\",\"args\":[]}",++ "created_at": "2026-11-07T09:00:00.000Z",++ "updated_at": "2026-11-07T11:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,15 @@++{++ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW2A",++ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",++ "kind": "rule",++ "slug": "no-force-push",++ "title": "Never force-push",++ "summary": "A branch is append-only once somebody may have read it.",++ "audience": "private",++ "official": false,++ "tools": [],++ "version": 1,++ "body": "Never force-push a shared branch; add a commit instead.",++ "created_at": "2026-11-07T09:00:00.000Z",++ "updated_at": "2026-11-07T09:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,19 @@++{++ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",++ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",++ "kind": "skill",++ "slug": "ship-a-change",++ "title": "Ship a change",++ "summary": "Open a pull request, wait for CI, and merge only when it is green.",++ "audience": "public",++ "official": false,++ "tools": [++ "claude-code",++ "codex",++ "opencode"++ ],++ "version": 3,++ "body": "---\nname: ship-a-change\ndescription: Open a PR, wait for CI, and merge only when it is green.\n---\n\n# Ship a change\n\n1. Read the repository's own instructions.\n2. Run the narrowest test that proves the change.\n3. Open the pull request with what changed and how it was checked.\n",++ "created_at": "2026-11-07T09:00:00.000Z",++ "updated_at": "2026-11-07T10:30:00.000Z"++}@@@ -6546,6 +6546,196 @@"$ref": "../../common/moderation-action.v1.json"}},++ "codes.skill": {++ "version": "1.0.0",++ "owner": "codes",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/codes/skill.v1.json",++ "title": "CodesSkill",++ "description": "codes.skill@1: one skill, rule, MCP server, command or hook in the OpenVibe.Codes hub (the Compute plan §5, E6). KIND says what it is: a skill is a SKILL.md folder the agent tools load, a rule is text for the tools' AGENTS.md/CLAUDE.md files, an mcp record is one MCP server definition, and command/hook are a slash command and a hook. SLUG is the folder name (lowercase letters, digits and hyphens) and is stable within one owner. VERSION is the newest record in codes.skill-version@1; BODY is that version's content. AUDIENCE is the four sharing audiences of openvibe-sdk/share: private (the owner only), people (the owner and the members listed in codes_skill_members), link (anyone with the link, not in the gallery) and public (the gallery, search and agents). A private, people or link record is never in the gallery. OFFICIAL marks OpenVibe's own skills. TOOLS names the harnesses the skill is written for; an empty list means every tool the Node knows. The body is untrusted text: the page renders it through the markup gate (escape first, then a small Markdown subset), never as HTML.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "owner_subject",++ "kind",++ "slug",++ "title",++ "summary",++ "audience",++ "official",++ "tools",++ "version",++ "body",++ "created_at",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^skl_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The hub id (skl_ + ULID)."++ },++ "owner_subject": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The person who owns the record."++ },++ "kind": {++ "enum": [++ "skill",++ "rule",++ "mcp",++ "command",++ "hook"++ ]++ },++ "slug": {++ "type": "string",++ "pattern": "^[a-z0-9][a-z0-9-]{0,63}$",++ "description": "The stable folder name (SKILL.md lives in a folder with this name)."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 120++ },++ "summary": {++ "type": "string",++ "maxLength": 500++ },++ "audience": {++ "enum": [++ "public",++ "link",++ "people",++ "private"++ ],++ "description": "The sharing audience, the same four openvibe-sdk/share uses."++ },++ "official": {++ "type": "boolean",++ "description": "True for OpenVibe's own records; the gallery shows them beside community ones."++ },++ "tools": {++ "type": "array",++ "maxItems": 8,++ "uniqueItems": true,++ "items": {++ "enum": [++ "claude-code",++ "codex",++ "opencode",++ "command-code",++ "minimax-code",++ "aider",++ "agents"++ ]++ }++ },++ "version": {++ "type": "integer",++ "minimum": 1,++ "description": "The newest coded_skill_versions row for this record."++ },++ "body": {++ "type": "string",++ "minLength": 1,++ "maxLength": 131072,++ "description": "The skill's SKILL.md body (or the rule/command/hook/MCP text), untrusted Markdown."++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "codes.skill-version": {++ "version": "1.0.0",++ "owner": "codes",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/codes/skill-version.v1.json",++ "title": "CodesSkillVersion",++ "description": "codes.skill-version@1: one immutable version of a codes.skill@1 record in the OpenVibe.Codes skills hub. Every save writes a new version; VERSION starts at 1 and only grows, and SKILL_ID plus VERSION is the key. BODY and SUMMARY are the content at that version, TOOLS and AUDIENCE the settings it had, and NOTE says why it was written (created, edited, published, or rolled back to N). A rollback never rewrites an old row: it copies the chosen version into a new one, so the history of what every machine synced stays exact and the Node's state can name the version it wrote.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "skill_id",++ "version",++ "summary",++ "body",++ "tools",++ "audience",++ "created_by",++ "created_at"++ ],++ "properties": {++ "skill_id": {++ "type": "string",++ "pattern": "^skl_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "version": {++ "type": "integer",++ "minimum": 1++ },++ "summary": {++ "type": "string",++ "maxLength": 500++ },++ "body": {++ "type": "string",++ "minLength": 1,++ "maxLength": 131072++ },++ "tools": {++ "type": "array",++ "maxItems": 8,++ "uniqueItems": true,++ "items": {++ "enum": [++ "claude-code",++ "codex",++ "opencode",++ "command-code",++ "minimax-code",++ "aider",++ "agents"++ ]++ }++ },++ "audience": {++ "enum": [++ "public",++ "link",++ "people",++ "private"++ ]++ },++ "created_by": {++ "type": "string",++ "pattern": "^(usr_[0-9A-HJKMNP-TV-Z]{26}|system)$"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "note": {++ "type": "string",++ "maxLength": 200,++ "description": "Why this version was written: created, edited, published, or rolled back to N."++ }++ }++ }++ },"services.app-manifest": {"version": "1.0.0","owner": "services",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.AI API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bench API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Billing API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Blog API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bot API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Chat API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Codes API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Community API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Coupons API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Deals API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Domains API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Events API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Food API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Games API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Host API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Inventory API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Live API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.MediaHub API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Media API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Network API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.News API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenRestream API",-- "version": "0.311.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Play API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Quest API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Report API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Reviews API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Run API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Search API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Services API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Sources API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Space API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tips API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Today API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tools API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Trade API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.VIP API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Vision API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Watch API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Wiki API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Work API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Zone API",-- "version": "0.311.0",-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.312.0",++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -87024,6 +87024,174 @@ export interface CodesModerationActionPayload {details?: {};}++/** [email protected] (owner: codes) */++/**++ * codes.skill@1: one skill, rule, MCP server, command or hook in the OpenVibe.Codes hub (the Compute plan §5, E6). KIND says what it is: a skill is a SKILL.md folder the agent tools load, a rule is text for the tools' AGENTS.md/CLAUDE.md files, an mcp record is one MCP server definition, and command/hook are a slash command and a hook. SLUG is the folder name (lowercase letters, digits and hyphens) and is stable within one owner. VERSION is the newest record in codes.skill-version@1; BODY is that version's content. AUDIENCE is the four sharing audiences of openvibe-sdk/share: private (the owner only), people (the owner and the members listed in codes_skill_members), link (anyone with the link, not in the gallery) and public (the gallery, search and agents). A private, people or link record is never in the gallery. OFFICIAL marks OpenVibe's own skills. TOOLS names the harnesses the skill is written for; an empty list means every tool the Node knows. The body is untrusted text: the page renders it through the markup gate (escape first, then a small Markdown subset), never as HTML.++ */++export interface CodesSkill {++ /**++ * The hub id (skl_ + ULID).++ */++ id: string;++ /**++ * The person who owns the record.++ */++ owner_subject: string;++ kind: "skill" | "rule" | "mcp" | "command" | "hook";++ /**++ * The stable folder name (SKILL.md lives in a folder with this name).++ */++ slug: string;++ title: string;++ summary: string;++ /**++ * The sharing audience, the same four openvibe-sdk/share uses.++ */++ audience: "public" | "link" | "people" | "private";++ /**++ * True for OpenVibe's own records; the gallery shows them beside community ones.++ */++ official: boolean;++ /**++ * @maxItems 8++ */++ tools:++ | []++ | ["claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ];++ /**++ * The newest coded_skill_versions row for this record.++ */++ version: number;++ /**++ * The skill's SKILL.md body (or the rule/command/hook/MCP text), untrusted Markdown.++ */++ body: string;++ created_at: string;++ updated_at: string;++}++++/** [email protected] (owner: codes) */++/**++ * codes.skill-version@1: one immutable version of a codes.skill@1 record in the OpenVibe.Codes skills hub. Every save writes a new version; VERSION starts at 1 and only grows, and SKILL_ID plus VERSION is the key. BODY and SUMMARY are the content at that version, TOOLS and AUDIENCE the settings it had, and NOTE says why it was written (created, edited, published, or rolled back to N). A rollback never rewrites an old row: it copies the chosen version into a new one, so the history of what every machine synced stays exact and the Node's state can name the version it wrote.++ */++export interface CodesSkillVersion {++ skill_id: string;++ version: number;++ summary: string;++ body: string;++ /**++ * @maxItems 8++ */++ tools:++ | []++ | ["claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ]++ | [++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",++ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"++ ];++ audience: "public" | "link" | "people" | "private";++ created_by: string;++ created_at: string;++ /**++ * Why this version was written: created, edited, published, or rolled back to N.++ */++ note?: string;++}++/** [email protected] (owner: services) *//** [email protected] (owner: services) */@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.311.0",++ "version": "0.312.0","description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.","main": "index.js","types": "generated/typescript/index.d.ts",
@@ -1,5 +1,11 @@
@@ -1,5 +1,11 @@
# Changelog
# Changelog
+## 0.312.0 — 2026-11-07
+
+- Add the Codes skills-hub records (the Compute plan §5, E6). `codes.skill@1` is one skill, rule, MCP server, command or hook: its owner, kind, stable slug, title, summary, the four sharing audiences (`private`, `people`, `link`, `public`), the harnesses it is written for, the newest version and that version's body. A `private`, `people` or `link` record is never in the gallery; only `public` is. The body is untrusted Markdown and the page renders it through the markup gate.
+- Add `codes.skill-version@1`: one immutable version of a record, keyed by `skill_id` and a growing `version`, with the body, summary, tools, audience, author and the note that says why it was written. A rollback copies the chosen version into a new one rather than rewriting history, so a Node that synced version 3 can still name it.
+- Valid and invalid fixtures cover a public skill, a private rule, a people-shared MCP record, versions 1 and 4, and the bad ids, kinds, audiences, tools, bodies and authors.
+
## 0.311.0 — 2026-11-07
## 0.311.0 — 2026-11-07
- Add `<service>.config.manage` for the eight services that hold an owner input and that Network's admin proxy now reaches for the owner's Setup tab (OWNER-SETUP-AND-ADMIN-CLARITY-DESIGN, 2026-11-07): `chat`, `connect`, `deals`, `work`, `sources`, `design`, `domains` and `media`. Each is internal, held only by Network's admin proxy acting for the owner, never grantable to apps, and **planned** until its service mounts openvibe-shared/config's routes on `/internal/config`; the service then turns it active and lists it in its manifest (Deals' own test pins that list, so listing it early would break its pin bump). Planned capabilities verify like active ones, so Network's grant works the day a service mounts the routes.
- Add `<service>.config.manage` for the eight services that hold an owner input and that Network's admin proxy now reaches for the owner's Setup tab (OWNER-SETUP-AND-ADMIN-CLARITY-DESIGN, 2026-11-07): `chat`, `connect`, `deals`, `work`, `sources`, `design`, `domains` and `media`. Each is internal, held only by Network's admin proxy acting for the owner, never grantable to apps, and **planned** until its service mounts openvibe-shared/config's routes on `/internal/config`; the service then turns it active and lists it in its manifest (Deals' own test pins that list, so listing it early would break its pin bump). Planned capabilities verify like active ones, so Network's grant works the day a service mounts the routes.
@@ -454,6 +454,24 @@
@@ -454,6 +454,24 @@
"status": "retired",
"status": "retired",
"adr": "ADR-022"
"adr": "ADR-022"
},
},
+ {
+ "id": "codes.skill",
+ "version": "1.0.0",
+ "owner": "codes",
+ "schema": "codes/skill.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "codes.skill-version",
+ "version": "1.0.0",
+ "owner": "codes",
+ "schema": "codes/skill-version.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
+ },
{
{
"id": "services.app-manifest",
"id": "services.app-manifest",
"version": "1.0.0",
"version": "1.0.0",
new file mode 100644
new file mode 100644
@@ -0,0 +1,74 @@
@@ -0,0 +1,74 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/codes/skill-version.v1.json",
+ "title": "CodesSkillVersion",
+ "description": "codes.skill-version@1: one immutable version of a codes.skill@1 record in the OpenVibe.Codes skills hub. Every save writes a new version; VERSION starts at 1 and only grows, and SKILL_ID plus VERSION is the key. BODY and SUMMARY are the content at that version, TOOLS and AUDIENCE the settings it had, and NOTE says why it was written (created, edited, published, or rolled back to N). A rollback never rewrites an old row: it copies the chosen version into a new one, so the history of what every machine synced stays exact and the Node's state can name the version it wrote.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "skill_id",
+ "version",
+ "summary",
+ "body",
+ "tools",
+ "audience",
+ "created_by",
+ "created_at"
+ ],
+ "properties": {
+ "skill_id": {
+ "type": "string",
+ "pattern": "^skl_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "version": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "summary": {
+ "type": "string",
+ "maxLength": 500
+ },
+ "body": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 131072
+ },
+ "tools": {
+ "type": "array",
+ "maxItems": 8,
+ "uniqueItems": true,
+ "items": {
+ "enum": [
+ "claude-code",
+ "codex",
+ "opencode",
+ "command-code",
+ "minimax-code",
+ "aider",
+ "agents"
+ ]
+ }
+ },
+ "audience": {
+ "enum": [
+ "public",
+ "link",
+ "people",
+ "private"
+ ]
+ },
+ "created_by": {
+ "type": "string",
+ "pattern": "^(usr_[0-9A-HJKMNP-TV-Z]{26}|system)$"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "note": {
+ "type": "string",
+ "maxLength": 200,
+ "description": "Why this version was written: created, edited, published, or rolled back to N."
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,106 @@
@@ -0,0 +1,106 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/codes/skill.v1.json",
+ "title": "CodesSkill",
+ "description": "codes.skill@1: one skill, rule, MCP server, command or hook in the OpenVibe.Codes hub (the Compute plan §5, E6). KIND says what it is: a skill is a SKILL.md folder the agent tools load, a rule is text for the tools' AGENTS.md/CLAUDE.md files, an mcp record is one MCP server definition, and command/hook are a slash command and a hook. SLUG is the folder name (lowercase letters, digits and hyphens) and is stable within one owner. VERSION is the newest record in codes.skill-version@1; BODY is that version's content. AUDIENCE is the four sharing audiences of openvibe-sdk/share: private (the owner only), people (the owner and the members listed in codes_skill_members), link (anyone with the link, not in the gallery) and public (the gallery, search and agents). A private, people or link record is never in the gallery. OFFICIAL marks OpenVibe's own skills. TOOLS names the harnesses the skill is written for; an empty list means every tool the Node knows. The body is untrusted text: the page renders it through the markup gate (escape first, then a small Markdown subset), never as HTML.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "owner_subject",
+ "kind",
+ "slug",
+ "title",
+ "summary",
+ "audience",
+ "official",
+ "tools",
+ "version",
+ "body",
+ "created_at",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^skl_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The hub id (skl_ + ULID)."
+ },
+ "owner_subject": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The person who owns the record."
+ },
+ "kind": {
+ "enum": [
+ "skill",
+ "rule",
+ "mcp",
+ "command",
+ "hook"
+ ]
+ },
+ "slug": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9-]{0,63}$",
+ "description": "The stable folder name (SKILL.md lives in a folder with this name)."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ },
+ "summary": {
+ "type": "string",
+ "maxLength": 500
+ },
+ "audience": {
+ "enum": [
+ "public",
+ "link",
+ "people",
+ "private"
+ ],
+ "description": "The sharing audience, the same four openvibe-sdk/share uses."
+ },
+ "official": {
+ "type": "boolean",
+ "description": "True for OpenVibe's own records; the gallery shows them beside community ones."
+ },
+ "tools": {
+ "type": "array",
+ "maxItems": 8,
+ "uniqueItems": true,
+ "items": {
+ "enum": [
+ "claude-code",
+ "codex",
+ "opencode",
+ "command-code",
+ "minimax-code",
+ "aider",
+ "agents"
+ ]
+ }
+ },
+ "version": {
+ "type": "integer",
+ "minimum": 1,
+ "description": "The newest coded_skill_versions row for this record."
+ },
+ "body": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 131072,
+ "description": "The skill's SKILL.md body (or the rule/command/hook/MCP text), untrusted Markdown."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "skill_id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "version": 2,
+ "summary": "",
+ "body": "text",
+ "tools": [],
+ "audience": "public",
+ "created_by": "somebody",
+ "created_at": "2026-11-07T09:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "skill_id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "version": 2,
+ "summary": "",
+ "body": "",
+ "tools": [],
+ "audience": "private",
+ "created_by": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
+ "created_at": "2026-11-07T09:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "skill_id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "version": 0,
+ "summary": "",
+ "body": "text",
+ "tools": [],
+ "audience": "public",
+ "created_by": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
+ "created_at": "2026-11-07T09:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "skill_id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "version": 1,
+ "summary": "Open a pull request, wait for CI, and merge only when it is green.",
+ "body": "---\nname: ship-a-change\ndescription: Open a PR, wait for CI, and merge only when it is green.\n---\n\n# Ship a change\n",
+ "tools": [
+ "claude-code"
+ ],
+ "audience": "private",
+ "created_by": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
+ "created_at": "2026-11-07T09:00:00.000Z",
+ "note": "created"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
+{
+ "skill_id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "version": 4,
+ "summary": "Open a pull request, wait for CI, and merge only when it is green.",
+ "body": "---\nname: ship-a-change\ndescription: Open a PR, wait for CI, and merge only when it is green.\n---\n\n# Ship a change\n\nRolled back to the three-step version.\n",
+ "tools": [
+ "claude-code",
+ "codex",
+ "opencode"
+ ],
+ "audience": "public",
+ "created_by": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
+ "created_at": "2026-11-07T10:30:00.000Z",
+ "note": "rolled back to 1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
+{
+ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
+ "kind": "skill",
+ "slug": "ship-a-change",
+ "title": "Ship a change",
+ "summary": "",
+ "audience": "everyone",
+ "official": false,
+ "tools": [],
+ "version": 1,
+ "body": "text",
+ "created_at": "2026-11-07T09:00:00.000Z",
+ "updated_at": "2026-11-07T09:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
+{
+ "id": "skl_bad",
+ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
+ "kind": "skill",
+ "slug": "ship-a-change",
+ "title": "Ship a change",
+ "summary": "",
+ "audience": "public",
+ "official": false,
+ "tools": [],
+ "version": 1,
+ "body": "text",
+ "created_at": "2026-11-07T09:00:00.000Z",
+ "updated_at": "2026-11-07T09:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
+{
+ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
+ "kind": "plugin",
+ "slug": "ship-a-change",
+ "title": "Ship a change",
+ "summary": "",
+ "audience": "public",
+ "official": false,
+ "tools": [],
+ "version": 1,
+ "body": "text",
+ "created_at": "2026-11-07T09:00:00.000Z",
+ "updated_at": "2026-11-07T09:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
+{
+ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
+ "kind": "skill",
+ "slug": "Ship a change",
+ "title": "Ship a change",
+ "summary": "",
+ "audience": "public",
+ "official": false,
+ "tools": [
+ "not-a-tool"
+ ],
+ "version": 1,
+ "body": "text",
+ "created_at": "2026-11-07T09:00:00.000Z",
+ "updated_at": "2026-11-07T09:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
+{
+ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
+ "kind": "skill",
+ "slug": "ship-a-change",
+ "title": "Ship a change",
+ "summary": "",
+ "audience": "public",
+ "official": false,
+ "tools": [],
+ "version": 1,
+ "created_at": "2026-11-07T09:00:00.000Z",
+ "updated_at": "2026-11-07T09:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,18 @@
@@ -0,0 +1,18 @@
+{
+ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW3B",
+ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
+ "kind": "mcp",
+ "slug": "openvibe-know",
+ "title": "OpenVibe Know",
+ "summary": "The shared knowledge lookup as an MCP server.",
+ "audience": "people",
+ "official": true,
+ "tools": [
+ "claude-code",
+ "codex"
+ ],
+ "version": 2,
+ "body": "{\"command\":\"ov-know-mcp\",\"args\":[]}",
+ "created_at": "2026-11-07T09:00:00.000Z",
+ "updated_at": "2026-11-07T11:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
+{
+ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW2A",
+ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
+ "kind": "rule",
+ "slug": "no-force-push",
+ "title": "Never force-push",
+ "summary": "A branch is append-only once somebody may have read it.",
+ "audience": "private",
+ "official": false,
+ "tools": [],
+ "version": 1,
+ "body": "Never force-push a shared branch; add a commit instead.",
+ "created_at": "2026-11-07T09:00:00.000Z",
+ "updated_at": "2026-11-07T09:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,19 @@
@@ -0,0 +1,19 @@
+{
+ "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
+ "kind": "skill",
+ "slug": "ship-a-change",
+ "title": "Ship a change",
+ "summary": "Open a pull request, wait for CI, and merge only when it is green.",
+ "audience": "public",
+ "official": false,
+ "tools": [
+ "claude-code",
+ "codex",
+ "opencode"
+ ],
+ "version": 3,
+ "body": "---\nname: ship-a-change\ndescription: Open a PR, wait for CI, and merge only when it is green.\n---\n\n# Ship a change\n\n1. Read the repository's own instructions.\n2. Run the narrowest test that proves the change.\n3. Open the pull request with what changed and how it was checked.\n",
+ "created_at": "2026-11-07T09:00:00.000Z",
+ "updated_at": "2026-11-07T10:30:00.000Z"
+}
@@ -6546,6 +6546,196 @@
@@ -6546,6 +6546,196 @@
"$ref": "../../common/moderation-action.v1.json"
"$ref": "../../common/moderation-action.v1.json"
}
}
},
},
+ "codes.skill": {
+ "version": "1.0.0",
+ "owner": "codes",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/codes/skill.v1.json",
+ "title": "CodesSkill",
+ "description": "codes.skill@1: one skill, rule, MCP server, command or hook in the OpenVibe.Codes hub (the Compute plan §5, E6). KIND says what it is: a skill is a SKILL.md folder the agent tools load, a rule is text for the tools' AGENTS.md/CLAUDE.md files, an mcp record is one MCP server definition, and command/hook are a slash command and a hook. SLUG is the folder name (lowercase letters, digits and hyphens) and is stable within one owner. VERSION is the newest record in codes.skill-version@1; BODY is that version's content. AUDIENCE is the four sharing audiences of openvibe-sdk/share: private (the owner only), people (the owner and the members listed in codes_skill_members), link (anyone with the link, not in the gallery) and public (the gallery, search and agents). A private, people or link record is never in the gallery. OFFICIAL marks OpenVibe's own skills. TOOLS names the harnesses the skill is written for; an empty list means every tool the Node knows. The body is untrusted text: the page renders it through the markup gate (escape first, then a small Markdown subset), never as HTML.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "owner_subject",
+ "kind",
+ "slug",
+ "title",
+ "summary",
+ "audience",
+ "official",
+ "tools",
+ "version",
+ "body",
+ "created_at",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^skl_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The hub id (skl_ + ULID)."
+ },
+ "owner_subject": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The person who owns the record."
+ },
+ "kind": {
+ "enum": [
+ "skill",
+ "rule",
+ "mcp",
+ "command",
+ "hook"
+ ]
+ },
+ "slug": {
+ "type": "string",
+ "pattern": "^[a-z0-9][a-z0-9-]{0,63}$",
+ "description": "The stable folder name (SKILL.md lives in a folder with this name)."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 120
+ },
+ "summary": {
+ "type": "string",
+ "maxLength": 500
+ },
+ "audience": {
+ "enum": [
+ "public",
+ "link",
+ "people",
+ "private"
+ ],
+ "description": "The sharing audience, the same four openvibe-sdk/share uses."
+ },
+ "official": {
+ "type": "boolean",
+ "description": "True for OpenVibe's own records; the gallery shows them beside community ones."
+ },
+ "tools": {
+ "type": "array",
+ "maxItems": 8,
+ "uniqueItems": true,
+ "items": {
+ "enum": [
+ "claude-code",
+ "codex",
+ "opencode",
+ "command-code",
+ "minimax-code",
+ "aider",
+ "agents"
+ ]
+ }
+ },
+ "version": {
+ "type": "integer",
+ "minimum": 1,
+ "description": "The newest coded_skill_versions row for this record."
+ },
+ "body": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 131072,
+ "description": "The skill's SKILL.md body (or the rule/command/hook/MCP text), untrusted Markdown."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "codes.skill-version": {
+ "version": "1.0.0",
+ "owner": "codes",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/codes/skill-version.v1.json",
+ "title": "CodesSkillVersion",
+ "description": "codes.skill-version@1: one immutable version of a codes.skill@1 record in the OpenVibe.Codes skills hub. Every save writes a new version; VERSION starts at 1 and only grows, and SKILL_ID plus VERSION is the key. BODY and SUMMARY are the content at that version, TOOLS and AUDIENCE the settings it had, and NOTE says why it was written (created, edited, published, or rolled back to N). A rollback never rewrites an old row: it copies the chosen version into a new one, so the history of what every machine synced stays exact and the Node's state can name the version it wrote.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "skill_id",
+ "version",
+ "summary",
+ "body",
+ "tools",
+ "audience",
+ "created_by",
+ "created_at"
+ ],
+ "properties": {
+ "skill_id": {
+ "type": "string",
+ "pattern": "^skl_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "version": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "summary": {
+ "type": "string",
+ "maxLength": 500
+ },
+ "body": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 131072
+ },
+ "tools": {
+ "type": "array",
+ "maxItems": 8,
+ "uniqueItems": true,
+ "items": {
+ "enum": [
+ "claude-code",
+ "codex",
+ "opencode",
+ "command-code",
+ "minimax-code",
+ "aider",
+ "agents"
+ ]
+ }
+ },
+ "audience": {
+ "enum": [
+ "public",
+ "link",
+ "people",
+ "private"
+ ]
+ },
+ "created_by": {
+ "type": "string",
+ "pattern": "^(usr_[0-9A-HJKMNP-TV-Z]{26}|system)$"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "note": {
+ "type": "string",
+ "maxLength": 200,
+ "description": "Why this version was written: created, edited, published, or rolled back to N."
+ }
+ }
+ }
+ },
"services.app-manifest": {
"services.app-manifest": {
"version": "1.0.0",
"version": "1.0.0",
"owner": "services",
"owner": "services",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Actor API",
"title": "OpenVibe.Actor API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.AI API",
"title": "OpenVibe.AI API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bench API",
"title": "OpenVibe.Bench API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Billing API",
"title": "OpenVibe.Billing API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Blog API",
"title": "OpenVibe.Blog API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bot API",
"title": "OpenVibe.Bot API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Chat API",
"title": "OpenVibe.Chat API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Codes API",
"title": "OpenVibe.Codes API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Community API",
"title": "OpenVibe.Community API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Coupons API",
"title": "OpenVibe.Coupons API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Deals API",
"title": "OpenVibe.Deals API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Domains API",
"title": "OpenVibe.Domains API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Events API",
"title": "OpenVibe.Events API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Food API",
"title": "OpenVibe.Food API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Games API",
"title": "OpenVibe.Games API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Host API",
"title": "OpenVibe.Host API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Inventory API",
"title": "OpenVibe.Inventory API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Live API",
"title": "OpenVibe.Live API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.MediaHub API",
"title": "OpenVibe.MediaHub API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Media API",
"title": "OpenVibe.Media API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Network API",
"title": "OpenVibe.Network API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.News API",
"title": "OpenVibe.News API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenRestream API",
"title": "OpenRestream API",
- "version": "0.311.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Play API",
"title": "OpenVibe.Play API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Quest API",
"title": "OpenVibe.Quest API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Report API",
"title": "OpenVibe.Report API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Reviews API",
"title": "OpenVibe.Reviews API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Run API",
"title": "OpenVibe.Run API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Search API",
"title": "OpenVibe.Search API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Services API",
"title": "OpenVibe.Services API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Sources API",
"title": "OpenVibe.Sources API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Space API",
"title": "OpenVibe.Space API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tips API",
"title": "OpenVibe.Tips API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Today API",
"title": "OpenVibe.Today API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tools API",
"title": "OpenVibe.Tools API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Trade API",
"title": "OpenVibe.Trade API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.VIP API",
"title": "OpenVibe.VIP API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Vision API",
"title": "OpenVibe.Vision API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Watch API",
"title": "OpenVibe.Watch API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Wiki API",
"title": "OpenVibe.Wiki API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Work API",
"title": "OpenVibe.Work API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Zone API",
"title": "OpenVibe.Zone API",
- "version": "0.311.0",
- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.311.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.312.0",
+ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.312.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -87024,6 +87024,174 @@ export interface CodesModerationActionPayload {
@@ -87024,6 +87024,174 @@ export interface CodesModerationActionPayload {
details?: {};
details?: {};
}
}
+/** [email protected] (owner: codes) */
+/**
+ * codes.skill@1: one skill, rule, MCP server, command or hook in the OpenVibe.Codes hub (the Compute plan §5, E6). KIND says what it is: a skill is a SKILL.md folder the agent tools load, a rule is text for the tools' AGENTS.md/CLAUDE.md files, an mcp record is one MCP server definition, and command/hook are a slash command and a hook. SLUG is the folder name (lowercase letters, digits and hyphens) and is stable within one owner. VERSION is the newest record in codes.skill-version@1; BODY is that version's content. AUDIENCE is the four sharing audiences of openvibe-sdk/share: private (the owner only), people (the owner and the members listed in codes_skill_members), link (anyone with the link, not in the gallery) and public (the gallery, search and agents). A private, people or link record is never in the gallery. OFFICIAL marks OpenVibe's own skills. TOOLS names the harnesses the skill is written for; an empty list means every tool the Node knows. The body is untrusted text: the page renders it through the markup gate (escape first, then a small Markdown subset), never as HTML.
+ */
+export interface CodesSkill {
+ /**
+ * The hub id (skl_ + ULID).
+ */
+ id: string;
+ /**
+ * The person who owns the record.
+ */
+ owner_subject: string;
+ kind: "skill" | "rule" | "mcp" | "command" | "hook";
+ /**
+ * The stable folder name (SKILL.md lives in a folder with this name).
+ */
+ slug: string;
+ title: string;
+ summary: string;
+ /**
+ * The sharing audience, the same four openvibe-sdk/share uses.
+ */
+ audience: "public" | "link" | "people" | "private";
+ /**
+ * True for OpenVibe's own records; the gallery shows them beside community ones.
+ */
+ official: boolean;
+ /**
+ * @maxItems 8
+ */
+ tools:
+ | []
+ | ["claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ];
+ /**
+ * The newest coded_skill_versions row for this record.
+ */
+ version: number;
+ /**
+ * The skill's SKILL.md body (or the rule/command/hook/MCP text), untrusted Markdown.
+ */
+ body: string;
+ created_at: string;
+ updated_at: string;
+}
+
+/** [email protected] (owner: codes) */
+/**
+ * codes.skill-version@1: one immutable version of a codes.skill@1 record in the OpenVibe.Codes skills hub. Every save writes a new version; VERSION starts at 1 and only grows, and SKILL_ID plus VERSION is the key. BODY and SUMMARY are the content at that version, TOOLS and AUDIENCE the settings it had, and NOTE says why it was written (created, edited, published, or rolled back to N). A rollback never rewrites an old row: it copies the chosen version into a new one, so the history of what every machine synced stays exact and the Node's state can name the version it wrote.
+ */
+export interface CodesSkillVersion {
+ skill_id: string;
+ version: number;
+ summary: string;
+ body: string;
+ /**
+ * @maxItems 8
+ */
+ tools:
+ | []
+ | ["claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ]
+ | [
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents",
+ "claude-code" | "codex" | "opencode" | "command-code" | "minimax-code" | "aider" | "agents"
+ ];
+ audience: "public" | "link" | "people" | "private";
+ created_by: string;
+ created_at: string;
+ /**
+ * Why this version was written: created, edited, published, or rolled back to N.
+ */
+ note?: string;
+}
+
/** [email protected] (owner: services) */
/** [email protected] (owner: services) */
/** [email protected] (owner: services) */
/** [email protected] (owner: services) */
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.311.0",
+ "version": "0.312.0",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"main": "index.js",
"types": "generated/typescript/index.d.ts",
"types": "generated/typescript/index.d.ts",