autosnippet 1.7.0 → 1.7.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 (307) hide show
  1. package/README.md +33 -23
  2. package/bin/api-server.js +20 -20
  3. package/bin/asd +1 -1
  4. package/bin/asd-cli.js +30 -30
  5. package/bin/cli-commands.js +573 -573
  6. package/bin/cli-helpers.js +232 -232
  7. package/bin/create-snippet.js +410 -410
  8. package/bin/dashboard/helpers.js +6 -6
  9. package/bin/dashboard/routes/ai.js +195 -173
  10. package/bin/dashboard/routes/candidates.js +66 -66
  11. package/bin/dashboard/routes/commands.js +34 -34
  12. package/bin/dashboard/routes/core.js +171 -171
  13. package/bin/dashboard/routes/extract.js +153 -153
  14. package/bin/dashboard/routes/guard.js +94 -94
  15. package/bin/dashboard/routes/index.js +11 -11
  16. package/bin/dashboard/routes/recipes.js +226 -257
  17. package/bin/dashboard/routes/search.js +903 -891
  18. package/bin/dashboard/routes/snippets.js +97 -124
  19. package/bin/dashboard/routes/spm.js +146 -146
  20. package/bin/dashboard-server.js +196 -196
  21. package/bin/init-spec.js +70 -70
  22. package/checksums.json +10 -10
  23. package/dashboard/dist/assets/axios-D5GkNzM3.js +6 -0
  24. package/dashboard/dist/assets/index-CEIgT22d.css +1 -0
  25. package/dashboard/dist/assets/index-PaYWyIXW.js +56 -0
  26. package/dashboard/dist/assets/react-markdown-7bJxN3JQ.js +1 -0
  27. package/dashboard/dist/assets/{markdown-YurNruXx.js → syntax-highlighter-CeRnirGv.js} +5 -5
  28. package/dashboard/dist/assets/vendor-DH6lfeAo.js +527 -0
  29. package/dashboard/dist/assets/yaml-qRaU8Ldn.js +1 -0
  30. package/dashboard/dist/index.html +7 -4
  31. package/lib/agent/AdvancedCacheLayer.js +277 -277
  32. package/lib/agent/Agent.js +228 -228
  33. package/lib/agent/AgentCoordinator.js +478 -478
  34. package/lib/agent/BenchmarkRunner.js +290 -290
  35. package/lib/agent/ContextMapper.js +238 -238
  36. package/lib/agent/ConversationManager.js +295 -295
  37. package/lib/agent/ConversationMemory.js +275 -275
  38. package/lib/agent/CrossSessionLearner.js +273 -273
  39. package/lib/agent/DataSourceAdapter.js +242 -242
  40. package/lib/agent/ErrorHandler.js +263 -263
  41. package/lib/agent/IntentClassifier.js +429 -429
  42. package/lib/agent/MemoryManager.js +277 -277
  43. package/lib/agent/ResultFusion.js +392 -392
  44. package/lib/agent/Task.js +154 -154
  45. package/lib/agent/TokenBudget.js +309 -309
  46. package/lib/agent/UserPreferenceManager.js +227 -227
  47. package/lib/agent/agents/GenerateAgent.js +443 -443
  48. package/lib/agent/agents/LearnAgent.js +523 -523
  49. package/lib/agent/agents/LintAgent.js +407 -407
  50. package/lib/agent/agents/SearchAgent.js +437 -437
  51. package/lib/ai/AiFactory.js +167 -167
  52. package/lib/ai/AiProvider.js +25 -25
  53. package/lib/ai/candidateService.js +177 -177
  54. package/lib/ai/headerResolution.js +61 -61
  55. package/lib/ai/jsonParse.js +85 -48
  56. package/lib/ai/providers/ClaudeProvider.js +230 -221
  57. package/lib/ai/providers/GoogleGeminiProvider.js +317 -235
  58. package/lib/ai/providers/MockProvider.js +84 -84
  59. package/lib/ai/providers/OpenAiProvider.js +314 -295
  60. package/lib/ai/vectorStore.js +61 -61
  61. package/lib/api/APIGateway.js +472 -472
  62. package/lib/application/services/CandidateServiceV2.js +139 -139
  63. package/lib/application/services/ContextServiceCompat.js +46 -46
  64. package/lib/application/services/ContextServiceV2.js +171 -171
  65. package/lib/application/services/GuardServiceV2.js +144 -144
  66. package/lib/application/services/InjectionServiceV2.js +204 -204
  67. package/lib/application/services/IntelligentServiceLayer.js +578 -578
  68. package/lib/application/services/RecipeServiceV2.js +267 -267
  69. package/lib/application/services/SearchServiceV2.js +454 -456
  70. package/lib/application/services/SnippetFactoryV2.js +138 -138
  71. package/lib/application/services/SpecRepositoryV2.js +391 -391
  72. package/lib/application/usecases/guard/ValidateGuard.js +47 -47
  73. package/lib/application/usecases/injection/InjectCode.js +42 -42
  74. package/lib/application/usecases/recipe/SearchRecipe.js +30 -30
  75. package/lib/application/usecases/snippet/CreateSnippet.js +43 -43
  76. package/lib/automation/ActionPipeline.js +4 -4
  77. package/lib/automation/AutomationOrchestrator.js +6 -6
  78. package/lib/automation/ContextCollector.js +1 -1
  79. package/lib/automation/OutputApplier.js +1 -1
  80. package/lib/automation/TriggerResolver.js +4 -4
  81. package/lib/bootstrap.js +87 -87
  82. package/lib/business/metrics/MetricsHub.js +205 -205
  83. package/lib/business/recipe/RecipeHub.js +222 -222
  84. package/lib/business/search/SearchHub.js +289 -289
  85. package/lib/candidate/aggregateCandidates.js +53 -53
  86. package/lib/candidate/qualityRules.js +43 -43
  87. package/lib/candidate/similarityService.js +77 -65
  88. package/lib/cli/README.md +41 -41
  89. package/lib/cli/candidateCommand.js +100 -100
  90. package/lib/cli/commands/BaseCommand.js +9 -9
  91. package/lib/cli/embedCommand.js +29 -29
  92. package/lib/cli/searchCommand.js +103 -103
  93. package/lib/cli/statusCommand.js +201 -201
  94. package/lib/cli/utils/cliHelpers.js +23 -23
  95. package/lib/cli/utils/clipboardHandler.js +53 -53
  96. package/lib/cli/utils/presetLoader.js +24 -24
  97. package/lib/context/IndexingPipeline.js +199 -192
  98. package/lib/context/KnowledgeGraph.js +441 -441
  99. package/lib/context/RecipeExtractor.js +583 -583
  100. package/lib/context/adapters/BaseAdapter.js +87 -87
  101. package/lib/context/adapters/JsonAdapter.js +298 -298
  102. package/lib/context/adapters/MilvusAdapter.js +475 -475
  103. package/lib/context/autoEmbed.js +53 -53
  104. package/lib/context/chunker.js +131 -131
  105. package/lib/context/constants.js +35 -35
  106. package/lib/context/index.js +13 -13
  107. package/lib/context/persistence.js +98 -98
  108. package/lib/context/recipe-schema.js +341 -341
  109. package/lib/core/BasePlugin.js +43 -43
  110. package/lib/core/ConfigManager.js +162 -162
  111. package/lib/core/EventBus.js +42 -42
  112. package/lib/core/Logger.js +88 -88
  113. package/lib/core/PluginLoader.js +158 -158
  114. package/lib/core/ServiceContainer.js +86 -86
  115. package/lib/dashboard/README.md +25 -25
  116. package/lib/domain/entities/Agent.js +57 -57
  117. package/lib/domain/entities/Memory.js +53 -53
  118. package/lib/domain/entities/Recipe.js +68 -68
  119. package/lib/domain/entities/Snippet.js +37 -37
  120. package/lib/domain/entities/v2/GuardRuleV2.js +82 -82
  121. package/lib/domain/entities/v2/LegacyAdapter.js +17 -17
  122. package/lib/domain/entities/v2/RecipeV2.js +80 -80
  123. package/lib/domain/entities/v2/SnippetV2.js +76 -76
  124. package/lib/domain/entities/v2/id.js +1 -1
  125. package/lib/guard/EnhancedGuardChecker.js +90 -90
  126. package/lib/guard/GuardExclusionManager.js +103 -103
  127. package/lib/guard/GuardRuleLearner.js +98 -98
  128. package/lib/guard/GuardRuleMigrator.js +148 -148
  129. package/lib/guard/guardRules-iOS.js +30 -30
  130. package/lib/guard/guardRules.js +40 -40
  131. package/lib/guard/guardViolations.js +61 -61
  132. package/lib/guard/ios/audit.js +212 -212
  133. package/lib/guard/ios/codeChecks.js +122 -122
  134. package/lib/guard/ios/defaultRules.js +228 -228
  135. package/lib/guard/ios/staticCheck.js +48 -48
  136. package/lib/guard/ios/utils.js +4 -4
  137. package/lib/infrastructure/cache/CacheHub.js +147 -147
  138. package/lib/infrastructure/cache/CacheStore.js +85 -85
  139. package/lib/infrastructure/cache/vectorCache.js +365 -0
  140. package/lib/infrastructure/config/Defaults.js +40 -40
  141. package/lib/infrastructure/config/Paths.js +69 -69
  142. package/lib/infrastructure/config/TriggerSymbol.js +30 -30
  143. package/lib/infrastructure/error/ErrorManager.js +263 -263
  144. package/lib/infrastructure/errors/AiError.js +20 -20
  145. package/lib/infrastructure/errors/BaseError.js +17 -17
  146. package/lib/infrastructure/errors/ContextError.js +14 -14
  147. package/lib/infrastructure/errors/ErrorHandler.js +52 -52
  148. package/lib/infrastructure/errors/GuardError.js +2 -2
  149. package/lib/infrastructure/errors/InjectionError.js +2 -2
  150. package/lib/infrastructure/errors/ValidationError.js +14 -14
  151. package/lib/infrastructure/external/OpenBrowser.js +84 -84
  152. package/lib/infrastructure/external/spm/DepFixer.js +126 -126
  153. package/lib/infrastructure/external/spm/DepGraphAnalyzer.js +57 -57
  154. package/lib/infrastructure/external/spm/DepGraphService.js +150 -150
  155. package/lib/infrastructure/external/spm/DepPolicyEngine.js +31 -31
  156. package/lib/infrastructure/external/spm/DepReport.js +1 -1
  157. package/lib/infrastructure/external/spm/PackageParserV2.js +176 -176
  158. package/lib/infrastructure/external/spm/SpmDepsServiceV2.js +308 -308
  159. package/lib/infrastructure/external/spm/spmDepMapUpdater.js +410 -410
  160. package/lib/infrastructure/external/spm/swiftParserClient.js +223 -223
  161. package/lib/infrastructure/external/spm/targetScanner.js +192 -192
  162. package/lib/infrastructure/filesystem/FileFinder.js +83 -83
  163. package/lib/infrastructure/logging/LogFactory.js +66 -66
  164. package/lib/infrastructure/logging/LoggerAdapter.js +31 -31
  165. package/lib/infrastructure/logging/index.js +1 -1
  166. package/lib/infrastructure/notification/ClipboardManager.js +93 -93
  167. package/lib/infrastructure/notification/NativeUi.js +160 -160
  168. package/lib/infrastructure/notification/Notifier.js +77 -77
  169. package/lib/infrastructure/paths/PathFinder.js +336 -336
  170. package/lib/infrastructure/paths/ProjectStructure.js +198 -198
  171. package/lib/infrastructure/process/ProcessHub.js +254 -254
  172. package/lib/infrastructure/vector/VectorMath.js +75 -75
  173. package/lib/injection/DirectiveParserV2.js +112 -112
  174. package/lib/injection/ImportDecisionEngine.js +22 -22
  175. package/lib/injection/ImportWriterV2.js +477 -477
  176. package/lib/injection/ModuleResolverV2.js +159 -159
  177. package/lib/injection/injectionService.js +378 -378
  178. package/lib/mcp/envelope.js +10 -10
  179. package/lib/migration/knowledgeBaseMigrator.js +155 -155
  180. package/lib/quality/FeedbackCollector.js +9 -9
  181. package/lib/quality/QualityScorer.js +32 -32
  182. package/lib/quality/config/default.js +10 -10
  183. package/lib/quality/dimensions/CodeQualityDimension.js +12 -12
  184. package/lib/quality/dimensions/CompletenessDimension.js +11 -11
  185. package/lib/quality/dimensions/EngagementDimension.js +9 -9
  186. package/lib/quality/dimensions/FormatDimension.js +9 -9
  187. package/lib/quality/dimensions/MetadataDimension.js +6 -6
  188. package/lib/rateLimit.js +26 -26
  189. package/lib/recipe/parseRecipeMd.js +143 -143
  190. package/lib/recipe/recipeStats.js +115 -115
  191. package/lib/recipe/validateRecipeCandidate.js +35 -35
  192. package/lib/search/MultiSignalRanker.js +348 -348
  193. package/lib/search/bm25.js +25 -25
  194. package/lib/search/coarseRanker.js +122 -122
  195. package/lib/search/contextAnalyzer.js +89 -89
  196. package/lib/search/featureExtractor.js +15 -15
  197. package/lib/search/fineRanker.js +13 -13
  198. package/lib/search/indexStore.js +2 -2
  199. package/lib/search/indexer.js +16 -16
  200. package/lib/search/invertedIndex.js +8 -8
  201. package/lib/search/ltrModel.js +2 -2
  202. package/lib/search/queryOptimizer.js +3 -3
  203. package/lib/search/rankingEngine.js +30 -30
  204. package/lib/search/recallEngine.js +43 -43
  205. package/lib/search/searchCache.js +25 -25
  206. package/lib/search/unifiedSearch.js +122 -124
  207. package/lib/services/agent/AgentManager.js +402 -402
  208. package/lib/services/agent/AgentPool.js +246 -246
  209. package/lib/services/agent/AgentService.js +314 -314
  210. package/lib/services/agent/BaseAgent.js +343 -343
  211. package/lib/services/agent/ChainManager.js +207 -207
  212. package/lib/services/agent/ConversationManager.js +352 -352
  213. package/lib/services/agent/IAgent.js +160 -160
  214. package/lib/services/agent/ITool.js +87 -87
  215. package/lib/services/agent/MemoryStore.js +245 -245
  216. package/lib/services/agent/ToolOrchestrator.js +341 -341
  217. package/lib/services/agent/ToolRegistry.js +350 -350
  218. package/lib/services/agent/agentServiceHelper.js +32 -0
  219. package/lib/services/agent/agents/CodeAgent.js +52 -52
  220. package/lib/services/agent/agents/GuardAgent.js +54 -54
  221. package/lib/services/agent/agents/RecipeAgent.js +56 -54
  222. package/lib/services/agent/agents/SearchAgent.js +48 -47
  223. package/lib/services/ai/AiService.js +438 -301
  224. package/lib/services/ai/BaseAiProvider.js +165 -165
  225. package/lib/services/ai/EXAMPLES.md +265 -265
  226. package/lib/services/ai/IAiProvider.js +88 -88
  227. package/lib/services/ai/LegacyProviderAdapter.js +129 -129
  228. package/lib/services/ai/OpenAiCompatibleProvider.js +235 -235
  229. package/lib/services/ai/ProviderManager.js +204 -204
  230. package/lib/services/context/AdapterManager.js +243 -243
  231. package/lib/services/context/BaseContextAdapter.js +202 -202
  232. package/lib/services/context/ContextService.js +367 -367
  233. package/lib/services/context/IContextAdapter.js +122 -122
  234. package/lib/snippet/MarkerLineV2.js +82 -82
  235. package/lib/snippet/snippetInstaller.js +228 -228
  236. package/lib/watch/DirectiveDetector.js +83 -83
  237. package/lib/watch/FileDebouncer.js +16 -16
  238. package/lib/watch/FileWatchConfig.js +19 -19
  239. package/lib/watch/FileWatchService.js +163 -163
  240. package/lib/watch/fileWatcher.js +2 -2
  241. package/lib/watch/handlers/AlinkHandler.js +29 -29
  242. package/lib/watch/handlers/CreateHandler.js +169 -169
  243. package/lib/watch/handlers/DraftHandler.js +85 -85
  244. package/lib/watch/handlers/GuardHandler.js +143 -143
  245. package/lib/watch/handlers/HeaderHandler.js +33 -33
  246. package/lib/watch/handlers/SearchHandler.js +863 -863
  247. package/lib/writeGuard.js +168 -168
  248. package/lib/xcode-search-cache-fix.js +203 -203
  249. package/package.json +110 -110
  250. package/resources/native-ui/main.swift +10 -89
  251. package/scripts/check-paths.js +178 -178
  252. package/scripts/demo-candidates-submit.js +38 -38
  253. package/scripts/diagnose-mcp.js +28 -28
  254. package/scripts/ensure-parse-package.js +14 -14
  255. package/scripts/generate-checksums.js +24 -24
  256. package/scripts/generate-recipe-drafts.js +68 -68
  257. package/scripts/init-vector-db.js +154 -154
  258. package/scripts/init-xcode-snippets.js +193 -193
  259. package/scripts/install-cursor-skill.js +230 -230
  260. package/scripts/install-full.js +15 -15
  261. package/scripts/install-vscode-copilot.js +306 -336
  262. package/scripts/mcp-server.js +819 -819
  263. package/scripts/migrate-recipes-metadata.js +214 -214
  264. package/scripts/recipe-audit.js +180 -180
  265. package/scripts/recipe-migration-complete.js +295 -295
  266. package/scripts/recipe-migration-diagnose.js +63 -63
  267. package/scripts/release.js +445 -0
  268. package/scripts/setup-mcp-config.js +95 -95
  269. package/scripts/verify-checksums.js +50 -50
  270. package/scripts/verify-code-upgrade.js +247 -247
  271. package/scripts/verify-context-api.js +33 -33
  272. package/skills/autosnippet-batch-scan/SKILL.md +2 -0
  273. package/skills/autosnippet-candidates/SKILL.md +44 -4
  274. package/skills/autosnippet-candidates/SKILL_REDESIGNED.md +126 -116
  275. package/skills/autosnippet-concepts/SKILL.md +53 -35
  276. package/skills/autosnippet-create/SKILL.md +33 -0
  277. package/skills/autosnippet-dep-graph/SKILL.md +2 -0
  278. package/skills/autosnippet-guard/SKILL.md +2 -0
  279. package/skills/autosnippet-intent/SKILL.md +2 -0
  280. package/skills/autosnippet-recipe-candidates/SKILL.md +42 -8
  281. package/skills/autosnippet-recipes/SKILL.md +5 -1
  282. package/skills/autosnippet-search/SKILL.md +2 -0
  283. package/skills/autosnippet-structure/SKILL.md +2 -0
  284. package/skills/autosnippet-when/SKILL.md +2 -0
  285. package/template.json +28 -28
  286. package/dashboard/dist/assets/index-C4kWcLRI.js +0 -62
  287. package/dashboard/dist/assets/index-DqAMMzYn.css +0 -1
  288. package/dashboard/dist/assets/vendor-Bz-TYq6B.js +0 -532
  289. package/lib/infra/vectorCache.js +0 -365
  290. package/recipes/README.md +0 -91
  291. package/scripts/cursor-rules/autosnippet-conventions.mdc +0 -40
  292. package/scripts/migrate-guard-rules.js +0 -117
  293. package/scripts/migration/MigrationFramework.js +0 -102
  294. package/scripts/migration/fix.js +0 -83
  295. package/scripts/migration/index.js +0 -11
  296. package/scripts/migration/run.js +0 -83
  297. package/scripts/migration/strategies/GuardRuleMigrator.js +0 -33
  298. package/scripts/migration/strategies/RecipeMigrator.js +0 -22
  299. package/scripts/migration/strategies/SnippetMigrator.js +0 -21
  300. package/scripts/migration/validate.js +0 -88
  301. package/scripts/random-search-test.js +0 -142
  302. package/scripts/test-ai-failure-handling.js +0 -79
  303. package/scripts/test-google-models.js +0 -85
  304. package/scripts/test-hybrid-comprehensive.js +0 -120
  305. package/scripts/test-hybrid-search.js +0 -54
  306. package/scripts/test-search-modes.js +0 -364
  307. package/scripts/test-sentence-search.js +0 -80
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  | 角色 | 职责 | 能力 |
13
13
  |------|------|------|
14
- | **开发者** | 审核与决策;维护项目标准 | Dashboard 审核 Candidate,保存 Recipe;使用 Snippet 补全、`// as:search` 插入;运行 `asd embed`、`asd ui` |
14
+ | **开发者** | 审核与决策;维护项目标准 | Dashboard 审核 Candidate,保存 Recipe;使用 Snippet 补全、`ass` 快捷联想或 `// as:search` 插入;运行 `asd embed`、`asd ui` |
15
15
  | **Cursor Agent** | 按规范生成代码;检索与提交 | Skills 理解规范;MCP 按需检索、打开新建 Recipe 页;`autosnippet_submit_candidates` 批量提交候选供人工审核;不直接改 Knowledge |
16
16
  | **项目内 AI** | 提取、摘要、扫描、审查 | `asd ais` 扫描;Use Copied Code 分析填充;Guard 审查;Dashboard RAG;深度扫描结果可算相似度。由 `.env` 配置 |
17
17
  | **知识库** | 存储与提供项目标准 | Recipes、Snippets、语义向量索引;Guard、搜索、质量评估、相似度分析;两种 AI 的上下文均依赖此 |
@@ -34,10 +34,10 @@ npm install -g autosnippet
34
34
  cd /path/to/your-project # 进入你的项目
35
35
 
36
36
  asd setup # 一键初始化
37
- # ✅ 创建 AutoSnippet/ 目录和配置
38
- # ✅ 自动配置 VSCode (.vscode/settings.json)
39
- # ✅ 自动配置 Cursor (.cursor/mcp.json)
40
- # ✅ 放置 Recipe 模板
37
+ # ✅ 创建 AutoSnippet/ 目录和配置
38
+ # ✅ 自动配置 VSCode (.vscode/settings.json)
39
+ # ✅ 自动配置 Cursor (.cursor/mcp.json)
40
+ # ✅ 放置 Recipe 模板
41
41
  ```
42
42
 
43
43
  ### 3. 启动 Dashboard
@@ -48,20 +48,23 @@ asd ui # 启动 Dashboard + watch
48
48
 
49
49
  `asd ui` 会启动 Web 管理后台并后台 watch;首次运行若前端不存在会自动构建。浏览器会自动打开 Dashboard。
50
50
 
51
- ![Dashboard 概览](./images/20260131014718_38_167.png)
51
+ ![Dashboard 概览](./images/20260205232116_66_167.png)
52
52
 
53
53
  ## 核心流程
54
54
 
55
- 1. **组建知识库**:`asd ais <Target>` 或 `asd ais --all` Dashboard Candidates 审核 Recipe 入库
56
- 2. **依赖关系**:`asd spm-map` 或 Dashboard 刷新
57
- 3. **Cursor 集成**:`asd install:cursor-skill --mcp`(安装 Skills + Cursor 规则 `.cursor/rules/` + MCP;MCP 工具使用时需 `asd ui` 运行)
58
- 4. **语义索引**:`asd ui` 启动时自动 embed;也可手动 `asd embed`
55
+ **智能 AI 优先前端操作命令行补充**
56
+
57
+ 1. **Cursor AI 快捷扫描**(推荐):在 Cursor 中输入自然语言(如「扫描这个 Target」、「批量提取代码候选」),AI 智能触发 `autosnippet-batch-scan` Skill,通过 MCP 工具 `autosnippet_get_targets` `autosnippet_get_target_files` → 按文件提取 → `autosnippet_submit_candidates` 一键批量扫描,自动提交候选到 Dashboard Candidates
58
+ 2. **前端审核与入库**:Dashboard Candidates 页面人工审核 保存 Recipe 入库(优先前端操作,无需命令行)
59
+ 3. **依赖关系**(可选):Dashboard 刷新自动分析,或使用 `asd spm-map` 命令行更新
60
+ 4. **语义索引**(自动):`asd ui` 启动时自动 embed;也可手动 `asd embed`
61
+ 5. **Cursor 集成**(首次):`asd install:cursor-skill --mcp`(安装 Skills + Cursor 规则 `.cursor/rules/` + MCP;MCP 工具使用时需 `asd ui` 运行)
59
62
 
60
63
  ### 闭环
61
64
 
62
- **扫描 → 审核 → 沉淀 → Cursor/AI 使用再沉淀**:项目 AI 通过扫描 Target 批量提交候选,Cursor 完成的代码通过 Skill 提交候选,开发者完成的代码通过剪切板提交候选,Dashboard 中的候选经过人工审核进入知识库;知识库内 Recipe 为第一公民,拥有最高优先级。
65
+ **AI 扫描 Dashboard 审核 → 知识库沉淀 → Cursor/AI 按规范生成再沉淀**:Cursor AI 通过自然语言指令智能扫描并批量提交候选,完整代码通过 Skill 智能提交,开发者也可通过 Dashboard Use Copied Code 或剪切板提交候选,所有候选经 Dashboard 人工审核进入知识库;知识库内 Recipe 为第一公民,拥有最高优先级。
63
66
 
64
- 开发者通过 Snippet 获取 Recipe 内容插入编辑器, Cursor 通过 Skills Recipe 产生的 context 当做上下文使用,对向量库进行查询;AI 用知识库产生的代码,过审后添加到知识库,成为了 AI 新的上下文,使得 AI 的开发趋于标准化。
67
+ Cursor 在编辑器内通过自然语言交互触发 Skill,使用 MCP 工具检索知识库,用 Recipe 作为生成代码的上下文标准;AI 生成的代码遵循 Recipe 规范,过审后成为新 Recipe,持续提升 AI 的开发标准化程度。
65
68
 
66
69
  知识库随人工审核持续更新,AI 始终基于最新上下文,Recipe 会在使用中获得评级调整。
67
70
 
@@ -71,13 +74,14 @@ asd ui # 启动 Dashboard + watch
71
74
 
72
75
  | 指令 | 作用 |
73
76
  |------|------|
74
- | `// as:create` / `// as:c` | 无选项时只打开 Dashboard(路径已填),由用户点 Scan File 或 Use Copied Code。`-c` 强制用剪切板(静默创建或打开);`-f` 强制用路径(打开 Dashboard 并自动执行 Scan File) |
75
- | `// as:audit` / `// as:a` [关键词或规模] | 按知识库 AI 审查;无后缀时仅检查当前文件;后缀 **file** / **target** / **project** 可扩大范围(target=当前 Target 内所有源文件,project=项目内所有源文件);其他为检索关键词 |
76
- | `// as:search` / `// as:s` [关键词] | 从知识库检索并插入 Recipe/Snippet |
77
+ | `ass` / `// as:search` [关键词] | 从知识库检索并插入 Recipe/Snippet;`ass` 是最快捷的联想方式,优先推荐 |
78
+ | `asc` / `// as:create` | 无选项时只打开 Dashboard(路径已填),由用户点 Scan File Use Copied Code。`-c` 强制用剪切板(静默创建或打开);`-f` 强制用路径(打开 Dashboard 并自动执行 Scan File) |
79
+ | `asa` / `// as:audit` [关键词或规模] | 按知识库 AI 审查;无后缀时仅检查当前文件;后缀 **file** / **target** / **project** 可扩大范围(target=当前 Target 内所有源文件,project=项目内所有源文件);其他为检索关键词 |
77
80
  | `// as:include` / `// as:import` | Snippet 内头文件/模块标记,保存时自动注入 |
78
81
 
79
- **静默候选**:在 Cursor 内用户提出保存案例,Cursor 生成草案;后台用草案静默创建候选,无需打开浏览器,到 Dashboard **Candidates** 页审核即可。在 Xcode 等编辑器内也可写 `// as:c -c`、复制代码后保存,剪贴板内容同样静默入库。
80
- **搜索无跳转**:`// as:search` / `// as:s` 在编辑器内弹窗或终端选择,即选即插,无需跳转 Dashboard,不打断当前编辑。
82
+ **Snippet 生效**:`ass`、`asc`、`asa` Xcode Snippet,需要执行 `asd setup` 将其注册到 Xcode 后,**彻底关闭 Xcode 并重启**才能生效。重启后在源码中输入首字母即可触发自动完成菜单。
83
+ **静默候选**:在 Cursor 内用户提出保存案例,Cursor 生成草案;后台用草案静默创建候选,无需打开浏览器,到 Dashboard **Candidates** 页审核即可。在 Xcode 等编辑器内也可写 `asc -c`、复制代码后保存,剪贴板内容同样静默入库。
84
+ **快捷联想**:输入 `ass`(AutoSnippet Search)触发 Snippet 快捷联想,或使用 `// as:search` / `// as:s` 在编辑器内弹窗选择,即选即插,无需跳转 Dashboard,不打断当前编辑。
81
85
 
82
86
  ## 常用命令
83
87
 
@@ -97,12 +101,6 @@ asd ui # 启动 Dashboard + watch
97
101
  | `asd embed` | 手动构建语义向量索引(`asd ui` 启动时也会自动执行) |
98
102
  | `asd spm-map` | 刷新 SPM 依赖映射(依赖关系图数据来源) |
99
103
 
100
- ### 用 Cursor 做批量扫描
101
-
102
- 除 `asd ais [Target]`(项目内 AI)外,可用 **Cursor 作为批量扫描工具**:在 Cursor 里让 Agent 通过 **MCP 工具**(`autosnippet_get_targets` → `autosnippet_get_target_files` → 按文件提取 → `autosnippet_submit_candidates`)扫描指定 Target,用 Cursor 模型提取候选并提交到 Dashboard,再到 **Candidates** 页审核入库。
103
-
104
- 简单一句:「扫描 BDNetwork ,生成 Recipes 到候选」。话又说回来,最好还是详细点,先候选一两个文件,确认 cursor 认清字段,就可以在当前会话多文件执行了。
105
-
106
104
  ## 可选依赖
107
105
 
108
106
  ### Swift 解析器(可选)
@@ -159,4 +157,16 @@ AutoSnippet 下各路径与版本控制的关系建议如下(可按项目需
159
157
 
160
158
  ---
161
159
 
160
+ ## 为什么推荐 Cursor
161
+
162
+ **Cursor 优先**的原因:
163
+
164
+ - **MCP & Skills 完整支持**:Cursor 对 MCP(Model Context Protocol)的集成完善,Skills 能够正常触发和运行,支持自然语言指令流畅地调用 `autosnippet_get_targets`、`autosnippet_get_target_files`、`autosnippet_submit_candidates` 等工具
165
+ - **候选提交体验流畅**:整个从扫描 → 提取 → 提交的工作流无缝衔接,用户无需手动介入,一键完成批量操作
166
+ - **VSCode Copilot 限制**:目前 VSCode Copilot 的 MCP 集成存在问题,无法直接调用 MCP 工具。降级方案是存储候选为 Draft(本地),然后通过 API 提交,增加了用户额外操作步骤
167
+
168
+ 建议优先在 Cursor 中使用 AutoSnippet;如需 VSCode Copilot 支持,欢迎 [Issue](https://github.com/GxFn/AutoSnippet/issues) 讨论降级方案的适配。
169
+
170
+ ---
171
+
162
172
  欢迎 [Issue](https://github.com/GxFn/AutoSnippet/issues) 与 [PR](https://github.com/GxFn/AutoSnippet/pulls)。MIT 许可证。
package/bin/api-server.js CHANGED
@@ -22,16 +22,16 @@ const { MetricsHub } = require('../lib/business/metrics/MetricsHub');
22
22
  function parseArgs() {
23
23
  const args = process.argv.slice(2);
24
24
  const options = {
25
- port: 8080,
26
- host: 'localhost',
25
+ port: 8080,
26
+ host: 'localhost',
27
27
  };
28
28
 
29
29
  for (let i = 0; i < args.length; i++) {
30
- if (args[i] === '--port') {
31
- options.port = parseInt(args[++i], 10);
32
- } else if (args[i] === '--host') {
33
- options.host = args[++i];
34
- }
30
+ if (args[i] === '--port') {
31
+ options.port = parseInt(args[++i], 10);
32
+ } else if (args[i] === '--host') {
33
+ options.host = args[++i];
34
+ }
35
35
  }
36
36
 
37
37
  return options;
@@ -53,28 +53,28 @@ async function startServer() {
53
53
 
54
54
  // 创建 API Gateway
55
55
  const gateway = new APIGateway(agent, {
56
- port: options.port,
57
- host: options.host,
56
+ port: options.port,
57
+ host: options.host,
58
58
  });
59
59
 
60
60
  // 启动服务器
61
61
  try {
62
- await gateway.start();
63
- console.log(`✨ API 服务器运行中...`);
64
- console.log(`📝 API 文档: http://${options.host}:${options.port}/api/docs`);
65
- console.log(`🏥 健康检查: http://${options.host}:${options.port}/api/health`);
66
- console.log(`\n按 Ctrl+C 停止服务器`);
62
+ await gateway.start();
63
+ console.log(`✨ API 服务器运行中...`);
64
+ console.log(`📝 API 文档: http://${options.host}:${options.port}/api/docs`);
65
+ console.log(`🏥 健康检查: http://${options.host}:${options.port}/api/health`);
66
+ console.log(`\n按 Ctrl+C 停止服务器`);
67
67
  } catch (error) {
68
- console.error('❌ 启动服务器失败:', error);
69
- process.exit(1);
68
+ console.error('❌ 启动服务器失败:', error);
69
+ process.exit(1);
70
70
  }
71
71
 
72
72
  // 处理信号
73
73
  process.on('SIGINT', async () => {
74
- console.log('\n🛑 停止服务器...');
75
- await gateway.stop();
76
- console.log('✅ 服务器已停止');
77
- process.exit(0);
74
+ console.log('\n🛑 停止服务器...');
75
+ await gateway.stop();
76
+ console.log('✅ 服务器已停止');
77
+ process.exit(0);
78
78
  });
79
79
  }
80
80
 
package/bin/asd CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env sh
2
- # AutoSnippet 入口:优先使用原生校验入口(bin/asd-verify),否则回退到 node bin/asd-cli.js
2
+ # AutoSnippet Dashboard (asd) 入口:优先使用原生校验入口(bin/asd-verify),否则回退到 node bin/asd-cli.js
3
3
  # 解析 $0 的符号链接,使 DIR 指向包内 bin 目录(npm install -g 时 $0 可能是 global bin 下的 symlink)
4
4
  SCRIPT="$0"
5
5
  while [ -L "$SCRIPT" ]; do
package/bin/asd-cli.js CHANGED
@@ -27,14 +27,14 @@ const path = require('path');
27
27
  const pkgRoot = path.join(__dirname, '..');
28
28
  const checksumsPath = path.join(pkgRoot, 'checksums.json');
29
29
  if (fs.existsSync(checksumsPath) && process.env.ASD_VERIFIED !== '1' && process.env.ASD_SKIP_CHECKSUMS !== '1') {
30
- const msg = 'asd: 未经过完整性校验入口(请使用 asd 命令,勿直接运行 node bin/asd-cli.js)。开发/调试可设 ASD_SKIP_CHECKSUMS=1 或 ASD_SKIP_ENTRY_CHECK=1 跳过。';
31
- if (process.env.ASD_STRICT_ENTRY === '1') {
32
- console.error(msg);
33
- process.exit(1);
34
- }
35
- if (process.env.ASD_SKIP_ENTRY_CHECK !== '1') {
36
- console.warn('⚠️ ' + msg);
37
- }
30
+ const msg = 'asd: 未经过完整性校验入口(请使用 asd 命令,勿直接运行 node bin/asd-cli.js)。开发/调试可设 ASD_SKIP_CHECKSUMS=1 或 ASD_SKIP_ENTRY_CHECK=1 跳过。';
31
+ if (process.env.ASD_STRICT_ENTRY === '1') {
32
+ console.error(msg);
33
+ process.exit(1);
34
+ }
35
+ if (process.env.ASD_SKIP_ENTRY_CHECK !== '1') {
36
+ console.warn('⚠️ ' + msg);
37
+ }
38
38
  }
39
39
 
40
40
  // 读取输入命令
@@ -56,31 +56,31 @@ const { execSync } = require('child_process');
56
56
  const { createCliHelpers } = require('./cli-helpers');
57
57
  const { registerCommands } = require('./cli-commands');
58
58
  const helpers = createCliHelpers({
59
- CMD_PATH,
60
- findPath,
61
- cache,
62
- create,
63
- inquirer,
64
- defaults,
65
- commander,
66
- execSync,
59
+ CMD_PATH,
60
+ findPath,
61
+ cache,
62
+ create,
63
+ inquirer,
64
+ defaults,
65
+ commander,
66
+ execSync,
67
67
  });
68
68
 
69
69
  registerCommands(commander, {
70
- pjson,
71
- CMD_PATH,
72
- findPath,
73
- install,
74
- create,
75
- watch,
76
- cache,
77
- ui,
78
- defaults,
79
- spmDepMapUpdater,
80
- helpers,
81
- inquirer,
82
- fs,
83
- path,
70
+ pjson,
71
+ CMD_PATH,
72
+ findPath,
73
+ install,
74
+ create,
75
+ watch,
76
+ cache,
77
+ ui,
78
+ defaults,
79
+ spmDepMapUpdater,
80
+ helpers,
81
+ inquirer,
82
+ fs,
83
+ path,
84
84
  });
85
85
 
86
86
  commander.parse(process.argv);