@mison/ag-kit-cn 2.0.1

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 (237) hide show
  1. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
  2. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
  3. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
  4. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
  5. package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
  6. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
  7. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
  8. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  9. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  10. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  11. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  12. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  13. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  14. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  15. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
  16. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  17. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  18. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  19. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  20. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
  21. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
  22. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  23. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  24. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
  25. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
  26. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
  27. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
  28. package/.agent/ARCHITECTURE.md +285 -0
  29. package/.agent/agents/backend-specialist.md +268 -0
  30. package/.agent/agents/code-archaeologist.md +106 -0
  31. package/.agent/agents/database-architect.md +225 -0
  32. package/.agent/agents/debugger.md +225 -0
  33. package/.agent/agents/devops-engineer.md +242 -0
  34. package/.agent/agents/documentation-writer.md +104 -0
  35. package/.agent/agents/explorer-agent.md +73 -0
  36. package/.agent/agents/frontend-specialist.md +618 -0
  37. package/.agent/agents/game-developer.md +162 -0
  38. package/.agent/agents/mobile-developer.md +382 -0
  39. package/.agent/agents/orchestrator.md +438 -0
  40. package/.agent/agents/penetration-tester.md +188 -0
  41. package/.agent/agents/performance-optimizer.md +187 -0
  42. package/.agent/agents/product-manager.md +112 -0
  43. package/.agent/agents/product-owner.md +95 -0
  44. package/.agent/agents/project-planner.md +405 -0
  45. package/.agent/agents/qa-automation-engineer.md +103 -0
  46. package/.agent/agents/security-auditor.md +170 -0
  47. package/.agent/agents/seo-specialist.md +111 -0
  48. package/.agent/agents/test-engineer.md +158 -0
  49. package/.agent/mcp_config.json +12 -0
  50. package/.agent/rules/GEMINI.md +273 -0
  51. package/.agent/scripts/auto_preview.py +148 -0
  52. package/.agent/scripts/checklist.py +217 -0
  53. package/.agent/scripts/session_manager.py +120 -0
  54. package/.agent/scripts/verify_all.py +327 -0
  55. package/.agent/skills/api-patterns/SKILL.md +84 -0
  56. package/.agent/skills/api-patterns/api-style.md +42 -0
  57. package/.agent/skills/api-patterns/auth.md +24 -0
  58. package/.agent/skills/api-patterns/documentation.md +26 -0
  59. package/.agent/skills/api-patterns/graphql.md +41 -0
  60. package/.agent/skills/api-patterns/rate-limiting.md +31 -0
  61. package/.agent/skills/api-patterns/response.md +37 -0
  62. package/.agent/skills/api-patterns/rest.md +40 -0
  63. package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
  64. package/.agent/skills/api-patterns/security-testing.md +122 -0
  65. package/.agent/skills/api-patterns/trpc.md +41 -0
  66. package/.agent/skills/api-patterns/versioning.md +22 -0
  67. package/.agent/skills/app-builder/SKILL.md +75 -0
  68. package/.agent/skills/app-builder/agent-coordination.md +74 -0
  69. package/.agent/skills/app-builder/feature-building.md +53 -0
  70. package/.agent/skills/app-builder/project-detection.md +34 -0
  71. package/.agent/skills/app-builder/scaffolding.md +118 -0
  72. package/.agent/skills/app-builder/tech-stack.md +40 -0
  73. package/.agent/skills/app-builder/templates/SKILL.md +39 -0
  74. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  75. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  76. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  77. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  78. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  79. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  80. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  81. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
  82. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
  83. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
  84. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
  85. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  86. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
  87. package/.agent/skills/architecture/SKILL.md +57 -0
  88. package/.agent/skills/architecture/context-discovery.md +43 -0
  89. package/.agent/skills/architecture/examples.md +94 -0
  90. package/.agent/skills/architecture/pattern-selection.md +68 -0
  91. package/.agent/skills/architecture/patterns-reference.md +50 -0
  92. package/.agent/skills/architecture/trade-off-analysis.md +77 -0
  93. package/.agent/skills/bash-linux/SKILL.md +201 -0
  94. package/.agent/skills/behavioral-modes/SKILL.md +264 -0
  95. package/.agent/skills/brainstorming/SKILL.md +164 -0
  96. package/.agent/skills/brainstorming/dynamic-questioning.md +359 -0
  97. package/.agent/skills/clean-code/SKILL.md +200 -0
  98. package/.agent/skills/code-review-checklist/SKILL.md +125 -0
  99. package/.agent/skills/database-design/SKILL.md +54 -0
  100. package/.agent/skills/database-design/database-selection.md +43 -0
  101. package/.agent/skills/database-design/indexing.md +39 -0
  102. package/.agent/skills/database-design/migrations.md +50 -0
  103. package/.agent/skills/database-design/optimization.md +36 -0
  104. package/.agent/skills/database-design/orm-selection.md +30 -0
  105. package/.agent/skills/database-design/schema-design.md +56 -0
  106. package/.agent/skills/database-design/scripts/schema_validator.py +172 -0
  107. package/.agent/skills/deployment-procedures/SKILL.md +241 -0
  108. package/.agent/skills/doc.md +177 -0
  109. package/.agent/skills/documentation-templates/SKILL.md +194 -0
  110. package/.agent/skills/frontend-design/SKILL.md +418 -0
  111. package/.agent/skills/frontend-design/animation-guide.md +331 -0
  112. package/.agent/skills/frontend-design/color-system.md +307 -0
  113. package/.agent/skills/frontend-design/decision-trees.md +418 -0
  114. package/.agent/skills/frontend-design/motion-graphics.md +306 -0
  115. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  116. package/.agent/skills/frontend-design/scripts/ux_audit.py +727 -0
  117. package/.agent/skills/frontend-design/typography-system.md +345 -0
  118. package/.agent/skills/frontend-design/ux-psychology.md +1118 -0
  119. package/.agent/skills/frontend-design/visual-effects.md +383 -0
  120. package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
  121. package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
  122. package/.agent/skills/game-development/SKILL.md +167 -0
  123. package/.agent/skills/game-development/game-art/SKILL.md +185 -0
  124. package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
  125. package/.agent/skills/game-development/game-design/SKILL.md +129 -0
  126. package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
  127. package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
  128. package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
  129. package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
  130. package/.agent/skills/game-development/web-games/SKILL.md +150 -0
  131. package/.agent/skills/geo-fundamentals/SKILL.md +155 -0
  132. package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  133. package/.agent/skills/i18n-localization/SKILL.md +154 -0
  134. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  135. package/.agent/skills/intelligent-routing/SKILL.md +335 -0
  136. package/.agent/skills/lint-and-validate/SKILL.md +44 -0
  137. package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -0
  138. package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  139. package/.agent/skills/mcp-builder/SKILL.md +176 -0
  140. package/.agent/skills/mobile-design/SKILL.md +394 -0
  141. package/.agent/skills/mobile-design/decision-trees.md +516 -0
  142. package/.agent/skills/mobile-design/mobile-backend.md +491 -0
  143. package/.agent/skills/mobile-design/mobile-color-system.md +420 -0
  144. package/.agent/skills/mobile-design/mobile-debugging.md +122 -0
  145. package/.agent/skills/mobile-design/mobile-design-thinking.md +355 -0
  146. package/.agent/skills/mobile-design/mobile-navigation.md +458 -0
  147. package/.agent/skills/mobile-design/mobile-performance.md +767 -0
  148. package/.agent/skills/mobile-design/mobile-testing.md +356 -0
  149. package/.agent/skills/mobile-design/mobile-typography.md +432 -0
  150. package/.agent/skills/mobile-design/platform-android.md +666 -0
  151. package/.agent/skills/mobile-design/platform-ios.md +561 -0
  152. package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
  153. package/.agent/skills/mobile-design/touch-psychology.md +537 -0
  154. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +311 -0
  155. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +241 -0
  156. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +489 -0
  157. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +263 -0
  158. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
  159. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +431 -0
  160. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +683 -0
  161. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +149 -0
  162. package/.agent/skills/nextjs-react-expert/SKILL.md +286 -0
  163. package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
  164. package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
  165. package/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
  166. package/.agent/skills/parallel-agents/SKILL.md +194 -0
  167. package/.agent/skills/performance-profiling/SKILL.md +149 -0
  168. package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  169. package/.agent/skills/plan-writing/SKILL.md +152 -0
  170. package/.agent/skills/powershell-windows/SKILL.md +166 -0
  171. package/.agent/skills/python-patterns/SKILL.md +441 -0
  172. package/.agent/skills/red-team-tactics/SKILL.md +203 -0
  173. package/.agent/skills/rust-pro/SKILL.md +190 -0
  174. package/.agent/skills/seo-fundamentals/SKILL.md +135 -0
  175. package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +215 -0
  176. package/.agent/skills/server-management/SKILL.md +161 -0
  177. package/.agent/skills/systematic-debugging/SKILL.md +114 -0
  178. package/.agent/skills/tailwind-patterns/SKILL.md +269 -0
  179. package/.agent/skills/tdd-workflow/SKILL.md +149 -0
  180. package/.agent/skills/testing-patterns/SKILL.md +178 -0
  181. package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
  182. package/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
  183. package/.agent/skills/vulnerability-scanner/checklists.md +131 -0
  184. package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +459 -0
  185. package/.agent/skills/web-design-guidelines/SKILL.md +57 -0
  186. package/.agent/skills/webapp-testing/SKILL.md +187 -0
  187. package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  188. package/.agent/workflows/brainstorm.md +113 -0
  189. package/.agent/workflows/create.md +59 -0
  190. package/.agent/workflows/debug.md +103 -0
  191. package/.agent/workflows/deploy.md +176 -0
  192. package/.agent/workflows/enhance.md +63 -0
  193. package/.agent/workflows/orchestrate.md +242 -0
  194. package/.agent/workflows/plan.md +89 -0
  195. package/.agent/workflows/preview.md +80 -0
  196. package/.agent/workflows/restore-localize-compat.md +525 -0
  197. package/.agent/workflows/status.md +86 -0
  198. package/.agent/workflows/test.md +144 -0
  199. package/.agent/workflows/ui-ux-pro-max.md +295 -0
  200. package/AGENT_FLOW.md +609 -0
  201. package/CHANGELOG.md +68 -0
  202. package/LICENSE +21 -0
  203. package/README.md +260 -0
  204. package/bin/adapters/base.js +63 -0
  205. package/bin/adapters/codex.js +391 -0
  206. package/bin/adapters/gemini.js +137 -0
  207. package/bin/ag-kit.js +1336 -0
  208. package/bin/core/builder.js +80 -0
  209. package/bin/core/generator.js +59 -0
  210. package/bin/core/resource-loader.js +64 -0
  211. package/bin/core/transformer.js +208 -0
  212. package/bin/interactive.js +65 -0
  213. package/bin/utils/atomic-writer.js +97 -0
  214. package/bin/utils/git-helper.js +68 -0
  215. package/bin/utils/managed-block.js +65 -0
  216. package/bin/utils/manifest.js +241 -0
  217. package/bin/utils.js +82 -0
  218. package/docs/codex-rules-template.md +36 -0
  219. package/docs/mapping-spec.md +68 -0
  220. package/docs/multi-target-adapter.md +80 -0
  221. package/docs/official/README.md +53 -0
  222. package/docs/official/antigravity/agent-modes-settings.md +64 -0
  223. package/docs/official/antigravity/rules-workflows.md +96 -0
  224. package/docs/official/antigravity/skills.md +147 -0
  225. package/docs/official/codex/agents-md.md +119 -0
  226. package/docs/official/codex/config-advanced.md +358 -0
  227. package/docs/official/codex/config-basic.md +141 -0
  228. package/docs/official/codex/config-reference.md +223 -0
  229. package/docs/official/codex/config-sample.md +216 -0
  230. package/docs/official/codex/mcp.md +107 -0
  231. package/docs/official/codex/rules.md +79 -0
  232. package/docs/official/codex/skills.md +114 -0
  233. package/docs/official/sources-index.md +32 -0
  234. package/docs/operations.md +145 -0
  235. package/docs/terminology-style-guide.md +69 -0
  236. package/package.json +51 -0
  237. package/scripts/postinstall-check.js +112 -0
@@ -0,0 +1,219 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Test Runner - Unified test execution and coverage reporting
4
+ Runs tests and generates coverage report based on project type.
5
+
6
+ Usage:
7
+ python test_runner.py <project_path> [--coverage]
8
+
9
+ Supports:
10
+ - Node.js: npm test, jest, vitest
11
+ - Python: pytest, unittest
12
+ """
13
+
14
+ import subprocess
15
+ import sys
16
+ import json
17
+ from pathlib import Path
18
+ from datetime import datetime
19
+
20
+ # Fix Windows console encoding
21
+ try:
22
+ sys.stdout.reconfigure(encoding='utf-8', errors='replace')
23
+ except:
24
+ pass
25
+
26
+
27
+ def detect_test_framework(project_path: Path) -> dict:
28
+ """Detect test framework and commands."""
29
+ result = {
30
+ "type": "unknown",
31
+ "framework": None,
32
+ "cmd": None,
33
+ "coverage_cmd": None
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 test script
46
+ if "test" in scripts:
47
+ result["framework"] = "npm test"
48
+ result["cmd"] = ["npm", "test"]
49
+
50
+ # Try to detect specific framework for coverage
51
+ if "vitest" in deps:
52
+ result["framework"] = "vitest"
53
+ result["coverage_cmd"] = ["npx", "vitest", "run", "--coverage"]
54
+ elif "jest" in deps:
55
+ result["framework"] = "jest"
56
+ result["coverage_cmd"] = ["npx", "jest", "--coverage"]
57
+ elif "vitest" in deps:
58
+ result["framework"] = "vitest"
59
+ result["cmd"] = ["npx", "vitest", "run"]
60
+ result["coverage_cmd"] = ["npx", "vitest", "run", "--coverage"]
61
+ elif "jest" in deps:
62
+ result["framework"] = "jest"
63
+ result["cmd"] = ["npx", "jest"]
64
+ result["coverage_cmd"] = ["npx", "jest", "--coverage"]
65
+
66
+ except:
67
+ pass
68
+
69
+ # Python project
70
+ if (project_path / "pyproject.toml").exists() or (project_path / "requirements.txt").exists():
71
+ result["type"] = "python"
72
+ result["framework"] = "pytest"
73
+ result["cmd"] = ["python", "-m", "pytest", "-v"]
74
+ result["coverage_cmd"] = ["python", "-m", "pytest", "--cov", "--cov-report=term-missing"]
75
+
76
+ return result
77
+
78
+
79
+ def run_tests(cmd: list, cwd: Path) -> dict:
80
+ """Run tests and return results."""
81
+ result = {
82
+ "passed": False,
83
+ "output": "",
84
+ "error": "",
85
+ "tests_run": 0,
86
+ "tests_passed": 0,
87
+ "tests_failed": 0
88
+ }
89
+
90
+ try:
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=300 # 5 min timeout for tests
99
+ )
100
+
101
+ result["output"] = proc.stdout[:3000] if proc.stdout else ""
102
+ result["error"] = proc.stderr[:500] if proc.stderr else ""
103
+ result["passed"] = proc.returncode == 0
104
+
105
+ # Try to parse test counts from output
106
+ output = proc.stdout or ""
107
+
108
+ # Jest/Vitest pattern: "Tests: X passed, Y failed, Z total"
109
+ if "passed" in output.lower() and "failed" in output.lower():
110
+ import re
111
+ match = re.search(r'(\d+)\s+passed', output, re.IGNORECASE)
112
+ if match:
113
+ result["tests_passed"] = int(match.group(1))
114
+ match = re.search(r'(\d+)\s+failed', output, re.IGNORECASE)
115
+ if match:
116
+ result["tests_failed"] = int(match.group(1))
117
+ result["tests_run"] = result["tests_passed"] + result["tests_failed"]
118
+
119
+ # Pytest pattern: "X passed, Y failed"
120
+ if "pytest" in str(cmd):
121
+ import re
122
+ match = re.search(r'(\d+)\s+passed', output)
123
+ if match:
124
+ result["tests_passed"] = int(match.group(1))
125
+ match = re.search(r'(\d+)\s+failed', output)
126
+ if match:
127
+ result["tests_failed"] = int(match.group(1))
128
+ result["tests_run"] = result["tests_passed"] + result["tests_failed"]
129
+
130
+ except FileNotFoundError:
131
+ result["error"] = f"Command not found: {cmd[0]}"
132
+ except subprocess.TimeoutExpired:
133
+ result["error"] = "Timeout after 300s"
134
+ except Exception as e:
135
+ result["error"] = str(e)
136
+
137
+ return result
138
+
139
+
140
+ def main():
141
+ project_path = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve()
142
+ with_coverage = "--coverage" in sys.argv
143
+
144
+ print(f"\n{'='*60}")
145
+ print(f"[TEST RUNNER] Unified Test Execution")
146
+ print(f"{'='*60}")
147
+ print(f"Project: {project_path}")
148
+ print(f"Coverage: {'enabled' if with_coverage else 'disabled'}")
149
+ print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
150
+
151
+ # Detect test framework
152
+ test_info = detect_test_framework(project_path)
153
+ print(f"Type: {test_info['type']}")
154
+ print(f"Framework: {test_info['framework']}")
155
+ print("-"*60)
156
+
157
+ if not test_info["cmd"]:
158
+ print("No test framework found for this project.")
159
+ output = {
160
+ "script": "test_runner",
161
+ "project": str(project_path),
162
+ "type": test_info["type"],
163
+ "framework": None,
164
+ "passed": True,
165
+ "message": "No tests configured"
166
+ }
167
+ print(json.dumps(output, indent=2))
168
+ sys.exit(0)
169
+
170
+ # Choose command
171
+ cmd = test_info["coverage_cmd"] if with_coverage and test_info["coverage_cmd"] else test_info["cmd"]
172
+
173
+ print(f"Running: {' '.join(cmd)}")
174
+ print("-"*60)
175
+
176
+ # Run tests
177
+ result = run_tests(cmd, project_path)
178
+
179
+ # Print output (truncated)
180
+ if result["output"]:
181
+ lines = result["output"].split("\n")
182
+ for line in lines[:30]:
183
+ print(line)
184
+ if len(lines) > 30:
185
+ print(f"... ({len(lines) - 30} more lines)")
186
+
187
+ # Summary
188
+ print("\n" + "="*60)
189
+ print("SUMMARY")
190
+ print("="*60)
191
+
192
+ if result["passed"]:
193
+ print("[PASS] All tests passed")
194
+ else:
195
+ print("[FAIL] Some tests failed")
196
+ if result["error"]:
197
+ print(f"Error: {result['error'][:200]}")
198
+
199
+ if result["tests_run"] > 0:
200
+ print(f"Tests: {result['tests_run']} total, {result['tests_passed']} passed, {result['tests_failed']} failed")
201
+
202
+ output = {
203
+ "script": "test_runner",
204
+ "project": str(project_path),
205
+ "type": test_info["type"],
206
+ "framework": test_info["framework"],
207
+ "tests_run": result["tests_run"],
208
+ "tests_passed": result["tests_passed"],
209
+ "tests_failed": result["tests_failed"],
210
+ "passed": result["passed"]
211
+ }
212
+
213
+ print("\n" + json.dumps(output, indent=2))
214
+
215
+ sys.exit(0 if result["passed"] else 1)
216
+
217
+
218
+ if __name__ == "__main__":
219
+ main()
@@ -0,0 +1,276 @@
1
+ ---
2
+ name: vulnerability-scanner
3
+ description: 高级漏洞分析原则。覆盖 OWASP 2025、供应链安全、攻击面建模与风险优先级排序。
4
+ allowed-tools: Read, Glob, Grep, Bash
5
+ ---
6
+
7
+ # 漏洞扫描与分析
8
+
9
+ > 像攻击者一样思考,像专家一样防守。保持对 2025 威胁态势的感知。
10
+
11
+ ## 🔧 运行时脚本
12
+
13
+ **用于自动化验证:**
14
+
15
+ | 脚本 | 用途 | 用法 |
16
+ |------|------|------|
17
+ | `scripts/security_scan.py` | 验证安全原则是否已落地 | `python scripts/security_scan.py <project_path>` |
18
+
19
+ ## 📋 参考文件
20
+
21
+ | 文件 | 用途 |
22
+ |------|------|
23
+ | [checklists.md](checklists.md) | OWASP Top 10、认证、API、数据保护检查清单 |
24
+
25
+ ---
26
+
27
+ ## 1. 安全专家思维
28
+
29
+ ### 核心原则
30
+
31
+ | 原则 | 应用 |
32
+ |------|------|
33
+ | **Assume Breach(假设已失陷)** | 按“攻击者已在内网”来设计 |
34
+ | **Zero Trust(零信任)** | 永不默认信任,始终验证 |
35
+ | **Defense in Depth(纵深防御)** | 多层防护,避免单点失败 |
36
+ | **Least Privilege(最小权限)** | 仅授予必要访问权限 |
37
+ | **Fail Secure(安全失败)** | 出错时默认拒绝访问 |
38
+
39
+ ### 威胁建模问题
40
+
41
+ 开始扫描前先问:
42
+ 1. 我们要保护什么?(Assets 资产)
43
+ 2. 谁会攻击我们?(Threat Actors 威胁主体)
44
+ 3. 他们会如何攻击?(Attack Vectors 攻击向量)
45
+ 4. 影响是什么?(Business Risk 业务风险)
46
+
47
+ ---
48
+
49
+ ## 2. OWASP Top 10:2025
50
+
51
+ ### 风险类别
52
+
53
+ | 编号 | 类别 | 关注点 |
54
+ |------|------|--------|
55
+ | **A01** | 访问控制失效(Broken Access Control) | 谁能访问什么?IDOR、SSRF |
56
+ | **A02** | 安全配置错误(Security Misconfiguration) | 默认配置、Header(响应头)、暴露服务 |
57
+ | **A03** | 软件供应链安全 🆕(Software Supply Chain) | 依赖、CI/CD、构建完整性 |
58
+ | **A04** | 密码学失效(Cryptographic Failures) | 弱加密、密钥暴露 |
59
+ | **A05** | 注入(Injection) | 用户输入是否可进入系统命令 |
60
+ | **A06** | 不安全设计(Insecure Design) | 架构层缺陷 |
61
+ | **A07** | 认证失效(Authentication Failures) | 会话与凭据管理 |
62
+ | **A08** | 完整性失效(Integrity Failures) | 未签名更新、数据篡改 |
63
+ | **A09** | 日志与告警缺失(Logging & Alerting) | 监控盲区、缺少告警 |
64
+ | **A10** | 异常条件处理失效 🆕(Exceptional Conditions) | 错误处理、Fail-open(失效即放行)状态 |
65
+
66
+ ### 2025 关键变化
67
+
68
+ ```
69
+ 2021 → 2025 变化:
70
+ ├── SSRF 并入 A01(访问控制)
71
+ ├── A02 权重提升(云/容器配置)
72
+ ├── A03 新增:供应链(重点)
73
+ ├── A10 新增:异常条件
74
+ └── 重心迁移:根因优先于症状
75
+ ```
76
+
77
+ ---
78
+
79
+ ## 3. 供应链安全(A03)
80
+
81
+ ### 攻击面
82
+
83
+ | 向量 | 风险 | 需要确认的问题 |
84
+ |------|------|----------------|
85
+ | **依赖(Dependencies)** | 恶意包投毒 | 新依赖是否审计? |
86
+ | **锁文件(Lock files)** | 完整性攻击 | 是否已提交并受保护? |
87
+ | **构建流水线(Build pipeline)** | CI/CD 被入侵 | 谁有修改权限? |
88
+ | **包仓库(Registry)** | Typosquatting | 来源是否可信可验证? |
89
+
90
+ ### 防御原则
91
+
92
+ - 校验包完整性(checksum)
93
+ - 锁定版本并审计升级
94
+ - 关键依赖使用私有仓库
95
+ - 对构建产物签名并校验
96
+
97
+ ---
98
+
99
+ ## 4. 攻击面建模
100
+
101
+ ### 需要建模的对象
102
+
103
+ | 类别 | 内容 |
104
+ |------|------|
105
+ | **入口点(Entry Points)** | API、表单、文件上传 |
106
+ | **数据流(Data Flows)** | 输入 → 处理 → 输出 |
107
+ | **信任边界(Trust Boundaries)** | 鉴权/授权校验位置 |
108
+ | **资产(Assets)** | 密钥、PII、业务数据 |
109
+
110
+ ### 优先级矩阵
111
+
112
+ ```
113
+ 风险 = 可能性 × 影响
114
+
115
+ 高影响 + 高可能性 → CRITICAL(严重)
116
+ 高影响 + 低可能性 → HIGH(高)
117
+ 低影响 + 高可能性 → MEDIUM(中)
118
+ 低影响 + 低可能性 → LOW(低)
119
+ ```
120
+
121
+ ---
122
+
123
+ ## 5. 风险优先级排序
124
+
125
+ ### CVSS + 业务上下文
126
+
127
+ | 因素 | 权重 | 问题 |
128
+ |------|------|------|
129
+ | **CVSS Score(评分)** | 基础严重度 | 漏洞本身多严重? |
130
+ | **EPSS Score(利用概率)** | 被利用概率 | 是否正在被利用? |
131
+ | **Asset Value(资产价值)** | 业务权重 | 风险资产价值多高? |
132
+ | **Exposure(暴露面)** | 暴露面 | 是否公网可达? |
133
+
134
+ ### 优先级决策树
135
+
136
+ ```
137
+ 是否正在被利用(EPSS > 0.5)?
138
+ ├── 是 → CRITICAL:立即处理
139
+ └── 否 → 检查 CVSS
140
+ ├── CVSS ≥ 9.0 → HIGH
141
+ ├── CVSS 7.0-8.9 → 结合资产价值评估
142
+ └── CVSS < 7.0 → 排期处理
143
+ ```
144
+
145
+ ---
146
+
147
+ ## 6. 异常条件处理(A10 - New)
148
+
149
+ ### Fail-Open 与 Fail-Closed
150
+
151
+ | 场景 | Fail-Open(不安全) | Fail-Closed(安全) |
152
+ |------|--------------------|---------------------|
153
+ | 鉴权异常 | 允许访问 | 拒绝访问 |
154
+ | 解析失败 | 继续接受输入 | 拒绝输入 |
155
+ | 超时处理 | 无限重试 | 限次后中止 |
156
+
157
+ ### 重点检查项
158
+
159
+ - 全量捕获并吞掉异常的处理器
160
+ - 安全关键操作缺失错误处理
161
+ - 鉴权/授权中的竞态条件(Race Condition)
162
+ - 资源耗尽场景
163
+
164
+ ---
165
+
166
+ ## 7. 扫描方法论
167
+
168
+ ### 分阶段方法
169
+
170
+ ```
171
+ 1. RECONNAISSANCE(侦察)
172
+ └── 理解目标系统
173
+ ├── 技术栈
174
+ ├── 入口点
175
+ └── 数据流
176
+
177
+ 2. DISCOVERY(发现)
178
+ └── 识别潜在问题
179
+ ├── 配置审查
180
+ ├── 依赖分析
181
+ └── 代码模式检索
182
+
183
+ 3. ANALYSIS(分析)
184
+ └── 验证与优先级排序
185
+ ├── 排除误报
186
+ ├── 风险评分
187
+ └── 攻击链映射
188
+
189
+ 4. REPORTING(报告)
190
+ └── 输出可执行结论
191
+ ├── 清晰复现步骤
192
+ ├── 业务影响
193
+ └── 修复建议
194
+ ```
195
+
196
+ ---
197
+
198
+ ## 8. 代码模式分析
199
+
200
+ ### 高风险模式
201
+
202
+ | 模式 | 风险 | 关注点 |
203
+ |------|------|--------|
204
+ | **查询拼接字符串** | 注入风险(Injection) | `"SELECT * FROM " + user_input` |
205
+ | **动态执行代码** | RCE | `eval()`, `exec()`, `Function()` |
206
+ | **不安全反序列化** | RCE | `pickle.loads()`, `unserialize()` |
207
+ | **路径拼接可控** | 路径穿越(Traversal) | 用户输入参与文件路径 |
208
+ | **关闭安全校验** | 多类风险 | `verify=False`, `--insecure` |
209
+
210
+ ### 密钥泄露模式
211
+
212
+ | 类型 | 指标 |
213
+ |------|------|
214
+ | API Keys(密钥) | `api_key`、`apikey`、高熵字符串 |
215
+ | Tokens(令牌) | `token`、`bearer`、`jwt` |
216
+ | Credentials(凭据) | `password`、`secret`、`key` |
217
+ | Cloud(云平台) | `AWS_`、`AZURE_`、`GCP_` 前缀 |
218
+
219
+ ---
220
+
221
+ ## 9. 云安全考量
222
+
223
+ ### 责任共担模型
224
+
225
+ | 层级 | 你负责 | 云厂商负责 |
226
+ |------|--------|------------|
227
+ | 数据(Data) | ✅ | ❌ |
228
+ | 应用(Application) | ✅ | ❌ |
229
+ | 系统/运行时(OS/Runtime) | 视情况而定 | 视情况而定 |
230
+ | 基础设施(Infrastructure) | ❌ | ✅ |
231
+
232
+ ### 云侧专项检查
233
+
234
+ - IAM:是否落实最小权限?
235
+ - 存储:是否存在公开桶?
236
+ - 网络:安全组是否收敛?
237
+ - 密钥:是否使用 secrets manager(密钥管理服务)?
238
+
239
+ ---
240
+
241
+ ## 10. 反模式
242
+
243
+ | ❌ 禁止(Don't) | ✅ 推荐(Do) |
244
+ |-----------------|-------------|
245
+ | 不理解系统就开始扫描 | 先做攻击面建模 |
246
+ | 对每个 CVE 都同级告警 | 按可利用性 + 资产价值排序 |
247
+ | 忽略误报管理 | 维护经验证的基线 |
248
+ | 只修症状不修根因 | 追到根因并修复 |
249
+ | 仅在上线前扫描一次 | 持续扫描 |
250
+ | 盲目信任第三方依赖 | 校验完整性并审计代码 |
251
+
252
+ ---
253
+
254
+ ## 11. 报告编写原则
255
+
256
+ ### 漏洞项结构
257
+
258
+ 每条发现都应回答:
259
+ 1. **What?(是什么)** - 清晰漏洞描述
260
+ 2. **Where?(在哪里)** - 精确位置(文件、行号、端点)
261
+ 3. **Why?(为什么)** - 根因解释
262
+ 4. **Impact?(影响)** - 业务后果
263
+ 5. **How to fix?(怎么修)** - 明确修复方案
264
+
265
+ ### 严重性分级
266
+
267
+ | 严重性 | 标准 |
268
+ |--------|------|
269
+ | **Critical(严重)** | RCE、认证绕过、大规模数据泄露 |
270
+ | **High(高)** | 数据暴露、权限提升 |
271
+ | **Medium(中)** | 影响范围有限且需特定条件 |
272
+ | **Low(低)** | 信息提示/最佳实践类问题 |
273
+
274
+ ---
275
+
276
+ > **牢记:** 漏洞扫描负责“发现问题”,专家思维负责“优先级决策”。始终追问:“攻击者会怎样利用它?”
@@ -0,0 +1,131 @@
1
+ # 安全检查清单
2
+
3
+ > 安全审计的快速参考清单。配合 vulnerability-scanner 原则使用。
4
+
5
+ ---
6
+
7
+ ## OWASP Top 10 审计清单
8
+
9
+ ### A01: 访问控制失效
10
+
11
+ - [ ] 所有受保护路由的授权(Authorization)
12
+ - [ ] 默认拒绝(Deny by default)
13
+ - [ ] 已实现速率限制(Rate limiting)
14
+ - [ ] CORS 配置正确
15
+
16
+ ### A02: 加密失败
17
+
18
+ - [ ] 密码已哈希处理(bcrypt/argon2,cost 12+)
19
+ - [ ] 静态敏感数据已加密
20
+ - [ ] 所有连接使用 TLS 1.2+
21
+ - [ ] 代码/日志中无机密信息(Secrets)
22
+
23
+ ### A03: 注入
24
+
25
+ - [ ] 参数化查询
26
+ - [ ] 所有用户数据进行输入验证
27
+ - [ ] XSS 输出编码
28
+ - [ ] 无 eval() 或动态代码执行
29
+
30
+ ### A04: 不安全设计
31
+
32
+ - [ ] 已完成威胁建模
33
+ - [ ] 已定义安全需求
34
+ - [ ] 业务逻辑已验证
35
+
36
+ ### A05: 安全配置错误
37
+
38
+ - [ ] 已禁用不必要的功能
39
+ - [ ] 错误信息已净化(Sanitized)
40
+ - [ ] 安全响应头(Security headers)已配置
41
+ - [ ] 默认凭据已更改
42
+
43
+ ### A06: 易受攻击的组件
44
+
45
+ - [ ] 依赖项已更新
46
+ - [ ] 无已知漏洞
47
+ - [ ] 移除未使用的依赖项
48
+
49
+ ### A07: 认证失败
50
+
51
+ - [ ] MFA(多因素认证)可用
52
+ - [ ] 注销时会话失效
53
+ - [ ] 已实现会话超时
54
+ - [ ] 暴力破解保护
55
+
56
+ ### A08: 完整性失败
57
+
58
+ - [ ] 依赖项完整性已验证
59
+ - [ ] CI/CD 管道已加固
60
+ - [ ] 更新机制已加固
61
+
62
+ ### A09: 日志记录失败
63
+
64
+ - [ ] 安全事件已记录
65
+ - [ ] 日志受保护
66
+ - [ ] 日志中无敏感数据
67
+ - [ ] 告警已配置
68
+
69
+ ### A10: 服务端请求伪造(SSRF)
70
+
71
+ - [ ] 已实现 URL 验证
72
+ - [ ] 外部调用的允许列表(Allow-list)
73
+ - [ ] 网络分段
74
+
75
+ ---
76
+
77
+ ## 认证检查清单
78
+
79
+ - [ ] 强密码策略
80
+ - [ ] 账户锁定
81
+ - [ ] 安全密码重置
82
+ - [ ] 会话管理
83
+ - [ ] Token(令牌)过期
84
+ - [ ] 注销失效
85
+
86
+ ---
87
+
88
+ ## API 安全检查清单
89
+
90
+ - [ ] 需要认证
91
+ - [ ] 每个端点的授权
92
+ - [ ] 输入验证
93
+ - [ ] 速率限制
94
+ - [ ] 输出净化
95
+ - [ ] 错误处理
96
+
97
+ ---
98
+
99
+ ## 数据保护检查清单
100
+
101
+ - [ ] 静态加密
102
+ - [ ] 传输中加密
103
+ - [ ] 密钥管理
104
+ - [ ] 数据最小化
105
+ - [ ] 安全删除
106
+
107
+ ---
108
+
109
+ ## 安全响应头
110
+
111
+ | 响应头 | 目的 |
112
+ | ----------------------------- | ------------------------------ |
113
+ | **Content-Security-Policy** | XSS 预防 |
114
+ | **X-Content-Type-Options** | MIME 嗅探 |
115
+ | **X-Frame-Options** | 点击劫持(Clickjacking) |
116
+ | **Strict-Transport-Security** | 强制 HTTPS |
117
+ | **Referrer-Policy** | Referrer(引荐来源)控制 |
118
+
119
+ ---
120
+
121
+ ## 快速审计命令
122
+
123
+ | 检查 | 寻找什么 |
124
+ | ---------------- | ------------------------------------ |
125
+ | 代码中的机密信息 | password、api_key、secret |
126
+ | 危险模式 | eval、innerHTML、SQL concat |
127
+ | 依赖项问题 | npm audit、snyk |
128
+
129
+ ---
130
+
131
+ > **用法:** 将相关清单复制到你的 PLAN.md 或安全报告中。