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
@@ -14,39 +14,41 @@ export const TIER_ORDER = { agent: 0, admin: 1 };
14
14
  export const TOOL_GATEWAY_MAP = {
15
15
  // bootstrap 写操作 — 动态路由
16
16
  autosnippet_bootstrap: {
17
- resolver: (args) => ({
18
- knowledge: { action: 'knowledge:bootstrap', resource: 'knowledge' },
19
- refine: { action: 'knowledge:update', resource: 'knowledge' },
20
- scan: { action: 'guard_rule:check_code', resource: 'guard_rules' },
21
- })[args?.operation] || null,
17
+ resolver: (args) =>
18
+ ({
19
+ knowledge: { action: 'knowledge:bootstrap', resource: 'knowledge' },
20
+ refine: { action: 'knowledge:update', resource: 'knowledge' },
21
+ scan: { action: 'guard_rule:check_code', resource: 'guard_rules' },
22
+ })[args?.operation] || null,
22
23
  },
23
24
  // guard 写操作(仅 files 模式)
24
25
  autosnippet_guard: {
25
- resolver: (args) => (args?.files && Array.isArray(args.files))
26
- ? { action: 'guard_rule:check_code', resource: 'guard_rules' }
27
- : null, // code 模式只读,跳过 Gateway
26
+ resolver: (args) =>
27
+ args?.files && Array.isArray(args.files)
28
+ ? { action: 'guard_rule:check_code', resource: 'guard_rules' }
29
+ : null, // code 模式只读,跳过 Gateway
28
30
  },
29
31
  // skill 写操作(create/update/delete)
30
32
  autosnippet_skill: {
31
- resolver: (args) => ({
32
- create: { action: 'create:skills', resource: 'skills' },
33
- update: { action: 'update:skills', resource: 'skills' },
34
- delete: { action: 'delete:skills', resource: 'skills' },
35
- })[args?.operation] || null, // list/load/suggest 只读
33
+ resolver: (args) =>
34
+ ({
35
+ create: { action: 'create:skills', resource: 'skills' },
36
+ update: { action: 'update:skills', resource: 'skills' },
37
+ delete: { action: 'delete:skills', resource: 'skills' },
38
+ })[args?.operation] || null, // list/load/suggest 只读
36
39
  },
37
40
  // 知识提交
38
- autosnippet_submit_knowledge: { action: 'knowledge:create', resource: 'knowledge' },
41
+ autosnippet_submit_knowledge: { action: 'knowledge:create', resource: 'knowledge' },
39
42
  autosnippet_submit_knowledge_batch: { action: 'knowledge:create', resource: 'knowledge' },
40
- autosnippet_save_document: { action: 'knowledge:create', resource: 'knowledge' },
43
+ autosnippet_save_document: { action: 'knowledge:create', resource: 'knowledge' },
41
44
  // admin 工具
42
- autosnippet_enrich_candidates: { action: 'knowledge:update', resource: 'knowledge' },
43
- autosnippet_knowledge_lifecycle: { action: 'knowledge:update', resource: 'knowledge' },
45
+ autosnippet_enrich_candidates: { action: 'knowledge:update', resource: 'knowledge' },
46
+ autosnippet_knowledge_lifecycle: { action: 'knowledge:update', resource: 'knowledge' },
44
47
  };
45
48
 
46
49
  // ─── 工具声明 ────────────────────────────────────────────────
47
50
 
48
51
  export const TOOLS = [
49
-
50
52
  // ══════════════════════════════════════════════════════
51
53
  // Tier: agent — 外部 Agent 核心工具集 (12 个)
52
54
  // ══════════════════════════════════════════════════════
@@ -67,13 +69,28 @@ export const TOOLS = [
67
69
  inputSchema: {
68
70
  type: 'object',
69
71
  properties: {
70
- query: { type: 'string', description: '搜索查询' },
71
- mode: { type: 'string', enum: ['auto', 'keyword', 'bm25', 'semantic', 'context'], default: 'auto', description: 'auto=BM25+semantic 融合 | keyword=SQL LIKE 精确 | semantic=向量语义 | context=4层漏斗+会话感知' },
72
- kind: { type: 'string', enum: ['all', 'rule', 'pattern', 'fact'], default: 'all', description: '按知识类型过滤' },
73
- limit: { type: 'number', default: 10 },
74
- language: { type: 'string', description: '当前编程语言(mode=context 时用于重排)' },
75
- sessionId: { type: 'string', description: '会话 ID(mode=context 连续对话)' },
76
- sessionHistory: { type: 'array', items: { type: 'object' }, description: '会话历史(mode=context 启用 Layer 4' },
72
+ query: { type: 'string', description: '搜索查询' },
73
+ mode: {
74
+ type: 'string',
75
+ enum: ['auto', 'keyword', 'bm25', 'semantic', 'context'],
76
+ default: 'auto',
77
+ description:
78
+ 'auto=BM25+semantic 融合 | keyword=SQL LIKE 精确 | semantic=向量语义 | context=4层漏斗+会话感知',
79
+ },
80
+ kind: {
81
+ type: 'string',
82
+ enum: ['all', 'rule', 'pattern', 'fact'],
83
+ default: 'all',
84
+ description: '按知识类型过滤',
85
+ },
86
+ limit: { type: 'number', default: 10 },
87
+ language: { type: 'string', description: '当前编程语言(mode=context 时用于重排)' },
88
+ sessionId: { type: 'string', description: '会话 ID(mode=context 连续对话)' },
89
+ sessionHistory: {
90
+ type: 'array',
91
+ items: { type: 'object' },
92
+ description: '会话历史(mode=context 启用 Layer 4)',
93
+ },
77
94
  },
78
95
  required: ['query'],
79
96
  },
@@ -83,21 +100,35 @@ export const TOOLS = [
83
100
  {
84
101
  name: 'autosnippet_knowledge',
85
102
  tier: 'agent',
86
- description: '知识浏览与使用确认。list=列表过滤 | get=单条详情 | insights=质量洞察 | confirm_usage=记录采纳。',
103
+ description:
104
+ '知识浏览与使用确认。list=列表过滤 | get=单条详情 | insights=质量洞察 | confirm_usage=记录采纳。',
87
105
  inputSchema: {
88
106
  type: 'object',
89
107
  properties: {
90
- operation: { type: 'string', enum: ['list', 'get', 'insights', 'confirm_usage'], default: 'list', description: 'list=列表过滤 | get=获取详情 | insights=质量洞察 | confirm_usage=确认采纳' },
91
- id: { type: 'string', description: 'Recipe ID(get/insights/confirm_usage 必填)' },
92
- kind: { type: 'string', enum: ['all', 'rule', 'pattern', 'fact'], description: '按知识类型过滤(list)' },
93
- language: { type: 'string', description: '语言过滤' },
94
- category: { type: 'string', description: '分类过滤' },
95
- knowledgeType: { type: 'string', description: '知识类型过滤' },
96
- status: { type: 'string', description: '状态过滤:active/draft/deprecated' },
97
- complexity: { type: 'string', description: '复杂度过滤' },
98
- limit: { type: 'number', default: 20 },
99
- usageType: { type: 'string', enum: ['adoption', 'application'], description: '使用类型(confirm_usage)' },
100
- feedback: { type: 'string', description: '使用反馈(confirm_usage)' },
108
+ operation: {
109
+ type: 'string',
110
+ enum: ['list', 'get', 'insights', 'confirm_usage'],
111
+ default: 'list',
112
+ description: 'list=列表过滤 | get=获取详情 | insights=质量洞察 | confirm_usage=确认采纳',
113
+ },
114
+ id: { type: 'string', description: 'Recipe ID(get/insights/confirm_usage 必填)' },
115
+ kind: {
116
+ type: 'string',
117
+ enum: ['all', 'rule', 'pattern', 'fact'],
118
+ description: '按知识类型过滤(list)',
119
+ },
120
+ language: { type: 'string', description: '语言过滤' },
121
+ category: { type: 'string', description: '分类过滤' },
122
+ knowledgeType: { type: 'string', description: '知识类型过滤' },
123
+ status: { type: 'string', description: '状态过滤:active/draft/deprecated' },
124
+ complexity: { type: 'string', description: '复杂度过滤' },
125
+ limit: { type: 'number', default: 20 },
126
+ usageType: {
127
+ type: 'string',
128
+ enum: ['adoption', 'application'],
129
+ description: '使用类型(confirm_usage)',
130
+ },
131
+ feedback: { type: 'string', description: '使用反馈(confirm_usage)' },
101
132
  },
102
133
  required: [],
103
134
  },
@@ -111,12 +142,17 @@ export const TOOLS = [
111
142
  inputSchema: {
112
143
  type: 'object',
113
144
  properties: {
114
- operation: { type: 'string', enum: ['targets', 'files', 'metadata'], default: 'targets', description: 'targets=目标列表 | files=文件列表 | metadata=元数据' },
115
- targetName: { type: 'string', description: 'Target 名称(files/metadata 必填)' },
116
- includeSummary: { type: 'boolean', default: true, description: '附带摘要统计(targets)' },
117
- includeContent: { type: 'boolean', default: false, description: '返回文件内容(files)' },
145
+ operation: {
146
+ type: 'string',
147
+ enum: ['targets', 'files', 'metadata'],
148
+ default: 'targets',
149
+ description: 'targets=目标列表 | files=文件列表 | metadata=元数据',
150
+ },
151
+ targetName: { type: 'string', description: 'Target 名称(files/metadata 必填)' },
152
+ includeSummary: { type: 'boolean', default: true, description: '附带摘要统计(targets)' },
153
+ includeContent: { type: 'boolean', default: false, description: '返回文件内容(files)' },
118
154
  contentMaxLines: { type: 'number', default: 100, description: '截断行数(files)' },
119
- maxFiles: { type: 'number', default: 500, description: '最大文件数(files)' },
155
+ maxFiles: { type: 'number', default: 500, description: '最大文件数(files)' },
120
156
  },
121
157
  required: [],
122
158
  },
@@ -126,18 +162,28 @@ export const TOOLS = [
126
162
  {
127
163
  name: 'autosnippet_graph',
128
164
  tier: 'agent',
129
- description: '知识图谱查询。query=节点关系 | impact=影响分析 | path=路径查找 | stats=全局统计。',
165
+ description:
166
+ '知识图谱查询。query=节点关系 | impact=影响分析 | path=路径查找 | stats=全局统计。',
130
167
  inputSchema: {
131
168
  type: 'object',
132
169
  properties: {
133
- operation: { type: 'string', enum: ['query', 'impact', 'path', 'stats'], description: 'query=节点关系 | impact=影响分析 | path=路径查找 | stats=全局统计' },
134
- nodeId: { type: 'string', description: '节点 ID(query/impact)' },
135
- nodeType: { type: 'string', default: 'recipe' },
136
- fromId: { type: 'string', description: '起始节点(path' },
137
- toId: { type: 'string', description: '目标节点(path)' },
138
- direction: { type: 'string', enum: ['out', 'in', 'both'], default: 'both', description: '关系方向(query)' },
139
- maxDepth: { type: 'number', default: 3, description: '最大深度' },
140
- relation: { type: 'string', description: '关系类型过滤' },
170
+ operation: {
171
+ type: 'string',
172
+ enum: ['query', 'impact', 'path', 'stats'],
173
+ description: 'query=节点关系 | impact=影响分析 | path=路径查找 | stats=全局统计',
174
+ },
175
+ nodeId: { type: 'string', description: '节点 ID(query/impact)' },
176
+ nodeType: { type: 'string', default: 'recipe' },
177
+ fromId: { type: 'string', description: '起始节点(path)' },
178
+ toId: { type: 'string', description: '目标节点(path)' },
179
+ direction: {
180
+ type: 'string',
181
+ enum: ['out', 'in', 'both'],
182
+ default: 'both',
183
+ description: '关系方向(query)',
184
+ },
185
+ maxDepth: { type: 'number', default: 3, description: '最大深度' },
186
+ relation: { type: 'string', description: '关系类型过滤' },
141
187
  },
142
188
  required: ['operation'],
143
189
  },
@@ -151,11 +197,24 @@ export const TOOLS = [
151
197
  inputSchema: {
152
198
  type: 'object',
153
199
  properties: {
154
- code: { type: 'string', description: '待检查代码(单文件模式,与 files 二选一)' },
200
+ code: { type: 'string', description: '待检查代码(单文件模式,与 files 二选一)' },
155
201
  language: { type: 'string', description: '编程语言' },
156
202
  filePath: { type: 'string', description: '文件路径(单文件模式)' },
157
- files: { type: 'array', items: { type: 'object', properties: { path: { type: 'string' }, content: { type: 'string' } }, required: ['path'] }, description: '文件列表(批量模式,与 code 二选一)' },
158
- scope: { type: 'string', enum: ['file', 'target', 'project'], default: 'project', description: '审计范围(批量模式)' },
203
+ files: {
204
+ type: 'array',
205
+ items: {
206
+ type: 'object',
207
+ properties: { path: { type: 'string' }, content: { type: 'string' } },
208
+ required: ['path'],
209
+ },
210
+ description: '文件列表(批量模式,与 code 二选一)',
211
+ },
212
+ scope: {
213
+ type: 'string',
214
+ enum: ['file', 'target', 'project'],
215
+ default: 'project',
216
+ description: '审计范围(批量模式)',
217
+ },
159
218
  },
160
219
  required: [],
161
220
  },
@@ -173,39 +232,90 @@ export const TOOLS = [
173
232
  type: 'object',
174
233
  properties: {
175
234
  // ── 必填 ──
176
- title: { type: 'string', description: '中文标题(≤20字)' },
177
- language: { type: 'string', description: '编程语言(小写)' },
178
- content: { type: 'object', description: '内容值对象(必须有 pattern 或 markdown + rationale)', properties: { pattern: { type: 'string' }, markdown: { type: 'string' }, rationale: { type: 'string', description: '设计原理说明(必填)' }, steps: { type: 'array', items: { type: 'object' } }, codeChanges: { type: 'array', items: { type: 'object' } }, verification: { type: 'object' } } },
179
- kind: { type: 'string', enum: ['rule', 'pattern', 'fact'], description: 'rule=规则 | pattern=模板 | fact=参考' },
180
- doClause: { type: 'string', description: '正向指令(英文祈使句 ≤60 tokens)' },
181
- category: { type: 'string', description: '分类(必填): View/Service/Tool/Model/Network/Storage/UI/Utility' },
182
- trigger: { type: 'string', description: '触发关键词(必填,@前缀,如 @video-cover-cell)' },
183
- description: { type: 'string', description: '中文简述(必填)≤80 字' },
184
- headers: { type: 'array', items: { type: 'string' }, description: '完整 import/include 语句数组(必填)' },
185
- usageGuide: { type: 'string', description: '使用指南(必填,Markdown ### 章节格式,描述何时/如何使用此知识)' },
186
- knowledgeType: { type: 'string', description: '知识维度(必填,如 code-pattern/architecture/best-practice/naming-convention 等)' },
235
+ title: { type: 'string', description: '中文标题(≤20字)' },
236
+ language: { type: 'string', description: '编程语言(小写)' },
237
+ content: {
238
+ type: 'object',
239
+ description: '内容值对象(必须有 pattern markdown + rationale)',
240
+ properties: {
241
+ pattern: { type: 'string' },
242
+ markdown: { type: 'string' },
243
+ rationale: { type: 'string', description: '设计原理说明(必填)' },
244
+ steps: { type: 'array', items: { type: 'object' } },
245
+ codeChanges: { type: 'array', items: { type: 'object' } },
246
+ verification: { type: 'object' },
247
+ },
248
+ },
249
+ kind: {
250
+ type: 'string',
251
+ enum: ['rule', 'pattern', 'fact'],
252
+ description: 'rule=规则 | pattern=模板 | fact=参考',
253
+ },
254
+ doClause: { type: 'string', description: '正向指令(英文祈使句 ≤60 tokens)' },
255
+ category: {
256
+ type: 'string',
257
+ description: '分类(必填): View/Service/Tool/Model/Network/Storage/UI/Utility',
258
+ },
259
+ trigger: { type: 'string', description: '触发关键词(必填,@前缀,如 @video-cover-cell)' },
260
+ description: { type: 'string', description: '中文简述(必填)≤80 字' },
261
+ headers: {
262
+ type: 'array',
263
+ items: { type: 'string' },
264
+ description: '完整 import/include 语句数组(必填)',
265
+ },
266
+ usageGuide: {
267
+ type: 'string',
268
+ description: '使用指南(必填,Markdown ### 章节格式,描述何时/如何使用此知识)',
269
+ },
270
+ knowledgeType: {
271
+ type: 'string',
272
+ description:
273
+ '知识维度(必填,如 code-pattern/architecture/best-practice/naming-convention 等)',
274
+ },
187
275
  // ── Cursor Delivery ──
188
- dontClause: { type: 'string', description: '反向约束' },
189
- whenClause: { type: 'string', description: '触发场景' },
190
- topicHint: { type: 'string', description: '主题分组' },
191
- coreCode: { type: 'string', description: '精华代码骨架(3-8行)' },
276
+ dontClause: { type: 'string', description: '反向约束' },
277
+ whenClause: { type: 'string', description: '触发场景' },
278
+ topicHint: { type: 'string', description: '主题分组' },
279
+ coreCode: { type: 'string', description: '精华代码骨架(3-8行,必须语法完整、括号配对)' },
192
280
  // ── 可选 ──
193
- complexity: { type: 'string', enum: ['beginner', 'intermediate', 'advanced'] },
194
- scope: { type: 'string', enum: ['universal', 'project-specific', 'target-specific'] },
195
- difficulty: { type: 'string' },
196
- tags: { type: 'array', items: { type: 'string' } },
197
- constraints: { type: 'object', description: '约束' },
198
- relations: { type: 'object', description: '关系' },
199
- reasoning: { type: 'object', description: '推理依据 {whyStandard, sources[], confidence}', properties: { whyStandard: { type: 'string' }, sources: { type: 'array', items: { type: 'string' } }, confidence: { type: 'number' }, qualitySignals: { type: 'object' }, alternatives: { type: 'array', items: { type: 'string' } } } },
200
- headerPaths: { type: 'array', items: { type: 'string' } },
201
- moduleName: { type: 'string' },
202
- includeHeaders: { type: 'boolean' },
203
- source: { type: 'string', description: '来源标识' },
204
- client_id: { type: 'string', description: '客户端标识' },
281
+ complexity: { type: 'string', enum: ['beginner', 'intermediate', 'advanced'] },
282
+ scope: { type: 'string', enum: ['universal', 'project-specific', 'target-specific'] },
283
+ difficulty: { type: 'string' },
284
+ tags: { type: 'array', items: { type: 'string' } },
285
+ constraints: { type: 'object', description: '约束' },
286
+ relations: { type: 'object', description: '关系' },
287
+ reasoning: {
288
+ type: 'object',
289
+ description: '推理依据 {whyStandard, sources[], confidence}',
290
+ properties: {
291
+ whyStandard: { type: 'string' },
292
+ sources: { type: 'array', items: { type: 'string' } },
293
+ confidence: { type: 'number' },
294
+ qualitySignals: { type: 'object' },
295
+ alternatives: { type: 'array', items: { type: 'string' } },
296
+ },
297
+ },
298
+ headerPaths: { type: 'array', items: { type: 'string' } },
299
+ moduleName: { type: 'string' },
300
+ includeHeaders: { type: 'boolean' },
301
+ source: { type: 'string', description: '来源标识' },
302
+ client_id: { type: 'string', description: '客户端标识' },
205
303
  // ── 增强控制 ──
206
- skipDuplicateCheck: { type: 'boolean', default: false, description: '跳过去重检测' },
304
+ skipDuplicateCheck: { type: 'boolean', default: false, description: '跳过去重检测' },
207
305
  },
208
- required: ['title', 'language', 'content', 'kind', 'doClause', 'category', 'trigger', 'description', 'headers', 'usageGuide', 'knowledgeType'],
306
+ required: [
307
+ 'title',
308
+ 'language',
309
+ 'content',
310
+ 'kind',
311
+ 'doClause',
312
+ 'category',
313
+ 'trigger',
314
+ 'description',
315
+ 'headers',
316
+ 'usageGuide',
317
+ 'knowledgeType',
318
+ ],
209
319
  },
210
320
  },
211
321
 
@@ -217,11 +327,15 @@ export const TOOLS = [
217
327
  inputSchema: {
218
328
  type: 'object',
219
329
  properties: {
220
- target_name: { type: 'string', description: 'Target 名称' },
221
- items: { type: 'array', description: '知识条目数组,每项字段同 submit_knowledge', items: { type: 'object' } },
222
- source: { type: 'string', default: 'cursor-scan' },
223
- deduplicate: { type: 'boolean', default: true },
224
- client_id: { type: 'string' },
330
+ target_name: { type: 'string', description: 'Target 名称' },
331
+ items: {
332
+ type: 'array',
333
+ description: '知识条目数组,每项字段同 submit_knowledge',
334
+ items: { type: 'object' },
335
+ },
336
+ source: { type: 'string', default: 'cursor-scan' },
337
+ deduplicate: { type: 'boolean', default: true },
338
+ client_id: { type: 'string' },
225
339
  },
226
340
  required: ['target_name', 'items'],
227
341
  },
@@ -231,16 +345,21 @@ export const TOOLS = [
231
345
  {
232
346
  name: 'autosnippet_save_document',
233
347
  tier: 'agent',
234
- description: '保存开发文档(设计文档、排查报告、ADR 等)。仅需 title + markdown,自动以 dev-document 存储。',
348
+ description:
349
+ '保存开发文档(设计文档、排查报告、ADR 等)。仅需 title + markdown,自动以 dev-document 存储。',
235
350
  inputSchema: {
236
351
  type: 'object',
237
352
  properties: {
238
- title: { type: 'string', description: '文档标题' },
239
- markdown: { type: 'string', description: 'Markdown 全文' },
353
+ title: { type: 'string', description: '文档标题' },
354
+ markdown: { type: 'string', description: 'Markdown 全文' },
240
355
  description: { type: 'string', description: '一句话摘要' },
241
- tags: { type: 'array', items: { type: 'string' } },
242
- scope: { type: 'string', enum: ['universal', 'project-specific'], default: 'project-specific' },
243
- source: { type: 'string' },
356
+ tags: { type: 'array', items: { type: 'string' } },
357
+ scope: {
358
+ type: 'string',
359
+ enum: ['universal', 'project-specific'],
360
+ default: 'project-specific',
361
+ },
362
+ source: { type: 'string' },
244
363
  },
245
364
  required: ['title', 'markdown'],
246
365
  },
@@ -250,18 +369,28 @@ export const TOOLS = [
250
369
  {
251
370
  name: 'autosnippet_skill',
252
371
  tier: 'agent',
253
- description: 'Skill 管理。list=列表 | load=加载 | create=创建 | update=更新 | delete=删除 | suggest=AI推荐。',
372
+ description:
373
+ 'Skill 管理。list=列表 | load=加载 | create=创建 | update=更新 | delete=删除 | suggest=AI推荐。',
254
374
  inputSchema: {
255
375
  type: 'object',
256
376
  properties: {
257
- operation: { type: 'string', enum: ['list', 'load', 'create', 'update', 'delete', 'suggest'], description: 'list=列表 | load=加载 | create=创建 | update=更新 | delete=删除 | suggest=推荐' },
258
- name: { type: 'string', description: 'Skill 名称(load/create/update/delete)' },
259
- skillName: { type: 'string', description: 'Skill 名称(load 的别名,兼容旧调用)' },
260
- section: { type: 'string', description: '章节过滤(load)' },
377
+ operation: {
378
+ type: 'string',
379
+ enum: ['list', 'load', 'create', 'update', 'delete', 'suggest'],
380
+ description:
381
+ 'list=列表 | load=加载 | create=创建 | update=更新 | delete=删除 | suggest=推荐',
382
+ },
383
+ name: { type: 'string', description: 'Skill 名称(load/create/update/delete)' },
384
+ skillName: { type: 'string', description: 'Skill 名称(load 的别名,兼容旧调用)' },
385
+ section: { type: 'string', description: '章节过滤(load)' },
261
386
  description: { type: 'string', description: '描述(create/update)' },
262
- content: { type: 'string', description: 'Markdown 正文(create/update)' },
263
- overwrite: { type: 'boolean', default: false, description: '覆盖已存在(create)' },
264
- createdBy: { type: 'string', enum: ['manual', 'user-ai', 'system-ai', 'external-ai'], default: 'external-ai' },
387
+ content: { type: 'string', description: 'Markdown 正文(create/update)' },
388
+ overwrite: { type: 'boolean', default: false, description: '覆盖已存在(create)' },
389
+ createdBy: {
390
+ type: 'string',
391
+ enum: ['manual', 'user-ai', 'system-ai', 'external-ai'],
392
+ default: 'external-ai',
393
+ },
265
394
  },
266
395
  required: ['operation'],
267
396
  },
@@ -271,19 +400,36 @@ export const TOOLS = [
271
400
  {
272
401
  name: 'autosnippet_bootstrap',
273
402
  tier: 'agent',
274
- description: '冷启动与项目扫描。knowledge=初始化知识库9维度 | refine=AI润色候选 | scan=轻量探查。',
403
+ description:
404
+ '冷启动与项目扫描。knowledge=初始化知识库9维度 | refine=AI润色候选 | scan=轻量探查。',
275
405
  inputSchema: {
276
406
  type: 'object',
277
407
  properties: {
278
- operation: { type: 'string', enum: ['knowledge', 'refine', 'scan'], description: 'knowledge=冷启动 | refine=AI润色 | scan=轻量探查' },
279
- maxFiles: { type: 'number', default: 500, description: '最大扫描文件数(knowledge/scan)' },
280
- contentMaxLines: { type: 'number', default: 120, description: '每文件最大行数(knowledge/scan' },
281
- skipGuard: { type: 'boolean', default: false, description: '跳过 Guard 审计(knowledge)' },
282
- loadSkills: { type: 'boolean', default: true, description: '加载 Skills 增强维度(knowledge)' },
283
- includeContent: { type: 'boolean', default: false, description: '返回文件内容(scan)' },
284
- candidateIds: { type: 'array', items: { type: 'string' }, description: '候选 ID(refine)' },
285
- userPrompt: { type: 'string', description: '润色提示词(refine)' },
286
- dryRun: { type: 'boolean', default: false, description: '预览模式(refine)' },
408
+ operation: {
409
+ type: 'string',
410
+ enum: ['knowledge', 'refine', 'scan'],
411
+ description: 'knowledge=冷启动 | refine=AI润色 | scan=轻量探查',
412
+ },
413
+ maxFiles: { type: 'number', default: 500, description: '最大扫描文件数(knowledge/scan)' },
414
+ contentMaxLines: {
415
+ type: 'number',
416
+ default: 120,
417
+ description: '每文件最大行数(knowledge/scan)',
418
+ },
419
+ skipGuard: { type: 'boolean', default: false, description: '跳过 Guard 审计(knowledge)' },
420
+ loadSkills: {
421
+ type: 'boolean',
422
+ default: true,
423
+ description: '加载 Skills 增强维度(knowledge)',
424
+ },
425
+ includeContent: { type: 'boolean', default: false, description: '返回文件内容(scan)' },
426
+ candidateIds: {
427
+ type: 'array',
428
+ items: { type: 'string' },
429
+ description: '候选 ID(refine)',
430
+ },
431
+ userPrompt: { type: 'string', description: '润色提示词(refine)' },
432
+ dryRun: { type: 'boolean', default: false, description: '预览模式(refine)' },
287
433
  },
288
434
  required: ['operation'],
289
435
  },
@@ -309,7 +455,11 @@ export const TOOLS = [
309
455
  inputSchema: {
310
456
  type: 'object',
311
457
  properties: {
312
- candidateIds: { type: 'array', items: { type: 'string' }, description: '候选 ID 列表(最多20条)' },
458
+ candidateIds: {
459
+ type: 'array',
460
+ items: { type: 'string' },
461
+ description: '候选 ID 列表(最多20条)',
462
+ },
313
463
  },
314
464
  required: ['candidateIds'],
315
465
  },
@@ -319,12 +469,25 @@ export const TOOLS = [
319
469
  {
320
470
  name: 'autosnippet_knowledge_lifecycle',
321
471
  tier: 'admin',
322
- description: '知识条目生命周期操作:submit/approve/reject/publish/deprecate/reactivate/fast_track。',
472
+ description:
473
+ '知识条目生命周期操作:submit/approve/reject/publish/deprecate/reactivate/fast_track。',
323
474
  inputSchema: {
324
475
  type: 'object',
325
476
  properties: {
326
- id: { type: 'string', description: '知识条目 ID' },
327
- action: { type: 'string', enum: ['submit', 'approve', 'reject', 'publish', 'deprecate', 'reactivate', 'to_draft', 'fast_track'] },
477
+ id: { type: 'string', description: '知识条目 ID' },
478
+ action: {
479
+ type: 'string',
480
+ enum: [
481
+ 'submit',
482
+ 'approve',
483
+ 'reject',
484
+ 'publish',
485
+ 'deprecate',
486
+ 'reactivate',
487
+ 'to_draft',
488
+ 'fast_track',
489
+ ],
490
+ },
328
491
  reason: { type: 'string', description: 'reject/deprecate 原因' },
329
492
  },
330
493
  required: ['id', 'action'],
@@ -343,18 +506,30 @@ export const TOOLS = [
343
506
  type: 'object',
344
507
  description: '候选结构',
345
508
  properties: {
346
- title: { type: 'string' }, code: { type: 'string' }, language: { type: 'string' },
347
- category: { type: 'string' }, knowledgeType: { type: 'string' },
509
+ title: { type: 'string' },
510
+ code: { type: 'string' },
511
+ language: { type: 'string' },
512
+ category: { type: 'string' },
513
+ knowledgeType: { type: 'string' },
348
514
  complexity: { type: 'string', enum: ['beginner', 'intermediate', 'advanced'] },
349
515
  scope: { type: 'string', enum: ['universal', 'project-specific', 'target-specific'] },
350
516
  tags: { type: 'array', items: { type: 'string' } },
351
- description: { type: 'string' }, trigger: { type: 'string' },
352
- usageGuide: { type: 'string' }, rationale: { type: 'string' },
517
+ description: { type: 'string' },
518
+ trigger: { type: 'string' },
519
+ usageGuide: { type: 'string' },
520
+ rationale: { type: 'string' },
353
521
  headers: { type: 'array', items: { type: 'string' } },
354
522
  steps: { type: 'array', items: { type: 'object' } },
355
523
  codeChanges: { type: 'array', items: { type: 'object' } },
356
524
  constraints: { type: 'object' },
357
- reasoning: { type: 'object', properties: { whyStandard: { type: 'string' }, sources: { type: 'array', items: { type: 'string' } }, confidence: { type: 'number' } } },
525
+ reasoning: {
526
+ type: 'object',
527
+ properties: {
528
+ whyStandard: { type: 'string' },
529
+ sources: { type: 'array', items: { type: 'string' } },
530
+ confidence: { type: 'number' },
531
+ },
532
+ },
358
533
  },
359
534
  },
360
535
  strict: { type: 'boolean', default: false },
@@ -371,9 +546,17 @@ export const TOOLS = [
371
546
  inputSchema: {
372
547
  type: 'object',
373
548
  properties: {
374
- candidate: { type: 'object', properties: { title: { type: 'string' }, summary: { type: 'string' }, usageGuide: { type: 'string' }, code: { type: 'string' } } },
549
+ candidate: {
550
+ type: 'object',
551
+ properties: {
552
+ title: { type: 'string' },
553
+ summary: { type: 'string' },
554
+ usageGuide: { type: 'string' },
555
+ code: { type: 'string' },
556
+ },
557
+ },
375
558
  threshold: { type: 'number', default: 0.7 },
376
- topK: { type: 'number', default: 5 },
559
+ topK: { type: 'number', default: 5 },
377
560
  },
378
561
  required: ['candidate'],
379
562
  },