# jyoung706/skillhub architecture

> Architecture diagram of the GitHub repository jyoung706/skillhub, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jyoung706/skillhub
- Repository: https://github.com/jyoung706/skillhub

## Overview

SkillHub is a self-hosted, governed registry for reusable agent skills. Users publish versioned packages into team or global namespaces; others discover authorized skills through search and install/manage them with the CLI or integrations. The graph also preserves review/governance, suites, authentication, storage, web UI, and GitHub synchronization as distinct capabilities. Relationships are limited to README-documented workflows and source-index/excerpt evidence; several controllers and integration details are unsampled, so their internal call paths are not asserted.

Main entry points: [`server/skillhub-app/src/main/java/com/iflytek/skillhub/controller`](https://github.com/jyoung706/skillhub/tree/main/server/skillhub-app/src/main/java/com/iflytek/skillhub/controller) (API Controllers), [`server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/service/SkillQueryService.java`](https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/service/SkillQueryService.java) (Skill Lifecycle), [`cli/src/index.ts`](https://github.com/jyoung706/skillhub/blob/main/cli/src/index.ts) (SkillHub CLI), [`github-sync-go/internal/worker/pool.go`](https://github.com/jyoung706/skillhub/blob/main/github-sync-go/internal/worker/pool.go) (Sync Worker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User Experience"]
  node_cli["SkillHub CLI<br/>[index.ts]"]
  node_web["Web Portal<br/>[main.tsx]"]
  node_dsh["Agent Plugin<br/>[index.ts]"]
end

subgraph group_registry["Registry and Governance"]
  node_api["API Controllers"]
  node_skill["Skill Lifecycle"]
  node_namespace["Namespace Governance"]
  node_review["Review Governance<br/>[ReviewService.java]"]
  node_accounts["Accounts and Tokens"]
  node_skilldata[("Skill Records<br/>[Skill.java]")]
  node_namespace_data[("Namespace Records<br/>[Namespace.java]")]
  node_review_data[("Review Tasks<br/>[ReviewTask.java]")]
end

subgraph group_discovery["Discovery and Bundles"]
  node_search["Full Text Search"]
  node_suite["Skill Suites"]
  node_bundle_ops["Bundle Operations"]
end

subgraph group_platform["Platform Services"]
  node_object_storage["Package Storage"]
  node_s3["S3 Storage"]
end

subgraph group_sync["GitHub Synchronization"]
  node_github_worker["Sync Worker<br/>[pool.go]"]
  node_github_api["GitHub Client<br/>[client.go]"]
  node_github_server["Sync Endpoints"]
end

node_user(("Registry User"))
node_external_github(("GitHub"))

node_user -->|"uses"| node_cli
node_user -.->|"uses"| node_web
node_cli -->|"calls REST API"| node_api
node_web -.->|"uses platform"| node_api
node_api -.->|"routes skill actions"| node_skill
node_api -.->|"routes namespace actions"| node_namespace
node_api -.->|"routes authentication"| node_accounts
node_skill -->|"reads and updates"| node_skilldata
node_namespace -->|"reads namespace"| node_namespace_data
node_skill -->|"checks access"| node_namespace_data
node_review -.->|"manages tasks"| node_review_data
node_user -->|"discovers skills"| node_search
node_search -->|"filters visibility"| node_skilldata
node_user -.->|"uses suites"| node_suite
node_user -.->|"views operations"| node_bundle_ops
node_cli -->|"installs skills"| node_skill
node_skill -.->|"stores packages"| node_object_storage
node_s3 -->|"implements"| node_object_storage
node_dsh -.->|"connects to registry"| node_api
node_github_worker -.->|"requests repositories"| node_github_api
node_github_worker -.->|"syncs with"| node_github_server
node_github_api -.->|"reads repositories"| node_external_github

click node_cli "https://github.com/jyoung706/skillhub/blob/main/cli/src/index.ts"
click node_web "https://github.com/jyoung706/skillhub/blob/main/web/src/main.tsx"
click node_dsh "https://github.com/jyoung706/skillhub/blob/main/plugins/dsh/src/host/index.ts"
click node_api "https://github.com/jyoung706/skillhub/tree/main/server/skillhub-app/src/main/java/com/iflytek/skillhub/controller"
click node_skill "https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/service/SkillQueryService.java"
click node_namespace "https://github.com/jyoung706/skillhub/tree/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/namespace"
click node_review "https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/review/ReviewService.java"
click node_accounts "https://github.com/jyoung706/skillhub/tree/main/server/skillhub-auth/src/main/java/com/iflytek/skillhub/auth"
click node_skilldata "https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/Skill.java"
click node_namespace_data "https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/namespace/Namespace.java"
click node_review_data "https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/review/ReviewTask.java"
click node_search "https://github.com/jyoung706/skillhub/blob/main/server/skillhub-search/src/main/java/com/iflytek/skillhub/search/postgres/PostgresFullTextQueryService.java"
click node_suite "https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/suite/SkillSuiteQueryService.java"
click node_bundle_ops "https://github.com/jyoung706/skillhub/blob/main/server/skillhub-app/src/main/java/com/iflytek/skillhub/service/bundle/SkillSuiteBundleOperationQueryService.java"
click node_object_storage "https://github.com/jyoung706/skillhub/blob/main/server/skillhub-storage/src/main/java/com/iflytek/skillhub/storage/ObjectStorageService.java"
click node_s3 "https://github.com/jyoung706/skillhub/blob/main/server/skillhub-storage/src/main/java/com/iflytek/skillhub/storage/S3StorageService.java"
click node_github_worker "https://github.com/jyoung706/skillhub/blob/main/github-sync-go/internal/worker/pool.go"
click node_github_api "https://github.com/jyoung706/skillhub/blob/main/github-sync-go/internal/github/client.go"
click node_github_server "https://github.com/jyoung706/skillhub/blob/main/server/skillhub-app/src/main/java/com/iflytek/skillhub/controller/GithubSyncInternalController.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_web,node_dsh,node_user toneBlue
class node_api,node_skill,node_namespace,node_review,node_accounts,node_skilldata,node_namespace_data,node_review_data toneAmber
class node_search,node_suite,node_bundle_ops toneMint
class node_object_storage,node_s3 toneRose
class node_github_worker,node_github_api,node_github_server,node_external_github toneIndigo
```

## Components

### User Experience

- [SkillHub CLI](https://github.com/jyoung706/skillhub/blob/main/cli/src/index.ts): `cli/src/index.ts`
- [Web Portal](https://github.com/jyoung706/skillhub/blob/main/web/src/main.tsx): `web/src/main.tsx`
- [Agent Plugin](https://github.com/jyoung706/skillhub/blob/main/plugins/dsh/src/host/index.ts): `plugins/dsh/src/host/index.ts`

### Registry and Governance

- [API Controllers](https://github.com/jyoung706/skillhub/tree/main/server/skillhub-app/src/main/java/com/iflytek/skillhub/controller): `server/skillhub-app/src/main/java/com/iflytek/skillhub/controller`
- [Skill Lifecycle](https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/service/SkillQueryService.java): `server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/service/SkillQueryService.java`
- [Namespace Governance](https://github.com/jyoung706/skillhub/tree/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/namespace): `server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/namespace`
- [Review Governance](https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/review/ReviewService.java): `server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/review/ReviewService.java`
- [Accounts and Tokens](https://github.com/jyoung706/skillhub/tree/main/server/skillhub-auth/src/main/java/com/iflytek/skillhub/auth): `server/skillhub-auth/src/main/java/com/iflytek/skillhub/auth`
- [Skill Records](https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/Skill.java): `server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/Skill.java`
- [Namespace Records](https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/namespace/Namespace.java): `server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/namespace/Namespace.java`
- [Review Tasks](https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/review/ReviewTask.java): `server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/review/ReviewTask.java`

### Discovery and Bundles

- [Full Text Search](https://github.com/jyoung706/skillhub/blob/main/server/skillhub-search/src/main/java/com/iflytek/skillhub/search/postgres/PostgresFullTextQueryService.java): `server/skillhub-search/src/main/java/com/iflytek/skillhub/search/postgres/PostgresFullTextQueryService.java`
- [Skill Suites](https://github.com/jyoung706/skillhub/blob/main/server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/suite/SkillSuiteQueryService.java): `server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/suite/SkillSuiteQueryService.java`
- [Bundle Operations](https://github.com/jyoung706/skillhub/blob/main/server/skillhub-app/src/main/java/com/iflytek/skillhub/service/bundle/SkillSuiteBundleOperationQueryService.java): `server/skillhub-app/src/main/java/com/iflytek/skillhub/service/bundle/SkillSuiteBundleOperationQueryService.java`

### Platform Services

- [Package Storage](https://github.com/jyoung706/skillhub/blob/main/server/skillhub-storage/src/main/java/com/iflytek/skillhub/storage/ObjectStorageService.java): `server/skillhub-storage/src/main/java/com/iflytek/skillhub/storage/ObjectStorageService.java`
- [S3 Storage](https://github.com/jyoung706/skillhub/blob/main/server/skillhub-storage/src/main/java/com/iflytek/skillhub/storage/S3StorageService.java): `server/skillhub-storage/src/main/java/com/iflytek/skillhub/storage/S3StorageService.java`

### GitHub Synchronization

- [Sync Worker](https://github.com/jyoung706/skillhub/blob/main/github-sync-go/internal/worker/pool.go): `github-sync-go/internal/worker/pool.go`
- [GitHub Client](https://github.com/jyoung706/skillhub/blob/main/github-sync-go/internal/github/client.go): `github-sync-go/internal/github/client.go`
- [Sync Endpoints](https://github.com/jyoung706/skillhub/blob/main/server/skillhub-app/src/main/java/com/iflytek/skillhub/controller/GithubSyncInternalController.java): `server/skillhub-app/src/main/java/com/iflytek/skillhub/controller/GithubSyncInternalController.java`

### Other components

- **Registry User**
- **GitHub**

## Connections

- Registry User → SkillHub CLI: uses (evidence: `README.md`)
- Registry User → Web Portal: uses (evidence: `README.md`)
- SkillHub CLI → API Controllers: calls REST API (evidence: `README.md`)
- Web Portal → API Controllers: uses platform
- API Controllers → Skill Lifecycle: routes skill actions
- API Controllers → Namespace Governance: routes namespace actions
- API Controllers → Accounts and Tokens: routes authentication
- Skill Lifecycle → Skill Records: reads and updates (evidence: `server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/service/SkillQueryService.java`)
- Namespace Governance → Namespace Records: reads namespace (evidence: `server/skillhub-app/src/main/java/com/iflytek/skillhub/service/NamespacePortalQueryAppService.java`)
- Skill Lifecycle → Namespace Records: checks access (evidence: `server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/service/SkillQueryService.java`)
- Review Governance → Review Tasks: manages tasks (evidence: `server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/review/ReviewService.java`)
- Registry User → Full Text Search: discovers skills (evidence: `README.md`)
- Full Text Search → Skill Records: filters visibility (evidence: `server/skillhub-search/src/main/java/com/iflytek/skillhub/search/postgres/PostgresFullTextQueryService.java`)
- Registry User → Skill Suites: uses suites (evidence: `README.md`)
- Registry User → Bundle Operations: views operations
- SkillHub CLI → Skill Lifecycle: installs skills (evidence: `README.md`)
- Skill Lifecycle → Package Storage: stores packages (evidence: `server/skillhub-domain/src/main/java/com/iflytek/skillhub/domain/skill/service/SkillQueryService.java`)
- S3 Storage → Package Storage: implements (evidence: `server/skillhub-storage/src/main/java/com/iflytek/skillhub/storage/S3StorageService.java`)
- Agent Plugin → API Controllers: connects to registry
- Sync Worker → GitHub Client: requests repositories
- Sync Worker → Sync Endpoints: syncs with
- GitHub Client → GitHub: reads repositories
