autosnippet 3.0.0 → 3.0.2

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 (290) hide show
  1. package/README.md +230 -324
  2. package/bin/api-server.js +1 -1
  3. package/bin/cli.js +204 -244
  4. package/bin/mcp-server.js +5 -3
  5. package/config/knowledge-base.config.js +132 -132
  6. package/dashboard/dist/assets/{icons-CEfgGaZi.js → icons-Cdq22n2i.js} +95 -100
  7. package/dashboard/dist/assets/index-ClkyPkDX.js +133 -0
  8. package/dashboard/dist/assets/index-t4QrJwv1.css +1 -0
  9. package/dashboard/dist/index.html +3 -3
  10. package/lib/bootstrap.js +8 -8
  11. package/lib/cli/AiScanService.js +86 -40
  12. package/lib/cli/KnowledgeSyncService.js +113 -74
  13. package/lib/cli/SetupService.js +439 -277
  14. package/lib/cli/UpgradeService.js +63 -100
  15. package/lib/core/AstAnalyzer.js +276 -597
  16. package/lib/core/ast/ProjectGraph.js +101 -40
  17. package/lib/core/ast/ensure-grammars.js +232 -0
  18. package/lib/core/ast/index.js +115 -0
  19. package/lib/core/ast/lang-dart.js +661 -0
  20. package/lib/core/ast/lang-go.js +530 -0
  21. package/lib/core/ast/lang-java.js +435 -0
  22. package/lib/core/ast/lang-javascript.js +272 -0
  23. package/lib/core/ast/lang-kotlin.js +423 -0
  24. package/lib/core/ast/lang-objc.js +388 -0
  25. package/lib/core/ast/lang-python.js +371 -0
  26. package/lib/core/ast/lang-swift.js +337 -0
  27. package/lib/core/ast/lang-typescript.js +503 -0
  28. package/lib/core/capability/CapabilityProbe.js +18 -9
  29. package/lib/core/constitution/Constitution.js +2 -3
  30. package/lib/core/constitution/ConstitutionValidator.js +65 -24
  31. package/lib/core/discovery/DartDiscoverer.js +534 -0
  32. package/lib/core/discovery/DiscovererRegistry.js +83 -0
  33. package/lib/core/discovery/GenericDiscoverer.js +225 -0
  34. package/lib/core/discovery/GoDiscoverer.js +541 -0
  35. package/lib/core/discovery/JvmDiscoverer.js +506 -0
  36. package/lib/core/discovery/NodeDiscoverer.js +466 -0
  37. package/lib/core/discovery/ProjectDiscoverer.js +93 -0
  38. package/lib/core/discovery/PythonDiscoverer.js +338 -0
  39. package/lib/core/discovery/SpmDiscoverer.js +5 -0
  40. package/lib/core/discovery/index.js +53 -0
  41. package/lib/core/enhancement/EnhancementPack.js +71 -0
  42. package/lib/core/enhancement/EnhancementRegistry.js +47 -0
  43. package/lib/core/enhancement/android-enhancement.js +102 -0
  44. package/lib/core/enhancement/django-enhancement.js +70 -0
  45. package/lib/core/enhancement/fastapi-enhancement.js +63 -0
  46. package/lib/core/enhancement/go-grpc-enhancement.js +152 -0
  47. package/lib/core/enhancement/go-web-enhancement.js +201 -0
  48. package/lib/core/enhancement/index.js +65 -0
  49. package/lib/core/enhancement/node-server-enhancement.js +88 -0
  50. package/lib/core/enhancement/react-enhancement.js +86 -0
  51. package/lib/core/enhancement/spring-enhancement.js +112 -0
  52. package/lib/core/enhancement/vue-enhancement.js +96 -0
  53. package/lib/core/gateway/Gateway.js +8 -9
  54. package/lib/core/gateway/GatewayActionRegistry.js +1 -1
  55. package/lib/core/permission/PermissionManager.js +12 -8
  56. package/lib/domain/index.js +13 -9
  57. package/lib/domain/knowledge/KnowledgeEntry.js +111 -101
  58. package/lib/domain/knowledge/KnowledgeRepository.js +0 -1
  59. package/lib/domain/knowledge/Lifecycle.js +22 -22
  60. package/lib/domain/knowledge/index.js +9 -12
  61. package/lib/domain/knowledge/values/Constraints.js +31 -21
  62. package/lib/domain/knowledge/values/Content.js +21 -13
  63. package/lib/domain/knowledge/values/Quality.js +31 -18
  64. package/lib/domain/knowledge/values/Reasoning.js +20 -12
  65. package/lib/domain/knowledge/values/Relations.js +37 -25
  66. package/lib/domain/knowledge/values/Stats.js +18 -12
  67. package/lib/domain/knowledge/values/index.js +4 -3
  68. package/lib/domain/snippet/Snippet.js +35 -10
  69. package/lib/external/ai/AiFactory.js +48 -16
  70. package/lib/external/ai/AiProvider.js +184 -90
  71. package/lib/external/ai/providers/ClaudeProvider.js +25 -12
  72. package/lib/external/ai/providers/GoogleGeminiProvider.js +59 -30
  73. package/lib/external/ai/providers/MockProvider.js +9 -3
  74. package/lib/external/ai/providers/OpenAiProvider.js +51 -29
  75. package/lib/external/mcp/McpServer.js +66 -36
  76. package/lib/external/mcp/errorHandler.js +23 -11
  77. package/lib/external/mcp/handlers/LanguageExtensions.js +138 -53
  78. package/lib/external/mcp/handlers/TargetClassifier.js +52 -16
  79. package/lib/external/mcp/handlers/bootstrap/pipeline/BootstrapSnapshot.js +81 -20
  80. package/lib/external/mcp/handlers/bootstrap/pipeline/EpisodicMemory.js +71 -42
  81. package/lib/external/mcp/handlers/bootstrap/pipeline/IncrementalBootstrap.js +9 -17
  82. package/lib/external/mcp/handlers/bootstrap/pipeline/ToolResultCache.js +14 -9
  83. package/lib/external/mcp/handlers/bootstrap/pipeline/dimension-context.js +15 -7
  84. package/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +352 -153
  85. package/lib/external/mcp/handlers/bootstrap/pipeline/tier-scheduler.js +52 -12
  86. package/lib/external/mcp/handlers/bootstrap/skills.js +143 -39
  87. package/lib/external/mcp/handlers/bootstrap.js +691 -168
  88. package/lib/external/mcp/handlers/browse.js +66 -22
  89. package/lib/external/mcp/handlers/candidate.js +118 -35
  90. package/lib/external/mcp/handlers/consolidated.js +49 -17
  91. package/lib/external/mcp/handlers/guard.js +104 -39
  92. package/lib/external/mcp/handlers/knowledge.js +60 -36
  93. package/lib/external/mcp/handlers/search.js +43 -14
  94. package/lib/external/mcp/handlers/skill.js +120 -45
  95. package/lib/external/mcp/handlers/structure.js +240 -86
  96. package/lib/external/mcp/handlers/system.js +42 -12
  97. package/lib/external/mcp/handlers/wiki.js +58 -33
  98. package/lib/external/mcp/tools.js +306 -123
  99. package/lib/http/HttpServer.js +72 -47
  100. package/lib/http/middleware/RateLimiter.js +5 -3
  101. package/lib/http/middleware/errorHandler.js +6 -1
  102. package/lib/http/middleware/requestLogger.js +14 -3
  103. package/lib/http/middleware/roleResolver.js +30 -23
  104. package/lib/http/routes/ai.js +387 -265
  105. package/lib/http/routes/auth.js +81 -61
  106. package/lib/http/routes/candidates.js +430 -320
  107. package/lib/http/routes/commands.js +289 -189
  108. package/lib/http/routes/extract.js +158 -125
  109. package/lib/http/routes/guardRules.js +309 -217
  110. package/lib/http/routes/knowledge.js +213 -154
  111. package/lib/http/routes/modules.js +578 -0
  112. package/lib/http/routes/monitoring.js +6 -6
  113. package/lib/http/routes/recipes.js +104 -93
  114. package/lib/http/routes/search.js +361 -305
  115. package/lib/http/routes/skills.js +145 -98
  116. package/lib/http/routes/snippets.js +42 -30
  117. package/lib/http/routes/spm.js +3 -405
  118. package/lib/http/routes/violations.js +113 -93
  119. package/lib/http/routes/wiki.js +211 -170
  120. package/lib/http/utils/routeHelpers.js +3 -1
  121. package/lib/http/utils/sse-sessions.js +16 -6
  122. package/lib/http/utils/sse.js +15 -5
  123. package/lib/infrastructure/audit/AuditLogger.js +5 -2
  124. package/lib/infrastructure/audit/AuditStore.js +10 -7
  125. package/lib/infrastructure/cache/CacheService.js +3 -1
  126. package/lib/infrastructure/cache/GraphCache.js +8 -4
  127. package/lib/infrastructure/cache/UnifiedCacheAdapter.js +1 -1
  128. package/lib/infrastructure/config/ConfigLoader.js +9 -5
  129. package/lib/infrastructure/config/Defaults.js +30 -10
  130. package/lib/infrastructure/config/Paths.js +28 -8
  131. package/lib/infrastructure/config/TriggerSymbol.js +22 -10
  132. package/lib/infrastructure/database/DatabaseConnection.js +15 -10
  133. package/lib/infrastructure/database/migrations/001_initial_schema.js +0 -1
  134. package/lib/infrastructure/external/ClipboardManager.js +6 -2
  135. package/lib/infrastructure/external/NativeUi.js +50 -43
  136. package/lib/infrastructure/external/OpenBrowser.js +14 -17
  137. package/lib/infrastructure/external/XcodeAutomation.js +14 -258
  138. package/lib/infrastructure/logging/Logger.js +46 -30
  139. package/lib/infrastructure/monitoring/ErrorTracker.js +7 -5
  140. package/lib/infrastructure/monitoring/PerformanceMonitor.js +12 -4
  141. package/lib/infrastructure/paths/HeaderResolver.js +25 -9
  142. package/lib/infrastructure/paths/PathFinder.js +34 -12
  143. package/lib/infrastructure/plugin/PluginManager.js +26 -8
  144. package/lib/infrastructure/realtime/RealtimeService.js +2 -2
  145. package/lib/infrastructure/vector/Chunker.js +22 -7
  146. package/lib/infrastructure/vector/IndexingPipeline.js +46 -22
  147. package/lib/infrastructure/vector/JsonVectorAdapter.js +90 -53
  148. package/lib/infrastructure/vector/VectorStore.js +28 -10
  149. package/lib/injection/ServiceContainer.js +247 -93
  150. package/lib/platform/ios/index.js +63 -0
  151. package/lib/platform/ios/routes/spm.js +437 -0
  152. package/lib/platform/ios/snippet/PlaceholderConverter.js +55 -0
  153. package/lib/platform/ios/snippet/XcodeCodec.js +112 -0
  154. package/lib/{service → platform/ios}/spm/DependencyGraph.js +41 -17
  155. package/lib/{service → platform/ios}/spm/PackageSwiftParser.js +41 -14
  156. package/lib/{service → platform/ios}/spm/PolicyEngine.js +9 -4
  157. package/lib/platform/ios/spm/SpmDiscoverer.js +122 -0
  158. package/lib/{service → platform/ios}/spm/SpmService.js +385 -127
  159. package/lib/{service/automation → platform/ios/xcode}/SaveEventFilter.js +8 -7
  160. package/lib/platform/ios/xcode/XcodeAutomation.js +350 -0
  161. package/lib/{service/automation → platform/ios/xcode}/XcodeIntegration.js +325 -145
  162. package/lib/repository/base/BaseRepository.js +7 -9
  163. package/lib/repository/knowledge/KnowledgeRepository.impl.js +98 -75
  164. package/lib/repository/token/TokenUsageStore.js +4 -2
  165. package/lib/service/automation/ActionPipeline.js +1 -1
  166. package/lib/service/automation/AutomationOrchestrator.js +8 -4
  167. package/lib/service/automation/ContextCollector.js +7 -5
  168. package/lib/service/automation/DirectiveDetector.js +23 -16
  169. package/lib/service/automation/FileWatcher.js +112 -56
  170. package/lib/service/automation/TriggerResolver.js +6 -4
  171. package/lib/service/automation/handlers/AlinkHandler.js +24 -12
  172. package/lib/service/automation/handlers/CreateHandler.js +19 -20
  173. package/lib/service/automation/handlers/DraftHandler.js +14 -8
  174. package/lib/service/automation/handlers/GuardHandler.js +93 -63
  175. package/lib/service/automation/handlers/HeaderHandler.js +1 -6
  176. package/lib/service/automation/handlers/SearchHandler.js +155 -88
  177. package/lib/service/bootstrap/BootstrapTaskManager.js +77 -35
  178. package/lib/service/candidate/SimilarityService.js +25 -9
  179. package/lib/service/chat/AnalystAgent.js +50 -24
  180. package/lib/service/chat/CandidateGuardrail.js +143 -17
  181. package/lib/service/chat/ChatAgent.js +759 -243
  182. package/lib/service/chat/ContextWindow.js +116 -71
  183. package/lib/service/chat/ConversationStore.js +77 -36
  184. package/lib/service/chat/EpisodicConsolidator.js +47 -23
  185. package/lib/service/chat/HandoffProtocol.js +98 -22
  186. package/lib/service/chat/Memory.js +34 -14
  187. package/lib/service/chat/ProducerAgent.js +40 -20
  188. package/lib/service/chat/ProjectSemanticMemory.js +109 -78
  189. package/lib/service/chat/ReasoningLayer.js +148 -70
  190. package/lib/service/chat/ReasoningTrace.js +44 -32
  191. package/lib/service/chat/TaskPipeline.js +39 -19
  192. package/lib/service/chat/ToolRegistry.js +48 -29
  193. package/lib/service/chat/WorkingMemory.js +44 -18
  194. package/lib/service/chat/tools.js +1096 -494
  195. package/lib/service/context/RecipeExtractor.js +132 -51
  196. package/lib/service/cursor/CursorDeliveryPipeline.js +82 -37
  197. package/lib/service/cursor/KnowledgeCompressor.js +25 -22
  198. package/lib/service/cursor/RulesGenerator.js +13 -7
  199. package/lib/service/cursor/SkillsSyncer.js +77 -27
  200. package/lib/service/cursor/TokenBudget.js +2 -2
  201. package/lib/service/cursor/TopicClassifier.js +54 -20
  202. package/lib/service/guard/ComplianceReporter.js +55 -43
  203. package/lib/service/guard/ExclusionManager.js +67 -29
  204. package/lib/service/guard/GuardCheckEngine.js +381 -86
  205. package/lib/service/guard/GuardFeedbackLoop.js +22 -10
  206. package/lib/service/guard/GuardService.js +29 -19
  207. package/lib/service/guard/RuleLearner.js +55 -23
  208. package/lib/service/guard/SourceFileCollector.js +27 -20
  209. package/lib/service/guard/ViolationsStore.js +43 -38
  210. package/lib/service/knowledge/CodeEntityGraph.js +147 -82
  211. package/lib/service/knowledge/ConfidenceRouter.js +12 -10
  212. package/lib/service/knowledge/KnowledgeFileWriter.js +147 -56
  213. package/lib/service/knowledge/KnowledgeGraphService.js +81 -34
  214. package/lib/service/knowledge/KnowledgeService.js +222 -112
  215. package/lib/service/module/ModuleService.js +969 -0
  216. package/lib/service/quality/FeedbackCollector.js +27 -15
  217. package/lib/service/quality/QualityScorer.js +78 -24
  218. package/lib/service/recipe/RecipeCandidateValidator.js +110 -44
  219. package/lib/service/recipe/RecipeParser.js +78 -45
  220. package/lib/service/search/CoarseRanker.js +43 -28
  221. package/lib/service/search/CrossEncoderReranker.js +32 -21
  222. package/lib/service/search/InvertedIndex.js +21 -7
  223. package/lib/service/search/MultiSignalRanker.js +90 -28
  224. package/lib/service/search/RetrievalFunnel.js +45 -24
  225. package/lib/service/search/SearchEngine.js +255 -103
  226. package/lib/service/skills/EventAggregator.js +32 -15
  227. package/lib/service/skills/SignalCollector.js +140 -64
  228. package/lib/service/skills/SkillAdvisor.js +79 -42
  229. package/lib/service/skills/SkillHooks.js +16 -14
  230. package/lib/service/snippet/PlaceholderConverter.js +5 -0
  231. package/lib/service/snippet/SnippetFactory.js +116 -99
  232. package/lib/service/snippet/SnippetInstaller.js +234 -62
  233. package/lib/service/snippet/codecs/SnippetCodec.js +67 -0
  234. package/lib/service/snippet/codecs/VSCodeCodec.js +102 -0
  235. package/lib/service/snippet/codecs/XcodeCodec.js +5 -0
  236. package/lib/service/wiki/WikiGenerator.js +637 -263
  237. package/lib/shared/DimensionCopyRegistry.js +472 -0
  238. package/lib/shared/LanguageService.js +399 -0
  239. package/lib/shared/PathGuard.js +45 -28
  240. package/lib/shared/RecipeReadinessChecker.js +72 -12
  241. package/lib/shared/constants.js +41 -41
  242. package/lib/shared/errors/BaseError.js +2 -2
  243. package/lib/shared/errors/index.js +4 -4
  244. package/lib/shared/similarity.js +25 -8
  245. package/lib/shared/token-utils.js +6 -2
  246. package/lib/shared/utils/common.js +12 -4
  247. package/package.json +49 -13
  248. package/scripts/bench-real-projects.mjs +256 -0
  249. package/scripts/build-native-ui.js +30 -30
  250. package/scripts/clear-old-vector-index.js +5 -35
  251. package/scripts/clear-vector-cache.js +7 -37
  252. package/scripts/collect-test-project-stats.mjs +160 -0
  253. package/scripts/diagnose-mcp.js +41 -32
  254. package/scripts/ensure-parse-package.js +6 -9
  255. package/scripts/generate-recipe-drafts.js +116 -77
  256. package/scripts/init-db.js +3 -20
  257. package/scripts/init-snippets.js +305 -0
  258. package/scripts/init-vector-db.js +173 -170
  259. package/scripts/install-cursor-skill.js +148 -104
  260. package/scripts/install-full.js +8 -21
  261. package/scripts/install-vscode-copilot.js +146 -145
  262. package/scripts/migrate-md-to-knowledge.mjs +139 -151
  263. package/scripts/postinstall-safe.js +5 -17
  264. package/scripts/recipe-audit.js +106 -82
  265. package/scripts/release.js +283 -323
  266. package/scripts/setup-mcp-config.js +60 -52
  267. package/scripts/verify-context-api.js +20 -20
  268. package/skills/autosnippet-analysis/SKILL.md +10 -6
  269. package/skills/autosnippet-candidates/SKILL.md +27 -26
  270. package/skills/autosnippet-coldstart/SKILL.md +555 -38
  271. package/skills/autosnippet-concepts/SKILL.md +349 -337
  272. package/skills/autosnippet-create/SKILL.md +5 -5
  273. package/skills/autosnippet-reference-dart/SKILL.md +543 -0
  274. package/skills/autosnippet-reference-go/SKILL.md +539 -0
  275. package/skills/autosnippet-reference-java/SKILL.md +534 -0
  276. package/skills/autosnippet-reference-jsts/SKILL.md +41 -9
  277. package/skills/autosnippet-reference-kotlin/SKILL.md +526 -0
  278. package/skills/autosnippet-reference-objc/SKILL.md +29 -6
  279. package/skills/autosnippet-reference-python/SKILL.md +800 -0
  280. package/skills/autosnippet-reference-swift/SKILL.md +70 -14
  281. package/skills/autosnippet-structure/SKILL.md +4 -4
  282. package/templates/cursor-rules/autosnippet-conventions.mdc +2 -2
  283. package/templates/recipes-setup/README.md +2 -2
  284. package/templates/recipes-setup/_template.md +1 -1
  285. package/dashboard/dist/assets/index-Bun3ld_J.css +0 -1
  286. package/dashboard/dist/assets/index-_Sk_Dmg3.js +0 -143
  287. package/resources/asd-entry/main.swift +0 -159
  288. package/scripts/build-asd-entry.js +0 -51
  289. package/scripts/init-xcode-snippets.js +0 -311
  290. package/template.json +0 -39
@@ -17,12 +17,20 @@ description: JavaScript/TypeScript 业界最佳实践参考。涵盖类型系统
17
17
  ```json
18
18
  {
19
19
  "title": "TS 模块: 使用 named export,避免 default export",
20
- "code": "// ✅ 使用 named export\nexport class UserService { ... }\nexport function parseConfig(raw: string): Config { ... }\nexport const MAX_RETRY = 3;\n\n// 导入时 — 明确看到导入了什么\nimport { UserService, parseConfig } from './user-service';\n\n// ❌ 避免 default export\nexport default class UserService { ... }\n// 导入时可以随意改名,不利于搜索和重构\nimport Whatever from './user-service';",
20
+ "content": {
21
+ "markdown": "## TS 模块: 使用 named export,避免 default export\n\n### 标准模式\n```typescript\n// ✅ 使用 named export\nexport class UserService { ... }\nexport function parseConfig(raw: string): Config { ... }\nexport const MAX_RETRY = 3;\n\n// 导入时 — 明确看到导入了什么\nimport { UserService, parseConfig } from './user-service';\n\n// ❌ 避免 default export\nexport default class UserService { ... }\n// 导入时可以随意改名,不利于搜索和重构\nimport Whatever from './user-service';\n```",
22
+ "pattern": "// ✅ 使用 named export\nexport class UserService { ... }\nexport function parseConfig(raw: string): Config { ... }\nexport const MAX_RETRY = 3;\n\n// 导入时 — 明确看到导入了什么\nimport { UserService, parseConfig } from './user-service';\n\n// ❌ 避免 default export\nexport default class UserService { ... }\n// 导入时可以随意改名,不利于搜索和重构\nimport Whatever from './user-service';",
23
+ "rationale": "named export 强制导入方使用一致的名称,方便 IDE 自动补全、全局搜索和安全重构"
24
+ },
25
+ "description": "TS 模块: 使用 named export,避免 default export",
26
+ "kind": "rule",
27
+ "doClause": "Apply the TS 模块 pattern as described",
21
28
  "language": "typescript",
29
+ "headers": [],
22
30
  "category": "Tool",
23
31
  "knowledgeType": "code-standard",
32
+ "usageGuide": "### 使用场景\\n触发 `@trigger` 获取TS 模块: 使用 named export,避免 default export的标准实现模式。",
24
33
  "scope": "universal",
25
- "rationale": "named export 强制导入方使用一致的名称,方便 IDE 自动补全、全局搜索和安全重构",
26
34
  "antiPattern": {
27
35
  "bad": "export default function handler() { ... }",
28
36
  "why": "default export 允许导入方任意命名,导致同一模块在不同文件中有不同名称",
@@ -30,7 +38,9 @@ description: JavaScript/TypeScript 业界最佳实践参考。涵盖类型系统
30
38
  },
31
39
  "reasoning": {
32
40
  "whyStandard": "Google TypeScript Style Guide 明确推荐 named export,AirBnb 和社区也倾向于此",
33
- "sources": ["Google TypeScript Style Guide - Exports"],
41
+ "sources": [
42
+ "Google TypeScript Style Guide - Exports"
43
+ ],
34
44
  "confidence": 0.9
35
45
  }
36
46
  }
@@ -107,12 +117,20 @@ const role = user.role || 'user';
107
117
  ```json
108
118
  {
109
119
  "title": "TS 类型: interface 优先于 type alias",
110
- "code": "// ✅ interface — 可扩展、声明可合并、错误信息更清晰\ninterface User {\n id: string;\n name: string;\n email: string;\n}\n\n// ✅ interface 继承\ninterface AdminUser extends User {\n permissions: string[];\n}\n\n// ✅ type 适合: 联合类型、映射类型、元组\ntype Status = 'active' | 'inactive' | 'suspended';\ntype Pair<T> = [T, T];\ntype ReadOnly<T> = { readonly [K in keyof T]: T[K] };\n\n// ❌ 避免: 用 type 定义简单对象结构\ntype User = {\n id: string;\n name: string;\n};",
120
+ "content": {
121
+ "markdown": "## TS 类型: interface 优先于 type alias\n\n### 标准模式\n```typescript\n// ✅ interface — 可扩展、声明可合并、错误信息更清晰\ninterface User {\n id: string;\n name: string;\n email: string;\n}\n\n// ✅ interface 继承\ninterface AdminUser extends User {\n permissions: string[];\n}\n\n// ✅ type 适合: 联合类型、映射类型、元组\ntype Status = 'active' | 'inactive' | 'suspended';\ntype Pair<T> = [T, T];\ntype ReadOnly<T> = { readonly [K in keyof T]: T[K] };\n\n// ❌ 避免: 用 type 定义简单对象结构\ntype User = {\n id: string;\n name: string;\n};\n```",
122
+ "pattern": "// ✅ interface — 可扩展、声明可合并、错误信息更清晰\ninterface User {\n id: string;\n name: string;\n email: string;\n}\n\n// ✅ interface 继承\ninterface AdminUser extends User {\n permissions: string[];\n}\n\n// ✅ type 适合: 联合类型、映射类型、元组\ntype Status = 'active' | 'inactive' | 'suspended';\ntype Pair<T> = [T, T];\ntype ReadOnly<T> = { readonly [K in keyof T]: T[K] };\n\n// ❌ 避免: 用 type 定义简单对象结构\ntype User = {\n id: string;\n name: string;\n};",
123
+ "rationale": "interface 支持声明合并和继承,TypeScript 编译器对 interface 有更好的优化和错误提示"
124
+ },
125
+ "description": "TS 类型: interface 优先于 type alias",
126
+ "kind": "rule",
127
+ "doClause": "Apply the TS 类型 pattern as described",
111
128
  "language": "typescript",
129
+ "headers": [],
112
130
  "category": "Tool",
113
131
  "knowledgeType": "code-standard",
132
+ "usageGuide": "### 使用场景\\n触发 `@trigger` 获取TS 类型: interface 优先于 type alias的标准实现模式。",
114
133
  "scope": "universal",
115
- "rationale": "interface 支持声明合并和继承,TypeScript 编译器对 interface 有更好的优化和错误提示",
116
134
  "antiPattern": {
117
135
  "bad": "type Props = { title: string; onClick: () => void }",
118
136
  "why": "简单对象形状应该用 interface,type 更适合联合/交叉/映射类型",
@@ -120,7 +138,9 @@ const role = user.role || 'user';
120
138
  },
121
139
  "reasoning": {
122
140
  "whyStandard": "Google TypeScript Style Guide: 'use interfaces to define object types, not type aliases'",
123
- "sources": ["Google TypeScript Style Guide - Interfaces vs Type Aliases"],
141
+ "sources": [
142
+ "Google TypeScript Style Guide - Interfaces vs Type Aliases"
143
+ ],
124
144
  "confidence": 0.9
125
145
  }
126
146
  }
@@ -164,12 +184,20 @@ function processInput(input: any): string {
164
184
  ```json
165
185
  {
166
186
  "title": "TS 错误处理: 抛出 Error 子类,不抛字符串",
167
- "code": "// ✅ 自定义 Error 子类\nclass AppError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly statusCode: number = 500\n ) {\n super(message);\n this.name = 'AppError';\n }\n}\n\nclass NotFoundError extends AppError {\n constructor(resource: string, id: string) {\n super(`${resource} not found: ${id}`, 'NOT_FOUND', 404);\n this.name = 'NotFoundError';\n }\n}\n\n// 使用\nasync function getUser(id: string): Promise<User> {\n const user = await db.findUser(id);\n if (!user) throw new NotFoundError('User', id);\n return user;\n}\n\n// 精确 catch\ntry {\n await getUser('123');\n} catch (error) {\n if (error instanceof NotFoundError) {\n res.status(404).json({ error: error.message });\n } else if (error instanceof AppError) {\n res.status(error.statusCode).json({ error: error.message });\n } else {\n throw error; // 未知错误继续向上抛\n }\n}",
187
+ "content": {
188
+ "markdown": "## TS 错误处理: 抛出 Error 子类,不抛字符串\n\n### 标准模式\n```typescript\n// ✅ 自定义 Error 子类\nclass AppError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly statusCode: number = 500\n ) {\n super(message);\n this.name = 'AppError';\n }\n}\n\nclass NotFoundError extends AppError {\n constructor(resource: string, id: string) {\n super(`${resource} not found: ${id}`, 'NOT_FOUND', 404);\n this.name = 'NotFoundError';\n }\n}\n\n// 使用\nasync function getUser(id: string): Promise<User> {\n const user = await db.findUser(id);\n if (!user) throw new NotFoundError('User', id);\n return user;\n}\n\n// 精确 catch\ntry {\n await getUser('123');\n} catch (error) {\n if (error instanceof NotFoundError) {\n res.status(404).json({ error: error.message });\n } else if (error instanceof AppError) {\n res.status(error.statusCode).json({ error: error.message });\n } else {\n throw error; // 未知错误继续向上抛\n }\n}\n```",
189
+ "pattern": "// ✅ 自定义 Error 子类\nclass AppError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly statusCode: number = 500\n ) {\n super(message);\n this.name = 'AppError';\n }\n}\n\nclass NotFoundError extends AppError {\n constructor(resource: string, id: string) {\n super(`${resource} not found: ${id}`, 'NOT_FOUND', 404);\n this.name = 'NotFoundError';\n }\n}\n\n// 使用\nasync function getUser(id: string): Promise<User> {\n const user = await db.findUser(id);\n if (!user) throw new NotFoundError('User', id);\n return user;\n}\n\n// 精确 catch\ntry {\n await getUser('123');\n} catch (error) {\n if (error instanceof NotFoundError) {\n res.status(404).json({ error: error.message });\n } else if (error instanceof AppError) {\n res.status(error.statusCode).json({ error: error.message });\n } else {\n throw error; // 未知错误继续向上抛\n }\n}",
190
+ "rationale": "Error 子类提供 stack trace + instanceof 检查 + 类型安全的额外属性"
191
+ },
192
+ "description": "TS 错误处理: 抛出 Error 子类,不抛字符串",
193
+ "kind": "pattern",
194
+ "doClause": "Apply the TS 错误处理 pattern as described",
168
195
  "language": "typescript",
196
+ "headers": [],
169
197
  "category": "Tool",
170
198
  "knowledgeType": "best-practice",
199
+ "usageGuide": "### 使用场景\\n触发 `@trigger` 获取TS 错误处理: 抛出 Error 子类,不抛字符串的标准实现模式。",
171
200
  "scope": "universal",
172
- "rationale": "Error 子类提供 stack trace + instanceof 检查 + 类型安全的额外属性",
173
201
  "antiPattern": {
174
202
  "bad": "throw 'Something went wrong';",
175
203
  "why": "字符串没有 stack trace,无法用 instanceof 区分,catch 中无法获取结构化信息",
@@ -177,7 +205,10 @@ function processInput(input: any): string {
177
205
  },
178
206
  "reasoning": {
179
207
  "whyStandard": "Google TypeScript Style Guide: 'always throw Error or subclass, never throw string/number'",
180
- "sources": ["Google TypeScript Style Guide - Exceptions", "Node.js Best Practices"],
208
+ "sources": [
209
+ "Google TypeScript Style Guide - Exceptions",
210
+ "Node.js Best Practices"
211
+ ],
181
212
  "confidence": 0.95
182
213
  }
183
214
  }
@@ -436,3 +467,4 @@ const url = baseUrl + '/api/v' + version + '/users/' + userId;
436
467
  - **autosnippet-coldstart**: 完整冷启动流程(本 Skill 的主 Skill)
437
468
  - **autosnippet-reference-swift**: Swift 业界最佳实践参考
438
469
  - **autosnippet-reference-objc**: Objective-C 业界最佳实践参考
470
+ - **autosnippet-reference-dart**: Dart (Flutter) 业界最佳实践参考