mirror of
https://github.com/openclaw/clawhub.git
synced 2026-08-14 08:52:21 +00:00
* feat: add staged skills.sh mirror storage * ci: allow guarded CLAW-563 Test deploy * ci: expose guarded Test deploy diagnostics * ci: defer branch guard to deploy step * ci: deploy CLAW-563 PR head to Test * ci: admit CLAW-563 PR Test job * fix: make mirror source recovery durable * ci: trigger labeled mirror load * feat: activate mirror search queries * fix: tighten mirror source typing * fix: bypass protected Test mirror proof * feat: attribute skill metrics by source * feat: present stars as bookmarks * style: format mirror proof changes * fix: bypass protected mirror readback * fix: resume mirror past missing scanner pages * fix: fetch skills.sh mirror audits from api * fix: validate structural skills.sh identities * fix: resolve ambiguous skills.sh mirror identities * feat: stabilize skills.sh mirror ingestion * fix: account mirror identity conflicts in proof * fix: quarantine invalid skills.sh detail ids * fix: resume skills.sh mirror proof * fix: preserve skills.sh mirror provenance * fix: recover exact skills.sh mirror runs * fix: recover stale skills.sh mirror runs * fix: normalize skills.sh mirror topic facets * feat: prove complete skills.sh leaderboard mirror * fix: canonicalize skills.sh source page hashes * test: enable skills.sh rollout in mirror tests * ci: skip unrelated Test deploy pull requests * fix: preserve Vercel preview marker in Test deploy * fix: tighten Test deploy and metric reconciliation * fix: bound mirror detail proof pages * fix: delegate controlled mirror rate limits * fix: preserve mirror reconciliation progress * fix: release mirror retry responses * fix: preserve stale mirror replay state * fix: authenticate mirror source starts * fix: delegate mirror identity rate limits * ci: trigger mirror proof when labeled * ci: couple mirror deploy and proof opt-in * fix: admit permanent Vercel Test runtime * fix: pass Test target to Vercel runtime * test: align bookmark sync browser labels * fix: preserve skills.sh source accounting * fix: preflight active mirror runs * fix: bind mirror snapshot accounting * fix: reject truncated replay hashes * fix: preserve live mirror overlay metadata
7.4 KiB
7.4 KiB
summary, read_when
| summary | read_when | |||
|---|---|---|---|---|
| ClawHub spec: skills registry, versioning, vector search, moderation |
|
ClawHub — product + implementation spec (v1)
Goals
- Minimal, fast SPA for browsing and publishing agent skills.
- Skills stored in Convex (files + metadata + versions + stats).
- GitHub OAuth login; Convex backups with file storage are the source of truth for hosted registry artifact disaster recovery.
- Vector-based search over skill text + metadata.
- Versioning, tags (
latest+ user tags), changelog, rollback (tag movement). - Public read access; upload requires auth.
- Moderation: badges + report handling; audit everything.
Non-goals (v1)
- Paid features, private skills, or binary assets.
- GitHub App sync beyond backups (future phase).
Core objects
User
authId(from Convex Auth provider)handle(GitHub login)- reserved org/platform handles are held separately so official account names cannot be auto-claimed by unrelated sign-ins
name,bioavatarUrl(GitHub, fallback gravatar)role:admin | moderator | user(moderators can soft-delete and flag; admins can hard-delete + change owners)createdAt,updatedAt
Skill
slug(unique)displayNameownerUserIdsummary(from SKILL.md frontmatterdescription)latestVersionIdlatestTagVersionId(forlatesttag)tagsmap:{ tag -> versionId }badges:{ redactionApproved?: { byUserId, at }, highlighted?: { byUserId, at }, official?: { byUserId, at }, deprecated?: { byUserId, at } }officialmarks admin-verified/official skills.deprecatedmarks skills that should not be used for new integrations.
moderationStatus:active | hidden | removedmoderationFlags:string[](automatic detection)moderationNotes,moderationReasonhiddenAt,hiddenBy,lastReviewedAt,reportCountstats: legacy nested compatibility counters; canonical migrated counters live in top-level fields.statsDownloads: native ClawHub downloads.statsSkillsShInstalls: upstream skills.sh installs, stored separately.statsInstallsCurrent,statsInstallsAllTime: OpenClaw install telemetry.statsGithubStars: upstream GitHub popularity.statsStars: ClawHub Bookmarks; existingstarsrows and API names remain for compatibility.- Public Downloads are
statsDownloadsfor native-only skills andstatsDownloads + statsSkillsShInstallsfor skills.sh-indexed skills. - Search ranking continues to use native counters rather than the combined presentation value.
createdAt,updatedAt
SkillVersion
skillIdversion(semver string)tag(string, optional;latestalways maintained separately)changelog(required)files: list of file metadatapath,size,storageId,sha256
parsed(metadata extracted from SKILL.md)vectorDocId(if using RAG component) ORembeddingIdcreatedBy,createdAtsoftDeletedAt(nullable)
Parsed Skill Metadata
From SKILL.md frontmatter + AgentSkills + Clawdis extensions:
name,description,homepage,website,url,emojimetadata.clawdis:always,skillKey,primaryEnv,emoji,homepage,os,requires(bins,anyBins,env,config),install[],nix(plugin,systems),config(requiredEnv,stateDirs,example),cliHelp(string;cli --helpoutput)metadata.clawdbot: alias ofmetadata.clawdis(preferred for nix-clawdbot plugin pointers)- Nix plugins are different from regular skills; they bundle the skill pack, the CLI binary, and config flags/requirements together.
metadatain frontmatter is YAML (object) preferred; legacy JSON-string accepted.
Skill name compatibility
- The Agent Skills
namefield is a portable identifier: 1–64 lowercase alphanumeric or hyphen characters, matching the parent directory. - ClawHub routes skills by
slugand storesdisplayNameas the user-facing catalog label. Publishing, importing, and GitHub sync must preserve that label instead of applying a catalog-preview limit as write validation. - Clients should tolerate non-conforming legacy names when they can load them safely. ClawHub follows that compatibility model rather than blocking or silently renaming existing ecosystem content.
- Public catalog cards and rows may preview normalized names up to 70 characters and then show an ellipsis. The full stored label remains available on the detail page and as hover text; 70 is a presentation rule, not a storage, publish, API, or sync constraint.
Bookmark
skillId,userId,createdAt- Stored in the legacy
starstable and exposed through compatibility API routes namedstars; user-facing product language is Bookmark.
AuditLog
actorUserIdaction(enum:badge.set,badge.unset,role.change)targetType/targetIdmetadata(json)createdAt
Auth + roles
- Convex Auth with GitHub OAuth App.
- Default role
user; bootstrapsteipetetoadminon first login. - Management console: moderators can hide/restore skills + mark duplicates + ban users; admins can change owners, approve badges, hard-delete skills, and ban users (deletes owned skills).
- Role changes are admin-only and audited.
- Reporting: any user can report skills; per-user cap 20 active reports; skill targets auto-hide after >3 unique reports (mods can review/unhide/delete/ban).
Upload flow (50MB per version)
- Client requests upload session.
- Client uploads each bounded regular file via Convex upload URLs.
- Client submits metadata + file list + changelog + version + tags.
- Server validates:
- total size ≤ 50MB
- path and size limits
- SKILL.md exists and frontmatter parseable
- version uniqueness
- GitHub account age ≥ 14 days
- Server stores files + metadata, sets
latesttag, updates stats.
Local fixture data lives in convex/devSeed.ts and fixtures/public-corpus/.
Versioning + tags
- Each upload is a new
SkillVersion. latesttag always points to most recent version unless user re-tags.- Rollback: move
latest(and optionally other tags) to an older version. - Changelog is optional.
Search
- Vector search over: SKILL.md + other text files + metadata summary.
- Convex embeddings + vector index.
- Filters: tag, owner,
redactionApprovedonly, min stars, updatedAt.
Download API
- JSON API for skill metadata + versions.
- Download endpoint returns zip of a version (HTTP action).
- Soft-delete versions; downloads remain for non-deleted versions only.
UI (SPA)
- Home: search + filters + trending/featured + “Highlighted” badge.
- Skill detail: README render, files list, version history, tags, stats, badges.
- Upload/edit: file picker + version + tag + changelog.
- Account settings: name + delete account (permanent, non-recoverable; published skills stay public).
- Admin: user role management + badge approvals + audit log.
Testing + quality
- Vitest 4 with >=70% global coverage.
- Lint: Biome + Oxlint (type-aware).
Vercel
- Env vars: Convex deployment URLs + GitHub OAuth client + OpenAI key (if used).
- SPA feel: client-side transitions, prefetching, optimistic UI.
Open questions (carry forward)
- Embeddings provider key + rate limits.
- Zip generation memory limits (optimize with streaming if needed).
- GitHub App repo sync (phase 2).