@jakkrichm/create-nexus-devflow 2.0.20 → 2.0.21

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 (253) hide show
  1. package/dist/lib/update.js +19 -8
  2. package/dist/lib/update.js.map +1 -1
  3. package/package.json +1 -1
  4. package/template/.agents/skills/00-discover/SKILL.md +28 -116
  5. package/template/.agents/skills/40-execute/SKILL.md +1 -1
  6. package/template/.agents/skills/50-verify/SKILL.md +28 -161
  7. package/template/.agents/skills/60-report/SKILL.md +19 -92
  8. package/template/.agents/skills/70-release/SKILL.md +36 -11
  9. package/template/.agents/skills/check/SKILL.md +19 -7
  10. package/template/.agents/skills/complete/SKILL.md +21 -10
  11. package/template/.claude/skills/00-discover/SKILL.md +28 -116
  12. package/template/.claude/skills/40-execute/SKILL.md +1 -1
  13. package/template/.claude/skills/50-verify/SKILL.md +28 -161
  14. package/template/.claude/skills/60-report/SKILL.md +19 -92
  15. package/template/.claude/skills/70-release/SKILL.md +36 -11
  16. package/template/.claude/skills/check/SKILL.md +19 -7
  17. package/template/.claude/skills/complete/SKILL.md +21 -10
  18. package/template/AGENTS.md +1 -1
  19. package/template/devflow/context/coding-standards.md +40 -29
  20. package/template/.agents/skills/agent/SKILL.md +0 -165
  21. package/template/.agents/skills/api-and-interface-design/SKILL.md +0 -294
  22. package/template/.agents/skills/app-builder/SKILL.md +0 -75
  23. package/template/.agents/skills/app-builder/agent-coordination.md +0 -71
  24. package/template/.agents/skills/app-builder/feature-building.md +0 -53
  25. package/template/.agents/skills/app-builder/project-detection.md +0 -34
  26. package/template/.agents/skills/app-builder/scaffolding.md +0 -118
  27. package/template/.agents/skills/app-builder/tech-stack.md +0 -40
  28. package/template/.agents/skills/app-builder/templates/SKILL.md +0 -39
  29. package/template/.agents/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  30. package/template/.agents/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  31. package/template/.agents/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  32. package/template/.agents/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  33. package/template/.agents/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  34. package/template/.agents/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  35. package/template/.agents/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  36. package/template/.agents/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -122
  37. package/template/.agents/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -122
  38. package/template/.agents/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -169
  39. package/template/.agents/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -134
  40. package/template/.agents/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  41. package/template/.agents/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -119
  42. package/template/.agents/skills/architecture/SKILL.md +0 -55
  43. package/template/.agents/skills/architecture/context-discovery.md +0 -43
  44. package/template/.agents/skills/architecture/examples.md +0 -94
  45. package/template/.agents/skills/architecture/pattern-selection.md +0 -68
  46. package/template/.agents/skills/architecture/patterns-reference.md +0 -50
  47. package/template/.agents/skills/architecture/trade-off-analysis.md +0 -77
  48. package/template/.agents/skills/bash-linux/SKILL.md +0 -199
  49. package/template/.agents/skills/behavioral-modes/SKILL.md +0 -242
  50. package/template/.agents/skills/brainstorm/SKILL.md +0 -168
  51. package/template/.agents/skills/changelog/SKILL.md +0 -109
  52. package/template/.agents/skills/codebase-design/DEEPENING.md +0 -24
  53. package/template/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +0 -28
  54. package/template/.agents/skills/codebase-design/SKILL.md +0 -58
  55. package/template/.agents/skills/commit/SKILL.md +0 -59
  56. package/template/.agents/skills/competitor-analysis/SKILL.md +0 -66
  57. package/template/.agents/skills/context-engineering/SKILL.md +0 -290
  58. package/template/.agents/skills/database-design/SKILL.md +0 -52
  59. package/template/.agents/skills/database-design/database-selection.md +0 -43
  60. package/template/.agents/skills/database-design/indexing.md +0 -39
  61. package/template/.agents/skills/database-design/migrations.md +0 -48
  62. package/template/.agents/skills/database-design/optimization.md +0 -36
  63. package/template/.agents/skills/database-design/orm-selection.md +0 -30
  64. package/template/.agents/skills/database-design/schema-design.md +0 -56
  65. package/template/.agents/skills/database-design/scripts/schema_validator.py +0 -172
  66. package/template/.agents/skills/deploy/SKILL.md +0 -63
  67. package/template/.agents/skills/documentation-and-adrs/SKILL.md +0 -278
  68. package/template/.agents/skills/domain-modeling/ADR-FORMAT.md +0 -47
  69. package/template/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
  70. package/template/.agents/skills/domain-modeling/SKILL.md +0 -74
  71. package/template/.agents/skills/followup/SKILL.md +0 -83
  72. package/template/.agents/skills/frontend-ui-engineering/SKILL.md +0 -326
  73. package/template/.agents/skills/frontend-ui-engineering/accessibility-checklist.md +0 -159
  74. package/template/.agents/skills/goal/SKILL.md +0 -148
  75. package/template/.agents/skills/handoff/SKILL.md +0 -46
  76. package/template/.agents/skills/help/SKILL.md +0 -253
  77. package/template/.agents/skills/i18n-localization/SKILL.md +0 -154
  78. package/template/.agents/skills/i18n-localization/scripts/i18n_checker.py +0 -241
  79. package/template/.agents/skills/insight/SKILL.md +0 -42
  80. package/template/.agents/skills/issue-triage/SKILL.md +0 -115
  81. package/template/.agents/skills/lint-and-validate/SKILL.md +0 -45
  82. package/template/.agents/skills/lint-and-validate/scripts/lint_runner.py +0 -184
  83. package/template/.agents/skills/lint-and-validate/scripts/type_coverage.py +0 -173
  84. package/template/.agents/skills/mcp-builder/SKILL.md +0 -176
  85. package/template/.agents/skills/merge/SKILL.md +0 -76
  86. package/template/.agents/skills/mobile-design/SKILL.md +0 -394
  87. package/template/.agents/skills/mobile-design/decision-trees.md +0 -516
  88. package/template/.agents/skills/mobile-design/mobile-backend.md +0 -491
  89. package/template/.agents/skills/mobile-design/mobile-color-system.md +0 -420
  90. package/template/.agents/skills/mobile-design/mobile-debugging.md +0 -122
  91. package/template/.agents/skills/mobile-design/mobile-design-thinking.md +0 -357
  92. package/template/.agents/skills/mobile-design/mobile-navigation.md +0 -458
  93. package/template/.agents/skills/mobile-design/mobile-performance.md +0 -767
  94. package/template/.agents/skills/mobile-design/mobile-testing.md +0 -356
  95. package/template/.agents/skills/mobile-design/mobile-typography.md +0 -433
  96. package/template/.agents/skills/mobile-design/platform-android.md +0 -666
  97. package/template/.agents/skills/mobile-design/platform-ios.md +0 -561
  98. package/template/.agents/skills/mobile-design/scripts/mobile_audit.py +0 -670
  99. package/template/.agents/skills/mobile-design/touch-psychology.md +0 -537
  100. package/template/.agents/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  101. package/template/.agents/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  102. package/template/.agents/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  103. package/template/.agents/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  104. package/template/.agents/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  105. package/template/.agents/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  106. package/template/.agents/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  107. package/template/.agents/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  108. package/template/.agents/skills/nextjs-react-expert/SKILL.md +0 -286
  109. package/template/.agents/skills/nextjs-react-expert/scripts/convert_rules.py +0 -222
  110. package/template/.agents/skills/nextjs-react-expert/scripts/react_performance_checker.py +0 -252
  111. package/template/.agents/skills/nodejs-best-practices/SKILL.md +0 -333
  112. package/template/.agents/skills/package-json-generator/SKILL.md +0 -60
  113. package/template/.agents/skills/package-json-generator/scripts/generate.js +0 -120
  114. package/template/.agents/skills/package-json-generator/scripts/run.sh +0 -19
  115. package/template/.agents/skills/parallel-agents/SKILL.md +0 -144
  116. package/template/.agents/skills/performance-optimization/SKILL.md +0 -299
  117. package/template/.agents/skills/performance-optimization/performance-checklist.md +0 -113
  118. package/template/.agents/skills/powershell-windows/SKILL.md +0 -167
  119. package/template/.agents/skills/pr/SKILL.md +0 -93
  120. package/template/.agents/skills/prd/SKILL.md +0 -127
  121. package/template/.agents/skills/preview/SKILL.md +0 -42
  122. package/template/.agents/skills/python-patterns/SKILL.md +0 -441
  123. package/template/.agents/skills/research/SKILL.md +0 -143
  124. package/template/.agents/skills/review/SKILL.md +0 -71
  125. package/template/.agents/skills/roadmap-strategy/SKILL.md +0 -94
  126. package/template/.agents/skills/security-review/SKILL.md +0 -63
  127. package/template/.agents/skills/seo-fundamentals/SKILL.md +0 -129
  128. package/template/.agents/skills/seo-fundamentals/scripts/seo_checker.py +0 -219
  129. package/template/.agents/skills/server-management/SKILL.md +0 -161
  130. package/template/.agents/skills/simplify/SKILL.md +0 -70
  131. package/template/.agents/skills/skill-development/SKILL.md +0 -86
  132. package/template/.agents/skills/spec/SKILL.md +0 -39
  133. package/template/.agents/skills/spec-driven-development/SKILL.md +0 -207
  134. package/template/.agents/skills/tailwind-patterns/SKILL.md +0 -269
  135. package/template/.agents/skills/type-design/SKILL.md +0 -84
  136. package/template/.agents/skills/ui-ux-pro-max/SKILL.md +0 -75
  137. package/template/.claude/skills/agent/SKILL.md +0 -165
  138. package/template/.claude/skills/api-and-interface-design/SKILL.md +0 -294
  139. package/template/.claude/skills/app-builder/SKILL.md +0 -75
  140. package/template/.claude/skills/app-builder/agent-coordination.md +0 -71
  141. package/template/.claude/skills/app-builder/feature-building.md +0 -53
  142. package/template/.claude/skills/app-builder/project-detection.md +0 -34
  143. package/template/.claude/skills/app-builder/scaffolding.md +0 -118
  144. package/template/.claude/skills/app-builder/tech-stack.md +0 -40
  145. package/template/.claude/skills/app-builder/templates/SKILL.md +0 -39
  146. package/template/.claude/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  147. package/template/.claude/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  148. package/template/.claude/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  149. package/template/.claude/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  150. package/template/.claude/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  151. package/template/.claude/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  152. package/template/.claude/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  153. package/template/.claude/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -122
  154. package/template/.claude/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -122
  155. package/template/.claude/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -169
  156. package/template/.claude/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -134
  157. package/template/.claude/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  158. package/template/.claude/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -119
  159. package/template/.claude/skills/architecture/SKILL.md +0 -55
  160. package/template/.claude/skills/architecture/context-discovery.md +0 -43
  161. package/template/.claude/skills/architecture/examples.md +0 -94
  162. package/template/.claude/skills/architecture/pattern-selection.md +0 -68
  163. package/template/.claude/skills/architecture/patterns-reference.md +0 -50
  164. package/template/.claude/skills/architecture/trade-off-analysis.md +0 -77
  165. package/template/.claude/skills/bash-linux/SKILL.md +0 -199
  166. package/template/.claude/skills/behavioral-modes/SKILL.md +0 -242
  167. package/template/.claude/skills/brainstorm/SKILL.md +0 -168
  168. package/template/.claude/skills/changelog/SKILL.md +0 -109
  169. package/template/.claude/skills/codebase-design/DEEPENING.md +0 -24
  170. package/template/.claude/skills/codebase-design/DESIGN-IT-TWICE.md +0 -28
  171. package/template/.claude/skills/codebase-design/SKILL.md +0 -58
  172. package/template/.claude/skills/commit/SKILL.md +0 -59
  173. package/template/.claude/skills/competitor-analysis/SKILL.md +0 -66
  174. package/template/.claude/skills/context-engineering/SKILL.md +0 -290
  175. package/template/.claude/skills/database-design/SKILL.md +0 -52
  176. package/template/.claude/skills/database-design/database-selection.md +0 -43
  177. package/template/.claude/skills/database-design/indexing.md +0 -39
  178. package/template/.claude/skills/database-design/migrations.md +0 -48
  179. package/template/.claude/skills/database-design/optimization.md +0 -36
  180. package/template/.claude/skills/database-design/orm-selection.md +0 -30
  181. package/template/.claude/skills/database-design/schema-design.md +0 -56
  182. package/template/.claude/skills/database-design/scripts/schema_validator.py +0 -172
  183. package/template/.claude/skills/deploy/SKILL.md +0 -63
  184. package/template/.claude/skills/documentation-and-adrs/SKILL.md +0 -278
  185. package/template/.claude/skills/domain-modeling/ADR-FORMAT.md +0 -47
  186. package/template/.claude/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
  187. package/template/.claude/skills/domain-modeling/SKILL.md +0 -74
  188. package/template/.claude/skills/followup/SKILL.md +0 -83
  189. package/template/.claude/skills/frontend-ui-engineering/SKILL.md +0 -326
  190. package/template/.claude/skills/frontend-ui-engineering/accessibility-checklist.md +0 -159
  191. package/template/.claude/skills/goal/SKILL.md +0 -148
  192. package/template/.claude/skills/handoff/SKILL.md +0 -46
  193. package/template/.claude/skills/help/SKILL.md +0 -253
  194. package/template/.claude/skills/i18n-localization/SKILL.md +0 -154
  195. package/template/.claude/skills/i18n-localization/scripts/i18n_checker.py +0 -241
  196. package/template/.claude/skills/insight/SKILL.md +0 -42
  197. package/template/.claude/skills/issue-triage/SKILL.md +0 -115
  198. package/template/.claude/skills/lint-and-validate/SKILL.md +0 -45
  199. package/template/.claude/skills/lint-and-validate/scripts/lint_runner.py +0 -184
  200. package/template/.claude/skills/lint-and-validate/scripts/type_coverage.py +0 -173
  201. package/template/.claude/skills/mcp-builder/SKILL.md +0 -176
  202. package/template/.claude/skills/merge/SKILL.md +0 -76
  203. package/template/.claude/skills/mobile-design/SKILL.md +0 -394
  204. package/template/.claude/skills/mobile-design/decision-trees.md +0 -516
  205. package/template/.claude/skills/mobile-design/mobile-backend.md +0 -491
  206. package/template/.claude/skills/mobile-design/mobile-color-system.md +0 -420
  207. package/template/.claude/skills/mobile-design/mobile-debugging.md +0 -122
  208. package/template/.claude/skills/mobile-design/mobile-design-thinking.md +0 -357
  209. package/template/.claude/skills/mobile-design/mobile-navigation.md +0 -458
  210. package/template/.claude/skills/mobile-design/mobile-performance.md +0 -767
  211. package/template/.claude/skills/mobile-design/mobile-testing.md +0 -356
  212. package/template/.claude/skills/mobile-design/mobile-typography.md +0 -433
  213. package/template/.claude/skills/mobile-design/platform-android.md +0 -666
  214. package/template/.claude/skills/mobile-design/platform-ios.md +0 -561
  215. package/template/.claude/skills/mobile-design/scripts/mobile_audit.py +0 -670
  216. package/template/.claude/skills/mobile-design/touch-psychology.md +0 -537
  217. package/template/.claude/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  218. package/template/.claude/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  219. package/template/.claude/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  220. package/template/.claude/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  221. package/template/.claude/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  222. package/template/.claude/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  223. package/template/.claude/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  224. package/template/.claude/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  225. package/template/.claude/skills/nextjs-react-expert/SKILL.md +0 -286
  226. package/template/.claude/skills/nextjs-react-expert/scripts/convert_rules.py +0 -222
  227. package/template/.claude/skills/nextjs-react-expert/scripts/react_performance_checker.py +0 -252
  228. package/template/.claude/skills/nodejs-best-practices/SKILL.md +0 -333
  229. package/template/.claude/skills/package-json-generator/SKILL.md +0 -60
  230. package/template/.claude/skills/package-json-generator/scripts/generate.js +0 -120
  231. package/template/.claude/skills/package-json-generator/scripts/run.sh +0 -19
  232. package/template/.claude/skills/parallel-agents/SKILL.md +0 -144
  233. package/template/.claude/skills/performance-optimization/SKILL.md +0 -299
  234. package/template/.claude/skills/performance-optimization/performance-checklist.md +0 -113
  235. package/template/.claude/skills/powershell-windows/SKILL.md +0 -167
  236. package/template/.claude/skills/pr/SKILL.md +0 -93
  237. package/template/.claude/skills/prd/SKILL.md +0 -127
  238. package/template/.claude/skills/preview/SKILL.md +0 -42
  239. package/template/.claude/skills/python-patterns/SKILL.md +0 -441
  240. package/template/.claude/skills/research/SKILL.md +0 -143
  241. package/template/.claude/skills/review/SKILL.md +0 -71
  242. package/template/.claude/skills/roadmap-strategy/SKILL.md +0 -94
  243. package/template/.claude/skills/security-review/SKILL.md +0 -63
  244. package/template/.claude/skills/seo-fundamentals/SKILL.md +0 -129
  245. package/template/.claude/skills/seo-fundamentals/scripts/seo_checker.py +0 -219
  246. package/template/.claude/skills/server-management/SKILL.md +0 -161
  247. package/template/.claude/skills/simplify/SKILL.md +0 -70
  248. package/template/.claude/skills/skill-development/SKILL.md +0 -86
  249. package/template/.claude/skills/spec/SKILL.md +0 -39
  250. package/template/.claude/skills/spec-driven-development/SKILL.md +0 -207
  251. package/template/.claude/skills/tailwind-patterns/SKILL.md +0 -269
  252. package/template/.claude/skills/type-design/SKILL.md +0 -84
  253. package/template/.claude/skills/ui-ux-pro-max/SKILL.md +0 -75
@@ -1,241 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- i18n Checker - Detects hardcoded strings and missing translations.
4
- Scans for untranslated text in React, Vue, and Python files.
5
- """
6
- import sys
7
- import re
8
- import json
9
- from pathlib import Path
10
-
11
- # Fix Windows console encoding for Unicode output
12
- try:
13
- sys.stdout.reconfigure(encoding='utf-8', errors='replace')
14
- sys.stderr.reconfigure(encoding='utf-8', errors='replace')
15
- except AttributeError:
16
- pass # Python < 3.7
17
-
18
- # Patterns that indicate hardcoded strings (should be translated)
19
- HARDCODED_PATTERNS = {
20
- 'jsx': [
21
- # Text directly in JSX: <div>Hello World</div>
22
- r'>\s*[A-Z][a-zA-Z\s]{3,30}\s*</',
23
- # JSX attribute strings: title="Welcome"
24
- r'(title|placeholder|label|alt|aria-label)="[A-Z][a-zA-Z\s]{2,}"',
25
- # Button/heading text
26
- r'<(button|h[1-6]|p|span|label)[^>]*>\s*[A-Z][a-zA-Z\s!?.,]{3,}\s*</',
27
- ],
28
- 'vue': [
29
- # Vue template text
30
- r'>\s*[A-Z][a-zA-Z\s]{3,30}\s*</',
31
- r'(placeholder|label|title)="[A-Z][a-zA-Z\s]{2,}"',
32
- ],
33
- 'python': [
34
- # print/raise with string literals
35
- r'(print|raise\s+\w+)\s*\(\s*["\'][A-Z][^"\']{5,}["\']',
36
- # Flask flash messages
37
- r'flash\s*\(\s*["\'][A-Z][^"\']{5,}["\']',
38
- ]
39
- }
40
-
41
- # Patterns that indicate proper i18n usage
42
- I18N_PATTERNS = [
43
- r't\(["\']', # t('key') - react-i18next
44
- r'useTranslation', # React hook
45
- r'\$t\(', # Vue i18n
46
- r'_\(["\']', # Python gettext
47
- r'gettext\(', # Python gettext
48
- r'useTranslations', # next-intl
49
- r'FormattedMessage', # react-intl
50
- r'i18n\.', # Generic i18n
51
- ]
52
-
53
- def find_locale_files(project_path: Path) -> list:
54
- """Find translation/locale files."""
55
- patterns = [
56
- "**/locales/**/*.json",
57
- "**/translations/**/*.json",
58
- "**/lang/**/*.json",
59
- "**/i18n/**/*.json",
60
- "**/messages/*.json",
61
- "**/*.po", # gettext
62
- ]
63
-
64
- files = []
65
- for pattern in patterns:
66
- files.extend(project_path.glob(pattern))
67
-
68
- return [f for f in files if 'node_modules' not in str(f)]
69
-
70
- def check_locale_completeness(locale_files: list) -> dict:
71
- """Check if all locales have the same keys."""
72
- issues = []
73
- passed = []
74
-
75
- if not locale_files:
76
- return {'passed': [], 'issues': ["[!] No locale files found"]}
77
-
78
- # Group by parent folder (language)
79
- locales = {}
80
- for f in locale_files:
81
- if f.suffix == '.json':
82
- try:
83
- lang = f.parent.name
84
- content = json.loads(f.read_text(encoding='utf-8'))
85
- if lang not in locales:
86
- locales[lang] = {}
87
- locales[lang][f.stem] = set(flatten_keys(content))
88
- except:
89
- continue
90
-
91
- if len(locales) < 2:
92
- passed.append(f"[OK] Found {len(locale_files)} locale file(s)")
93
- return {'passed': passed, 'issues': issues}
94
-
95
- passed.append(f"[OK] Found {len(locales)} language(s): {', '.join(locales.keys())}")
96
-
97
- # Compare keys across locales
98
- all_langs = list(locales.keys())
99
- base_lang = all_langs[0]
100
-
101
- for namespace in locales.get(base_lang, {}):
102
- base_keys = locales[base_lang].get(namespace, set())
103
-
104
- for lang in all_langs[1:]:
105
- other_keys = locales.get(lang, {}).get(namespace, set())
106
-
107
- missing = base_keys - other_keys
108
- if missing:
109
- issues.append(f"[X] {lang}/{namespace}: Missing {len(missing)} keys")
110
-
111
- extra = other_keys - base_keys
112
- if extra:
113
- issues.append(f"[!] {lang}/{namespace}: {len(extra)} extra keys")
114
-
115
- if not issues:
116
- passed.append("[OK] All locales have matching keys")
117
-
118
- return {'passed': passed, 'issues': issues}
119
-
120
- def flatten_keys(d, prefix=''):
121
- """Flatten nested dict keys."""
122
- keys = set()
123
- for k, v in d.items():
124
- new_key = f"{prefix}.{k}" if prefix else k
125
- if isinstance(v, dict):
126
- keys.update(flatten_keys(v, new_key))
127
- else:
128
- keys.add(new_key)
129
- return keys
130
-
131
- def check_hardcoded_strings(project_path: Path) -> dict:
132
- """Check for hardcoded strings in code files."""
133
- issues = []
134
- passed = []
135
-
136
- # Find code files
137
- extensions = {
138
- '.tsx': 'jsx', '.jsx': 'jsx', '.ts': 'jsx', '.js': 'jsx',
139
- '.vue': 'vue',
140
- '.py': 'python'
141
- }
142
-
143
- code_files = []
144
- for ext in extensions:
145
- code_files.extend(project_path.rglob(f"*{ext}"))
146
-
147
- code_files = [f for f in code_files if not any(x in str(f) for x in
148
- ['node_modules', '.git', 'dist', 'build', '__pycache__', 'venv', 'test', 'spec'])]
149
-
150
- if not code_files:
151
- return {'passed': ["[!] No code files found"], 'issues': []}
152
-
153
- files_with_i18n = 0
154
- files_with_hardcoded = 0
155
- hardcoded_examples = []
156
-
157
- for file_path in code_files[:50]: # Limit
158
- try:
159
- content = file_path.read_text(encoding='utf-8', errors='ignore')
160
- ext = file_path.suffix
161
- file_type = extensions.get(ext, 'jsx')
162
-
163
- # Check for i18n usage
164
- has_i18n = any(re.search(p, content) for p in I18N_PATTERNS)
165
- if has_i18n:
166
- files_with_i18n += 1
167
-
168
- # Check for hardcoded strings
169
- patterns = HARDCODED_PATTERNS.get(file_type, [])
170
- hardcoded_found = False
171
-
172
- for pattern in patterns:
173
- matches = re.findall(pattern, content)
174
- if matches and not has_i18n:
175
- hardcoded_found = True
176
- if len(hardcoded_examples) < 5:
177
- hardcoded_examples.append(f"{file_path.name}: {str(matches[0])[:40]}...")
178
-
179
- if hardcoded_found:
180
- files_with_hardcoded += 1
181
-
182
- except:
183
- continue
184
-
185
- passed.append(f"[OK] Analyzed {len(code_files)} code files")
186
-
187
- if files_with_i18n > 0:
188
- passed.append(f"[OK] {files_with_i18n} files use i18n")
189
-
190
- if files_with_hardcoded > 0:
191
- issues.append(f"[X] {files_with_hardcoded} files may have hardcoded strings")
192
- for ex in hardcoded_examples:
193
- issues.append(f" → {ex}")
194
- else:
195
- passed.append("[OK] No obvious hardcoded strings detected")
196
-
197
- return {'passed': passed, 'issues': issues}
198
-
199
- def main():
200
- target = sys.argv[1] if len(sys.argv) > 1 else "."
201
- project_path = Path(target)
202
-
203
- print("\n" + "=" * 60)
204
- print(" i18n CHECKER - Internationalization Audit")
205
- print("=" * 60 + "\n")
206
-
207
- # Check locale files
208
- locale_files = find_locale_files(project_path)
209
- locale_result = check_locale_completeness(locale_files)
210
-
211
- # Check hardcoded strings
212
- code_result = check_hardcoded_strings(project_path)
213
-
214
- # Print results
215
- print("[LOCALE FILES]")
216
- print("-" * 40)
217
- for item in locale_result['passed']:
218
- print(f" {item}")
219
- for item in locale_result['issues']:
220
- print(f" {item}")
221
-
222
- print("\n[CODE ANALYSIS]")
223
- print("-" * 40)
224
- for item in code_result['passed']:
225
- print(f" {item}")
226
- for item in code_result['issues']:
227
- print(f" {item}")
228
-
229
- # Summary
230
- critical_issues = sum(1 for i in locale_result['issues'] + code_result['issues'] if i.startswith("[X]"))
231
-
232
- print("\n" + "=" * 60)
233
- if critical_issues == 0:
234
- print("[OK] i18n CHECK: PASSED")
235
- sys.exit(0)
236
- else:
237
- print(f"[X] i18n CHECK: {critical_issues} issues found")
238
- sys.exit(1)
239
-
240
- if __name__ == "__main__":
241
- main()
@@ -1,42 +0,0 @@
1
- ---
2
- name: insight
3
- description: "[Devflow] Extract reusable lessons, patterns, file insights, and post-mortem learning from completed work."
4
- ---
5
-
6
- # Insight Extraction & Post-Mortem Learning
7
-
8
- ## Overview
9
-
10
- This is the insight and knowledge extraction master skill for Nexus-DevFlow. It captures reusable engineering lessons, architectural patterns, gotchas, post-mortem incident analyses, and token-efficiency notes from completed implementation and verification work.
11
-
12
- **9arm Post-Mortem Pattern**:
13
- ```text
14
- What Broke ➔ Business Impact ➔ Root Cause ➔ Fix Evidence ➔ Prevention & Guardrails
15
- ```
16
-
17
- ---
18
-
19
- ## 1. Types of Knowledge Extracted
20
-
21
- 1. **Architectural Patterns**: Reusable structural patterns, data transformations, or component designs.
22
- 2. **Gotchas & Hidden Invariants**: Subtle platform bugs, async timing issues, ORM quirks, or browser edge cases.
23
- 3. **Incident Post-Mortems**: Rigorous root cause analysis and why tests/checks failed to catch the bug initially.
24
- 4. **Context & Token Optimization**: Notes on avoidable context reading or redundant artifact parsing.
25
-
26
- ---
27
-
28
- ## 2. Process & Recording Destinations
29
-
30
- 1. **Load Evidence**: Review `git diff`, `40-execute.md`, `50-verify.md`, or test logs.
31
- 2. **Distill Insights**: Formulate clear, actionable, non-generic takeaways.
32
- 3. **Save to Persistent Memory**:
33
- - Save project-wide engineering lessons to `devflow/context/lessons.md` (or `knowledge/lessons.md`).
34
- - Feed run-specific learnings into `60-report.md` and `70-release.md`.
35
-
36
- ---
37
-
38
- ## Relationship To DevFlow 2.0
39
-
40
- - **Classification**: Companion command & Continuous learning
41
- - **Mainline integration**: Invoked after `50-verify` or `60-report`.
42
- - **Handoff**: `60-report`, `70-release`
@@ -1,115 +0,0 @@
1
- ---
2
- name: issue-triage
3
- description: "[Devflow] Intake, categorize, and prioritize incoming issues and bug reports before delivery commitment."
4
- ---
5
-
6
- ---
7
- description: Issue Triage Addon - Analyze GitHub issues, detect duplicates or spam, and route actionable work into DevFlow workflows.
8
- ---
9
-
10
- # Phase 57: Issue Triage Addon
11
-
12
- ## Target: $ARGUMENTS
13
-
14
- Use this workflow to evaluate GitHub issues, bug reports, feature requests, support requests, duplicates, or noisy reports before creating or resuming work.
15
- Use `triage` as the support skill for classification, verification, and agent-ready briefs. Use `to-issues` only when a stable spec or PRD must be packaged into vertical slices.
16
-
17
- ## Prompt Sources
18
-
19
- Adapted from:
20
-
21
- - `github/issue_analyzer.md`
22
- - `github/issue_triager.md`
23
- - `github/duplicate_detector.md`
24
- - `github/spam_detector.md`
25
- - `github/pr_ai_triage.md`
26
-
27
- ## Process
28
-
29
- ### 1. Read Issue Context
30
-
31
- Collect:
32
-
33
- - issue title and body
34
- - comments and maintainer notes
35
- - labels and linked PRs
36
- - reproduction steps
37
- - affected versions or environment
38
- - related files, logs, screenshots, or references
39
-
40
- ### 2. Triage
41
-
42
- Classify the issue:
43
-
44
- - bug
45
- - feature request
46
- - documentation request
47
- - question or support
48
- - duplicate
49
- - spam or noise
50
- - needs more information
51
-
52
- Assess:
53
-
54
- - severity
55
- - user impact
56
- - reproducibility
57
- - affected area
58
- - confidence
59
-
60
- Separate:
61
-
62
- - what is already evidenced
63
- - what is inferred
64
- - what still needs proof
65
-
66
- ### 3. Create Issue Triage Report
67
-
68
- - **MANDATORY:** Before generating the final report, inspect `.agent/resources/schemas/triage.template.md` for layout, required sections, and format.
69
- - Before reporting completion, run:
70
-
71
- Review `{report_path}` against `triage.template.md`, keep the required headings, and remove placeholder text before completion.
72
-
73
- - Replace any placeholder or template text with concrete issue summary, classification, impact, routing decision, and next command.
74
- - Save the final report to:
75
-
76
- ```text
77
- devflow/issues/{date}-triage-{issue_number}.md
78
- ```
79
-
80
- ### 4. Route
81
-
82
- Use:
83
-
84
- - `Debug` for confirmed bugs needing root cause work
85
- - `Research` or `Spec-Research` for external dependency uncertainty
86
- - `PRD` for product-level feature requests that need problem framing
87
- - `10-define` for actionable work that still needs scope decisions
88
- - `20-spec` for work that is already stable enough to become a delivery contract
89
- - `Help` when the issue is not actionable yet
90
-
91
- ## Output Triage Recommendation
92
-
93
- Return:
94
-
95
- - classification
96
- - duplicate or spam assessment
97
- - confidence level
98
- - recommended route into DevFlow 2.0
99
- - where the report was written
100
-
101
- ## Relationship To DevFlow 2.0
102
-
103
- - Classification: Companion command
104
- - Mainline status: Intake support command, not a numbered stage
105
- - Typical entry points: issue intake before scope or implementation begins
106
- - Typical handoff targets: `Debug`, `PRD`, `10-define`, `Research`, `Help`
107
-
108
- ## Sources
109
-
110
- - `AGENTS.md`
111
- - `.agent/resources/schemas/triage.template.md`
112
- - Related commands: `Debug`, `PRD`, `10-define`, `Research`, `Help`
113
- - Support skills: `triage`, `to-issues`, `domain-modeling`
114
-
115
-
@@ -1,45 +0,0 @@
1
- ---
2
- name: lint-and-validate
3
- description: "[Devflow] Automatic quality control, linting, and static analysis procedures. Use after every code modification to ensure syntax correctness and project standards. Triggers onKeywords: lint, format, check, validate, types, static analysis."
4
- allowed-tools: Read, Glob, Grep, Bash
5
- ---
6
-
7
- # Lint and Validate Skill
8
-
9
- > **MANDATORY:** Run appropriate validation tools after EVERY code change. Do not finish a task until the code is error-free.
10
-
11
- ### Procedures by Ecosystem
12
-
13
- #### Node.js / TypeScript
14
- 1. **Lint/Fix:** `npm run lint` or `npx eslint "path" --fix`
15
- 2. **Types:** `npx tsc --noEmit`
16
- 3. **Security:** `npm audit --audit-level=high`
17
-
18
- #### Python
19
- 1. **Linter (Ruff):** `ruff check "path" --fix` (Fast & Modern)
20
- 2. **Security (Bandit):** `bandit -r "path" -ll`
21
- 3. **Types (MyPy):** `mypy "path"`
22
-
23
- ## The Quality Loop
24
- 1. **Write/Edit Code**
25
- 2. **Run Audit:** `npm run lint && npx tsc --noEmit`
26
- 3. **Analyze Report:** Check the "FINAL AUDIT REPORT" section.
27
- 4. **Fix & Repeat:** Submitting code with "FINAL AUDIT" failures is NOT allowed.
28
-
29
- ## Error Handling
30
- - If `lint` fails: Fix the style or syntax issues immediately.
31
- - If `tsc` fails: Correct type mismatches before proceeding.
32
- - If no tool is configured: Check the project root for `.eslintrc`, `tsconfig.json`, `pyproject.toml` and suggest creating one.
33
-
34
- ---
35
- **Strict Rule:** No code should be committed or reported as "done" without passing these checks.
36
-
37
- ---
38
-
39
- ## Scripts
40
-
41
- | Script | Purpose | Command |
42
- |--------|---------|---------|
43
- | `scripts/lint_runner.py` | Unified lint check | `python scripts/lint_runner.py <project_path>` |
44
- | `scripts/type_coverage.py` | Type coverage analysis | `python scripts/type_coverage.py <project_path>` |
45
-
@@ -1,184 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Lint Runner - Unified linting and type checking
4
- Runs appropriate linters based on project type.
5
-
6
- Usage:
7
- python lint_runner.py <project_path>
8
-
9
- Supports:
10
- - Node.js: npm run lint, npx tsc --noEmit
11
- - Python: ruff check, mypy
12
- """
13
-
14
- import subprocess
15
- import sys
16
- import json
17
- import platform
18
- import shutil
19
- from pathlib import Path
20
- from datetime import datetime
21
-
22
- # Fix Windows console encoding
23
- try:
24
- sys.stdout.reconfigure(encoding='utf-8', errors='replace')
25
- except:
26
- pass
27
-
28
-
29
- def detect_project_type(project_path: Path) -> dict:
30
- """Detect project type and available linters."""
31
- result = {
32
- "type": "unknown",
33
- "linters": []
34
- }
35
-
36
- # Node.js project
37
- package_json = project_path / "package.json"
38
- if package_json.exists():
39
- result["type"] = "node"
40
- try:
41
- pkg = json.loads(package_json.read_text(encoding='utf-8'))
42
- scripts = pkg.get("scripts", {})
43
- deps = {**pkg.get("dependencies", {}), **pkg.get("devDependencies", {})}
44
-
45
- # Check for lint script
46
- if "lint" in scripts:
47
- result["linters"].append({"name": "npm lint", "cmd": ["npm", "run", "lint"]})
48
- elif "eslint" in deps:
49
- result["linters"].append({"name": "eslint", "cmd": ["npx", "eslint", "."]})
50
-
51
- # Check for TypeScript
52
- if "typescript" in deps or (project_path / "tsconfig.json").exists():
53
- result["linters"].append({"name": "tsc", "cmd": ["npx", "tsc", "--noEmit"]})
54
-
55
- except:
56
- pass
57
-
58
- # Python project
59
- if (project_path / "pyproject.toml").exists() or (project_path / "requirements.txt").exists():
60
- result["type"] = "python"
61
-
62
- # Check for ruff
63
- result["linters"].append({"name": "ruff", "cmd": ["ruff", "check", "."]})
64
-
65
- # Check for mypy
66
- if (project_path / "mypy.ini").exists() or (project_path / "pyproject.toml").exists():
67
- result["linters"].append({"name": "mypy", "cmd": ["mypy", "."]})
68
-
69
- return result
70
-
71
-
72
- def run_linter(linter: dict, cwd: Path) -> dict:
73
- """Run a single linter and return results."""
74
- result = {
75
- "name": linter["name"],
76
- "passed": False,
77
- "output": "",
78
- "error": ""
79
- }
80
-
81
- try:
82
- cmd = linter["cmd"]
83
-
84
- # Windows compatibility for npm/npx
85
- if platform.system() == "Windows":
86
- if cmd[0] in ["npm", "npx"]:
87
- # Force .cmd extension on Windows
88
- if not cmd[0].lower().endswith(".cmd"):
89
- cmd[0] = f"{cmd[0]}.cmd"
90
-
91
- proc = subprocess.run(
92
- cmd,
93
- cwd=str(cwd),
94
- capture_output=True,
95
- text=True,
96
- encoding='utf-8',
97
- errors='replace',
98
- timeout=120,
99
- shell=platform.system() == "Windows" # Shell=True often helps with path resolution on Windows
100
- )
101
-
102
- result["output"] = proc.stdout[:2000] if proc.stdout else ""
103
- result["error"] = proc.stderr[:500] if proc.stderr else ""
104
- result["passed"] = proc.returncode == 0
105
-
106
- except FileNotFoundError:
107
- result["error"] = f"Command not found: {linter['cmd'][0]}"
108
- except subprocess.TimeoutExpired:
109
- result["error"] = "Timeout after 120s"
110
- except Exception as e:
111
- result["error"] = str(e)
112
-
113
- return result
114
-
115
-
116
- def main():
117
- project_path = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve()
118
-
119
- print(f"\n{'='*60}")
120
- print(f"[LINT RUNNER] Unified Linting")
121
- print(f"{'='*60}")
122
- print(f"Project: {project_path}")
123
- print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
124
-
125
- # Detect project type
126
- project_info = detect_project_type(project_path)
127
- print(f"Type: {project_info['type']}")
128
- print(f"Linters: {len(project_info['linters'])}")
129
- print("-"*60)
130
-
131
- if not project_info["linters"]:
132
- print("No linters found for this project type.")
133
- output = {
134
- "script": "lint_runner",
135
- "project": str(project_path),
136
- "type": project_info["type"],
137
- "checks": [],
138
- "passed": True,
139
- "message": "No linters configured"
140
- }
141
- print(json.dumps(output, indent=2))
142
- sys.exit(0)
143
-
144
- # Run each linter
145
- results = []
146
- all_passed = True
147
-
148
- for linter in project_info["linters"]:
149
- print(f"\nRunning: {linter['name']}...")
150
- result = run_linter(linter, project_path)
151
- results.append(result)
152
-
153
- if result["passed"]:
154
- print(f" [PASS] {linter['name']}")
155
- else:
156
- print(f" [FAIL] {linter['name']}")
157
- if result["error"]:
158
- print(f" Error: {result['error'][:200]}")
159
- all_passed = False
160
-
161
- # Summary
162
- print("\n" + "="*60)
163
- print("SUMMARY")
164
- print("="*60)
165
-
166
- for r in results:
167
- icon = "[PASS]" if r["passed"] else "[FAIL]"
168
- print(f"{icon} {r['name']}")
169
-
170
- output = {
171
- "script": "lint_runner",
172
- "project": str(project_path),
173
- "type": project_info["type"],
174
- "checks": results,
175
- "passed": all_passed
176
- }
177
-
178
- print("\n" + json.dumps(output, indent=2))
179
-
180
- sys.exit(0 if all_passed else 1)
181
-
182
-
183
- if __name__ == "__main__":
184
- main()