autosnippet 2.8.3 → 2.10.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.
- package/README.md +5 -5
- package/bin/cli.js +5 -33
- package/config/constitution.yaml +9 -2
- package/dashboard/dist/assets/{icons-B_Xg4B-s.js → icons-BkT3XrKf.js} +105 -100
- package/dashboard/dist/assets/index-BsB7DzW4.css +1 -0
- package/dashboard/dist/assets/index-DdmQMrJJ.js +155 -0
- package/dashboard/dist/index.html +3 -3
- package/lib/cli/AiScanService.js +13 -11
- package/lib/cli/KnowledgeSyncService.js +343 -0
- package/lib/cli/SetupService.js +9 -27
- package/lib/core/ast/ProjectGraph.js +160 -0
- package/lib/core/gateway/GatewayActionRegistry.js +48 -58
- package/lib/domain/index.js +16 -11
- package/lib/domain/knowledge/KnowledgeEntry.js +351 -0
- package/lib/domain/knowledge/KnowledgeRepository.js +123 -0
- package/lib/domain/knowledge/Lifecycle.js +109 -0
- package/lib/domain/knowledge/index.js +27 -0
- package/lib/domain/knowledge/values/Constraints.js +125 -0
- package/lib/domain/knowledge/values/Content.js +86 -0
- package/lib/domain/knowledge/values/Quality.js +93 -0
- package/lib/domain/knowledge/values/Reasoning.js +69 -0
- package/lib/domain/knowledge/values/Relations.js +168 -0
- package/lib/domain/knowledge/values/Stats.js +87 -0
- package/lib/domain/knowledge/values/index.js +9 -0
- package/lib/external/ai/AiProvider.js +48 -0
- package/lib/external/ai/providers/GoogleGeminiProvider.js +12 -3
- package/lib/external/mcp/McpServer.js +7 -5
- package/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +3 -2
- package/lib/external/mcp/handlers/bootstrap.js +121 -12
- package/lib/external/mcp/handlers/browse.js +77 -73
- package/lib/external/mcp/handlers/candidate.js +29 -276
- package/lib/external/mcp/handlers/guard.js +2 -0
- package/lib/external/mcp/handlers/knowledge.js +205 -0
- package/lib/external/mcp/handlers/skill.js +4 -2
- package/lib/external/mcp/handlers/structure.js +25 -23
- package/lib/external/mcp/handlers/system.js +10 -12
- package/lib/external/mcp/tools.js +125 -138
- package/lib/http/HttpServer.js +4 -8
- package/lib/http/middleware/requestLogger.js +3 -3
- package/lib/http/routes/ai.js +17 -1
- package/lib/http/routes/extract.js +48 -4
- package/lib/http/routes/knowledge.js +246 -0
- package/lib/http/routes/search.js +12 -17
- package/lib/http/routes/skills.js +44 -1
- package/lib/infrastructure/cache/GraphCache.js +143 -0
- package/lib/infrastructure/database/migrations/015_create_token_usage.js +27 -0
- package/lib/infrastructure/database/migrations/016_unified_knowledge_entries.js +395 -0
- package/lib/infrastructure/external/XcodeAutomation.js +187 -103
- package/lib/infrastructure/realtime/RealtimeService.js +14 -2
- package/lib/injection/ServiceContainer.js +164 -63
- package/lib/repository/knowledge/KnowledgeRepository.impl.js +373 -0
- package/lib/repository/token/TokenUsageStore.js +162 -0
- package/lib/service/automation/DirectiveDetector.js +2 -3
- package/lib/service/automation/FileWatcher.js +67 -28
- package/lib/service/automation/XcodeIntegration.js +931 -156
- package/lib/service/automation/handlers/AlinkHandler.js +6 -4
- package/lib/service/automation/handlers/CreateHandler.js +53 -18
- package/lib/service/automation/handlers/GuardHandler.js +183 -20
- package/lib/service/automation/handlers/SearchHandler.js +35 -17
- package/lib/service/chat/AnalystAgent.js +25 -14
- package/lib/service/chat/CandidateGuardrail.js +1 -1
- package/lib/service/chat/ChatAgent.js +280 -48
- package/lib/service/chat/ContextWindow.js +92 -8
- package/lib/service/chat/HandoffProtocol.js +26 -1
- package/lib/service/chat/ProducerAgent.js +11 -9
- package/lib/service/chat/tools.js +298 -194
- package/lib/service/guard/GuardCheckEngine.js +114 -10
- package/lib/service/guard/GuardService.js +59 -48
- package/lib/service/knowledge/ConfidenceRouter.js +159 -0
- package/lib/service/knowledge/KnowledgeFileWriter.js +602 -0
- package/lib/service/knowledge/KnowledgeService.js +725 -0
- package/lib/service/search/SearchEngine.js +92 -19
- package/lib/service/skills/SignalCollector.js +15 -9
- package/lib/service/skills/SkillAdvisor.js +13 -11
- package/lib/service/snippet/SnippetFactory.js +5 -5
- package/lib/service/spm/SpmService.js +119 -18
- package/package.json +1 -1
- package/scripts/install-cursor-skill.js +0 -6
- package/scripts/migrate-md-to-knowledge.mjs +364 -0
- package/skills/autosnippet-analysis/SKILL.md +15 -7
- package/skills/autosnippet-candidates/SKILL.md +6 -6
- package/skills/autosnippet-coldstart/SKILL.md +7 -3
- package/skills/autosnippet-concepts/SKILL.md +7 -6
- package/skills/autosnippet-create/SKILL.md +13 -13
- package/skills/autosnippet-intent/SKILL.md +3 -2
- package/skills/autosnippet-lifecycle/SKILL.md +5 -5
- package/skills/autosnippet-recipes/SKILL.md +16 -4
- package/templates/constitution.yaml +1 -1
- package/templates/copilot-instructions.md +6 -6
- package/templates/recipes-setup/README.md +3 -3
- package/dashboard/dist/assets/index-CkIih2CC.css +0 -1
- package/dashboard/dist/assets/index-Duc8Qk-c.js +0 -197
- package/lib/cli/CandidateSyncService.js +0 -261
- package/lib/cli/SyncService.js +0 -356
- package/lib/domain/candidate/Candidate.js +0 -196
- package/lib/domain/candidate/CandidateRepository.js +0 -107
- package/lib/domain/candidate/Reasoning.js +0 -52
- package/lib/domain/recipe/Recipe.js +0 -421
- package/lib/domain/recipe/RecipeRepository.js +0 -54
- package/lib/domain/types/CandidateStatus.js +0 -52
- package/lib/http/routes/candidates.js +0 -559
- package/lib/http/routes/recipes.js +0 -397
- package/lib/repository/candidate/CandidateRepository.impl.js +0 -230
- package/lib/repository/recipe/RecipeRepository.impl.js +0 -498
- package/lib/service/candidate/CandidateAggregator.js +0 -52
- package/lib/service/candidate/CandidateFileWriter.js +0 -383
- package/lib/service/candidate/CandidateService.js +0 -973
- package/lib/service/recipe/RecipeFileWriter.js +0 -514
- package/lib/service/recipe/RecipeService.js +0 -786
- package/lib/service/recipe/RecipeStatsTracker.js +0 -148
package/README.md
CHANGED
|
@@ -86,7 +86,7 @@ asd status # 自检项目根、AI Provider、索引、Dashboard
|
|
|
86
86
|
|
|
87
87
|
```
|
|
88
88
|
用户:「扫描 NetworkModule 这个 Target,提取最佳实践」
|
|
89
|
-
Cursor →
|
|
89
|
+
Cursor → get_targets → get_target_files → 逐文件提取 → submit_knowledge_batch
|
|
90
90
|
→ Dashboard Candidates 页面审核 → 保存为 Recipe
|
|
91
91
|
```
|
|
92
92
|
|
|
@@ -96,7 +96,7 @@ Cursor → autosnippet_get_targets → autosnippet_get_target_files → 逐文
|
|
|
96
96
|
|
|
97
97
|
## Dashboard
|
|
98
98
|
|
|
99
|
-
`asd ui` 启动后访问 Web
|
|
99
|
+
`asd ui` 启动后访问 Web 管理后台:
|
|
100
100
|
|
|
101
101
|

|
|
102
102
|
|
|
@@ -171,14 +171,14 @@ asd install:vscode-copilot # 配置 MCP 和 Copilot 指令
|
|
|
171
171
|
|
|
172
172
|
## MCP 工具一览
|
|
173
173
|
|
|
174
|
-
38 个 MCP
|
|
174
|
+
38 个 MCP 工具按功能分组(省略了 **autosnippet_** 前缀):
|
|
175
175
|
|
|
176
176
|
| 分类 | 工具 |
|
|
177
177
|
|------|------|
|
|
178
|
-
| **系统** | `
|
|
178
|
+
| **系统** | `health`、`autosnippet_capabilities` |
|
|
179
179
|
| **搜索** | `autosnippet_search`(统合入口)、`autosnippet_context_search`(4 层漏斗)、`autosnippet_keyword_search`、`autosnippet_semantic_search` |
|
|
180
180
|
| **Recipe 浏览** | `autosnippet_list_recipes`、`autosnippet_get_recipe`、`autosnippet_list_rules`、`autosnippet_list_patterns`、`autosnippet_list_facts`、`autosnippet_recipe_insights`、`autosnippet_confirm_usage` |
|
|
181
|
-
| **候选管理** | `autosnippet_validate_candidate`、`autosnippet_check_duplicate`、`
|
|
181
|
+
| **候选管理** | `autosnippet_validate_candidate`、`autosnippet_check_duplicate`、`autosnippet_submit_knowledge`、`autosnippet_submit_knowledge_batch`、`autosnippet_submit_knowledge_batch`、`autosnippet_enrich_candidates` |
|
|
182
182
|
| **知识图谱** | `autosnippet_graph_query`、`autosnippet_graph_impact`、`autosnippet_graph_path`、`autosnippet_graph_stats` |
|
|
183
183
|
| **项目结构** | `autosnippet_get_targets`、`autosnippet_get_target_files`、`autosnippet_get_target_metadata` |
|
|
184
184
|
| **Guard** | `autosnippet_guard_check`、`autosnippet_guard_audit_files`、`autosnippet_scan_project` |
|
package/bin/cli.js
CHANGED
|
@@ -501,12 +501,10 @@ program
|
|
|
501
501
|
.option('--force', '忽略 hash 强制覆盖')
|
|
502
502
|
.action(async (opts) => {
|
|
503
503
|
const projectRoot = resolve(opts.dir);
|
|
504
|
-
const {
|
|
505
|
-
const
|
|
506
|
-
const syncService = new SyncService(projectRoot);
|
|
507
|
-
const candidateSyncService = new CandidateSyncService(projectRoot);
|
|
504
|
+
const { KnowledgeSyncService } = await import('../lib/cli/KnowledgeSyncService.js');
|
|
505
|
+
const syncService = new KnowledgeSyncService(projectRoot);
|
|
508
506
|
|
|
509
|
-
console.log(`\n🔄 AutoSnippet
|
|
507
|
+
console.log(`\n🔄 AutoSnippet V3 — 同步 knowledge entries`);
|
|
510
508
|
console.log(` 项目: ${basename(projectRoot)}`);
|
|
511
509
|
console.log(` 路径: ${projectRoot}`);
|
|
512
510
|
if (opts.dryRun) console.log(' 模式: dry-run(仅报告)');
|
|
@@ -533,7 +531,7 @@ program
|
|
|
533
531
|
});
|
|
534
532
|
|
|
535
533
|
// 输出报告
|
|
536
|
-
console.log(`✅
|
|
534
|
+
console.log(`✅ Knowledge 同步完成`);
|
|
537
535
|
console.log(` 扫描: ${report.synced + report.skipped} 文件`);
|
|
538
536
|
console.log(` 新增: ${report.created}`);
|
|
539
537
|
console.log(` 更新: ${report.updated}`);
|
|
@@ -547,38 +545,12 @@ program
|
|
|
547
545
|
}
|
|
548
546
|
|
|
549
547
|
if (report.orphaned.length > 0) {
|
|
550
|
-
console.log(`\n🗑️ ${report.orphaned.length}
|
|
548
|
+
console.log(`\n🗑️ ${report.orphaned.length} 个孤儿条目已标记 deprecated:`);
|
|
551
549
|
for (const id of report.orphaned) {
|
|
552
550
|
console.log(` - ${id}`);
|
|
553
551
|
}
|
|
554
552
|
}
|
|
555
553
|
|
|
556
|
-
// ── Candidates 同步 ──
|
|
557
|
-
const cReport = candidateSyncService.sync(db, {
|
|
558
|
-
dryRun: opts.dryRun,
|
|
559
|
-
force: opts.force,
|
|
560
|
-
});
|
|
561
|
-
|
|
562
|
-
console.log(`\n✅ Candidates 同步完成`);
|
|
563
|
-
console.log(` 扫描: ${cReport.synced + cReport.skipped} 文件`);
|
|
564
|
-
console.log(` 新增: ${cReport.created}`);
|
|
565
|
-
console.log(` 更新: ${cReport.updated}`);
|
|
566
|
-
console.log(` 跳过: ${cReport.skipped}`);
|
|
567
|
-
|
|
568
|
-
if (cReport.violations.length > 0) {
|
|
569
|
-
console.log(`\n⚠️ 检测到 ${cReport.violations.length} 个 Candidate 手动编辑:`);
|
|
570
|
-
for (const v of cReport.violations) {
|
|
571
|
-
console.log(` - ${v}`);
|
|
572
|
-
}
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
if (cReport.orphaned.length > 0) {
|
|
576
|
-
console.log(`\n📋 ${cReport.orphaned.length} 个 Candidate 仅存于 DB(无 .md 文件):`);
|
|
577
|
-
for (const id of cReport.orphaned) {
|
|
578
|
-
console.log(` - ${id}`);
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
|
|
582
554
|
console.log('');
|
|
583
555
|
} finally {
|
|
584
556
|
await bootstrap.shutdown?.();
|
package/config/constitution.yaml
CHANGED
|
@@ -32,12 +32,19 @@ roles:
|
|
|
32
32
|
- "read:recipes"
|
|
33
33
|
- "read:guard_rules"
|
|
34
34
|
- "create:candidates"
|
|
35
|
-
- "
|
|
35
|
+
- "candidate:update"
|
|
36
|
+
- "knowledge:create"
|
|
37
|
+
- "knowledge:update"
|
|
38
|
+
- "submit:knowledge"
|
|
36
39
|
- "read:audit_logs:self"
|
|
37
40
|
- "knowledge:bootstrap"
|
|
38
41
|
- "create:skills"
|
|
42
|
+
- "update:skills"
|
|
43
|
+
- "delete:skills"
|
|
39
44
|
constraints:
|
|
40
|
-
- "
|
|
45
|
+
- "can submit knowledge entries (all go to pending)"
|
|
46
|
+
- "cannot publish/deprecate knowledge — only developer can do that"
|
|
47
|
+
- "can reactivate deprecated entries back to pending"
|
|
41
48
|
- "cannot modify Guard rules"
|
|
42
49
|
- "cannot delete any data"
|
|
43
50
|
- id: "chat_agent"
|