@mrtrinhvn/ag-kit 1.0.10 → 1.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 (218) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/bin/cli.js +62 -0
  4. package/package.json +7 -1
  5. package/template/.agent/rules/GEMINI.md +1 -1
  6. package/template/.agent/skills/regent-orchestrator/SKILL.md +31 -0
  7. package/template/.agent/skills/telegram-bridge/SKILL.md +30 -0
  8. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +0 -26
  9. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +0 -97
  10. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +0 -101
  11. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +0 -31
  12. package/.agent/.shared/ui-ux-pro-max/data/products.csv +0 -97
  13. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +0 -24
  14. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +0 -45
  15. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  16. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  17. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
  18. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  19. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
  20. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  21. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  22. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +0 -54
  23. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
  24. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  25. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  26. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  27. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +0 -59
  28. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +0 -58
  29. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +0 -101
  30. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  31. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +0 -31
  32. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  33. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  34. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +0 -258
  35. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +0 -1067
  36. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +0 -106
  37. package/.agent/ARCHITECTURE.md +0 -288
  38. package/.agent/agents/backend-specialist.md +0 -263
  39. package/.agent/agents/code-archaeologist.md +0 -106
  40. package/.agent/agents/database-architect.md +0 -226
  41. package/.agent/agents/debugger.md +0 -225
  42. package/.agent/agents/devops-engineer.md +0 -242
  43. package/.agent/agents/documentation-writer.md +0 -104
  44. package/.agent/agents/explorer-agent.md +0 -73
  45. package/.agent/agents/frontend-specialist.md +0 -556
  46. package/.agent/agents/game-developer.md +0 -162
  47. package/.agent/agents/mobile-developer.md +0 -377
  48. package/.agent/agents/orchestrator.md +0 -416
  49. package/.agent/agents/penetration-tester.md +0 -188
  50. package/.agent/agents/performance-optimizer.md +0 -187
  51. package/.agent/agents/product-manager.md +0 -112
  52. package/.agent/agents/product-owner.md +0 -95
  53. package/.agent/agents/project-planner.md +0 -406
  54. package/.agent/agents/qa-automation-engineer.md +0 -103
  55. package/.agent/agents/quant-architect.md +0 -31
  56. package/.agent/agents/security-auditor.md +0 -170
  57. package/.agent/agents/seo-specialist.md +0 -111
  58. package/.agent/agents/test-engineer.md +0 -158
  59. package/.agent/mcp_config.json +0 -24
  60. package/.agent/rules/GEMINI.md +0 -280
  61. package/.agent/scripts/auto_preview.py +0 -148
  62. package/.agent/scripts/checklist.py +0 -217
  63. package/.agent/scripts/session_manager.py +0 -120
  64. package/.agent/scripts/verify_all.py +0 -327
  65. package/.agent/skills/api-patterns/SKILL.md +0 -81
  66. package/.agent/skills/api-patterns/api-style.md +0 -42
  67. package/.agent/skills/api-patterns/auth.md +0 -24
  68. package/.agent/skills/api-patterns/documentation.md +0 -26
  69. package/.agent/skills/api-patterns/graphql.md +0 -41
  70. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  71. package/.agent/skills/api-patterns/response.md +0 -37
  72. package/.agent/skills/api-patterns/rest.md +0 -40
  73. package/.agent/skills/api-patterns/scripts/api_validator.py +0 -211
  74. package/.agent/skills/api-patterns/security-testing.md +0 -122
  75. package/.agent/skills/api-patterns/trpc.md +0 -41
  76. package/.agent/skills/api-patterns/versioning.md +0 -22
  77. package/.agent/skills/app-builder/SKILL.md +0 -75
  78. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  79. package/.agent/skills/app-builder/feature-building.md +0 -53
  80. package/.agent/skills/app-builder/project-detection.md +0 -34
  81. package/.agent/skills/app-builder/scaffolding.md +0 -118
  82. package/.agent/skills/app-builder/tech-stack.md +0 -40
  83. package/.agent/skills/app-builder/templates/SKILL.md +0 -39
  84. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  85. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  86. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  87. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  88. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  89. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  90. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  91. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -82
  92. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -100
  93. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -106
  94. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -101
  95. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  96. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -93
  97. package/.agent/skills/architecture/SKILL.md +0 -55
  98. package/.agent/skills/architecture/context-discovery.md +0 -43
  99. package/.agent/skills/architecture/examples.md +0 -94
  100. package/.agent/skills/architecture/pattern-selection.md +0 -68
  101. package/.agent/skills/architecture/patterns-reference.md +0 -50
  102. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  103. package/.agent/skills/bash-linux/SKILL.md +0 -199
  104. package/.agent/skills/behavioral-modes/SKILL.md +0 -242
  105. package/.agent/skills/brainstorming/SKILL.md +0 -168
  106. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -350
  107. package/.agent/skills/business-ops/SKILL.md +0 -26
  108. package/.agent/skills/clean-code/SKILL.md +0 -202
  109. package/.agent/skills/cli-generator/SKILL.md +0 -48
  110. package/.agent/skills/code-review-checklist/SKILL.md +0 -109
  111. package/.agent/skills/cognitive-session/SKILL.md +0 -28
  112. package/.agent/skills/data-science/SKILL.md +0 -28
  113. package/.agent/skills/database-design/SKILL.md +0 -52
  114. package/.agent/skills/database-design/database-selection.md +0 -43
  115. package/.agent/skills/database-design/indexing.md +0 -39
  116. package/.agent/skills/database-design/migrations.md +0 -48
  117. package/.agent/skills/database-design/optimization.md +0 -36
  118. package/.agent/skills/database-design/orm-selection.md +0 -30
  119. package/.agent/skills/database-design/schema-design.md +0 -56
  120. package/.agent/skills/database-design/scripts/schema_validator.py +0 -172
  121. package/.agent/skills/deployment-procedures/SKILL.md +0 -241
  122. package/.agent/skills/doc.md +0 -177
  123. package/.agent/skills/documentation-templates/SKILL.md +0 -194
  124. package/.agent/skills/frontend-design/SKILL.md +0 -418
  125. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  126. package/.agent/skills/frontend-design/color-system.md +0 -311
  127. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  128. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  129. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +0 -183
  130. package/.agent/skills/frontend-design/scripts/ux_audit.py +0 -722
  131. package/.agent/skills/frontend-design/typography-system.md +0 -345
  132. package/.agent/skills/frontend-design/ux-psychology.md +0 -541
  133. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  134. package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
  135. package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
  136. package/.agent/skills/game-development/SKILL.md +0 -167
  137. package/.agent/skills/game-development/game-art/SKILL.md +0 -185
  138. package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
  139. package/.agent/skills/game-development/game-design/SKILL.md +0 -129
  140. package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
  141. package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
  142. package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
  143. package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
  144. package/.agent/skills/game-development/web-games/SKILL.md +0 -150
  145. package/.agent/skills/geo-fundamentals/SKILL.md +0 -156
  146. package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +0 -289
  147. package/.agent/skills/i18n-localization/SKILL.md +0 -154
  148. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +0 -241
  149. package/.agent/skills/intelligent-routing/SKILL.md +0 -335
  150. package/.agent/skills/knowledge-management/SKILL.md +0 -66
  151. package/.agent/skills/lint-and-validate/SKILL.md +0 -45
  152. package/.agent/skills/lint-and-validate/scripts/lint_runner.py +0 -172
  153. package/.agent/skills/lint-and-validate/scripts/type_coverage.py +0 -173
  154. package/.agent/skills/llm-routing-quirks/SKILL.md +0 -41
  155. package/.agent/skills/mcp-builder/SKILL.md +0 -176
  156. package/.agent/skills/memory-architecture/SKILL.md +0 -107
  157. package/.agent/skills/mini-antigravity-injection/SKILL.md +0 -61
  158. package/.agent/skills/mobile-design/SKILL.md +0 -394
  159. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  160. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  161. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  162. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  163. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  164. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  165. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  166. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  167. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  168. package/.agent/skills/mobile-design/platform-android.md +0 -666
  169. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  170. package/.agent/skills/mobile-design/scripts/mobile_audit.py +0 -670
  171. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  172. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  173. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  174. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  175. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  176. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  177. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  178. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  179. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  180. package/.agent/skills/nextjs-react-expert/9-cache-components.md +0 -103
  181. package/.agent/skills/nextjs-react-expert/SKILL.md +0 -267
  182. package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +0 -222
  183. package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +0 -252
  184. package/.agent/skills/nodejs-best-practices/SKILL.md +0 -333
  185. package/.agent/skills/parallel-agents/SKILL.md +0 -175
  186. package/.agent/skills/performance-profiling/SKILL.md +0 -143
  187. package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +0 -76
  188. package/.agent/skills/plan-writing/SKILL.md +0 -153
  189. package/.agent/skills/powershell-windows/SKILL.md +0 -167
  190. package/.agent/skills/product-management/SKILL.md +0 -30
  191. package/.agent/skills/python-patterns/SKILL.md +0 -441
  192. package/.agent/skills/red-team-tactics/SKILL.md +0 -199
  193. package/.agent/skills/rust-pro/SKILL.md +0 -176
  194. package/.agent/skills/seo-fundamentals/SKILL.md +0 -129
  195. package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +0 -219
  196. package/.agent/skills/server-management/SKILL.md +0 -161
  197. package/.agent/skills/systematic-debugging/SKILL.md +0 -120
  198. package/.agent/skills/tailwind-patterns/SKILL.md +0 -269
  199. package/.agent/skills/tdd-workflow/SKILL.md +0 -148
  200. package/.agent/skills/testing-patterns/SKILL.md +0 -178
  201. package/.agent/skills/testing-patterns/scripts/test_runner.py +0 -219
  202. package/.agent/skills/vulnerability-scanner/SKILL.md +0 -276
  203. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
  204. package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +0 -458
  205. package/.agent/skills/web-design-guidelines/SKILL.md +0 -57
  206. package/.agent/skills/webapp-testing/SKILL.md +0 -187
  207. package/.agent/skills/webapp-testing/scripts/playwright_runner.py +0 -173
  208. package/.agent/workflows/brainstorm.md +0 -113
  209. package/.agent/workflows/create.md +0 -59
  210. package/.agent/workflows/debug.md +0 -103
  211. package/.agent/workflows/deploy.md +0 -176
  212. package/.agent/workflows/enhance.md +0 -63
  213. package/.agent/workflows/orchestrate.md +0 -237
  214. package/.agent/workflows/plan.md +0 -89
  215. package/.agent/workflows/preview.md +0 -81
  216. package/.agent/workflows/status.md +0 -86
  217. package/.agent/workflows/test.md +0 -144
  218. package/.agent/workflows/ui-ux-pro-max.md +0 -296
@@ -1,172 +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
- 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_project_type(project_path: Path) -> dict:
28
- """Detect project type and available linters."""
29
- result = {
30
- "type": "unknown",
31
- "linters": []
32
- }
33
-
34
- # Node.js project
35
- package_json = project_path / "package.json"
36
- if package_json.exists():
37
- result["type"] = "node"
38
- try:
39
- pkg = json.loads(package_json.read_text(encoding='utf-8'))
40
- scripts = pkg.get("scripts", {})
41
- deps = {**pkg.get("dependencies", {}), **pkg.get("devDependencies", {})}
42
-
43
- # Check for lint script
44
- if "lint" in scripts:
45
- result["linters"].append({"name": "npm lint", "cmd": ["npm", "run", "lint"]})
46
- elif "eslint" in deps:
47
- result["linters"].append({"name": "eslint", "cmd": ["npx", "eslint", "."]})
48
-
49
- # Check for TypeScript
50
- if "typescript" in deps or (project_path / "tsconfig.json").exists():
51
- result["linters"].append({"name": "tsc", "cmd": ["npx", "tsc", "--noEmit"]})
52
-
53
- except:
54
- pass
55
-
56
- # Python project
57
- if (project_path / "pyproject.toml").exists() or (project_path / "requirements.txt").exists():
58
- result["type"] = "python"
59
-
60
- # Check for ruff
61
- result["linters"].append({"name": "ruff", "cmd": ["ruff", "check", "."]})
62
-
63
- # Check for mypy
64
- if (project_path / "mypy.ini").exists() or (project_path / "pyproject.toml").exists():
65
- result["linters"].append({"name": "mypy", "cmd": ["mypy", "."]})
66
-
67
- return result
68
-
69
-
70
- def run_linter(linter: dict, cwd: Path) -> dict:
71
- """Run a single linter and return results."""
72
- result = {
73
- "name": linter["name"],
74
- "passed": False,
75
- "output": "",
76
- "error": ""
77
- }
78
-
79
- try:
80
- proc = subprocess.run(
81
- linter["cmd"],
82
- cwd=str(cwd),
83
- capture_output=True,
84
- text=True,
85
- encoding='utf-8',
86
- errors='replace',
87
- timeout=120
88
- )
89
-
90
- result["output"] = proc.stdout[:2000] if proc.stdout else ""
91
- result["error"] = proc.stderr[:500] if proc.stderr else ""
92
- result["passed"] = proc.returncode == 0
93
-
94
- except FileNotFoundError:
95
- result["error"] = f"Command not found: {linter['cmd'][0]}"
96
- except subprocess.TimeoutExpired:
97
- result["error"] = "Timeout after 120s"
98
- except Exception as e:
99
- result["error"] = str(e)
100
-
101
- return result
102
-
103
-
104
- def main():
105
- project_path = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve()
106
-
107
- print(f"\n{'='*60}")
108
- print(f"[LINT RUNNER] Unified Linting")
109
- print(f"{'='*60}")
110
- print(f"Project: {project_path}")
111
- print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
112
-
113
- # Detect project type
114
- project_info = detect_project_type(project_path)
115
- print(f"Type: {project_info['type']}")
116
- print(f"Linters: {len(project_info['linters'])}")
117
- print("-"*60)
118
-
119
- if not project_info["linters"]:
120
- print("No linters found for this project type.")
121
- output = {
122
- "script": "lint_runner",
123
- "project": str(project_path),
124
- "type": project_info["type"],
125
- "checks": [],
126
- "passed": True,
127
- "message": "No linters configured"
128
- }
129
- print(json.dumps(output, indent=2))
130
- sys.exit(0)
131
-
132
- # Run each linter
133
- results = []
134
- all_passed = True
135
-
136
- for linter in project_info["linters"]:
137
- print(f"\nRunning: {linter['name']}...")
138
- result = run_linter(linter, project_path)
139
- results.append(result)
140
-
141
- if result["passed"]:
142
- print(f" [PASS] {linter['name']}")
143
- else:
144
- print(f" [FAIL] {linter['name']}")
145
- if result["error"]:
146
- print(f" Error: {result['error'][:200]}")
147
- all_passed = False
148
-
149
- # Summary
150
- print("\n" + "="*60)
151
- print("SUMMARY")
152
- print("="*60)
153
-
154
- for r in results:
155
- icon = "[PASS]" if r["passed"] else "[FAIL]"
156
- print(f"{icon} {r['name']}")
157
-
158
- output = {
159
- "script": "lint_runner",
160
- "project": str(project_path),
161
- "type": project_info["type"],
162
- "checks": results,
163
- "passed": all_passed
164
- }
165
-
166
- print("\n" + json.dumps(output, indent=2))
167
-
168
- sys.exit(0 if all_passed else 1)
169
-
170
-
171
- if __name__ == "__main__":
172
- main()
@@ -1,173 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Type Coverage Checker - Measures TypeScript/Python type coverage.
4
- Identifies untyped functions, any usage, and type safety issues.
5
- """
6
- import sys
7
- import re
8
- import subprocess
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
- def check_typescript_coverage(project_path: Path) -> dict:
19
- """Check TypeScript type coverage."""
20
- issues = []
21
- passed = []
22
- stats = {'any_count': 0, 'untyped_functions': 0, 'total_functions': 0}
23
-
24
- ts_files = list(project_path.rglob("*.ts")) + list(project_path.rglob("*.tsx"))
25
- ts_files = [f for f in ts_files if 'node_modules' not in str(f) and '.d.ts' not in str(f)]
26
-
27
- if not ts_files:
28
- return {'type': 'typescript', 'files': 0, 'passed': [], 'issues': ["[!] No TypeScript files found"], 'stats': stats}
29
-
30
- for file_path in ts_files[:30]: # Limit
31
- try:
32
- content = file_path.read_text(encoding='utf-8', errors='ignore')
33
-
34
- # Count 'any' usage
35
- any_matches = re.findall(r':\s*any\b', content)
36
- stats['any_count'] += len(any_matches)
37
-
38
- # Find functions without return types
39
- # function name(params) { - no return type
40
- untyped = re.findall(r'function\s+\w+\s*\([^)]*\)\s*{', content)
41
- # Arrow functions without types: const fn = (x) => or (x) =>
42
- untyped += re.findall(r'=\s*\([^:)]*\)\s*=>', content)
43
- stats['untyped_functions'] += len(untyped)
44
-
45
- # Count typed functions
46
- typed = re.findall(r'function\s+\w+\s*\([^)]*\)\s*:\s*\w+', content)
47
- typed += re.findall(r':\s*\([^)]*\)\s*=>\s*\w+', content)
48
- stats['total_functions'] += len(typed) + len(untyped)
49
-
50
- except Exception:
51
- continue
52
-
53
- # Analyze results
54
- if stats['any_count'] == 0:
55
- passed.append("[OK] No 'any' types found")
56
- elif stats['any_count'] <= 5:
57
- issues.append(f"[!] {stats['any_count']} 'any' types found (acceptable)")
58
- else:
59
- issues.append(f"[X] {stats['any_count']} 'any' types found (too many)")
60
-
61
- if stats['total_functions'] > 0:
62
- typed_ratio = (stats['total_functions'] - stats['untyped_functions']) / stats['total_functions'] * 100
63
- if typed_ratio >= 80:
64
- passed.append(f"[OK] Type coverage: {typed_ratio:.0f}%")
65
- elif typed_ratio >= 50:
66
- issues.append(f"[!] Type coverage: {typed_ratio:.0f}% (improve)")
67
- else:
68
- issues.append(f"[X] Type coverage: {typed_ratio:.0f}% (too low)")
69
-
70
- passed.append(f"[OK] Analyzed {len(ts_files)} TypeScript files")
71
-
72
- return {'type': 'typescript', 'files': len(ts_files), 'passed': passed, 'issues': issues, 'stats': stats}
73
-
74
- def check_python_coverage(project_path: Path) -> dict:
75
- """Check Python type hints coverage."""
76
- issues = []
77
- passed = []
78
- stats = {'untyped_functions': 0, 'typed_functions': 0, 'any_count': 0}
79
-
80
- py_files = list(project_path.rglob("*.py"))
81
- py_files = [f for f in py_files if not any(x in str(f) for x in ['venv', '__pycache__', '.git', 'node_modules'])]
82
-
83
- if not py_files:
84
- return {'type': 'python', 'files': 0, 'passed': [], 'issues': ["[!] No Python files found"], 'stats': stats}
85
-
86
- for file_path in py_files[:30]: # Limit
87
- try:
88
- content = file_path.read_text(encoding='utf-8', errors='ignore')
89
-
90
- # Count Any usage
91
- any_matches = re.findall(r':\s*Any\b', content)
92
- stats['any_count'] += len(any_matches)
93
-
94
- # Find functions with type hints
95
- typed_funcs = re.findall(r'def\s+\w+\s*\([^)]*:[^)]+\)', content)
96
- typed_funcs += re.findall(r'def\s+\w+\s*\([^)]*\)\s*->', content)
97
- stats['typed_functions'] += len(typed_funcs)
98
-
99
- # Find functions without type hints
100
- all_funcs = re.findall(r'def\s+\w+\s*\(', content)
101
- stats['untyped_functions'] += len(all_funcs) - len(typed_funcs)
102
-
103
- except Exception:
104
- continue
105
-
106
- total = stats['typed_functions'] + stats['untyped_functions']
107
-
108
- if total > 0:
109
- typed_ratio = stats['typed_functions'] / total * 100
110
- if typed_ratio >= 70:
111
- passed.append(f"[OK] Type hints coverage: {typed_ratio:.0f}%")
112
- elif typed_ratio >= 40:
113
- issues.append(f"[!] Type hints coverage: {typed_ratio:.0f}%")
114
- else:
115
- issues.append(f"[X] Type hints coverage: {typed_ratio:.0f}% (add type hints)")
116
-
117
- if stats['any_count'] == 0:
118
- passed.append("[OK] No 'Any' types found")
119
- elif stats['any_count'] <= 3:
120
- issues.append(f"[!] {stats['any_count']} 'Any' types found")
121
- else:
122
- issues.append(f"[X] {stats['any_count']} 'Any' types found")
123
-
124
- passed.append(f"[OK] Analyzed {len(py_files)} Python files")
125
-
126
- return {'type': 'python', 'files': len(py_files), 'passed': passed, 'issues': issues, 'stats': stats}
127
-
128
- def main():
129
- target = sys.argv[1] if len(sys.argv) > 1 else "."
130
- project_path = Path(target)
131
-
132
- print("\n" + "=" * 60)
133
- print(" TYPE COVERAGE CHECKER")
134
- print("=" * 60 + "\n")
135
-
136
- results = []
137
-
138
- # Check TypeScript
139
- ts_result = check_typescript_coverage(project_path)
140
- if ts_result['files'] > 0:
141
- results.append(ts_result)
142
-
143
- # Check Python
144
- py_result = check_python_coverage(project_path)
145
- if py_result['files'] > 0:
146
- results.append(py_result)
147
-
148
- if not results:
149
- print("[!] No TypeScript or Python files found.")
150
- sys.exit(0)
151
-
152
- # Print results
153
- critical_issues = 0
154
- for result in results:
155
- print(f"\n[{result['type'].upper()}]")
156
- print("-" * 40)
157
- for item in result['passed']:
158
- print(f" {item}")
159
- for item in result['issues']:
160
- print(f" {item}")
161
- if item.startswith("[X]"):
162
- critical_issues += 1
163
-
164
- print("\n" + "=" * 60)
165
- if critical_issues == 0:
166
- print("[OK] TYPE COVERAGE: ACCEPTABLE")
167
- sys.exit(0)
168
- else:
169
- print(f"[X] TYPE COVERAGE: {critical_issues} critical issues")
170
- sys.exit(1)
171
-
172
- if __name__ == "__main__":
173
- main()
@@ -1,41 +0,0 @@
1
- ---
2
- description: "Kinh nghiệm xương máu khi định tuyến LLM: 9Router (Gemini) vs Ollama (Bartowski/Reasoning)"
3
- skills: ["clean-code"]
4
- ---
5
-
6
- # LLM Routing Quirks (Kinh Nghiệm Phẫu Thuật Não LLM)
7
-
8
- Tài liệu này lưu trữ những **chú ý sinh tử (quirks)** khi gọi các model LLM khác nhau trong kiến trúc Antigravity Orchestrator. Nó được đúc kết từ quá trình cày cuốc miệt mài vá lỗi của Quản Đốc AI và Sếp.
9
-
10
- Nếu bạn đang viết Agent hoặc Script gọi LLM, **BẮT BUỘC ĐỌC** để tránh hệ thống bị đơ, văng lỗi JSON hoặc model bị "ngu" đi.
11
-
12
- ---
13
-
14
- ## 1. 9Router & Gemini (Cloud Models - API tương thích OpenAI)
15
-
16
- **Mô hình áp dụng:** `ag/gemini-3-flash`, `ag/gemini-pro-1.5`, v.v.
17
-
18
- ### Các Quy tắc Vàng:
19
- 1. **JSON Format:** ĐƯỢC PHÉP (và nên) sử dụng `response_format: { type: 'json_object' }` để ép model trả về cục JSON chuẩn chỉ. Gemini xử lý JSON format tự nhiên rất tốt.
20
- 2. **Stream Override (Lỗi SSE):** Mặc dù truyền `stream: false`, 9Router đôi khi BỊ LỖI và vẫn trả về luồng Server-Sent Events (SSE) (các dòng `data: {...}\n\ndata: [DONE]`).
21
- 👉 **Cách Fix:** Code call API (`axios.post`) phải luôn chuẩn bị sẵn tinh thần parse cả 2 trường hợp: JSON Object bình thường VÀ Chuỗi SSE gộp lại. (Xem hàm `OrchestratorBrain.callAI`).
22
- 3. **Timeout Threshold:** Bắt buộc đặt `timeout` cao (ví dụ: `120000ms` - 2 phút). Đừng set quá thấp (30s), vì proxy API Cloud thường xuyên bị trễ nhịp do routing.
23
-
24
- ---
25
-
26
- ## 2. Ollama & Bartowski (Local Reasoning Models - Chạy Offline)
27
-
28
- **Mô hình áp dụng:** `hf.co/bartowski/nvidia_Orchestrator-8B-GGUF:Q4_K_M`, `DeepSeek-R1`, các model có thẻ `<think>`.
29
-
30
- ### Các Quy tắc Vàng (SINH TỬ):
31
- 1. **🔥 TUYỆT ĐỐI KHÔNG DÙNG TÍNH NĂNG ÉP JSON:** KHÔNG BAO GIỜ truyền `format: "json"` vào request của Ollama đối với các Reasoning Models!
32
- - **Vì sao?** Các reasoning models cần viết tư duy vào thẻ `<think>...</think>` trước khi ra kết quả. Việc ép JSON sẽ làm hệ thống của Ollama cắt gọt thẻ suy nghĩ của nó, khiến model bị "ngăn não", sinh ra ảo giác (hallucination), trả về rác (token rác) hoặc phá hỏng format JSON cuối cùng.
33
- 2. **Xử lý Thẻ `<think>` Thủ Công:** Khi model trả về chuỗi text, ta phải chủ động dùng Regex để bóc mảng `<think>...</think>` ra rồi mới quăng phần còn lại vào `JSON.parse()`.
34
- - Code mài giũa: `str.replace(/<think>[\s\S]*?<\/think>/g, '').trim()`
35
- 3. **Mở Hộp Sọ (Context Window - `num_ctx`):** Mặc định Ollama cấp `num_ctx` rất bé (2048 token) để tiết kiệm VRAM. Với các Task Orchestration quăng cả lịch sử chat và code, **BẮT BUỘC** phải truyền `"options": { "num_ctx": 4096 }` (hoặc 8192) vào `axios.post`. Nếu không, Ollama sẽ ngắt đuôi JSON làm sập hệ thống.
36
- 4. **Tên Model Mặc Định:** Chú ý khi tải model HuggingFace từ Ollama (ví dụ `ollama run hf.co/bartowski/...`), Ollama sẽ giữ NGHIÊM NGẶT toàn bộ đường dẫn làm `ID Model`. Luôn truyền full tên vào trường `model` (ví dụ `model: "hf.co/bartowski/nvidia_Orchestrator-8B-GGUF:Q4_K_M"`).
37
-
38
- ---
39
-
40
- ## 3. Khuyến nghị Tự Chữa Lành (Mini-Antigravity Check)
41
- Bất cứ khi nào gọi API nội bộ (để tự sửa mã) và nhận cảnh báo `SKIP Lỗi LLM` (tức 9Router bị câm), hệ thống không được gọi lại chính thằng sụp mạng, mà phải rẽ nhánh BẮN THẲNG LỆNH GỌI OLLAMA LOCALLY (tắt bypass Router) để bảo tồn mạng sống.
@@ -1,176 +0,0 @@
1
- ---
2
- name: mcp-builder
3
- description: MCP (Model Context Protocol) server building principles. Tool design, resource patterns, best practices.
4
- allowed-tools: Read, Write, Edit, Glob, Grep
5
- ---
6
-
7
- # MCP Builder
8
-
9
- > Principles for building MCP servers.
10
-
11
- ---
12
-
13
- ## 1. MCP Overview
14
-
15
- ### What is MCP?
16
-
17
- Model Context Protocol - standard for connecting AI systems with external tools and data sources.
18
-
19
- ### Core Concepts
20
-
21
- | Concept | Purpose |
22
- |---------|---------|
23
- | **Tools** | Functions AI can call |
24
- | **Resources** | Data AI can read |
25
- | **Prompts** | Pre-defined prompt templates |
26
-
27
- ---
28
-
29
- ## 2. Server Architecture
30
-
31
- ### Project Structure
32
-
33
- ```
34
- my-mcp-server/
35
- ├── src/
36
- │ └── index.ts # Main entry
37
- ├── package.json
38
- └── tsconfig.json
39
- ```
40
-
41
- ### Transport Types
42
-
43
- | Type | Use |
44
- |------|-----|
45
- | **Stdio** | Local, CLI-based |
46
- | **SSE** | Web-based, streaming |
47
- | **WebSocket** | Real-time, bidirectional |
48
-
49
- ---
50
-
51
- ## 3. Tool Design Principles
52
-
53
- ### Good Tool Design
54
-
55
- | Principle | Description |
56
- |-----------|-------------|
57
- | Clear name | Action-oriented (get_weather, create_user) |
58
- | Single purpose | One thing well |
59
- | Validated input | Schema with types and descriptions |
60
- | Structured output | Predictable response format |
61
-
62
- ### Input Schema Design
63
-
64
- | Field | Required? |
65
- |-------|-----------|
66
- | Type | Yes - object |
67
- | Properties | Define each param |
68
- | Required | List mandatory params |
69
- | Description | Human-readable |
70
-
71
- ---
72
-
73
- ## 4. Resource Patterns
74
-
75
- ### Resource Types
76
-
77
- | Type | Use |
78
- |------|-----|
79
- | Static | Fixed data (config, docs) |
80
- | Dynamic | Generated on request |
81
- | Template | URI with parameters |
82
-
83
- ### URI Patterns
84
-
85
- | Pattern | Example |
86
- |---------|---------|
87
- | Fixed | `docs://readme` |
88
- | Parameterized | `users://{userId}` |
89
- | Collection | `files://project/*` |
90
-
91
- ---
92
-
93
- ## 5. Error Handling
94
-
95
- ### Error Types
96
-
97
- | Situation | Response |
98
- |-----------|----------|
99
- | Invalid params | Validation error message |
100
- | Not found | Clear "not found" |
101
- | Server error | Generic error, log details |
102
-
103
- ### Best Practices
104
-
105
- - Return structured errors
106
- - Don't expose internal details
107
- - Log for debugging
108
- - Provide actionable messages
109
-
110
- ---
111
-
112
- ## 6. Multimodal Handling
113
-
114
- ### Supported Types
115
-
116
- | Type | Encoding |
117
- |------|----------|
118
- | Text | Plain text |
119
- | Images | Base64 + MIME type |
120
- | Files | Base64 + MIME type |
121
-
122
- ---
123
-
124
- ## 7. Security Principles
125
-
126
- ### Input Validation
127
-
128
- - Validate all tool inputs
129
- - Sanitize user-provided data
130
- - Limit resource access
131
-
132
- ### API Keys
133
-
134
- - Use environment variables
135
- - Don't log secrets
136
- - Validate permissions
137
-
138
- ---
139
-
140
- ## 8. Configuration
141
-
142
- ### Claude Desktop Config
143
-
144
- | Field | Purpose |
145
- |-------|---------|
146
- | command | Executable to run |
147
- | args | Command arguments |
148
- | env | Environment variables |
149
-
150
- ---
151
-
152
- ## 9. Testing
153
-
154
- ### Test Categories
155
-
156
- | Type | Focus |
157
- |------|-------|
158
- | Unit | Tool logic |
159
- | Integration | Full server |
160
- | Contract | Schema validation |
161
-
162
- ---
163
-
164
- ## 10. Best Practices Checklist
165
-
166
- - [ ] Clear, action-oriented tool names
167
- - [ ] Complete input schemas with descriptions
168
- - [ ] Structured JSON output
169
- - [ ] Error handling for all cases
170
- - [ ] Input validation
171
- - [ ] Environment-based configuration
172
- - [ ] Logging for debugging
173
-
174
- ---
175
-
176
- > **Remember:** MCP tools should be simple, focused, and well-documented. The AI relies on descriptions to use them correctly.
@@ -1,107 +0,0 @@
1
- ---
2
- name: memory-architecture
3
- description: >
4
- Hệ thống Bộ nhớ Đồ thị Đa Tầng (Multi-layered Graph Memory) cho Agent.
5
- Hợp nhất giữa Progressive Disclosure (L1, L2, L3) và Temporal Knowledge Graph (Node-Edge).
6
- ---
7
-
8
- # Multi-layered Graph Memory Architecture
9
-
10
- > 🔴 **CRITICAL RULE**: Trí nhớ của Agent không còn là Text phẳng. Nó là một **Đồ thị Tri thức Đa tầng (Graph)** cho phép "Zoom-out" nhìn toàn cảnh và "Zoom-in" đọc chi tiết lõi.
11
-
12
- ---
13
-
14
- ## 1. Nguyên tắc cốt lõi: 3 Tầng Ký ức (L1/L2/L3)
15
-
16
- ```text
17
- L1 (Zoom Out) → session_summary & Core_Nodes — "Toàn cảnh dự án, các khái niệm lõi"
18
- L2 (Mid) → category-indexed & Edges — "Mạng lưới quan hệ, mạch sự kiện"
19
- L3 (Zoom In) → detail_record & Solutions — "Chi tiết lỗi, code snippet gốc"
20
- ```
21
-
22
- ---
23
-
24
- ## 2. Hình thái Dữ liệu cấp thấp (Node-Edge Graph)
25
-
26
- Mọi dữ liệu trong tầng L1/L2/L3 đều được lưu dưới dạng Đồ thị (Graph):
27
-
28
- ### A. NODES (Hạt nhân Kiến thức)
29
- Các khái niệm định danh tĩnh. Vd: `[Node:DB_PORT] => 5432 (Energy: 100)`
30
-
31
- ### B. EDGES / EPISODES (Mạch Câu chuyện)
32
- Luồng sự kiện liên kết. Vd: `[Node:USER] --(muốn mở port)--> [Node:DB_PORT]`
33
-
34
- ### Progressive Disclosure (Tiết kiệm Token):
35
- Thay vì load toàn bộ Memory, hệ thống truy vấn tự động theo dạng Phóng to/Thu nhỏ:
36
- 1. **Search (Zoom Out):** Chỉ lấy mỏ neo 1-2 Node lõi + Quan hệ (L1/L2) (Tốn rất ít token).
37
- 2. **Details (Zoom In):** Nếu AI cần phân tích sâu 1 đoạn code phức tạp, gọi L3 (Token cao hơn nhưng cực kỳ chính xác).
38
-
39
- ---
40
-
41
- ## 3. Vòng đời Trí nhớ (Biocybernetic Lifecycle)
42
-
43
- 1. **Temporal Decay (Phai mờ):** Mỗi Node và Edge có `Energy`. Bị hao hụt tự động mỗi 24h. L1 siêu bền, L3 hao nhanh.
44
- 2. **Reinforcement (Củng cố):** Mỗi lần "bò" (traversal) qua Node, Energy phục hồi.
45
- 3. **Consolidation (Ngủ):** Cứ đêm đến, AI gộp các mạch nhớ L3/L2 rườm rà thành 1 Node L1 khái quát siêu bền.
46
- 4. **Forgetting (Quên lãng):** Node có `Energy < 0` HOẶC mồ côi (không ai gọi tới) sẽ BỊ XOÁ (Quét rác sinh học).
47
-
48
- ---
49
-
50
- ## 4. Bảng Phân loại Khối Lượng Ký ức
51
-
52
- | Target / Kiểu Node | Tầng | Giải thích | Energy Khởi tạo | Mức độ Tự Phân Hủy (Decay) |
53
- |---|---|---|---|---|
54
- | `session_summary` | L1 | Toàn cảnh phiên làm việc | 100 | Lâu dài (Gần như không) |
55
- | `Core_Fact` | L1 | Cấu hình, IP, Convention cốt lõi | 100 | Gần như không |
56
- | `User_Pref` | L2 | Thói quen user | 80 | Cực chậm |
57
- | `project_context` | L2 | Ngữ cảnh dự án hiện tại | 80 | Trung hạn (Cập nhật đổi version) |
58
- | `Episode_Edge` | L2 | "Hôm qua đã làm gì" | 30 | Nhanh (Rất mau phai mờ) |
59
- | `error_solution` | L3 | Bug log + Code fix cụ thể | 50 | Trung bình (Công nghệ đổi -> Xóa) |
60
-
61
- ---
62
-
63
- ## 5. Workflow Tương tác Trí Nhớ (Mô phỏng GraphRAG)
64
-
65
- ### KHI BẮT ĐẦU task mới (Retrieve):
66
- ```text
67
- 1. Bắn 1 tia Vector Search thả mỏ neo vào Đồ thị (Tìm L1/L2).
68
- 2. Khôi phục lại Mạch Câu Chuyện bằng cách "Bò" dọc theo Edges lân cận (BFS).
69
- 3. Nếu cần code chính xác của 1 Bug, gọi lệnh lấy Detail (L3).
70
- ```
71
-
72
- ### KHI KẾT THÚC task (Commit):
73
- ❌ **Sai:** Lưu text rác `memory_save("Fix xong bug X")` vào trong hư không.
74
- ✅ **Đúng:**
75
- ```text
76
- 1. Khởi tạo Node mới: Node[Fix_CORS] = "Thiếu accept headers"
77
- 2. Nối Mạch: Node[Env_Prod] --(gặp lỗi)=> Node[Fix_CORS]
78
- 3. (Tùy chọn) Gắn thêm Detail record vào L3 nếu fix cực phức tạp cần giữ code snippet.
79
- ```
80
-
81
- ---
82
-
83
- ## 6. Anti-Patterns Kịch Độc
84
-
85
- ```text
86
- ❌ Gọi L3 load toàn bộ chi tiết khi không cần thiết (Tràn token).
87
- ❌ Cố gắng chèn 200 dòng code vào Tên của Node (Node chỉ giữ Context lõi, Code đẩy xuống L3).
88
- ❌ Tạo Node rác không gán Edge quan hệ. (Garbage Collector sẽ chém thẳng tay).
89
- ```
90
-
91
- ---
92
-
93
- ## 7. Giao thức Tự động Dịch chuyển Ký ức (Self-Migration Protocol)
94
-
95
- > **Dành cho các AI Agent hoạt động trong dự án cũ (Legacy Projects) vừa được cập nhật `ag-kit` thông qua `npx`.**
96
-
97
- Khi bạn (AI) nhận thức được mình đang ở trong một dự án đã có sẵn dữ liệu ký ức cũ (chứa trong các file `.jsonl` hoặc `memory.db` phẳng), bạn **CÓ TRÁCH NHIỆM TỰ ĐỘNG** thực hiện quá trình "Memory Migration" (Dịch chuyển Ký ức) mà không cần User yêu cầu, theo các bước sau:
98
-
99
- 1. **Phát hiện:** Dùng lệnh đọc file hoặc MCP để quét nội dung các ký ức cũ trong thư mục `data/memories/` (nếu có).
100
- 2. **Băm nhỏ (Chunking & Entity Extraction):** Phân tích các đoạn log cũ xem chúng nói về chủ đề gì (vd: Lịch sử fix bug, Convention code cũ, Sở thích User).
101
- 3. **Tái cấu trúc (Graph Construction):**
102
- - Từ các đoạn text đó, rút trích ra các `Nodes` cốt lõi mang tính sự thật (Core Facts).
103
- - Thiết lập các `Edges` (Mạch kết nối) mô tả luồng logic giữa các Nodes đó.
104
- 4. **Lưu trữ (Commit):** Lưu bộ Graph vừa tạo vào cơ sở dữ liệu mới (thông qua `GraphMemoryTool` nếu dự án đã hỗ trợ, hoặc lưu ngược lại bằng `memory_save` dưới cấu trúc **Pseudo-Graph** cực đoan: `[Node:A] --[rel]--> [Node:B]` nếu nền tảng chưa được nâng cấp DB SQLite).
105
-
106
- Bằng giao thức này, kiến thức của dự án sẽ KHÔNG BAO GIỜ bị đứt gãy sau khi cập nhật kiến trúc. Mọi ký ức quá khứ sẽ tự động "tiến hóa" thành dạng Đồ thị tương lai!
107
-