openvibers/openvibe.contracts Commits

0.312.0: the skills-hub records (codes.skill@1 and codes.skill-version@1) (#320)

OP OpenVibers committed 6 days ago · cfa897c964 · 62 files, +833 −85

* 0.309.0: the skills-hub records, codes.skill@1 and codes.skill-version@1

The Compute plan §5 hub needs a record per skill, rule, MCP server, command and
hook: its owner, kind, stable slug, title, summary, the four openvibe-sdk/share
audiences, the tools it is written for, and the newest immutable version's body.
A rollback copies a version into a new one, so a Node that synced version 3 can
still name it.

* Merge origin/main into feat/skills-records; take 0.312.0

main released 0.309.0 (pooled machines), 0.310.0 (consent claim) and 0.311.0
(config.manage) while this branch was open, so the skills records are the next
free version, 0.312.0. Generated files are regenerated from the merged source.

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 71d03079..c14ec949 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -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.
ddiff --git a/contracts/catalog.json b/contracts/catalog.json
iindex 791c0e4e..21ac6d4e 100644
---- a/contracts/catalog.json
++++ b/contracts/catalog.json
@@@ -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",
ddiff --git a/contracts/codes/skill-version.v1.json b/contracts/codes/skill-version.v1.json
nnew file mode 100644
iindex 00000000..2b9eb5d9
---- /dev/null
++++ b/contracts/codes/skill-version.v1.json
@@@ -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."
++ }
++ }
++}
ddiff --git a/contracts/codes/skill.v1.json b/contracts/codes/skill.v1.json
nnew file mode 100644
iindex 00000000..fbf38301
---- /dev/null
++++ b/contracts/codes/skill.v1.json
@@@ -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"
++ }
++ }
++}
ddiff --git a/fixtures/codes.skill-version/invalid/bad-author.json b/fixtures/codes.skill-version/invalid/bad-author.json
nnew file mode 100644
iindex 00000000..dc4a9d71
---- /dev/null
++++ b/fixtures/codes.skill-version/invalid/bad-author.json
@@@ -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"
++}
ddiff --git a/fixtures/codes.skill-version/invalid/empty-body.json b/fixtures/codes.skill-version/invalid/empty-body.json
nnew file mode 100644
iindex 00000000..51117994
---- /dev/null
++++ b/fixtures/codes.skill-version/invalid/empty-body.json
@@@ -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"
++}
ddiff --git a/fixtures/codes.skill-version/invalid/zero-version.json b/fixtures/codes.skill-version/invalid/zero-version.json
nnew file mode 100644
iindex 00000000..4c469945
---- /dev/null
++++ b/fixtures/codes.skill-version/invalid/zero-version.json
@@@ -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"
++}
ddiff --git a/fixtures/codes.skill-version/valid/v1-created.json b/fixtures/codes.skill-version/valid/v1-created.json
nnew file mode 100644
iindex 00000000..be203573
---- /dev/null
++++ b/fixtures/codes.skill-version/valid/v1-created.json
@@@ -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"
++}
ddiff --git a/fixtures/codes.skill-version/valid/v4-rollback.json b/fixtures/codes.skill-version/valid/v4-rollback.json
nnew file mode 100644
iindex 00000000..f9d56f2d
---- /dev/null
++++ b/fixtures/codes.skill-version/valid/v4-rollback.json
@@@ -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"
++}
ddiff --git a/fixtures/codes.skill/invalid/bad-audience.json b/fixtures/codes.skill/invalid/bad-audience.json
nnew file mode 100644
iindex 00000000..5507a0e2
---- /dev/null
++++ b/fixtures/codes.skill/invalid/bad-audience.json
@@@ -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"
++}
ddiff --git a/fixtures/codes.skill/invalid/bad-id.json b/fixtures/codes.skill/invalid/bad-id.json
nnew file mode 100644
iindex 00000000..f25c2fd1
---- /dev/null
++++ b/fixtures/codes.skill/invalid/bad-id.json
@@@ -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"
++}
ddiff --git a/fixtures/codes.skill/invalid/bad-kind.json b/fixtures/codes.skill/invalid/bad-kind.json
nnew file mode 100644
iindex 00000000..bf22ac3a
---- /dev/null
++++ b/fixtures/codes.skill/invalid/bad-kind.json
@@@ -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"
++}
ddiff --git a/fixtures/codes.skill/invalid/bad-tools.json b/fixtures/codes.skill/invalid/bad-tools.json
nnew file mode 100644
iindex 00000000..bfcf02c5
---- /dev/null
++++ b/fixtures/codes.skill/invalid/bad-tools.json
@@@ -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"
++}
ddiff --git a/fixtures/codes.skill/invalid/missing-body.json b/fixtures/codes.skill/invalid/missing-body.json
nnew file mode 100644
iindex 00000000..baa0f19b
---- /dev/null
++++ b/fixtures/codes.skill/invalid/missing-body.json
@@@ -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"
++}
ddiff --git a/fixtures/codes.skill/valid/mcp.json b/fixtures/codes.skill/valid/mcp.json
nnew file mode 100644
iindex 00000000..b6c6c84c
---- /dev/null
++++ b/fixtures/codes.skill/valid/mcp.json
@@@ -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"
++}
ddiff --git a/fixtures/codes.skill/valid/rule.json b/fixtures/codes.skill/valid/rule.json
nnew file mode 100644
iindex 00000000..3c9497cd
---- /dev/null
++++ b/fixtures/codes.skill/valid/rule.json
@@@ -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"
++}
ddiff --git a/fixtures/codes.skill/valid/skill.json b/fixtures/codes.skill/valid/skill.json
nnew file mode 100644
iindex 00000000..37e7c094
---- /dev/null
++++ b/fixtures/codes.skill/valid/skill.json
@@@ -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"
++}
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex a7bcdc19..94c0215e 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -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",
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex 3154437e..bd1617f0 100644
---- a/generated/openapi/actor.json
++++ b/generated/openapi/actor.json
@@@ -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"
ddiff --git a/generated/openapi/ai.json b/generated/openapi/ai.json
iindex 4d1061bb..f691aa6f 100644
---- a/generated/openapi/ai.json
++++ b/generated/openapi/ai.json
@@@ -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"
ddiff --git a/generated/openapi/bench.json b/generated/openapi/bench.json
iindex 30ecfb89..366c8a0d 100644
---- a/generated/openapi/bench.json
++++ b/generated/openapi/bench.json
@@@ -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"
ddiff --git a/generated/openapi/billing.json b/generated/openapi/billing.json
iindex aee79e2c..7cd58cca 100644
---- a/generated/openapi/billing.json
++++ b/generated/openapi/billing.json
@@@ -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"
ddiff --git a/generated/openapi/blog.json b/generated/openapi/blog.json
iindex 49655aff..f4586b2d 100644
---- a/generated/openapi/blog.json
++++ b/generated/openapi/blog.json
@@@ -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"
ddiff --git a/generated/openapi/bot.json b/generated/openapi/bot.json
iindex 38769e9f..8e283311 100644
---- a/generated/openapi/bot.json
++++ b/generated/openapi/bot.json
@@@ -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"
ddiff --git a/generated/openapi/chat.json b/generated/openapi/chat.json
iindex 9d7aca22..d9e4f6df 100644
---- a/generated/openapi/chat.json
++++ b/generated/openapi/chat.json
@@@ -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"
ddiff --git a/generated/openapi/codes.json b/generated/openapi/codes.json
iindex 8d8fd1e2..bcf43f12 100644
---- a/generated/openapi/codes.json
++++ b/generated/openapi/codes.json
@@@ -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"
ddiff --git a/generated/openapi/community.json b/generated/openapi/community.json
iindex a697c54f..0ed9890b 100644
---- a/generated/openapi/community.json
++++ b/generated/openapi/community.json
@@@ -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"
ddiff --git a/generated/openapi/coupons.json b/generated/openapi/coupons.json
iindex f6697d55..fee3273a 100644
---- a/generated/openapi/coupons.json
++++ b/generated/openapi/coupons.json
@@@ -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"
ddiff --git a/generated/openapi/deals.json b/generated/openapi/deals.json
iindex c9855054..c3bbfab3 100644
---- a/generated/openapi/deals.json
++++ b/generated/openapi/deals.json
@@@ -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"
ddiff --git a/generated/openapi/domains.json b/generated/openapi/domains.json
iindex 4c4f7cf4..c8f73172 100644
---- a/generated/openapi/domains.json
++++ b/generated/openapi/domains.json
@@@ -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"
ddiff --git a/generated/openapi/events.json b/generated/openapi/events.json
iindex 907f2520..86ffeb21 100644
---- a/generated/openapi/events.json
++++ b/generated/openapi/events.json
@@@ -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"
ddiff --git a/generated/openapi/food.json b/generated/openapi/food.json
iindex 71013943..b38aed9b 100644
---- a/generated/openapi/food.json
++++ b/generated/openapi/food.json
@@@ -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"
ddiff --git a/generated/openapi/games.json b/generated/openapi/games.json
iindex 58a2e545..3a2374ee 100644
---- a/generated/openapi/games.json
++++ b/generated/openapi/games.json
@@@ -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"
ddiff --git a/generated/openapi/host.json b/generated/openapi/host.json
iindex c4c56c09..8c840aa4 100644
---- a/generated/openapi/host.json
++++ b/generated/openapi/host.json
@@@ -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"
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex 96745a39..51a675f8 100644
---- a/generated/openapi/inventory.json
++++ b/generated/openapi/inventory.json
@@@ -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"
ddiff --git a/generated/openapi/live.json b/generated/openapi/live.json
iindex 6ba591b5..53a4c5db 100644
---- a/generated/openapi/live.json
++++ b/generated/openapi/live.json
@@@ -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"
ddiff --git a/generated/openapi/media-hub.json b/generated/openapi/media-hub.json
iindex 8df222e9..00671647 100644
---- a/generated/openapi/media-hub.json
++++ b/generated/openapi/media-hub.json
@@@ -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"
ddiff --git a/generated/openapi/media.json b/generated/openapi/media.json
iindex 41cee6a5..f041ef15 100644
---- a/generated/openapi/media.json
++++ b/generated/openapi/media.json
@@@ -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"
ddiff --git a/generated/openapi/network.json b/generated/openapi/network.json
iindex fc07e2b7..ea8d9fac 100644
---- a/generated/openapi/network.json
++++ b/generated/openapi/network.json
@@@ -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"
ddiff --git a/generated/openapi/news.json b/generated/openapi/news.json
iindex a82b837b..6bf800e4 100644
---- a/generated/openapi/news.json
++++ b/generated/openapi/news.json
@@@ -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"
ddiff --git a/generated/openapi/openre.json b/generated/openapi/openre.json
iindex 40a0a67f..b1fb4c5c 100644
---- a/generated/openapi/openre.json
++++ b/generated/openapi/openre.json
@@@ -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"
ddiff --git a/generated/openapi/play.json b/generated/openapi/play.json
iindex e6433f80..0a16c8b8 100644
---- a/generated/openapi/play.json
++++ b/generated/openapi/play.json
@@@ -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"
ddiff --git a/generated/openapi/quest.json b/generated/openapi/quest.json
iindex 4412e639..7ecc88de 100644
---- a/generated/openapi/quest.json
++++ b/generated/openapi/quest.json
@@@ -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"
ddiff --git a/generated/openapi/report.json b/generated/openapi/report.json
iindex 52794f9c..9ad90e03 100644
---- a/generated/openapi/report.json
++++ b/generated/openapi/report.json
@@@ -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"
ddiff --git a/generated/openapi/reviews.json b/generated/openapi/reviews.json
iindex 3d1411f5..992997e3 100644
---- a/generated/openapi/reviews.json
++++ b/generated/openapi/reviews.json
@@@ -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"
ddiff --git a/generated/openapi/run.json b/generated/openapi/run.json
iindex dcb4f8a6..d3e262b8 100644
---- a/generated/openapi/run.json
++++ b/generated/openapi/run.json
@@@ -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"
ddiff --git a/generated/openapi/search.json b/generated/openapi/search.json
iindex d8debbf2..daef055f 100644
---- a/generated/openapi/search.json
++++ b/generated/openapi/search.json
@@@ -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"
ddiff --git a/generated/openapi/services.json b/generated/openapi/services.json
iindex e6eb7f6a..669d6e18 100644
---- a/generated/openapi/services.json
++++ b/generated/openapi/services.json
@@@ -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"
ddiff --git a/generated/openapi/sources.json b/generated/openapi/sources.json
iindex 4aa9524e..e03dbcea 100644
---- a/generated/openapi/sources.json
++++ b/generated/openapi/sources.json
@@@ -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"
ddiff --git a/generated/openapi/space.json b/generated/openapi/space.json
iindex c6808a33..acab125f 100644
---- a/generated/openapi/space.json
++++ b/generated/openapi/space.json
@@@ -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"
ddiff --git a/generated/openapi/tips.json b/generated/openapi/tips.json
iindex 7cde388e..5b200273 100644
---- a/generated/openapi/tips.json
++++ b/generated/openapi/tips.json
@@@ -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"
ddiff --git a/generated/openapi/today.json b/generated/openapi/today.json
iindex 10fbd6d1..5273ffcc 100644
---- a/generated/openapi/today.json
++++ b/generated/openapi/today.json
@@@ -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"
ddiff --git a/generated/openapi/tools.json b/generated/openapi/tools.json
iindex b96aa52f..57d5142f 100644
---- a/generated/openapi/tools.json
++++ b/generated/openapi/tools.json
@@@ -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"
ddiff --git a/generated/openapi/trade.json b/generated/openapi/trade.json
iindex 2f495ed4..b36ee465 100644
---- a/generated/openapi/trade.json
++++ b/generated/openapi/trade.json
@@@ -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"
ddiff --git a/generated/openapi/vip.json b/generated/openapi/vip.json
iindex e52961dd..1941fc7f 100644
---- a/generated/openapi/vip.json
++++ b/generated/openapi/vip.json
@@@ -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"
ddiff --git a/generated/openapi/vision.json b/generated/openapi/vision.json
iindex 69694010..c047cc96 100644
---- a/generated/openapi/vision.json
++++ b/generated/openapi/vision.json
@@@ -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"
ddiff --git a/generated/openapi/watch.json b/generated/openapi/watch.json
iindex 99526cc7..04632f52 100644
---- a/generated/openapi/watch.json
++++ b/generated/openapi/watch.json
@@@ -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"
ddiff --git a/generated/openapi/wiki.json b/generated/openapi/wiki.json
iindex 5da10b2e..bccf019d 100644
---- a/generated/openapi/wiki.json
++++ b/generated/openapi/wiki.json
@@@ -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"
ddiff --git a/generated/openapi/work.json b/generated/openapi/work.json
iindex 0460ebc9..e4cabc24 100644
---- a/generated/openapi/work.json
++++ b/generated/openapi/work.json
@@@ -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"
ddiff --git a/generated/openapi/zone.json b/generated/openapi/zone.json
iindex d6acf80b..47283179 100644
---- a/generated/openapi/zone.json
++++ b/generated/openapi/zone.json
@@@ -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"
ddiff --git a/generated/typescript/index.d.ts b/generated/typescript/index.d.ts
iindex 16fce848..68d90019 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -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) */
ddiff --git a/package.json b/package.json
iindex 14b9a7f4..4098e894 100644
---- a/package.json
++++ b/package.json
@@@ -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",