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,353 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dynamic Skill Loader with LRU Cache and Progressive Disclosure
|
|
4
|
+
* Achieves 98% token reduction by lazy-loading skills on demand
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.DynamicSkillLoader = void 0;
|
|
41
|
+
exports.getDefaultLoader = getDefaultLoader;
|
|
42
|
+
exports.resetDefaultLoader = resetDefaultLoader;
|
|
43
|
+
const fs = __importStar(require("fs/promises"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
/**
|
|
46
|
+
* Dynamic Skill Loader with LRU caching and progressive disclosure
|
|
47
|
+
*/
|
|
48
|
+
class DynamicSkillLoader {
|
|
49
|
+
constructor(config = {}) {
|
|
50
|
+
this.manifest = null;
|
|
51
|
+
this.cache = new Map();
|
|
52
|
+
this.usageStats = new Map();
|
|
53
|
+
this.config = {
|
|
54
|
+
skillsDir: path.resolve(process.cwd(), '.claude/skills'),
|
|
55
|
+
manifestPath: path.resolve(process.cwd(), '.claude/skills/skills-manifest.json'),
|
|
56
|
+
cacheSize: 10, // Keep 10 most recently used skills in memory
|
|
57
|
+
cacheTTL: 30 * 60 * 1000, // 30 minutes
|
|
58
|
+
preloadCritical: true,
|
|
59
|
+
enableAnalytics: true,
|
|
60
|
+
...config
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Initialize loader and load manifest
|
|
65
|
+
*/
|
|
66
|
+
async initialize() {
|
|
67
|
+
await this.loadManifest();
|
|
68
|
+
if (this.config.preloadCritical && this.manifest) {
|
|
69
|
+
await this.preloadCriticalSkills();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Load skill metadata from manifest
|
|
74
|
+
*/
|
|
75
|
+
async loadManifest() {
|
|
76
|
+
try {
|
|
77
|
+
const content = await fs.readFile(this.config.manifestPath, 'utf-8');
|
|
78
|
+
this.manifest = JSON.parse(content);
|
|
79
|
+
return this.manifest;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw new Error(`Failed to load skill manifest from ${this.config.manifestPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get manifest (load if not already loaded)
|
|
87
|
+
*/
|
|
88
|
+
async getManifest() {
|
|
89
|
+
if (!this.manifest) {
|
|
90
|
+
await this.loadManifest();
|
|
91
|
+
}
|
|
92
|
+
return this.manifest;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Lazy load full skill content on demand
|
|
96
|
+
*/
|
|
97
|
+
async loadSkill(id) {
|
|
98
|
+
// Check cache first
|
|
99
|
+
const cached = this.getCachedSkill(id);
|
|
100
|
+
if (cached) {
|
|
101
|
+
this.updateUsageStats(id, 0, false); // No load time for cache hit
|
|
102
|
+
return cached;
|
|
103
|
+
}
|
|
104
|
+
// Load from disk
|
|
105
|
+
const startTime = Date.now();
|
|
106
|
+
if (!this.manifest) {
|
|
107
|
+
await this.loadManifest();
|
|
108
|
+
}
|
|
109
|
+
const metadata = this.manifest.skills.find(s => s.id === id);
|
|
110
|
+
if (!metadata) {
|
|
111
|
+
throw new Error(`Skill not found: ${id}`);
|
|
112
|
+
}
|
|
113
|
+
const skillPath = path.join(this.config.skillsDir, metadata.path);
|
|
114
|
+
try {
|
|
115
|
+
const content = await fs.readFile(skillPath, 'utf-8');
|
|
116
|
+
const frontmatter = this.parseFrontmatter(content);
|
|
117
|
+
const skill = {
|
|
118
|
+
metadata,
|
|
119
|
+
content,
|
|
120
|
+
frontmatter,
|
|
121
|
+
loadedAt: new Date()
|
|
122
|
+
};
|
|
123
|
+
const loadTime = Date.now() - startTime;
|
|
124
|
+
// Add to cache
|
|
125
|
+
this.addToCache(id, skill);
|
|
126
|
+
// Update usage stats
|
|
127
|
+
if (this.config.enableAnalytics) {
|
|
128
|
+
this.updateUsageStats(id, loadTime, true);
|
|
129
|
+
}
|
|
130
|
+
return skill;
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
throw new Error(`Failed to load skill ${id} from ${skillPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Load multiple skills at once (e.g., skill + dependencies)
|
|
138
|
+
*/
|
|
139
|
+
async loadSkills(ids) {
|
|
140
|
+
return Promise.all(ids.map(id => this.loadSkill(id)));
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Search skills by filter criteria
|
|
144
|
+
*/
|
|
145
|
+
async searchSkills(filter) {
|
|
146
|
+
if (!this.manifest) {
|
|
147
|
+
await this.loadManifest();
|
|
148
|
+
}
|
|
149
|
+
let results = [...this.manifest.skills];
|
|
150
|
+
// Filter by category
|
|
151
|
+
if (filter.category) {
|
|
152
|
+
results = results.filter(s => s.category === filter.category);
|
|
153
|
+
}
|
|
154
|
+
// Filter by priority
|
|
155
|
+
if (filter.priority) {
|
|
156
|
+
results = results.filter(s => s.priority === filter.priority);
|
|
157
|
+
}
|
|
158
|
+
// Filter by dependencies
|
|
159
|
+
if (filter.hasDependencies !== undefined) {
|
|
160
|
+
results = results.filter(s => filter.hasDependencies
|
|
161
|
+
? s.dependencies && s.dependencies.length > 0
|
|
162
|
+
: !s.dependencies || s.dependencies.length === 0);
|
|
163
|
+
}
|
|
164
|
+
// Keyword search (exact match in keywords array)
|
|
165
|
+
if (filter.keyword) {
|
|
166
|
+
const keyword = filter.keyword.toLowerCase();
|
|
167
|
+
results = results.filter(s => s.keywords.some(k => k.toLowerCase().includes(keyword)));
|
|
168
|
+
}
|
|
169
|
+
// Query search (full-text in name and description)
|
|
170
|
+
if (filter.query) {
|
|
171
|
+
const query = filter.query.toLowerCase();
|
|
172
|
+
results = results.filter(s => s.name.toLowerCase().includes(query) ||
|
|
173
|
+
s.description.toLowerCase().includes(query));
|
|
174
|
+
}
|
|
175
|
+
return results;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get skill metadata without loading full content
|
|
179
|
+
*/
|
|
180
|
+
async getMetadata(id) {
|
|
181
|
+
if (!this.manifest) {
|
|
182
|
+
await this.loadManifest();
|
|
183
|
+
}
|
|
184
|
+
return this.manifest.skills.find(s => s.id === id) || null;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get all skills for a category
|
|
188
|
+
*/
|
|
189
|
+
async getSkillsByCategory(category) {
|
|
190
|
+
return this.searchSkills({ category: category });
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get usage statistics
|
|
194
|
+
*/
|
|
195
|
+
getUsageStats(skillId) {
|
|
196
|
+
if (skillId) {
|
|
197
|
+
return this.usageStats.get(skillId) || {
|
|
198
|
+
skillId,
|
|
199
|
+
loadCount: 0,
|
|
200
|
+
lastLoaded: new Date(),
|
|
201
|
+
avgLoadTime: 0,
|
|
202
|
+
usedByAgents: []
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
return Array.from(this.usageStats.values());
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get cache statistics
|
|
209
|
+
*/
|
|
210
|
+
getCacheStats() {
|
|
211
|
+
const totalAccesses = Array.from(this.cache.values())
|
|
212
|
+
.reduce((sum, entry) => sum + entry.accessCount, 0);
|
|
213
|
+
const cacheHits = totalAccesses - this.cache.size; // Approximate
|
|
214
|
+
return {
|
|
215
|
+
size: this.cache.size,
|
|
216
|
+
maxSize: this.config.cacheSize,
|
|
217
|
+
hitRate: totalAccesses > 0 ? cacheHits / totalAccesses : 0
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Clear cache
|
|
222
|
+
*/
|
|
223
|
+
clearCache() {
|
|
224
|
+
this.cache.clear();
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Preload critical priority skills
|
|
228
|
+
*/
|
|
229
|
+
async preloadCriticalSkills() {
|
|
230
|
+
if (!this.manifest)
|
|
231
|
+
return;
|
|
232
|
+
const criticalSkills = this.manifest.skills
|
|
233
|
+
.filter(s => s.priority === 'critical')
|
|
234
|
+
.map(s => s.id);
|
|
235
|
+
if (criticalSkills.length > 0) {
|
|
236
|
+
await Promise.all(criticalSkills.map(id => this.loadSkill(id)));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get skill from cache if valid
|
|
241
|
+
*/
|
|
242
|
+
getCachedSkill(id) {
|
|
243
|
+
const entry = this.cache.get(id);
|
|
244
|
+
if (!entry)
|
|
245
|
+
return null;
|
|
246
|
+
// Check TTL
|
|
247
|
+
if (this.config.cacheTTL > 0) {
|
|
248
|
+
const age = Date.now() - entry.insertedAt.getTime();
|
|
249
|
+
if (age > this.config.cacheTTL) {
|
|
250
|
+
this.cache.delete(id);
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Update access stats
|
|
255
|
+
entry.accessCount++;
|
|
256
|
+
entry.lastAccessed = new Date();
|
|
257
|
+
return entry.skill;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Add skill to LRU cache
|
|
261
|
+
*/
|
|
262
|
+
addToCache(id, skill) {
|
|
263
|
+
// If cache is full, evict LRU entry
|
|
264
|
+
if (this.cache.size >= this.config.cacheSize) {
|
|
265
|
+
this.evictLRU();
|
|
266
|
+
}
|
|
267
|
+
this.cache.set(id, {
|
|
268
|
+
skill,
|
|
269
|
+
insertedAt: new Date(),
|
|
270
|
+
accessCount: 1,
|
|
271
|
+
lastAccessed: new Date()
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Evict least recently used entry
|
|
276
|
+
*/
|
|
277
|
+
evictLRU() {
|
|
278
|
+
let oldestId = null;
|
|
279
|
+
let oldestTime = Date.now();
|
|
280
|
+
for (const [id, entry] of this.cache.entries()) {
|
|
281
|
+
const lastAccessed = entry.lastAccessed.getTime();
|
|
282
|
+
if (lastAccessed < oldestTime) {
|
|
283
|
+
oldestTime = lastAccessed;
|
|
284
|
+
oldestId = id;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (oldestId) {
|
|
288
|
+
this.cache.delete(oldestId);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Update usage statistics
|
|
293
|
+
*/
|
|
294
|
+
updateUsageStats(skillId, loadTime, wasLoaded) {
|
|
295
|
+
if (!this.config.enableAnalytics)
|
|
296
|
+
return;
|
|
297
|
+
const stats = this.usageStats.get(skillId) || {
|
|
298
|
+
skillId,
|
|
299
|
+
loadCount: 0,
|
|
300
|
+
lastLoaded: new Date(),
|
|
301
|
+
avgLoadTime: 0,
|
|
302
|
+
usedByAgents: []
|
|
303
|
+
};
|
|
304
|
+
if (wasLoaded) {
|
|
305
|
+
stats.loadCount++;
|
|
306
|
+
stats.lastLoaded = new Date();
|
|
307
|
+
// Update rolling average load time
|
|
308
|
+
stats.avgLoadTime =
|
|
309
|
+
(stats.avgLoadTime * (stats.loadCount - 1) + loadTime) / stats.loadCount;
|
|
310
|
+
}
|
|
311
|
+
this.usageStats.set(skillId, stats);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Parse frontmatter from markdown file
|
|
315
|
+
*/
|
|
316
|
+
parseFrontmatter(content) {
|
|
317
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
318
|
+
if (!match)
|
|
319
|
+
return {};
|
|
320
|
+
const frontmatter = {};
|
|
321
|
+
const lines = match[1].split('\n');
|
|
322
|
+
for (const line of lines) {
|
|
323
|
+
const colonIndex = line.indexOf(':');
|
|
324
|
+
if (colonIndex === -1)
|
|
325
|
+
continue;
|
|
326
|
+
const key = line.substring(0, colonIndex).trim();
|
|
327
|
+
const value = line.substring(colonIndex + 1).trim();
|
|
328
|
+
frontmatter[key] = value;
|
|
329
|
+
}
|
|
330
|
+
return frontmatter;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
exports.DynamicSkillLoader = DynamicSkillLoader;
|
|
334
|
+
/**
|
|
335
|
+
* Default singleton instance
|
|
336
|
+
*/
|
|
337
|
+
let defaultLoader = null;
|
|
338
|
+
/**
|
|
339
|
+
* Get default loader instance
|
|
340
|
+
*/
|
|
341
|
+
function getDefaultLoader(config) {
|
|
342
|
+
if (!defaultLoader) {
|
|
343
|
+
defaultLoader = new DynamicSkillLoader(config);
|
|
344
|
+
}
|
|
345
|
+
return defaultLoader;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Reset default loader (useful for testing)
|
|
349
|
+
*/
|
|
350
|
+
function resetDefaultLoader() {
|
|
351
|
+
defaultLoader = null;
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=DynamicSkillLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicSkillLoader.js","sourceRoot":"","sources":["../../../src/core/skills/DynamicSkillLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest Generator for Dynamic Skill Loading
|
|
3
|
+
* Scans skill directories and generates/updates skills-manifest.json
|
|
4
|
+
*/
|
|
5
|
+
import { SkillManifest, SkillPriority } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Configuration for manifest generation
|
|
8
|
+
*/
|
|
9
|
+
export interface ManifestGeneratorConfig {
|
|
10
|
+
/** Path to skills directory */
|
|
11
|
+
skillsDir: string;
|
|
12
|
+
/** Output path for manifest */
|
|
13
|
+
outputPath: string;
|
|
14
|
+
/** Default priority for skills without explicit priority */
|
|
15
|
+
defaultPriority: SkillPriority;
|
|
16
|
+
/** Estimate tokens per line of content */
|
|
17
|
+
tokensPerLine: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Manifest Generator for creating and updating skill manifests
|
|
21
|
+
*/
|
|
22
|
+
export declare class ManifestGenerator {
|
|
23
|
+
private config;
|
|
24
|
+
constructor(config?: Partial<ManifestGeneratorConfig>);
|
|
25
|
+
/**
|
|
26
|
+
* Generate manifest from skill directories
|
|
27
|
+
*/
|
|
28
|
+
generate(): Promise<SkillManifest>;
|
|
29
|
+
/**
|
|
30
|
+
* Update existing manifest with new/changed skills
|
|
31
|
+
*/
|
|
32
|
+
update(): Promise<SkillManifest>;
|
|
33
|
+
/**
|
|
34
|
+
* Validate existing manifest against actual skill files
|
|
35
|
+
*/
|
|
36
|
+
validate(): Promise<{
|
|
37
|
+
valid: boolean;
|
|
38
|
+
errors: string[];
|
|
39
|
+
warnings: string[];
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Scan skill directories and extract metadata
|
|
43
|
+
*/
|
|
44
|
+
private scanSkillDirectories;
|
|
45
|
+
/**
|
|
46
|
+
* Get list of skill directories
|
|
47
|
+
*/
|
|
48
|
+
private getSkillDirectories;
|
|
49
|
+
/**
|
|
50
|
+
* Extract metadata from a skill directory
|
|
51
|
+
*/
|
|
52
|
+
private extractMetadata;
|
|
53
|
+
/**
|
|
54
|
+
* Parse YAML frontmatter from markdown
|
|
55
|
+
*/
|
|
56
|
+
private parseFrontmatter;
|
|
57
|
+
/**
|
|
58
|
+
* Detect category based on skill ID and frontmatter
|
|
59
|
+
*/
|
|
60
|
+
private detectCategory;
|
|
61
|
+
/**
|
|
62
|
+
* Check if category is valid
|
|
63
|
+
*/
|
|
64
|
+
private isValidCategory;
|
|
65
|
+
/**
|
|
66
|
+
* Detect priority based on skill ID and frontmatter
|
|
67
|
+
*/
|
|
68
|
+
private detectPriority;
|
|
69
|
+
/**
|
|
70
|
+
* Extract description from content (first paragraph after frontmatter)
|
|
71
|
+
*/
|
|
72
|
+
private extractDescription;
|
|
73
|
+
/**
|
|
74
|
+
* Extract keywords from frontmatter and content
|
|
75
|
+
*/
|
|
76
|
+
private extractKeywords;
|
|
77
|
+
/**
|
|
78
|
+
* Estimate token count for content
|
|
79
|
+
*/
|
|
80
|
+
private estimateTokens;
|
|
81
|
+
/**
|
|
82
|
+
* Format skill ID as human-readable name
|
|
83
|
+
*/
|
|
84
|
+
private formatName;
|
|
85
|
+
/**
|
|
86
|
+
* Calculate category counts
|
|
87
|
+
*/
|
|
88
|
+
private calculateCategoryCounts;
|
|
89
|
+
/**
|
|
90
|
+
* Get file modification time
|
|
91
|
+
*/
|
|
92
|
+
private getFileStats;
|
|
93
|
+
/**
|
|
94
|
+
* Write manifest to file
|
|
95
|
+
*/
|
|
96
|
+
private writeManifest;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* CLI entry point for manifest generation
|
|
100
|
+
*/
|
|
101
|
+
export declare function generateManifest(options?: Partial<ManifestGeneratorConfig>): Promise<SkillManifest>;
|
|
102
|
+
/**
|
|
103
|
+
* CLI entry point for manifest update
|
|
104
|
+
*/
|
|
105
|
+
export declare function updateManifest(options?: Partial<ManifestGeneratorConfig>): Promise<SkillManifest>;
|
|
106
|
+
/**
|
|
107
|
+
* CLI entry point for manifest validation
|
|
108
|
+
*/
|
|
109
|
+
export declare function validateManifest(options?: Partial<ManifestGeneratorConfig>): Promise<{
|
|
110
|
+
valid: boolean;
|
|
111
|
+
errors: string[];
|
|
112
|
+
warnings: string[];
|
|
113
|
+
}>;
|
|
114
|
+
//# sourceMappingURL=ManifestGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManifestGenerator.d.ts","sourceRoot":"","sources":["../../../src/core/skills/ManifestGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAiB,aAAa,EAAiB,aAAa,EAAE,MAAM,YAAY,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,eAAe,EAAE,aAAa,CAAC;IAC/B,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAC;CACvB;AAoCD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAA0B;gBAE5B,MAAM,GAAE,OAAO,CAAC,uBAAuB,CAAM;IAUzD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC;IAgBxC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC;IA8CtC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAmDnF;;OAEG;YACW,oBAAoB;IAuBlC;;OAEG;YACW,mBAAmB;IAWjC;;OAEG;YACW,eAAe;IA0B7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0BxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiB/B;;OAEG;YACW,YAAY;IAU1B;;OAEG;YACW,aAAa;CAI5B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAG7G;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAG3G;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAGxJ"}
|