Files
market/docs/architecture.md
zeekay 661a6a28d5 rebrand: Bot Hub → Hanzo Market, white-label via @luxfi/brand schema
- Repo transferred hanzobot/hub → hanzoai/market (matches owned hanzo.market domain)
- npm package: bothub → @hanzoai/market, packages/bothub → packages/market
- bothub-schema → @hanzoai/market-schema
- CLI binary: bothub → market
- Brand: Bot Hub → Hanzo Market across ~95 user-facing surfaces (README, docs, k8s,
  Dockerfile, public/manifest.json, OG image, CLI banner, site config, theme)
- Brand-neutral white-label: src/brand/ owns BrandConfig + BrandTheme + loader,
  public/brands/<id>.json presets for hanzo, zoo, lux, pars, liquidity, generic
- BRAND_ID env at build picks default; ConfigMap-mounted brand.json overrides at runtime
- Legacy paths retained for compat: ~/.bothub, .bothubignore, /.well-known/bothub.json,
  bothub-theme localStorage key, LEGACY_HOSTS for hub.hanzo.bot/clawhub.ai
- Fixed broken sed-replace artifacts in packages/market/src/cli/botConfig.test.ts
- Drops Clawd/OpenClaw dead brand surface, keeps Clawdis* schema types and
  clawd skill directory paths (backward compat for installed bot products)
2026-05-29 13:46:09 -07:00

1.9 KiB
Raw Permalink Blame History

summary, read_when
summary read_when
System overview: web app + Convex backend + CLI + shared schema.
Orienting in codebase
Tracing a user flow across layers

Architecture

Pieces

  • Web app: TanStack Start (React) under src/.
  • Backend: Convex under convex/ (DB, storage, actions, HTTP routes).
  • CLI: packages/market/ (published as @hanzoai/market; bin market; legacy bothub).
  • Shared schemas/routes: packages/schema/ (@hanzoai/market-schema).

Data + storage

  • Skill “bundle” = versioned set of text files stored in Convex _storage.
  • Metadata extracted from SKILL.md frontmatter.
  • Stats stored on skills (downloads, installs, stars, comments, …).

Main flows

Browse (web)

  • UI reads skill metadata + latest version from Convex queries/actions.
  • SKILL.md rendered as Markdown.

Search (HTTP)

  • /api/v1/search?q=... routes to Convex action for vector search.
  • Embeddings currently generated during publish.

Install (CLI)

  • Resolve latest version via /api/v1/skills/<slug>.
  • Download zip via /api/v1/download?slug=...&version=....
  • Extract into ./skills/<slug> (default).
  • Persist install state:
    • ./.market/lock.json (per workdir, legacy .bothub)
    • ./skills/<slug>/.market/origin.json (per skill folder, legacy .bothub)

Update (CLI)

  • Hash local files, call /api/v1/resolve?slug=...&hash=<sha256>.
  • If local matches a known version → use that for “current”.
  • If local doesn’t match:
    • refuse by default
    • or overwrite with --force

Publish (CLI)

  • Publish via POST /api/v1/skills (multipart; requires Bearer token).

Sync (CLI)

  • Scan roots for skill folders (contain SKILL.md).
  • Compute fingerprint; compare to registry state.
  • Optionally reports telemetry (see docs/telemetry.md).
  • Publishes new/changed skills (skips modified installed skills inside install root).