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.
- package/README.md +33 -23
- package/bin/api-server.js +20 -20
- package/bin/asd +1 -1
- package/bin/asd-cli.js +30 -30
- package/bin/cli-commands.js +573 -573
- package/bin/cli-helpers.js +232 -232
- package/bin/create-snippet.js +410 -410
- package/bin/dashboard/helpers.js +6 -6
- package/bin/dashboard/routes/ai.js +195 -173
- package/bin/dashboard/routes/candidates.js +66 -66
- package/bin/dashboard/routes/commands.js +34 -34
- package/bin/dashboard/routes/core.js +171 -171
- package/bin/dashboard/routes/extract.js +153 -153
- package/bin/dashboard/routes/guard.js +94 -94
- package/bin/dashboard/routes/index.js +11 -11
- package/bin/dashboard/routes/recipes.js +226 -257
- package/bin/dashboard/routes/search.js +903 -891
- package/bin/dashboard/routes/snippets.js +97 -124
- package/bin/dashboard/routes/spm.js +146 -146
- package/bin/dashboard-server.js +196 -196
- package/bin/init-spec.js +70 -70
- package/checksums.json +10 -10
- package/dashboard/dist/assets/axios-D5GkNzM3.js +6 -0
- package/dashboard/dist/assets/index-CEIgT22d.css +1 -0
- package/dashboard/dist/assets/index-PaYWyIXW.js +56 -0
- package/dashboard/dist/assets/react-markdown-7bJxN3JQ.js +1 -0
- package/dashboard/dist/assets/{markdown-YurNruXx.js → syntax-highlighter-CeRnirGv.js} +5 -5
- package/dashboard/dist/assets/vendor-DH6lfeAo.js +527 -0
- package/dashboard/dist/assets/yaml-qRaU8Ldn.js +1 -0
- package/dashboard/dist/index.html +7 -4
- package/lib/agent/AdvancedCacheLayer.js +277 -277
- package/lib/agent/Agent.js +228 -228
- package/lib/agent/AgentCoordinator.js +478 -478
- package/lib/agent/BenchmarkRunner.js +290 -290
- package/lib/agent/ContextMapper.js +238 -238
- package/lib/agent/ConversationManager.js +295 -295
- package/lib/agent/ConversationMemory.js +275 -275
- package/lib/agent/CrossSessionLearner.js +273 -273
- package/lib/agent/DataSourceAdapter.js +242 -242
- package/lib/agent/ErrorHandler.js +263 -263
- package/lib/agent/IntentClassifier.js +429 -429
- package/lib/agent/MemoryManager.js +277 -277
- package/lib/agent/ResultFusion.js +392 -392
- package/lib/agent/Task.js +154 -154
- package/lib/agent/TokenBudget.js +309 -309
- package/lib/agent/UserPreferenceManager.js +227 -227
- package/lib/agent/agents/GenerateAgent.js +443 -443
- package/lib/agent/agents/LearnAgent.js +523 -523
- package/lib/agent/agents/LintAgent.js +407 -407
- package/lib/agent/agents/SearchAgent.js +437 -437
- package/lib/ai/AiFactory.js +167 -167
- package/lib/ai/AiProvider.js +25 -25
- package/lib/ai/candidateService.js +177 -177
- package/lib/ai/headerResolution.js +61 -61
- package/lib/ai/jsonParse.js +85 -48
- package/lib/ai/providers/ClaudeProvider.js +230 -221
- package/lib/ai/providers/GoogleGeminiProvider.js +317 -235
- package/lib/ai/providers/MockProvider.js +84 -84
- package/lib/ai/providers/OpenAiProvider.js +314 -295
- package/lib/ai/vectorStore.js +61 -61
- package/lib/api/APIGateway.js +472 -472
- package/lib/application/services/CandidateServiceV2.js +139 -139
- package/lib/application/services/ContextServiceCompat.js +46 -46
- package/lib/application/services/ContextServiceV2.js +171 -171
- package/lib/application/services/GuardServiceV2.js +144 -144
- package/lib/application/services/InjectionServiceV2.js +204 -204
- package/lib/application/services/IntelligentServiceLayer.js +578 -578
- package/lib/application/services/RecipeServiceV2.js +267 -267
- package/lib/application/services/SearchServiceV2.js +454 -456
- package/lib/application/services/SnippetFactoryV2.js +138 -138
- package/lib/application/services/SpecRepositoryV2.js +391 -391
- package/lib/application/usecases/guard/ValidateGuard.js +47 -47
- package/lib/application/usecases/injection/InjectCode.js +42 -42
- package/lib/application/usecases/recipe/SearchRecipe.js +30 -30
- package/lib/application/usecases/snippet/CreateSnippet.js +43 -43
- package/lib/automation/ActionPipeline.js +4 -4
- package/lib/automation/AutomationOrchestrator.js +6 -6
- package/lib/automation/ContextCollector.js +1 -1
- package/lib/automation/OutputApplier.js +1 -1
- package/lib/automation/TriggerResolver.js +4 -4
- package/lib/bootstrap.js +87 -87
- package/lib/business/metrics/MetricsHub.js +205 -205
- package/lib/business/recipe/RecipeHub.js +222 -222
- package/lib/business/search/SearchHub.js +289 -289
- package/lib/candidate/aggregateCandidates.js +53 -53
- package/lib/candidate/qualityRules.js +43 -43
- package/lib/candidate/similarityService.js +77 -65
- package/lib/cli/README.md +41 -41
- package/lib/cli/candidateCommand.js +100 -100
- package/lib/cli/commands/BaseCommand.js +9 -9
- package/lib/cli/embedCommand.js +29 -29
- package/lib/cli/searchCommand.js +103 -103
- package/lib/cli/statusCommand.js +201 -201
- package/lib/cli/utils/cliHelpers.js +23 -23
- package/lib/cli/utils/clipboardHandler.js +53 -53
- package/lib/cli/utils/presetLoader.js +24 -24
- package/lib/context/IndexingPipeline.js +199 -192
- package/lib/context/KnowledgeGraph.js +441 -441
- package/lib/context/RecipeExtractor.js +583 -583
- package/lib/context/adapters/BaseAdapter.js +87 -87
- package/lib/context/adapters/JsonAdapter.js +298 -298
- package/lib/context/adapters/MilvusAdapter.js +475 -475
- package/lib/context/autoEmbed.js +53 -53
- package/lib/context/chunker.js +131 -131
- package/lib/context/constants.js +35 -35
- package/lib/context/index.js +13 -13
- package/lib/context/persistence.js +98 -98
- package/lib/context/recipe-schema.js +341 -341
- package/lib/core/BasePlugin.js +43 -43
- package/lib/core/ConfigManager.js +162 -162
- package/lib/core/EventBus.js +42 -42
- package/lib/core/Logger.js +88 -88
- package/lib/core/PluginLoader.js +158 -158
- package/lib/core/ServiceContainer.js +86 -86
- package/lib/dashboard/README.md +25 -25
- package/lib/domain/entities/Agent.js +57 -57
- package/lib/domain/entities/Memory.js +53 -53
- package/lib/domain/entities/Recipe.js +68 -68
- package/lib/domain/entities/Snippet.js +37 -37
- package/lib/domain/entities/v2/GuardRuleV2.js +82 -82
- package/lib/domain/entities/v2/LegacyAdapter.js +17 -17
- package/lib/domain/entities/v2/RecipeV2.js +80 -80
- package/lib/domain/entities/v2/SnippetV2.js +76 -76
- package/lib/domain/entities/v2/id.js +1 -1
- package/lib/guard/EnhancedGuardChecker.js +90 -90
- package/lib/guard/GuardExclusionManager.js +103 -103
- package/lib/guard/GuardRuleLearner.js +98 -98
- package/lib/guard/GuardRuleMigrator.js +148 -148
- package/lib/guard/guardRules-iOS.js +30 -30
- package/lib/guard/guardRules.js +40 -40
- package/lib/guard/guardViolations.js +61 -61
- package/lib/guard/ios/audit.js +212 -212
- package/lib/guard/ios/codeChecks.js +122 -122
- package/lib/guard/ios/defaultRules.js +228 -228
- package/lib/guard/ios/staticCheck.js +48 -48
- package/lib/guard/ios/utils.js +4 -4
- package/lib/infrastructure/cache/CacheHub.js +147 -147
- package/lib/infrastructure/cache/CacheStore.js +85 -85
- package/lib/infrastructure/cache/vectorCache.js +365 -0
- package/lib/infrastructure/config/Defaults.js +40 -40
- package/lib/infrastructure/config/Paths.js +69 -69
- package/lib/infrastructure/config/TriggerSymbol.js +30 -30
- package/lib/infrastructure/error/ErrorManager.js +263 -263
- package/lib/infrastructure/errors/AiError.js +20 -20
- package/lib/infrastructure/errors/BaseError.js +17 -17
- package/lib/infrastructure/errors/ContextError.js +14 -14
- package/lib/infrastructure/errors/ErrorHandler.js +52 -52
- package/lib/infrastructure/errors/GuardError.js +2 -2
- package/lib/infrastructure/errors/InjectionError.js +2 -2
- package/lib/infrastructure/errors/ValidationError.js +14 -14
- package/lib/infrastructure/external/OpenBrowser.js +84 -84
- package/lib/infrastructure/external/spm/DepFixer.js +126 -126
- package/lib/infrastructure/external/spm/DepGraphAnalyzer.js +57 -57
- package/lib/infrastructure/external/spm/DepGraphService.js +150 -150
- package/lib/infrastructure/external/spm/DepPolicyEngine.js +31 -31
- package/lib/infrastructure/external/spm/DepReport.js +1 -1
- package/lib/infrastructure/external/spm/PackageParserV2.js +176 -176
- package/lib/infrastructure/external/spm/SpmDepsServiceV2.js +308 -308
- package/lib/infrastructure/external/spm/spmDepMapUpdater.js +410 -410
- package/lib/infrastructure/external/spm/swiftParserClient.js +223 -223
- package/lib/infrastructure/external/spm/targetScanner.js +192 -192
- package/lib/infrastructure/filesystem/FileFinder.js +83 -83
- package/lib/infrastructure/logging/LogFactory.js +66 -66
- package/lib/infrastructure/logging/LoggerAdapter.js +31 -31
- package/lib/infrastructure/logging/index.js +1 -1
- package/lib/infrastructure/notification/ClipboardManager.js +93 -93
- package/lib/infrastructure/notification/NativeUi.js +160 -160
- package/lib/infrastructure/notification/Notifier.js +77 -77
- package/lib/infrastructure/paths/PathFinder.js +336 -336
- package/lib/infrastructure/paths/ProjectStructure.js +198 -198
- package/lib/infrastructure/process/ProcessHub.js +254 -254
- package/lib/infrastructure/vector/VectorMath.js +75 -75
- package/lib/injection/DirectiveParserV2.js +112 -112
- package/lib/injection/ImportDecisionEngine.js +22 -22
- package/lib/injection/ImportWriterV2.js +477 -477
- package/lib/injection/ModuleResolverV2.js +159 -159
- package/lib/injection/injectionService.js +378 -378
- package/lib/mcp/envelope.js +10 -10
- package/lib/migration/knowledgeBaseMigrator.js +155 -155
- package/lib/quality/FeedbackCollector.js +9 -9
- package/lib/quality/QualityScorer.js +32 -32
- package/lib/quality/config/default.js +10 -10
- package/lib/quality/dimensions/CodeQualityDimension.js +12 -12
- package/lib/quality/dimensions/CompletenessDimension.js +11 -11
- package/lib/quality/dimensions/EngagementDimension.js +9 -9
- package/lib/quality/dimensions/FormatDimension.js +9 -9
- package/lib/quality/dimensions/MetadataDimension.js +6 -6
- package/lib/rateLimit.js +26 -26
- package/lib/recipe/parseRecipeMd.js +143 -143
- package/lib/recipe/recipeStats.js +115 -115
- package/lib/recipe/validateRecipeCandidate.js +35 -35
- package/lib/search/MultiSignalRanker.js +348 -348
- package/lib/search/bm25.js +25 -25
- package/lib/search/coarseRanker.js +122 -122
- package/lib/search/contextAnalyzer.js +89 -89
- package/lib/search/featureExtractor.js +15 -15
- package/lib/search/fineRanker.js +13 -13
- package/lib/search/indexStore.js +2 -2
- package/lib/search/indexer.js +16 -16
- package/lib/search/invertedIndex.js +8 -8
- package/lib/search/ltrModel.js +2 -2
- package/lib/search/queryOptimizer.js +3 -3
- package/lib/search/rankingEngine.js +30 -30
- package/lib/search/recallEngine.js +43 -43
- package/lib/search/searchCache.js +25 -25
- package/lib/search/unifiedSearch.js +122 -124
- package/lib/services/agent/AgentManager.js +402 -402
- package/lib/services/agent/AgentPool.js +246 -246
- package/lib/services/agent/AgentService.js +314 -314
- package/lib/services/agent/BaseAgent.js +343 -343
- package/lib/services/agent/ChainManager.js +207 -207
- package/lib/services/agent/ConversationManager.js +352 -352
- package/lib/services/agent/IAgent.js +160 -160
- package/lib/services/agent/ITool.js +87 -87
- package/lib/services/agent/MemoryStore.js +245 -245
- package/lib/services/agent/ToolOrchestrator.js +341 -341
- package/lib/services/agent/ToolRegistry.js +350 -350
- package/lib/services/agent/agentServiceHelper.js +32 -0
- package/lib/services/agent/agents/CodeAgent.js +52 -52
- package/lib/services/agent/agents/GuardAgent.js +54 -54
- package/lib/services/agent/agents/RecipeAgent.js +56 -54
- package/lib/services/agent/agents/SearchAgent.js +48 -47
- package/lib/services/ai/AiService.js +438 -301
- package/lib/services/ai/BaseAiProvider.js +165 -165
- package/lib/services/ai/EXAMPLES.md +265 -265
- package/lib/services/ai/IAiProvider.js +88 -88
- package/lib/services/ai/LegacyProviderAdapter.js +129 -129
- package/lib/services/ai/OpenAiCompatibleProvider.js +235 -235
- package/lib/services/ai/ProviderManager.js +204 -204
- package/lib/services/context/AdapterManager.js +243 -243
- package/lib/services/context/BaseContextAdapter.js +202 -202
- package/lib/services/context/ContextService.js +367 -367
- package/lib/services/context/IContextAdapter.js +122 -122
- package/lib/snippet/MarkerLineV2.js +82 -82
- package/lib/snippet/snippetInstaller.js +228 -228
- package/lib/watch/DirectiveDetector.js +83 -83
- package/lib/watch/FileDebouncer.js +16 -16
- package/lib/watch/FileWatchConfig.js +19 -19
- package/lib/watch/FileWatchService.js +163 -163
- package/lib/watch/fileWatcher.js +2 -2
- package/lib/watch/handlers/AlinkHandler.js +29 -29
- package/lib/watch/handlers/CreateHandler.js +169 -169
- package/lib/watch/handlers/DraftHandler.js +85 -85
- package/lib/watch/handlers/GuardHandler.js +143 -143
- package/lib/watch/handlers/HeaderHandler.js +33 -33
- package/lib/watch/handlers/SearchHandler.js +863 -863
- package/lib/writeGuard.js +168 -168
- package/lib/xcode-search-cache-fix.js +203 -203
- package/package.json +110 -110
- package/resources/native-ui/main.swift +10 -89
- package/scripts/check-paths.js +178 -178
- package/scripts/demo-candidates-submit.js +38 -38
- package/scripts/diagnose-mcp.js +28 -28
- package/scripts/ensure-parse-package.js +14 -14
- package/scripts/generate-checksums.js +24 -24
- package/scripts/generate-recipe-drafts.js +68 -68
- package/scripts/init-vector-db.js +154 -154
- package/scripts/init-xcode-snippets.js +193 -193
- package/scripts/install-cursor-skill.js +230 -230
- package/scripts/install-full.js +15 -15
- package/scripts/install-vscode-copilot.js +306 -336
- package/scripts/mcp-server.js +819 -819
- package/scripts/migrate-recipes-metadata.js +214 -214
- package/scripts/recipe-audit.js +180 -180
- package/scripts/recipe-migration-complete.js +295 -295
- package/scripts/recipe-migration-diagnose.js +63 -63
- package/scripts/release.js +445 -0
- package/scripts/setup-mcp-config.js +95 -95
- package/scripts/verify-checksums.js +50 -50
- package/scripts/verify-code-upgrade.js +247 -247
- package/scripts/verify-context-api.js +33 -33
- package/skills/autosnippet-batch-scan/SKILL.md +2 -0
- package/skills/autosnippet-candidates/SKILL.md +44 -4
- package/skills/autosnippet-candidates/SKILL_REDESIGNED.md +126 -116
- package/skills/autosnippet-concepts/SKILL.md +53 -35
- package/skills/autosnippet-create/SKILL.md +33 -0
- package/skills/autosnippet-dep-graph/SKILL.md +2 -0
- package/skills/autosnippet-guard/SKILL.md +2 -0
- package/skills/autosnippet-intent/SKILL.md +2 -0
- package/skills/autosnippet-recipe-candidates/SKILL.md +42 -8
- package/skills/autosnippet-recipes/SKILL.md +5 -1
- package/skills/autosnippet-search/SKILL.md +2 -0
- package/skills/autosnippet-structure/SKILL.md +2 -0
- package/skills/autosnippet-when/SKILL.md +2 -0
- package/template.json +28 -28
- package/dashboard/dist/assets/index-C4kWcLRI.js +0 -62
- package/dashboard/dist/assets/index-DqAMMzYn.css +0 -1
- package/dashboard/dist/assets/vendor-Bz-TYq6B.js +0 -532
- package/lib/infra/vectorCache.js +0 -365
- package/recipes/README.md +0 -91
- package/scripts/cursor-rules/autosnippet-conventions.mdc +0 -40
- package/scripts/migrate-guard-rules.js +0 -117
- package/scripts/migration/MigrationFramework.js +0 -102
- package/scripts/migration/fix.js +0 -83
- package/scripts/migration/index.js +0 -11
- package/scripts/migration/run.js +0 -83
- package/scripts/migration/strategies/GuardRuleMigrator.js +0 -33
- package/scripts/migration/strategies/RecipeMigrator.js +0 -22
- package/scripts/migration/strategies/SnippetMigrator.js +0 -21
- package/scripts/migration/validate.js +0 -88
- package/scripts/random-search-test.js +0 -142
- package/scripts/test-ai-failure-handling.js +0 -79
- package/scripts/test-google-models.js +0 -85
- package/scripts/test-hybrid-comprehensive.js +0 -120
- package/scripts/test-hybrid-search.js +0 -54
- package/scripts/test-search-modes.js +0 -364
- 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
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-

|
|
52
52
|
|
|
53
53
|
## 核心流程
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
65
|
+
**AI 扫描 → Dashboard 审核 → 知识库沉淀 → Cursor/AI 按规范生成 → 再沉淀**:Cursor AI 通过自然语言指令智能扫描并批量提交候选,完整代码通过 Skill 智能提交,开发者也可通过 Dashboard Use Copied Code 或剪切板提交候选,所有候选经 Dashboard 人工审核进入知识库;知识库内 Recipe 为第一公民,拥有最高优先级。
|
|
63
66
|
|
|
64
|
-
|
|
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
|
-
|
|
|
75
|
-
|
|
|
76
|
-
|
|
|
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
|
-
|
|
80
|
-
|
|
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
|
-
|
|
26
|
-
|
|
25
|
+
port: 8080,
|
|
26
|
+
host: 'localhost',
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
for (let i = 0; i < args.length; i++) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
57
|
-
|
|
56
|
+
port: options.port,
|
|
57
|
+
host: options.host,
|
|
58
58
|
});
|
|
59
59
|
|
|
60
60
|
// 启动服务器
|
|
61
61
|
try {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
69
|
-
|
|
68
|
+
console.error('❌ 启动服务器失败:', error);
|
|
69
|
+
process.exit(1);
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
// 处理信号
|
|
73
73
|
process.on('SIGINT', async () => {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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);
|