speccrew 0.1.0

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 (153) hide show
  1. package/.speccrew/agents/speccrew-feature-designer.md +142 -0
  2. package/.speccrew/agents/speccrew-product-manager.md +61 -0
  3. package/.speccrew/agents/speccrew-system-designer.md +200 -0
  4. package/.speccrew/agents/speccrew-system-developer.md +238 -0
  5. package/.speccrew/agents/speccrew-task-worker.md +80 -0
  6. package/.speccrew/agents/speccrew-team-leader.md +92 -0
  7. package/.speccrew/agents/speccrew-test-manager.md +313 -0
  8. package/.speccrew/skills/speccrew-create-agents/SKILL.md +98 -0
  9. package/.speccrew/skills/speccrew-create-agents/templates/agents/designer-agent.md +54 -0
  10. package/.speccrew/skills/speccrew-create-agents/templates/agents/dev-agent.md +79 -0
  11. package/.speccrew/skills/speccrew-create-agents/templates/agents/test-agent.md +80 -0
  12. package/.speccrew/skills/speccrew-dev-backend/SKILL.md +205 -0
  13. package/.speccrew/skills/speccrew-dev-backend/templates/TASK-RECORD-TEMPLATE.md +118 -0
  14. package/.speccrew/skills/speccrew-dev-desktop/SKILL.md +258 -0
  15. package/.speccrew/skills/speccrew-dev-desktop/templates/TASK-RECORD-TEMPLATE.md +161 -0
  16. package/.speccrew/skills/speccrew-dev-frontend/SKILL.md +202 -0
  17. package/.speccrew/skills/speccrew-dev-frontend/templates/TASK-RECORD-TEMPLATE.md +115 -0
  18. package/.speccrew/skills/speccrew-dev-mobile/SKILL.md +200 -0
  19. package/.speccrew/skills/speccrew-dev-mobile/templates/TASK-RECORD-TEMPLATE.md +125 -0
  20. package/.speccrew/skills/speccrew-fd-api-contract/SKILL.md +73 -0
  21. package/.speccrew/skills/speccrew-fd-api-contract/templates/API-CONTRACT-TEMPLATE.md +96 -0
  22. package/.speccrew/skills/speccrew-fd-feature-design/SKILL.md +395 -0
  23. package/.speccrew/skills/speccrew-fd-feature-design/templates/FEATURE-SPEC-TEMPLATE.md +387 -0
  24. package/.speccrew/skills/speccrew-get-timestamp/SKILL.md +80 -0
  25. package/.speccrew/skills/speccrew-get-timestamp/scripts/get-timestamp.js +35 -0
  26. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/SKILL.md +1116 -0
  27. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-FASTAPI.md +462 -0
  28. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-JAVA.md +480 -0
  29. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE-NET.md +464 -0
  30. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/FEATURE-DETAIL-TEMPLATE.md +480 -0
  31. package/.speccrew/skills/speccrew-knowledge-bizs-api-analyze/templates/MODULE-OVERVIEW-TEMPLATE.md +367 -0
  32. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/SKILL.md +667 -0
  33. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/STATUS-FORMATS.md +74 -0
  34. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/batch-orchestrator.js +176 -0
  35. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/get-next-batch.js +150 -0
  36. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/get-pending-features.js +106 -0
  37. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/mark-stale.js +249 -0
  38. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/process-batch-results.js +848 -0
  39. package/.speccrew/skills/speccrew-knowledge-bizs-dispatch/scripts/update-feature-status.js +226 -0
  40. package/.speccrew/skills/speccrew-knowledge-bizs-init-features/SKILL.md +264 -0
  41. package/.speccrew/skills/speccrew-knowledge-bizs-init-features/examples/features.json +34 -0
  42. package/.speccrew/skills/speccrew-knowledge-bizs-init-features/scripts/generate-inventory.js +867 -0
  43. package/.speccrew/skills/speccrew-knowledge-bizs-init-features/scripts/test-inventory.js +26 -0
  44. package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/SKILL.md +165 -0
  45. package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/scripts/apply-module-mapping.js +208 -0
  46. package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/scripts/extract-module-summary.js +180 -0
  47. package/.speccrew/skills/speccrew-knowledge-bizs-module-classify/scripts/reindex-modules.js +358 -0
  48. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/SKILL.md +1055 -0
  49. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-DESKTOP.md +303 -0
  50. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-ELECTRON.md +327 -0
  51. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MINIAPP.md +292 -0
  52. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI-MOBILE.md +281 -0
  53. package/.speccrew/skills/speccrew-knowledge-bizs-ui-analyze/templates/FEATURE-DETAIL-TEMPLATE-UI.md +324 -0
  54. package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/SKILL.md +270 -0
  55. package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/templates/COMPONENT-PATTERN-TEMPLATE.md +33 -0
  56. package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/templates/LAYOUT-PATTERN-TEMPLATE.md +33 -0
  57. package/.speccrew/skills/speccrew-knowledge-bizs-ui-style-extract/templates/PAGE-TYPE-TEMPLATE.md +33 -0
  58. package/.speccrew/skills/speccrew-knowledge-graph-query/SKILL.md +229 -0
  59. package/.speccrew/skills/speccrew-knowledge-graph-query/scripts/graph-query.js +549 -0
  60. package/.speccrew/skills/speccrew-knowledge-graph-write/SKILL.md +181 -0
  61. package/.speccrew/skills/speccrew-knowledge-graph-write/scripts/graph-write.js +651 -0
  62. package/.speccrew/skills/speccrew-knowledge-module-summarize/SKILL.md +305 -0
  63. package/.speccrew/skills/speccrew-knowledge-module-summarize/templates/MODULE-OVERVIEW-TEMPLATE.md +400 -0
  64. package/.speccrew/skills/speccrew-knowledge-system-summarize/SKILL.md +351 -0
  65. package/.speccrew/skills/speccrew-knowledge-system-summarize/templates/SYSTEM-OVERVIEW-TEMPLATE.md +294 -0
  66. package/.speccrew/skills/speccrew-knowledge-techs-dispatch/SKILL.md +683 -0
  67. package/.speccrew/skills/speccrew-knowledge-techs-dispatch/STATUS-FORMATS.md +550 -0
  68. package/.speccrew/skills/speccrew-knowledge-techs-dispatch/templates/techs-manifest-EXAMPLE.json +35 -0
  69. package/.speccrew/skills/speccrew-knowledge-techs-generate/SKILL.md +1087 -0
  70. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/ARCHITECTURE-TEMPLATE.md +240 -0
  71. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/COLOR-SYSTEM-TEMPLATE.md +68 -0
  72. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/COMPONENT-LIBRARY-TEMPLATE.md +86 -0
  73. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-BUILD-TEMPLATE.md +466 -0
  74. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-DATA-TEMPLATE.md +432 -0
  75. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-DESIGN-TEMPLATE.md +1209 -0
  76. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-DEV-TEMPLATE.md +1433 -0
  77. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-SYSTEM-TEST-TEMPLATE.md +1052 -0
  78. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/CONVENTIONS-UNIT-TEST-TEMPLATE.md +946 -0
  79. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/INDEX-TEMPLATE.md +29 -0
  80. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/PAGE-LAYOUTS-TEMPLATE.md +69 -0
  81. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/PAGE-TYPE-SUMMARY-TEMPLATE.md +74 -0
  82. package/.speccrew/skills/speccrew-knowledge-techs-generate/templates/TECH-STACK-TEMPLATE.md +232 -0
  83. package/.speccrew/skills/speccrew-knowledge-techs-generate-conventions/SKILL.md +628 -0
  84. package/.speccrew/skills/speccrew-knowledge-techs-generate-ui-style/SKILL.md +392 -0
  85. package/.speccrew/skills/speccrew-knowledge-techs-index/SKILL.md +489 -0
  86. package/.speccrew/skills/speccrew-knowledge-techs-index/templates/INDEX-TEMPLATE.md +243 -0
  87. package/.speccrew/skills/speccrew-knowledge-techs-init/SKILL.md +269 -0
  88. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/SKILL.md +562 -0
  89. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/BUSINESS-COMPONENTS-TEMPLATE.md +171 -0
  90. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/COMMON-COMPONENTS-TEMPLATE.md +177 -0
  91. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/COMPONENT-INDIVIDUAL-TEMPLATE.md +80 -0
  92. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/COMPONENT-LIBRARY-TEMPLATE.md +118 -0
  93. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/LAYOUT-INDIVIDUAL-TEMPLATE.md +97 -0
  94. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/LAYOUT-PATTERNS-TEMPLATE.md +208 -0
  95. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/NAVIGATION-PATTERNS-TEMPLATE.md +157 -0
  96. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/PAGE-TYPE-INDIVIDUAL-TEMPLATE.md +123 -0
  97. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/PAGE-TYPE-SUMMARY-TEMPLATE.md +58 -0
  98. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/SPACING-TEMPLATE.md +119 -0
  99. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/STYLE-SYSTEM-TEMPLATE.md +117 -0
  100. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/TYPOGRAPHY-TEMPLATE.md +107 -0
  101. package/.speccrew/skills/speccrew-knowledge-techs-ui-analyze/templates/UI-STYLE-GUIDE-TEMPLATE.md +171 -0
  102. package/.speccrew/skills/speccrew-pm-requirement-analysis/SKILL.md +434 -0
  103. package/.speccrew/skills/speccrew-pm-requirement-analysis/templates/BIZS-MODELING-TEMPLATE.md +332 -0
  104. package/.speccrew/skills/speccrew-pm-requirement-analysis/templates/PRD-TEMPLATE.md +200 -0
  105. package/.speccrew/skills/speccrew-pm-requirement-assess/SKILL.md +195 -0
  106. package/.speccrew/skills/speccrew-project-diagnosis/SKILL.md +208 -0
  107. package/.speccrew/skills/speccrew-project-diagnosis/templates/DIAGNOSIS-REPORT-TEMPLATE.md +202 -0
  108. package/.speccrew/skills/speccrew-sd-backend/SKILL.md +188 -0
  109. package/.speccrew/skills/speccrew-sd-backend/templates/INDEX-TEMPLATE.md +85 -0
  110. package/.speccrew/skills/speccrew-sd-backend/templates/SD-BACKEND-TEMPLATE.md +269 -0
  111. package/.speccrew/skills/speccrew-sd-desktop/SKILL.md +192 -0
  112. package/.speccrew/skills/speccrew-sd-desktop/templates/INDEX-TEMPLATE.md +271 -0
  113. package/.speccrew/skills/speccrew-sd-desktop/templates/SD-DESKTOP-TEMPLATE.md +673 -0
  114. package/.speccrew/skills/speccrew-sd-frontend/SKILL.md +176 -0
  115. package/.speccrew/skills/speccrew-sd-frontend/templates/INDEX-TEMPLATE.md +184 -0
  116. package/.speccrew/skills/speccrew-sd-frontend/templates/SD-FRONTEND-TEMPLATE.md +382 -0
  117. package/.speccrew/skills/speccrew-sd-mobile/SKILL.md +189 -0
  118. package/.speccrew/skills/speccrew-sd-mobile/templates/INDEX-TEMPLATE.md +219 -0
  119. package/.speccrew/skills/speccrew-sd-mobile/templates/SD-MOBILE-TEMPLATE.md +534 -0
  120. package/.speccrew/skills/speccrew-test-case-design/SKILL.md +284 -0
  121. package/.speccrew/skills/speccrew-test-case-design/templates/TEST-CASE-DESIGN-TEMPLATE.md +263 -0
  122. package/.speccrew/skills/speccrew-test-code-gen/SKILL.md +313 -0
  123. package/.speccrew/skills/speccrew-test-code-gen/templates/TEST-CODE-PLAN-TEMPLATE.md +180 -0
  124. package/.speccrew/skills/speccrew-test-execute/SKILL.md +283 -0
  125. package/.speccrew/skills/speccrew-test-execute/templates/BUG-REPORT-TEMPLATE.md +50 -0
  126. package/.speccrew/skills/speccrew-test-execute/templates/TEST-REPORT-TEMPLATE.md +57 -0
  127. package/.speccrew/skills/speccrew-workflow-diagnose/SKILL.md +155 -0
  128. package/LICENSE +21 -0
  129. package/README.ar.md +318 -0
  130. package/README.en.md +318 -0
  131. package/README.es.md +318 -0
  132. package/README.md +340 -0
  133. package/bin/cli.js +62 -0
  134. package/lib/commands/doctor.js +138 -0
  135. package/lib/commands/init.js +231 -0
  136. package/lib/commands/list.js +114 -0
  137. package/lib/commands/uninstall.js +117 -0
  138. package/lib/commands/update.js +351 -0
  139. package/lib/ide-adapters.js +73 -0
  140. package/lib/utils.js +104 -0
  141. package/package.json +28 -0
  142. package/workspace-template/docs/configs/document-templates.json +667 -0
  143. package/workspace-template/docs/configs/platform-mapping.json +194 -0
  144. package/workspace-template/docs/configs/tech-stack-mappings.json +313 -0
  145. package/workspace-template/docs/configs/validation-rules.json +87 -0
  146. package/workspace-template/docs/rules/mermaid-rule.md +114 -0
  147. package/workspace-template/docs/solutions/Agent/346/212/200/350/203/275/345/256/232/344/271/211+/351/234/200/346/261/202/346/226/207/346/241/243+UML/344/275/277/347/224/250/346/250/241/346/235/277/357/274/210ISA-95/345/205/255/346/256/265/345/274/217/350/236/215/345/220/210/347/211/210/357/274/211.md +586 -0
  148. package/workspace-template/docs/solutions/agent-knowledge-map.md +238 -0
  149. package/workspace-template/docs/solutions/bizs-knowledge-pipeline.md +678 -0
  150. package/workspace-template/docs/solutions/harness.md +410 -0
  151. package/workspace-template/docs/solutions/knowledge-incremental-sync-spec.md +943 -0
  152. package/workspace-template/docs/solutions/techs-knowledge-pipeline.md +803 -0
  153. package/workspace-template/docs/solutions/workspace-structure.md +318 -0
@@ -0,0 +1,194 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "description": "Platform naming mapping for consistent configuration across bizs and techs pipelines",
4
+ "last_updated": "2026-03-23",
5
+ "platform_categories": {
6
+ "web": {
7
+ "description": "Web frontend applications",
8
+ "subtypes": ["vue", "react", "angular", "nextjs", "nuxt", "svelte"]
9
+ },
10
+ "mobile": {
11
+ "description": "Mobile applications (all platforms)",
12
+ "subtypes": ["uniapp", "flutter", "react-native", "android", "ios", "miniprogram"]
13
+ },
14
+ "backend": {
15
+ "description": "Backend services and APIs",
16
+ "subtypes": ["spring", "nestjs", "express", "fastify", "django", "fastapi", "go", "rust"]
17
+ },
18
+ "desktop": {
19
+ "description": "Desktop applications",
20
+ "subtypes": ["electron", "tauri", "wpf", "winforms", "qt"]
21
+ },
22
+ "api": {
23
+ "description": "API-only systems (no UI)",
24
+ "subtypes": ["rest", "graphql", "grpc"]
25
+ }
26
+ },
27
+ "mappings": [
28
+ {
29
+ "platform_id": "web-react",
30
+ "platform_type": "web",
31
+ "framework": "react",
32
+ "platform_subtype": "react"
33
+ },
34
+ {
35
+ "platform_id": "web-vue",
36
+ "platform_type": "web",
37
+ "framework": "vue",
38
+ "platform_subtype": "vue"
39
+ },
40
+ {
41
+ "platform_id": "web-angular",
42
+ "platform_type": "web",
43
+ "framework": "angular",
44
+ "platform_subtype": "angular"
45
+ },
46
+ {
47
+ "platform_id": "web-nextjs",
48
+ "platform_type": "web",
49
+ "framework": "nextjs",
50
+ "platform_subtype": "nextjs"
51
+ },
52
+ {
53
+ "platform_id": "web-nuxt",
54
+ "platform_type": "web",
55
+ "framework": "nuxt",
56
+ "platform_subtype": "nuxt"
57
+ },
58
+ {
59
+ "platform_id": "web-svelte",
60
+ "platform_type": "web",
61
+ "framework": "svelte",
62
+ "platform_subtype": "svelte"
63
+ },
64
+ {
65
+ "platform_id": "mobile-uniapp",
66
+ "platform_type": "mobile",
67
+ "framework": "uniapp",
68
+ "platform_subtype": "uniapp"
69
+ },
70
+ {
71
+ "platform_id": "mobile-flutter",
72
+ "platform_type": "mobile",
73
+ "framework": "flutter",
74
+ "platform_subtype": "flutter"
75
+ },
76
+ {
77
+ "platform_id": "mobile-react-native",
78
+ "platform_type": "mobile",
79
+ "framework": "react-native",
80
+ "platform_subtype": "react-native"
81
+ },
82
+ {
83
+ "platform_id": "mobile-android",
84
+ "platform_type": "mobile",
85
+ "framework": "android",
86
+ "platform_subtype": "android"
87
+ },
88
+ {
89
+ "platform_id": "mobile-ios",
90
+ "platform_type": "mobile",
91
+ "framework": "ios",
92
+ "platform_subtype": "ios"
93
+ },
94
+ {
95
+ "platform_id": "mobile-miniprogram",
96
+ "platform_type": "mobile",
97
+ "framework": "miniprogram",
98
+ "platform_subtype": "miniprogram"
99
+ },
100
+ {
101
+ "platform_id": "backend-spring",
102
+ "platform_type": "backend",
103
+ "framework": "spring",
104
+ "platform_subtype": "spring"
105
+ },
106
+ {
107
+ "platform_id": "backend-nestjs",
108
+ "platform_type": "backend",
109
+ "framework": "nestjs",
110
+ "platform_subtype": "nestjs"
111
+ },
112
+ {
113
+ "platform_id": "backend-express",
114
+ "platform_type": "backend",
115
+ "framework": "express",
116
+ "platform_subtype": "express"
117
+ },
118
+ {
119
+ "platform_id": "backend-fastify",
120
+ "platform_type": "backend",
121
+ "framework": "fastify",
122
+ "platform_subtype": "fastify"
123
+ },
124
+ {
125
+ "platform_id": "backend-django",
126
+ "platform_type": "backend",
127
+ "framework": "django",
128
+ "platform_subtype": "django"
129
+ },
130
+ {
131
+ "platform_id": "backend-fastapi",
132
+ "platform_type": "backend",
133
+ "framework": "fastapi",
134
+ "platform_subtype": "fastapi"
135
+ },
136
+ {
137
+ "platform_id": "backend-go",
138
+ "platform_type": "backend",
139
+ "framework": "go",
140
+ "platform_subtype": "go"
141
+ },
142
+ {
143
+ "platform_id": "backend-rust",
144
+ "platform_type": "backend",
145
+ "framework": "rust",
146
+ "platform_subtype": "rust"
147
+ },
148
+ {
149
+ "platform_id": "desktop-electron",
150
+ "platform_type": "desktop",
151
+ "framework": "electron",
152
+ "platform_subtype": "electron"
153
+ },
154
+ {
155
+ "platform_id": "desktop-tauri",
156
+ "platform_type": "desktop",
157
+ "framework": "tauri",
158
+ "platform_subtype": "tauri"
159
+ },
160
+ {
161
+ "platform_id": "desktop-wpf",
162
+ "platform_type": "desktop",
163
+ "framework": "wpf",
164
+ "platform_subtype": "wpf"
165
+ },
166
+ {
167
+ "platform_id": "desktop-winforms",
168
+ "platform_type": "desktop",
169
+ "framework": "winforms",
170
+ "platform_subtype": "winforms"
171
+ },
172
+ {
173
+ "platform_id": "desktop-qt",
174
+ "platform_type": "desktop",
175
+ "framework": "qt",
176
+ "platform_subtype": "qt"
177
+ }
178
+ ],
179
+ "naming_conventions": {
180
+ "platform_id_format": "{platform_type}-{framework}",
181
+ "platform_type_values": ["web", "mobile", "backend", "desktop", "api"],
182
+ "field_mapping": {
183
+ "bizs_init": {
184
+ "platform_type": "platform_type",
185
+ "platform_subtype": "platform_subtype"
186
+ },
187
+ "techs_init": {
188
+ "platform_type": "platform_type",
189
+ "framework": "framework",
190
+ "platform_id": "platform_id"
191
+ }
192
+ }
193
+ }
194
+ }
@@ -0,0 +1,313 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "description": "Technology stack mappings for file extensions, API patterns, and analysis rules",
4
+ "last_updated": "2026-03-23",
5
+ "global_exclude_dirs": [
6
+ "node_modules", ".git", ".svn",
7
+ "dist", "build", "out", "output", "target",
8
+ "e2e", "test", "tests", "__tests__",
9
+ "coverage", ".nyc_output",
10
+ ".idea", ".vscode", ".qoder", ".speccrew",
11
+ "playwright-report", "test-results",
12
+ ".next", ".nuxt", ".output",
13
+ "docs", "scripts", "public", "assets", "mock", "fixtures"
14
+ ],
15
+ "tech_stacks": {
16
+ "web": {
17
+ "react": {
18
+ "extensions": [".tsx", ".ts", ".jsx", ".js"],
19
+ "exclude_dirs": ["components", "hooks", "lib", "utils", "contexts", "hocs", "src", "views", "pages", "api", "layout", "layouts", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
20
+ "entry_patterns": ["src/pages/**/*.{tsx,jsx}", "src/components/**/*.{tsx,jsx}"],
21
+ "api_call_patterns": ["fetch(", "axios.", "apiClient.", "useQuery", "useMutation"],
22
+ "state_management": ["useState", "useReducer", "Redux", "Zustand", "MobX"],
23
+ "routing": ["react-router", "next/router"],
24
+ "component_patterns": ["export default function", "export const", "React.FC"]
25
+ },
26
+ "vue": {
27
+ "extensions": [".vue", ".ts", ".js"],
28
+ "exclude_dirs": ["components", "composables", "hooks", "utils", "mixins", "directives", "src", "views", "pages", "api", "layout", "layouts", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
29
+ "entry_patterns": ["src/views/**/*.vue", "src/components/**/*.vue", "pages/**/*.vue"],
30
+ "api_call_patterns": ["axios.", "fetch(", "$http", "useFetch"],
31
+ "state_management": ["Pinia", "Vuex", "ref", "reactive", "computed"],
32
+ "routing": ["vue-router"],
33
+ "component_patterns": ["<template>", "export default", "defineComponent"]
34
+ },
35
+ "angular": {
36
+ "extensions": [".ts", ".html", ".scss", ".css"],
37
+ "exclude_dirs": ["components", "directives", "pipes", "guards", "interceptors", "services", "src", "views", "pages", "api", "layout", "layouts", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
38
+ "entry_patterns": ["src/app/components/**/*.ts", "src/app/pages/**/*.ts"],
39
+ "api_call_patterns": ["HttpClient", "http.get", "http.post"],
40
+ "state_management": ["RxJS", "NgRx", "BehaviorSubject", "Observable"],
41
+ "routing": ["@angular/router"],
42
+ "component_patterns": ["@Component", "export class", "implements OnInit"]
43
+ },
44
+ "nextjs": {
45
+ "extensions": [".tsx", ".ts", ".jsx", ".js"],
46
+ "exclude_dirs": ["components", "hooks", "lib", "utils", "contexts", "api", "src", "views", "pages", "layout", "layouts", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
47
+ "entry_patterns": ["app/**/*.{tsx,jsx}", "pages/**/*.{tsx,jsx}"],
48
+ "api_call_patterns": ["fetch(", "axios.", "useSWR", "React Query"],
49
+ "state_management": ["useState", "Zustand", "Redux", "Context API"],
50
+ "routing": ["file-system routing", "next/navigation"],
51
+ "component_patterns": ["export default", "async function", "'use client'"]
52
+ },
53
+ "nuxt": {
54
+ "extensions": [".vue", ".ts", ".js"],
55
+ "exclude_dirs": ["components", "composables", "utils", "plugins", "middleware", "src", "views", "pages", "api", "layout", "layouts", "assets", "store", "stores", "router", "routes", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
56
+ "entry_patterns": ["pages/**/*.vue", "components/**/*.vue"],
57
+ "api_call_patterns": ["$fetch", "useFetch", "axios."],
58
+ "state_management": ["Pinia", "useState", "composables"],
59
+ "routing": ["file-system routing", "vue-router"],
60
+ "component_patterns": ["<template>", "<script setup>", "definePageMeta"]
61
+ },
62
+ "svelte": {
63
+ "extensions": [".svelte", ".ts", ".js"],
64
+ "exclude_dirs": ["components", "lib", "utils", "stores", "actions", "src", "views", "pages", "api", "layout", "layouts", "assets", "store", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
65
+ "entry_patterns": ["src/**/*.svelte", "routes/**/*.svelte"],
66
+ "api_call_patterns": ["fetch(", "axios."],
67
+ "state_management": ["writable", "readable", "derived", "Svelte Store"],
68
+ "routing": ["svelte-routing", "file-system routing"],
69
+ "component_patterns": ["<script>", "export let", "{#if}"]
70
+ }
71
+ },
72
+ "mobile": {
73
+ "flutter": {
74
+ "extensions": [".dart"],
75
+ "exclude_dirs": ["widgets", "components", "utils", "helpers", "models", "services"],
76
+ "entry_patterns": ["lib/**/*.dart", "lib/pages/**/*.dart", "lib/screens/**/*.dart"],
77
+ "api_call_patterns": ["http.", "dio.", "Dio()", "get(", "post("],
78
+ "state_management": ["Provider", "Riverpod", "Bloc", "GetX", "MobX"],
79
+ "routing": ["Navigator", "GoRouter", "Get.to"],
80
+ "component_patterns": ["class.*extends StatelessWidget", "class.*extends StatefulWidget", "@override Widget build"]
81
+ },
82
+ "react-native": {
83
+ "extensions": [".tsx", ".ts", ".jsx", ".js"],
84
+ "exclude_dirs": ["components", "hooks", "utils", "contexts", "navigations", "src", "views", "pages", "api", "screens", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs"],
85
+ "entry_patterns": ["src/screens/**/*.{tsx,jsx}", "src/components/**/*.{tsx,jsx}"],
86
+ "api_call_patterns": ["fetch(", "axios.", "apiClient."],
87
+ "state_management": ["useState", "Redux", "MobX", "Zustand", "Recoil"],
88
+ "routing": ["react-navigation", "expo-router"],
89
+ "component_patterns": ["export default function", "const.*=.*=>"]
90
+ },
91
+ "uniapp": {
92
+ "extensions": [".vue", ".ts", ".js"],
93
+ "exclude_dirs": ["components", "composables", "utils", "mixins", "directives", "src", "views", "pages", "api", "static", "assets", "store", "stores", "router", "routes", "plugins", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs", "http", "tabbar", "constants", "common", "hooks", "style"],
94
+ "exclude_file_suffixes": [],
95
+ "strip_module_prefixes": ["pages-"],
96
+ "entry_patterns": ["pages/**/*.vue", "components/**/*.vue"],
97
+ "api_call_patterns": ["uni.request", "uni.uploadFile", "uni.downloadFile"],
98
+ "state_management": ["Vuex", "Pinia", "globalData"],
99
+ "routing": ["pages.json", "uni.navigateTo"],
100
+ "component_patterns": ["<template>", "export default", "onLoad", "onShow"]
101
+ },
102
+ "android": {
103
+ "extensions": [".kt", ".java", ".xml"],
104
+ "entry_patterns": ["app/src/main/java/**/*.kt", "app/src/main/java/**/*.java"],
105
+ "api_call_patterns": ["Retrofit", "OkHttp", "HttpURLConnection"],
106
+ "state_management": ["ViewModel", "LiveData", "StateFlow", "Compose State"],
107
+ "routing": ["Intent", "Navigation Component", "Jetpack Navigation"],
108
+ "component_patterns": ["class.*Activity", "class.*Fragment", "@Composable"]
109
+ },
110
+ "ios": {
111
+ "extensions": [".swift", ".m", ".h", ".storyboard"],
112
+ "entry_patterns": ["**/*.swift", "ViewControllers/**/*.swift"],
113
+ "api_call_patterns": ["URLSession", "Alamofire", "AF.request"],
114
+ "state_management": ["@State", "@ObservedObject", "@StateObject", "Combine"],
115
+ "routing": ["NavigationView", "TabView", "UIStoryboardSegue"],
116
+ "component_patterns": ["struct.*View", "class.*ViewController", "var body: some View"]
117
+ },
118
+ "miniprogram": {
119
+ "extensions": [".js", ".ts", ".wxml", ".wxss", ".json"],
120
+ "exclude_dirs": ["components", "utils", "behaviors", "mixins", "src", "views", "pages", "api", "static", "assets", "store", "stores", "router", "routes", "styles", "types", "typings", "locales", "i18n", "lang", "config", "configs", "http", "tabbar", "constants", "common", "hooks", "style"],
121
+ "exclude_file_suffixes": [],
122
+ "strip_module_prefixes": ["pages-"],
123
+ "entry_patterns": ["pages/**/*.js", "pages/**/*.ts", "components/**/*.js"],
124
+ "api_call_patterns": ["wx.request", "wx.uploadFile", "wx.downloadFile"],
125
+ "state_management": ["Page data", "globalData", "MobX", "Westore"],
126
+ "routing": ["app.json pages", "wx.navigateTo", "wx.redirectTo"],
127
+ "component_patterns": ["Page({", "Component({", "properties:", "data:"]
128
+ }
129
+ },
130
+ "backend": {
131
+ "spring": {
132
+ "extensions": [".java", ".kt"],
133
+ "exclude_dirs": ["controller", "controllers", "admin", "app", "api", "service", "services", "repository", "repositories", "dao", "dal", "mysql", "redis", "dataobject", "entity", "entities", "model", "models", "dto", "dtos", "vo", "vos", "mapper", "mappers", "convert", "converter", "converters", "config", "configs", "util", "utils", "common", "exception", "exceptions", "enums", "framework", "job", "mq", "listener", "listeners", "producer", "consumer"],
134
+ "exclude_file_suffixes": ["VO", "DTO", "DO", "Entity", "Convert", "Converter"],
135
+ "entry_patterns": ["**/*Controller.java", "**/*Controller.kt", "**/*Service.java"],
136
+ "api_patterns": {
137
+ "controller": ["@Controller", "@RestController", "@RequestMapping"],
138
+ "methods": ["@GetMapping", "@PostMapping", "@PutMapping", "@DeleteMapping", "@PatchMapping"],
139
+ "parameters": ["@RequestBody", "@PathVariable", "@RequestParam", "@Valid"]
140
+ },
141
+ "dto_patterns": ["class.*DTO", "class.*VO", "class.*Request", "class.*Response"],
142
+ "entity_patterns": ["@Entity", "@Table", "class.*DO", "class.*PO"],
143
+ "validation": ["@Valid", "@NotNull", "@NotBlank", "@Size", "@Pattern"]
144
+ },
145
+ "nestjs": {
146
+ "extensions": [".ts"],
147
+ "exclude_dirs": ["services", "repositories", "entities", "dtos", "guards", "interceptors", "middleware", "pipes", "filters", "decorators", "utils", "helpers"],
148
+ "exclude_file_suffixes": [],
149
+ "entry_patterns": ["**/*.controller.ts", "**/*.service.ts", "**/*.module.ts"],
150
+ "api_patterns": {
151
+ "controller": ["@Controller"],
152
+ "methods": ["@Get", "@Post", "@Put", "@Delete", "@Patch", "@Query", "@Param", "@Body"],
153
+ "parameters": ["@Req", "@Res", "@Query", "@Param", "@Body", "@Headers"]
154
+ },
155
+ "dto_patterns": ["class.*Dto", "class.*DTO", "interface.*Dto"],
156
+ "entity_patterns": ["@Entity", "class.*Entity", "interface.*Entity"],
157
+ "validation": ["class-validator", "@IsString", "@IsNumber", "@IsOptional", "@Validate"]
158
+ },
159
+ "express": {
160
+ "extensions": [".js", ".ts"],
161
+ "exclude_dirs": ["services", "models", "middleware", "utils", "helpers", "validators", "schemas"],
162
+ "exclude_file_suffixes": [],
163
+ "entry_patterns": ["routes/**/*.js", "controllers/**/*.js", "**/*.routes.ts"],
164
+ "api_patterns": {
165
+ "router": ["router.get", "router.post", "router.put", "router.delete", "router.patch"],
166
+ "app": ["app.get", "app.post", "app.use"],
167
+ "middleware": ["req, res, next", "async (req, res)"]
168
+ },
169
+ "dto_patterns": ["Joi validation", "express-validator", "manual validation"],
170
+ "entity_patterns": ["mongoose model", "sequelize model", "prisma schema"],
171
+ "validation": ["Joi.object", "body()", "param()", "query()"]
172
+ },
173
+ "fastify": {
174
+ "extensions": [".js", ".ts"],
175
+ "exclude_dirs": ["services", "models", "schemas", "plugins", "hooks", "utils", "helpers"],
176
+ "exclude_file_suffixes": [],
177
+ "entry_patterns": ["routes/**/*.js", "**/*.routes.ts"],
178
+ "api_patterns": {
179
+ "routes": ["fastify.get", "fastify.post", "fastify.route"],
180
+ "schema": ["schema:", "body:", "querystring:", "params:"]
181
+ },
182
+ "dto_patterns": ["JSON Schema", "typebox", "fastify-schema"],
183
+ "entity_patterns": ["mongoose", "prisma", "typeorm"],
184
+ "validation": ["ajv", "JSON Schema validation"]
185
+ },
186
+ "django": {
187
+ "extensions": [".py"],
188
+ "exclude_dirs": ["models", "serializers", "forms", "utils", "helpers", "middleware", "templatetags"],
189
+ "exclude_file_suffixes": [],
190
+ "entry_patterns": ["views.py", "**/views/*.py", "api/*.py"],
191
+ "api_patterns": {
192
+ "views": ["def.*request", "class.*APIView", "@api_view"],
193
+ "decorators": ["@require_http_methods", "@csrf_exempt", "@permission_classes"]
194
+ },
195
+ "dto_patterns": ["Serializer", "ModelSerializer", "Form"],
196
+ "entity_patterns": ["class.*models.Model", "models.CharField", "models.ForeignKey"],
197
+ "validation": ["serializer.is_valid", "form.is_valid", "validate_*"]
198
+ },
199
+ "fastapi": {
200
+ "extensions": [".py"],
201
+ "exclude_dirs": ["models", "schemas", "services", "repositories", "utils", "helpers", "dependencies", "middleware"],
202
+ "exclude_file_suffixes": [],
203
+ "entry_patterns": ["main.py", "routers/*.py", "api/*.py"],
204
+ "api_patterns": {
205
+ "routes": ["@app.get", "@app.post", "@app.put", "@app.delete", "@router.get"],
206
+ "dependencies": ["Depends", "Query", "Path", "Body"]
207
+ },
208
+ "dto_patterns": ["BaseModel", "Pydantic model", "class.*Schema"],
209
+ "entity_patterns": ["SQLAlchemy", "Tortoise ORM", "Prisma Client"],
210
+ "validation": ["Pydantic validation", "Field(...)", "validator"]
211
+ },
212
+ "go": {
213
+ "extensions": [".go"],
214
+ "exclude_dirs": ["service", "services", "repository", "repositories", "model", "models", "dto", "dtos", "middleware", "utils", "helpers"],
215
+ "exclude_file_suffixes": [],
216
+ "entry_patterns": ["**/*.go", "handlers/*.go", "controllers/*.go"],
217
+ "api_patterns": {
218
+ "router": ["gin.Router", "echo.Echo", "mux.Router", "http.HandleFunc"],
219
+ "handlers": ["gin.HandlerFunc", "echo.HandlerFunc", "func.*http.ResponseWriter"]
220
+ },
221
+ "dto_patterns": ["struct.*Request", "struct.*Response", "type.*DTO"],
222
+ "entity_patterns": ["gorm.Model", "bun:", "ent.*"],
223
+ "validation": ["go-playground/validator", "validate struct tags"]
224
+ },
225
+ "rust": {
226
+ "extensions": [".rs"],
227
+ "exclude_dirs": ["service", "services", "repository", "repositories", "model", "models", "dto", "dtos", "middleware", "utils", "helpers", "schema", "migrations"],
228
+ "exclude_file_suffixes": [],
229
+ "entry_patterns": ["src/**/*.rs", "handlers/*.rs", "routes/*.rs"],
230
+ "api_patterns": {
231
+ "frameworks": ["actix-web", "axum", "rocket", "warp"],
232
+ "handlers": ["#[get]", "#[post]", "async fn", "HttpResponse"]
233
+ },
234
+ "dto_patterns": ["struct.*Request", "struct.*Response", "#[derive(Deserialize)]"],
235
+ "entity_patterns": ["diesel", "sea-orm", "sqlx"],
236
+ "validation": ["validator crate", "#[validate]", "Validate trait"]
237
+ }
238
+ },
239
+ "desktop": {
240
+ "electron": {
241
+ "extensions": [".ts", ".tsx", ".js", ".jsx", ".html"],
242
+ "entry_patterns": ["src/main.ts", "src/renderer/**/*.tsx", "src/preload.ts"],
243
+ "ipc_patterns": ["ipcMain", "ipcRenderer", "contextBridge"],
244
+ "state_management": ["Redux", "Zustand", "Electron Store"],
245
+ "component_patterns": ["React", "Vue", "Angular in renderer"]
246
+ },
247
+ "tauri": {
248
+ "extensions": [".rs", ".ts", ".tsx", ".vue"],
249
+ "entry_patterns": ["src-tauri/src/main.rs", "src/**/*.ts", "src/**/*.vue"],
250
+ "ipc_patterns": ["invoke", "listen", "emit", "#[tauri::command]"],
251
+ "state_management": ["Pinia", "Redux", "Tauri Store"],
252
+ "component_patterns": ["Frontend framework components", "Rust commands"]
253
+ },
254
+ "wpf": {
255
+ "extensions": [".cs", ".xaml"],
256
+ "entry_patterns": ["**/*.xaml.cs", "ViewModels/**/*.cs", "Views/**/*.xaml"],
257
+ "patterns": ["INotifyPropertyChanged", "ICommand", "MVVM"],
258
+ "state_management": ["MVVM", "ObservableObject", "RelayCommand"]
259
+ },
260
+ "winforms": {
261
+ "extensions": [".cs", ".vb"],
262
+ "entry_patterns": ["**/*.cs", "Forms/**/*.cs"],
263
+ "patterns": ["Form class", "Event handlers", "Control bindings"],
264
+ "state_management": ["DataBinding", "INotifyPropertyChanged"]
265
+ },
266
+ "qt": {
267
+ "extensions": [".cpp", ".h", ".ui", ".py"],
268
+ "entry_patterns": ["src/**/*.cpp", "widgets/**/*.cpp", "*.ui"],
269
+ "patterns": ["Q_OBJECT", "signals:", "slots:", "connect("],
270
+ "state_management": ["Qt Property System", "QAbstractItemModel"]
271
+ }
272
+ },
273
+ "api": {
274
+ "rest": {
275
+ "description": "RESTful API conventions",
276
+ "methods": ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"],
277
+ "status_codes": {
278
+ "success": [200, 201, 204],
279
+ "client_error": [400, 401, 403, 404, 409, 422],
280
+ "server_error": [500, 502, 503, 504]
281
+ },
282
+ "content_types": ["application/json", "application/xml", "multipart/form-data"]
283
+ },
284
+ "graphql": {
285
+ "extensions": [".graphql", ".gql", ".ts", ".js"],
286
+ "entry_patterns": ["schema.graphql", "resolvers/**/*.ts", "typeDefs/**/*.ts"],
287
+ "patterns": ["type Query", "type Mutation", "type Subscription", "@Resolver"],
288
+ "operations": ["query", "mutation", "subscription"]
289
+ },
290
+ "grpc": {
291
+ "extensions": [".proto", ".pb.go", ".pb.java", ".grpc.pb.ts"],
292
+ "entry_patterns": ["**/*.proto", "**/*_pb2*.py", "**/*.pb.go"],
293
+ "patterns": ["service.*{", "rpc.*(", "message.*{", "protoc"],
294
+ "types": ["Unary", "Server Streaming", "Client Streaming", "Bidirectional"]
295
+ }
296
+ }
297
+ },
298
+ "analysis_rules": {
299
+ "file_search_priority": [
300
+ "entry_points from modules.json",
301
+ "**/{module_name}/**/*.{extensions}",
302
+ "platform-specific patterns"
303
+ ],
304
+ "api_detection": {
305
+ "ui_modules": "trace fetch/axios/apiClient calls",
306
+ "api_modules": "parse decorators and method signatures"
307
+ },
308
+ "feature_extraction": {
309
+ "ui": "Each page/screen or major user interaction = one feature",
310
+ "api": "Each public API endpoint = one feature"
311
+ }
312
+ }
313
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "description": "Cross-skill validation rules for consistent data validation across all skills",
4
+ "last_updated": "2026-03-23",
5
+ "naming_conventions": {
6
+ "skill_name": {
7
+ "pattern": "^speccrew-[a-z]+(-[a-z]+)*$",
8
+ "description": "Skill names must use lowercase with hyphens, prefixed with 'speccrew-'",
9
+ "examples": ["speccrew-knowledge-bizs-init", "speccrew-knowledge-dispatch"],
10
+ "invalid_examples": ["Speccrew-Knowledge", "speccrew_knowledge", "knowledge-bizs-init"]
11
+ },
12
+ "module_name": {
13
+ "pattern": "^[a-z]+(-[a-z]+)*$",
14
+ "description": "Module names must use lowercase with hyphens",
15
+ "examples": ["order-management", "user-center", "payment-gateway"],
16
+ "invalid_examples": ["OrderManagement", "order_management", "Order-Center"]
17
+ },
18
+ "platform_id": {
19
+ "pattern": "^(web|mobile|backend|desktop|api)-[a-z]+$",
20
+ "description": "Platform ID must follow {platform_type}-{framework} format",
21
+ "examples": ["web-react", "mobile-flutter", "backend-spring"],
22
+ "invalid_examples": ["web_react", "Mobile-Flutter", "backend"]
23
+ },
24
+ "feature_name": {
25
+ "pattern": "^[a-z]+(-[a-z]+)*$",
26
+ "description": "Feature names must use lowercase with hyphens",
27
+ "examples": ["create-order", "list-users", "get-user-detail"],
28
+ "invalid_examples": ["CreateOrder", "create_order", "Create-Order"]
29
+ },
30
+ "file_name": {
31
+ "pattern": "^[a-z0-9]+(-[a-z0-9]+)*\\.md$",
32
+ "description": "Markdown file names must use lowercase with hyphens",
33
+ "examples": ["order-overview.md", "create-order.md", "system-summarize.md"],
34
+ "invalid_examples": ["OrderOverview.md", "create_order.md", "Create-Order.md"]
35
+ }
36
+ },
37
+ "required_fields": {
38
+ "modules_json": {
39
+ "fields": ["code_name", "display_name", "system_type", "entry_points"],
40
+ "conditional_fields": {
41
+ "system_type:ui": ["backend_apis"],
42
+ "system_type:api": ["base_path"]
43
+ }
44
+ },
45
+ "platform_config": {
46
+ "fields": ["platform_type", "platform_subtype", "source_path", "tech_stack"]
47
+ },
48
+ "feature_detail": {
49
+ "fields": ["feature_name", "module_name", "api_method", "api_path"],
50
+ "optional_fields": ["validation_rules", "business_rules", "source_files"]
51
+ }
52
+ },
53
+ "path_validations": {
54
+ "workspace_root": {
55
+ "pattern": "^speccrew-workspace/$",
56
+ "description": "All knowledge outputs must be under speccrew-workspace/"
57
+ },
58
+ "knowledge_base_path": {
59
+ "pattern": "^speccrew-workspace/knowledges/(bizs|techs|base)/",
60
+ "description": "Knowledge files must be under bizs/, techs/, or base/"
61
+ },
62
+ "module_output_path": {
63
+ "pattern": "^speccrew-workspace/knowledges/(bizs|techs)/{platform_type}/{module_name}/$",
64
+ "description": "Module output must follow platform_type/module_name structure"
65
+ }
66
+ },
67
+ "language_codes": {
68
+ "valid_codes": ["zh", "en", "ja", "ko", "fr", "de", "es"],
69
+ "default": "zh",
70
+ "mapping": {
71
+ "zh": "中文",
72
+ "en": "English",
73
+ "ja": "日本語",
74
+ "ko": "한국어",
75
+ "fr": "Français",
76
+ "de": "Deutsch",
77
+ "es": "Español"
78
+ }
79
+ },
80
+ "system_type_values": {
81
+ "valid_values": ["ui", "api"],
82
+ "descriptions": {
83
+ "ui": "UI-based modules with pages/components",
84
+ "api": "API-based modules with controllers/handlers"
85
+ }
86
+ }
87
+ }