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,135 @@
1
+ /**
2
+ * evolution.ts — Evolution 系统类型定义
3
+ *
4
+ * 包含 ContentPatcher / RecipeLifecycleSupervisor / 结构化 suggestedChanges 的类型。
5
+ */
6
+ /** suggestedChanges 中每项变更操作 */
7
+ export interface PatchChange {
8
+ /** 目标字段路径(如 'content.markdown', 'coreCode', 'doClause') */
9
+ field: string;
10
+ /** 操作类型 */
11
+ action: 'replace' | 'replace-section' | 'append';
12
+ /** 新值(replace / append 时必填) */
13
+ newValue?: string;
14
+ /** 目标 section 标题(replace-section 时必填) */
15
+ section?: string;
16
+ /** 新 section 内容(replace-section 时必填) */
17
+ newContent?: string;
18
+ }
19
+ /** 结构化 suggestedChanges 格式(Agent 输出) */
20
+ export interface StructuredPatch {
21
+ patchVersion: number;
22
+ changes: PatchChange[];
23
+ reasoning: string;
24
+ }
25
+ /** Recipe 内容快照 */
26
+ export interface RecipeContentSnapshot {
27
+ coreCode: string;
28
+ doClause: string;
29
+ dontClause: string;
30
+ whenClause: string;
31
+ content: {
32
+ markdown?: string;
33
+ rationale?: string;
34
+ };
35
+ sourceRefs: string[];
36
+ headers: string[];
37
+ }
38
+ /** ContentPatcher 应用结果 */
39
+ export interface ContentPatchResult {
40
+ success: boolean;
41
+ recipeId: string;
42
+ fieldsPatched: string[];
43
+ beforeSnapshot: RecipeContentSnapshot;
44
+ afterSnapshot: RecipeContentSnapshot;
45
+ patchSource: 'agent-suggestion' | 'correction' | 'merge';
46
+ skipped: boolean;
47
+ skipReason?: string;
48
+ }
49
+ /** 状态转移触发类型 */
50
+ export type TransitionTrigger = 'confidence-route' | 'grace-period-expire' | 'guard-conflict' | 'proposal-execution' | 'proposal-attach' | 'content-patch-complete' | 'decay-detection' | 'manual-deprecation' | 'timeout-recovery' | 'evidence-recovery' | 'resurrection';
51
+ /** 状态转移证据 */
52
+ export interface TransitionEvidence {
53
+ decayScore?: number;
54
+ fpRate?: number;
55
+ usageCount?: number;
56
+ suggestedChanges?: string;
57
+ patchResult?: ContentPatchResult;
58
+ reason: string;
59
+ }
60
+ /** 状态转移请求 */
61
+ export interface TransitionRequest {
62
+ recipeId: string;
63
+ targetState: string;
64
+ trigger: TransitionTrigger;
65
+ evidence?: TransitionEvidence;
66
+ proposalId?: string;
67
+ operatorId?: string;
68
+ }
69
+ /** 状态转移事件(不可变记录) */
70
+ export interface TransitionEvent {
71
+ id: string;
72
+ recipeId: string;
73
+ fromState: string;
74
+ toState: string;
75
+ trigger: TransitionTrigger;
76
+ evidence: TransitionEvidence | null;
77
+ proposalId: string | null;
78
+ operatorId: string;
79
+ createdAt: number;
80
+ }
81
+ /** 状态转移结果 */
82
+ export interface TransitionResult {
83
+ success: boolean;
84
+ fromState: string;
85
+ toState: string;
86
+ event?: TransitionEvent;
87
+ error?: string;
88
+ }
89
+ /** 超时检查结果 */
90
+ export interface TimeoutCheckResult {
91
+ timedOut: {
92
+ recipeId: string;
93
+ fromState: string;
94
+ toState: string;
95
+ age: number;
96
+ }[];
97
+ checked: number;
98
+ }
99
+ /** 生命周期健康摘要 */
100
+ export interface LifecycleHealthSummary {
101
+ stateDistribution: Record<string, number>;
102
+ intermediateStates: {
103
+ stuckEvolving: {
104
+ count: number;
105
+ oldestAge: number;
106
+ };
107
+ stuckDecaying: {
108
+ count: number;
109
+ oldestAge: number;
110
+ };
111
+ stuckStaging: {
112
+ count: number;
113
+ oldestAge: number;
114
+ };
115
+ stuckPending: {
116
+ count: number;
117
+ oldestAge: number;
118
+ };
119
+ };
120
+ recentTransitions: {
121
+ last24h: number;
122
+ last7d: number;
123
+ topTriggers: {
124
+ trigger: string;
125
+ count: number;
126
+ }[];
127
+ };
128
+ proposalMetrics: {
129
+ pendingCount: number;
130
+ observingCount: number;
131
+ executionRate: number;
132
+ avgObservationDays: number;
133
+ contentPatchRate: number;
134
+ };
135
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * evolution.ts — Evolution 系统类型定义
3
+ *
4
+ * 包含 ContentPatcher / RecipeLifecycleSupervisor / 结构化 suggestedChanges 的类型。
5
+ */
6
+ export {};
@@ -0,0 +1,25 @@
1
+ /**
2
+ * §10.6 Graph shared types — 图谱类型共享
3
+ *
4
+ * Bootstrap 管道和 KnowledgeGraphService 共享实体/边的概念。
5
+ * 统一枚举避免 string literal 不一致。
6
+ */
7
+ /** 代码实体类型 */
8
+ export type EntityType = 'class' | 'protocol' | 'category' | 'module' | 'pattern' | 'function' | 'file';
9
+ /** 关系类型 */
10
+ export type RelationType = 'inherits' | 'conforms' | 'extends' | 'depends_on' | 'uses_pattern' | 'is_part_of' | 'calls' | 'data_flow' | 'discovered_in';
11
+ /** 图节点引用 */
12
+ export interface GraphNodeRef {
13
+ id: string;
14
+ type: EntityType;
15
+ name: string;
16
+ }
17
+ /** 图边引用 */
18
+ export interface GraphEdgeRef {
19
+ fromId: string;
20
+ fromType: EntityType;
21
+ toId: string;
22
+ toType: EntityType;
23
+ relation: RelationType;
24
+ weight?: number;
25
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * §10.6 Graph shared types — 图谱类型共享
3
+ *
4
+ * Bootstrap 管道和 KnowledgeGraphService 共享实体/边的概念。
5
+ * 统一枚举避免 string literal 不一致。
6
+ */
7
+ export {};
@@ -0,0 +1,131 @@
1
+ /**
2
+ * §10.1 KnowledgeEntryWire — 统一的知识条目传输合约
3
+ *
4
+ * 这是后端 KnowledgeEntry.toJSON() 和前端 Dashboard 共享的唯一类型定义。
5
+ * 所有 API 层传输都使用此形状,消除后端 class 与前端 interface 的字段漂移。
6
+ */
7
+ export type KnowledgeLifecycle = 'pending' | 'staging' | 'active' | 'evolving' | 'decaying' | 'deprecated';
8
+ export type KnowledgeKind = 'rule' | 'pattern' | 'fact';
9
+ export interface KnowledgeContentWire {
10
+ pattern: string;
11
+ markdown: string;
12
+ rationale: string;
13
+ steps: Array<{
14
+ title?: string;
15
+ description?: string;
16
+ code?: string;
17
+ }>;
18
+ codeChanges: Array<{
19
+ file: string;
20
+ before: string;
21
+ after: string;
22
+ explanation: string;
23
+ }>;
24
+ verification: {
25
+ method?: string;
26
+ expectedResult?: string;
27
+ testCode?: string;
28
+ } | null;
29
+ }
30
+ export interface KnowledgeReasoningWire {
31
+ whyStandard: string;
32
+ sources: string[];
33
+ confidence: number;
34
+ qualitySignals: Record<string, unknown>;
35
+ alternatives: string[];
36
+ }
37
+ export interface KnowledgeQualityWire {
38
+ completeness: number;
39
+ adaptation: number;
40
+ documentation: number;
41
+ overall: number;
42
+ grade: string;
43
+ }
44
+ export interface KnowledgeStatsWire {
45
+ views: number;
46
+ adoptions: number;
47
+ applications: number;
48
+ guardHits: number;
49
+ searchHits: number;
50
+ authority: number;
51
+ lastHitAt: number | null;
52
+ lastSearchedAt: number | null;
53
+ lastGuardHitAt: number | null;
54
+ hitsLast30d: number;
55
+ hitsLast90d: number;
56
+ searchHitsLast30d: number;
57
+ version: number;
58
+ ruleFalsePositiveRate: number | null;
59
+ }
60
+ export interface KnowledgeConstraintsWire {
61
+ guards: Array<{
62
+ id?: string | null;
63
+ type?: string;
64
+ pattern: string | null;
65
+ severity: string;
66
+ message?: string;
67
+ fixSuggestion?: string;
68
+ }>;
69
+ boundaries: string[];
70
+ preconditions: string[];
71
+ sideEffects: string[];
72
+ }
73
+ export interface KnowledgeRelationEntry {
74
+ target: string;
75
+ description?: string;
76
+ }
77
+ export interface KnowledgeRelationsWire {
78
+ [bucket: string]: KnowledgeRelationEntry[];
79
+ }
80
+ /** 后端 → 前端 / API 传输的唯一合约 */
81
+ export interface KnowledgeEntryWire {
82
+ id: string;
83
+ title: string;
84
+ description: string;
85
+ lifecycle: string;
86
+ lifecycleHistory: Array<{
87
+ from: string;
88
+ to: string;
89
+ at: number;
90
+ }>;
91
+ autoApprovable: boolean;
92
+ language: string;
93
+ category: string;
94
+ kind: string;
95
+ knowledgeType: string;
96
+ complexity: string;
97
+ scope: string;
98
+ difficulty: string | null;
99
+ tags: string[];
100
+ trigger: string;
101
+ topicHint: string;
102
+ whenClause: string;
103
+ doClause: string;
104
+ dontClause: string;
105
+ coreCode: string;
106
+ usageGuide: string;
107
+ content: KnowledgeContentWire;
108
+ relations: KnowledgeRelationsWire;
109
+ constraints: KnowledgeConstraintsWire;
110
+ reasoning: KnowledgeReasoningWire;
111
+ quality: KnowledgeQualityWire;
112
+ stats: KnowledgeStatsWire;
113
+ headers: string[];
114
+ headerPaths: string[];
115
+ moduleName: string;
116
+ includeHeaders: boolean;
117
+ agentNotes: string | null;
118
+ aiInsight: string | null;
119
+ reviewedBy: string | null;
120
+ reviewedAt: number | null;
121
+ rejectionReason: string | null;
122
+ source: string;
123
+ sourceFile: string | null;
124
+ sourceCandidateId: string | null;
125
+ createdBy: string;
126
+ createdAt: number;
127
+ updatedAt: number;
128
+ publishedAt: number | null;
129
+ publishedBy: string | null;
130
+ [key: string]: unknown;
131
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * §10.1 KnowledgeEntryWire — 统一的知识条目传输合约
3
+ *
4
+ * 这是后端 KnowledgeEntry.toJSON() 和前端 Dashboard 共享的唯一类型定义。
5
+ * 所有 API 层传输都使用此形状,消除后端 class 与前端 interface 的字段漂移。
6
+ */
7
+ export {};
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ProjectSnapshot Builder — 从 runAllPhases() 的松散返回值构建类型化快照
3
+ *
4
+ * 职责:
5
+ * 1. 类型归一化(unknown → typed interfaces)
6
+ * 2. 默认值填充
7
+ * 3. 不可变冻结(Object.freeze)
8
+ *
9
+ * @module types/project-snapshot-builder
10
+ * @see docs/copilot/unified-project-snapshot-design.md
11
+ */
12
+ import type { ProjectSnapshot, ProjectSnapshotInput } from './project-snapshot.js';
13
+ /**
14
+ * 从 runAllPhases() 的松散返回值构建类型化的 ProjectSnapshot。
15
+ *
16
+ * @param input runAllPhases() 返回值 + 额外的上下文信息
17
+ * @returns 不可变的 ProjectSnapshot 对象
18
+ */
19
+ export declare function buildProjectSnapshot(input: ProjectSnapshotInput): ProjectSnapshot;
@@ -0,0 +1,189 @@
1
+ /**
2
+ * ProjectSnapshot Builder — 从 runAllPhases() 的松散返回值构建类型化快照
3
+ *
4
+ * 职责:
5
+ * 1. 类型归一化(unknown → typed interfaces)
6
+ * 2. 默认值填充
7
+ * 3. 不可变冻结(Object.freeze)
8
+ *
9
+ * @module types/project-snapshot-builder
10
+ * @see docs/copilot/unified-project-snapshot-design.md
11
+ */
12
+ const SNAPSHOT_VERSION = '1.0.0';
13
+ /**
14
+ * 从 runAllPhases() 的松散返回值构建类型化的 ProjectSnapshot。
15
+ *
16
+ * @param input runAllPhases() 返回值 + 额外的上下文信息
17
+ * @returns 不可变的 ProjectSnapshot 对象
18
+ */
19
+ export function buildProjectSnapshot(input) {
20
+ const primaryLang = typeof input.primaryLang === 'string' ? input.primaryLang : 'unknown';
21
+ const langStats = input.langStats && typeof input.langStats === 'object' ? input.langStats : {};
22
+ const language = {
23
+ primaryLang,
24
+ stats: langStats,
25
+ secondary: input.langProfile?.secondary,
26
+ isMultiLang: input.langProfile?.isMultiLang,
27
+ };
28
+ const snapshot = {
29
+ version: SNAPSHOT_VERSION,
30
+ timestamp: Date.now(),
31
+ projectRoot: input.projectRoot,
32
+ sourceTag: input.sourceTag,
33
+ // Phase 1
34
+ allFiles: normalizeFiles(input.allFiles),
35
+ allTargets: normalizeTargets(input.allTargets),
36
+ discoverer: normalizeDiscoverer(input.discoverer),
37
+ truncated: input.truncated ?? false,
38
+ // Phase 1.5
39
+ language,
40
+ ast: normalizeAst(input.astProjectSummary),
41
+ astContext: typeof input.astContext === 'string' ? input.astContext : null,
42
+ // Phase 1.6-1.7
43
+ codeEntityGraph: normalizeCodeEntity(input.codeEntityResult),
44
+ callGraph: normalizeCallGraph(input.callGraphResult),
45
+ // Phase 1.8
46
+ panorama: normalizePanorama(input.panoramaResult),
47
+ // Phase 2
48
+ dependencyGraph: normalizeDepGraph(input.depGraphData),
49
+ depEdgesWritten: typeof input.depEdgesWritten === 'number' ? input.depEdgesWritten : 0,
50
+ // Phase 3
51
+ guardAudit: normalizeGuardAudit(input.guardAudit),
52
+ // Phase 4
53
+ activeDimensions: normalizeDimensions(input.activeDimensions),
54
+ enhancementPackInfo: normalizeEnhancementPackInfo(input.enhancementPackInfo),
55
+ enhancementPatterns: Array.isArray(input.enhancementPatterns)
56
+ ? input.enhancementPatterns
57
+ : [],
58
+ enhancementGuardRules: Array.isArray(input.enhancementGuardRules)
59
+ ? input.enhancementGuardRules
60
+ : [],
61
+ detectedFrameworks: Array.isArray(input.detectedFrameworks) ? input.detectedFrameworks : [],
62
+ // Language profile & Targets summary
63
+ langProfile: language,
64
+ targetsSummary: normalizeTargets(input.targetsSummary || input.allTargets),
65
+ localPackageModules: normalizeLocalPackageModules(input.localPackageModules),
66
+ // Report
67
+ phaseReport: normalizePhaseReport(input.report),
68
+ warnings: Array.isArray(input.warnings) ? input.warnings : [],
69
+ // Incremental
70
+ incrementalPlan: normalizeIncrementalPlan(input.incrementalPlan),
71
+ // Empty
72
+ isEmpty: input.isEmpty ?? false,
73
+ };
74
+ return Object.freeze(snapshot);
75
+ }
76
+ // ── Normalize 函数 ──────────────────────────────────────────
77
+ function normalizeFiles(raw) {
78
+ if (!Array.isArray(raw)) {
79
+ return [];
80
+ }
81
+ return raw.map((f) => ({
82
+ name: String(f.name || ''),
83
+ path: String(f.path || ''),
84
+ relativePath: String(f.relativePath || ''),
85
+ content: String(f.content || ''),
86
+ targetName: String(f.targetName || ''),
87
+ language: f.language != null ? String(f.language) : undefined,
88
+ totalLines: typeof f.totalLines === 'number' ? f.totalLines : undefined,
89
+ priority: f.priority != null ? String(f.priority) : undefined,
90
+ truncated: typeof f.truncated === 'boolean' ? f.truncated : undefined,
91
+ }));
92
+ }
93
+ function normalizeTargets(raw) {
94
+ if (!Array.isArray(raw)) {
95
+ return [];
96
+ }
97
+ return raw.map((t) => {
98
+ if (typeof t === 'string') {
99
+ return { name: t };
100
+ }
101
+ const obj = t;
102
+ return {
103
+ name: String(obj.name || ''),
104
+ type: obj.type != null ? String(obj.type) : undefined,
105
+ framework: obj.framework != null ? String(obj.framework) : undefined,
106
+ packageName: obj.packageName != null ? String(obj.packageName) : undefined,
107
+ inferredRole: obj.inferredRole != null ? String(obj.inferredRole) : undefined,
108
+ fileCount: typeof obj.fileCount === 'number' ? obj.fileCount : undefined,
109
+ isLocalPackage: typeof obj.isLocalPackage === 'boolean' ? obj.isLocalPackage : undefined,
110
+ };
111
+ });
112
+ }
113
+ function normalizeDiscoverer(raw) {
114
+ if (raw && typeof raw === 'object') {
115
+ const obj = raw;
116
+ return {
117
+ id: String(obj.id || 'unknown'),
118
+ displayName: String(obj.displayName || 'Unknown'),
119
+ };
120
+ }
121
+ return { id: 'unknown', displayName: 'Unknown' };
122
+ }
123
+ function normalizeAst(raw) {
124
+ if (!raw || typeof raw !== 'object') {
125
+ return null;
126
+ }
127
+ // Pass through — the shapes from analyzeProject() already match AstSummary
128
+ return raw;
129
+ }
130
+ function normalizeCodeEntity(raw) {
131
+ if (!raw || typeof raw !== 'object') {
132
+ return null;
133
+ }
134
+ return raw;
135
+ }
136
+ function normalizeCallGraph(raw) {
137
+ if (!raw || typeof raw !== 'object') {
138
+ return null;
139
+ }
140
+ return raw;
141
+ }
142
+ function normalizePanorama(raw) {
143
+ if (!raw || typeof raw !== 'object') {
144
+ return null;
145
+ }
146
+ return raw;
147
+ }
148
+ function normalizeDepGraph(raw) {
149
+ if (!raw || typeof raw !== 'object') {
150
+ return null;
151
+ }
152
+ return raw;
153
+ }
154
+ function normalizeGuardAudit(raw) {
155
+ if (!raw || typeof raw !== 'object') {
156
+ return null;
157
+ }
158
+ return raw;
159
+ }
160
+ function normalizeDimensions(raw) {
161
+ if (!Array.isArray(raw)) {
162
+ return [];
163
+ }
164
+ return raw;
165
+ }
166
+ function normalizeEnhancementPackInfo(raw) {
167
+ if (!Array.isArray(raw)) {
168
+ return [];
169
+ }
170
+ return raw;
171
+ }
172
+ function normalizePhaseReport(raw) {
173
+ if (!raw || typeof raw !== 'object') {
174
+ return null;
175
+ }
176
+ return raw;
177
+ }
178
+ function normalizeIncrementalPlan(raw) {
179
+ if (!raw || typeof raw !== 'object') {
180
+ return null;
181
+ }
182
+ return raw;
183
+ }
184
+ function normalizeLocalPackageModules(raw) {
185
+ if (!Array.isArray(raw)) {
186
+ return [];
187
+ }
188
+ return raw;
189
+ }