@jakkrichm/create-nexus-devflow 2.0.20 → 2.0.22

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 (258) hide show
  1. package/dist/bin/create-nexus-devflow.js +73 -59
  2. package/dist/bin/create-nexus-devflow.js.map +1 -1
  3. package/dist/lib/ui.d.ts +36 -0
  4. package/dist/lib/ui.js +115 -0
  5. package/dist/lib/ui.js.map +1 -0
  6. package/dist/lib/update.js +19 -8
  7. package/dist/lib/update.js.map +1 -1
  8. package/package.json +1 -1
  9. package/template/.agents/skills/00-discover/SKILL.md +28 -116
  10. package/template/.agents/skills/40-execute/SKILL.md +1 -1
  11. package/template/.agents/skills/50-verify/SKILL.md +28 -161
  12. package/template/.agents/skills/60-report/SKILL.md +19 -92
  13. package/template/.agents/skills/70-release/SKILL.md +36 -11
  14. package/template/.agents/skills/check/SKILL.md +19 -7
  15. package/template/.agents/skills/complete/SKILL.md +21 -10
  16. package/template/.claude/skills/00-discover/SKILL.md +28 -116
  17. package/template/.claude/skills/40-execute/SKILL.md +1 -1
  18. package/template/.claude/skills/50-verify/SKILL.md +28 -161
  19. package/template/.claude/skills/60-report/SKILL.md +19 -92
  20. package/template/.claude/skills/70-release/SKILL.md +36 -11
  21. package/template/.claude/skills/check/SKILL.md +19 -7
  22. package/template/.claude/skills/complete/SKILL.md +21 -10
  23. package/template/AGENTS.md +1 -1
  24. package/template/devflow/context/coding-standards.md +40 -29
  25. package/template/.agents/skills/agent/SKILL.md +0 -165
  26. package/template/.agents/skills/api-and-interface-design/SKILL.md +0 -294
  27. package/template/.agents/skills/app-builder/SKILL.md +0 -75
  28. package/template/.agents/skills/app-builder/agent-coordination.md +0 -71
  29. package/template/.agents/skills/app-builder/feature-building.md +0 -53
  30. package/template/.agents/skills/app-builder/project-detection.md +0 -34
  31. package/template/.agents/skills/app-builder/scaffolding.md +0 -118
  32. package/template/.agents/skills/app-builder/tech-stack.md +0 -40
  33. package/template/.agents/skills/app-builder/templates/SKILL.md +0 -39
  34. package/template/.agents/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  35. package/template/.agents/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  36. package/template/.agents/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  37. package/template/.agents/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  38. package/template/.agents/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  39. package/template/.agents/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  40. package/template/.agents/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  41. package/template/.agents/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -122
  42. package/template/.agents/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -122
  43. package/template/.agents/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -169
  44. package/template/.agents/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -134
  45. package/template/.agents/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  46. package/template/.agents/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -119
  47. package/template/.agents/skills/architecture/SKILL.md +0 -55
  48. package/template/.agents/skills/architecture/context-discovery.md +0 -43
  49. package/template/.agents/skills/architecture/examples.md +0 -94
  50. package/template/.agents/skills/architecture/pattern-selection.md +0 -68
  51. package/template/.agents/skills/architecture/patterns-reference.md +0 -50
  52. package/template/.agents/skills/architecture/trade-off-analysis.md +0 -77
  53. package/template/.agents/skills/bash-linux/SKILL.md +0 -199
  54. package/template/.agents/skills/behavioral-modes/SKILL.md +0 -242
  55. package/template/.agents/skills/brainstorm/SKILL.md +0 -168
  56. package/template/.agents/skills/changelog/SKILL.md +0 -109
  57. package/template/.agents/skills/codebase-design/DEEPENING.md +0 -24
  58. package/template/.agents/skills/codebase-design/DESIGN-IT-TWICE.md +0 -28
  59. package/template/.agents/skills/codebase-design/SKILL.md +0 -58
  60. package/template/.agents/skills/commit/SKILL.md +0 -59
  61. package/template/.agents/skills/competitor-analysis/SKILL.md +0 -66
  62. package/template/.agents/skills/context-engineering/SKILL.md +0 -290
  63. package/template/.agents/skills/database-design/SKILL.md +0 -52
  64. package/template/.agents/skills/database-design/database-selection.md +0 -43
  65. package/template/.agents/skills/database-design/indexing.md +0 -39
  66. package/template/.agents/skills/database-design/migrations.md +0 -48
  67. package/template/.agents/skills/database-design/optimization.md +0 -36
  68. package/template/.agents/skills/database-design/orm-selection.md +0 -30
  69. package/template/.agents/skills/database-design/schema-design.md +0 -56
  70. package/template/.agents/skills/database-design/scripts/schema_validator.py +0 -172
  71. package/template/.agents/skills/deploy/SKILL.md +0 -63
  72. package/template/.agents/skills/documentation-and-adrs/SKILL.md +0 -278
  73. package/template/.agents/skills/domain-modeling/ADR-FORMAT.md +0 -47
  74. package/template/.agents/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
  75. package/template/.agents/skills/domain-modeling/SKILL.md +0 -74
  76. package/template/.agents/skills/followup/SKILL.md +0 -83
  77. package/template/.agents/skills/frontend-ui-engineering/SKILL.md +0 -326
  78. package/template/.agents/skills/frontend-ui-engineering/accessibility-checklist.md +0 -159
  79. package/template/.agents/skills/goal/SKILL.md +0 -148
  80. package/template/.agents/skills/handoff/SKILL.md +0 -46
  81. package/template/.agents/skills/help/SKILL.md +0 -253
  82. package/template/.agents/skills/i18n-localization/SKILL.md +0 -154
  83. package/template/.agents/skills/i18n-localization/scripts/i18n_checker.py +0 -241
  84. package/template/.agents/skills/insight/SKILL.md +0 -42
  85. package/template/.agents/skills/issue-triage/SKILL.md +0 -115
  86. package/template/.agents/skills/lint-and-validate/SKILL.md +0 -45
  87. package/template/.agents/skills/lint-and-validate/scripts/lint_runner.py +0 -184
  88. package/template/.agents/skills/lint-and-validate/scripts/type_coverage.py +0 -173
  89. package/template/.agents/skills/mcp-builder/SKILL.md +0 -176
  90. package/template/.agents/skills/merge/SKILL.md +0 -76
  91. package/template/.agents/skills/mobile-design/SKILL.md +0 -394
  92. package/template/.agents/skills/mobile-design/decision-trees.md +0 -516
  93. package/template/.agents/skills/mobile-design/mobile-backend.md +0 -491
  94. package/template/.agents/skills/mobile-design/mobile-color-system.md +0 -420
  95. package/template/.agents/skills/mobile-design/mobile-debugging.md +0 -122
  96. package/template/.agents/skills/mobile-design/mobile-design-thinking.md +0 -357
  97. package/template/.agents/skills/mobile-design/mobile-navigation.md +0 -458
  98. package/template/.agents/skills/mobile-design/mobile-performance.md +0 -767
  99. package/template/.agents/skills/mobile-design/mobile-testing.md +0 -356
  100. package/template/.agents/skills/mobile-design/mobile-typography.md +0 -433
  101. package/template/.agents/skills/mobile-design/platform-android.md +0 -666
  102. package/template/.agents/skills/mobile-design/platform-ios.md +0 -561
  103. package/template/.agents/skills/mobile-design/scripts/mobile_audit.py +0 -670
  104. package/template/.agents/skills/mobile-design/touch-psychology.md +0 -537
  105. package/template/.agents/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  106. package/template/.agents/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  107. package/template/.agents/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  108. package/template/.agents/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  109. package/template/.agents/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  110. package/template/.agents/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  111. package/template/.agents/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  112. package/template/.agents/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  113. package/template/.agents/skills/nextjs-react-expert/SKILL.md +0 -286
  114. package/template/.agents/skills/nextjs-react-expert/scripts/convert_rules.py +0 -222
  115. package/template/.agents/skills/nextjs-react-expert/scripts/react_performance_checker.py +0 -252
  116. package/template/.agents/skills/nodejs-best-practices/SKILL.md +0 -333
  117. package/template/.agents/skills/package-json-generator/SKILL.md +0 -60
  118. package/template/.agents/skills/package-json-generator/scripts/generate.js +0 -120
  119. package/template/.agents/skills/package-json-generator/scripts/run.sh +0 -19
  120. package/template/.agents/skills/parallel-agents/SKILL.md +0 -144
  121. package/template/.agents/skills/performance-optimization/SKILL.md +0 -299
  122. package/template/.agents/skills/performance-optimization/performance-checklist.md +0 -113
  123. package/template/.agents/skills/powershell-windows/SKILL.md +0 -167
  124. package/template/.agents/skills/pr/SKILL.md +0 -93
  125. package/template/.agents/skills/prd/SKILL.md +0 -127
  126. package/template/.agents/skills/preview/SKILL.md +0 -42
  127. package/template/.agents/skills/python-patterns/SKILL.md +0 -441
  128. package/template/.agents/skills/research/SKILL.md +0 -143
  129. package/template/.agents/skills/review/SKILL.md +0 -71
  130. package/template/.agents/skills/roadmap-strategy/SKILL.md +0 -94
  131. package/template/.agents/skills/security-review/SKILL.md +0 -63
  132. package/template/.agents/skills/seo-fundamentals/SKILL.md +0 -129
  133. package/template/.agents/skills/seo-fundamentals/scripts/seo_checker.py +0 -219
  134. package/template/.agents/skills/server-management/SKILL.md +0 -161
  135. package/template/.agents/skills/simplify/SKILL.md +0 -70
  136. package/template/.agents/skills/skill-development/SKILL.md +0 -86
  137. package/template/.agents/skills/spec/SKILL.md +0 -39
  138. package/template/.agents/skills/spec-driven-development/SKILL.md +0 -207
  139. package/template/.agents/skills/tailwind-patterns/SKILL.md +0 -269
  140. package/template/.agents/skills/type-design/SKILL.md +0 -84
  141. package/template/.agents/skills/ui-ux-pro-max/SKILL.md +0 -75
  142. package/template/.claude/skills/agent/SKILL.md +0 -165
  143. package/template/.claude/skills/api-and-interface-design/SKILL.md +0 -294
  144. package/template/.claude/skills/app-builder/SKILL.md +0 -75
  145. package/template/.claude/skills/app-builder/agent-coordination.md +0 -71
  146. package/template/.claude/skills/app-builder/feature-building.md +0 -53
  147. package/template/.claude/skills/app-builder/project-detection.md +0 -34
  148. package/template/.claude/skills/app-builder/scaffolding.md +0 -118
  149. package/template/.claude/skills/app-builder/tech-stack.md +0 -40
  150. package/template/.claude/skills/app-builder/templates/SKILL.md +0 -39
  151. package/template/.claude/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  152. package/template/.claude/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  153. package/template/.claude/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  154. package/template/.claude/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  155. package/template/.claude/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  156. package/template/.claude/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  157. package/template/.claude/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  158. package/template/.claude/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -122
  159. package/template/.claude/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -122
  160. package/template/.claude/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -169
  161. package/template/.claude/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -134
  162. package/template/.claude/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  163. package/template/.claude/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -119
  164. package/template/.claude/skills/architecture/SKILL.md +0 -55
  165. package/template/.claude/skills/architecture/context-discovery.md +0 -43
  166. package/template/.claude/skills/architecture/examples.md +0 -94
  167. package/template/.claude/skills/architecture/pattern-selection.md +0 -68
  168. package/template/.claude/skills/architecture/patterns-reference.md +0 -50
  169. package/template/.claude/skills/architecture/trade-off-analysis.md +0 -77
  170. package/template/.claude/skills/bash-linux/SKILL.md +0 -199
  171. package/template/.claude/skills/behavioral-modes/SKILL.md +0 -242
  172. package/template/.claude/skills/brainstorm/SKILL.md +0 -168
  173. package/template/.claude/skills/changelog/SKILL.md +0 -109
  174. package/template/.claude/skills/codebase-design/DEEPENING.md +0 -24
  175. package/template/.claude/skills/codebase-design/DESIGN-IT-TWICE.md +0 -28
  176. package/template/.claude/skills/codebase-design/SKILL.md +0 -58
  177. package/template/.claude/skills/commit/SKILL.md +0 -59
  178. package/template/.claude/skills/competitor-analysis/SKILL.md +0 -66
  179. package/template/.claude/skills/context-engineering/SKILL.md +0 -290
  180. package/template/.claude/skills/database-design/SKILL.md +0 -52
  181. package/template/.claude/skills/database-design/database-selection.md +0 -43
  182. package/template/.claude/skills/database-design/indexing.md +0 -39
  183. package/template/.claude/skills/database-design/migrations.md +0 -48
  184. package/template/.claude/skills/database-design/optimization.md +0 -36
  185. package/template/.claude/skills/database-design/orm-selection.md +0 -30
  186. package/template/.claude/skills/database-design/schema-design.md +0 -56
  187. package/template/.claude/skills/database-design/scripts/schema_validator.py +0 -172
  188. package/template/.claude/skills/deploy/SKILL.md +0 -63
  189. package/template/.claude/skills/documentation-and-adrs/SKILL.md +0 -278
  190. package/template/.claude/skills/domain-modeling/ADR-FORMAT.md +0 -47
  191. package/template/.claude/skills/domain-modeling/CONTEXT-FORMAT.md +0 -60
  192. package/template/.claude/skills/domain-modeling/SKILL.md +0 -74
  193. package/template/.claude/skills/followup/SKILL.md +0 -83
  194. package/template/.claude/skills/frontend-ui-engineering/SKILL.md +0 -326
  195. package/template/.claude/skills/frontend-ui-engineering/accessibility-checklist.md +0 -159
  196. package/template/.claude/skills/goal/SKILL.md +0 -148
  197. package/template/.claude/skills/handoff/SKILL.md +0 -46
  198. package/template/.claude/skills/help/SKILL.md +0 -253
  199. package/template/.claude/skills/i18n-localization/SKILL.md +0 -154
  200. package/template/.claude/skills/i18n-localization/scripts/i18n_checker.py +0 -241
  201. package/template/.claude/skills/insight/SKILL.md +0 -42
  202. package/template/.claude/skills/issue-triage/SKILL.md +0 -115
  203. package/template/.claude/skills/lint-and-validate/SKILL.md +0 -45
  204. package/template/.claude/skills/lint-and-validate/scripts/lint_runner.py +0 -184
  205. package/template/.claude/skills/lint-and-validate/scripts/type_coverage.py +0 -173
  206. package/template/.claude/skills/mcp-builder/SKILL.md +0 -176
  207. package/template/.claude/skills/merge/SKILL.md +0 -76
  208. package/template/.claude/skills/mobile-design/SKILL.md +0 -394
  209. package/template/.claude/skills/mobile-design/decision-trees.md +0 -516
  210. package/template/.claude/skills/mobile-design/mobile-backend.md +0 -491
  211. package/template/.claude/skills/mobile-design/mobile-color-system.md +0 -420
  212. package/template/.claude/skills/mobile-design/mobile-debugging.md +0 -122
  213. package/template/.claude/skills/mobile-design/mobile-design-thinking.md +0 -357
  214. package/template/.claude/skills/mobile-design/mobile-navigation.md +0 -458
  215. package/template/.claude/skills/mobile-design/mobile-performance.md +0 -767
  216. package/template/.claude/skills/mobile-design/mobile-testing.md +0 -356
  217. package/template/.claude/skills/mobile-design/mobile-typography.md +0 -433
  218. package/template/.claude/skills/mobile-design/platform-android.md +0 -666
  219. package/template/.claude/skills/mobile-design/platform-ios.md +0 -561
  220. package/template/.claude/skills/mobile-design/scripts/mobile_audit.py +0 -670
  221. package/template/.claude/skills/mobile-design/touch-psychology.md +0 -537
  222. package/template/.claude/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  223. package/template/.claude/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  224. package/template/.claude/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  225. package/template/.claude/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  226. package/template/.claude/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  227. package/template/.claude/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  228. package/template/.claude/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  229. package/template/.claude/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  230. package/template/.claude/skills/nextjs-react-expert/SKILL.md +0 -286
  231. package/template/.claude/skills/nextjs-react-expert/scripts/convert_rules.py +0 -222
  232. package/template/.claude/skills/nextjs-react-expert/scripts/react_performance_checker.py +0 -252
  233. package/template/.claude/skills/nodejs-best-practices/SKILL.md +0 -333
  234. package/template/.claude/skills/package-json-generator/SKILL.md +0 -60
  235. package/template/.claude/skills/package-json-generator/scripts/generate.js +0 -120
  236. package/template/.claude/skills/package-json-generator/scripts/run.sh +0 -19
  237. package/template/.claude/skills/parallel-agents/SKILL.md +0 -144
  238. package/template/.claude/skills/performance-optimization/SKILL.md +0 -299
  239. package/template/.claude/skills/performance-optimization/performance-checklist.md +0 -113
  240. package/template/.claude/skills/powershell-windows/SKILL.md +0 -167
  241. package/template/.claude/skills/pr/SKILL.md +0 -93
  242. package/template/.claude/skills/prd/SKILL.md +0 -127
  243. package/template/.claude/skills/preview/SKILL.md +0 -42
  244. package/template/.claude/skills/python-patterns/SKILL.md +0 -441
  245. package/template/.claude/skills/research/SKILL.md +0 -143
  246. package/template/.claude/skills/review/SKILL.md +0 -71
  247. package/template/.claude/skills/roadmap-strategy/SKILL.md +0 -94
  248. package/template/.claude/skills/security-review/SKILL.md +0 -63
  249. package/template/.claude/skills/seo-fundamentals/SKILL.md +0 -129
  250. package/template/.claude/skills/seo-fundamentals/scripts/seo_checker.py +0 -219
  251. package/template/.claude/skills/server-management/SKILL.md +0 -161
  252. package/template/.claude/skills/simplify/SKILL.md +0 -70
  253. package/template/.claude/skills/skill-development/SKILL.md +0 -86
  254. package/template/.claude/skills/spec/SKILL.md +0 -39
  255. package/template/.claude/skills/spec-driven-development/SKILL.md +0 -207
  256. package/template/.claude/skills/tailwind-patterns/SKILL.md +0 -269
  257. package/template/.claude/skills/type-design/SKILL.md +0 -84
  258. 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()