Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
182 commits
Select commit Hold shift + click to select a range
cdb60db
feat: add three-layer PII defense system (pre-commit + gitleaks + CLA…
daymade Apr 4, 2026
245bb7c
Update capture-screen skill docs and versioning
daymade Apr 4, 2026
2585235
chore: ignore .skill artifacts and remove tracked packages
daymade Apr 4, 2026
2cd77ba
fix(skill-creator): replace 500-line hard limit with info density pri…
daymade Apr 4, 2026
a4bbcb1
Fix claude-code-history-files-finder: preserve directory structure on…
daymade Apr 5, 2026
ec18578
Fix PII: replace /Users/username/ with ~ and <username> placeholder
daymade Apr 5, 2026
026428d
docs: update docs for directory structure preservation (v1.0.2)
daymade Apr 5, 2026
a3adbed
feat: optimize skills + add pipeline handoff chaining across 9 skills
daymade Apr 5, 2026
881163f
feat(cli-demo-generator): deep rewrite with battle-tested VHS patterns
daymade Apr 6, 2026
f2b3bfc
chore: bump transcript-fixer skill version
daymade Apr 6, 2026
1145c39
feat: add marketplace-dev skill for converting skills repos to plugin…
daymade Apr 6, 2026
f3795b9
feat: add pre-flight checklist hooks to marketplace-dev skill
daymade Apr 6, 2026
3728ef2
feat: add PostToolUse hook to auto-validate marketplace.json on edit
daymade Apr 6, 2026
2900f59
feat: add SKILL.md edit hook — warns to bump version in marketplace.json
daymade Apr 6, 2026
aa4b4e0
feat(twitter-reader): add fetch_article.py for X Articles with images
daymade Apr 6, 2026
519b37a
chore(twitter-reader): bump version to 1.1.0
daymade Apr 6, 2026
187673c
Update transcript-fixer guidance and hook paths
daymade Apr 6, 2026
587eb8b
fix(pdf-creator): resolve CJK text garbled in weasyprint code blocks
daymade Apr 8, 2026
3103455
fix(pdf-creator): extend CJK coverage + handle pandoc-highlighted cod…
daymade Apr 10, 2026
082e307
feat(ima-copilot): add Tencent IMA companion skill v1.0.0
daymade Apr 11, 2026
c70c272
feat(skill-creator): add wrapper-skill specialized workflow v1.7.0
daymade Apr 11, 2026
5908ffc
fix: counter-review findings for ima-copilot v1.0.1 + skill-creator v…
daymade Apr 11, 2026
2d5033d
fix(skill-creator): wrapper-skill workflow completeness pass v1.7.2
daymade Apr 11, 2026
025ac5c
fix(mermaid-tools): narrow plugin snapshot
daymade Apr 11, 2026
49eec9a
fix(skill-creator): declare validation dependencies
daymade Apr 11, 2026
7cf52ec
feat(marketplace): add daymade docs suite
daymade Apr 11, 2026
733346c
refactor(daymade-docs): make suite canonical source
daymade Apr 11, 2026
de4fb3b
feat(marketplace-dev): add cache boundary workflow
daymade Apr 11, 2026
f9f095f
feat(gangtise-copilot): add Gangtise OpenAPI companion skill v1.0.0
daymade Apr 11, 2026
1a5ee18
feat: register 3 orphan skills (v1.46.0) + marketplace-dev v1.2.0 refine
daymade Apr 11, 2026
b33f8de
docs: sync add-skill SOP with check_marketplace.sh and git add safety
daymade Apr 11, 2026
b5d3b66
feat(wechat-article-scraper): v2.9.0 世界级微信文章抓取方案
daymade Apr 11, 2026
244193a
feat(wechat-article-scraper): v2.9.1 新增视频提取功能
daymade Apr 11, 2026
57652c9
chore(marketplace): 更新 wechat-article-scraper 版本到 3.0.0
daymade Apr 11, 2026
02d5ec8
chore(marketplace): 更新 wechat-article-scraper 版本到 3.0.1
daymade Apr 11, 2026
6cd8c18
chore(marketplace): 更新 wechat-article-scraper 版本到 3.0.2
daymade Apr 11, 2026
b725598
refactor(wechat-article-scraper): migrate 48 print statements to stan…
daymade Apr 11, 2026
5ef7f90
feat(wechat-article-scraper): add SQLite caching system v3.1.0
daymade Apr 11, 2026
41d42ee
feat(wechat-article-scraper): add content quality scoring system v3.2.0
daymade Apr 11, 2026
cc1e62d
feat(wechat-article-scraper): add automated test framework v3.3.0
daymade Apr 11, 2026
a106b94
feat(wechat-article-scraper): add Docker containerization support v3.4.0
daymade Apr 11, 2026
58252aa
chore(wechat-article-scraper): bump version to 3.5.0
daymade Apr 11, 2026
012a84b
chore(wechat-article-scraper): bump version to 3.6.0 in marketplace.json
daymade Apr 11, 2026
8031e61
chore(wechat-article-scraper): bump version to 3.7.0 in marketplace.json
daymade Apr 11, 2026
303aacc
chore(wechat-article-scraper): bump version to 3.8.0 in marketplace.json
daymade Apr 11, 2026
501dc5a
chore(wechat-article-scraper): bump version to 3.9.0 in marketplace.json
daymade Apr 11, 2026
0d7a7fd
chore(wechat-article-scraper): bump version to 3.10.0 in marketplace.…
daymade Apr 11, 2026
82d0cee
chore(wechat-article-scraper): bump version to 3.11.0 in marketplace.…
daymade Apr 11, 2026
cd2a076
chore(wechat-article-scraper): bump version to 3.12.0 in marketplace.…
daymade Apr 11, 2026
50b597f
chore(wechat-article-scraper): bump version to 3.13.0 in marketplace.…
daymade Apr 11, 2026
fc5e6b6
feat(wechat-article-scraper): add SQLite persistent storage v3.14.0
daymade Apr 11, 2026
f1ceea8
feat(wechat-article-scraper): add batch task queue system v3.15.0
daymade Apr 11, 2026
bb0b089
Release v3.16.0: Add modern React Web Dashboard for wechat-article-sc…
daymade Apr 11, 2026
173797c
Release v3.17.0: Add RSS Generator and Document Advanced Features
daymade Apr 11, 2026
5e8c3a5
Release v3.18.0: Add AI Summarizer and Webhook Notifier
daymade Apr 11, 2026
c217129
Release v3.19.0: Add Third-Party Platform Exporters
daymade Apr 11, 2026
bb28c0b
feat(wechat-article-scraper): v3.20.0 - Add browser extension support
daymade Apr 11, 2026
2e9591e
feat(wechat-article-scraper): v3.21.0 - Add native CLI
daymade Apr 11, 2026
4c56a1d
chore(marketplace): update wechat-article-scraper keywords and descri…
daymade Apr 11, 2026
87a1ce7
ci: move GitHub Actions workflow to correct location
daymade Apr 11, 2026
de1c517
ci: fix macOS x64 runner to use macos-12
daymade Apr 11, 2026
fd63b4e
ci: fix CLI build and Docker context issues
daymade Apr 11, 2026
b1e16c9
chore: bump wechat-article-scraper version to 3.22.0
daymade Apr 11, 2026
b9460b3
feat(wechat-article-scraper): 数据可视化仪表盘 Dashboard v1.0
daymade Apr 12, 2026
f0f0036
feat(wechat-article-scraper): AI智能分析引擎 v1.0
daymade Apr 12, 2026
24110a1
feat(wechat-article-scraper): 语义搜索与向量检索 v1.0
daymade Apr 12, 2026
d652c7f
feat(wechat-article-scraper): 自动化工作流引擎 v1.0
daymade Apr 12, 2026
b2e963f
feat(wechat-article-scraper): 团队协作与第三方集成 v1.0
daymade Apr 12, 2026
99832f8
feat(wechat-article-scraper): 批量操作与多格式导出 v1.0
daymade Apr 12, 2026
3293a78
feat(wechat-article-scraper): 浏览器扩展 v2.0 完善
daymade Apr 12, 2026
03b7bb5
feat(wechat-article-scraper): 舆情监控系统 v1.0
daymade Apr 12, 2026
0865b39
feat(wechat-article-scraper): 数据可视化与智能分析系统 v1.0
daymade Apr 12, 2026
8aeedf4
feat(wechat-article-scraper): 智能写作助手 v1.0
daymade Apr 12, 2026
62d5b1f
feat(wechat-article-scraper): 定时任务与自动化系统 v1.0
daymade Apr 12, 2026
a7a374a
feat(round92): 微信生态深度集成 - 实现 Cubox 级别"转发即收藏"体验
daymade Apr 12, 2026
99857da
test(round93): 核心功能验证基准测试框架
daymade Apr 12, 2026
502becd
ci(round94): GitHub Actions CI/CD 流水线
daymade Apr 12, 2026
2aed7d9
feat(wechat-article-scraper): Round 95 - 集成 ftr-site-config 站点规则库
daymade Apr 12, 2026
c8aa5b0
docs: update COMPETITOR_MATRIX - Edge TTS completed
daymade Apr 12, 2026
bd4e963
feat(wechat-article-scraper): v3.34.0 导出功能 + 移动端响应式布局
daymade Apr 12, 2026
6d97a18
feat(wechat-article-scraper): v3.35.0 阅读器主题系统
daymade Apr 12, 2026
061c8b3
feat: 强化浏览器扩展方案,放弃后端抓取幻想
daymade Apr 12, 2026
014158f
chore(git): ignore generated artifacts
daymade Apr 13, 2026
189f40c
chore(security): defensive configs + archive ralph logs
daymade Apr 14, 2026
749e0a2
chore: remove wechat-article-scraper from marketplace registry
daymade Apr 14, 2026
885e64d
chore: remove wechat-article-scraper release workflow
daymade Apr 14, 2026
8e25fb1
feat(gangtise-copilot): add one-shot installation guide and bump to v…
Parsnip113 Apr 15, 2026
d764677
feat(marketplace): add daymade-claude-code suite with canonical source
daymade Apr 19, 2026
9045215
chore: ignore Claude Code local settings and archive
daymade Apr 19, 2026
ce23b94
feat(slides-creator): add narrative-first slide deck creation skill v…
daymade Apr 19, 2026
43d12c2
chore(marketplace): register slides-creator v1.0.0 and bump to v1.49.0
daymade Apr 19, 2026
7dd6969
refactor(marketplace): flatten suite directories to repo root
daymade Apr 26, 2026
1a13c68
chore(gitignore): ignore debugging-network-issues-workspace/
daymade Apr 26, 2026
e8951c1
feat(marketplace): register debugging-network-issues + stepfun-tts an…
daymade Apr 26, 2026
9298140
feat(pdf-creator): CJK typography auto-injection + theme refinements …
daymade Apr 26, 2026
56bf3f9
fix(pdf-creator): typography size unity + integration test path
daymade Apr 26, 2026
6f2a6fc
fix(pdf-creator): add CJK font fallback for inline code (default theme)
daymade Apr 26, 2026
0e52e3f
fix(pdf-creator): keep table rows intact across page breaks
daymade Apr 26, 2026
cb254fe
fix(pdf-creator): force CJK chars in inline code to use CJK fonts (no…
daymade Apr 26, 2026
a31ebac
fix(pdf-creator): prefer CID TrueType CJK fonts over OpenType in code…
daymade Apr 26, 2026
60445a6
fix(pdf-creator): neutralize pandoc auto-emitted <col width> from das…
daymade Apr 26, 2026
42243c5
docs(pdf-creator): troubleshoot — CJK in inline code (Preview) + col1…
daymade Apr 27, 2026
646af38
feat(statusline-generator): context window display with token counts …
daymade Apr 28, 2026
180e567
chore: remove ralph loop generated artifacts
daymade May 7, 2026
13f35da
refactor(marketplace): move skill-creator under daymade-skills namespace
daymade May 7, 2026
733e7a0
chore: remove mistakenly committed cloud/lessons-learned.md
daymade May 7, 2026
dbbc088
restructure: move skill-creator, skill-reviewer, skills-search into d…
daymade May 7, 2026
705deee
feat(pdf-creator): batch theme support + mobile theme + anti-pattern …
daymade May 9, 2026
89a1518
fix(marketplace): remove skills: ["./"] from 13 plugins (#64)
daymade May 9, 2026
7bf1480
refactor(marketplace): align plugin source/skills with official pattern
daymade May 9, 2026
b518f99
docs: sync all documentation with official source/skills pattern
daymade May 9, 2026
573bbd2
feat(marketplace): create daymade-audio suite for speech pipeline
daymade May 9, 2026
b81ccee
docs: update README badges and skill counts for v1.52.0
daymade May 9, 2026
f48d4e0
feat(statusline-generator): rewrite SKILL.md + scripts for v1.1.0
daymade May 9, 2026
2e9f6ba
chore: tunnel-doctor DNS layer, feishu-doc-scraper, cleanup
daymade May 9, 2026
7ddc287
feat(gangtise-copilot): default to minimal preset, alias workshop to …
daymade May 11, 2026
01fe47a
feat(pdf-creator): lock in CJK table contract with regression tests (…
daymade May 13, 2026
515da40
feat(feishu-doc-scraper): SSR fallback + per-doc image naming + known…
daymade May 13, 2026
d66075b
feat(pdf-creator): bundle cjk-auto theme to survive skill upgrades (v…
daymade May 13, 2026
f5db8f4
chore(skills): batch update — claude-md-progressive-disclosurer v1.3.…
daymade May 17, 2026
be3eeac
fix(pdf-creator): auto-select Chrome backend for CJK content
daymade May 18, 2026
75b5434
fix(dictionary): order corrections by length DESC to prevent short-ru…
daymade May 23, 2026
c6be534
chore(marketplace): unify all 4 suites to suite-only mode (BREAKING)
daymade May 24, 2026
2d43742
docs(transcript-fixer): clarify native correction protocol + fix DB c…
daymade May 30, 2026
59aee6c
docs(skill-creator): AI semantic read-through as the primary sanitiza…
daymade May 30, 2026
c45229f
fix(pdf-creator): write self-check previews to temp dir, not next to …
daymade May 30, 2026
9822b25
docs(network-skills): cross-link the 4 network-diagnosis skills into …
daymade May 30, 2026
894bda0
feat(benchmark-due-diligence): new skill for adversarial benchmark te…
daymade May 30, 2026
3194d08
feat(bigdata-skill): 12 structured endpoints + BatchSearch, fix scree…
daymade May 30, 2026
64519cb
fix(bigdata-skill): correct two stale statements in SKILL.md prose
daymade May 30, 2026
8b3c80e
fix(bigdata-skill): analyst_ratings + price_target L3 -> L4 (live-tes…
daymade May 30, 2026
bb3afaa
fix(bigdata-skill): fix BatchSearch.upload_input Content-Type 403 (li…
daymade May 30, 2026
ba3bf4a
fix(bigdata-skill): connected_entities — drop bogus entity_categories…
daymade May 30, 2026
43222d1
fix(bigdata-skill): sync rest_ext module-docstring table — ratings/ta…
daymade May 30, 2026
092d299
refactor(bigdata-skill): rest_ext docstring stops duplicating the end…
daymade May 30, 2026
e090b15
Release v1.60.0: Add auto-repo-setup skill
daymade May 31, 2026
cb5da28
Merge pull request #75 from daymade/add-auto-repo-setup
daymade May 31, 2026
d4b27ff
fix(macos-cleaner): harden deletion safety checks
daymade Jun 4, 2026
7eb29ad
Merge pull request #78 from daymade/codex/issue-70-macos-cleaner-safety
daymade Jun 4, 2026
b41b041
chore: release v1.60.1
daymade Jun 4, 2026
75db33f
fix(skills): make tunnel-doctor + benchmark frontmatter strict-YAML v…
daymade Jun 6, 2026
4290c80
feat(daymade-docs): add pdf-creator warm-terra-menu theme + fix front…
daymade Jun 6, 2026
e699459
docs(transcript-fixer): add Parallel-via-Dynamic-Workflow subsection …
daymade Jun 6, 2026
6759178
refactor(skills): tighten 13 over-long frontmatter descriptions
daymade Jun 6, 2026
86cbee6
feat(daymade-claude-code): add terminal-screenshot skill
daymade Jun 6, 2026
bb0bb64
Merge remote-tracking branch 'origin/main' into add-auto-repo-setup
daymade Jun 6, 2026
f3a9d63
feat(daymade-docs): add pdf-to-html skill
daymade Jun 6, 2026
d138bd5
refactor(skills): consolidate plugin-packaging knowledge into marketp…
daymade Jun 6, 2026
ead1cce
docs(readme): list pdf-to-html in README.md and README.zh-CN.md
daymade Jun 6, 2026
68013b3
docs: backfill skill lists to 61 + align to v1.62.0; add doc-drift guard
daymade Jun 6, 2026
0428d8f
docs: backfill all missing skill sections in README.md + README.zh-CN.md
daymade Jun 6, 2026
5cae061
docs: wire check_doc_skill_lists.py into release SOP + sync CHANGELOG
daymade Jun 6, 2026
512c36c
Update tunnel-doctor v1.6.0 + debugging-network-issues v1.1.0: TUN me…
daymade Jun 6, 2026
3df62bf
Merge origin/main: align tunnel-doctor v1.6.0 + debugging-network-iss…
daymade Jun 6, 2026
0938cea
feat(llm-wiki-setup): add skill directory (interview/templates/script…
daymade Jun 6, 2026
c5bc375
feat(bilibili-source): add login-free Bilibili video data-fetch skill…
daymade Jun 13, 2026
2a5bb51
chore: register claude-usage-analyst + skill-creator/debugging v1.2.0…
daymade Jun 13, 2026
d16db04
Improve macos-cleaner: progressive disclosure and consistent safety g…
geniusart Jun 13, 2026
ee4d1c7
chore(macos-cleaner): bump 1.1.1 -> 1.2.0 + CHANGELOG for #84
daymade Jun 13, 2026
f9b7a9a
docs: sync README version badge 1.63.0 -> 1.64.0 (drift fix)
daymade Jun 13, 2026
e17e161
chore: release v1.64.0 — archive [Unreleased] to [1.64.0]
daymade Jun 13, 2026
1d1fed7
fix: sanitize pre-existing PII + correct broken install commands (#67)
daymade Jun 13, 2026
63d234d
feat(marketplace-health-check): add 6-dimension repo health-check ski…
daymade Jun 13, 2026
16f981f
docs: sync README version badge 1.64.0 -> 1.65.0 (drift recurrence) +…
daymade Jun 13, 2026
6565b2c
chore: doc-governance + health-check follow-ups (version-badge CI, de…
daymade Jun 13, 2026
3c77343
fix: stop gitignoring .security-scan-passed in transcript-fixer + fin…
daymade Jun 13, 2026
44ab05b
feat(claude-md-progressive-disclosurer): fake-pointer guard + line-co…
daymade Jun 14, 2026
5bc98cc
Fix history-finder project-path resolution; bundle in-flight debuggin…
daymade Jun 14, 2026
143a8ef
feat(claude-code): add claude-switch-models-setup skill
daymade Jun 23, 2026
cf11686
docs: sync skill lists and version badges for claude-switch-models-setup
daymade Jun 23, 2026
41769f9
feat(github-contributor): add push-time gotchas and PR #1624 case study
daymade Jun 23, 2026
890d3c9
chore(gitleaks): allowlist repo placeholders and public contact info
daymade Jun 24, 2026
ab56baa
docs(gitleaks): clarify JWT example allowlist comment
daymade Jun 24, 2026
573bb42
Release v1.67.0: Add llm-eval-harness (#94)
daymade Jun 24, 2026
52b6871
feat(wecom): add setup-notifications-via-wecom and notify-wecom skills
daymade Jun 24, 2026
2454cbe
docs(notify-wecom): clarify prerequisite dependency on setup-notifica…
daymade Jun 24, 2026
9152e1c
Merge pull request #95 from daymade/add-wecom-notification-skills
daymade Jun 24, 2026
a5624ab
fix(wecom): address PR #95 review nits
daymade Jun 24, 2026
5513a70
Merge pull request #96 from daymade/fix/wecom-pr95-nits
daymade Jun 24, 2026
8c5e981
feat(security): add github-sensitive-data-cleanup skill
daymade Jun 25, 2026
1f586e2
feat(security): add github-sensitive-data-cleanup skill
daymade Jun 25, 2026
9428561
refactor: unsafe subprocess.run with shell-like command cons
tomaioo Jun 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1,279 changes: 656 additions & 623 deletions .claude-plugin/marketplace.json

Large diffs are not rendered by default.

53 changes: 53 additions & 0 deletions .githooks/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/bin/bash
# Pre-commit hook: scan staged changes for sensitive data
# Install: git config core.hooksPath .githooks

set -euo pipefail

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

echo "🔍 Scanning staged changes for sensitive data..."

FAILED=0

# Layer 1: gitleaks (if available)
if command -v gitleaks &>/dev/null; then
if ! gitleaks protect --staged --config .gitleaks.toml --no-banner 2>/dev/null; then
echo -e "${RED}❌ gitleaks found secrets in staged changes${NC}"
FAILED=1
fi
else
echo -e "${YELLOW}⚠ gitleaks not installed (brew install gitleaks), falling back to pattern scan${NC}"
fi

# Layer 2: fast regex scan (always runs, catches what gitleaks config might miss)
STAGED_DIFF=$(git diff --cached --diff-filter=ACDMR)

PATTERNS=(
'/Users/[a-zA-Z][a-zA-Z0-9_-]+/'
'/home/[a-zA-Z][a-zA-Z0-9_-]+/'
'C:\\Users\\[a-zA-Z]'
'songtiansheng'
'tiansheng'
'15366[0-9]+'
)

for pattern in "${PATTERNS[@]}"; do
MATCHES=$(echo "$STAGED_DIFF" | grep -nE "^\+" | grep -E "$pattern" | grep -v "^+++\|\.gitleaks\.toml\|\.githooks/\|\.gitignore\|placeholder\|example\|CLAUDE\.md" || true)
if [ -n "$MATCHES" ]; then
echo -e "${RED}❌ Found sensitive pattern '${pattern}':${NC}"
echo "$MATCHES" | head -5
FAILED=1
fi
done

if [ $FAILED -eq 1 ]; then
echo ""
echo -e "${RED}Commit blocked. Fix the issues above, or use --no-verify to bypass (not recommended).${NC}"
exit 1
fi

echo -e "${GREEN}✅ No sensitive data found in staged changes.${NC}"
4 changes: 2 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ How has this been tested?
- [ ] Scripts are executable (chmod +x)
- [ ] No absolute paths or user-specific information
- [ ] Tested in actual Claude Code session
- [ ] Passed validation: `skill-creator/scripts/quick_validate.py`
- [ ] Successfully packages: `skill-creator/scripts/package_skill.py`
- [ ] Passed validation: `daymade-skill/skill-creator/scripts/quick_validate.py`
- [ ] Successfully packages: `daymade-skill/skill-creator/scripts/package_skill.py`

### For All PRs

Expand Down
190 changes: 190 additions & 0 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
name: Benchmark Tests

on:
schedule:
# Run weekly on Sundays at 2 AM UTC
- cron: '0 2 * * 0'
workflow_dispatch:
inputs:
test_type:
description: 'Test type to run'
required: true
default: 'all'
type: choice
options:
- all
- scrape
- annotation
- full

env:
NODE_VERSION: '20'

jobs:
scrape-benchmark:
name: Scrape Success Rate Benchmark
runs-on: ubuntu-latest
if: github.event.inputs.test_type == 'all' || github.event.inputs.test_type == 'scrape' || github.event.inputs.test_type == 'full'
timeout-minutes: 60

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
cache-dependency-path: cloud/package-lock.json

- name: Install dependencies
working-directory: cloud
run: npm ci

- name: Install Playwright browsers
working-directory: cloud
run: npx playwright install --with-deps chromium

- name: Run scrape benchmark
working-directory: cloud
env:
JINA_AI_API_KEY: ${{ secrets.JINA_AI_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }}
run: |
npx vitest run tests/benchmark/scrape-benchmark.ts --reporter=verbose 2>&1 | tee scrape-benchmark.log

- name: Upload benchmark results
uses: actions/upload-artifact@v4
if: always()
with:
name: scrape-benchmark-results
path: |
cloud/tests/benchmark/scrape-benchmark-report.json
cloud/scrape-benchmark.log
retention-days: 30

- name: Check success rate threshold
working-directory: cloud
run: |
if [ -f tests/benchmark/scrape-benchmark-report.json ]; then
SUCCESS_RATE=$(jq -r '.summary.successRate' tests/benchmark/scrape-benchmark-report.json | sed 's/%//')
echo "Success Rate: ${SUCCESS_RATE}%"
if (( $(echo "$SUCCESS_RATE >= 95" | bc -l) )); then
echo "✅ SUCCESS: Meet target of 95%"
exit 0
else
echo "❌ FAILURE: Below target of 95%"
exit 1
fi
else
echo "Report not generated"
exit 1
fi

annotation-benchmark:
name: Annotation Accuracy Benchmark
runs-on: ubuntu-latest
if: github.event.inputs.test_type == 'all' || github.event.inputs.test_type == 'annotation' || github.event.inputs.test_type == 'full'
timeout-minutes: 10

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
cache-dependency-path: cloud/package-lock.json

- name: Install dependencies
working-directory: cloud
run: npm ci

- name: Run annotation accuracy test
working-directory: cloud
run: |
npx vitest run tests/benchmark/annotation-accuracy.ts --reporter=verbose 2>&1 | tee annotation-accuracy.log

- name: Upload benchmark results
uses: actions/upload-artifact@v4
if: always()
with:
name: annotation-accuracy-results
path: |
cloud/tests/benchmark/annotation-accuracy-report.json
cloud/annotation-accuracy.log
retention-days: 30

- name: Check accuracy threshold
working-directory: cloud
run: |
if [ -f tests/benchmark/annotation-accuracy-report.json ]; then
ACCURACY=$(jq -r '.summary.positionAccuracy' tests/benchmark/annotation-accuracy-report.json | sed 's/%//')
echo "Position Accuracy: ${ACCURACY}%"
if (( $(echo "$ACCURACY >= 98" | bc -l) )); then
echo "✅ SUCCESS: Meet target of 98%"
exit 0
else
echo "❌ FAILURE: Below target of 98%"
exit 1
fi
else
echo "Report not generated"
exit 1
fi

full-benchmark:
name: Full Benchmark Suite
runs-on: ubuntu-latest
if: github.event.inputs.test_type == 'full'
needs: [scrape-benchmark, annotation-benchmark]
timeout-minutes: 90

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Download all artifacts
uses: actions/download-artifact@v4

- name: Generate combined report
run: |
echo "# 📊 Full Benchmark Report" > benchmark-report.md
echo "" >> benchmark-report.md
echo "Generated at: $(date -u +"%Y-%m-%d %H:%M:%S UTC")" >> benchmark-report.md
echo "" >> benchmark-report.md

if [ -f scrape-benchmark-results/scrape-benchmark-report.json ]; then
echo "## Scraping Success Rate" >> benchmark-report.md
cat scrape-benchmark-results/scrape-benchmark-report.json | jq -r '.summary | to_entries[] | "- \(.key): \(.value)"' >> benchmark-report.md
echo "" >> benchmark-report.md
fi

if [ -f annotation-accuracy-results/annotation-accuracy-report.json ]; then
echo "## Annotation Accuracy" >> benchmark-report.md
cat annotation-accuracy-results/annotation-accuracy-report.json | jq -r '.summary | to_entries[] | "- \(.key): \(.value)"' >> benchmark-report.md
fi

- name: Upload combined report
uses: actions/upload-artifact@v4
with:
name: full-benchmark-report
path: benchmark-report.md

- name: Create GitHub Issue on failure
if: failure()
uses: actions/github-script@v7
with:
script: |
github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: `❌ Benchmark Failed - ${new Date().toISOString().split('T')[0]}`,
body: `Benchmark tests failed. Check the [Actions run](${context.payload.repository.html_url}/actions/runs/${context.runId}) for details.`,
labels: ['benchmark', 'automated']
});
14 changes: 12 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ Thumbs.db
*.tgz
*.rar
*.7z
*.skill

# Build artifacts
*.o
Expand Down Expand Up @@ -90,5 +91,14 @@ recovered_deep_research/
# OpenCLI cache
.opencli/

# Eval workspaces (contain test data with personal info)
douban-skill-workspace/
# Eval / runtime workspaces (test data, snapshots — never committed)
*-workspace/
.gstack/

# Claude Code local settings
.claude/settings.local.json
.claude/archive/

# Generated artifacts
coverage/
node_modules/
68 changes: 68 additions & 0 deletions .gitleaks.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Gitleaks custom rules for claude-code-skills repo
# Catches personal info that shouldn't be in an open source repo

title = "claude-code-skills sensitive data rules"

[extend]
useDefault = true

# Global allowlist: files that are allowed to contain patterns
# (the config file itself, hooks, and contribution guides)
[allowlist]
paths = [
'''\.gitleaks\.toml$''',
'''\.githooks/''',
'''CONTRIBUTING\.md$''',
'''CLAUDE\.md$''',
]
regexes = [
# Douban mobile app's public API key (documented as public, hardcoded for zero-config usage)
'''0dad551ec0f84ed02907ff5c42e8ec70''',
# Standard example JWT header from jwt.io. Base64URL-decodes to:
# {"alg":"HS256","typ":"JWT"}
# It is public metadata, not a secret, and appears in repomix-safe-mixer
# documentation as a placeholder (literally written with "..." suffix).
'''eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\.\.\.''',
# Repo owner's public contact email in README/marketplace metadata
'''daymadev89@gmail\.com''',
# Common placeholder user paths used in documentation examples
'''/Users/(?:username|name|you|user)/''',
'''/home/username/''',
'''C:\\Users\\(?:username|name)\\''',
]

[[rules]]
id = "absolute-user-path-macos"
description = "Hardcoded macOS user home directory path"
regex = '''/Users/[a-zA-Z][a-zA-Z0-9_-]+/'''
tags = ["pii", "path"]

[[rules]]
id = "absolute-user-path-linux"
description = "Hardcoded Linux home directory path"
regex = '''/home/[a-zA-Z][a-zA-Z0-9_-]+/'''
tags = ["pii", "path"]

[[rules]]
id = "windows-user-path"
description = "Hardcoded Windows user profile path"
regex = '''C:\\Users\\[a-zA-Z][a-zA-Z0-9_-]+\\'''
tags = ["pii", "path"]

[[rules]]
id = "phone-number-cn"
description = "Chinese mobile phone number"
regex = '''\b1[3-9]\d{9}\b'''
tags = ["pii", "phone"]

[[rules]]
id = "douban-user-id-literal"
description = "Hardcoded Douban user ID"
regex = '''songtiansheng'''
tags = ["pii", "username"]

[[rules]]
id = "email-personal"
description = "Personal email address"
regex = '''[a-zA-Z0-9._%+-]+@(?:gmail|qq|163|126|outlook|hotmail|yahoo|icloud|foxmail)\.[a-zA-Z]{2,}'''
tags = ["pii", "email"]
4 changes: 4 additions & 0 deletions .pii-path-patterns
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Repo-specific local/generated artifact paths that must never be committed
(^|/)coverage(/|$)
(^|/)node_modules(/|$)
(^|/).*\.db$
34 changes: 34 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
minimum_pre_commit_version: "3.2.0"
default_install_hook_types:
- pre-commit
- pre-push
default_stages:
- pre-commit
- pre-push

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: check-merge-conflict
- id: check-added-large-files
args:
- --maxkb=1500

- repo: https://github.com/gitleaks/gitleaks
rev: v8.30.0
hooks:
- id: gitleaks
stages:
- pre-commit

- repo: local
hooks:
- id: repo-path-guard
name: repo path guard
entry: python3 scripts/repo_path_guard.py
language: system
pass_filenames: true
stages:
- pre-commit
- pre-push
Loading