GitRepository git.repo@1

Generated at from openvibe-contracts v0.419.0 and openvibe-sdk v0.161.0.

Version
1.0.0
Owner
git
Visibility
public
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/git/repo.v1.json

One repository on OpenVibe.Git (git.openvibe.codes): its owner, visibility, default branch, counts, and — when it has one — its GitHub mirror and the cached GitHub card. api/view/repo.

Fields

FieldTypeRequiredDescriptionConstraints
idstringyesThe repository's own id (repo_<ULID>), stable across a rename.
  • pattern ^repo_[0-9A-HJKMNP-TV-Z]{26}$
ownerobjectyes
  • no other fields
owner.usernamestringyesThe OpenVibe username that owns it, lower-case.
  • pattern ^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){0,38}$
owner.subjectstring | nullThe owner's Network subject; absent when the owner is the organisation account.
  • pattern ^usr_[0-9A-HJKMNP-TV-Z]{26}$
owner.display_namestring | null
owner.avatar_urlstring | null
  • format uri
namestringyesThe repository name; lower-case, and never ending in .git.
  • pattern ^(?!.*\.git$)[a-z0-9][a-z0-9._-]{0,99}$
full_namestringyes<owner>/<name>, the name every API path and clone URL uses.
  • pattern ^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){0,38}/(?!.*\.git$)[a-z0-9][a-z0-9._-]{0,99}$
descriptionstringyes
  • maxLength 500
visibilityenumyes
  • one of "public", "private"
default_branchstringyes
  • minLength 1
  • maxLength 255
topicsarray of stringyes
  • maxItems 20
  • items: pattern ^[a-z0-9][a-z0-9-]{0,34}$
starsintegeryes
  • minimum 0
watchersintegeryes
  • minimum 0
forksintegeryes
  • minimum 0
languagestring | nullyes
languagesobjectLanguage name → share of bytes, 0–100, the largest first.
html_urlstringyes
  • format uri
clone_urlstringyes
  • format uri
mirrorobject | nullA git repository mirrored from somewhere (today: a public GitHub URL).
githubobject | nullThe GitHub card: cached GitHub API readings for the repository's twin.
created_atstringyes
  • format date-time
updated_atstringyes
  • format date-time
pushed_atstring | null
  • format date-time

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: full
{
  "id": "repo_01JQZ8M4T7Y2N5K3B6V9C1X0DA",
  "owner": {
    "username": "openvibers",
    "subject": "usr_01JQZ8M4T7Y2N5K3B6V9C1X0DB",
    "display_name": "OpenVibers",
    "avatar_url": "https://openvibe.media/o/med_01JQZ8M4T7Y2N5K3B6V9C1X0DC"
  },
  "name": "openvibe.codes",
  "full_name": "openvibers/openvibe.codes",
  "description": "Chat with coding agents on your own computers or a cloud desk.",
  "visibility": "public",
  "default_branch": "main",
  "topics": [
    "agents",
    "codes"
  ],
  "stars": 12,
  "watchers": 4,
  "forks": 1,
  "language": "JavaScript",
  "languages": {
    "JavaScript": 72.4,
    "CSS": 19.1,
    "Shell": 8.5
  },
  "html_url": "https://git.openvibe.codes/openvibers/openvibe.codes",
  "clone_url": "https://git.openvibe.codes/openvibers/openvibe.codes.git",
  "mirror": {
    "url": "https://github.com/OpenVibers/OpenVibe.Codes.git",
    "state": "ready",
    "last_synced_at": "2026-11-09T08:47:55Z",
    "error": null
  },
  "github": {
    "full_name": "OpenVibers/OpenVibe.Codes",
    "html_url": "https://github.com/OpenVibers/OpenVibe.Codes",
    "stars": 42,
    "open_issues": 3,
    "open_pull_requests": 2,
    "ci_state": "success",
    "fetched_at": "2026-11-09T09:00:00Z"
  },
  "created_at": "2026-10-15T19:43:04Z",
  "updated_at": "2026-11-09T08:47:55Z",
  "pushed_at": "2026-11-09T08:40:00Z"
}
Valid: private
{
  "id": "repo_01JQZ8M4T7Y2N5K3B6V9C1X0DA",
  "owner": {
    "username": "openvibers",
    "subject": null,
    "display_name": null,
    "avatar_url": null
  },
  "name": "private-notes",
  "full_name": "openvibers/private-notes",
  "description": "",
  "visibility": "private",
  "default_branch": "main",
  "topics": [],
  "stars": 0,
  "watchers": 1,
  "forks": 0,
  "language": null,
  "languages": {},
  "html_url": "https://git.openvibe.codes/openvibers/private-notes",
  "clone_url": "https://git.openvibe.codes/openvibers/private-notes.git",
  "mirror": null,
  "github": null,
  "created_at": "2026-11-09T09:00:00Z",
  "updated_at": "2026-11-09T09:00:00Z",
  "pushed_at": null
}
Rejected: name-ends-with-git
{
  "id": "repo_01JQZ8M4T7Y2N5K3B6V9C1X0DA",
  "owner": {
    "username": "openvibers"
  },
  "name": "openvibe.codes.git",
  "full_name": "openvibers/openvibe.codes.git",
  "description": "A name ending in .git is refused.",
  "visibility": "public",
  "default_branch": "main",
  "topics": [],
  "stars": 0,
  "watchers": 1,
  "forks": 0,
  "language": null,
  "html_url": "https://git.openvibe.codes/openvibers/openvibe.codes.git",
  "clone_url": "https://git.openvibe.codes/openvibers/openvibe.codes.git.git",
  "created_at": "2026-11-09T09:00:00Z",
  "updated_at": "2026-11-09T09:00:00Z"
}
Rejected: visibility-and-stars
{
  "id": "repo_01JQZ8M4T7Y2N5K3B6V9C1X0DA",
  "owner": {
    "username": "openvibers"
  },
  "name": "openvibe.codes",
  "full_name": "openvibers/openvibe.codes",
  "description": "",
  "visibility": "secret",
  "default_branch": "main",
  "topics": [],
  "stars": -1,
  "watchers": 0,
  "forks": 0,
  "language": null,
  "html_url": "https://git.openvibe.codes/openvibers/openvibe.codes",
  "clone_url": "https://git.openvibe.codes/openvibers/openvibe.codes.git",
  "created_at": "2026-11-09T09:00:00Z",
  "updated_at": "2026-11-09T09:00:00Z"
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('git.repo@1', value);   // { valid, errors: [{ path, message }] }