@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.
Files changed (61) hide show
  1. package/package.json +3 -2
  2. package/templates/base/.claude/commands/check-skill-rules.md +112 -29
  3. package/templates/base/.claude/commands/linear/implement-issue.md +383 -55
  4. package/templates/base/.claude/commands/ship.md +77 -13
  5. package/templates/base/.claude/hooks/package-lock.json +0 -419
  6. package/templates/base/.claude/hooks/skill-activation-prompt.ts +185 -113
  7. package/templates/base/.claude/hooks/skill-tool-guard.sh +6 -0
  8. package/templates/base/.claude/hooks/skill-tool-guard.ts +198 -0
  9. package/templates/base/.claude/scripts/validate-skill-rules.sh +55 -32
  10. package/templates/base/.claude/settings.json +18 -11
  11. package/templates/base/.claude/skills/skill-rules.json +326 -173
  12. package/templates/base/.env.example +3 -0
  13. package/templates/base/README.md +9 -7
  14. package/templates/base/config/eslint.config.js +1 -0
  15. package/templates/base/config/wrangler.json +16 -17
  16. package/templates/base/docs/SETUP-GUIDE.md +566 -0
  17. package/templates/base/docs/architecture/README.md +162 -8
  18. package/templates/base/docs/architecture/api-catalog.md +575 -0
  19. package/templates/base/docs/architecture/c4-component.md +309 -0
  20. package/templates/base/docs/architecture/c4-container.md +183 -0
  21. package/templates/base/docs/architecture/c4-context.md +106 -0
  22. package/templates/base/docs/architecture/dependencies.md +327 -0
  23. package/templates/base/docs/architecture/tech-debt.md +184 -0
  24. package/templates/base/package.json +20 -15
  25. package/templates/base/scripts/capture-prod-session.ts +2 -2
  26. package/templates/base/scripts/sync-template.sh +104 -0
  27. package/templates/base/src/server/db/sql.ts +24 -4
  28. package/templates/base/src/server/index.ts +1 -0
  29. package/templates/base/src/server/lib/audited-db.ts +10 -10
  30. package/templates/base/src/server/middleware/account.ts +1 -1
  31. package/templates/base/src/server/middleware/auth.ts +11 -11
  32. package/templates/base/src/server/middleware/rate-limit.ts +3 -6
  33. package/templates/base/src/server/routes/auth/handlers.ts +5 -5
  34. package/templates/base/src/server/routes/auth/test-login.ts +9 -9
  35. package/templates/base/src/server/routes/index.ts +9 -0
  36. package/templates/base/src/server/routes/invitations/handlers.ts +6 -6
  37. package/templates/base/src/server/routes/openapi.ts +1 -1
  38. package/templates/base/src/server/services/accounts.ts +9 -9
  39. package/templates/base/src/server/services/audits.ts +12 -12
  40. package/templates/base/src/server/services/auth.ts +15 -15
  41. package/templates/base/src/server/services/invitations.ts +16 -16
  42. package/templates/base/src/server/services/users.ts +13 -13
  43. package/templates/base/src/shared/types/api.ts +66 -198
  44. package/templates/base/tests/e2e/auth.setup.ts +1 -1
  45. package/templates/base/tests/unit/server/auth/guards.test.ts +1 -1
  46. package/templates/base/tests/unit/server/middleware/auth.test.ts +273 -0
  47. package/templates/base/tests/unit/server/routes/auth/handlers.test.ts +111 -0
  48. package/templates/base/tests/unit/server/routes/users/handlers.test.ts +69 -5
  49. package/templates/base/tests/unit/server/services/accounts.test.ts +148 -0
  50. package/templates/base/tests/unit/server/services/audits.test.ts +219 -0
  51. package/templates/base/tests/unit/server/services/auth.test.ts +480 -3
  52. package/templates/base/tests/unit/server/services/invitations.test.ts +178 -0
  53. package/templates/base/tests/unit/server/services/users.test.ts +363 -8
  54. package/templates/base/tests/unit/shared/schemas.test.ts +1 -1
  55. package/templates/base/vite.config.ts +3 -1
  56. package/templates/base/.github/workflows/test.yml +0 -127
  57. package/templates/base/.husky/pre-push +0 -26
  58. package/templates/base/auth-setup-error.png +0 -0
  59. package/templates/base/pnpm-lock.yaml +0 -8052
  60. package/templates/base/tests/e2e/_auth/.gitkeep +0 -0
  61. package/templates/base/tsconfig.tsbuildinfo +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etus/bhono-app",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -17,7 +17,8 @@
17
17
  "build": "tsc",
18
18
  "dev": "tsc --watch",
19
19
  "start": "node dist/index.js",
20
- "prepublishOnly": "npm run build",
20
+ "sync": "cd ../.. && ./scripts/sync-template.sh",
21
+ "prepublishOnly": "npm run sync && npm run build",
21
22
  "test": "vitest",
22
23
  "test:run": "vitest run"
23
24
  },
@@ -4,50 +4,133 @@ description: Check if all skills are mapped in skill-rules.json and report any m
4
4
 
5
5
  # Check Skill Rules Mapping
6
6
 
7
- Audit the skill-rules.json file against actual skill directories to find:
8
- 1. **Unmapped skills** - Skills that exist but aren't in skill-rules.json
9
- 2. **Orphaned entries** - Entries in skill-rules.json that have no matching skill
7
+ Audit the skill-rules.json file against actual skill directories and validate the hook system.
10
8
 
11
9
  ## Instructions
12
10
 
13
- 1. **Find all project skills** in `.claude/skills/`:
14
- - List all directories (skills are directories, not files)
15
- - Exclude `skill-rules.json` (it's the config file, not a skill)
11
+ ### 1. Validate Hook System
16
12
 
17
- 2. **Find all user skills** in `~/.claude/skills/`:
18
- - List all directories there too
13
+ First, check that all hooks are properly configured:
19
14
 
20
- 3. **Read skill-rules.json** and extract the skill names from the `skills` object keys
15
+ ```bash
16
+ # Check hooks exist and are executable
17
+ ls -la .claude/hooks/*.sh
21
18
 
22
- 4. **Compare and report**:
23
-
24
- ### Output Format
19
+ # Test skill-activation-prompt hook
20
+ echo '{"session_id":"test","prompt":"analyze architecture"}' | .claude/hooks/skill-activation-prompt.sh
25
21
 
22
+ # Test skill-tool-guard hook
23
+ echo '{"session_id":"test","tool_name":"Bash","tool_input":{"command":"git push"}}' | .claude/hooks/skill-tool-guard.sh
26
24
  ```
27
- ## Skill Rules Audit
28
25
 
29
- ### Project Skills (.claude/skills/)
30
- | Skill | Mapped |
31
- |-------|--------|
32
- | skill-name | / |
26
+ ### 2. Find All Skills
27
+
28
+ **Project skills** in `.claude/skills/`:
29
+ - List all `.md` files (skills are markdown files)
30
+ - Exclude `skill-rules.json` (config file)
31
+
32
+ **User skills** in `~/.claude/skills/`:
33
+ - List all `.md` files
34
+
35
+ **Plugin skills** (from enabled plugins):
36
+ - Check `superpowers:*` skills
37
+ - Check other plugin namespaced skills
38
+
39
+ ### 3. Read skill-rules.json
40
+
41
+ Extract from the `skills` object:
42
+ - Skill names (keys)
43
+ - For each skill:
44
+ - `promptTriggers` (keywords + intentPatterns)
45
+ - `toolGuards` (tool + patterns)
46
+ - `enforcement` level
47
+ - `priority` level
48
+
49
+ ### 4. Compare and Report
50
+
51
+ ## Output Format
52
+
53
+ ```markdown
54
+ ## Skill Rules Audit (v1.2)
33
55
 
34
- ### User Skills (~/.claude/skills/)
35
- | Skill | Mapped |
36
- |-------|--------|
37
- | skill-name | / |
56
+ ### Hook System Status
57
+ | Hook | File Exists | Executable | Test |
58
+ |------|-------------|------------|------|
59
+ | skill-activation-prompt | ✅/❌ | ✅/❌ | ✅/❌ |
60
+ | skill-tool-guard | ✅/❌ | ✅/❌ | ✅/❌ |
38
61
 
39
- ### Orphaned Entries (in rules but no skill file)
40
- | Entry | Status |
41
- |-------|--------|
42
- | entry-name | No skill directory found |
62
+ ### Local Skills (.claude/skills/)
63
+ | Skill | In Rules | promptTriggers | toolGuards |
64
+ |-------|----------|----------------|------------|
65
+ | skill-name | ✅/❌ | X keywords, Y patterns | Z guards |
66
+
67
+ ### Plugin Skills (superpowers, etc)
68
+ | Skill | In Rules | promptTriggers | toolGuards |
69
+ |-------|----------|----------------|------------|
70
+ | superpowers:skill-name | ✅/❌ | X keywords, Y patterns | Z guards |
71
+
72
+ ### Orphaned Entries (in rules but no matching skill)
73
+ | Entry | Type | Issue |
74
+ |-------|------|-------|
75
+ | entry-name | local/plugin | No skill file/plugin found |
76
+
77
+ ### Tool Guard Coverage
78
+ | Tool | Skills with Guards |
79
+ |------|-------------------|
80
+ | Bash | skill1, skill2 |
81
+ | Edit | skill3 |
82
+ | Write | skill4 |
43
83
 
44
84
  ### Summary
45
- - Project skills: X mapped, Y unmapped
46
- - User skills: X mapped, Y unmapped
85
+ - Local skills: X mapped, Y unmapped
86
+ - Plugin skills: X mapped, Y unmapped
47
87
  - Orphaned entries: Z
88
+ - Skills with promptTriggers: N
89
+ - Skills with toolGuards: M
90
+ - Hooks status: OK/ISSUES
48
91
 
49
92
  ### Recommended Actions
50
- [If there are unmapped skills or orphaned entries, suggest specific actions]
93
+ [If there are issues, suggest specific fixes]
51
94
  ```
52
95
 
53
- 5. If there are discrepancies, ask if I want you to update skill-rules.json automatically.
96
+ ### 5. Validation Checks
97
+
98
+ Verify for each skill in rules:
99
+ - [ ] Has at least `promptTriggers` OR `toolGuards`
100
+ - [ ] `enforcement` is valid (suggest/warn/block)
101
+ - [ ] `priority` is valid (critical/high/medium/low)
102
+ - [ ] `toolGuards` patterns are valid regex
103
+ - [ ] `intentPatterns` are valid regex
104
+
105
+ ### 6. Auto-fix Option
106
+
107
+ If there are discrepancies, ask if I want you to:
108
+ 1. Add missing skills to skill-rules.json with default config
109
+ 2. Remove orphaned entries
110
+ 3. Fix invalid patterns
111
+
112
+ ## Current skill-rules.json Structure (v1.2)
113
+
114
+ ```json
115
+ {
116
+ "version": "1.2",
117
+ "skills": {
118
+ "skill-name": {
119
+ "type": "domain|guardrail",
120
+ "enforcement": "suggest|warn|block",
121
+ "priority": "critical|high|medium|low",
122
+ "description": "What this skill does",
123
+ "promptTriggers": {
124
+ "keywords": ["exact match words"],
125
+ "intentPatterns": ["regex patterns"]
126
+ },
127
+ "toolGuards": [
128
+ {
129
+ "tool": "Bash|Edit|Write|Read|Glob|Task|*",
130
+ "patterns": ["regex to match tool input"]
131
+ }
132
+ ]
133
+ }
134
+ }
135
+ }
136
+ ```