autosnippet 3.3.4 → 3.3.6

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 (221) hide show
  1. package/README.md +174 -83
  2. package/config/constitution.yaml +2 -0
  3. package/dashboard/dist/assets/icons-D1aVZYFW.js +1 -0
  4. package/dashboard/dist/assets/index-CxHOu8Hd.css +1 -0
  5. package/dashboard/dist/assets/index-DDdAOpYT.js +128 -0
  6. package/dashboard/dist/index.html +3 -3
  7. package/dist/bin/api-server.js +1 -0
  8. package/dist/bin/cli.d.ts +1 -0
  9. package/dist/bin/cli.js +136 -9
  10. package/dist/lib/agent/AgentFactory.d.ts +0 -17
  11. package/dist/lib/agent/AgentFactory.js +1 -25
  12. package/dist/lib/agent/capabilities.d.ts +11 -0
  13. package/dist/lib/agent/capabilities.js +29 -5
  14. package/dist/lib/agent/context/ExplorationTracker.js +10 -1
  15. package/dist/lib/agent/context/exploration/ExplorationStrategies.d.ts +2 -0
  16. package/dist/lib/agent/context/exploration/ExplorationStrategies.js +2 -2
  17. package/dist/lib/agent/domain/insight-analyst.d.ts +47 -3
  18. package/dist/lib/agent/domain/insight-analyst.js +111 -11
  19. package/dist/lib/agent/domain/insight-evolver.d.ts +69 -0
  20. package/dist/lib/agent/domain/insight-evolver.js +230 -0
  21. package/dist/lib/agent/domain/insight-gate.d.ts +42 -0
  22. package/dist/lib/agent/domain/insight-gate.js +41 -0
  23. package/dist/lib/agent/domain/insight-producer.d.ts +27 -2
  24. package/dist/lib/agent/domain/insight-producer.js +60 -5
  25. package/dist/lib/agent/domain/scan-prompts.js +10 -7
  26. package/dist/lib/agent/memory/ActiveContext.d.ts +2 -28
  27. package/dist/lib/agent/memory/MemoryCoordinator.d.ts +2 -2
  28. package/dist/lib/agent/memory/SessionStore.d.ts +6 -12
  29. package/dist/lib/agent/memory/SessionStore.js +9 -15
  30. package/dist/lib/agent/memory/memory-flush-contract.d.ts +49 -0
  31. package/dist/lib/agent/memory/memory-flush-contract.js +16 -0
  32. package/dist/lib/agent/memory/session-store-schema.d.ts +20 -0
  33. package/dist/lib/agent/memory/session-store-schema.js +41 -0
  34. package/dist/lib/agent/presets.d.ts +89 -1
  35. package/dist/lib/agent/presets.js +53 -5
  36. package/dist/lib/agent/tools/_shared.d.ts +7 -15
  37. package/dist/lib/agent/tools/_shared.js +20 -21
  38. package/dist/lib/agent/tools/composite.d.ts +25 -22
  39. package/dist/lib/agent/tools/composite.js +108 -109
  40. package/dist/lib/agent/tools/evolution-tools.d.ts +145 -0
  41. package/dist/lib/agent/tools/evolution-tools.js +161 -0
  42. package/dist/lib/agent/tools/index.d.ts +163 -92
  43. package/dist/lib/agent/tools/index.js +9 -1
  44. package/dist/lib/agent/tools/lifecycle.d.ts +7 -1
  45. package/dist/lib/agent/tools/lifecycle.js +59 -75
  46. package/dist/lib/cli/AiScanService.js +1 -1
  47. package/dist/lib/cli/KnowledgeSyncService.d.ts +5 -1
  48. package/dist/lib/cli/KnowledgeSyncService.js +6 -3
  49. package/dist/lib/core/AstAnalyzer.d.ts +1 -0
  50. package/dist/lib/{service/bootstrap/DimensionCopyRegistry.d.ts → domain/dimension/DimensionCopy.d.ts} +2 -2
  51. package/dist/lib/{service/bootstrap/DimensionCopyRegistry.js → domain/dimension/DimensionCopy.js} +22 -72
  52. package/dist/lib/domain/dimension/DimensionRegistry.d.ts +54 -0
  53. package/dist/lib/domain/dimension/DimensionRegistry.js +620 -0
  54. package/dist/lib/domain/dimension/DimensionSop.d.ts +55 -0
  55. package/dist/lib/domain/dimension/DimensionSop.js +1604 -0
  56. package/dist/lib/domain/dimension/UnifiedDimension.d.ts +61 -0
  57. package/dist/lib/domain/dimension/UnifiedDimension.js +53 -0
  58. package/dist/lib/domain/dimension/index.d.ts +10 -0
  59. package/dist/lib/domain/dimension/index.js +9 -0
  60. package/dist/lib/domain/knowledge/FieldSpec.d.ts +1 -1
  61. package/dist/lib/domain/knowledge/FieldSpec.js +29 -16
  62. package/dist/lib/domain/knowledge/KnowledgeEntry.d.ts +33 -111
  63. package/dist/lib/domain/knowledge/KnowledgeEntry.js +27 -6
  64. package/dist/lib/domain/knowledge/KnowledgeRepository.d.ts +1 -0
  65. package/dist/lib/domain/knowledge/KnowledgeRepository.js +3 -0
  66. package/dist/lib/domain/knowledge/Lifecycle.js +1 -1
  67. package/dist/lib/domain/knowledge/StyleGuide.d.ts +1 -1
  68. package/dist/lib/domain/knowledge/StyleGuide.js +1 -1
  69. package/dist/lib/domain/knowledge/UnifiedValidator.js +15 -0
  70. package/dist/lib/domain/knowledge/values/Stats.d.ts +1 -1
  71. package/dist/lib/domain/knowledge/values/Stats.js +2 -2
  72. package/dist/lib/external/mcp/McpServer.js +4 -0
  73. package/dist/lib/external/mcp/handlers/TargetClassifier.d.ts +1 -1
  74. package/dist/lib/external/mcp/handlers/bootstrap/BootstrapSession.d.ts +8 -16
  75. package/dist/lib/external/mcp/handlers/bootstrap/BootstrapSession.js +10 -10
  76. package/dist/lib/external/mcp/handlers/bootstrap/ExternalSubmissionTracker.d.ts +7 -0
  77. package/dist/lib/external/mcp/handlers/bootstrap/ExternalSubmissionTracker.js +20 -0
  78. package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.d.ts +52 -132
  79. package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.js +204 -17
  80. package/dist/lib/external/mcp/handlers/bootstrap/base-dimensions.d.ts +11 -75
  81. package/dist/lib/external/mcp/handlers/bootstrap/base-dimensions.js +40 -191
  82. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/dimension-configs.d.ts +13 -78
  83. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/dimension-configs.js +30 -52
  84. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/dimension-context.d.ts +0 -1
  85. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.d.ts +99 -12
  86. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +172 -161
  87. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/tier-scheduler.js +7 -17
  88. package/dist/lib/external/mcp/handlers/bootstrap/shared/async-fill-helpers.d.ts +46 -0
  89. package/dist/lib/external/mcp/handlers/bootstrap/shared/async-fill-helpers.js +58 -0
  90. package/dist/lib/external/mcp/handlers/bootstrap/shared/audit-helpers.d.ts +25 -0
  91. package/dist/lib/external/mcp/handlers/bootstrap/shared/audit-helpers.js +47 -0
  92. package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.d.ts +50 -12
  93. package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.js +30 -10
  94. package/dist/lib/external/mcp/handlers/bootstrap/shared/dimension-text.js +1 -1
  95. package/dist/lib/external/mcp/handlers/bootstrap/shared/handler-types.d.ts +24 -0
  96. package/dist/lib/external/mcp/handlers/bootstrap/shared/handler-types.js +14 -0
  97. package/dist/lib/external/mcp/handlers/bootstrap/shared/panorama-utils.d.ts +14 -0
  98. package/dist/lib/external/mcp/handlers/bootstrap/shared/panorama-utils.js +48 -0
  99. package/dist/lib/external/mcp/handlers/bootstrap/shared/session-helpers.d.ts +21 -0
  100. package/dist/lib/external/mcp/handlers/bootstrap/shared/session-helpers.js +45 -0
  101. package/dist/lib/external/mcp/handlers/bootstrap/shared/skill-generator.d.ts +1 -1
  102. package/dist/lib/external/mcp/handlers/bootstrap/shared/target-file-map.d.ts +27 -0
  103. package/dist/lib/external/mcp/handlers/bootstrap/shared/target-file-map.js +44 -0
  104. package/dist/lib/external/mcp/handlers/bootstrap-external.d.ts +14 -10
  105. package/dist/lib/external/mcp/handlers/bootstrap-external.js +39 -51
  106. package/dist/lib/external/mcp/handlers/bootstrap-internal.d.ts +2 -0
  107. package/dist/lib/external/mcp/handlers/bootstrap-internal.js +115 -82
  108. package/dist/lib/external/mcp/handlers/consolidated.d.ts +4 -4
  109. package/dist/lib/external/mcp/handlers/consolidated.js +115 -162
  110. package/dist/lib/external/mcp/handlers/dimension-complete-external.js +69 -1
  111. package/dist/lib/external/mcp/handlers/evolve-external.d.ts +54 -0
  112. package/dist/lib/external/mcp/handlers/evolve-external.js +226 -0
  113. package/dist/lib/external/mcp/handlers/knowledge.js +26 -2
  114. package/dist/lib/external/mcp/handlers/rescan-external.d.ts +76 -0
  115. package/dist/lib/external/mcp/handlers/rescan-external.js +335 -0
  116. package/dist/lib/external/mcp/handlers/rescan-internal.d.ts +120 -0
  117. package/dist/lib/external/mcp/handlers/rescan-internal.js +359 -0
  118. package/dist/lib/external/mcp/handlers/search.d.ts +6 -5
  119. package/dist/lib/external/mcp/handlers/search.js +6 -5
  120. package/dist/lib/external/mcp/handlers/types.d.ts +2 -1
  121. package/dist/lib/external/mcp/handlers/wiki-external.js +2 -2
  122. package/dist/lib/external/mcp/tools.d.ts +8 -18
  123. package/dist/lib/external/mcp/tools.js +60 -3
  124. package/dist/lib/http/routes/knowledge.js +122 -1
  125. package/dist/lib/http/routes/modules.js +25 -3
  126. package/dist/lib/http/routes/panorama.js +16 -4
  127. package/dist/lib/infrastructure/cache/CacheCoordinator.d.ts +41 -0
  128. package/dist/lib/infrastructure/cache/CacheCoordinator.js +105 -0
  129. package/dist/lib/infrastructure/database/migrations/006_lifecycle_transition_events.d.ts +7 -0
  130. package/dist/lib/infrastructure/database/migrations/006_lifecycle_transition_events.js +28 -0
  131. package/dist/lib/infrastructure/vector/HnswVectorAdapter.js +1 -1
  132. package/dist/lib/injection/ServiceContainer.js +55 -0
  133. package/dist/lib/injection/ServiceMap.d.ts +8 -1
  134. package/dist/lib/injection/modules/InfraModule.js +4 -1
  135. package/dist/lib/injection/modules/KnowledgeModule.js +38 -1
  136. package/dist/lib/repository/evolution/ProposalRepository.d.ts +99 -0
  137. package/dist/lib/repository/evolution/ProposalRepository.js +255 -0
  138. package/dist/lib/repository/knowledge/KnowledgeRepository.impl.d.ts +4 -0
  139. package/dist/lib/repository/knowledge/KnowledgeRepository.impl.js +16 -1
  140. package/dist/lib/service/bootstrap/BootstrapEventEmitter.d.ts +3 -2
  141. package/dist/lib/service/bootstrap/BootstrapEventEmitter.js +1 -1
  142. package/dist/lib/service/bootstrap/DeliveryVerifier.d.ts +51 -0
  143. package/dist/lib/service/bootstrap/DeliveryVerifier.js +163 -0
  144. package/dist/lib/service/bootstrap/UiStartupTasks.d.ts +22 -4
  145. package/dist/lib/service/bootstrap/UiStartupTasks.js +73 -5
  146. package/dist/lib/service/bootstrap/bootstrap-event-types.d.ts +54 -0
  147. package/dist/lib/service/bootstrap/bootstrap-event-types.js +10 -0
  148. package/dist/lib/service/cleanup/CleanupService.d.ts +85 -0
  149. package/dist/lib/service/cleanup/CleanupService.js +324 -0
  150. package/dist/lib/service/delivery/AgentInstructionsGenerator.js +39 -43
  151. package/dist/lib/service/delivery/FileProtection.d.ts +20 -0
  152. package/dist/lib/service/delivery/FileProtection.js +54 -0
  153. package/dist/lib/service/delivery/SkillsSyncer.js +16 -21
  154. package/dist/lib/service/evolution/ContentPatcher.d.ts +44 -0
  155. package/dist/lib/service/evolution/ContentPatcher.js +310 -0
  156. package/dist/lib/service/evolution/DecayDetector.d.ts +4 -3
  157. package/dist/lib/service/evolution/DecayDetector.js +97 -22
  158. package/dist/lib/service/evolution/KnowledgeMetabolism.d.ts +4 -2
  159. package/dist/lib/service/evolution/KnowledgeMetabolism.js +29 -2
  160. package/dist/lib/service/evolution/ProposalExecutor.d.ts +66 -0
  161. package/dist/lib/service/evolution/ProposalExecutor.js +424 -0
  162. package/dist/lib/service/evolution/RecipeLifecycleSupervisor.d.ts +64 -0
  163. package/dist/lib/service/evolution/RecipeLifecycleSupervisor.js +458 -0
  164. package/dist/lib/service/evolution/RecipeRelevanceAuditor.d.ts +89 -0
  165. package/dist/lib/service/evolution/RecipeRelevanceAuditor.js +492 -0
  166. package/dist/lib/service/evolution/StagingManager.js +5 -3
  167. package/dist/lib/service/evolution/createSupersedeProposal.d.ts +44 -0
  168. package/dist/lib/service/evolution/createSupersedeProposal.js +81 -0
  169. package/dist/lib/service/guard/ComplianceReporter.d.ts +4 -0
  170. package/dist/lib/service/guard/ComplianceReporter.js +51 -0
  171. package/dist/lib/service/guard/GuardCheckEngine.js +5 -4
  172. package/dist/lib/service/guard/GuardCrossFileChecks.js +2 -0
  173. package/dist/lib/service/guard/ReverseGuard.d.ts +1 -1
  174. package/dist/lib/service/guard/ReverseGuard.js +32 -2
  175. package/dist/lib/service/knowledge/ConfidenceRouter.js +1 -1
  176. package/dist/lib/service/knowledge/KnowledgeService.d.ts +11 -1
  177. package/dist/lib/service/knowledge/KnowledgeService.js +44 -4
  178. package/dist/lib/service/knowledge/RecipeProductionGateway.d.ts +225 -0
  179. package/dist/lib/service/knowledge/RecipeProductionGateway.js +384 -0
  180. package/dist/lib/service/knowledge/SourceRefReconciler.d.ts +2 -0
  181. package/dist/lib/service/knowledge/SourceRefReconciler.js +48 -0
  182. package/dist/lib/service/panorama/DimensionAnalyzer.d.ts +3 -2
  183. package/dist/lib/service/panorama/DimensionAnalyzer.js +15 -140
  184. package/dist/lib/service/search/BM25Scorer.d.ts +2 -2
  185. package/dist/lib/service/search/SearchEngine.d.ts +11 -10
  186. package/dist/lib/service/search/SearchEngine.js +38 -36
  187. package/dist/lib/service/search/SearchTypes.d.ts +14 -8
  188. package/dist/lib/service/search/SearchTypes.js +1 -1
  189. package/dist/lib/service/search/tokenizer.d.ts +1 -1
  190. package/dist/lib/service/search/tokenizer.js +2 -2
  191. package/dist/lib/shared/schemas/common.d.ts +4 -4
  192. package/dist/lib/shared/schemas/http-requests.d.ts +12 -1
  193. package/dist/lib/shared/schemas/http-requests.js +8 -0
  194. package/dist/lib/shared/schemas/mcp-tools.d.ts +33 -2
  195. package/dist/lib/shared/schemas/mcp-tools.js +42 -0
  196. package/dist/lib/types/evolution.d.ts +135 -0
  197. package/dist/lib/types/evolution.js +6 -0
  198. package/dist/lib/types/graph-shared.d.ts +25 -0
  199. package/dist/lib/types/graph-shared.js +7 -0
  200. package/dist/lib/types/knowledge-wire.d.ts +131 -0
  201. package/dist/lib/types/knowledge-wire.js +7 -0
  202. package/dist/lib/types/project-snapshot-builder.d.ts +19 -0
  203. package/dist/lib/types/project-snapshot-builder.js +189 -0
  204. package/dist/lib/types/project-snapshot.d.ts +399 -0
  205. package/dist/lib/types/project-snapshot.js +17 -0
  206. package/dist/lib/types/search-wire.d.ts +46 -0
  207. package/dist/lib/types/search-wire.js +7 -0
  208. package/dist/lib/types/snapshot-views.d.ts +58 -0
  209. package/dist/lib/types/snapshot-views.js +103 -0
  210. package/package.json +1 -1
  211. package/skills/autosnippet-recipes/SKILL.md +1 -1
  212. package/templates/instructions/agent-static.md +2 -0
  213. package/templates/instructions/conventions.md +3 -1
  214. package/templates/recipes-setup/README.md +2 -2
  215. package/dashboard/dist/assets/icons-BJ2mUBi8.js +0 -1
  216. package/dashboard/dist/assets/index-B659K9t5.js +0 -128
  217. package/dashboard/dist/assets/index-NCm40PMD.css +0 -1
  218. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/noAiFallback.d.ts +0 -169
  219. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/noAiFallback.js +0 -727
  220. package/dist/lib/external/mcp/handlers/bootstrap/shared/dimension-sop.d.ts +0 -370
  221. package/dist/lib/external/mcp/handlers/bootstrap/shared/dimension-sop.js +0 -821
@@ -0,0 +1,399 @@
1
+ /**
2
+ * ProjectSnapshot — 统一项目快照类型定义
3
+ *
4
+ * 这是所有 Phase 1-4 数据的唯一类型来源(Single Source of Truth)。
5
+ * 消除了之前在 bootstrap-phases.ts、MissionBriefingBuilder.ts、
6
+ * handler-types.ts、rescan-internal.ts 等文件中重复定义的类型。
7
+ *
8
+ * 设计原则:
9
+ * 1. **不可变** — 创建后通过 Object.freeze 冻结
10
+ * 2. **完整** — 包含 Phase 1-4 全部产出
11
+ * 3. **类型化** — 每个字段有明确接口,不使用 `any`
12
+ * 4. **单一定义** — 项目分析数据的唯一类型来源
13
+ *
14
+ * @module types/project-snapshot
15
+ * @see docs/copilot/unified-project-snapshot-design.md
16
+ */
17
+ /** 项目级别的文件信息,来自 Phase 1 扫描 */
18
+ export interface SnapshotFile {
19
+ name: string;
20
+ path: string;
21
+ relativePath: string;
22
+ content: string;
23
+ targetName: string;
24
+ language?: string;
25
+ totalLines?: number;
26
+ priority?: string;
27
+ truncated?: boolean;
28
+ }
29
+ /** 构建目标 (Target),来自 Phase 1 Discoverer */
30
+ export interface SnapshotTarget {
31
+ name: string;
32
+ type?: string;
33
+ framework?: string;
34
+ packageName?: string;
35
+ inferredRole?: string;
36
+ fileCount?: number;
37
+ /** 标记来自子包的 target */
38
+ isLocalPackage?: boolean;
39
+ }
40
+ /** 本地子包模块信息 */
41
+ export interface LocalPackageModule {
42
+ name: string;
43
+ packageName: string;
44
+ fileCount: number;
45
+ inferredRole?: string;
46
+ keyFiles?: string[];
47
+ }
48
+ /** 语言统计 */
49
+ export interface LanguageProfile {
50
+ primaryLang: string;
51
+ stats: Record<string, number>;
52
+ secondary?: string[];
53
+ isMultiLang?: boolean;
54
+ }
55
+ /** AST 分析摘要,来自 Phase 1.5 */
56
+ export interface AstSummary {
57
+ classes?: AstClassInfo[];
58
+ protocols?: AstProtocolInfo[];
59
+ categories?: AstCategoryInfo[];
60
+ fileSummaries?: AstFileSummary[];
61
+ patternStats?: Record<string, unknown>;
62
+ projectMetrics?: ProjectMetrics;
63
+ fileCount?: number;
64
+ }
65
+ export interface AstClassInfo {
66
+ name: string;
67
+ superclass?: string;
68
+ methodCount?: number;
69
+ methods?: unknown[];
70
+ protocols?: string[];
71
+ conformedProtocols?: string[];
72
+ file?: string;
73
+ relativePath?: string;
74
+ targetName?: string;
75
+ }
76
+ export interface AstProtocolInfo {
77
+ name: string;
78
+ file?: string;
79
+ relativePath?: string;
80
+ methodCount?: number;
81
+ methods?: unknown[];
82
+ conformers?: string[];
83
+ targetName?: string;
84
+ }
85
+ export interface AstCategoryInfo {
86
+ baseClass?: string;
87
+ extendedClass?: string;
88
+ name?: string;
89
+ file?: string;
90
+ relativePath?: string;
91
+ methods?: Array<string | {
92
+ name: string;
93
+ }>;
94
+ }
95
+ export interface AstMethodInfo {
96
+ name: string;
97
+ className?: string;
98
+ isAsync?: boolean;
99
+ complexity?: number;
100
+ file?: string;
101
+ line?: number;
102
+ lines?: number;
103
+ bodyLines?: number;
104
+ [key: string]: unknown;
105
+ }
106
+ export interface AstFileSummary {
107
+ exports?: unknown[];
108
+ methods?: AstMethodInfo[];
109
+ }
110
+ export interface ProjectMetrics {
111
+ totalMethods?: number;
112
+ complexMethods?: AstMethodInfo[];
113
+ longMethods?: AstMethodInfo[];
114
+ avgMethodsPerClass?: number;
115
+ maxNestingDepth?: number;
116
+ }
117
+ /** AST 上下文文本(用于 prompt),来自 Phase 1.5 */
118
+ export type AstContext = string | null;
119
+ /** 代码实体图结果,来自 Phase 1.6 */
120
+ export interface CodeEntityGraphResult {
121
+ entitiesUpserted?: number;
122
+ edgesCreated?: number;
123
+ entityCount?: number;
124
+ edgeCount?: number;
125
+ }
126
+ /** 调用图结果,来自 Phase 1.7 */
127
+ export interface CallGraphResult {
128
+ entitiesUpserted?: number;
129
+ edgesCreated?: number;
130
+ durationMs?: number;
131
+ }
132
+ /** 全景分析结果,来自 Phase 1.8 */
133
+ export interface PanoramaResult {
134
+ layers?: Array<{
135
+ level: number;
136
+ name: string;
137
+ modules: string[];
138
+ }>;
139
+ couplingHotspots?: Array<{
140
+ module: string;
141
+ fanIn: number;
142
+ fanOut: number;
143
+ }>;
144
+ cyclicDependencies?: Array<{
145
+ cycle: string[];
146
+ severity: string;
147
+ }>;
148
+ knowledgeGaps?: Array<{
149
+ dimension: string;
150
+ dimensionName: string;
151
+ recipeCount: number;
152
+ status: string;
153
+ priority: string;
154
+ }>;
155
+ modules?: unknown;
156
+ gaps?: unknown;
157
+ [key: string]: unknown;
158
+ }
159
+ /** 依赖关系图,来自 Phase 2 */
160
+ export interface DependencyGraph {
161
+ nodes?: Array<DependencyNode | string>;
162
+ edges?: Array<DependencyEdge>;
163
+ [key: string]: unknown;
164
+ }
165
+ export interface DependencyNode {
166
+ id?: string;
167
+ label?: string;
168
+ fileCount?: number;
169
+ }
170
+ export interface DependencyEdge {
171
+ from: string;
172
+ to: string;
173
+ type?: string;
174
+ [key: string]: unknown;
175
+ }
176
+ /** Guard 审计结果,来自 Phase 3 */
177
+ export interface GuardAudit {
178
+ files?: GuardAuditFileEntry[];
179
+ summary?: GuardAuditSummary;
180
+ crossFileViolations?: GuardViolation[];
181
+ rules?: unknown[];
182
+ [key: string]: unknown;
183
+ }
184
+ export interface GuardAuditFileEntry {
185
+ filePath: string;
186
+ violations: GuardViolation[];
187
+ }
188
+ export interface GuardViolation {
189
+ ruleId?: string;
190
+ severity?: string;
191
+ message?: string;
192
+ line?: number;
193
+ fixSuggestion?: string | null;
194
+ locations?: Array<{
195
+ filePath: string;
196
+ line?: number;
197
+ }>;
198
+ }
199
+ export interface GuardAuditSummary {
200
+ totalErrors?: number;
201
+ totalWarnings?: number;
202
+ totalViolations?: number;
203
+ errors?: number;
204
+ warnings?: number;
205
+ }
206
+ /**
207
+ * 维度定义 (来自统一维度注册表 DimensionRegistry)
208
+ *
209
+ * 兼容旧 BaseDimension 字段 + 新 UnifiedDimension 字段
210
+ */
211
+ export interface DimensionDef {
212
+ id: string;
213
+ label?: string;
214
+ guide?: string;
215
+ knowledgeTypes?: string[];
216
+ skillWorthy?: boolean;
217
+ skillMeta?: {
218
+ name: string;
219
+ description: string;
220
+ } | Record<string, unknown> | null;
221
+ dualOutput?: boolean;
222
+ tierHint?: number;
223
+ conditions?: {
224
+ languages?: string[];
225
+ frameworks?: string[];
226
+ };
227
+ /** 层级 (统一维度注册表新增) */
228
+ layer?: 'universal' | 'language' | 'framework';
229
+ /** 输出模式 (统一维度注册表新增) */
230
+ outputMode?: 'candidate-only';
231
+ }
232
+ /** Enhancement Pack 信息,来自 Phase 4 */
233
+ export interface EnhancementPackInfo {
234
+ id: string;
235
+ displayName: string;
236
+ extraDimensions?: number;
237
+ guardRules?: number;
238
+ patterns?: Array<Record<string, unknown>>;
239
+ }
240
+ /** Phase 执行报告 */
241
+ export interface PhaseReport {
242
+ phases: Record<string, Record<string, unknown>>;
243
+ startTime: number;
244
+ totalMs?: number;
245
+ [key: string]: unknown;
246
+ }
247
+ /** 增量计划(rescan 场景) */
248
+ export interface IncrementalPlan {
249
+ mode?: string;
250
+ canIncremental?: boolean;
251
+ affectedDimensions?: string[];
252
+ skippedDimensions?: string[];
253
+ reason?: string;
254
+ diff?: {
255
+ added: unknown[];
256
+ modified: unknown[];
257
+ deleted: unknown[];
258
+ unchanged: unknown[];
259
+ changeRatio?: number;
260
+ };
261
+ dimensions?: Array<{
262
+ id: string;
263
+ status?: string;
264
+ }>;
265
+ changedFiles?: string[];
266
+ [key: string]: unknown;
267
+ }
268
+ /** 已有 Recipe 信息(rescan 去重 + lifecycle 感知) */
269
+ export interface ExistingRecipeInfo {
270
+ id: string;
271
+ title: string;
272
+ trigger: string;
273
+ knowledgeType: string;
274
+ doClause?: string;
275
+ relevanceScore?: number;
276
+ verdict?: string;
277
+ /** lifecycle 感知状态(Evolution Agent 填充) */
278
+ status?: 'healthy' | 'decaying' | 'evolved' | 'deprecated';
279
+ /** 衰退原因(仅 decaying 状态) */
280
+ decayReason?: string;
281
+ /** 审计分数 0-100(来自 RecipeRelevanceAuditor) */
282
+ auditScore?: number;
283
+ /** Recipe 完整内容 — Evolution Agent 读取以验证真实性 */
284
+ content?: {
285
+ markdown?: string;
286
+ rationale?: string;
287
+ coreCode?: string;
288
+ };
289
+ /** 源文件引用列表 — Evolution Agent 读取以验证代码是否存在 */
290
+ sourceRefs?: string[];
291
+ /** 审计证据详情 — 作为 hint 提供给 Evolution Agent */
292
+ auditEvidence?: Record<string, unknown>;
293
+ }
294
+ /** Discoverer 摘要信息 */
295
+ export interface DiscovererInfo {
296
+ id: string;
297
+ displayName: string;
298
+ }
299
+ /** Minimal shape of BootstrapSession */
300
+ export interface BootstrapSessionShape {
301
+ id: string;
302
+ toJSON(): Record<string, unknown>;
303
+ }
304
+ /** Shape of the mission briefing returned by buildMissionBriefing */
305
+ export interface MissionBriefingResult {
306
+ meta?: {
307
+ warnings?: string[];
308
+ responseSizeKB?: number;
309
+ [key: string]: unknown;
310
+ };
311
+ [key: string]: unknown;
312
+ }
313
+ /**
314
+ * ProjectSnapshot 是 runAllPhases() 的完整产出。
315
+ *
316
+ * 设计原则:
317
+ * 1. **不可变** — 创建后不应被修改
318
+ * 2. **完整** — 包含所有 Phase 1-4 的产出
319
+ * 3. **类型化** — 每个字段有明确的接口,不使用 `any`
320
+ * 4. **单一定义** — 这是项目分析数据的唯一类型来源
321
+ *
322
+ * 用法:
323
+ * - `buildProjectSnapshot()` 从 runAllPhases() 返回值构建
324
+ * - 4 个 handler 从 snapshot 读取数据,不再解构/重组
325
+ * - `snapshot-views.ts` 提供面向消费者的衍生视图
326
+ */
327
+ export interface ProjectSnapshot {
328
+ readonly version: string;
329
+ readonly timestamp: number;
330
+ readonly projectRoot: string;
331
+ readonly sourceTag?: string;
332
+ readonly allFiles: readonly SnapshotFile[];
333
+ readonly allTargets: readonly SnapshotTarget[];
334
+ readonly discoverer: DiscovererInfo;
335
+ readonly truncated: boolean;
336
+ readonly language: LanguageProfile;
337
+ readonly ast: AstSummary | null;
338
+ readonly astContext: AstContext;
339
+ readonly codeEntityGraph: CodeEntityGraphResult | null;
340
+ readonly callGraph: CallGraphResult | null;
341
+ readonly panorama: PanoramaResult | null;
342
+ readonly dependencyGraph: DependencyGraph | null;
343
+ readonly depEdgesWritten: number;
344
+ readonly guardAudit: GuardAudit | null;
345
+ readonly activeDimensions: readonly DimensionDef[];
346
+ readonly enhancementPackInfo: readonly EnhancementPackInfo[];
347
+ readonly enhancementPatterns: readonly Record<string, unknown>[];
348
+ readonly enhancementGuardRules: readonly unknown[];
349
+ readonly detectedFrameworks: readonly string[];
350
+ readonly langProfile: LanguageProfile;
351
+ readonly targetsSummary: readonly SnapshotTarget[];
352
+ readonly localPackageModules: readonly LocalPackageModule[];
353
+ readonly phaseReport: PhaseReport | null;
354
+ readonly warnings: readonly string[];
355
+ readonly incrementalPlan: IncrementalPlan | null;
356
+ readonly isEmpty: boolean;
357
+ }
358
+ /**
359
+ * 构建快照的输入参数
360
+ * 从 runAllPhases() 的松散返回值到类型化快照的桥梁
361
+ */
362
+ export interface ProjectSnapshotInput {
363
+ projectRoot: string;
364
+ sourceTag?: string;
365
+ allFiles: unknown[];
366
+ allTargets: unknown[];
367
+ discoverer: {
368
+ id: string;
369
+ displayName: string;
370
+ [key: string]: unknown;
371
+ };
372
+ langStats: Record<string, number>;
373
+ truncated?: boolean;
374
+ primaryLang: string | null;
375
+ langProfile?: {
376
+ secondary?: string[];
377
+ isMultiLang?: boolean;
378
+ [key: string]: unknown;
379
+ };
380
+ astProjectSummary: unknown;
381
+ astContext: unknown;
382
+ codeEntityResult: unknown;
383
+ callGraphResult: unknown;
384
+ panoramaResult: unknown;
385
+ depGraphData: unknown;
386
+ depEdgesWritten?: number;
387
+ guardAudit: unknown;
388
+ activeDimensions: unknown[];
389
+ enhancementPackInfo?: unknown[];
390
+ enhancementPatterns?: unknown[];
391
+ enhancementGuardRules?: unknown[];
392
+ detectedFrameworks?: string[];
393
+ targetsSummary?: unknown[];
394
+ localPackageModules?: unknown[];
395
+ report?: unknown;
396
+ warnings?: string[];
397
+ incrementalPlan?: unknown;
398
+ isEmpty?: boolean;
399
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * ProjectSnapshot — 统一项目快照类型定义
3
+ *
4
+ * 这是所有 Phase 1-4 数据的唯一类型来源(Single Source of Truth)。
5
+ * 消除了之前在 bootstrap-phases.ts、MissionBriefingBuilder.ts、
6
+ * handler-types.ts、rescan-internal.ts 等文件中重复定义的类型。
7
+ *
8
+ * 设计原则:
9
+ * 1. **不可变** — 创建后通过 Object.freeze 冻结
10
+ * 2. **完整** — 包含 Phase 1-4 全部产出
11
+ * 3. **类型化** — 每个字段有明确接口,不使用 `any`
12
+ * 4. **单一定义** — 项目分析数据的唯一类型来源
13
+ *
14
+ * @module types/project-snapshot
15
+ * @see docs/copilot/unified-project-snapshot-design.md
16
+ */
17
+ export {};
@@ -0,0 +1,46 @@
1
+ /**
2
+ * §10.2 Search wire types — 搜索结果类型拆分
3
+ *
4
+ * 将 SearchResultItem 的 25+ optional 字段拆分为有意义的层次结构。
5
+ * 现有代码可继续使用 SearchResultItem;新代码应使用分层类型。
6
+ */
7
+ /** 基础搜索命中 — 无论来源(FieldWeighted / Vector / Context)都具备的字段 */
8
+ export interface SearchHitBase {
9
+ id: string;
10
+ title: string;
11
+ trigger: string;
12
+ kind?: string;
13
+ language?: string;
14
+ category?: string;
15
+ knowledgeType?: string;
16
+ }
17
+ /** FieldWeighted 命中 — 附带加权分数 */
18
+ export interface WeightedHit extends SearchHitBase {
19
+ weightedScore: number;
20
+ matchedTokens?: string[];
21
+ }
22
+ /** Vector 命中 — 附带向量相似度 */
23
+ export interface VectorHit extends SearchHitBase {
24
+ vectorScore: number;
25
+ embeddingModel?: string;
26
+ }
27
+ /** 排序后的统一搜索结果 — API 响应中的单项 */
28
+ export interface RankedSearchItem extends SearchHitBase {
29
+ weightedScore?: number;
30
+ vectorScore?: number;
31
+ relevanceScore: number;
32
+ authorityScore: number;
33
+ recencyScore: number;
34
+ finalScore: number;
35
+ description?: string;
36
+ content?: string;
37
+ tags?: string[];
38
+ updatedAt?: string | null;
39
+ }
40
+ /** 搜索 API 响应 */
41
+ export interface SearchResponse {
42
+ items: RankedSearchItem[];
43
+ total: number;
44
+ query: string;
45
+ mode: 'weighted' | 'semantic' | 'hybrid' | 'context';
46
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * §10.2 Search wire types — 搜索结果类型拆分
3
+ *
4
+ * 将 SearchResultItem 的 25+ optional 字段拆分为有意义的层次结构。
5
+ * 现有代码可继续使用 SearchResultItem;新代码应使用分层类型。
6
+ */
7
+ export {};
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Snapshot Views — 面向消费者的衍生视图
3
+ *
4
+ * 核心理念:消费者不应直接操作 ProjectSnapshot 的每一个字段。
5
+ * View Factory 提供针对特定消费场景的轻量级投影。
6
+ *
7
+ * @module types/snapshot-views
8
+ * @see docs/copilot/unified-project-snapshot-design.md §3.4
9
+ */
10
+ import type { AstSummary, BootstrapSessionShape, CallGraphResult, CodeEntityGraphResult, DependencyGraph, ExistingRecipeInfo, GuardAudit, LocalPackageModule, ProjectSnapshot, SnapshotFile, SnapshotTarget } from './project-snapshot.js';
11
+ /**
12
+ * BootstrapSession.snapshotCache 的类型化形状。
13
+ *
14
+ * 替代之前 `Record<string, unknown>` 的擦除类型,
15
+ * 消费端(dimension-complete-external、wiki-external)不再需要 `as` 手动转型。
16
+ *
17
+ * @see docs/copilot/unified-project-snapshot-design.md §11.3 H4
18
+ */
19
+ export interface SessionCacheShape {
20
+ readonly allFiles: readonly SnapshotFile[];
21
+ readonly astProjectSummary: AstSummary | null;
22
+ readonly codeEntityResult: CodeEntityGraphResult | null;
23
+ readonly callGraphResult: CallGraphResult | null;
24
+ readonly depGraphData: DependencyGraph | null;
25
+ readonly guardAudit: GuardAudit | null;
26
+ readonly langStats: Record<string, number>;
27
+ readonly primaryLang: string;
28
+ readonly targetsSummary: readonly SnapshotTarget[];
29
+ readonly localPackageModules: readonly LocalPackageModule[];
30
+ }
31
+ /** handler → dispatchPipelineFill → orchestrator 的统一入参 */
32
+ export interface PipelineFillView {
33
+ /** 完整的项目快照(类型化、不可变) */
34
+ readonly snapshot: ProjectSnapshot;
35
+ /** 运行时上下文(DI container、logger 等)— 使用 Record 以兼容各种 McpContext 子类型 */
36
+ readonly ctx: Record<string, unknown>;
37
+ /** 当前 bootstrap session(可选,rescan 场景可能为 null) */
38
+ readonly bootstrapSession: BootstrapSessionShape | null;
39
+ /** handler 构建的 target→files 映射 */
40
+ readonly targetFileMap: Record<string, unknown[]>;
41
+ /** 项目根路径 */
42
+ readonly projectRoot: string;
43
+ /** 已有 recipes(rescan 去重用) */
44
+ readonly existingRecipes?: ExistingRecipeInfo[];
45
+ }
46
+ /**
47
+ * 从 ProjectSnapshot 提取通用的 MCP 响应数据摘要。
48
+ *
49
+ * 注意:这只包含通用字段。各 handler 需要的特有字段
50
+ * (如 cleanup、bootstrapSession、rescan 等)仍然需要在 handler 中单独拼装。
51
+ */
52
+ export declare function toResponseData(snapshot: ProjectSnapshot): Record<string, unknown>;
53
+ /**
54
+ * 从 ProjectSnapshot 提取 BootstrapSession 的 phase cache 数据。
55
+ *
56
+ * 替代当前 handler 中手动拼装的 setSnapshotCache({...}) 调用。
57
+ */
58
+ export declare function toSessionCache(snapshot: ProjectSnapshot): SessionCacheShape;
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Snapshot Views — 面向消费者的衍生视图
3
+ *
4
+ * 核心理念:消费者不应直接操作 ProjectSnapshot 的每一个字段。
5
+ * View Factory 提供针对特定消费场景的轻量级投影。
6
+ *
7
+ * @module types/snapshot-views
8
+ * @see docs/copilot/unified-project-snapshot-design.md §3.4
9
+ */
10
+ // ─── 视图 1: toResponseData ──────────────────────────────────
11
+ /**
12
+ * 从 ProjectSnapshot 提取通用的 MCP 响应数据摘要。
13
+ *
14
+ * 注意:这只包含通用字段。各 handler 需要的特有字段
15
+ * (如 cleanup、bootstrapSession、rescan 等)仍然需要在 handler 中单独拼装。
16
+ */
17
+ export function toResponseData(snapshot) {
18
+ return {
19
+ filesScanned: snapshot.allFiles.length,
20
+ targets: snapshot.targetsSummary,
21
+ primaryLanguage: snapshot.language.primaryLang,
22
+ languageStats: snapshot.language.stats,
23
+ secondaryLanguages: snapshot.language.secondary,
24
+ isMultiLang: snapshot.language.isMultiLang,
25
+ astSummary: snapshot.ast
26
+ ? {
27
+ classes: snapshot.ast.classes?.length || 0,
28
+ protocols: snapshot.ast.protocols?.length || 0,
29
+ categories: snapshot.ast.categories?.length || 0,
30
+ patterns: Object.keys(snapshot.ast.patternStats || {}),
31
+ metrics: snapshot.ast.projectMetrics
32
+ ? {
33
+ totalMethods: snapshot.ast.projectMetrics.totalMethods,
34
+ avgMethodsPerClass: snapshot.ast.projectMetrics.avgMethodsPerClass,
35
+ maxNestingDepth: snapshot.ast.projectMetrics.maxNestingDepth,
36
+ complexMethods: snapshot.ast.projectMetrics.complexMethods?.length || 0,
37
+ longMethods: snapshot.ast.projectMetrics.longMethods?.length || 0,
38
+ }
39
+ : null,
40
+ }
41
+ : null,
42
+ codeEntityGraph: snapshot.codeEntityGraph
43
+ ? {
44
+ totalEntities: snapshot.codeEntityGraph.entityCount ?? snapshot.codeEntityGraph.entitiesUpserted ?? 0,
45
+ totalEdges: snapshot.codeEntityGraph.edgeCount ?? snapshot.codeEntityGraph.edgesCreated ?? 0,
46
+ }
47
+ : null,
48
+ callGraph: snapshot.callGraph
49
+ ? {
50
+ entitiesUpserted: snapshot.callGraph.entitiesUpserted || 0,
51
+ edgesCreated: snapshot.callGraph.edgesCreated || 0,
52
+ }
53
+ : null,
54
+ guardSummary: snapshot.guardAudit
55
+ ? {
56
+ totalViolations: snapshot.guardAudit.summary?.totalViolations || 0,
57
+ errors: snapshot.guardAudit.summary?.errors || 0,
58
+ warnings: snapshot.guardAudit.summary?.warnings || 0,
59
+ }
60
+ : null,
61
+ dependencyGraph: snapshot.dependencyGraph
62
+ ? {
63
+ nodes: (snapshot.dependencyGraph.nodes || []).map((n) => {
64
+ if (typeof n === 'string') {
65
+ return { id: n, label: n };
66
+ }
67
+ return { id: n.id, label: n.label };
68
+ }),
69
+ edges: snapshot.dependencyGraph.edges || [],
70
+ }
71
+ : null,
72
+ dimensionCount: snapshot.activeDimensions.length,
73
+ enhancementPacks: snapshot.enhancementPackInfo.length > 0
74
+ ? {
75
+ matched: snapshot.enhancementPackInfo,
76
+ patterns: snapshot.enhancementPatterns,
77
+ guardRules: snapshot.enhancementGuardRules.length,
78
+ }
79
+ : null,
80
+ localPackageModules: snapshot.localPackageModules.length > 0 ? snapshot.localPackageModules : null,
81
+ warnings: snapshot.warnings.length > 0 ? snapshot.warnings : undefined,
82
+ };
83
+ }
84
+ // ─── 视图 2: toSessionCache ──────────────────────────────────
85
+ /**
86
+ * 从 ProjectSnapshot 提取 BootstrapSession 的 phase cache 数据。
87
+ *
88
+ * 替代当前 handler 中手动拼装的 setSnapshotCache({...}) 调用。
89
+ */
90
+ export function toSessionCache(snapshot) {
91
+ return {
92
+ allFiles: snapshot.allFiles,
93
+ astProjectSummary: snapshot.ast,
94
+ codeEntityResult: snapshot.codeEntityGraph,
95
+ callGraphResult: snapshot.callGraph,
96
+ depGraphData: snapshot.dependencyGraph,
97
+ guardAudit: snapshot.guardAudit,
98
+ langStats: snapshot.language.stats,
99
+ primaryLang: snapshot.language.primaryLang,
100
+ targetsSummary: snapshot.targetsSummary,
101
+ localPackageModules: snapshot.localPackageModules,
102
+ };
103
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "autosnippet",
3
- "version": "3.3.4",
3
+ "version": "3.3.6",
4
4
  "description": "Extract code patterns into a knowledge base for AI coding assistants",
5
5
  "type": "module",
6
6
  "main": "dist/lib/bootstrap.js",
@@ -37,7 +37,7 @@ This skill provides the agent with this project's context from AutoSnippet Recip
37
37
  1. **In-context index**: Read `references/project-recipes-context.md` in this skill folder
38
38
  2. **MCP browse**: `autosnippet_knowledge(operation=list)` with kind/language/category filters
39
39
  3. **MCP get**: `autosnippet_knowledge(operation=get, id)` for full content
40
- 4. **MCP search**: `autosnippet_search(mode=auto)` for unified BM25+semantic search
40
+ 4. **MCP search**: `autosnippet_search(mode=auto)` for unified FieldWeighted+semantic search
41
41
  5. **Terminal**: `asd search <keyword>`
42
42
 
43
43
  **Recipe over code search**: When both find matches, prefer Recipe as source of truth. Cite Recipe title.
@@ -15,6 +15,8 @@ Access the knowledge base through MCP tools.
15
15
  - `autosnippet_skill` — Skill management (list/load)
16
16
  - `autosnippet_structure` — Project structure discovery
17
17
  - `autosnippet_bootstrap` — Project cold-start & scan
18
+ - `autosnippet_rescan` — Incremental rescan: preserves Recipes, cleans caches, re-analyzes project, runs relevance audit
19
+ - `autosnippet_evolve` — Batch Recipe evolution decisions (propose_evolution/confirm_deprecation/skip), used per-dimension during rescan or standalone
18
20
  - `autosnippet_panorama` — Project panorama (operation: overview/module/gaps/health)
19
21
  - `autosnippet_health` — Service health & KB stats
20
22
 
@@ -24,7 +24,7 @@ Users speak naturally; you translate to task operations. Never tell users to cal
24
24
 
25
25
  - **Do NOT modify** `AutoSnippet/recipes/` or `.autosnippet/` directly.
26
26
  - **Prefer Recipe** as project standard; source code is supplementary.
27
- - **Search**: `autosnippet_search({ query: "..." })` — auto mode (BM25 + semantic).
27
+ - **Search**: `autosnippet_search({ query: "..." })` — auto mode (FieldWeighted + semantic).
28
28
 
29
29
  ## Essential MCP Tools
30
30
 
@@ -34,6 +34,8 @@ Users speak naturally; you translate to task operations. Never tell users to cal
34
34
  - `autosnippet_submit_knowledge` — Submit knowledge candidate
35
35
  - `autosnippet_guard` — Code compliance check
36
36
  - `autosnippet_skill` — Load project skills (list/load)
37
+ - `autosnippet_rescan` — Incremental rescan: preserves Recipes, cleans caches, re-analyzes & audits
38
+ - `autosnippet_evolve` — Batch Recipe evolution decisions (propose/deprecate/skip)
37
39
  - `autosnippet_panorama` — Project panorama (overview/module/gaps/health)
38
40
  - `autosnippet_health` — Service health & KB stats
39
41