mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-25 00:51:20 +00:00
Add a CI-built skills index served from the docs site. The index is crawled daily by GitHub Actions, resolves all GitHub paths upfront, and is cached locally by the client. When the index is available: - Search uses the cached index (0 GitHub API calls, was 23+) - Install uses resolved paths from index (6 API calls for file downloads only, was 31-45 for discovery + downloads) Total: 68 → 6 GitHub API calls for a typical search + install flow. Unauthenticated users (60 req/hr) can now search and install without hitting rate limits. Components: - scripts/build_skills_index.py: Crawl all sources (skills.sh, GitHub taps, official, clawhub, lobehub), batch-resolve GitHub paths via tree API, output JSON index - tools/skills_hub.py: HermesIndexSource class — search/fetch/inspect backed by the index, with lazy GitHubSource for file downloads - parallel_search_sources() skips external API sources when index is available (0 GitHub calls for search) - .github/workflows/skills-index.yml: twice-daily CI build + deploy - .github/workflows/deploy-site.yml: also builds index during docs deploy Graceful degradation: when the index is unavailable (first run, network down, stale), all methods return empty/None and downstream sources handle the request via direct API as before.
101 lines
2.6 KiB
YAML
101 lines
2.6 KiB
YAML
name: Build Skills Index
|
|
|
|
on:
|
|
schedule:
|
|
# Run twice daily: 6 AM and 6 PM UTC
|
|
- cron: '0 6,18 * * *'
|
|
workflow_dispatch: # Manual trigger
|
|
push:
|
|
branches: [main]
|
|
paths:
|
|
- 'scripts/build_skills_index.py'
|
|
- '.github/workflows/skills-index.yml'
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
build-index:
|
|
# Only run on the upstream repository, not on forks
|
|
if: github.repository == 'NousResearch/hermes-agent'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.11'
|
|
|
|
- name: Install dependencies
|
|
run: pip install httpx pyyaml
|
|
|
|
- name: Build skills index
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: python scripts/build_skills_index.py
|
|
|
|
- name: Upload index artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: skills-index
|
|
path: website/static/api/skills-index.json
|
|
retention-days: 7
|
|
|
|
deploy-with-index:
|
|
needs: build-index
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
pages: write
|
|
id-token: write
|
|
environment:
|
|
name: github-pages
|
|
url: ${{ steps.deploy.outputs.page_url }}
|
|
# Only deploy on schedule or manual trigger (not on every push to the script)
|
|
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: skills-index
|
|
path: website/static/api/
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 20
|
|
cache: npm
|
|
cache-dependency-path: website/package-lock.json
|
|
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.11'
|
|
|
|
- name: Install PyYAML for skill extraction
|
|
run: pip install pyyaml
|
|
|
|
- name: Extract skill metadata for dashboard
|
|
run: python3 website/scripts/extract-skills.py
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
working-directory: website
|
|
|
|
- name: Build Docusaurus
|
|
run: npm run build
|
|
working-directory: website
|
|
|
|
- name: Stage deployment
|
|
run: |
|
|
mkdir -p _site/docs
|
|
cp -r landingpage/* _site/
|
|
cp -r website/build/* _site/docs/
|
|
echo "hermes-agent.nousresearch.com" > _site/CNAME
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-pages-artifact@v3
|
|
with:
|
|
path: _site
|
|
|
|
- name: Deploy to GitHub Pages
|
|
id: deploy
|
|
uses: actions/deploy-pages@v4
|