agentic-qe 1.9.4 → 2.1.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/.claude/agents/qe-api-contract-validator.md +95 -1336
- package/.claude/agents/qe-chaos-engineer.md +152 -1211
- package/.claude/agents/qe-code-complexity.md +144 -707
- package/.claude/agents/qe-coverage-analyzer.md +147 -743
- package/.claude/agents/qe-deployment-readiness.md +143 -1496
- package/.claude/agents/qe-flaky-test-hunter.md +132 -1529
- package/.claude/agents/qe-fleet-commander.md +12 -12
- package/.claude/agents/qe-performance-tester.md +150 -886
- package/.claude/agents/qe-production-intelligence.md +155 -1396
- package/.claude/agents/qe-quality-analyzer.md +6 -6
- package/.claude/agents/qe-quality-gate.md +151 -648
- package/.claude/agents/qe-regression-risk-analyzer.md +132 -1150
- package/.claude/agents/qe-requirements-validator.md +149 -932
- package/.claude/agents/qe-security-scanner.md +157 -797
- package/.claude/agents/qe-test-data-architect.md +96 -1365
- package/.claude/agents/qe-test-executor.md +8 -8
- package/.claude/agents/qe-test-generator.md +145 -1540
- package/.claude/agents/qe-visual-tester.md +153 -1257
- package/.claude/agents/qx-partner.md +248 -0
- package/.claude/agents/subagents/qe-code-reviewer.md +40 -136
- package/.claude/agents/subagents/qe-coverage-gap-analyzer.md +40 -480
- package/.claude/agents/subagents/qe-data-generator.md +41 -125
- package/.claude/agents/subagents/qe-flaky-investigator.md +55 -411
- package/.claude/agents/subagents/qe-integration-tester.md +53 -141
- package/.claude/agents/subagents/qe-performance-validator.md +54 -130
- package/.claude/agents/subagents/qe-security-auditor.md +56 -114
- package/.claude/agents/subagents/qe-test-data-architect-sub.md +57 -548
- package/.claude/agents/subagents/qe-test-implementer.md +58 -551
- package/.claude/agents/subagents/qe-test-refactorer.md +65 -722
- package/.claude/agents/subagents/qe-test-writer.md +63 -726
- package/.claude/skills/accessibility-testing/SKILL.md +144 -692
- package/.claude/skills/agentic-quality-engineering/SKILL.md +176 -529
- package/.claude/skills/api-testing-patterns/SKILL.md +180 -560
- package/.claude/skills/brutal-honesty-review/SKILL.md +113 -603
- package/.claude/skills/bug-reporting-excellence/SKILL.md +116 -517
- package/.claude/skills/chaos-engineering-resilience/SKILL.md +127 -72
- package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +209 -404
- package/.claude/skills/code-review-quality/SKILL.md +158 -608
- package/.claude/skills/compatibility-testing/SKILL.md +148 -38
- package/.claude/skills/compliance-testing/SKILL.md +132 -63
- package/.claude/skills/consultancy-practices/SKILL.md +114 -446
- package/.claude/skills/context-driven-testing/SKILL.md +117 -381
- package/.claude/skills/contract-testing/SKILL.md +176 -141
- package/.claude/skills/database-testing/SKILL.md +137 -130
- package/.claude/skills/exploratory-testing-advanced/SKILL.md +160 -629
- package/.claude/skills/holistic-testing-pact/SKILL.md +140 -188
- package/.claude/skills/localization-testing/SKILL.md +145 -33
- package/.claude/skills/mobile-testing/SKILL.md +132 -448
- package/.claude/skills/mutation-testing/SKILL.md +147 -41
- package/.claude/skills/performance-testing/SKILL.md +200 -546
- package/.claude/skills/quality-metrics/SKILL.md +164 -519
- package/.claude/skills/refactoring-patterns/SKILL.md +132 -699
- package/.claude/skills/regression-testing/SKILL.md +120 -926
- package/.claude/skills/risk-based-testing/SKILL.md +157 -660
- package/.claude/skills/security-testing/SKILL.md +199 -538
- package/.claude/skills/sherlock-review/SKILL.md +163 -699
- package/.claude/skills/shift-left-testing/SKILL.md +161 -465
- package/.claude/skills/shift-right-testing/SKILL.md +161 -519
- package/.claude/skills/six-thinking-hats/SKILL.md +175 -1110
- package/.claude/skills/skills-manifest.json +683 -0
- package/.claude/skills/tdd-london-chicago/SKILL.md +131 -448
- package/.claude/skills/technical-writing/SKILL.md +103 -154
- package/.claude/skills/test-automation-strategy/SKILL.md +166 -772
- package/.claude/skills/test-data-management/SKILL.md +126 -910
- package/.claude/skills/test-design-techniques/SKILL.md +179 -89
- package/.claude/skills/test-environment-management/SKILL.md +136 -91
- package/.claude/skills/test-reporting-analytics/SKILL.md +169 -92
- package/.claude/skills/testability-scoring/README.md +71 -0
- package/.claude/skills/testability-scoring/SKILL.md +245 -0
- package/.claude/skills/testability-scoring/resources/templates/config.template.js +84 -0
- package/.claude/skills/testability-scoring/resources/templates/testability-scoring.spec.template.js +532 -0
- package/.claude/skills/testability-scoring/scripts/generate-html-report.js +1007 -0
- package/.claude/skills/testability-scoring/scripts/run-assessment.sh +70 -0
- package/.claude/skills/visual-testing-advanced/SKILL.md +155 -78
- package/.claude/skills/xp-practices/SKILL.md +151 -587
- package/CHANGELOG.md +110 -0
- package/README.md +55 -21
- package/dist/agents/QXPartnerAgent.d.ts +146 -0
- package/dist/agents/QXPartnerAgent.d.ts.map +1 -0
- package/dist/agents/QXPartnerAgent.js +1831 -0
- package/dist/agents/QXPartnerAgent.js.map +1 -0
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +82 -2
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.js +34 -31
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
- package/dist/cli/commands/debug/agent.d.ts.map +1 -1
- package/dist/cli/commands/debug/agent.js +19 -6
- package/dist/cli/commands/debug/agent.js.map +1 -1
- package/dist/cli/commands/debug/health-check.js +20 -7
- package/dist/cli/commands/debug/health-check.js.map +1 -1
- package/dist/cli/commands/init-claude-md-template.d.ts +1 -0
- package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -1
- package/dist/cli/commands/init-claude-md-template.js +18 -3
- package/dist/cli/commands/init-claude-md-template.js.map +1 -1
- package/dist/cli/commands/workflow/cancel.d.ts.map +1 -1
- package/dist/cli/commands/workflow/cancel.js +4 -3
- package/dist/cli/commands/workflow/cancel.js.map +1 -1
- package/dist/cli/commands/workflow/list.d.ts.map +1 -1
- package/dist/cli/commands/workflow/list.js +4 -3
- package/dist/cli/commands/workflow/list.js.map +1 -1
- package/dist/cli/commands/workflow/pause.d.ts.map +1 -1
- package/dist/cli/commands/workflow/pause.js +4 -3
- package/dist/cli/commands/workflow/pause.js.map +1 -1
- package/dist/cli/init/claude-config.d.ts.map +1 -1
- package/dist/cli/init/claude-config.js +3 -8
- package/dist/cli/init/claude-config.js.map +1 -1
- package/dist/cli/init/claude-md.d.ts.map +1 -1
- package/dist/cli/init/claude-md.js +44 -2
- package/dist/cli/init/claude-md.js.map +1 -1
- package/dist/cli/init/database-init.js +1 -1
- package/dist/cli/init/index.d.ts.map +1 -1
- package/dist/cli/init/index.js +13 -6
- package/dist/cli/init/index.js.map +1 -1
- package/dist/cli/init/skills.d.ts.map +1 -1
- package/dist/cli/init/skills.js +2 -1
- package/dist/cli/init/skills.js.map +1 -1
- package/dist/core/SwarmCoordinator.d.ts +180 -0
- package/dist/core/SwarmCoordinator.d.ts.map +1 -0
- package/dist/core/SwarmCoordinator.js +473 -0
- package/dist/core/SwarmCoordinator.js.map +1 -0
- package/dist/core/memory/AgentDBIntegration.d.ts +24 -6
- package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -1
- package/dist/core/memory/AgentDBIntegration.js +66 -10
- package/dist/core/memory/AgentDBIntegration.js.map +1 -1
- package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +341 -0
- package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -0
- package/dist/core/memory/UnifiedMemoryCoordinator.js +986 -0
- package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -0
- package/dist/core/memory/index.d.ts +5 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +23 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/metrics/MetricsAggregator.d.ts +228 -0
- package/dist/core/metrics/MetricsAggregator.d.ts.map +1 -0
- package/dist/core/metrics/MetricsAggregator.js +482 -0
- package/dist/core/metrics/MetricsAggregator.js.map +1 -0
- package/dist/core/metrics/index.d.ts +5 -0
- package/dist/core/metrics/index.d.ts.map +1 -0
- package/dist/core/metrics/index.js +11 -0
- package/dist/core/metrics/index.js.map +1 -0
- package/dist/core/optimization/SwarmOptimizer.d.ts +190 -0
- package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -0
- package/dist/core/optimization/SwarmOptimizer.js +648 -0
- package/dist/core/optimization/SwarmOptimizer.js.map +1 -0
- package/dist/core/optimization/index.d.ts +9 -0
- package/dist/core/optimization/index.d.ts.map +1 -0
- package/dist/core/optimization/index.js +25 -0
- package/dist/core/optimization/index.js.map +1 -0
- package/dist/core/optimization/types.d.ts +53 -0
- package/dist/core/optimization/types.d.ts.map +1 -0
- package/dist/core/optimization/types.js +6 -0
- package/dist/core/optimization/types.js.map +1 -0
- package/dist/core/orchestration/AdaptiveScheduler.d.ts +190 -0
- package/dist/core/orchestration/AdaptiveScheduler.d.ts.map +1 -0
- package/dist/core/orchestration/AdaptiveScheduler.js +460 -0
- package/dist/core/orchestration/AdaptiveScheduler.js.map +1 -0
- package/dist/core/orchestration/PriorityQueue.d.ts +54 -0
- package/dist/core/orchestration/PriorityQueue.d.ts.map +1 -0
- package/dist/core/orchestration/PriorityQueue.js +122 -0
- package/dist/core/orchestration/PriorityQueue.js.map +1 -0
- package/dist/core/orchestration/WorkflowOrchestrator.d.ts +189 -0
- package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -0
- package/dist/core/orchestration/WorkflowOrchestrator.js +845 -0
- package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -0
- package/dist/core/orchestration/index.d.ts +7 -0
- package/dist/core/orchestration/index.d.ts.map +1 -0
- package/dist/core/orchestration/index.js +11 -0
- package/dist/core/orchestration/index.js.map +1 -0
- package/dist/core/orchestration/types.d.ts +96 -0
- package/dist/core/orchestration/types.d.ts.map +1 -0
- package/dist/core/orchestration/types.js +6 -0
- package/dist/core/orchestration/types.js.map +1 -0
- package/dist/core/recovery/CircuitBreaker.d.ts +176 -0
- package/dist/core/recovery/CircuitBreaker.d.ts.map +1 -0
- package/dist/core/recovery/CircuitBreaker.js +382 -0
- package/dist/core/recovery/CircuitBreaker.js.map +1 -0
- package/dist/core/recovery/RecoveryOrchestrator.d.ts +186 -0
- package/dist/core/recovery/RecoveryOrchestrator.d.ts.map +1 -0
- package/dist/core/recovery/RecoveryOrchestrator.js +476 -0
- package/dist/core/recovery/RecoveryOrchestrator.js.map +1 -0
- package/dist/core/recovery/RetryStrategy.d.ts +127 -0
- package/dist/core/recovery/RetryStrategy.d.ts.map +1 -0
- package/dist/core/recovery/RetryStrategy.js +314 -0
- package/dist/core/recovery/RetryStrategy.js.map +1 -0
- package/dist/core/recovery/index.d.ts +8 -0
- package/dist/core/recovery/index.d.ts.map +1 -0
- package/dist/core/recovery/index.js +27 -0
- package/dist/core/recovery/index.js.map +1 -0
- package/dist/core/skills/DependencyResolver.d.ts +99 -0
- package/dist/core/skills/DependencyResolver.d.ts.map +1 -0
- package/dist/core/skills/DependencyResolver.js +260 -0
- package/dist/core/skills/DependencyResolver.js.map +1 -0
- package/dist/core/skills/DynamicSkillLoader.d.ts +96 -0
- package/dist/core/skills/DynamicSkillLoader.d.ts.map +1 -0
- package/dist/core/skills/DynamicSkillLoader.js +353 -0
- package/dist/core/skills/DynamicSkillLoader.js.map +1 -0
- package/dist/core/skills/ManifestGenerator.d.ts +114 -0
- package/dist/core/skills/ManifestGenerator.d.ts.map +1 -0
- package/dist/core/skills/ManifestGenerator.js +449 -0
- package/dist/core/skills/ManifestGenerator.js.map +1 -0
- package/dist/core/skills/index.d.ts +9 -0
- package/dist/core/skills/index.d.ts.map +1 -0
- package/dist/core/skills/index.js +24 -0
- package/dist/core/skills/index.js.map +1 -0
- package/dist/core/skills/types.d.ts +118 -0
- package/dist/core/skills/types.d.ts.map +1 -0
- package/dist/core/skills/types.js +7 -0
- package/dist/core/skills/types.js.map +1 -0
- package/dist/core/transport/QUICTransport.d.ts +320 -0
- package/dist/core/transport/QUICTransport.d.ts.map +1 -0
- package/dist/core/transport/QUICTransport.js +711 -0
- package/dist/core/transport/QUICTransport.js.map +1 -0
- package/dist/core/transport/index.d.ts +40 -0
- package/dist/core/transport/index.d.ts.map +1 -0
- package/dist/core/transport/index.js +46 -0
- package/dist/core/transport/index.js.map +1 -0
- package/dist/core/transport/quic-loader.d.ts +123 -0
- package/dist/core/transport/quic-loader.d.ts.map +1 -0
- package/dist/core/transport/quic-loader.js +293 -0
- package/dist/core/transport/quic-loader.js.map +1 -0
- package/dist/core/transport/quic.d.ts +154 -0
- package/dist/core/transport/quic.d.ts.map +1 -0
- package/dist/core/transport/quic.js +214 -0
- package/dist/core/transport/quic.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -9
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +1 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +4 -1
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/qx.d.ts +429 -0
- package/dist/types/qx.d.ts.map +1 -0
- package/dist/types/qx.js +71 -0
- package/dist/types/qx.js.map +1 -0
- package/dist/visualization/api/RestEndpoints.js +2 -2
- package/dist/visualization/api/RestEndpoints.js.map +1 -1
- package/dist/visualization/api/WebSocketServer.d.ts +44 -0
- package/dist/visualization/api/WebSocketServer.d.ts.map +1 -1
- package/dist/visualization/api/WebSocketServer.js +144 -23
- package/dist/visualization/api/WebSocketServer.js.map +1 -1
- package/dist/visualization/core/DataTransformer.d.ts +10 -0
- package/dist/visualization/core/DataTransformer.d.ts.map +1 -1
- package/dist/visualization/core/DataTransformer.js +60 -5
- package/dist/visualization/core/DataTransformer.js.map +1 -1
- package/dist/visualization/emit-event.d.ts +75 -0
- package/dist/visualization/emit-event.d.ts.map +1 -0
- package/dist/visualization/emit-event.js +213 -0
- package/dist/visualization/emit-event.js.map +1 -0
- package/dist/visualization/index.d.ts +1 -0
- package/dist/visualization/index.d.ts.map +1 -1
- package/dist/visualization/index.js +7 -1
- package/dist/visualization/index.js.map +1 -1
- package/docs/reference/skills.md +63 -1
- package/package.json +16 -58
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dependency Resolver for Skill Loading
|
|
4
|
+
* Handles skill dependency graphs with cycle detection and optimal load ordering
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DependencyResolver = void 0;
|
|
8
|
+
exports.createDependencyResolver = createDependencyResolver;
|
|
9
|
+
exports.visualizeDependencyTree = visualizeDependencyTree;
|
|
10
|
+
/**
|
|
11
|
+
* Skill Dependency Resolver
|
|
12
|
+
* Resolves skill dependencies with cycle detection and optimal ordering
|
|
13
|
+
*/
|
|
14
|
+
class DependencyResolver {
|
|
15
|
+
constructor(manifest, options = {}) {
|
|
16
|
+
this.manifest = manifest;
|
|
17
|
+
this.skillMap = new Map(manifest.skills.map(s => [s.id, s]));
|
|
18
|
+
this.options = {
|
|
19
|
+
maxDepth: 10,
|
|
20
|
+
includeOptional: true,
|
|
21
|
+
cycleStrategy: 'warn',
|
|
22
|
+
...options,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve dependencies for a single skill
|
|
27
|
+
*/
|
|
28
|
+
resolve(skillId) {
|
|
29
|
+
return this.resolveMultiple([skillId]);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Resolve dependencies for multiple skills
|
|
33
|
+
*/
|
|
34
|
+
resolveMultiple(skillIds) {
|
|
35
|
+
const visited = new Set();
|
|
36
|
+
const loadOrder = [];
|
|
37
|
+
const cycles = [];
|
|
38
|
+
const unresolved = [];
|
|
39
|
+
// Build dependency tree for each skill
|
|
40
|
+
const trees = [];
|
|
41
|
+
for (const skillId of skillIds) {
|
|
42
|
+
const result = this.buildDependencyTree(skillId, [], 0, visited);
|
|
43
|
+
trees.push(result.node);
|
|
44
|
+
cycles.push(...result.cycles);
|
|
45
|
+
unresolved.push(...result.unresolved);
|
|
46
|
+
}
|
|
47
|
+
// Topological sort for optimal load order
|
|
48
|
+
const sortedOrder = this.topologicalSort(skillIds);
|
|
49
|
+
loadOrder.push(...sortedOrder);
|
|
50
|
+
// Merge trees into single root
|
|
51
|
+
const mergedTree = {
|
|
52
|
+
id: 'root',
|
|
53
|
+
depth: -1,
|
|
54
|
+
dependencies: trees,
|
|
55
|
+
};
|
|
56
|
+
return {
|
|
57
|
+
loadOrder,
|
|
58
|
+
tree: mergedTree,
|
|
59
|
+
cycles: this.deduplicateCycles(cycles),
|
|
60
|
+
unresolved,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get all skills that depend on a given skill (reverse dependencies)
|
|
65
|
+
*/
|
|
66
|
+
getDependents(skillId) {
|
|
67
|
+
const dependents = [];
|
|
68
|
+
for (const skill of this.manifest.skills) {
|
|
69
|
+
if (skill.dependencies?.includes(skillId)) {
|
|
70
|
+
dependents.push(skill.id);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return dependents;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get direct dependencies of a skill
|
|
77
|
+
*/
|
|
78
|
+
getDirectDependencies(skillId) {
|
|
79
|
+
const skill = this.skillMap.get(skillId);
|
|
80
|
+
return skill?.dependencies || [];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get all transitive dependencies (full dependency closure)
|
|
84
|
+
*/
|
|
85
|
+
getTransitiveDependencies(skillId) {
|
|
86
|
+
const resolution = this.resolve(skillId);
|
|
87
|
+
return resolution.loadOrder.filter(id => id !== skillId);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Check if adding a dependency would create a cycle
|
|
91
|
+
*/
|
|
92
|
+
wouldCreateCycle(fromSkillId, toSkillId) {
|
|
93
|
+
// Check if toSkillId already depends on fromSkillId
|
|
94
|
+
const deps = this.getTransitiveDependencies(toSkillId);
|
|
95
|
+
return deps.includes(fromSkillId);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Build dependency tree recursively
|
|
99
|
+
*/
|
|
100
|
+
buildDependencyTree(skillId, path, depth, globalVisited) {
|
|
101
|
+
const cycles = [];
|
|
102
|
+
const unresolved = [];
|
|
103
|
+
// Check for cycle
|
|
104
|
+
if (path.includes(skillId)) {
|
|
105
|
+
const cycleStart = path.indexOf(skillId);
|
|
106
|
+
const cycle = [...path.slice(cycleStart), skillId];
|
|
107
|
+
cycles.push(cycle);
|
|
108
|
+
if (this.options.cycleStrategy === 'error') {
|
|
109
|
+
throw new Error(`Circular dependency detected: ${cycle.join(' -> ')}`);
|
|
110
|
+
}
|
|
111
|
+
// Return leaf node to break cycle
|
|
112
|
+
return {
|
|
113
|
+
node: { id: skillId, depth, dependencies: [] },
|
|
114
|
+
cycles,
|
|
115
|
+
unresolved,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
// Check max depth
|
|
119
|
+
if (depth > this.options.maxDepth) {
|
|
120
|
+
return {
|
|
121
|
+
node: { id: skillId, depth, dependencies: [] },
|
|
122
|
+
cycles,
|
|
123
|
+
unresolved,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const skill = this.skillMap.get(skillId);
|
|
127
|
+
if (!skill) {
|
|
128
|
+
return {
|
|
129
|
+
node: { id: skillId, depth, dependencies: [] },
|
|
130
|
+
cycles,
|
|
131
|
+
unresolved: [{ skillId, missing: [skillId] }],
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// Check for missing dependencies
|
|
135
|
+
const missing = (skill.dependencies || []).filter(dep => !this.skillMap.has(dep));
|
|
136
|
+
if (missing.length > 0) {
|
|
137
|
+
unresolved.push({ skillId, missing });
|
|
138
|
+
}
|
|
139
|
+
// Build children
|
|
140
|
+
const dependencies = [];
|
|
141
|
+
const newPath = [...path, skillId];
|
|
142
|
+
for (const depId of skill.dependencies || []) {
|
|
143
|
+
if (!this.skillMap.has(depId))
|
|
144
|
+
continue;
|
|
145
|
+
if (globalVisited.has(depId) && !path.includes(depId)) {
|
|
146
|
+
// Already fully processed, add as leaf
|
|
147
|
+
dependencies.push({ id: depId, depth: depth + 1, dependencies: [] });
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
const result = this.buildDependencyTree(depId, newPath, depth + 1, globalVisited);
|
|
151
|
+
dependencies.push(result.node);
|
|
152
|
+
cycles.push(...result.cycles);
|
|
153
|
+
unresolved.push(...result.unresolved);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
globalVisited.add(skillId);
|
|
157
|
+
return {
|
|
158
|
+
node: { id: skillId, depth, dependencies },
|
|
159
|
+
cycles,
|
|
160
|
+
unresolved,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Topological sort for optimal load order (dependencies first)
|
|
165
|
+
*/
|
|
166
|
+
topologicalSort(startIds) {
|
|
167
|
+
const result = [];
|
|
168
|
+
const visited = new Set();
|
|
169
|
+
const visiting = new Set(); // For cycle detection
|
|
170
|
+
const visit = (skillId) => {
|
|
171
|
+
if (visited.has(skillId))
|
|
172
|
+
return;
|
|
173
|
+
if (visiting.has(skillId))
|
|
174
|
+
return; // Cycle, skip
|
|
175
|
+
visiting.add(skillId);
|
|
176
|
+
const skill = this.skillMap.get(skillId);
|
|
177
|
+
if (skill?.dependencies) {
|
|
178
|
+
for (const depId of skill.dependencies) {
|
|
179
|
+
if (this.skillMap.has(depId)) {
|
|
180
|
+
visit(depId);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
visiting.delete(skillId);
|
|
185
|
+
visited.add(skillId);
|
|
186
|
+
result.push(skillId);
|
|
187
|
+
};
|
|
188
|
+
// Start from requested skills
|
|
189
|
+
for (const startId of startIds) {
|
|
190
|
+
visit(startId);
|
|
191
|
+
}
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Deduplicate cycle arrays (same cycle may be detected from different starting points)
|
|
196
|
+
*/
|
|
197
|
+
deduplicateCycles(cycles) {
|
|
198
|
+
const seen = new Set();
|
|
199
|
+
const unique = [];
|
|
200
|
+
for (const cycle of cycles) {
|
|
201
|
+
// Normalize cycle by starting from smallest element
|
|
202
|
+
const normalized = this.normalizeCycle(cycle);
|
|
203
|
+
const key = normalized.join('->');
|
|
204
|
+
if (!seen.has(key)) {
|
|
205
|
+
seen.add(key);
|
|
206
|
+
unique.push(normalized);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return unique;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Normalize cycle to start from smallest element for deduplication
|
|
213
|
+
*/
|
|
214
|
+
normalizeCycle(cycle) {
|
|
215
|
+
if (cycle.length <= 1)
|
|
216
|
+
return cycle;
|
|
217
|
+
// Remove duplicate end if present
|
|
218
|
+
const normalized = cycle[0] === cycle[cycle.length - 1]
|
|
219
|
+
? cycle.slice(0, -1)
|
|
220
|
+
: cycle;
|
|
221
|
+
// Find index of smallest element
|
|
222
|
+
let minIndex = 0;
|
|
223
|
+
for (let i = 1; i < normalized.length; i++) {
|
|
224
|
+
if (normalized[i] < normalized[minIndex]) {
|
|
225
|
+
minIndex = i;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Rotate to start from smallest
|
|
229
|
+
return [...normalized.slice(minIndex), ...normalized.slice(0, minIndex)];
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
exports.DependencyResolver = DependencyResolver;
|
|
233
|
+
/**
|
|
234
|
+
* Create a dependency resolver from manifest
|
|
235
|
+
*/
|
|
236
|
+
function createDependencyResolver(manifest, options) {
|
|
237
|
+
return new DependencyResolver(manifest, options);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Visualize dependency tree as ASCII art
|
|
241
|
+
*/
|
|
242
|
+
function visualizeDependencyTree(node, prefix = '') {
|
|
243
|
+
const lines = [];
|
|
244
|
+
if (node.id !== 'root') {
|
|
245
|
+
lines.push(`${prefix}${node.id}`);
|
|
246
|
+
}
|
|
247
|
+
const childPrefix = node.id === 'root' ? '' : prefix + ' ';
|
|
248
|
+
for (let i = 0; i < node.dependencies.length; i++) {
|
|
249
|
+
const child = node.dependencies[i];
|
|
250
|
+
const isLast = i === node.dependencies.length - 1;
|
|
251
|
+
const connector = isLast ? '└── ' : '├── ';
|
|
252
|
+
const nextPrefix = childPrefix + (isLast ? ' ' : '│ ');
|
|
253
|
+
lines.push(`${childPrefix}${connector}${child.id}`);
|
|
254
|
+
if (child.dependencies.length > 0) {
|
|
255
|
+
lines.push(visualizeDependencyTree(child, nextPrefix));
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return lines.join('\n');
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=DependencyResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DependencyResolver.js","sourceRoot":"","sources":["../../../src/core/skills/DependencyResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic Skill Loader with LRU Cache and Progressive Disclosure
|
|
3
|
+
* Achieves 98% token reduction by lazy-loading skills on demand
|
|
4
|
+
*/
|
|
5
|
+
import { Skill, SkillMetadata, SkillManifest, SkillLoaderConfig, SkillUsageStats, SkillSearchFilter } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Dynamic Skill Loader with LRU caching and progressive disclosure
|
|
8
|
+
*/
|
|
9
|
+
export declare class DynamicSkillLoader {
|
|
10
|
+
private manifest;
|
|
11
|
+
private cache;
|
|
12
|
+
private usageStats;
|
|
13
|
+
private config;
|
|
14
|
+
constructor(config?: Partial<SkillLoaderConfig>);
|
|
15
|
+
/**
|
|
16
|
+
* Initialize loader and load manifest
|
|
17
|
+
*/
|
|
18
|
+
initialize(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Load skill metadata from manifest
|
|
21
|
+
*/
|
|
22
|
+
loadManifest(): Promise<SkillManifest>;
|
|
23
|
+
/**
|
|
24
|
+
* Get manifest (load if not already loaded)
|
|
25
|
+
*/
|
|
26
|
+
getManifest(): Promise<SkillManifest>;
|
|
27
|
+
/**
|
|
28
|
+
* Lazy load full skill content on demand
|
|
29
|
+
*/
|
|
30
|
+
loadSkill(id: string): Promise<Skill>;
|
|
31
|
+
/**
|
|
32
|
+
* Load multiple skills at once (e.g., skill + dependencies)
|
|
33
|
+
*/
|
|
34
|
+
loadSkills(ids: string[]): Promise<Skill[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Search skills by filter criteria
|
|
37
|
+
*/
|
|
38
|
+
searchSkills(filter: SkillSearchFilter): Promise<SkillMetadata[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Get skill metadata without loading full content
|
|
41
|
+
*/
|
|
42
|
+
getMetadata(id: string): Promise<SkillMetadata | null>;
|
|
43
|
+
/**
|
|
44
|
+
* Get all skills for a category
|
|
45
|
+
*/
|
|
46
|
+
getSkillsByCategory(category: string): Promise<SkillMetadata[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Get usage statistics
|
|
49
|
+
*/
|
|
50
|
+
getUsageStats(skillId?: string): SkillUsageStats | SkillUsageStats[];
|
|
51
|
+
/**
|
|
52
|
+
* Get cache statistics
|
|
53
|
+
*/
|
|
54
|
+
getCacheStats(): {
|
|
55
|
+
size: number;
|
|
56
|
+
maxSize: number;
|
|
57
|
+
hitRate: number;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Clear cache
|
|
61
|
+
*/
|
|
62
|
+
clearCache(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Preload critical priority skills
|
|
65
|
+
*/
|
|
66
|
+
private preloadCriticalSkills;
|
|
67
|
+
/**
|
|
68
|
+
* Get skill from cache if valid
|
|
69
|
+
*/
|
|
70
|
+
private getCachedSkill;
|
|
71
|
+
/**
|
|
72
|
+
* Add skill to LRU cache
|
|
73
|
+
*/
|
|
74
|
+
private addToCache;
|
|
75
|
+
/**
|
|
76
|
+
* Evict least recently used entry
|
|
77
|
+
*/
|
|
78
|
+
private evictLRU;
|
|
79
|
+
/**
|
|
80
|
+
* Update usage statistics
|
|
81
|
+
*/
|
|
82
|
+
private updateUsageStats;
|
|
83
|
+
/**
|
|
84
|
+
* Parse frontmatter from markdown file
|
|
85
|
+
*/
|
|
86
|
+
private parseFrontmatter;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get default loader instance
|
|
90
|
+
*/
|
|
91
|
+
export declare function getDefaultLoader(config?: Partial<SkillLoaderConfig>): DynamicSkillLoader;
|
|
92
|
+
/**
|
|
93
|
+
* Reset default loader (useful for testing)
|
|
94
|
+
*/
|
|
95
|
+
export declare function resetDefaultLoader(): void;
|
|
96
|
+
//# sourceMappingURL=DynamicSkillLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicSkillLoader.d.ts","sourceRoot":"","sources":["../../../src/core/skills/DynamicSkillLoader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,KAAK,EACL,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAYpB;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,UAAU,CAA2C;IAC7D,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAYnD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC;IAY5C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC;IAO3C;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAmD3C;;OAEG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAIjD;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA8CvE;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAO5D;;OAEG;IACG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAIrE;;OAEG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,eAAe,EAAE;IAapE;;OAEG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAanE;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;YACW,qBAAqB;IAYnC;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAiBhB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAkBzB;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,kBAAkB,CAKxF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|