Skip to content

Commit 4dbcdb6

Browse files
committed
feat(registry): add registry manifest, ETag caching, search, and version detection
- Add registry.json manifest generation script and GitHub Action - Replace 1h TTL cache with ETag-based conditional requests - Add searchRegistry() and filterRegistryByTag() utilities - Add --search and --tag flags to devw add --list - Add version detection with update prompt on devw add - Update banner with user-customized ASCII art - Fix remove E2E test for non-TTY guard behavior
1 parent 9d9738d commit 4dbcdb6

13 files changed

Lines changed: 1108 additions & 84 deletions

File tree

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: Generate Registry
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
paths:
8+
- content/**
9+
paths-ignore:
10+
- content/registry.json
11+
12+
permissions:
13+
contents: write
14+
15+
jobs:
16+
generate-registry:
17+
runs-on: ubuntu-latest
18+
steps:
19+
- name: Checkout repository
20+
uses: actions/checkout@v4
21+
22+
- name: Setup Node
23+
uses: actions/setup-node@v4
24+
with:
25+
node-version: 22
26+
27+
- name: Generate registry artifact
28+
run: node scripts/generate-registry.js
29+
30+
- name: Commit registry updates
31+
run: |
32+
if git diff --quiet -- content/registry.json; then
33+
echo "No registry changes detected"
34+
exit 0
35+
fi
36+
37+
git config user.name "github-actions[bot]"
38+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
39+
git add content/registry.json
40+
git commit -m "chore: regenerate registry.json"
41+
git push

content/registry.json

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
{
2+
"version": 1,
3+
"generated_at": "2026-04-12T15:46:19.045Z",
4+
"rules": [
5+
{
6+
"path": "css/tailwind",
7+
"name": "tailwind",
8+
"description": "Utility-first Tailwind CSS conventions and design tokens",
9+
"version": "0.1.0",
10+
"scope": "conventions",
11+
"tags": [
12+
"tailwind",
13+
"css",
14+
"styling"
15+
],
16+
"size_bytes": 874
17+
},
18+
{
19+
"path": "frontend/accessibility",
20+
"name": "accessibility",
21+
"description": "Accessibility best practices for AI coding agents",
22+
"version": "0.1.0",
23+
"scope": "conventions",
24+
"tags": [
25+
"frontend",
26+
"accessibility",
27+
"a11y",
28+
"html"
29+
],
30+
"size_bytes": 2781
31+
},
32+
{
33+
"path": "frontend/design-guidelines",
34+
"name": "design-guidelines",
35+
"description": "UI design principles for AI coding agents",
36+
"version": "0.1.0",
37+
"scope": "design",
38+
"tags": [
39+
"frontend",
40+
"design",
41+
"ui",
42+
"ux"
43+
],
44+
"size_bytes": 3476
45+
},
46+
{
47+
"path": "frontend/performance",
48+
"name": "performance",
49+
"description": "Frontend performance optimization rules",
50+
"version": "0.1.0",
51+
"scope": "performance",
52+
"tags": [
53+
"frontend",
54+
"performance",
55+
"core-web-vitals"
56+
],
57+
"size_bytes": 2558
58+
},
59+
{
60+
"path": "javascript/nextjs",
61+
"name": "nextjs",
62+
"description": "Next.js App Router patterns and React Server Components",
63+
"version": "0.1.0",
64+
"scope": "architecture",
65+
"tags": [
66+
"nextjs",
67+
"react",
68+
"app-router",
69+
"rsc"
70+
],
71+
"size_bytes": 1250
72+
},
73+
{
74+
"path": "javascript/react",
75+
"name": "react",
76+
"description": "React conventions and best practices for AI coding agents",
77+
"version": "0.1.0",
78+
"scope": "conventions",
79+
"tags": [
80+
"react",
81+
"frontend",
82+
"components",
83+
"hooks"
84+
],
85+
"size_bytes": 1314
86+
},
87+
{
88+
"path": "security/auth-patterns",
89+
"name": "auth-patterns",
90+
"description": "Authentication and authorization best practices",
91+
"version": "0.1.0",
92+
"scope": "security",
93+
"tags": [
94+
"security",
95+
"auth",
96+
"authentication",
97+
"authorization"
98+
],
99+
"size_bytes": 2762
100+
},
101+
{
102+
"path": "security/supabase-rls",
103+
"name": "supabase-rls",
104+
"description": "Supabase Row-Level Security enforcement and auth patterns",
105+
"version": "0.1.0",
106+
"scope": "security",
107+
"tags": [
108+
"supabase",
109+
"rls",
110+
"security",
111+
"database"
112+
],
113+
"size_bytes": 958
114+
},
115+
{
116+
"path": "testing/vitest",
117+
"name": "vitest",
118+
"description": "Vitest testing patterns and best practices",
119+
"version": "0.1.0",
120+
"scope": "testing",
121+
"tags": [
122+
"vitest",
123+
"testing",
124+
"unit-tests"
125+
],
126+
"size_bytes": 1174
127+
},
128+
{
129+
"path": "typescript/strict",
130+
"name": "strict",
131+
"description": "Strict TypeScript conventions for professional codebases",
132+
"version": "0.1.0",
133+
"scope": "conventions",
134+
"tags": [
135+
"typescript",
136+
"strict",
137+
"types"
138+
],
139+
"size_bytes": 1124
140+
},
141+
{
142+
"path": "workflow/debugging",
143+
"name": "debugging",
144+
"description": "Systematic debugging methodology for AI coding agents",
145+
"version": "0.1.0",
146+
"scope": "workflow",
147+
"tags": [
148+
"workflow",
149+
"debugging",
150+
"methodology"
151+
],
152+
"size_bytes": 2464
153+
},
154+
{
155+
"path": "workflow/git-conventions",
156+
"name": "git-conventions",
157+
"description": "Git workflow and commit conventions",
158+
"version": "0.1.0",
159+
"scope": "workflow",
160+
"tags": [
161+
"git",
162+
"workflow",
163+
"conventions"
164+
],
165+
"size_bytes": 2010
166+
},
167+
{
168+
"path": "workflow/spec-driven",
169+
"name": "spec-driven",
170+
"description": "Spec-driven development workflow: spec, plan, build, ship",
171+
"version": "0.1.0",
172+
"scope": "workflow",
173+
"tags": [
174+
"workflow",
175+
"spec-driven",
176+
"methodology"
177+
],
178+
"size_bytes": 1441
179+
}
180+
],
181+
"assets": {
182+
"commands": [],
183+
"templates": [],
184+
"hooks": [],
185+
"presets": []
186+
}
187+
}

0 commit comments

Comments
 (0)