dino-spec 17.4.3 → 17.6.0
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 +16 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +10 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
- package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
- package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
- package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
- package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
- package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
- package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
- package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
- package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
- package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
- package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
- package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
- package/dist/core/agents/__tests__/research-validator.test.js +5 -5
- package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
- package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
- package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
- package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
- package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
- package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
- package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
- package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
- package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
- package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
- package/dist/core/agents/ambiguity-resolver.d.ts +14 -1
- package/dist/core/agents/ambiguity-resolver.d.ts.map +1 -1
- package/dist/core/agents/ambiguity-resolver.js +24 -2
- package/dist/core/agents/ambiguity-resolver.js.map +1 -1
- package/dist/core/agents/blackboard.d.ts +22 -3
- package/dist/core/agents/blackboard.d.ts.map +1 -1
- package/dist/core/agents/blackboard.js +52 -2
- package/dist/core/agents/blackboard.js.map +1 -1
- package/dist/core/agents/circuit-breaker.d.ts +79 -1
- package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
- package/dist/core/agents/circuit-breaker.js +175 -1
- package/dist/core/agents/circuit-breaker.js.map +1 -1
- package/dist/core/agents/clarification-phase.d.ts +128 -0
- package/dist/core/agents/clarification-phase.d.ts.map +1 -0
- package/dist/core/agents/clarification-phase.js +375 -0
- package/dist/core/agents/clarification-phase.js.map +1 -0
- package/dist/core/agents/confidence-gate.d.ts +133 -4
- package/dist/core/agents/confidence-gate.d.ts.map +1 -1
- package/dist/core/agents/confidence-gate.js +376 -9
- package/dist/core/agents/confidence-gate.js.map +1 -1
- package/dist/core/agents/correction-tracker.d.ts +197 -0
- package/dist/core/agents/correction-tracker.d.ts.map +1 -0
- package/dist/core/agents/correction-tracker.js +366 -0
- package/dist/core/agents/correction-tracker.js.map +1 -0
- package/dist/core/agents/dependency-graph.d.ts +193 -0
- package/dist/core/agents/dependency-graph.d.ts.map +1 -0
- package/dist/core/agents/dependency-graph.js +462 -0
- package/dist/core/agents/dependency-graph.js.map +1 -0
- package/dist/core/agents/gap-detector.d.ts +277 -0
- package/dist/core/agents/gap-detector.d.ts.map +1 -0
- package/dist/core/agents/gap-detector.js +540 -0
- package/dist/core/agents/gap-detector.js.map +1 -0
- package/dist/core/agents/index.d.ts +14 -1
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +26 -1
- package/dist/core/agents/index.js.map +1 -1
- package/dist/core/agents/message-protocol.d.ts +13 -2
- package/dist/core/agents/message-protocol.d.ts.map +1 -1
- package/dist/core/agents/message-protocol.js +20 -1
- package/dist/core/agents/message-protocol.js.map +1 -1
- package/dist/core/agents/parallel-executor.d.ts +182 -0
- package/dist/core/agents/parallel-executor.d.ts.map +1 -0
- package/dist/core/agents/parallel-executor.js +474 -0
- package/dist/core/agents/parallel-executor.js.map +1 -0
- package/dist/core/agents/pattern-detector.d.ts +157 -0
- package/dist/core/agents/pattern-detector.d.ts.map +1 -0
- package/dist/core/agents/pattern-detector.js +370 -0
- package/dist/core/agents/pattern-detector.js.map +1 -0
- package/dist/core/agents/registry-client.d.ts +6 -0
- package/dist/core/agents/registry-client.d.ts.map +1 -1
- package/dist/core/agents/registry-client.js +3 -0
- package/dist/core/agents/registry-client.js.map +1 -1
- package/dist/core/agents/research-phase.d.ts +114 -0
- package/dist/core/agents/research-phase.d.ts.map +1 -0
- package/dist/core/agents/research-phase.js +355 -0
- package/dist/core/agents/research-phase.js.map +1 -0
- package/dist/core/agents/research-validator.d.ts +13 -2
- package/dist/core/agents/research-validator.d.ts.map +1 -1
- package/dist/core/agents/research-validator.js +63 -31
- package/dist/core/agents/research-validator.js.map +1 -1
- package/dist/core/agents/skill-creator.d.ts +174 -0
- package/dist/core/agents/skill-creator.d.ts.map +1 -0
- package/dist/core/agents/skill-creator.js +570 -0
- package/dist/core/agents/skill-creator.js.map +1 -0
- package/dist/core/agents/state-persistence.d.ts +184 -0
- package/dist/core/agents/state-persistence.d.ts.map +1 -0
- package/dist/core/agents/state-persistence.js +394 -0
- package/dist/core/agents/state-persistence.js.map +1 -0
- package/dist/core/agents/validation-cache.d.ts +122 -0
- package/dist/core/agents/validation-cache.d.ts.map +1 -0
- package/dist/core/agents/validation-cache.js +280 -0
- package/dist/core/agents/validation-cache.js.map +1 -0
- package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
- package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
- package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
- package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
- package/dist/core/agents/validators/base-validator.d.ts +191 -0
- package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/base-validator.js +192 -0
- package/dist/core/agents/validators/base-validator.js.map +1 -0
- package/dist/core/agents/validators/index.d.ts +7 -0
- package/dist/core/agents/validators/index.d.ts.map +1 -0
- package/dist/core/agents/validators/index.js +7 -0
- package/dist/core/agents/validators/index.js.map +1 -0
- package/dist/core/agents/validators/npm-validator.d.ts +50 -0
- package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/npm-validator.js +211 -0
- package/dist/core/agents/validators/npm-validator.js.map +1 -0
- package/dist/core/agents/validators/pip-validator.d.ts +49 -0
- package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/pip-validator.js +191 -0
- package/dist/core/agents/validators/pip-validator.js.map +1 -0
- package/dist/core/agents/validators/validator-registry.d.ts +122 -0
- package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
- package/dist/core/agents/validators/validator-registry.js +321 -0
- package/dist/core/agents/validators/validator-registry.js.map +1 -0
- package/dist/core/context/auto-injection-engine.d.ts +7 -1
- package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
- package/dist/core/context/auto-injection-engine.js +46 -1
- package/dist/core/context/auto-injection-engine.js.map +1 -1
- package/dist/core/context-repl/types.d.ts +4 -4
- package/dist/core/memory/index.d.ts +1 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +2 -0
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/memory/learning-store.d.ts +222 -0
- package/dist/core/memory/learning-store.d.ts.map +1 -0
- package/dist/core/memory/learning-store.js +477 -0
- package/dist/core/memory/learning-store.js.map +1 -0
- package/dist/core/ralph/__tests__/prd-generator-session-context.test.d.ts +7 -0
- package/dist/core/ralph/__tests__/prd-generator-session-context.test.d.ts.map +1 -0
- package/dist/core/ralph/__tests__/prd-generator-session-context.test.js +143 -0
- package/dist/core/ralph/__tests__/prd-generator-session-context.test.js.map +1 -0
- package/dist/core/ralph/index.d.ts +3 -3
- package/dist/core/ralph/index.d.ts.map +1 -1
- package/dist/core/ralph/index.js +2 -2
- package/dist/core/ralph/index.js.map +1 -1
- package/dist/core/ralph/prd-generator.d.ts +18 -3
- package/dist/core/ralph/prd-generator.d.ts.map +1 -1
- package/dist/core/ralph/prd-generator.js +33 -11
- package/dist/core/ralph/prd-generator.js.map +1 -1
- package/dist/core/ralph/progress-tracker.d.ts.map +1 -1
- package/dist/core/ralph/progress-tracker.js +2 -1
- package/dist/core/ralph/progress-tracker.js.map +1 -1
- package/dist/core/ralph/sub-agent-spawner.d.ts +4 -2
- package/dist/core/ralph/sub-agent-spawner.d.ts.map +1 -1
- package/dist/core/ralph/sub-agent-spawner.js +48 -3
- package/dist/core/ralph/sub-agent-spawner.js.map +1 -1
- package/dist/core/ralph/task-integration.d.ts.map +1 -1
- package/dist/core/ralph/task-integration.js +6 -3
- package/dist/core/ralph/task-integration.js.map +1 -1
- package/dist/core/ralph/types.d.ts +62 -3
- package/dist/core/ralph/types.d.ts.map +1 -1
- package/dist/core/ralph/types.js.map +1 -1
- package/dist/core/recommendations/recommendation-engine.d.ts +6 -0
- package/dist/core/recommendations/recommendation-engine.d.ts.map +1 -1
- package/dist/core/recommendations/recommendation-engine.js.map +1 -1
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
- package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
- package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
- package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
- package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
- package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
- package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
- package/dist/core/spec-analyzer/clarification-generator.js +257 -0
- package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
- package/dist/core/spec-analyzer/index.d.ts +22 -2
- package/dist/core/spec-analyzer/index.d.ts.map +1 -1
- package/dist/core/spec-analyzer/index.js +21 -3
- package/dist/core/spec-analyzer/index.js.map +1 -1
- package/dist/core/spec-analyzer/patterns.d.ts +73 -0
- package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
- package/dist/core/spec-analyzer/patterns.js +412 -0
- package/dist/core/spec-analyzer/patterns.js.map +1 -0
- package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
- package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
- package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
- package/dist/hooks/dynamic-generator.d.ts +158 -0
- package/dist/hooks/dynamic-generator.d.ts.map +1 -0
- package/dist/hooks/dynamic-generator.js +448 -0
- package/dist/hooks/dynamic-generator.js.map +1 -0
- package/dist/hooks/hook-agent-bridge.d.ts +252 -0
- package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
- package/dist/hooks/hook-agent-bridge.js +489 -0
- package/dist/hooks/hook-agent-bridge.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +5 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/mcp/tool-catalog.d.ts.map +1 -1
- package/dist/mcp/tool-catalog.js +47 -0
- package/dist/mcp/tool-catalog.js.map +1 -1
- package/dist/mcp/tool-tiers.d.ts.map +1 -1
- package/dist/mcp/tool-tiers.js +4 -0
- package/dist/mcp/tool-tiers.js.map +1 -1
- package/dist/mcp/tools/auto-inject.d.ts +4 -0
- package/dist/mcp/tools/auto-inject.d.ts.map +1 -1
- package/dist/mcp/tools/auto-inject.js +13 -4
- package/dist/mcp/tools/auto-inject.js.map +1 -1
- package/dist/mcp/tools/chunking.d.ts +3 -0
- package/dist/mcp/tools/chunking.d.ts.map +1 -1
- package/dist/mcp/tools/chunking.js +10 -4
- package/dist/mcp/tools/chunking.js.map +1 -1
- package/dist/mcp/tools/embeddings.d.ts +4 -0
- package/dist/mcp/tools/embeddings.d.ts.map +1 -1
- package/dist/mcp/tools/embeddings.js +16 -6
- package/dist/mcp/tools/embeddings.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +2 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +15 -1
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/knowledge-graph.d.ts +3 -0
- package/dist/mcp/tools/knowledge-graph.d.ts.map +1 -1
- package/dist/mcp/tools/knowledge-graph.js +19 -8
- package/dist/mcp/tools/knowledge-graph.js.map +1 -1
- package/dist/mcp/tools/lazy-context.d.ts +2 -0
- package/dist/mcp/tools/lazy-context.d.ts.map +1 -1
- package/dist/mcp/tools/lazy-context.js +10 -4
- package/dist/mcp/tools/lazy-context.js.map +1 -1
- package/dist/mcp/tools/learning-store.d.ts +30 -0
- package/dist/mcp/tools/learning-store.d.ts.map +1 -0
- package/dist/mcp/tools/learning-store.js +286 -0
- package/dist/mcp/tools/learning-store.js.map +1 -0
- package/dist/mcp/tools/memory-decay.d.ts.map +1 -1
- package/dist/mcp/tools/memory-decay.js +4 -2
- package/dist/mcp/tools/memory-decay.js.map +1 -1
- package/dist/mcp/tools/prefetch.d.ts +4 -1
- package/dist/mcp/tools/prefetch.d.ts.map +1 -1
- package/dist/mcp/tools/prefetch.js +18 -7
- package/dist/mcp/tools/prefetch.js.map +1 -1
- package/dist/mcp/tools/ralph.d.ts +2 -0
- package/dist/mcp/tools/ralph.d.ts.map +1 -1
- package/dist/mcp/tools/ralph.js +96 -6
- package/dist/mcp/tools/ralph.js.map +1 -1
- package/dist/mcp/tools/recommendations.d.ts +2 -0
- package/dist/mcp/tools/recommendations.d.ts.map +1 -1
- package/dist/mcp/tools/recommendations.js +13 -4
- package/dist/mcp/tools/recommendations.js.map +1 -1
- package/dist/mcp/tools/retrieval.d.ts +4 -0
- package/dist/mcp/tools/retrieval.d.ts.map +1 -1
- package/dist/mcp/tools/retrieval.js +25 -10
- package/dist/mcp/tools/retrieval.js.map +1 -1
- package/dist/mcp/tools/spec-feedback.d.ts +2 -0
- package/dist/mcp/tools/spec-feedback.d.ts.map +1 -1
- package/dist/mcp/tools/spec-feedback.js +33 -16
- package/dist/mcp/tools/spec-feedback.js.map +1 -1
- package/dist/mcp/utils/index.d.ts +1 -0
- package/dist/mcp/utils/index.d.ts.map +1 -1
- package/dist/mcp/utils/index.js +2 -0
- package/dist/mcp/utils/index.js.map +1 -1
- package/dist/mcp/utils/session-context.d.ts +108 -0
- package/dist/mcp/utils/session-context.d.ts.map +1 -0
- package/dist/mcp/utils/session-context.js +157 -0
- package/dist/mcp/utils/session-context.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Graph - v17.5.0
|
|
3
|
+
*
|
|
4
|
+
* Tracks dependencies between tasks and agents for gap detection.
|
|
5
|
+
* Enables identification of:
|
|
6
|
+
* - Prerequisites that must complete before a task starts
|
|
7
|
+
* - Orphaned dependencies (missing or failed prerequisites)
|
|
8
|
+
* - Circular dependencies
|
|
9
|
+
* - Dependency chains and critical paths
|
|
10
|
+
*
|
|
11
|
+
* @module dependency-graph
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* A node in the dependency graph
|
|
15
|
+
*/
|
|
16
|
+
export interface DependencyNode {
|
|
17
|
+
/** Unique identifier for the node */
|
|
18
|
+
id: string;
|
|
19
|
+
/** Display name */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Node type */
|
|
22
|
+
type: 'task' | 'agent' | 'resource' | 'output';
|
|
23
|
+
/** Current status */
|
|
24
|
+
status: 'pending' | 'in_progress' | 'completed' | 'failed' | 'blocked';
|
|
25
|
+
/** IDs of nodes this node depends on */
|
|
26
|
+
dependencies: string[];
|
|
27
|
+
/** IDs of nodes that depend on this node */
|
|
28
|
+
dependents: string[];
|
|
29
|
+
/** Metadata about the node */
|
|
30
|
+
metadata: Record<string, unknown>;
|
|
31
|
+
/** Timestamp when status last changed */
|
|
32
|
+
lastUpdated: Date;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* An edge in the dependency graph
|
|
36
|
+
*/
|
|
37
|
+
export interface DependencyEdge {
|
|
38
|
+
/** Source node ID (the dependency) */
|
|
39
|
+
from: string;
|
|
40
|
+
/** Target node ID (the dependent) */
|
|
41
|
+
to: string;
|
|
42
|
+
/** Type of dependency */
|
|
43
|
+
type: 'requires' | 'produces' | 'blocks' | 'optional';
|
|
44
|
+
/** Whether this edge represents a satisfied dependency */
|
|
45
|
+
satisfied: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Result of dependency analysis
|
|
49
|
+
*/
|
|
50
|
+
export interface DependencyAnalysis {
|
|
51
|
+
/** All nodes in the graph */
|
|
52
|
+
nodes: DependencyNode[];
|
|
53
|
+
/** All edges in the graph */
|
|
54
|
+
edges: DependencyEdge[];
|
|
55
|
+
/** Nodes with missing dependencies */
|
|
56
|
+
orphanedNodes: string[];
|
|
57
|
+
/** Detected circular dependency chains */
|
|
58
|
+
circularDependencies: string[][];
|
|
59
|
+
/** Nodes that are blocking progress */
|
|
60
|
+
blockingNodes: string[];
|
|
61
|
+
/** Nodes ready to execute (all deps satisfied) */
|
|
62
|
+
readyNodes: string[];
|
|
63
|
+
/** Critical path (longest dependency chain) */
|
|
64
|
+
criticalPath: string[];
|
|
65
|
+
/** Overall completion percentage */
|
|
66
|
+
completionPercent: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Gap between expected and actual outputs
|
|
70
|
+
*/
|
|
71
|
+
export interface DependencyGap {
|
|
72
|
+
/** Node with the gap */
|
|
73
|
+
nodeId: string;
|
|
74
|
+
/** Type of gap */
|
|
75
|
+
type: 'missing_dependency' | 'failed_dependency' | 'orphaned' | 'circular' | 'stalled';
|
|
76
|
+
/** Description of the gap */
|
|
77
|
+
description: string;
|
|
78
|
+
/** Suggested resolution */
|
|
79
|
+
resolution: string;
|
|
80
|
+
/** Severity */
|
|
81
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Dependency graph for tracking task relationships
|
|
85
|
+
*/
|
|
86
|
+
export declare class DependencyGraph {
|
|
87
|
+
private nodes;
|
|
88
|
+
private edges;
|
|
89
|
+
/**
|
|
90
|
+
* Add a node to the graph
|
|
91
|
+
*/
|
|
92
|
+
addNode(node: Omit<DependencyNode, 'dependents' | 'lastUpdated'>): void;
|
|
93
|
+
/**
|
|
94
|
+
* Add an edge to the graph
|
|
95
|
+
*/
|
|
96
|
+
addEdge(from: string, to: string, type?: DependencyEdge['type']): void;
|
|
97
|
+
/**
|
|
98
|
+
* Update node status
|
|
99
|
+
*/
|
|
100
|
+
updateStatus(nodeId: string, status: DependencyNode['status']): void;
|
|
101
|
+
/**
|
|
102
|
+
* Get a node by ID
|
|
103
|
+
*/
|
|
104
|
+
getNode(nodeId: string): DependencyNode | undefined;
|
|
105
|
+
/**
|
|
106
|
+
* Get all nodes
|
|
107
|
+
*/
|
|
108
|
+
getAllNodes(): DependencyNode[];
|
|
109
|
+
/**
|
|
110
|
+
* Get all edges
|
|
111
|
+
*/
|
|
112
|
+
getAllEdges(): DependencyEdge[];
|
|
113
|
+
/**
|
|
114
|
+
* Get dependencies of a node
|
|
115
|
+
*/
|
|
116
|
+
getDependencies(nodeId: string): DependencyNode[];
|
|
117
|
+
/**
|
|
118
|
+
* Get dependents of a node
|
|
119
|
+
*/
|
|
120
|
+
getDependents(nodeId: string): DependencyNode[];
|
|
121
|
+
/**
|
|
122
|
+
* Check if all dependencies of a node are satisfied
|
|
123
|
+
*/
|
|
124
|
+
areDependenciesSatisfied(nodeId: string): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Get nodes ready for execution
|
|
127
|
+
*/
|
|
128
|
+
getReadyNodes(): DependencyNode[];
|
|
129
|
+
/**
|
|
130
|
+
* Get nodes that are blocked
|
|
131
|
+
*/
|
|
132
|
+
getBlockedNodes(): DependencyNode[];
|
|
133
|
+
/**
|
|
134
|
+
* Detect circular dependencies using DFS
|
|
135
|
+
*/
|
|
136
|
+
detectCircularDependencies(): string[][];
|
|
137
|
+
/**
|
|
138
|
+
* Find orphaned nodes (nodes with missing dependencies)
|
|
139
|
+
*/
|
|
140
|
+
findOrphanedNodes(): string[];
|
|
141
|
+
/**
|
|
142
|
+
* Find the critical path (longest dependency chain)
|
|
143
|
+
*/
|
|
144
|
+
findCriticalPath(): string[];
|
|
145
|
+
/**
|
|
146
|
+
* Calculate completion percentage
|
|
147
|
+
*/
|
|
148
|
+
calculateCompletionPercent(): number;
|
|
149
|
+
/**
|
|
150
|
+
* Analyze the dependency graph
|
|
151
|
+
*/
|
|
152
|
+
analyze(): DependencyAnalysis;
|
|
153
|
+
/**
|
|
154
|
+
* Identify gaps in the dependency graph
|
|
155
|
+
*/
|
|
156
|
+
identifyGaps(): DependencyGap[];
|
|
157
|
+
/**
|
|
158
|
+
* Clear the graph
|
|
159
|
+
*/
|
|
160
|
+
clear(): void;
|
|
161
|
+
/**
|
|
162
|
+
* Serialize to JSON
|
|
163
|
+
*/
|
|
164
|
+
toJSON(): {
|
|
165
|
+
nodes: DependencyNode[];
|
|
166
|
+
edges: DependencyEdge[];
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Load from JSON
|
|
170
|
+
*/
|
|
171
|
+
static fromJSON(data: {
|
|
172
|
+
nodes: DependencyNode[];
|
|
173
|
+
edges: DependencyEdge[];
|
|
174
|
+
}): DependencyGraph;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Create a dependency graph from tasks
|
|
178
|
+
*/
|
|
179
|
+
export declare function createGraphFromTasks(tasks: Array<{
|
|
180
|
+
id: string;
|
|
181
|
+
title: string;
|
|
182
|
+
status: string;
|
|
183
|
+
dependencies: string[];
|
|
184
|
+
}>): DependencyGraph;
|
|
185
|
+
/**
|
|
186
|
+
* Format dependency analysis for display
|
|
187
|
+
*/
|
|
188
|
+
export declare function formatDependencyAnalysis(analysis: DependencyAnalysis): string;
|
|
189
|
+
/**
|
|
190
|
+
* Format gaps for display
|
|
191
|
+
*/
|
|
192
|
+
export declare function formatDependencyGaps(gaps: DependencyGap[]): string;
|
|
193
|
+
//# sourceMappingURL=dependency-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-graph.d.ts","sourceRoot":"","sources":["../../../src/core/agents/dependency-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Graph - v17.5.0
|
|
3
|
+
*
|
|
4
|
+
* Tracks dependencies between tasks and agents for gap detection.
|
|
5
|
+
* Enables identification of:
|
|
6
|
+
* - Prerequisites that must complete before a task starts
|
|
7
|
+
* - Orphaned dependencies (missing or failed prerequisites)
|
|
8
|
+
* - Circular dependencies
|
|
9
|
+
* - Dependency chains and critical paths
|
|
10
|
+
*
|
|
11
|
+
* @module dependency-graph
|
|
12
|
+
*/
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Dependency Graph Class
|
|
15
|
+
// =============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Dependency graph for tracking task relationships
|
|
18
|
+
*/
|
|
19
|
+
export class DependencyGraph {
|
|
20
|
+
nodes = new Map();
|
|
21
|
+
edges = [];
|
|
22
|
+
/**
|
|
23
|
+
* Add a node to the graph
|
|
24
|
+
*/
|
|
25
|
+
addNode(node) {
|
|
26
|
+
const existingNode = this.nodes.get(node.id);
|
|
27
|
+
const dependents = existingNode?.dependents || [];
|
|
28
|
+
this.nodes.set(node.id, {
|
|
29
|
+
...node,
|
|
30
|
+
dependents,
|
|
31
|
+
lastUpdated: new Date(),
|
|
32
|
+
});
|
|
33
|
+
// Create edges for dependencies
|
|
34
|
+
for (const depId of node.dependencies) {
|
|
35
|
+
this.addEdge(depId, node.id, 'requires');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Add an edge to the graph
|
|
40
|
+
*/
|
|
41
|
+
addEdge(from, to, type = 'requires') {
|
|
42
|
+
// Avoid duplicate edges
|
|
43
|
+
const exists = this.edges.some((e) => e.from === from && e.to === to);
|
|
44
|
+
if (exists)
|
|
45
|
+
return;
|
|
46
|
+
this.edges.push({
|
|
47
|
+
from,
|
|
48
|
+
to,
|
|
49
|
+
type,
|
|
50
|
+
satisfied: false,
|
|
51
|
+
});
|
|
52
|
+
// Update dependents list on source node
|
|
53
|
+
const sourceNode = this.nodes.get(from);
|
|
54
|
+
if (sourceNode && !sourceNode.dependents.includes(to)) {
|
|
55
|
+
sourceNode.dependents.push(to);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Update node status
|
|
60
|
+
*/
|
|
61
|
+
updateStatus(nodeId, status) {
|
|
62
|
+
const node = this.nodes.get(nodeId);
|
|
63
|
+
if (node) {
|
|
64
|
+
node.status = status;
|
|
65
|
+
node.lastUpdated = new Date();
|
|
66
|
+
// Update edge satisfaction
|
|
67
|
+
if (status === 'completed') {
|
|
68
|
+
for (const edge of this.edges) {
|
|
69
|
+
if (edge.from === nodeId) {
|
|
70
|
+
edge.satisfied = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get a node by ID
|
|
78
|
+
*/
|
|
79
|
+
getNode(nodeId) {
|
|
80
|
+
return this.nodes.get(nodeId);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get all nodes
|
|
84
|
+
*/
|
|
85
|
+
getAllNodes() {
|
|
86
|
+
return Array.from(this.nodes.values());
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get all edges
|
|
90
|
+
*/
|
|
91
|
+
getAllEdges() {
|
|
92
|
+
return [...this.edges];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get dependencies of a node
|
|
96
|
+
*/
|
|
97
|
+
getDependencies(nodeId) {
|
|
98
|
+
const node = this.nodes.get(nodeId);
|
|
99
|
+
if (!node)
|
|
100
|
+
return [];
|
|
101
|
+
return node.dependencies
|
|
102
|
+
.map((id) => this.nodes.get(id))
|
|
103
|
+
.filter((n) => n !== undefined);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get dependents of a node
|
|
107
|
+
*/
|
|
108
|
+
getDependents(nodeId) {
|
|
109
|
+
const node = this.nodes.get(nodeId);
|
|
110
|
+
if (!node)
|
|
111
|
+
return [];
|
|
112
|
+
return node.dependents
|
|
113
|
+
.map((id) => this.nodes.get(id))
|
|
114
|
+
.filter((n) => n !== undefined);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Check if all dependencies of a node are satisfied
|
|
118
|
+
*/
|
|
119
|
+
areDependenciesSatisfied(nodeId) {
|
|
120
|
+
const node = this.nodes.get(nodeId);
|
|
121
|
+
if (!node)
|
|
122
|
+
return false;
|
|
123
|
+
for (const depId of node.dependencies) {
|
|
124
|
+
const dep = this.nodes.get(depId);
|
|
125
|
+
if (!dep || dep.status !== 'completed') {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get nodes ready for execution
|
|
133
|
+
*/
|
|
134
|
+
getReadyNodes() {
|
|
135
|
+
return this.getAllNodes().filter((node) => node.status === 'pending' && this.areDependenciesSatisfied(node.id));
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get nodes that are blocked
|
|
139
|
+
*/
|
|
140
|
+
getBlockedNodes() {
|
|
141
|
+
return this.getAllNodes().filter((node) => node.status === 'pending' && !this.areDependenciesSatisfied(node.id));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Detect circular dependencies using DFS
|
|
145
|
+
*/
|
|
146
|
+
detectCircularDependencies() {
|
|
147
|
+
const cycles = [];
|
|
148
|
+
const visited = new Set();
|
|
149
|
+
const recursionStack = new Set();
|
|
150
|
+
const dfs = (nodeId, path) => {
|
|
151
|
+
visited.add(nodeId);
|
|
152
|
+
recursionStack.add(nodeId);
|
|
153
|
+
const node = this.nodes.get(nodeId);
|
|
154
|
+
if (!node)
|
|
155
|
+
return;
|
|
156
|
+
for (const depId of node.dependencies) {
|
|
157
|
+
if (!visited.has(depId)) {
|
|
158
|
+
dfs(depId, [...path, nodeId]);
|
|
159
|
+
}
|
|
160
|
+
else if (recursionStack.has(depId)) {
|
|
161
|
+
// Found a cycle
|
|
162
|
+
const cycleStart = path.indexOf(depId);
|
|
163
|
+
if (cycleStart !== -1) {
|
|
164
|
+
cycles.push([...path.slice(cycleStart), nodeId, depId]);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
cycles.push([...path, nodeId, depId]);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
recursionStack.delete(nodeId);
|
|
172
|
+
};
|
|
173
|
+
for (const node of this.nodes.values()) {
|
|
174
|
+
if (!visited.has(node.id)) {
|
|
175
|
+
dfs(node.id, []);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return cycles;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Find orphaned nodes (nodes with missing dependencies)
|
|
182
|
+
*/
|
|
183
|
+
findOrphanedNodes() {
|
|
184
|
+
const orphaned = [];
|
|
185
|
+
for (const node of this.nodes.values()) {
|
|
186
|
+
for (const depId of node.dependencies) {
|
|
187
|
+
if (!this.nodes.has(depId)) {
|
|
188
|
+
orphaned.push(node.id);
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return orphaned;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Find the critical path (longest dependency chain)
|
|
197
|
+
*/
|
|
198
|
+
findCriticalPath() {
|
|
199
|
+
const memo = new Map();
|
|
200
|
+
const findLongestPath = (nodeId) => {
|
|
201
|
+
if (memo.has(nodeId)) {
|
|
202
|
+
return memo.get(nodeId);
|
|
203
|
+
}
|
|
204
|
+
const node = this.nodes.get(nodeId);
|
|
205
|
+
if (!node || node.dependencies.length === 0) {
|
|
206
|
+
const path = [nodeId];
|
|
207
|
+
memo.set(nodeId, path);
|
|
208
|
+
return path;
|
|
209
|
+
}
|
|
210
|
+
let longestDep = [];
|
|
211
|
+
for (const depId of node.dependencies) {
|
|
212
|
+
const depPath = findLongestPath(depId);
|
|
213
|
+
if (depPath.length > longestDep.length) {
|
|
214
|
+
longestDep = depPath;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const path = [...longestDep, nodeId];
|
|
218
|
+
memo.set(nodeId, path);
|
|
219
|
+
return path;
|
|
220
|
+
};
|
|
221
|
+
let criticalPath = [];
|
|
222
|
+
for (const node of this.nodes.values()) {
|
|
223
|
+
const path = findLongestPath(node.id);
|
|
224
|
+
if (path.length > criticalPath.length) {
|
|
225
|
+
criticalPath = path;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return criticalPath;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Calculate completion percentage
|
|
232
|
+
*/
|
|
233
|
+
calculateCompletionPercent() {
|
|
234
|
+
const allNodes = this.getAllNodes();
|
|
235
|
+
if (allNodes.length === 0)
|
|
236
|
+
return 100;
|
|
237
|
+
const completed = allNodes.filter((n) => n.status === 'completed').length;
|
|
238
|
+
return Math.round((completed / allNodes.length) * 100);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Analyze the dependency graph
|
|
242
|
+
*/
|
|
243
|
+
analyze() {
|
|
244
|
+
const allNodes = this.getAllNodes();
|
|
245
|
+
const circularDeps = this.detectCircularDependencies();
|
|
246
|
+
const orphaned = this.findOrphanedNodes();
|
|
247
|
+
const criticalPath = this.findCriticalPath();
|
|
248
|
+
// Find blocking nodes (in_progress or failed nodes that have dependents)
|
|
249
|
+
const blockingNodes = allNodes
|
|
250
|
+
.filter((n) => (n.status === 'in_progress' || n.status === 'failed') && n.dependents.length > 0)
|
|
251
|
+
.map((n) => n.id);
|
|
252
|
+
return {
|
|
253
|
+
nodes: allNodes,
|
|
254
|
+
edges: this.getAllEdges(),
|
|
255
|
+
orphanedNodes: orphaned,
|
|
256
|
+
circularDependencies: circularDeps,
|
|
257
|
+
blockingNodes,
|
|
258
|
+
readyNodes: this.getReadyNodes().map((n) => n.id),
|
|
259
|
+
criticalPath,
|
|
260
|
+
completionPercent: this.calculateCompletionPercent(),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Identify gaps in the dependency graph
|
|
265
|
+
*/
|
|
266
|
+
identifyGaps() {
|
|
267
|
+
const gaps = [];
|
|
268
|
+
const analysis = this.analyze();
|
|
269
|
+
// Missing dependencies
|
|
270
|
+
for (const nodeId of analysis.orphanedNodes) {
|
|
271
|
+
const node = this.nodes.get(nodeId);
|
|
272
|
+
if (node) {
|
|
273
|
+
const missingDeps = node.dependencies.filter((d) => !this.nodes.has(d));
|
|
274
|
+
gaps.push({
|
|
275
|
+
nodeId,
|
|
276
|
+
type: 'missing_dependency',
|
|
277
|
+
description: `Node "${node.name}" has missing dependencies: ${missingDeps.join(', ')}`,
|
|
278
|
+
resolution: 'Add the missing dependency nodes or remove the dependency',
|
|
279
|
+
severity: 'critical',
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Failed dependencies
|
|
284
|
+
for (const node of this.nodes.values()) {
|
|
285
|
+
for (const depId of node.dependencies) {
|
|
286
|
+
const dep = this.nodes.get(depId);
|
|
287
|
+
if (dep && dep.status === 'failed') {
|
|
288
|
+
gaps.push({
|
|
289
|
+
nodeId: node.id,
|
|
290
|
+
type: 'failed_dependency',
|
|
291
|
+
description: `Node "${node.name}" depends on failed node "${dep.name}"`,
|
|
292
|
+
resolution: 'Retry or fix the failed dependency, or provide alternative path',
|
|
293
|
+
severity: 'high',
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// Circular dependencies
|
|
299
|
+
for (const cycle of analysis.circularDependencies) {
|
|
300
|
+
gaps.push({
|
|
301
|
+
nodeId: cycle[0],
|
|
302
|
+
type: 'circular',
|
|
303
|
+
description: `Circular dependency detected: ${cycle.join(' -> ')}`,
|
|
304
|
+
resolution: 'Break the cycle by removing one of the dependencies',
|
|
305
|
+
severity: 'critical',
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
// Stalled nodes (in_progress for too long)
|
|
309
|
+
const stalledThreshold = 5 * 60 * 1000; // 5 minutes
|
|
310
|
+
const now = Date.now();
|
|
311
|
+
for (const node of this.nodes.values()) {
|
|
312
|
+
if (node.status === 'in_progress') {
|
|
313
|
+
const elapsed = now - node.lastUpdated.getTime();
|
|
314
|
+
if (elapsed > stalledThreshold) {
|
|
315
|
+
gaps.push({
|
|
316
|
+
nodeId: node.id,
|
|
317
|
+
type: 'stalled',
|
|
318
|
+
description: `Node "${node.name}" has been in_progress for ${Math.round(elapsed / 60000)} minutes`,
|
|
319
|
+
resolution: 'Check agent health and consider re-routing to another agent',
|
|
320
|
+
severity: 'high',
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return gaps;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Clear the graph
|
|
329
|
+
*/
|
|
330
|
+
clear() {
|
|
331
|
+
this.nodes.clear();
|
|
332
|
+
this.edges = [];
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Serialize to JSON
|
|
336
|
+
*/
|
|
337
|
+
toJSON() {
|
|
338
|
+
return {
|
|
339
|
+
nodes: this.getAllNodes(),
|
|
340
|
+
edges: this.getAllEdges(),
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Load from JSON
|
|
345
|
+
*/
|
|
346
|
+
static fromJSON(data) {
|
|
347
|
+
const graph = new DependencyGraph();
|
|
348
|
+
for (const node of data.nodes) {
|
|
349
|
+
graph.nodes.set(node.id, {
|
|
350
|
+
...node,
|
|
351
|
+
lastUpdated: new Date(node.lastUpdated),
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
graph.edges = data.edges;
|
|
355
|
+
return graph;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
// =============================================================================
|
|
359
|
+
// Helper Functions
|
|
360
|
+
// =============================================================================
|
|
361
|
+
/**
|
|
362
|
+
* Create a dependency graph from tasks
|
|
363
|
+
*/
|
|
364
|
+
export function createGraphFromTasks(tasks) {
|
|
365
|
+
const graph = new DependencyGraph();
|
|
366
|
+
for (const task of tasks) {
|
|
367
|
+
graph.addNode({
|
|
368
|
+
id: task.id,
|
|
369
|
+
name: task.title,
|
|
370
|
+
type: 'task',
|
|
371
|
+
status: task.status,
|
|
372
|
+
dependencies: task.dependencies,
|
|
373
|
+
metadata: {},
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
return graph;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Format dependency analysis for display
|
|
380
|
+
*/
|
|
381
|
+
export function formatDependencyAnalysis(analysis) {
|
|
382
|
+
const lines = [];
|
|
383
|
+
lines.push('## Dependency Analysis');
|
|
384
|
+
lines.push('');
|
|
385
|
+
lines.push(`**Nodes:** ${analysis.nodes.length}`);
|
|
386
|
+
lines.push(`**Edges:** ${analysis.edges.length}`);
|
|
387
|
+
lines.push(`**Completion:** ${analysis.completionPercent}%`);
|
|
388
|
+
lines.push('');
|
|
389
|
+
if (analysis.readyNodes.length > 0) {
|
|
390
|
+
lines.push('### Ready to Execute');
|
|
391
|
+
for (const nodeId of analysis.readyNodes) {
|
|
392
|
+
lines.push(`- ${nodeId}`);
|
|
393
|
+
}
|
|
394
|
+
lines.push('');
|
|
395
|
+
}
|
|
396
|
+
if (analysis.blockingNodes.length > 0) {
|
|
397
|
+
lines.push('### Blocking Nodes');
|
|
398
|
+
for (const nodeId of analysis.blockingNodes) {
|
|
399
|
+
lines.push(`- ${nodeId}`);
|
|
400
|
+
}
|
|
401
|
+
lines.push('');
|
|
402
|
+
}
|
|
403
|
+
if (analysis.orphanedNodes.length > 0) {
|
|
404
|
+
lines.push('### Orphaned Nodes');
|
|
405
|
+
for (const nodeId of analysis.orphanedNodes) {
|
|
406
|
+
lines.push(`- ${nodeId}`);
|
|
407
|
+
}
|
|
408
|
+
lines.push('');
|
|
409
|
+
}
|
|
410
|
+
if (analysis.circularDependencies.length > 0) {
|
|
411
|
+
lines.push('### Circular Dependencies');
|
|
412
|
+
for (const cycle of analysis.circularDependencies) {
|
|
413
|
+
lines.push(`- ${cycle.join(' -> ')}`);
|
|
414
|
+
}
|
|
415
|
+
lines.push('');
|
|
416
|
+
}
|
|
417
|
+
if (analysis.criticalPath.length > 0) {
|
|
418
|
+
lines.push('### Critical Path');
|
|
419
|
+
lines.push(analysis.criticalPath.join(' -> '));
|
|
420
|
+
lines.push('');
|
|
421
|
+
}
|
|
422
|
+
return lines.join('\n');
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Format gaps for display
|
|
426
|
+
*/
|
|
427
|
+
export function formatDependencyGaps(gaps) {
|
|
428
|
+
const lines = [];
|
|
429
|
+
lines.push('## Dependency Gaps');
|
|
430
|
+
lines.push('');
|
|
431
|
+
if (gaps.length === 0) {
|
|
432
|
+
lines.push('No gaps detected.');
|
|
433
|
+
return lines.join('\n');
|
|
434
|
+
}
|
|
435
|
+
const bySeverity = {
|
|
436
|
+
critical: gaps.filter((g) => g.severity === 'critical'),
|
|
437
|
+
high: gaps.filter((g) => g.severity === 'high'),
|
|
438
|
+
medium: gaps.filter((g) => g.severity === 'medium'),
|
|
439
|
+
low: gaps.filter((g) => g.severity === 'low'),
|
|
440
|
+
};
|
|
441
|
+
for (const [severity, severityGaps] of Object.entries(bySeverity)) {
|
|
442
|
+
if (severityGaps.length === 0)
|
|
443
|
+
continue;
|
|
444
|
+
const emoji = severity === 'critical'
|
|
445
|
+
? '🔴'
|
|
446
|
+
: severity === 'high'
|
|
447
|
+
? '🟠'
|
|
448
|
+
: severity === 'medium'
|
|
449
|
+
? '🟡'
|
|
450
|
+
: '🟢';
|
|
451
|
+
lines.push(`### ${emoji} ${severity.toUpperCase()} (${severityGaps.length})`);
|
|
452
|
+
lines.push('');
|
|
453
|
+
for (const gap of severityGaps) {
|
|
454
|
+
lines.push(`**${gap.type}** - ${gap.nodeId}`);
|
|
455
|
+
lines.push(` ${gap.description}`);
|
|
456
|
+
lines.push(` _Resolution:_ ${gap.resolution}`);
|
|
457
|
+
lines.push('');
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
return lines.join('\n');
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=dependency-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../../src/core/agents/dependency-graph.ts"],"names":[],"mappings":"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"}
|