autosnippet 3.3.5 → 3.3.7
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/dashboard/dist/assets/icons-FHns2ypa.js +1 -0
- package/dashboard/dist/assets/index-BRJv5Y3r.js +135 -0
- package/dashboard/dist/assets/index-DzoB7kxK.css +1 -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 +137 -9
- package/dist/lib/agent/AgentFactory.d.ts +0 -17
- package/dist/lib/agent/AgentFactory.js +1 -25
- package/dist/lib/agent/AgentRuntime.d.ts +2 -2
- package/dist/lib/agent/AgentRuntime.js +26 -18
- 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/ChatAgentTasks.js +4 -0
- 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/forced-summary.js +7 -2
- 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 +5 -5
- package/dist/lib/cli/KnowledgeSyncService.js +1 -1
- package/dist/lib/core/AstAnalyzer.d.ts +1 -0
- package/dist/lib/core/discovery/ConfigWatcher.d.ts +64 -0
- package/dist/lib/core/discovery/ConfigWatcher.js +336 -0
- package/dist/lib/core/discovery/CustomConfigDiscoverer.d.ts +30 -0
- package/dist/lib/core/discovery/CustomConfigDiscoverer.js +1305 -0
- package/dist/lib/core/discovery/DiscovererPreference.d.ts +44 -0
- package/dist/lib/core/discovery/DiscovererPreference.js +141 -0
- package/dist/lib/core/discovery/DiscovererRegistry.d.ts +10 -1
- package/dist/lib/core/discovery/DiscovererRegistry.js +42 -2
- package/dist/lib/core/discovery/ProjectDiscoverer.d.ts +19 -0
- package/dist/lib/core/discovery/index.d.ts +2 -0
- package/dist/lib/core/discovery/index.js +4 -0
- package/dist/lib/core/discovery/parsers/CMakeParser.d.ts +32 -0
- package/dist/lib/core/discovery/parsers/CMakeParser.js +148 -0
- package/dist/lib/core/discovery/parsers/GradleDslParser.d.ts +43 -0
- package/dist/lib/core/discovery/parsers/GradleDslParser.js +171 -0
- package/dist/lib/core/discovery/parsers/JsonConfigParser.d.ts +45 -0
- package/dist/lib/core/discovery/parsers/JsonConfigParser.js +122 -0
- package/dist/lib/core/discovery/parsers/RubyDslParser.d.ts +49 -0
- package/dist/lib/core/discovery/parsers/RubyDslParser.js +282 -0
- package/dist/lib/core/discovery/parsers/StarlarkParser.d.ts +33 -0
- package/dist/lib/core/discovery/parsers/StarlarkParser.js +229 -0
- package/dist/lib/core/discovery/parsers/YamlConfigParser.d.ts +37 -0
- package/dist/lib/core/discovery/parsers/YamlConfigParser.js +212 -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 +40 -112
- package/dist/lib/domain/knowledge/KnowledgeEntry.js +44 -9
- 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/external/ai/AiProvider.d.ts +12 -0
- package/dist/lib/external/ai/AiProvider.js +24 -0
- package/dist/lib/external/ai/AiProviderManager.d.ts +101 -0
- package/dist/lib/external/ai/AiProviderManager.js +193 -0
- package/dist/lib/external/ai/providers/ClaudeProvider.js +11 -0
- package/dist/lib/external/ai/providers/GoogleGeminiProvider.js +18 -0
- package/dist/lib/external/ai/providers/MockProvider.d.ts +21 -3
- package/dist/lib/external/ai/providers/MockProvider.js +290 -14
- package/dist/lib/external/ai/providers/OpenAiProvider.js +16 -0
- package/dist/lib/external/lark/LarkTransport.d.ts +5 -1
- package/dist/lib/external/lark/LarkTransport.js +10 -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/mock-pipeline.d.ts +20 -0
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/mock-pipeline.js +432 -0
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.d.ts +99 -12
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +188 -169
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/tier-scheduler.js +7 -17
- package/dist/lib/external/mcp/handlers/bootstrap/refine.js +8 -0
- 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 +23 -10
- package/dist/lib/external/mcp/handlers/bootstrap-external.js +41 -51
- package/dist/lib/external/mcp/handlers/bootstrap-internal.d.ts +2 -0
- package/dist/lib/external/mcp/handlers/bootstrap-internal.js +117 -82
- package/dist/lib/external/mcp/handlers/consolidated.d.ts +4 -4
- package/dist/lib/external/mcp/handlers/consolidated.js +108 -332
- package/dist/lib/external/mcp/handlers/dimension-complete-external.js +71 -2
- package/dist/lib/external/mcp/handlers/evolve-external.d.ts +54 -0
- package/dist/lib/external/mcp/handlers/evolve-external.js +229 -0
- package/dist/lib/external/mcp/handlers/knowledge.js +30 -5
- 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 +58 -2
- package/dist/lib/http/routes/ai.js +111 -30
- package/dist/lib/http/routes/candidates.js +11 -4
- package/dist/lib/http/routes/commands.js +10 -1
- package/dist/lib/http/routes/health.js +11 -0
- package/dist/lib/http/routes/knowledge.js +122 -1
- package/dist/lib/http/routes/modules.js +52 -3
- package/dist/lib/http/routes/panorama.js +16 -4
- package/dist/lib/http/routes/recipes.js +7 -0
- package/dist/lib/http/utils/routeHelpers.js +2 -1
- 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.d.ts +6 -5
- package/dist/lib/injection/ServiceContainer.js +64 -25
- package/dist/lib/injection/ServiceMap.d.ts +10 -1
- package/dist/lib/injection/modules/AiModule.d.ts +6 -9
- package/dist/lib/injection/modules/AiModule.js +82 -39
- package/dist/lib/injection/modules/KnowledgeModule.js +15 -1
- package/dist/lib/injection/modules/PanoramaModule.js +1 -1
- 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 +5 -0
- package/dist/lib/service/bootstrap/UiStartupTasks.js +20 -0
- 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 +132 -0
- package/dist/lib/service/cleanup/CleanupService.js +571 -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/ProposalExecutor.d.ts +4 -0
- package/dist/lib/service/evolution/ProposalExecutor.js +77 -13
- 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/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/knowledge/CodeEntityGraph.d.ts +6 -0
- package/dist/lib/service/knowledge/CodeEntityGraph.js +16 -0
- 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 +67 -14
- package/dist/lib/service/knowledge/RecipeProductionGateway.d.ts +225 -0
- package/dist/lib/service/knowledge/RecipeProductionGateway.js +384 -0
- package/dist/lib/service/module/ModuleService.js +10 -19
- package/dist/lib/service/panorama/CouplingAnalyzer.d.ts +10 -1
- package/dist/lib/service/panorama/CouplingAnalyzer.js +44 -2
- package/dist/lib/service/panorama/DimensionAnalyzer.d.ts +4 -3
- package/dist/lib/service/panorama/DimensionAnalyzer.js +40 -151
- package/dist/lib/service/panorama/LayerInferrer.d.ts +16 -1
- package/dist/lib/service/panorama/LayerInferrer.js +118 -1
- package/dist/lib/service/panorama/ModuleDiscoverer.d.ts +9 -0
- package/dist/lib/service/panorama/ModuleDiscoverer.js +58 -2
- package/dist/lib/service/panorama/PanoramaAggregator.d.ts +6 -2
- package/dist/lib/service/panorama/PanoramaAggregator.js +84 -6
- package/dist/lib/service/panorama/PanoramaScanner.js +28 -0
- package/dist/lib/service/panorama/PanoramaService.js +10 -5
- package/dist/lib/service/panorama/PanoramaTypes.d.ts +38 -0
- package/dist/lib/service/panorama/RoleRefiner.d.ts +2 -0
- package/dist/lib/service/panorama/RoleRefiner.js +41 -0
- package/dist/lib/service/panorama/TechStackProfiler.d.ts +13 -0
- package/dist/lib/service/panorama/TechStackProfiler.js +191 -0
- 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/service/skills/SignalCollector.d.ts +1 -0
- package/dist/lib/service/skills/SignalCollector.js +6 -5
- package/dist/lib/service/vector/ContextualEnricher.d.ts +1 -0
- package/dist/lib/service/vector/ContextualEnricher.js +4 -0
- package/dist/lib/shared/LanguageService.js +3 -0
- package/dist/lib/shared/developer-identity.d.ts +18 -0
- package/dist/lib/shared/developer-identity.js +62 -0
- package/dist/lib/shared/schemas/common.d.ts +4 -4
- package/dist/lib/shared/schemas/http-requests.d.ts +20 -18
- package/dist/lib/shared/schemas/http-requests.js +17 -6
- package/dist/lib/shared/schemas/mcp-tools.d.ts +32 -2
- package/dist/lib/shared/schemas/mcp-tools.js +38 -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 +132 -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
|
@@ -158,8 +158,8 @@ export declare const SubmitKnowledgeItemSchema: z.ZodObject<{
|
|
|
158
158
|
topicHint: z.ZodOptional<z.ZodString>;
|
|
159
159
|
complexity: z.ZodOptional<z.ZodEnum<{
|
|
160
160
|
intermediate: "intermediate";
|
|
161
|
-
beginner: "beginner";
|
|
162
161
|
advanced: "advanced";
|
|
162
|
+
beginner: "beginner";
|
|
163
163
|
}>>;
|
|
164
164
|
scope: z.ZodOptional<z.ZodEnum<{
|
|
165
165
|
universal: "universal";
|
|
@@ -191,8 +191,8 @@ export declare const SkillInput: z.ZodObject<{
|
|
|
191
191
|
delete: "delete";
|
|
192
192
|
create: "create";
|
|
193
193
|
update: "update";
|
|
194
|
-
list: "list";
|
|
195
194
|
load: "load";
|
|
195
|
+
list: "list";
|
|
196
196
|
suggest: "suggest";
|
|
197
197
|
}>;
|
|
198
198
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -211,6 +211,11 @@ export declare const SkillInput: z.ZodObject<{
|
|
|
211
211
|
export type SkillInput = z.infer<typeof SkillInput>;
|
|
212
212
|
export declare const BootstrapInput: z.ZodObject<{}, z.core.$strip>;
|
|
213
213
|
export type BootstrapInput = z.infer<typeof BootstrapInput>;
|
|
214
|
+
export declare const RescanInput: z.ZodObject<{
|
|
215
|
+
dimensions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
216
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
217
|
+
}, z.core.$strip>;
|
|
218
|
+
export type RescanInput = z.infer<typeof RescanInput>;
|
|
214
219
|
export declare const DimensionCompleteInput: z.ZodObject<{
|
|
215
220
|
sessionId: z.ZodOptional<z.ZodString>;
|
|
216
221
|
dimensionId: z.ZodString;
|
|
@@ -290,4 +295,29 @@ export declare const PanoramaInput: z.ZodObject<{
|
|
|
290
295
|
module: z.ZodOptional<z.ZodString>;
|
|
291
296
|
}, z.core.$strip>;
|
|
292
297
|
export type PanoramaInput = z.infer<typeof PanoramaInput>;
|
|
298
|
+
export declare const EvolveInput: z.ZodObject<{
|
|
299
|
+
decisions: z.ZodArray<z.ZodObject<{
|
|
300
|
+
recipeId: z.ZodString;
|
|
301
|
+
action: z.ZodEnum<{
|
|
302
|
+
propose_evolution: "propose_evolution";
|
|
303
|
+
confirm_deprecation: "confirm_deprecation";
|
|
304
|
+
skip: "skip";
|
|
305
|
+
}>;
|
|
306
|
+
evidence: z.ZodOptional<z.ZodObject<{
|
|
307
|
+
codeSnippet: z.ZodString;
|
|
308
|
+
filePath: z.ZodString;
|
|
309
|
+
type: z.ZodEnum<{
|
|
310
|
+
enhance: "enhance";
|
|
311
|
+
correction: "correction";
|
|
312
|
+
}>;
|
|
313
|
+
suggestedChanges: z.ZodString;
|
|
314
|
+
}, z.core.$strip>>;
|
|
315
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
316
|
+
skipReason: z.ZodOptional<z.ZodEnum<{
|
|
317
|
+
still_valid: "still_valid";
|
|
318
|
+
insufficient_info: "insufficient_info";
|
|
319
|
+
}>>;
|
|
320
|
+
}, z.core.$strip>>;
|
|
321
|
+
}, z.core.$strip>;
|
|
322
|
+
export type EvolveInput = z.infer<typeof EvolveInput>;
|
|
293
323
|
export declare const TOOL_SCHEMAS: Record<string, z.ZodType>;
|
|
@@ -198,6 +198,13 @@ export const SkillInput = z.object({
|
|
|
198
198
|
// ══════════════════════════════════════════════════════
|
|
199
199
|
export const BootstrapInput = z.object({});
|
|
200
200
|
// ══════════════════════════════════════════════════════
|
|
201
|
+
// 11a. autosnippet_rescan — 增量知识更新
|
|
202
|
+
// ══════════════════════════════════════════════════════
|
|
203
|
+
export const RescanInput = z.object({
|
|
204
|
+
dimensions: z.array(z.string()).optional().describe('指定维度列表,空 = 全部活跃维度'),
|
|
205
|
+
reason: z.string().optional().describe('触发原因(记录到报告)'),
|
|
206
|
+
});
|
|
207
|
+
// ══════════════════════════════════════════════════════
|
|
201
208
|
// 11b. autosnippet_dimension_complete
|
|
202
209
|
// ══════════════════════════════════════════════════════
|
|
203
210
|
export const DimensionCompleteInput = z.object({
|
|
@@ -298,6 +305,35 @@ export const PanoramaInput = z.object({
|
|
|
298
305
|
.describe('overview=项目骨架+层级+模块角色 | module=单模块详情+邻居关系 | gaps=知识空白区 | health=全景健康度 | governance_cycle=新陈代谢完整周期 | decay_report=衰退报告 | staging_check=staging检查+自动发布 | enhancement_suggestions=增强建议'),
|
|
299
306
|
module: z.string().optional().describe('模块名称(operation=module 时必填)'),
|
|
300
307
|
});
|
|
308
|
+
// 19. autosnippet_evolve
|
|
309
|
+
const EvolveDecisionSchema = z.object({
|
|
310
|
+
recipeId: z.string().describe('目标 Recipe ID'),
|
|
311
|
+
action: z
|
|
312
|
+
.enum(['propose_evolution', 'confirm_deprecation', 'skip'])
|
|
313
|
+
.describe('propose_evolution=提案进化 | confirm_deprecation=确认废弃 | skip=跳过'),
|
|
314
|
+
evidence: z
|
|
315
|
+
.object({
|
|
316
|
+
codeSnippet: z.string().describe('读到的真实代码片段'),
|
|
317
|
+
filePath: z.string().describe('代码所在文件路径'),
|
|
318
|
+
type: z
|
|
319
|
+
.enum(['enhance', 'correction'])
|
|
320
|
+
.describe('enhance=模式迁移/功能扩展 | correction=描述错误/接口变更'),
|
|
321
|
+
suggestedChanges: z.string().describe('建议的内容变更'),
|
|
322
|
+
})
|
|
323
|
+
.optional()
|
|
324
|
+
.describe('propose_evolution 时必填'),
|
|
325
|
+
reason: z.string().optional().describe('confirm_deprecation 时必填,废弃原因'),
|
|
326
|
+
skipReason: z
|
|
327
|
+
.enum(['still_valid', 'insufficient_info'])
|
|
328
|
+
.optional()
|
|
329
|
+
.describe('skip 时必填: still_valid=仍然有效(刷新验证时间) | insufficient_info=信息不足'),
|
|
330
|
+
});
|
|
331
|
+
export const EvolveInput = z.object({
|
|
332
|
+
decisions: z
|
|
333
|
+
.array(EvolveDecisionSchema)
|
|
334
|
+
.min(1)
|
|
335
|
+
.describe('进化决策数组,每个元素对应一个 Recipe 的决策'),
|
|
336
|
+
});
|
|
301
337
|
// ══════════════════════════════════════════════════════
|
|
302
338
|
// 工具名 → Schema 映射表(用于 wrapHandler 自动注入校验)
|
|
303
339
|
// ══════════════════════════════════════════════════════
|
|
@@ -312,10 +348,12 @@ export const TOOL_SCHEMAS = {
|
|
|
312
348
|
autosnippet_submit_knowledge: SubmitKnowledgeInput,
|
|
313
349
|
autosnippet_skill: SkillInput,
|
|
314
350
|
autosnippet_bootstrap: BootstrapInput,
|
|
351
|
+
autosnippet_rescan: RescanInput,
|
|
315
352
|
autosnippet_dimension_complete: DimensionCompleteInput,
|
|
316
353
|
autosnippet_wiki: WikiInput,
|
|
317
354
|
autosnippet_task: TaskInput,
|
|
318
355
|
autosnippet_enrich_candidates: EnrichCandidatesInput,
|
|
319
356
|
autosnippet_knowledge_lifecycle: KnowledgeLifecycleInput,
|
|
320
357
|
autosnippet_panorama: PanoramaInput,
|
|
358
|
+
autosnippet_evolve: EvolveInput,
|
|
321
359
|
};
|
|
@@ -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,132 @@
|
|
|
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
|
+
by?: string;
|
|
91
|
+
}>;
|
|
92
|
+
autoApprovable: boolean;
|
|
93
|
+
language: string;
|
|
94
|
+
category: string;
|
|
95
|
+
kind: string;
|
|
96
|
+
knowledgeType: string;
|
|
97
|
+
complexity: string;
|
|
98
|
+
scope: string;
|
|
99
|
+
difficulty: string | null;
|
|
100
|
+
tags: string[];
|
|
101
|
+
trigger: string;
|
|
102
|
+
topicHint: string;
|
|
103
|
+
whenClause: string;
|
|
104
|
+
doClause: string;
|
|
105
|
+
dontClause: string;
|
|
106
|
+
coreCode: string;
|
|
107
|
+
usageGuide: string;
|
|
108
|
+
content: KnowledgeContentWire;
|
|
109
|
+
relations: KnowledgeRelationsWire;
|
|
110
|
+
constraints: KnowledgeConstraintsWire;
|
|
111
|
+
reasoning: KnowledgeReasoningWire;
|
|
112
|
+
quality: KnowledgeQualityWire;
|
|
113
|
+
stats: KnowledgeStatsWire;
|
|
114
|
+
headers: string[];
|
|
115
|
+
headerPaths: string[];
|
|
116
|
+
moduleName: string;
|
|
117
|
+
includeHeaders: boolean;
|
|
118
|
+
agentNotes: string | null;
|
|
119
|
+
aiInsight: string | null;
|
|
120
|
+
reviewedBy: string | null;
|
|
121
|
+
reviewedAt: number | null;
|
|
122
|
+
rejectionReason: string | null;
|
|
123
|
+
source: string;
|
|
124
|
+
sourceFile: string | null;
|
|
125
|
+
sourceCandidateId: string | null;
|
|
126
|
+
createdBy: string;
|
|
127
|
+
createdAt: number;
|
|
128
|
+
updatedAt: number;
|
|
129
|
+
publishedAt: number | null;
|
|
130
|
+
publishedBy: string | null;
|
|
131
|
+
[key: string]: unknown;
|
|
132
|
+
}
|
|
@@ -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
|
+
}
|