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.
- package/README.md +174 -83
- package/config/constitution.yaml +2 -0
- package/dashboard/dist/assets/icons-D1aVZYFW.js +1 -0
- package/dashboard/dist/assets/index-CxHOu8Hd.css +1 -0
- package/dashboard/dist/assets/index-DDdAOpYT.js +128 -0
- package/dashboard/dist/index.html +3 -3
- package/dist/bin/api-server.js +1 -0
- package/dist/bin/cli.d.ts +1 -0
- package/dist/bin/cli.js +136 -9
- package/dist/lib/agent/AgentFactory.d.ts +0 -17
- package/dist/lib/agent/AgentFactory.js +1 -25
- package/dist/lib/agent/capabilities.d.ts +11 -0
- package/dist/lib/agent/capabilities.js +29 -5
- package/dist/lib/agent/context/ExplorationTracker.js +10 -1
- package/dist/lib/agent/context/exploration/ExplorationStrategies.d.ts +2 -0
- package/dist/lib/agent/context/exploration/ExplorationStrategies.js +2 -2
- package/dist/lib/agent/domain/insight-analyst.d.ts +47 -3
- package/dist/lib/agent/domain/insight-analyst.js +111 -11
- package/dist/lib/agent/domain/insight-evolver.d.ts +69 -0
- package/dist/lib/agent/domain/insight-evolver.js +230 -0
- package/dist/lib/agent/domain/insight-gate.d.ts +42 -0
- package/dist/lib/agent/domain/insight-gate.js +41 -0
- package/dist/lib/agent/domain/insight-producer.d.ts +27 -2
- package/dist/lib/agent/domain/insight-producer.js +60 -5
- package/dist/lib/agent/domain/scan-prompts.js +10 -7
- package/dist/lib/agent/memory/ActiveContext.d.ts +2 -28
- package/dist/lib/agent/memory/MemoryCoordinator.d.ts +2 -2
- package/dist/lib/agent/memory/SessionStore.d.ts +6 -12
- package/dist/lib/agent/memory/SessionStore.js +9 -15
- package/dist/lib/agent/memory/memory-flush-contract.d.ts +49 -0
- package/dist/lib/agent/memory/memory-flush-contract.js +16 -0
- package/dist/lib/agent/memory/session-store-schema.d.ts +20 -0
- package/dist/lib/agent/memory/session-store-schema.js +41 -0
- package/dist/lib/agent/presets.d.ts +89 -1
- package/dist/lib/agent/presets.js +53 -5
- package/dist/lib/agent/tools/_shared.d.ts +7 -15
- package/dist/lib/agent/tools/_shared.js +20 -21
- package/dist/lib/agent/tools/composite.d.ts +25 -22
- package/dist/lib/agent/tools/composite.js +108 -109
- package/dist/lib/agent/tools/evolution-tools.d.ts +145 -0
- package/dist/lib/agent/tools/evolution-tools.js +161 -0
- package/dist/lib/agent/tools/index.d.ts +163 -92
- package/dist/lib/agent/tools/index.js +9 -1
- package/dist/lib/agent/tools/lifecycle.d.ts +7 -1
- package/dist/lib/agent/tools/lifecycle.js +59 -75
- package/dist/lib/cli/AiScanService.js +1 -1
- package/dist/lib/cli/KnowledgeSyncService.d.ts +5 -1
- package/dist/lib/cli/KnowledgeSyncService.js +6 -3
- package/dist/lib/core/AstAnalyzer.d.ts +1 -0
- package/dist/lib/{service/bootstrap/DimensionCopyRegistry.d.ts → domain/dimension/DimensionCopy.d.ts} +2 -2
- package/dist/lib/{service/bootstrap/DimensionCopyRegistry.js → domain/dimension/DimensionCopy.js} +22 -72
- package/dist/lib/domain/dimension/DimensionRegistry.d.ts +54 -0
- package/dist/lib/domain/dimension/DimensionRegistry.js +620 -0
- package/dist/lib/domain/dimension/DimensionSop.d.ts +55 -0
- package/dist/lib/domain/dimension/DimensionSop.js +1604 -0
- package/dist/lib/domain/dimension/UnifiedDimension.d.ts +61 -0
- package/dist/lib/domain/dimension/UnifiedDimension.js +53 -0
- package/dist/lib/domain/dimension/index.d.ts +10 -0
- package/dist/lib/domain/dimension/index.js +9 -0
- package/dist/lib/domain/knowledge/FieldSpec.d.ts +1 -1
- package/dist/lib/domain/knowledge/FieldSpec.js +29 -16
- package/dist/lib/domain/knowledge/KnowledgeEntry.d.ts +33 -111
- package/dist/lib/domain/knowledge/KnowledgeEntry.js +27 -6
- package/dist/lib/domain/knowledge/KnowledgeRepository.d.ts +1 -0
- package/dist/lib/domain/knowledge/KnowledgeRepository.js +3 -0
- package/dist/lib/domain/knowledge/Lifecycle.js +1 -1
- package/dist/lib/domain/knowledge/StyleGuide.d.ts +1 -1
- package/dist/lib/domain/knowledge/StyleGuide.js +1 -1
- package/dist/lib/domain/knowledge/UnifiedValidator.js +15 -0
- package/dist/lib/domain/knowledge/values/Stats.d.ts +1 -1
- package/dist/lib/domain/knowledge/values/Stats.js +2 -2
- package/dist/lib/external/mcp/McpServer.js +4 -0
- package/dist/lib/external/mcp/handlers/TargetClassifier.d.ts +1 -1
- package/dist/lib/external/mcp/handlers/bootstrap/BootstrapSession.d.ts +8 -16
- package/dist/lib/external/mcp/handlers/bootstrap/BootstrapSession.js +10 -10
- package/dist/lib/external/mcp/handlers/bootstrap/ExternalSubmissionTracker.d.ts +7 -0
- package/dist/lib/external/mcp/handlers/bootstrap/ExternalSubmissionTracker.js +20 -0
- package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.d.ts +52 -132
- package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.js +204 -17
- package/dist/lib/external/mcp/handlers/bootstrap/base-dimensions.d.ts +11 -75
- package/dist/lib/external/mcp/handlers/bootstrap/base-dimensions.js +40 -191
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/dimension-configs.d.ts +13 -78
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/dimension-configs.js +30 -52
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/dimension-context.d.ts +0 -1
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.d.ts +99 -12
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +172 -161
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/tier-scheduler.js +7 -17
- package/dist/lib/external/mcp/handlers/bootstrap/shared/async-fill-helpers.d.ts +46 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/async-fill-helpers.js +58 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/audit-helpers.d.ts +25 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/audit-helpers.js +47 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.d.ts +50 -12
- package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.js +30 -10
- package/dist/lib/external/mcp/handlers/bootstrap/shared/dimension-text.js +1 -1
- package/dist/lib/external/mcp/handlers/bootstrap/shared/handler-types.d.ts +24 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/handler-types.js +14 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/panorama-utils.d.ts +14 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/panorama-utils.js +48 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/session-helpers.d.ts +21 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/session-helpers.js +45 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/skill-generator.d.ts +1 -1
- package/dist/lib/external/mcp/handlers/bootstrap/shared/target-file-map.d.ts +27 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/target-file-map.js +44 -0
- package/dist/lib/external/mcp/handlers/bootstrap-external.d.ts +14 -10
- package/dist/lib/external/mcp/handlers/bootstrap-external.js +39 -51
- package/dist/lib/external/mcp/handlers/bootstrap-internal.d.ts +2 -0
- package/dist/lib/external/mcp/handlers/bootstrap-internal.js +115 -82
- package/dist/lib/external/mcp/handlers/consolidated.d.ts +4 -4
- package/dist/lib/external/mcp/handlers/consolidated.js +115 -162
- package/dist/lib/external/mcp/handlers/dimension-complete-external.js +69 -1
- package/dist/lib/external/mcp/handlers/evolve-external.d.ts +54 -0
- package/dist/lib/external/mcp/handlers/evolve-external.js +226 -0
- package/dist/lib/external/mcp/handlers/knowledge.js +26 -2
- package/dist/lib/external/mcp/handlers/rescan-external.d.ts +76 -0
- package/dist/lib/external/mcp/handlers/rescan-external.js +335 -0
- package/dist/lib/external/mcp/handlers/rescan-internal.d.ts +120 -0
- package/dist/lib/external/mcp/handlers/rescan-internal.js +359 -0
- package/dist/lib/external/mcp/handlers/search.d.ts +6 -5
- package/dist/lib/external/mcp/handlers/search.js +6 -5
- package/dist/lib/external/mcp/handlers/types.d.ts +2 -1
- package/dist/lib/external/mcp/handlers/wiki-external.js +2 -2
- package/dist/lib/external/mcp/tools.d.ts +8 -18
- package/dist/lib/external/mcp/tools.js +60 -3
- package/dist/lib/http/routes/knowledge.js +122 -1
- package/dist/lib/http/routes/modules.js +25 -3
- package/dist/lib/http/routes/panorama.js +16 -4
- package/dist/lib/infrastructure/cache/CacheCoordinator.d.ts +41 -0
- package/dist/lib/infrastructure/cache/CacheCoordinator.js +105 -0
- package/dist/lib/infrastructure/database/migrations/006_lifecycle_transition_events.d.ts +7 -0
- package/dist/lib/infrastructure/database/migrations/006_lifecycle_transition_events.js +28 -0
- package/dist/lib/infrastructure/vector/HnswVectorAdapter.js +1 -1
- package/dist/lib/injection/ServiceContainer.js +55 -0
- package/dist/lib/injection/ServiceMap.d.ts +8 -1
- package/dist/lib/injection/modules/InfraModule.js +4 -1
- package/dist/lib/injection/modules/KnowledgeModule.js +38 -1
- package/dist/lib/repository/evolution/ProposalRepository.d.ts +99 -0
- package/dist/lib/repository/evolution/ProposalRepository.js +255 -0
- package/dist/lib/repository/knowledge/KnowledgeRepository.impl.d.ts +4 -0
- package/dist/lib/repository/knowledge/KnowledgeRepository.impl.js +16 -1
- package/dist/lib/service/bootstrap/BootstrapEventEmitter.d.ts +3 -2
- package/dist/lib/service/bootstrap/BootstrapEventEmitter.js +1 -1
- package/dist/lib/service/bootstrap/DeliveryVerifier.d.ts +51 -0
- package/dist/lib/service/bootstrap/DeliveryVerifier.js +163 -0
- package/dist/lib/service/bootstrap/UiStartupTasks.d.ts +22 -4
- package/dist/lib/service/bootstrap/UiStartupTasks.js +73 -5
- package/dist/lib/service/bootstrap/bootstrap-event-types.d.ts +54 -0
- package/dist/lib/service/bootstrap/bootstrap-event-types.js +10 -0
- package/dist/lib/service/cleanup/CleanupService.d.ts +85 -0
- package/dist/lib/service/cleanup/CleanupService.js +324 -0
- package/dist/lib/service/delivery/AgentInstructionsGenerator.js +39 -43
- package/dist/lib/service/delivery/FileProtection.d.ts +20 -0
- package/dist/lib/service/delivery/FileProtection.js +54 -0
- package/dist/lib/service/delivery/SkillsSyncer.js +16 -21
- package/dist/lib/service/evolution/ContentPatcher.d.ts +44 -0
- package/dist/lib/service/evolution/ContentPatcher.js +310 -0
- package/dist/lib/service/evolution/DecayDetector.d.ts +4 -3
- package/dist/lib/service/evolution/DecayDetector.js +97 -22
- package/dist/lib/service/evolution/KnowledgeMetabolism.d.ts +4 -2
- package/dist/lib/service/evolution/KnowledgeMetabolism.js +29 -2
- package/dist/lib/service/evolution/ProposalExecutor.d.ts +66 -0
- package/dist/lib/service/evolution/ProposalExecutor.js +424 -0
- package/dist/lib/service/evolution/RecipeLifecycleSupervisor.d.ts +64 -0
- package/dist/lib/service/evolution/RecipeLifecycleSupervisor.js +458 -0
- package/dist/lib/service/evolution/RecipeRelevanceAuditor.d.ts +89 -0
- package/dist/lib/service/evolution/RecipeRelevanceAuditor.js +492 -0
- package/dist/lib/service/evolution/StagingManager.js +5 -3
- package/dist/lib/service/evolution/createSupersedeProposal.d.ts +44 -0
- package/dist/lib/service/evolution/createSupersedeProposal.js +81 -0
- package/dist/lib/service/guard/ComplianceReporter.d.ts +4 -0
- package/dist/lib/service/guard/ComplianceReporter.js +51 -0
- package/dist/lib/service/guard/GuardCheckEngine.js +5 -4
- package/dist/lib/service/guard/GuardCrossFileChecks.js +2 -0
- package/dist/lib/service/guard/ReverseGuard.d.ts +1 -1
- package/dist/lib/service/guard/ReverseGuard.js +32 -2
- package/dist/lib/service/knowledge/ConfidenceRouter.js +1 -1
- package/dist/lib/service/knowledge/KnowledgeService.d.ts +11 -1
- package/dist/lib/service/knowledge/KnowledgeService.js +44 -4
- package/dist/lib/service/knowledge/RecipeProductionGateway.d.ts +225 -0
- package/dist/lib/service/knowledge/RecipeProductionGateway.js +384 -0
- package/dist/lib/service/knowledge/SourceRefReconciler.d.ts +2 -0
- package/dist/lib/service/knowledge/SourceRefReconciler.js +48 -0
- package/dist/lib/service/panorama/DimensionAnalyzer.d.ts +3 -2
- package/dist/lib/service/panorama/DimensionAnalyzer.js +15 -140
- package/dist/lib/service/search/BM25Scorer.d.ts +2 -2
- package/dist/lib/service/search/SearchEngine.d.ts +11 -10
- package/dist/lib/service/search/SearchEngine.js +38 -36
- package/dist/lib/service/search/SearchTypes.d.ts +14 -8
- package/dist/lib/service/search/SearchTypes.js +1 -1
- package/dist/lib/service/search/tokenizer.d.ts +1 -1
- package/dist/lib/service/search/tokenizer.js +2 -2
- package/dist/lib/shared/schemas/common.d.ts +4 -4
- package/dist/lib/shared/schemas/http-requests.d.ts +12 -1
- package/dist/lib/shared/schemas/http-requests.js +8 -0
- package/dist/lib/shared/schemas/mcp-tools.d.ts +33 -2
- package/dist/lib/shared/schemas/mcp-tools.js +42 -0
- package/dist/lib/types/evolution.d.ts +135 -0
- package/dist/lib/types/evolution.js +6 -0
- package/dist/lib/types/graph-shared.d.ts +25 -0
- package/dist/lib/types/graph-shared.js +7 -0
- package/dist/lib/types/knowledge-wire.d.ts +131 -0
- package/dist/lib/types/knowledge-wire.js +7 -0
- package/dist/lib/types/project-snapshot-builder.d.ts +19 -0
- package/dist/lib/types/project-snapshot-builder.js +189 -0
- package/dist/lib/types/project-snapshot.d.ts +399 -0
- package/dist/lib/types/project-snapshot.js +17 -0
- package/dist/lib/types/search-wire.d.ts +46 -0
- package/dist/lib/types/search-wire.js +7 -0
- package/dist/lib/types/snapshot-views.d.ts +58 -0
- package/dist/lib/types/snapshot-views.js +103 -0
- package/package.json +1 -1
- package/skills/autosnippet-recipes/SKILL.md +1 -1
- package/templates/instructions/agent-static.md +2 -0
- package/templates/instructions/conventions.md +3 -1
- package/templates/recipes-setup/README.md +2 -2
- package/dashboard/dist/assets/icons-BJ2mUBi8.js +0 -1
- package/dashboard/dist/assets/index-B659K9t5.js +0 -128
- package/dashboard/dist/assets/index-NCm40PMD.css +0 -1
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/noAiFallback.d.ts +0 -169
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/noAiFallback.js +0 -727
- package/dist/lib/external/mcp/handlers/bootstrap/shared/dimension-sop.d.ts +0 -370
- 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,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,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,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
|
+
}
|