autosnippet 3.3.0 → 3.3.3

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 (245) hide show
  1. package/dashboard/dist/assets/icons-BJ2mUBi8.js +1 -0
  2. package/dashboard/dist/assets/index-B659K9t5.js +128 -0
  3. package/dashboard/dist/assets/index-NCm40PMD.css +1 -0
  4. package/dashboard/dist/index.html +3 -3
  5. package/dist/bin/cli.d.ts +1 -0
  6. package/dist/bin/cli.js +284 -142
  7. package/dist/lib/agent/context/ExplorationTracker.d.ts +2 -0
  8. package/dist/lib/agent/context/ExplorationTracker.js +21 -3
  9. package/dist/lib/agent/core/ToolExecutionPipeline.d.ts +3 -1
  10. package/dist/lib/agent/core/ToolExecutionPipeline.js +8 -1
  11. package/dist/lib/agent/forge/DynamicComposer.d.ts +58 -0
  12. package/dist/lib/agent/forge/DynamicComposer.js +99 -0
  13. package/dist/lib/agent/forge/SandboxRunner.d.ts +60 -0
  14. package/dist/lib/agent/forge/SandboxRunner.js +251 -0
  15. package/dist/lib/agent/forge/TemporaryToolRegistry.d.ts +76 -0
  16. package/dist/lib/agent/forge/TemporaryToolRegistry.js +154 -0
  17. package/dist/lib/agent/forge/ToolForge.d.ts +92 -0
  18. package/dist/lib/agent/forge/ToolForge.js +239 -0
  19. package/dist/lib/agent/forge/ToolRequirementAnalyzer.d.ts +44 -0
  20. package/dist/lib/agent/forge/ToolRequirementAnalyzer.js +119 -0
  21. package/dist/lib/agent/tools/ToolRegistry.d.ts +2 -0
  22. package/dist/lib/agent/tools/ToolRegistry.js +4 -0
  23. package/dist/lib/agent/tools/composite.js +0 -1
  24. package/dist/lib/agent/tools/index.d.ts +2 -50
  25. package/dist/lib/agent/tools/index.js +2 -3
  26. package/dist/lib/agent/tools/lifecycle.d.ts +1 -58
  27. package/dist/lib/agent/tools/lifecycle.js +2 -75
  28. package/dist/lib/cli/KnowledgeSyncService.d.ts +26 -0
  29. package/dist/lib/cli/KnowledgeSyncService.js +33 -1
  30. package/dist/lib/cli/deploy/FileManifest.d.ts +0 -21
  31. package/dist/lib/cli/deploy/FileManifest.js +0 -11
  32. package/dist/lib/domain/knowledge/KnowledgeEntry.d.ts +10 -0
  33. package/dist/lib/domain/knowledge/KnowledgeEntry.js +2 -0
  34. package/dist/lib/domain/knowledge/Lifecycle.d.ts +19 -2
  35. package/dist/lib/domain/knowledge/Lifecycle.js +32 -6
  36. package/dist/lib/domain/knowledge/UnifiedValidator.d.ts +1 -5
  37. package/dist/lib/domain/knowledge/UnifiedValidator.js +7 -44
  38. package/dist/lib/domain/knowledge/values/Stats.d.ts +29 -0
  39. package/dist/lib/domain/knowledge/values/Stats.js +41 -0
  40. package/dist/lib/external/mcp/McpServer.d.ts +19 -38
  41. package/dist/lib/external/mcp/McpServer.js +145 -117
  42. package/dist/lib/external/mcp/autoApproveInjector.js +0 -2
  43. package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.d.ts +26 -1
  44. package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.js +41 -0
  45. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +49 -0
  46. package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.d.ts +3 -0
  47. package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.js +27 -0
  48. package/dist/lib/external/mcp/handlers/bootstrap/skills.js +1 -1
  49. package/dist/lib/external/mcp/handlers/bootstrap-external.js +1 -0
  50. package/dist/lib/external/mcp/handlers/bootstrap-internal.js +2 -0
  51. package/dist/lib/external/mcp/handlers/browse.d.ts +1 -0
  52. package/dist/lib/external/mcp/handlers/browse.js +2 -1
  53. package/dist/lib/external/mcp/handlers/consolidated.d.ts +117 -6
  54. package/dist/lib/external/mcp/handlers/consolidated.js +251 -71
  55. package/dist/lib/external/mcp/handlers/guard.d.ts +150 -0
  56. package/dist/lib/external/mcp/handlers/guard.js +239 -5
  57. package/dist/lib/external/mcp/handlers/knowledge.d.ts +0 -29
  58. package/dist/lib/external/mcp/handlers/knowledge.js +1 -76
  59. package/dist/lib/external/mcp/handlers/panorama.d.ts +36 -0
  60. package/dist/lib/external/mcp/handlers/panorama.js +156 -0
  61. package/dist/lib/external/mcp/handlers/system.d.ts +2 -54
  62. package/dist/lib/external/mcp/handlers/system.js +3 -113
  63. package/dist/lib/external/mcp/handlers/task.d.ts +13 -24
  64. package/dist/lib/external/mcp/handlers/task.js +218 -557
  65. package/dist/lib/external/mcp/handlers/types.d.ts +91 -8
  66. package/dist/lib/external/mcp/handlers/types.js +18 -1
  67. package/dist/lib/external/mcp/handlers/wiki-external.d.ts +18 -1
  68. package/dist/lib/external/mcp/handlers/wiki-external.js +16 -1
  69. package/dist/lib/external/mcp/tools.d.ts +18 -24
  70. package/dist/lib/external/mcp/tools.js +132 -159
  71. package/dist/lib/http/HttpServer.js +52 -0
  72. package/dist/lib/http/middleware/validate.js +7 -3
  73. package/dist/lib/http/routes/audit.d.ts +8 -0
  74. package/dist/lib/http/routes/audit.js +51 -0
  75. package/dist/lib/http/routes/guardReport.d.ts +10 -0
  76. package/dist/lib/http/routes/guardReport.js +143 -0
  77. package/dist/lib/http/routes/knowledge.js +32 -1
  78. package/dist/lib/http/routes/panorama.d.ts +11 -0
  79. package/dist/lib/http/routes/panorama.js +322 -0
  80. package/dist/lib/http/routes/signals.d.ts +10 -0
  81. package/dist/lib/http/routes/signals.js +104 -0
  82. package/dist/lib/http/routes/task.d.ts +2 -3
  83. package/dist/lib/http/routes/task.js +17 -347
  84. package/dist/lib/http/routes/violations.js +1 -1
  85. package/dist/lib/infrastructure/audit/AuditLogger.d.ts +6 -1
  86. package/dist/lib/infrastructure/audit/AuditLogger.js +14 -1
  87. package/dist/lib/infrastructure/database/drizzle/schema.d.ts +202 -504
  88. package/dist/lib/infrastructure/database/drizzle/schema.js +38 -69
  89. package/dist/lib/infrastructure/database/migrations/004_evolution_proposals.d.ts +8 -0
  90. package/dist/lib/infrastructure/database/migrations/004_evolution_proposals.js +43 -0
  91. package/dist/lib/infrastructure/database/migrations/005_recipe_source_refs.d.ts +9 -0
  92. package/dist/lib/infrastructure/database/migrations/005_recipe_source_refs.js +24 -0
  93. package/dist/lib/infrastructure/logging/Logger.d.ts +2 -0
  94. package/dist/lib/infrastructure/logging/Logger.js +34 -7
  95. package/dist/lib/infrastructure/monitoring/ErrorTracker.js +3 -1
  96. package/dist/lib/infrastructure/monitoring/PerformanceMonitor.d.ts +2 -2
  97. package/dist/lib/infrastructure/monitoring/PerformanceMonitor.js +12 -10
  98. package/dist/lib/infrastructure/notification/LarkNotifier.d.ts +24 -0
  99. package/dist/lib/infrastructure/notification/LarkNotifier.js +97 -0
  100. package/dist/lib/infrastructure/report/ReportStore.d.ts +45 -0
  101. package/dist/lib/infrastructure/report/ReportStore.js +133 -0
  102. package/dist/lib/infrastructure/signal/SignalAggregator.d.ts +18 -0
  103. package/dist/lib/infrastructure/signal/SignalAggregator.js +84 -0
  104. package/dist/lib/infrastructure/signal/SignalBridge.d.ts +13 -0
  105. package/dist/lib/infrastructure/signal/SignalBridge.js +20 -0
  106. package/dist/lib/infrastructure/signal/SignalBus.d.ts +63 -0
  107. package/dist/lib/infrastructure/signal/SignalBus.js +106 -0
  108. package/dist/lib/infrastructure/signal/SignalTraceWriter.d.ts +36 -0
  109. package/dist/lib/infrastructure/signal/SignalTraceWriter.js +130 -0
  110. package/dist/lib/infrastructure/vector/HnswVectorAdapter.js +18 -2
  111. package/dist/lib/injection/ServiceContainer.js +8 -0
  112. package/dist/lib/injection/ServiceMap.d.ts +16 -10
  113. package/dist/lib/injection/modules/AgentModule.d.ts +1 -1
  114. package/dist/lib/injection/modules/AgentModule.js +7 -1
  115. package/dist/lib/injection/modules/AppModule.d.ts +1 -1
  116. package/dist/lib/injection/modules/AppModule.js +4 -13
  117. package/dist/lib/injection/modules/GuardModule.js +27 -2
  118. package/dist/lib/injection/modules/InfraModule.d.ts +0 -1
  119. package/dist/lib/injection/modules/InfraModule.js +9 -7
  120. package/dist/lib/injection/modules/KnowledgeModule.d.ts +5 -0
  121. package/dist/lib/injection/modules/KnowledgeModule.js +131 -0
  122. package/dist/lib/injection/modules/PanoramaModule.d.ts +18 -0
  123. package/dist/lib/injection/modules/PanoramaModule.js +76 -0
  124. package/dist/lib/injection/modules/SignalModule.d.ts +10 -0
  125. package/dist/lib/injection/modules/SignalModule.js +84 -0
  126. package/dist/lib/repository/knowledge/KnowledgeRepository.impl.d.ts +1 -0
  127. package/dist/lib/repository/knowledge/KnowledgeRepository.impl.js +6 -0
  128. package/dist/lib/service/bootstrap/BootstrapTaskManager.d.ts +3 -1
  129. package/dist/lib/service/bootstrap/BootstrapTaskManager.js +20 -1
  130. package/dist/lib/service/bootstrap/UiStartupTasks.d.ts +45 -0
  131. package/dist/lib/service/bootstrap/UiStartupTasks.js +101 -0
  132. package/dist/lib/service/delivery/AgentInstructionsGenerator.js +4 -5
  133. package/dist/lib/service/delivery/CursorDeliveryPipeline.d.ts +3 -1
  134. package/dist/lib/service/delivery/CursorDeliveryPipeline.js +13 -10
  135. package/dist/lib/service/delivery/RulesGenerator.js +3 -2
  136. package/dist/lib/service/evolution/ConsolidationAdvisor.d.ts +114 -0
  137. package/dist/lib/service/evolution/ConsolidationAdvisor.js +542 -0
  138. package/dist/lib/service/evolution/ContradictionDetector.d.ts +54 -0
  139. package/dist/lib/service/evolution/ContradictionDetector.js +253 -0
  140. package/dist/lib/service/evolution/DecayDetector.d.ts +71 -0
  141. package/dist/lib/service/evolution/DecayDetector.js +244 -0
  142. package/dist/lib/service/evolution/EnhancementSuggester.d.ts +38 -0
  143. package/dist/lib/service/evolution/EnhancementSuggester.js +220 -0
  144. package/dist/lib/service/evolution/KnowledgeMetabolism.d.ts +82 -0
  145. package/dist/lib/service/evolution/KnowledgeMetabolism.js +167 -0
  146. package/dist/lib/service/evolution/RedundancyAnalyzer.d.ts +53 -0
  147. package/dist/lib/service/evolution/RedundancyAnalyzer.js +210 -0
  148. package/dist/lib/service/evolution/StagingManager.d.ts +57 -0
  149. package/dist/lib/service/evolution/StagingManager.js +201 -0
  150. package/dist/lib/service/guard/ComplianceReporter.d.ts +42 -2
  151. package/dist/lib/service/guard/ComplianceReporter.js +43 -5
  152. package/dist/lib/service/guard/CoverageAnalyzer.d.ts +54 -0
  153. package/dist/lib/service/guard/CoverageAnalyzer.js +149 -0
  154. package/dist/lib/service/guard/GuardCheckEngine.d.ts +42 -0
  155. package/dist/lib/service/guard/GuardCheckEngine.js +465 -14
  156. package/dist/lib/service/guard/GuardFeedbackLoop.d.ts +3 -0
  157. package/dist/lib/service/guard/GuardFeedbackLoop.js +9 -0
  158. package/dist/lib/service/guard/ReverseGuard.d.ts +73 -0
  159. package/dist/lib/service/guard/ReverseGuard.js +256 -0
  160. package/dist/lib/service/guard/RuleLearner.d.ts +12 -0
  161. package/dist/lib/service/guard/RuleLearner.js +38 -0
  162. package/dist/lib/service/guard/UncertaintyCollector.d.ts +83 -0
  163. package/dist/lib/service/guard/UncertaintyCollector.js +149 -0
  164. package/dist/lib/service/guard/ViolationsStore.d.ts +1 -0
  165. package/dist/lib/service/guard/ViolationsStore.js +33 -3
  166. package/dist/lib/service/knowledge/ConfidenceRouter.d.ts +13 -0
  167. package/dist/lib/service/knowledge/ConfidenceRouter.js +14 -0
  168. package/dist/lib/service/knowledge/KnowledgeService.js +22 -4
  169. package/dist/lib/service/knowledge/SourceRefReconciler.d.ts +68 -0
  170. package/dist/lib/service/knowledge/SourceRefReconciler.js +309 -0
  171. package/dist/lib/service/panorama/CouplingAnalyzer.d.ts +27 -0
  172. package/dist/lib/service/panorama/CouplingAnalyzer.js +192 -0
  173. package/dist/lib/service/panorama/DimensionAnalyzer.d.ts +28 -0
  174. package/dist/lib/service/panorama/DimensionAnalyzer.js +320 -0
  175. package/dist/lib/service/panorama/LayerInferrer.d.ts +19 -0
  176. package/dist/lib/service/panorama/LayerInferrer.js +182 -0
  177. package/dist/lib/service/panorama/ModuleDiscoverer.d.ts +24 -0
  178. package/dist/lib/service/panorama/ModuleDiscoverer.js +185 -0
  179. package/dist/lib/service/panorama/PanoramaAggregator.d.ts +29 -0
  180. package/dist/lib/service/panorama/PanoramaAggregator.js +228 -0
  181. package/dist/lib/service/panorama/PanoramaScanner.d.ts +52 -0
  182. package/dist/lib/service/panorama/PanoramaScanner.js +188 -0
  183. package/dist/lib/service/panorama/PanoramaService.d.ts +125 -0
  184. package/dist/lib/service/panorama/PanoramaService.js +363 -0
  185. package/dist/lib/service/panorama/PanoramaTypes.d.ts +134 -0
  186. package/dist/lib/service/panorama/PanoramaTypes.js +6 -0
  187. package/dist/lib/service/panorama/RoleRefiner.d.ts +48 -0
  188. package/dist/lib/service/panorama/RoleRefiner.js +535 -0
  189. package/dist/lib/service/search/BM25Scorer.d.ts +2 -2
  190. package/dist/lib/service/search/CoarseRanker.d.ts +7 -6
  191. package/dist/lib/service/search/CoarseRanker.js +11 -10
  192. package/dist/lib/service/search/FieldWeightedScorer.d.ts +81 -0
  193. package/dist/lib/service/search/FieldWeightedScorer.js +318 -0
  194. package/dist/lib/service/search/MultiSignalRanker.d.ts +3 -2
  195. package/dist/lib/service/search/MultiSignalRanker.js +17 -1
  196. package/dist/lib/service/search/SearchEngine.d.ts +9 -7
  197. package/dist/lib/service/search/SearchEngine.js +67 -10
  198. package/dist/lib/service/search/SearchTypes.d.ts +25 -3
  199. package/dist/lib/service/search/SearchTypes.js +6 -1
  200. package/dist/lib/service/signal/HitRecorder.d.ts +68 -0
  201. package/dist/lib/service/signal/HitRecorder.js +173 -0
  202. package/dist/lib/service/skills/SignalCollector.d.ts +3 -1
  203. package/dist/lib/service/skills/SignalCollector.js +31 -1
  204. package/dist/lib/service/task/IntentExtractor.d.ts +66 -0
  205. package/dist/lib/service/task/IntentExtractor.js +256 -0
  206. package/dist/lib/service/task/PrimeSearchPipeline.d.ts +54 -0
  207. package/dist/lib/service/task/PrimeSearchPipeline.js +113 -0
  208. package/dist/lib/service/vector/VectorService.d.ts +3 -0
  209. package/dist/lib/service/vector/VectorService.js +38 -4
  210. package/dist/lib/shared/schemas/mcp-tools.d.ts +41 -96
  211. package/dist/lib/shared/schemas/mcp-tools.js +59 -119
  212. package/dist/scripts/analyze-signals.d.ts +20 -0
  213. package/dist/scripts/analyze-signals.js +155 -0
  214. package/dist/scripts/diagnose-mcp.js +1 -1
  215. package/package.json +1 -1
  216. package/skills/autosnippet-create/SKILL.md +98 -89
  217. package/skills/autosnippet-devdocs/SKILL.md +55 -57
  218. package/templates/claude-code/hooks/autosnippet-session.sh +10 -15
  219. package/templates/cursor-hooks/hooks/session-start.sh +1 -1
  220. package/templates/guard-ci.yml +2 -2
  221. package/templates/instructions/agent-static.md +2 -1
  222. package/templates/instructions/conventions.md +5 -6
  223. package/templates/recipes-setup/README.md +1 -2
  224. package/templates/recipes-setup/_template.md +39 -39
  225. package/dashboard/dist/assets/icons-BofcEZ3f.js +0 -1
  226. package/dashboard/dist/assets/index-D0whuycy.css +0 -1
  227. package/dashboard/dist/assets/index-SiN1GChm.js +0 -128
  228. package/dist/lib/domain/task/Task.d.ts +0 -140
  229. package/dist/lib/domain/task/Task.js +0 -254
  230. package/dist/lib/domain/task/TaskDependency.d.ts +0 -23
  231. package/dist/lib/domain/task/TaskDependency.js +0 -34
  232. package/dist/lib/domain/task/TaskIdGenerator.d.ts +0 -40
  233. package/dist/lib/domain/task/TaskIdGenerator.js +0 -75
  234. package/dist/lib/domain/task/index.d.ts +0 -4
  235. package/dist/lib/domain/task/index.js +0 -4
  236. package/dist/lib/infrastructure/database/migrations/002_add_tasks.d.ts +0 -11
  237. package/dist/lib/infrastructure/database/migrations/002_add_tasks.js +0 -86
  238. package/dist/lib/repository/task/TaskRepository.impl.d.ts +0 -171
  239. package/dist/lib/repository/task/TaskRepository.impl.js +0 -347
  240. package/dist/lib/service/task/TaskGraphService.d.ts +0 -222
  241. package/dist/lib/service/task/TaskGraphService.js +0 -597
  242. package/dist/lib/service/task/TaskKnowledgeBridge.d.ts +0 -95
  243. package/dist/lib/service/task/TaskKnowledgeBridge.js +0 -298
  244. package/dist/lib/service/task/TaskReadyEngine.d.ts +0 -84
  245. package/dist/lib/service/task/TaskReadyEngine.js +0 -115
@@ -200,7 +200,10 @@ export class KnowledgeRepositoryImpl extends BaseRepository {
200
200
  SELECT
201
201
  COUNT(*) as total,
202
202
  SUM(CASE WHEN lifecycle = 'pending' THEN 1 ELSE 0 END) as pending,
203
+ SUM(CASE WHEN lifecycle = 'staging' THEN 1 ELSE 0 END) as staging,
203
204
  SUM(CASE WHEN lifecycle = 'active' THEN 1 ELSE 0 END) as active,
205
+ SUM(CASE WHEN lifecycle = 'evolving' THEN 1 ELSE 0 END) as evolving,
206
+ SUM(CASE WHEN lifecycle = 'decaying' THEN 1 ELSE 0 END) as decaying,
204
207
  SUM(CASE WHEN lifecycle = 'deprecated' THEN 1 ELSE 0 END) as deprecated,
205
208
  SUM(CASE WHEN kind = 'rule' THEN 1 ELSE 0 END) as rules,
206
209
  SUM(CASE WHEN kind = 'pattern' THEN 1 ELSE 0 END) as patterns,
@@ -238,6 +241,8 @@ export class KnowledgeRepositoryImpl extends BaseRepository {
238
241
  // SQLite INTEGER → boolean
239
242
  autoApprovable: !!row.autoApprovable,
240
243
  includeHeaders: !!row.includeHeaders,
244
+ // Staging support
245
+ stagingDeadline: row.staging_deadline || null,
241
246
  });
242
247
  }
243
248
  /** KnowledgeEntry → DB Row (camelCase 列名 = 属性名,直传) */
@@ -287,6 +292,7 @@ export class KnowledgeRepositoryImpl extends BaseRepository {
287
292
  updatedAt: e.updatedAt || now,
288
293
  publishedAt: e.publishedAt || null,
289
294
  publishedBy: e.publishedBy || null,
295
+ staging_deadline: e.stagingDeadline || null,
290
296
  };
291
297
  }
292
298
  /**
@@ -18,6 +18,7 @@
18
18
  * bootstrap:all-completed — 全部任务完成
19
19
  */
20
20
  import type { EventBus } from '../../infrastructure/event/EventBus.js';
21
+ import type { SignalBus } from '../../infrastructure/signal/SignalBus.js';
21
22
  interface TaskMeta {
22
23
  type?: string;
23
24
  dimId?: string;
@@ -40,6 +41,7 @@ interface TaskDef {
40
41
  }
41
42
  interface BootstrapTaskManagerOpts {
42
43
  eventBus?: EventBus | null;
44
+ signalBus?: SignalBus | null;
43
45
  getRealtimeService?: (() => {
44
46
  broadcastEvent(name: string, data: unknown): void;
45
47
  } | null) | null;
@@ -96,7 +98,7 @@ declare class BootstrapSession {
96
98
  }
97
99
  export declare class BootstrapTaskManager {
98
100
  #private;
99
- constructor({ eventBus, getRealtimeService }?: BootstrapTaskManagerOpts);
101
+ constructor({ eventBus, signalBus, getRealtimeService }?: BootstrapTaskManagerOpts);
100
102
  /**
101
103
  * 启动新的 bootstrap 会话
102
104
  *
@@ -118,10 +118,12 @@ class BootstrapSession {
118
118
  export class BootstrapTaskManager {
119
119
  #currentSession = null;
120
120
  #eventBus = null;
121
+ #signalBus = null;
121
122
  /** 获取 RealtimeService 的 getter(延迟获取,避免循环依赖) */
122
123
  #getRealtimeService = null;
123
- constructor({ eventBus, getRealtimeService } = {}) {
124
+ constructor({ eventBus, signalBus, getRealtimeService } = {}) {
124
125
  this.#eventBus = eventBus || null;
126
+ this.#signalBus = signalBus || null;
125
127
  this.#getRealtimeService = getRealtimeService || null;
126
128
  }
127
129
  // ═══════════════════════════════════════════════════════════
@@ -197,6 +199,15 @@ export class BootstrapTaskManager {
197
199
  error: t.error,
198
200
  })),
199
201
  });
202
+ this.#signalBus?.send('lifecycle', 'Bootstrap', 0.3, {
203
+ metadata: {
204
+ action: 'bootstrap_aborted',
205
+ sessionId: session.id,
206
+ reason,
207
+ completed: session.completedTasks,
208
+ failed: session.failedTasks,
209
+ },
210
+ });
200
211
  }
201
212
  /**
202
213
  * 验证 sessionId 是否仍然是活跃 session
@@ -350,6 +361,14 @@ export class BootstrapTaskManager {
350
361
  error: t.error,
351
362
  })),
352
363
  });
364
+ this.#signalBus?.send('lifecycle', 'Bootstrap', 1, {
365
+ metadata: {
366
+ action: 'bootstrap_completed',
367
+ sessionId: session.id,
368
+ completed: session.completedTasks,
369
+ failed: session.failedTasks,
370
+ },
371
+ });
353
372
  }
354
373
  /** 发射事件到 EventBus + 推送到前端 Socket.io */
355
374
  #emit(eventName, data) {
@@ -0,0 +1,45 @@
1
+ /**
2
+ * UiStartupTasks — asd ui 启动后异步后台刷新任务
3
+ *
4
+ * 在 Dashboard 启动后异步执行,不阻塞 UI:
5
+ * 1. syncAll: .md → DB 全量同步 + sourceRefs 对账
6
+ * 2. staging promote: 到期 staging → active 晋升
7
+ * 3. vector reconcile: 向量对账(best-effort)
8
+ * 4. refreshIndex: BM25 增量刷新
9
+ */
10
+ interface UiStartupContext {
11
+ projectRoot: string;
12
+ container: {
13
+ get(name: string): unknown;
14
+ services: Record<string, unknown>;
15
+ singletons: Record<string, unknown>;
16
+ };
17
+ }
18
+ export interface UiStartupReport {
19
+ syncAll?: {
20
+ synced: number;
21
+ created: number;
22
+ updated: number;
23
+ };
24
+ reconcile?: {
25
+ inserted: number;
26
+ active: number;
27
+ stale: number;
28
+ };
29
+ staging?: {
30
+ promoted: number;
31
+ };
32
+ vectorReconcile?: {
33
+ orphans: number;
34
+ missing: number;
35
+ };
36
+ indexRefresh?: boolean;
37
+ durationMs: number;
38
+ errors: string[];
39
+ }
40
+ /**
41
+ * 异步执行所有启动后台任务。
42
+ * 每个阶段独立 try/catch,一个失败不影响后续。
43
+ */
44
+ export declare function runUiStartupTasks(ctx: UiStartupContext): Promise<UiStartupReport>;
45
+ export {};
@@ -0,0 +1,101 @@
1
+ /**
2
+ * UiStartupTasks — asd ui 启动后异步后台刷新任务
3
+ *
4
+ * 在 Dashboard 启动后异步执行,不阻塞 UI:
5
+ * 1. syncAll: .md → DB 全量同步 + sourceRefs 对账
6
+ * 2. staging promote: 到期 staging → active 晋升
7
+ * 3. vector reconcile: 向量对账(best-effort)
8
+ * 4. refreshIndex: BM25 增量刷新
9
+ */
10
+ import Logger from '../../infrastructure/logging/Logger.js';
11
+ const logger = Logger.getInstance();
12
+ /**
13
+ * 异步执行所有启动后台任务。
14
+ * 每个阶段独立 try/catch,一个失败不影响后续。
15
+ */
16
+ export async function runUiStartupTasks(ctx) {
17
+ const start = Date.now();
18
+ const report = { durationMs: 0, errors: [] };
19
+ logger.info('[UiStartupTasks] Starting background refresh...');
20
+ // ── Stage 1: syncAll (.md → DB + sourceRefs reconcile) ──
21
+ try {
22
+ const { KnowledgeSyncService } = await import('../../cli/KnowledgeSyncService.js');
23
+ const syncService = new KnowledgeSyncService(ctx.projectRoot);
24
+ const db = ctx.container.get('database');
25
+ const rawDb = db.getDb();
26
+ const syncReport = await syncService.syncAll(rawDb, { skipViolations: true });
27
+ report.syncAll = {
28
+ synced: syncReport.synced,
29
+ created: syncReport.created,
30
+ updated: syncReport.updated,
31
+ };
32
+ if (syncReport.reconcileReport) {
33
+ report.reconcile = {
34
+ inserted: syncReport.reconcileReport.inserted,
35
+ active: syncReport.reconcileReport.active,
36
+ stale: syncReport.reconcileReport.stale,
37
+ };
38
+ }
39
+ logger.info('[UiStartupTasks] Stage 1 complete: syncAll', report.syncAll);
40
+ }
41
+ catch (err) {
42
+ const msg = `syncAll failed: ${err.message}`;
43
+ report.errors.push(msg);
44
+ logger.warn(`[UiStartupTasks] ${msg}`);
45
+ }
46
+ // ── Stage 2: Staging auto-promotion (Bug 2 fix) ──
47
+ try {
48
+ if (ctx.container.services.stagingManager) {
49
+ const sm = ctx.container.get('stagingManager');
50
+ const result = sm.checkAndPromote();
51
+ report.staging = { promoted: result.promoted.length };
52
+ if (result.promoted.length > 0) {
53
+ logger.info(`[UiStartupTasks] Stage 2: auto-promoted ${result.promoted.length} staging entries`);
54
+ }
55
+ }
56
+ }
57
+ catch (err) {
58
+ const msg = `staging promote failed: ${err.message}`;
59
+ report.errors.push(msg);
60
+ logger.warn(`[UiStartupTasks] ${msg}`);
61
+ }
62
+ // ── Stage 3: Vector reconcile (best-effort) ──
63
+ try {
64
+ if (ctx.container.services.vectorService) {
65
+ const vectorService = ctx.container.get('vectorService');
66
+ if (vectorService.syncCoordinator &&
67
+ typeof vectorService.syncCoordinator.reconcile === 'function') {
68
+ const result = await vectorService.syncCoordinator.reconcile();
69
+ report.vectorReconcile = {
70
+ orphans: result.orphansRemoved,
71
+ missing: result.missingQueued,
72
+ };
73
+ logger.info('[UiStartupTasks] Stage 3: vector reconcile complete', report.vectorReconcile);
74
+ }
75
+ }
76
+ }
77
+ catch (err) {
78
+ const msg = `vector reconcile failed: ${err.message}`;
79
+ report.errors.push(msg);
80
+ logger.warn(`[UiStartupTasks] ${msg}`);
81
+ }
82
+ // ── Stage 4: BM25 index refresh ──
83
+ try {
84
+ if (ctx.container.services.searchEngine) {
85
+ const searchEngine = ctx.container.get('searchEngine');
86
+ searchEngine.refreshIndex({ force: true });
87
+ report.indexRefresh = true;
88
+ logger.info('[UiStartupTasks] Stage 4: BM25 index refreshed');
89
+ }
90
+ }
91
+ catch (err) {
92
+ const msg = `index refresh failed: ${err.message}`;
93
+ report.errors.push(msg);
94
+ logger.warn(`[UiStartupTasks] ${msg}`);
95
+ }
96
+ report.durationMs = Date.now() - start;
97
+ logger.info(`[UiStartupTasks] All tasks completed in ${report.durationMs}ms`, {
98
+ errors: report.errors.length,
99
+ });
100
+ return report;
101
+ }
@@ -44,16 +44,15 @@ const MCP_TOOLS_SUMMARY = [
44
44
  name: 'autosnippet_submit_knowledge',
45
45
  desc: 'Submit a knowledge candidate (strict validation)',
46
46
  },
47
- {
48
- name: 'autosnippet_submit_knowledge_batch',
49
- desc: 'Batch submit candidates (with dedup + throttle)',
50
- },
51
47
  { name: 'autosnippet_guard', desc: 'Code compliance check (single file or batch audit)' },
52
48
  { name: 'autosnippet_structure', desc: 'Project structure discovery (targets/files/metadata)' },
53
49
  { name: 'autosnippet_graph', desc: 'Knowledge graph query (query/impact/path/stats)' },
54
50
  { name: 'autosnippet_skill', desc: 'Skill management (list/load/create/update/delete)' },
55
- { name: 'autosnippet_save_document', desc: 'Save development document (auto-publish)' },
56
51
  { name: 'autosnippet_bootstrap', desc: 'Project cold-start & scan' },
52
+ {
53
+ name: 'autosnippet_panorama',
54
+ desc: 'Project panorama (operation: overview/module/gaps/health)',
55
+ },
57
56
  { name: 'autosnippet_health', desc: 'Service health & KB statistics' },
58
57
  { name: 'autosnippet_capabilities', desc: 'List all available MCP tools (self-discovery)' },
59
58
  ];
@@ -157,7 +157,9 @@ export declare class CursorDeliveryPipeline {
157
157
  };
158
158
  }>;
159
159
  /**
160
- * 加载知识条目(active + high-confidence pending)
160
+ * 加载知识条目(active + staging + high-confidence pending)
161
+ *
162
+ * M2 六态状态机: staging/active/evolving 均为 CONSUMABLE 状态
161
163
  */
162
164
  _loadEntries(): Promise<KnowledgeEntryProps[]>;
163
165
  /**
@@ -137,24 +137,27 @@ export class CursorDeliveryPipeline {
137
137
  }
138
138
  // ─── 内部方法 ───────────────────────────────────────
139
139
  /**
140
- * 加载知识条目(active + high-confidence pending)
140
+ * 加载知识条目(active + staging + high-confidence pending)
141
+ *
142
+ * M2 六态状态机: staging/active/evolving 均为 CONSUMABLE 状态
141
143
  */
142
144
  async _loadEntries() {
143
145
  const allEntries = [];
144
- // 加载 active
145
- try {
146
- const active = await this.knowledgeService.list({ lifecycle: 'active' }, { page: 1, pageSize: 200 });
147
- const activeItems = this._extractItems(active);
148
- allEntries.push(...activeItems);
149
- }
150
- catch (e) {
151
- this.logger.warn?.(`[CursorDelivery] Failed to load active entries: ${e.message}`);
146
+ // 加载 active + staging + evolving(CONSUMABLE 状态)
147
+ for (const state of ['active', 'staging', 'evolving']) {
148
+ try {
149
+ const result = await this.knowledgeService.list({ lifecycle: state }, { page: 1, pageSize: 200 });
150
+ const items = this._extractItems(result);
151
+ allEntries.push(...items);
152
+ }
153
+ catch (e) {
154
+ this.logger.warn?.(`[CursorDelivery] Failed to load ${state} entries: ${e.message}`);
155
+ }
152
156
  }
153
157
  // 加载 pending(高置信度的也纳入)
154
158
  try {
155
159
  const pending = await this.knowledgeService.list({ lifecycle: 'pending' }, { page: 1, pageSize: 200 });
156
160
  const pendingItems = this._extractItems(pending);
157
- // 过滤高置信度 pending(quality.confidence >= PENDING_MIN 或无 quality 字段)
158
161
  const highConfPending = pendingItems.filter((e) => {
159
162
  const qual = e.quality;
160
163
  const conf = qual?.confidence;
@@ -173,9 +173,10 @@ export class RulesGenerator {
173
173
  '',
174
174
  '- `autosnippet_bootstrap` — Cold-start: analyze the project and generate initial knowledge entries',
175
175
  '- `autosnippet_search({ query })` — Search knowledge base (BM25 + semantic)',
176
- '- `autosnippet_create_recipe` — Create a new coding recipe from current context',
176
+ '- `autosnippet_submit_knowledge` — Submit a knowledge candidate (strict validation)',
177
177
  '- `autosnippet_guard` — Run compliance review on current changes',
178
- '- `autosnippet_task_start` / `autosnippet_task_close` Track coding tasks with automatic knowledge capture',
178
+ '- `autosnippet_task` — Task & decision management (prime/create/claim/close/record_decision)',
179
+ '- `autosnippet_panorama` — Project panorama (overview/module/gaps/health)',
179
180
  '',
180
181
  '## Recommended First Steps',
181
182
  '',
@@ -0,0 +1,114 @@
1
+ /**
2
+ * ConsolidationAdvisor — 提交前融合顾问
3
+ *
4
+ * 解决问题:Agent 逐条提交 Recipe 导致碎片化、低价值条目激增。
5
+ *
6
+ * 设计思路:在新知识提交前分析已有知识库,给出 4 种建议之一:
7
+ * create — 独立有价值,正常新建(走正常可信度判断)
8
+ * merge — 与 1 条 Recipe 相似,将候选内容合并到已有 Recipe,合并后 Recipe → staging
9
+ * reorganize — 与多条 Recipe 交叉重叠,将候选功能拆分到已有 Recipe 上,被修改的 Recipe → staging
10
+ * insufficient — 独立价值不足且已有足够 Recipe 覆盖,交给 Agent 与开发者决定
11
+ *
12
+ * 分析维度:
13
+ * 1. 结构相似度 — 复用 RedundancyAnalyzer 的 4 维算法
14
+ * 2. 语义域覆盖 — category + trigger 是否落在已有 Recipe 管辖范围
15
+ * 3. 独立价值 — 内容长度、具体性、是否有独立 coreCode
16
+ */
17
+ interface DatabaseLike {
18
+ prepare(sql: string): {
19
+ all(...params: unknown[]): Record<string, unknown>[];
20
+ };
21
+ }
22
+ /** 提交候选的必要字段 */
23
+ export interface CandidateForConsolidation {
24
+ title: string;
25
+ description?: string;
26
+ doClause?: string;
27
+ dontClause?: string;
28
+ coreCode?: string;
29
+ category?: string;
30
+ trigger?: string;
31
+ whenClause?: string;
32
+ kind?: string;
33
+ content?: {
34
+ pattern?: string;
35
+ markdown?: string;
36
+ [key: string]: unknown;
37
+ };
38
+ }
39
+ /** 建议类型 */
40
+ export type ConsolidationAction = 'create' | 'merge' | 'reorganize' | 'insufficient';
41
+ /** 融合方向分析 — 描述候选能为已有 Recipe 补充什么 */
42
+ export interface MergeDirection {
43
+ /** 候选提供的新维度(已有 Recipe 缺失的) */
44
+ addedDimensions: string[];
45
+ /** 融合建议摘要 */
46
+ summary: string;
47
+ }
48
+ /** 融合分析结果 */
49
+ export interface ConsolidationAdvice {
50
+ action: ConsolidationAction;
51
+ confidence: number;
52
+ reason: string;
53
+ /** action=merge 时,将候选内容合并到的目标 Recipe */
54
+ targetRecipe?: {
55
+ id: string;
56
+ title: string;
57
+ similarity: number;
58
+ };
59
+ /** action=merge 时,候选能为目标 Recipe 补充的新维度 */
60
+ mergeDirection?: MergeDirection;
61
+ /** action=reorganize 时,需要重新组织的 Recipe 列表 */
62
+ reorganizeTargets?: {
63
+ id: string;
64
+ title: string;
65
+ similarity: number;
66
+ }[];
67
+ /** action=insufficient 时,已覆盖该领域的 Recipe */
68
+ coveredBy?: {
69
+ id: string;
70
+ title: string;
71
+ similarity: number;
72
+ }[];
73
+ /** 需要 Agent 关注的上下文 */
74
+ relatedRecipes?: {
75
+ id: string;
76
+ title: string;
77
+ similarity: number;
78
+ }[];
79
+ }
80
+ /** 批量分析结果 — 每个候选一条分析 + 批次内重叠检测 */
81
+ export interface BatchConsolidationResult {
82
+ items: {
83
+ index: number;
84
+ advice: ConsolidationAdvice;
85
+ }[];
86
+ /** 批次内部候选之间的重叠 */
87
+ internalOverlaps: {
88
+ indexA: number;
89
+ indexB: number;
90
+ similarity: number;
91
+ }[];
92
+ }
93
+ export declare class ConsolidationAdvisor {
94
+ #private;
95
+ constructor(db: DatabaseLike);
96
+ /**
97
+ * 分析候选知识与现有知识库的关系,返回融合建议。
98
+ *
99
+ * @param candidate - 待提交的候选数据
100
+ * @returns ConsolidationAdvice — 建议 + 理由 + 上下文
101
+ */
102
+ analyze(candidate: CandidateForConsolidation): ConsolidationAdvice;
103
+ /**
104
+ * 批量分析候选知识与现有知识库的关系。
105
+ *
106
+ * 除了对每个候选独立运行 analyze() 外,
107
+ * 还检测批次内部候选之间的重叠(防止批量提交碎片化)。
108
+ *
109
+ * @param candidates - 待提交的候选数组
110
+ * @returns BatchConsolidationResult — 每条分析 + 批次内重叠
111
+ */
112
+ analyzeBatch(candidates: CandidateForConsolidation[]): BatchConsolidationResult;
113
+ }
114
+ export {};