safeword 0.2.4 → 0.2.6

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 (235) hide show
  1. package/dist/check-3NGQ4NR5.js +129 -0
  2. package/dist/check-3NGQ4NR5.js.map +1 -0
  3. package/dist/chunk-2XWIUEQK.js +190 -0
  4. package/dist/chunk-2XWIUEQK.js.map +1 -0
  5. package/dist/chunk-GZRQL3SX.js +146 -0
  6. package/dist/chunk-GZRQL3SX.js.map +1 -0
  7. package/dist/chunk-ORQHKDT2.js +10 -0
  8. package/dist/chunk-ORQHKDT2.js.map +1 -0
  9. package/dist/chunk-W66Z3C5H.js +21 -0
  10. package/dist/chunk-W66Z3C5H.js.map +1 -0
  11. package/dist/cli.d.ts +1 -0
  12. package/dist/cli.js +34 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/diff-Y6QTAW4O.js +166 -0
  15. package/dist/diff-Y6QTAW4O.js.map +1 -0
  16. package/dist/index.d.ts +11 -0
  17. package/dist/index.js +7 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/reset-3ACTIYYE.js +143 -0
  20. package/dist/reset-3ACTIYYE.js.map +1 -0
  21. package/dist/setup-AIL5RL45.js +276 -0
  22. package/dist/setup-AIL5RL45.js.map +1 -0
  23. package/dist/upgrade-6AR3DHUV.js +134 -0
  24. package/dist/upgrade-6AR3DHUV.js.map +1 -0
  25. package/package.json +44 -19
  26. package/{.safeword → templates}/hooks/agents-md-check.sh +0 -0
  27. package/{.safeword → templates}/hooks/post-tool.sh +0 -0
  28. package/{.safeword → templates}/hooks/pre-commit.sh +0 -0
  29. package/.claude/commands/arch-review.md +0 -32
  30. package/.claude/commands/lint.md +0 -6
  31. package/.claude/commands/quality-review.md +0 -13
  32. package/.claude/commands/setup-linting.md +0 -6
  33. package/.claude/hooks/auto-lint.sh +0 -6
  34. package/.claude/hooks/auto-quality-review.sh +0 -170
  35. package/.claude/hooks/check-linting-sync.sh +0 -17
  36. package/.claude/hooks/inject-timestamp.sh +0 -6
  37. package/.claude/hooks/question-protocol.sh +0 -12
  38. package/.claude/hooks/run-linters.sh +0 -8
  39. package/.claude/hooks/run-quality-review.sh +0 -76
  40. package/.claude/hooks/version-check.sh +0 -10
  41. package/.claude/mcp/README.md +0 -96
  42. package/.claude/mcp/arcade.sample.json +0 -9
  43. package/.claude/mcp/context7.sample.json +0 -7
  44. package/.claude/mcp/playwright.sample.json +0 -7
  45. package/.claude/settings.json +0 -62
  46. package/.claude/skills/quality-reviewer/SKILL.md +0 -190
  47. package/.claude/skills/safeword-quality-reviewer/SKILL.md +0 -13
  48. package/.env.arcade.example +0 -4
  49. package/.env.example +0 -11
  50. package/.gitmodules +0 -4
  51. package/.safeword/SAFEWORD.md +0 -33
  52. package/.safeword/eslint/eslint-base.mjs +0 -101
  53. package/.safeword/guides/architecture-guide.md +0 -404
  54. package/.safeword/guides/code-philosophy.md +0 -174
  55. package/.safeword/guides/context-files-guide.md +0 -405
  56. package/.safeword/guides/data-architecture-guide.md +0 -183
  57. package/.safeword/guides/design-doc-guide.md +0 -165
  58. package/.safeword/guides/learning-extraction.md +0 -515
  59. package/.safeword/guides/llm-instruction-design.md +0 -239
  60. package/.safeword/guides/llm-prompting.md +0 -95
  61. package/.safeword/guides/tdd-best-practices.md +0 -570
  62. package/.safeword/guides/test-definitions-guide.md +0 -243
  63. package/.safeword/guides/testing-methodology.md +0 -573
  64. package/.safeword/guides/user-story-guide.md +0 -237
  65. package/.safeword/guides/zombie-process-cleanup.md +0 -214
  66. package/.safeword/planning/002-user-story-quality-evaluation.md +0 -1840
  67. package/.safeword/planning/003-langsmith-eval-setup-prompt.md +0 -363
  68. package/.safeword/planning/004-llm-eval-test-cases.md +0 -3226
  69. package/.safeword/planning/005-architecture-enforcement-system.md +0 -169
  70. package/.safeword/planning/006-reactive-fix-prevention-research.md +0 -135
  71. package/.safeword/planning/011-cli-ux-vision.md +0 -330
  72. package/.safeword/planning/012-project-structure-cleanup.md +0 -154
  73. package/.safeword/planning/README.md +0 -39
  74. package/.safeword/planning/automation-plan-v2.md +0 -1225
  75. package/.safeword/planning/automation-plan-v3.md +0 -1291
  76. package/.safeword/planning/automation-plan.md +0 -3058
  77. package/.safeword/planning/design/005-cli-implementation.md +0 -343
  78. package/.safeword/planning/design/013-cli-self-contained-templates.md +0 -596
  79. package/.safeword/planning/design/013a-eslint-plugin-suite.md +0 -256
  80. package/.safeword/planning/design/013b-implementation-snippets.md +0 -385
  81. package/.safeword/planning/design/013c-config-isolation-strategy.md +0 -242
  82. package/.safeword/planning/design/code-philosophy-improvements.md +0 -60
  83. package/.safeword/planning/mcp-analysis.md +0 -545
  84. package/.safeword/planning/phase2-subagents-vs-skills-analysis.md +0 -451
  85. package/.safeword/planning/settings-improvements.md +0 -970
  86. package/.safeword/planning/test-definitions/005-cli-implementation.md +0 -1301
  87. package/.safeword/planning/test-definitions/cli-self-contained-templates.md +0 -205
  88. package/.safeword/planning/user-stories/001-guides-review-user-stories.md +0 -1381
  89. package/.safeword/planning/user-stories/003-reactive-fix-prevention.md +0 -132
  90. package/.safeword/planning/user-stories/004-technical-constraints.md +0 -86
  91. package/.safeword/planning/user-stories/005-cli-implementation.md +0 -311
  92. package/.safeword/planning/user-stories/cli-self-contained-templates.md +0 -172
  93. package/.safeword/planning/versioned-distribution.md +0 -740
  94. package/.safeword/prompts/arch-review.md +0 -43
  95. package/.safeword/prompts/quality-review.md +0 -11
  96. package/.safeword/scripts/arch-review.sh +0 -235
  97. package/.safeword/scripts/check-linting-sync.sh +0 -58
  98. package/.safeword/scripts/setup-linting.sh +0 -559
  99. package/.safeword/templates/architecture-template.md +0 -136
  100. package/.safeword/templates/ci/architecture-check.yml +0 -79
  101. package/.safeword/templates/design-doc-template.md +0 -127
  102. package/.safeword/templates/test-definitions-feature.md +0 -100
  103. package/.safeword/templates/ticket-template.md +0 -74
  104. package/.safeword/templates/user-stories-template.md +0 -82
  105. package/.safeword/tickets/001-guides-review-user-stories.md +0 -83
  106. package/.safeword/tickets/002-architecture-enforcement.md +0 -211
  107. package/.safeword/tickets/003-reactive-fix-prevention.md +0 -57
  108. package/.safeword/tickets/004-technical-constraints-in-user-stories.md +0 -39
  109. package/.safeword/tickets/005-cli-implementation.md +0 -248
  110. package/.safeword/tickets/006-flesh-out-skills.md +0 -43
  111. package/.safeword/tickets/007-flesh-out-questioning.md +0 -44
  112. package/.safeword/tickets/008-upgrade-questioning.md +0 -58
  113. package/.safeword/tickets/009-naming-conventions.md +0 -41
  114. package/.safeword/tickets/010-safeword-md-cleanup.md +0 -34
  115. package/.safeword/tickets/011-cursor-setup.md +0 -86
  116. package/.safeword/tickets/README.md +0 -73
  117. package/.safeword/version +0 -1
  118. package/AGENTS.md +0 -59
  119. package/CLAUDE.md +0 -12
  120. package/README.md +0 -347
  121. package/docs/001-cli-implementation-plan.md +0 -856
  122. package/docs/elite-dx-implementation-plan.md +0 -1034
  123. package/framework/README.md +0 -131
  124. package/framework/mcp/README.md +0 -96
  125. package/framework/mcp/arcade.sample.json +0 -8
  126. package/framework/mcp/context7.sample.json +0 -6
  127. package/framework/mcp/playwright.sample.json +0 -6
  128. package/framework/scripts/arch-review.sh +0 -235
  129. package/framework/scripts/check-linting-sync.sh +0 -58
  130. package/framework/scripts/load-env.sh +0 -49
  131. package/framework/scripts/setup-claude.sh +0 -223
  132. package/framework/scripts/setup-linting.sh +0 -559
  133. package/framework/scripts/setup-quality.sh +0 -477
  134. package/framework/scripts/setup-safeword.sh +0 -550
  135. package/framework/templates/ci/architecture-check.yml +0 -78
  136. package/learnings/ai-sdk-v5-breaking-changes.md +0 -178
  137. package/learnings/e2e-test-zombie-processes.md +0 -231
  138. package/learnings/milkdown-crepe-editor-property.md +0 -96
  139. package/learnings/prosemirror-fragment-traversal.md +0 -119
  140. package/packages/cli/AGENTS.md +0 -1
  141. package/packages/cli/ARCHITECTURE.md +0 -279
  142. package/packages/cli/package.json +0 -51
  143. package/packages/cli/src/cli.ts +0 -63
  144. package/packages/cli/src/commands/check.ts +0 -166
  145. package/packages/cli/src/commands/diff.ts +0 -209
  146. package/packages/cli/src/commands/reset.ts +0 -190
  147. package/packages/cli/src/commands/setup.ts +0 -325
  148. package/packages/cli/src/commands/upgrade.ts +0 -163
  149. package/packages/cli/src/index.ts +0 -3
  150. package/packages/cli/src/templates/config.ts +0 -58
  151. package/packages/cli/src/templates/content.ts +0 -18
  152. package/packages/cli/src/templates/index.ts +0 -12
  153. package/packages/cli/src/utils/agents-md.ts +0 -66
  154. package/packages/cli/src/utils/fs.ts +0 -179
  155. package/packages/cli/src/utils/git.ts +0 -124
  156. package/packages/cli/src/utils/hooks.ts +0 -29
  157. package/packages/cli/src/utils/output.ts +0 -60
  158. package/packages/cli/src/utils/project-detector.test.ts +0 -185
  159. package/packages/cli/src/utils/project-detector.ts +0 -44
  160. package/packages/cli/src/utils/version.ts +0 -28
  161. package/packages/cli/src/version.ts +0 -6
  162. package/packages/cli/templates/SAFEWORD.md +0 -776
  163. package/packages/cli/templates/doc-templates/architecture-template.md +0 -136
  164. package/packages/cli/templates/doc-templates/design-doc-template.md +0 -134
  165. package/packages/cli/templates/doc-templates/test-definitions-feature.md +0 -131
  166. package/packages/cli/templates/doc-templates/ticket-template.md +0 -82
  167. package/packages/cli/templates/doc-templates/user-stories-template.md +0 -92
  168. package/packages/cli/templates/guides/architecture-guide.md +0 -423
  169. package/packages/cli/templates/guides/code-philosophy.md +0 -195
  170. package/packages/cli/templates/guides/context-files-guide.md +0 -457
  171. package/packages/cli/templates/guides/data-architecture-guide.md +0 -200
  172. package/packages/cli/templates/guides/design-doc-guide.md +0 -171
  173. package/packages/cli/templates/guides/learning-extraction.md +0 -552
  174. package/packages/cli/templates/guides/llm-instruction-design.md +0 -248
  175. package/packages/cli/templates/guides/llm-prompting.md +0 -102
  176. package/packages/cli/templates/guides/tdd-best-practices.md +0 -615
  177. package/packages/cli/templates/guides/test-definitions-guide.md +0 -334
  178. package/packages/cli/templates/guides/testing-methodology.md +0 -618
  179. package/packages/cli/templates/guides/user-story-guide.md +0 -256
  180. package/packages/cli/templates/guides/zombie-process-cleanup.md +0 -219
  181. package/packages/cli/templates/hooks/agents-md-check.sh +0 -27
  182. package/packages/cli/templates/hooks/post-tool.sh +0 -4
  183. package/packages/cli/templates/hooks/pre-commit.sh +0 -10
  184. package/packages/cli/templates/prompts/arch-review.md +0 -43
  185. package/packages/cli/templates/prompts/quality-review.md +0 -10
  186. package/packages/cli/templates/skills/safeword-quality-reviewer/SKILL.md +0 -207
  187. package/packages/cli/tests/commands/check.test.ts +0 -129
  188. package/packages/cli/tests/commands/cli.test.ts +0 -89
  189. package/packages/cli/tests/commands/diff.test.ts +0 -115
  190. package/packages/cli/tests/commands/reset.test.ts +0 -310
  191. package/packages/cli/tests/commands/self-healing.test.ts +0 -170
  192. package/packages/cli/tests/commands/setup-blocking.test.ts +0 -71
  193. package/packages/cli/tests/commands/setup-core.test.ts +0 -135
  194. package/packages/cli/tests/commands/setup-git.test.ts +0 -139
  195. package/packages/cli/tests/commands/setup-hooks.test.ts +0 -334
  196. package/packages/cli/tests/commands/setup-linting.test.ts +0 -189
  197. package/packages/cli/tests/commands/setup-noninteractive.test.ts +0 -80
  198. package/packages/cli/tests/commands/setup-templates.test.ts +0 -181
  199. package/packages/cli/tests/commands/upgrade.test.ts +0 -215
  200. package/packages/cli/tests/helpers.ts +0 -243
  201. package/packages/cli/tests/npm-package.test.ts +0 -83
  202. package/packages/cli/tests/technical-constraints.test.ts +0 -96
  203. package/packages/cli/tsconfig.json +0 -25
  204. package/packages/cli/tsup.config.ts +0 -11
  205. package/packages/cli/vitest.config.ts +0 -23
  206. package/promptfoo.yaml +0 -3270
  207. /package/{framework → templates}/SAFEWORD.md +0 -0
  208. /package/{packages/cli/templates → templates}/commands/arch-review.md +0 -0
  209. /package/{packages/cli/templates → templates}/commands/lint.md +0 -0
  210. /package/{packages/cli/templates → templates}/commands/quality-review.md +0 -0
  211. /package/{framework/templates → templates/doc-templates}/architecture-template.md +0 -0
  212. /package/{framework/templates → templates/doc-templates}/design-doc-template.md +0 -0
  213. /package/{framework/templates → templates/doc-templates}/test-definitions-feature.md +0 -0
  214. /package/{framework/templates → templates/doc-templates}/ticket-template.md +0 -0
  215. /package/{framework/templates → templates/doc-templates}/user-stories-template.md +0 -0
  216. /package/{framework → templates}/guides/architecture-guide.md +0 -0
  217. /package/{framework → templates}/guides/code-philosophy.md +0 -0
  218. /package/{framework → templates}/guides/context-files-guide.md +0 -0
  219. /package/{framework → templates}/guides/data-architecture-guide.md +0 -0
  220. /package/{framework → templates}/guides/design-doc-guide.md +0 -0
  221. /package/{framework → templates}/guides/learning-extraction.md +0 -0
  222. /package/{framework → templates}/guides/llm-instruction-design.md +0 -0
  223. /package/{framework → templates}/guides/llm-prompting.md +0 -0
  224. /package/{framework → templates}/guides/tdd-best-practices.md +0 -0
  225. /package/{framework → templates}/guides/test-definitions-guide.md +0 -0
  226. /package/{framework → templates}/guides/testing-methodology.md +0 -0
  227. /package/{framework → templates}/guides/user-story-guide.md +0 -0
  228. /package/{framework → templates}/guides/zombie-process-cleanup.md +0 -0
  229. /package/{packages/cli/templates → templates}/hooks/inject-timestamp.sh +0 -0
  230. /package/{packages/cli/templates → templates}/lib/common.sh +0 -0
  231. /package/{packages/cli/templates → templates}/lib/jq-fallback.sh +0 -0
  232. /package/{packages/cli/templates → templates}/markdownlint.jsonc +0 -0
  233. /package/{framework → templates}/prompts/arch-review.md +0 -0
  234. /package/{framework → templates}/prompts/quality-review.md +0 -0
  235. /package/{framework/skills/quality-reviewer → templates/skills/safeword-quality-reviewer}/SKILL.md +0 -0
@@ -1,43 +0,0 @@
1
- # Architecture Review Prompt
2
-
3
- Review the following code changes for architectural issues.
4
-
5
- ## Check for:
6
-
7
- 1. **Misplaced logic** - Business rules in wrong layer?
8
- 2. **God module** - Too many responsibilities (>10 dependents or >500 lines)?
9
- 3. **Leaky abstraction** - Implementation details exposed to callers?
10
- 4. **Tight coupling** - Changes would cascade unnecessarily?
11
- 5. **Boundary violation** - Import from disallowed layer?
12
-
13
- ## Context
14
-
15
- Read the project's ARCHITECTURE.md for:
16
- - Defined layers and their responsibilities
17
- - Allowed dependencies between layers
18
- - Project-specific patterns and conventions
19
-
20
- ## Response Format
21
-
22
- Return JSON:
23
-
24
- ```json
25
- {
26
- "issues": [
27
- {
28
- "type": "misplaced_logic | god_module | leaky_abstraction | tight_coupling | boundary_violation",
29
- "location": "file:line or module name",
30
- "description": "What's wrong",
31
- "fix": "How to fix it"
32
- }
33
- ],
34
- "verdict": "clean | minor | refactor_needed"
35
- }
36
- ```
37
-
38
- ### Verdict definitions:
39
-
40
- - **clean**: No issues found
41
- - **minor**: Small issues that should be noted but don't block commit
42
- - **refactor_needed**: Significant issues that should be addressed before commit
43
-
@@ -1,11 +0,0 @@
1
- # Quality Review Prompt
2
-
3
- Double check and critique your work just in case.
4
-
5
- - Is it correct?
6
- - Is it elegant?
7
- - Does it adhere to the latest documentation and best practices for the relevant stack items, UX principles, domain requirements, and testing practices?
8
- - Ask me any non-obvious questions you can't research yourself in the codebase or online.
9
- - Think hard.
10
- - Avoid bloat.
11
-
@@ -1,235 +0,0 @@
1
- #!/bin/bash
2
- ################################################################################
3
- # Architecture Review Script
4
- #
5
- # Sends changed files to Claude Haiku API for semantic architecture review.
6
- # Returns JSON verdict: clean | minor | refactor_needed
7
- #
8
- # Usage:
9
- # arch-review.sh file1.ts file2.ts # Review specific files
10
- # arch-review.sh --staged # Review git staged files
11
- #
12
- # Environment variables:
13
- # ANTHROPIC_API_KEY - Required. Your Anthropic API key.
14
- # ARCH_REVIEW_MODEL - Optional. Model to use (default: claude-3-haiku-20240307)
15
- #
16
- # Exit codes:
17
- # 0 - Clean or minor issues (commit allowed)
18
- # 1 - Refactor needed (commit blocked)
19
- # 2 - Error (missing API key, network issue, etc.)
20
- ################################################################################
21
-
22
- set -e
23
-
24
- VERSION="v1.0.0"
25
-
26
- # Configuration
27
- MODEL="${ARCH_REVIEW_MODEL:-claude-3-haiku-20240307}"
28
- MAX_TOKENS=1024
29
-
30
- # Colors for output
31
- RED='\033[0;31m'
32
- YELLOW='\033[1;33m'
33
- GREEN='\033[0;32m'
34
- NC='\033[0m' # No Color
35
-
36
- # Check for required tools
37
- if ! command -v curl &> /dev/null; then
38
- echo "ERROR: curl is required but not installed." >&2
39
- exit 2
40
- fi
41
-
42
- if ! command -v jq &> /dev/null; then
43
- echo "ERROR: jq is required but not installed." >&2
44
- exit 2
45
- fi
46
-
47
- # Check for API key
48
- if [ -z "$ANTHROPIC_API_KEY" ]; then
49
- echo "ERROR: ANTHROPIC_API_KEY environment variable is not set." >&2
50
- echo "Set it with: export ANTHROPIC_API_KEY='your-api-key'" >&2
51
- exit 2
52
- fi
53
-
54
- # Parse arguments
55
- FILES=()
56
- STAGED_MODE=false
57
-
58
- for arg in "$@"; do
59
- case "$arg" in
60
- --staged)
61
- STAGED_MODE=true
62
- ;;
63
- --help|-h)
64
- echo "Architecture Review Script $VERSION"
65
- echo ""
66
- echo "Usage:"
67
- echo " arch-review.sh file1.ts file2.ts # Review specific files"
68
- echo " arch-review.sh --staged # Review git staged files"
69
- echo ""
70
- echo "Environment variables:"
71
- echo " ANTHROPIC_API_KEY - Required. Your Anthropic API key."
72
- echo " ARCH_REVIEW_MODEL - Optional. Model (default: claude-3-haiku-20240307)"
73
- exit 0
74
- ;;
75
- *)
76
- FILES+=("$arg")
77
- ;;
78
- esac
79
- done
80
-
81
- # Get staged files if --staged mode
82
- if [ "$STAGED_MODE" = true ]; then
83
- # Get staged files (only .js, .ts, .tsx, .jsx)
84
- while IFS= read -r file; do
85
- if [[ "$file" =~ \.(js|ts|tsx|jsx)$ ]]; then
86
- FILES+=("$file")
87
- fi
88
- done < <(git diff --cached --name-only --diff-filter=ACM 2>/dev/null || true)
89
- fi
90
-
91
- # Check if we have files to review
92
- if [ ${#FILES[@]} -eq 0 ]; then
93
- echo "No files to review."
94
- exit 0
95
- fi
96
-
97
- echo "Reviewing ${#FILES[@]} file(s) for architectural issues..."
98
-
99
- # Find ARCHITECTURE.md (search upward from current directory)
100
- ARCH_FILE=""
101
- SEARCH_DIR="$PWD"
102
- while [ "$SEARCH_DIR" != "/" ]; do
103
- if [ -f "$SEARCH_DIR/ARCHITECTURE.md" ]; then
104
- ARCH_FILE="$SEARCH_DIR/ARCHITECTURE.md"
105
- break
106
- fi
107
- SEARCH_DIR=$(dirname "$SEARCH_DIR")
108
- done
109
-
110
- # Build context for the prompt
111
- CONTEXT=""
112
-
113
- # Add ARCHITECTURE.md if found
114
- if [ -n "$ARCH_FILE" ]; then
115
- ARCH_CONTENT=$(cat "$ARCH_FILE" | head -c 8000) # Limit to ~8KB
116
- CONTEXT+="## ARCHITECTURE.md\n\n$ARCH_CONTENT\n\n"
117
- fi
118
-
119
- # Add file contents
120
- CONTEXT+="## Changed Files\n\n"
121
- for file in "${FILES[@]}"; do
122
- if [ -f "$file" ]; then
123
- FILE_CONTENT=$(cat "$file" | head -c 4000) # Limit each file to ~4KB
124
- CONTEXT+="### $file\n\n\`\`\`\n$FILE_CONTENT\n\`\`\`\n\n"
125
- fi
126
- done
127
-
128
- # Read the arch-review prompt
129
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
130
- PROMPT_FILE="$SCRIPT_DIR/../prompts/arch-review.md"
131
-
132
- # Fall back to .safeword location if framework location doesn't exist
133
- if [ ! -f "$PROMPT_FILE" ]; then
134
- # Try .safeword/prompts/ location (when installed in project)
135
- PROJECT_ROOT="$PWD"
136
- while [ "$PROJECT_ROOT" != "/" ]; do
137
- if [ -f "$PROJECT_ROOT/.safeword/prompts/arch-review.md" ]; then
138
- PROMPT_FILE="$PROJECT_ROOT/.safeword/prompts/arch-review.md"
139
- break
140
- fi
141
- PROJECT_ROOT=$(dirname "$PROJECT_ROOT")
142
- done
143
- fi
144
-
145
- if [ ! -f "$PROMPT_FILE" ]; then
146
- echo "ERROR: arch-review.md prompt not found." >&2
147
- exit 2
148
- fi
149
-
150
- PROMPT=$(cat "$PROMPT_FILE")
151
-
152
- # Combine prompt with context
153
- FULL_PROMPT="$PROMPT\n\n---\n\n$CONTEXT"
154
-
155
- # Escape for JSON
156
- FULL_PROMPT_ESCAPED=$(echo -e "$FULL_PROMPT" | jq -Rs .)
157
-
158
- # Make API request
159
- RESPONSE=$(curl -s -X POST "https://api.anthropic.com/v1/messages" \
160
- -H "Content-Type: application/json" \
161
- -H "x-api-key: $ANTHROPIC_API_KEY" \
162
- -H "anthropic-version: 2023-06-01" \
163
- -d "{
164
- \"model\": \"$MODEL\",
165
- \"max_tokens\": $MAX_TOKENS,
166
- \"messages\": [
167
- {
168
- \"role\": \"user\",
169
- \"content\": $FULL_PROMPT_ESCAPED
170
- }
171
- ]
172
- }" 2>&1)
173
-
174
- # Check for API errors
175
- if echo "$RESPONSE" | jq -e '.error' > /dev/null 2>&1; then
176
- ERROR_MSG=$(echo "$RESPONSE" | jq -r '.error.message // "Unknown error"')
177
- echo "ERROR: API request failed: $ERROR_MSG" >&2
178
- exit 2
179
- fi
180
-
181
- # Extract the text response
182
- TEXT_RESPONSE=$(echo "$RESPONSE" | jq -r '.content[0].text // empty')
183
-
184
- if [ -z "$TEXT_RESPONSE" ]; then
185
- echo "ERROR: Empty response from API" >&2
186
- exit 2
187
- fi
188
-
189
- # Try to extract JSON from the response
190
- JSON_RESULT=$(echo "$TEXT_RESPONSE" | grep -oP '\{[^{}]*"verdict"[^{}]*\}' | head -1 || true)
191
-
192
- # If no simple JSON found, try to extract from code block
193
- if [ -z "$JSON_RESULT" ]; then
194
- JSON_RESULT=$(echo "$TEXT_RESPONSE" | sed -n '/```json/,/```/p' | grep -v '```' | tr -d '\n' || true)
195
- fi
196
-
197
- # Parse verdict
198
- VERDICT="clean"
199
- if [ -n "$JSON_RESULT" ]; then
200
- VERDICT=$(echo "$JSON_RESULT" | jq -r '.verdict // "clean"' 2>/dev/null || echo "clean")
201
- fi
202
-
203
- # Output results
204
- echo ""
205
- echo "=== Architecture Review Results ==="
206
- echo ""
207
-
208
- # Show full response for debugging/context
209
- echo "$TEXT_RESPONSE"
210
- echo ""
211
-
212
- # Show verdict with color
213
- case "$VERDICT" in
214
- clean)
215
- echo -e "${GREEN}✓ Verdict: CLEAN${NC}"
216
- echo "No architectural issues found."
217
- exit 0
218
- ;;
219
- minor)
220
- echo -e "${YELLOW}⚠ Verdict: MINOR${NC}"
221
- echo "Minor issues noted. Commit allowed."
222
- exit 0
223
- ;;
224
- refactor_needed)
225
- echo -e "${RED}✗ Verdict: REFACTOR NEEDED${NC}"
226
- echo "Significant architectural issues found. Please address before committing."
227
- exit 1
228
- ;;
229
- *)
230
- echo -e "${YELLOW}? Verdict: UNKNOWN (${VERDICT})${NC}"
231
- echo "Could not parse verdict. Allowing commit."
232
- exit 0
233
- ;;
234
- esac
235
-
@@ -1,58 +0,0 @@
1
- #!/bin/bash
2
- ################################################################################
3
- # ESLint Config Sync Check (SessionStart hook)
4
- #
5
- # Checks if .safeword/eslint/eslint-base.mjs matches the frameworks in package.json.
6
- # Alerts user if out of sync (e.g., React added but not in ESLint config).
7
- #
8
- # Usage: Called automatically at Claude Code session start
9
- ################################################################################
10
-
11
- # Quick exit if no eslint config
12
- [ ! -f ".safeword/eslint/eslint-base.mjs" ] && exit 0
13
- [ ! -f "package.json" ] && exit 0
14
-
15
- # Read dependencies
16
- if command -v jq &> /dev/null; then
17
- DEPS=$(jq -r '(.dependencies // {}), (.devDependencies // {}) | keys[]' package.json 2>/dev/null || echo "")
18
- else
19
- DEPS=$(grep -E '"[^"]+"\s*:' package.json | cut -d'"' -f2)
20
- fi
21
-
22
- # Detect what's installed
23
- HAS_TS=false
24
- HAS_REACT=false
25
- HAS_ASTRO=false
26
-
27
- { [ -f "tsconfig.json" ] || echo "$DEPS" | grep -qx "typescript"; } && HAS_TS=true
28
- echo "$DEPS" | grep -qx "react" && HAS_REACT=true
29
- echo "$DEPS" | grep -qx "astro" && HAS_ASTRO=true
30
-
31
- # Check what's in the config
32
- CONFIG_HAS_TS=false
33
- CONFIG_HAS_REACT=false
34
- CONFIG_HAS_ASTRO=false
35
-
36
- grep -q "typescript-eslint" .safeword/eslint/eslint-base.mjs 2>/dev/null && CONFIG_HAS_TS=true
37
- grep -q "@eslint-react" .safeword/eslint/eslint-base.mjs 2>/dev/null && CONFIG_HAS_REACT=true
38
- grep -q "eslint-plugin-astro" .safeword/eslint/eslint-base.mjs 2>/dev/null && CONFIG_HAS_ASTRO=true
39
-
40
- # Build mismatch message
41
- MISMATCHES=""
42
-
43
- [ "$HAS_TS" = true ] && [ "$CONFIG_HAS_TS" = false ] && MISMATCHES+="TypeScript added. "
44
- [ "$HAS_TS" = false ] && [ "$CONFIG_HAS_TS" = true ] && MISMATCHES+="TypeScript removed. "
45
- [ "$HAS_REACT" = true ] && [ "$CONFIG_HAS_REACT" = false ] && MISMATCHES+="React added. "
46
- [ "$HAS_REACT" = false ] && [ "$CONFIG_HAS_REACT" = true ] && MISMATCHES+="React removed. "
47
- [ "$HAS_ASTRO" = true ] && [ "$CONFIG_HAS_ASTRO" = false ] && MISMATCHES+="Astro added. "
48
- [ "$HAS_ASTRO" = false ] && [ "$CONFIG_HAS_ASTRO" = true ] && MISMATCHES+="Astro removed. "
49
-
50
- # Alert if mismatched
51
- if [ -n "$MISMATCHES" ]; then
52
- echo "⚠️ ESLint config out of sync: $MISMATCHES"
53
- echo " Run: bash .safeword/scripts/setup-linting.sh"
54
- echo ""
55
- fi
56
-
57
- exit 0
58
-