@etus/bhono-app 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -2
- package/templates/base/.claude/commands/check-skill-rules.md +112 -29
- package/templates/base/.claude/commands/linear/implement-issue.md +383 -55
- package/templates/base/.claude/commands/ship.md +77 -13
- package/templates/base/.claude/hooks/package-lock.json +0 -419
- package/templates/base/.claude/hooks/skill-activation-prompt.ts +185 -113
- package/templates/base/.claude/hooks/skill-tool-guard.sh +6 -0
- package/templates/base/.claude/hooks/skill-tool-guard.ts +198 -0
- package/templates/base/.claude/scripts/validate-skill-rules.sh +55 -32
- package/templates/base/.claude/settings.json +18 -11
- package/templates/base/.claude/skills/skill-rules.json +326 -173
- package/templates/base/.env.example +3 -0
- package/templates/base/README.md +9 -7
- package/templates/base/config/eslint.config.js +1 -0
- package/templates/base/config/wrangler.json +16 -17
- package/templates/base/docs/SETUP-GUIDE.md +566 -0
- package/templates/base/docs/architecture/README.md +162 -8
- package/templates/base/docs/architecture/api-catalog.md +575 -0
- package/templates/base/docs/architecture/c4-component.md +309 -0
- package/templates/base/docs/architecture/c4-container.md +183 -0
- package/templates/base/docs/architecture/c4-context.md +106 -0
- package/templates/base/docs/architecture/dependencies.md +327 -0
- package/templates/base/docs/architecture/tech-debt.md +184 -0
- package/templates/base/package.json +20 -15
- package/templates/base/scripts/capture-prod-session.ts +2 -2
- package/templates/base/scripts/sync-template.sh +104 -0
- package/templates/base/src/server/db/sql.ts +24 -4
- package/templates/base/src/server/index.ts +1 -0
- package/templates/base/src/server/lib/audited-db.ts +10 -10
- package/templates/base/src/server/middleware/account.ts +1 -1
- package/templates/base/src/server/middleware/auth.ts +11 -11
- package/templates/base/src/server/middleware/rate-limit.ts +3 -6
- package/templates/base/src/server/routes/auth/handlers.ts +5 -5
- package/templates/base/src/server/routes/auth/test-login.ts +9 -9
- package/templates/base/src/server/routes/index.ts +9 -0
- package/templates/base/src/server/routes/invitations/handlers.ts +6 -6
- package/templates/base/src/server/routes/openapi.ts +1 -1
- package/templates/base/src/server/services/accounts.ts +9 -9
- package/templates/base/src/server/services/audits.ts +12 -12
- package/templates/base/src/server/services/auth.ts +15 -15
- package/templates/base/src/server/services/invitations.ts +16 -16
- package/templates/base/src/server/services/users.ts +13 -13
- package/templates/base/src/shared/types/api.ts +66 -198
- package/templates/base/tests/e2e/auth.setup.ts +1 -1
- package/templates/base/tests/unit/server/auth/guards.test.ts +1 -1
- package/templates/base/tests/unit/server/middleware/auth.test.ts +273 -0
- package/templates/base/tests/unit/server/routes/auth/handlers.test.ts +111 -0
- package/templates/base/tests/unit/server/routes/users/handlers.test.ts +69 -5
- package/templates/base/tests/unit/server/services/accounts.test.ts +148 -0
- package/templates/base/tests/unit/server/services/audits.test.ts +219 -0
- package/templates/base/tests/unit/server/services/auth.test.ts +480 -3
- package/templates/base/tests/unit/server/services/invitations.test.ts +178 -0
- package/templates/base/tests/unit/server/services/users.test.ts +363 -8
- package/templates/base/tests/unit/shared/schemas.test.ts +1 -1
- package/templates/base/vite.config.ts +3 -1
- package/templates/base/.github/workflows/test.yml +0 -127
- package/templates/base/.husky/pre-push +0 -26
- package/templates/base/auth-setup-error.png +0 -0
- package/templates/base/pnpm-lock.yaml +0 -8052
- package/templates/base/tests/e2e/_auth/.gitkeep +0 -0
- package/templates/base/tsconfig.tsbuildinfo +0 -1
|
@@ -76,20 +76,22 @@
|
|
|
76
76
|
],
|
|
77
77
|
"SessionStart": [
|
|
78
78
|
{
|
|
79
|
-
|
|
79
|
+
"matcher": "startup|resume|compact|clear",
|
|
80
80
|
"hooks": [
|
|
81
81
|
{
|
|
82
82
|
"type": "command",
|
|
83
|
-
"command": "$CLAUDE_PROJECT_DIR/.claude/scripts/install_pkgs.sh"
|
|
83
|
+
"command": "$CLAUDE_PROJECT_DIR/.claude/scripts/install_pkgs.sh",
|
|
84
|
+
"timeout": 10
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"type": "command",
|
|
88
|
+
"command": "$CLAUDE_PROJECT_DIR/.claude/scripts/validate-skill-rules.sh",
|
|
89
|
+
"timeout": 10
|
|
84
90
|
},
|
|
85
|
-
{
|
|
86
|
-
"type": "command",
|
|
87
|
-
"command": "$CLAUDE_PROJECT_DIR/.claude/scripts/validate-skill-rules.sh"
|
|
88
|
-
},
|
|
89
91
|
{
|
|
90
92
|
"type": "command",
|
|
91
93
|
"command": "echo \"Current date: $(date '+%Y-%m-%d') | Year: $(date +%Y)\"",
|
|
92
|
-
"timeout":
|
|
94
|
+
"timeout": 10
|
|
93
95
|
}
|
|
94
96
|
]
|
|
95
97
|
}
|
|
@@ -101,13 +103,18 @@
|
|
|
101
103
|
{
|
|
102
104
|
"type": "command",
|
|
103
105
|
"command": "q=$(cat | jq -r '.tool_input.query'); y=$(date +%Y); echo $q | grep -qE '20[0-9]{2}|latest|recent|current|new|now|today' && nq=\"$q\" || nq=\"$q $y\"; echo \"{\\\"hookSpecificOutput\\\":{\\\"hookEventName\\\":\\\"PreToolUse\\\",\\\"permissionDecision\\\":\\\"allow\\\",\\\"updatedInput\\\":{\\\"query\\\":\\\"$nq\\\"}}}\"",
|
|
104
|
-
"timeout":
|
|
106
|
+
"timeout": 10
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"hooks": [
|
|
112
|
+
{
|
|
113
|
+
"type": "command",
|
|
114
|
+
"command": "$CLAUDE_PROJECT_DIR/.claude/hooks/skill-tool-guard.sh"
|
|
105
115
|
}
|
|
106
116
|
]
|
|
107
117
|
}
|
|
108
118
|
]
|
|
109
|
-
},
|
|
110
|
-
"enabledPlugins": {
|
|
111
|
-
"frontend-design@claude-plugins-official": true
|
|
112
119
|
}
|
|
113
120
|
}
|
|
@@ -1,184 +1,337 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
2
|
+
"version": "1.2",
|
|
3
|
+
"description": "Skill activation rules for project and user skills",
|
|
4
|
+
"skills": {
|
|
5
|
+
"architecture-analyzer": {
|
|
6
|
+
"type": "domain",
|
|
7
|
+
"enforcement": "suggest",
|
|
8
|
+
"priority": "high",
|
|
9
|
+
"description": "Architectural analysis and documentation - C4 diagrams, ERD, dependency maps, tech debt assessment, API documentation",
|
|
10
|
+
"promptTriggers": {
|
|
11
|
+
"keywords": [
|
|
12
|
+
"analyze architecture",
|
|
13
|
+
"architecture analysis",
|
|
14
|
+
"document codebase",
|
|
15
|
+
"codebase documentation",
|
|
16
|
+
"C4 diagram",
|
|
17
|
+
"ERD",
|
|
18
|
+
"entity relationship",
|
|
19
|
+
"dependency map",
|
|
20
|
+
"tech debt",
|
|
21
|
+
"technical debt",
|
|
22
|
+
"architecture report",
|
|
23
|
+
"architecture review",
|
|
24
|
+
"map dependencies",
|
|
25
|
+
"generate diagram",
|
|
26
|
+
"system diagram",
|
|
27
|
+
"component diagram",
|
|
28
|
+
"architecture documentation"
|
|
29
|
+
],
|
|
30
|
+
"intentPatterns": [
|
|
31
|
+
"(analyze|review|assess).*?architecture",
|
|
32
|
+
"(generate|create|build).*?(C4|ERD|diagram|documentation)",
|
|
33
|
+
"(map|visualize).*?dependenc",
|
|
34
|
+
"(document|analyze).*?codebase",
|
|
35
|
+
"tech.*?debt.*(analysis|assessment|report)",
|
|
36
|
+
"architecture.*(report|review|assessment)"
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
41
|
+
"dev-browser": {
|
|
42
|
+
"type": "domain",
|
|
43
|
+
"enforcement": "suggest",
|
|
44
|
+
"priority": "high",
|
|
45
|
+
"description": "Browser automation with persistent page state - navigate websites, fill forms, take screenshots, scrape data, test web apps",
|
|
46
|
+
"promptTriggers": {
|
|
47
|
+
"keywords": [
|
|
48
|
+
"browser automation",
|
|
49
|
+
"take screenshot",
|
|
50
|
+
"fill form",
|
|
51
|
+
"click button",
|
|
52
|
+
"scrape website",
|
|
53
|
+
"scrape page",
|
|
54
|
+
"web scraping",
|
|
55
|
+
"automate browser",
|
|
56
|
+
"test website",
|
|
57
|
+
"log into",
|
|
58
|
+
"login to website",
|
|
59
|
+
"navigate to",
|
|
60
|
+
"go to url",
|
|
61
|
+
"extract data",
|
|
62
|
+
"web automation",
|
|
63
|
+
"playwright automation"
|
|
64
|
+
],
|
|
65
|
+
"intentPatterns": [
|
|
66
|
+
"(go|navigate).*?(to|url|website|page)",
|
|
67
|
+
"(click|press).*?(button|link|element)",
|
|
68
|
+
"(fill|complete|submit).*?(form|input|field)",
|
|
69
|
+
"(take|capture).*?screenshot",
|
|
70
|
+
"(scrape|extract).*?(data|content|text|page)",
|
|
71
|
+
"(automate|test).*?(browser|website|web)",
|
|
72
|
+
"(log|sign).*?in.*?(to|website|page)",
|
|
73
|
+
"browser.*(interact|automat)"
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
78
|
+
"linear": {
|
|
79
|
+
"type": "domain",
|
|
80
|
+
"enforcement": "suggest",
|
|
81
|
+
"priority": "high",
|
|
82
|
+
"description": "Linear issue tracking - teams, projects, issues, status, labels, comments via CLI scripts",
|
|
83
|
+
"promptTriggers": {
|
|
84
|
+
"keywords": [
|
|
85
|
+
"linear",
|
|
86
|
+
"linear issue",
|
|
87
|
+
"linear team",
|
|
88
|
+
"linear project",
|
|
89
|
+
"issue status",
|
|
90
|
+
"issue label",
|
|
91
|
+
"create issue",
|
|
92
|
+
"list issues",
|
|
93
|
+
"linear workflow"
|
|
94
|
+
],
|
|
95
|
+
"intentPatterns": [
|
|
96
|
+
"(list|filter|get).*?linear.*?(issue|team|project)",
|
|
97
|
+
"(create|update|archive).*?issue",
|
|
98
|
+
"(manage|change).*?(status|priority|label|assignment)",
|
|
99
|
+
"(add|view).*?comment"
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
"playwright-e2e-testing": {
|
|
105
|
+
"type": "domain",
|
|
106
|
+
"enforcement": "suggest",
|
|
107
|
+
"priority": "high",
|
|
108
|
+
"description": "Playwright-specific E2E testing - Page Objects, fixtures, OAuth, API testing, visual regression, debugging",
|
|
109
|
+
"promptTriggers": {
|
|
110
|
+
"keywords": [
|
|
111
|
+
"playwright",
|
|
112
|
+
"playwright test",
|
|
113
|
+
"page object",
|
|
114
|
+
"playwright fixture",
|
|
115
|
+
"playwright oauth",
|
|
116
|
+
"playwright api",
|
|
117
|
+
"visual regression",
|
|
118
|
+
"playwright debug",
|
|
119
|
+
"playwright selector",
|
|
120
|
+
"getByRole",
|
|
121
|
+
"getByText",
|
|
122
|
+
"toBeVisible"
|
|
123
|
+
],
|
|
124
|
+
"intentPatterns": [
|
|
125
|
+
"(write|create|add).*?playwright.*?test",
|
|
126
|
+
"(debug|fix).*?playwright",
|
|
127
|
+
"playwright.*(oauth|authentication|login)",
|
|
128
|
+
"playwright.*(api|visual|snapshot)",
|
|
129
|
+
"(optimize|improve).*?playwright"
|
|
130
|
+
]
|
|
131
|
+
},
|
|
132
|
+
"toolGuards": [
|
|
133
|
+
{
|
|
134
|
+
"tool": "Edit",
|
|
135
|
+
"patterns": ["\\.spec\\.ts$", "\\.test\\.ts$", "e2e/.*\\.ts$", "tests/.*\\.ts$"]
|
|
102
136
|
},
|
|
137
|
+
{
|
|
138
|
+
"tool": "Write",
|
|
139
|
+
"patterns": ["\\.spec\\.ts$", "\\.test\\.ts$", "e2e/.*\\.ts$"]
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
},
|
|
103
143
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
144
|
+
"wrangler": {
|
|
145
|
+
"type": "domain",
|
|
146
|
+
"enforcement": "suggest",
|
|
147
|
+
"priority": "high",
|
|
148
|
+
"description": "Cloudflare Wrangler CLI - Workers deployment, D1, KV, R2, Queues, Workflows, secrets, and local development",
|
|
149
|
+
"promptTriggers": {
|
|
150
|
+
"keywords": [
|
|
151
|
+
"wrangler",
|
|
152
|
+
"cloudflare worker",
|
|
153
|
+
"cloudflare workers",
|
|
154
|
+
"wrangler deploy",
|
|
155
|
+
"wrangler dev",
|
|
156
|
+
"wrangler d1",
|
|
157
|
+
"wrangler kv",
|
|
158
|
+
"wrangler r2",
|
|
159
|
+
"wrangler secret",
|
|
160
|
+
"wrangler queues",
|
|
161
|
+
"wrangler workflows",
|
|
162
|
+
"wrangler pages",
|
|
163
|
+
"wrangler init",
|
|
164
|
+
"cloudflare deploy",
|
|
165
|
+
"worker deploy",
|
|
166
|
+
"worker development"
|
|
167
|
+
],
|
|
168
|
+
"intentPatterns": [
|
|
169
|
+
"(deploy|publish).*?(worker|cloudflare)",
|
|
170
|
+
"(run|start).*?wrangler",
|
|
171
|
+
"wrangler.*(command|cli|help)",
|
|
172
|
+
"(create|manage|configure).*?(d1|kv|r2|queue|workflow|secret)",
|
|
173
|
+
"(local|dev).*?worker",
|
|
174
|
+
"cloudflare.*(storage|database|queue)"
|
|
175
|
+
]
|
|
176
|
+
},
|
|
177
|
+
"toolGuards": [
|
|
178
|
+
{
|
|
179
|
+
"tool": "Bash",
|
|
180
|
+
"patterns": ["wrangler deploy", "wrangler publish", "npx wrangler deploy", "pnpm wrangler deploy"]
|
|
132
181
|
},
|
|
182
|
+
{
|
|
183
|
+
"tool": "Edit",
|
|
184
|
+
"patterns": ["wrangler\\.json$", "wrangler\\.toml$"]
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
},
|
|
133
188
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
"worker development"
|
|
157
|
-
],
|
|
158
|
-
"intentPatterns": [
|
|
159
|
-
"(deploy|publish).*?(worker|cloudflare)",
|
|
160
|
-
"(run|start).*?wrangler",
|
|
161
|
-
"wrangler.*(command|cli|help)",
|
|
162
|
-
"(create|manage|configure).*?(d1|kv|r2|queue|workflow|secret)",
|
|
163
|
-
"(local|dev).*?worker",
|
|
164
|
-
"cloudflare.*(storage|database|queue)"
|
|
165
|
-
]
|
|
166
|
-
}
|
|
189
|
+
"superpowers:verification-before-completion": {
|
|
190
|
+
"type": "guardrail",
|
|
191
|
+
"enforcement": "suggest",
|
|
192
|
+
"priority": "critical",
|
|
193
|
+
"description": "Verify work before claiming completion - run tests, check build, confirm output",
|
|
194
|
+
"promptTriggers": {
|
|
195
|
+
"keywords": [
|
|
196
|
+
"verify",
|
|
197
|
+
"check if it works",
|
|
198
|
+
"make sure it works",
|
|
199
|
+
"test it",
|
|
200
|
+
"run tests"
|
|
201
|
+
],
|
|
202
|
+
"intentPatterns": [
|
|
203
|
+
"(verify|confirm|check).*?(work|pass|succeed)",
|
|
204
|
+
"(make sure|ensure).*?(work|pass|build)"
|
|
205
|
+
]
|
|
206
|
+
},
|
|
207
|
+
"toolGuards": [
|
|
208
|
+
{
|
|
209
|
+
"tool": "Bash",
|
|
210
|
+
"patterns": ["git push", "git push origin", "gh pr create", "npm publish", "pnpm publish"]
|
|
167
211
|
}
|
|
212
|
+
]
|
|
168
213
|
},
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
"
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
214
|
+
|
|
215
|
+
"superpowers:brainstorming": {
|
|
216
|
+
"type": "guardrail",
|
|
217
|
+
"enforcement": "suggest",
|
|
218
|
+
"priority": "high",
|
|
219
|
+
"description": "Explore requirements and design before implementation",
|
|
220
|
+
"promptTriggers": {
|
|
221
|
+
"keywords": [
|
|
222
|
+
"brainstorm",
|
|
223
|
+
"design",
|
|
224
|
+
"plan feature",
|
|
225
|
+
"new feature",
|
|
226
|
+
"build feature"
|
|
227
|
+
],
|
|
228
|
+
"intentPatterns": [
|
|
229
|
+
"(create|build|implement|add).*?(feature|component|module|service)",
|
|
230
|
+
"(design|plan|architect).*?(system|feature|solution)"
|
|
231
|
+
]
|
|
232
|
+
},
|
|
233
|
+
"toolGuards": [
|
|
234
|
+
{
|
|
235
|
+
"tool": "Write",
|
|
236
|
+
"patterns": ["src/.*\\.(ts|tsx|js|jsx)$"]
|
|
237
|
+
}
|
|
238
|
+
]
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
"superpowers:systematic-debugging": {
|
|
242
|
+
"type": "guardrail",
|
|
243
|
+
"enforcement": "suggest",
|
|
244
|
+
"priority": "high",
|
|
245
|
+
"description": "Systematic approach to debugging - gather evidence before proposing fixes",
|
|
246
|
+
"promptTriggers": {
|
|
247
|
+
"keywords": [
|
|
248
|
+
"debug",
|
|
249
|
+
"fix bug",
|
|
250
|
+
"not working",
|
|
251
|
+
"broken",
|
|
252
|
+
"error",
|
|
253
|
+
"failing"
|
|
254
|
+
],
|
|
255
|
+
"intentPatterns": [
|
|
256
|
+
"(fix|debug|solve).*?(bug|error|issue|problem)",
|
|
257
|
+
"(why|what).*?(not working|broken|failing|error)",
|
|
258
|
+
"(investigate|diagnose).*?(issue|problem|error)"
|
|
259
|
+
]
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
|
|
263
|
+
"superpowers:test-driven-development": {
|
|
264
|
+
"type": "guardrail",
|
|
265
|
+
"enforcement": "suggest",
|
|
266
|
+
"priority": "medium",
|
|
267
|
+
"description": "Write tests before implementation code",
|
|
268
|
+
"promptTriggers": {
|
|
269
|
+
"keywords": [
|
|
270
|
+
"tdd",
|
|
271
|
+
"test driven",
|
|
272
|
+
"write tests first",
|
|
273
|
+
"test first"
|
|
274
|
+
],
|
|
275
|
+
"intentPatterns": [
|
|
276
|
+
"(implement|build|create).*?with.*?test",
|
|
277
|
+
"test.*?driven"
|
|
278
|
+
]
|
|
279
|
+
},
|
|
280
|
+
"toolGuards": [
|
|
281
|
+
{
|
|
282
|
+
"tool": "Write",
|
|
283
|
+
"patterns": ["src/.*(?<!\\.spec|\\.test)\\.(ts|tsx|js|jsx)$"]
|
|
284
|
+
}
|
|
285
|
+
]
|
|
286
|
+
},
|
|
287
|
+
|
|
288
|
+
"ship": {
|
|
289
|
+
"type": "guardrail",
|
|
290
|
+
"enforcement": "suggest",
|
|
291
|
+
"priority": "high",
|
|
292
|
+
"description": "Automated commit/push workflow with quality checks",
|
|
293
|
+
"promptTriggers": {
|
|
294
|
+
"keywords": [
|
|
295
|
+
"ship",
|
|
296
|
+
"commit and push",
|
|
297
|
+
"push changes",
|
|
298
|
+
"create pr",
|
|
299
|
+
"pull request"
|
|
300
|
+
],
|
|
301
|
+
"intentPatterns": [
|
|
302
|
+
"(commit|push).*?(changes|code)",
|
|
303
|
+
"(create|open).*?(pr|pull request)",
|
|
304
|
+
"ship.*?(it|this|code|changes)"
|
|
305
|
+
]
|
|
306
|
+
},
|
|
307
|
+
"toolGuards": [
|
|
308
|
+
{
|
|
309
|
+
"tool": "Bash",
|
|
310
|
+
"patterns": ["git commit", "git push"]
|
|
311
|
+
}
|
|
312
|
+
]
|
|
313
|
+
}
|
|
314
|
+
},
|
|
315
|
+
"notes": {
|
|
316
|
+
"version_history": {
|
|
317
|
+
"1.0": "Initial version with promptTriggers only",
|
|
318
|
+
"1.1": "Added notes and documentation",
|
|
319
|
+
"1.2": "Added toolGuards for PreToolUse hook"
|
|
320
|
+
},
|
|
321
|
+
"enforcement_types": {
|
|
322
|
+
"suggest": "Skill suggestion appears but doesn't block execution",
|
|
323
|
+
"block": "Requires skill to be used before proceeding (NOT IMPLEMENTED)",
|
|
324
|
+
"warn": "Shows warning but allows proceeding (NOT IMPLEMENTED)"
|
|
325
|
+
},
|
|
326
|
+
"priority_levels": {
|
|
327
|
+
"critical": "Highest - Always trigger, should be used",
|
|
328
|
+
"high": "Important - Strongly recommended",
|
|
329
|
+
"medium": "Moderate - Good to use if relevant",
|
|
330
|
+
"low": "Optional - Nice to have"
|
|
331
|
+
},
|
|
332
|
+
"trigger_types": {
|
|
333
|
+
"promptTriggers": "Activated via UserPromptSubmit hook based on user prompt",
|
|
334
|
+
"toolGuards": "Activated via PreToolUse hook before specific tool executions"
|
|
183
335
|
}
|
|
336
|
+
}
|
|
184
337
|
}
|
package/templates/base/README.md
CHANGED
|
@@ -96,8 +96,8 @@ This boilerplate provides everything you need to build a modern, secure, and sca
|
|
|
96
96
|
|
|
97
97
|
```bash
|
|
98
98
|
# Clone the repository
|
|
99
|
-
git clone https://github.com/your-org/
|
|
100
|
-
cd
|
|
99
|
+
git clone https://github.com/your-org/hono-boilerplate.git
|
|
100
|
+
cd hono-boilerplate
|
|
101
101
|
|
|
102
102
|
# Install dependencies
|
|
103
103
|
pnpm install
|
|
@@ -237,6 +237,8 @@ pnpm dlx @etus/bhono-app <project-name>
|
|
|
237
237
|
npm init bhono-app <project-name>
|
|
238
238
|
```
|
|
239
239
|
|
|
240
|
+
If the CLI cannot find local templates, it will clone the default Bhono template repo. You can override this by setting `BHONO_TEMPLATE_REPO` (or `ETUS_TEMPLATE_REPO`) to a git URL.
|
|
241
|
+
|
|
240
242
|
---
|
|
241
243
|
|
|
242
244
|
## Database Schema
|
|
@@ -483,17 +485,17 @@ wrangler deploy --config config/wrangler.json
|
|
|
483
485
|
|
|
484
486
|
```json
|
|
485
487
|
{
|
|
486
|
-
"name": "
|
|
488
|
+
"name": "hono-boilerplate",
|
|
487
489
|
"main": "../src/server/index.ts",
|
|
488
490
|
"compatibility_date": "2025-01-01",
|
|
489
491
|
"compatibility_flags": ["nodejs_compat"],
|
|
490
492
|
"d1_databases": [{
|
|
491
493
|
"binding": "DB",
|
|
492
|
-
"database_name": "
|
|
494
|
+
"database_name": "boilerplate-db"
|
|
493
495
|
}],
|
|
494
496
|
"r2_buckets": [{
|
|
495
497
|
"binding": "R2_BUCKET",
|
|
496
|
-
"bucket_name": "
|
|
498
|
+
"bucket_name": "boilerplate-storage"
|
|
497
499
|
}],
|
|
498
500
|
"kv_namespaces": [{
|
|
499
501
|
"binding": "SESSIONS",
|
|
@@ -514,10 +516,10 @@ wrangler deploy --config config/wrangler.json
|
|
|
514
516
|
|
|
515
517
|
```bash
|
|
516
518
|
# Create D1 database
|
|
517
|
-
wrangler d1 create
|
|
519
|
+
wrangler d1 create boilerplate-db
|
|
518
520
|
|
|
519
521
|
# Create R2 bucket
|
|
520
|
-
wrangler r2 bucket create
|
|
522
|
+
wrangler r2 bucket create boilerplate-storage
|
|
521
523
|
|
|
522
524
|
# Create KV namespace
|
|
523
525
|
wrangler kv:namespace create SESSIONS
|