@skillsmith/core 0.4.0 → 0.4.1
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/dist/.tsbuildinfo +1 -1
- package/dist/src/analysis/CodebaseAnalyzer.d.ts.map +1 -1
- package/dist/src/analysis/CodebaseAnalyzer.js.map +1 -1
- package/dist/src/analysis/adapters/__tests__/python.test.js.map +1 -1
- package/dist/src/analysis/language-detector.d.ts +4 -20
- package/dist/src/analysis/language-detector.d.ts.map +1 -1
- package/dist/src/analysis/language-detector.js +2 -399
- package/dist/src/analysis/language-detector.js.map +1 -1
- package/dist/src/analysis/language-detector.patterns.d.ts +17 -0
- package/dist/src/analysis/language-detector.patterns.d.ts.map +1 -0
- package/dist/src/analysis/language-detector.patterns.js +413 -0
- package/dist/src/analysis/language-detector.patterns.js.map +1 -0
- package/dist/src/analysis/language-detector.types.d.ts +48 -0
- package/dist/src/analysis/language-detector.types.d.ts.map +1 -0
- package/dist/src/analysis/language-detector.types.js +6 -0
- package/dist/src/analysis/language-detector.types.js.map +1 -0
- package/dist/src/analysis/metrics.d.ts +22 -219
- package/dist/src/analysis/metrics.d.ts.map +1 -1
- package/dist/src/analysis/metrics.implementations.d.ts +39 -0
- package/dist/src/analysis/metrics.implementations.d.ts.map +1 -0
- package/dist/src/analysis/metrics.implementations.js +114 -0
- package/dist/src/analysis/metrics.implementations.js.map +1 -0
- package/dist/src/analysis/metrics.js +21 -224
- package/dist/src/analysis/metrics.js.map +1 -1
- package/dist/src/analysis/metrics.types.d.ts +79 -0
- package/dist/src/analysis/metrics.types.d.ts.map +1 -0
- package/dist/src/analysis/metrics.types.js +6 -0
- package/dist/src/analysis/metrics.types.js.map +1 -0
- package/dist/src/analytics/ROIDashboardService.js +4 -2
- package/dist/src/analytics/ROIDashboardService.js.map +1 -1
- package/dist/src/api/cache.d.ts.map +1 -1
- package/dist/src/api/cache.js.map +1 -1
- package/dist/src/api/client.d.ts +1 -0
- package/dist/src/api/client.d.ts.map +1 -1
- package/dist/src/api/client.js +17 -3
- package/dist/src/api/client.js.map +1 -1
- package/dist/src/api/types.d.ts +1 -1
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/benchmarks/BenchmarkRunner.d.ts.map +1 -1
- package/dist/src/benchmarks/BenchmarkRunner.js +1 -1
- package/dist/src/benchmarks/BenchmarkRunner.js.map +1 -1
- package/dist/src/billing/BillingService.d.ts +15 -53
- package/dist/src/billing/BillingService.d.ts.map +1 -1
- package/dist/src/billing/BillingService.helpers.d.ts +15 -0
- package/dist/src/billing/BillingService.helpers.d.ts.map +1 -0
- package/dist/src/billing/BillingService.helpers.js +45 -0
- package/dist/src/billing/BillingService.helpers.js.map +1 -0
- package/dist/src/billing/BillingService.js +49 -179
- package/dist/src/billing/BillingService.js.map +1 -1
- package/dist/src/billing/BillingService.types.d.ts +52 -0
- package/dist/src/billing/BillingService.types.d.ts.map +1 -0
- package/dist/src/billing/BillingService.types.js +6 -0
- package/dist/src/billing/BillingService.types.js.map +1 -0
- package/dist/src/billing/StripeClient.d.ts +3 -2
- package/dist/src/billing/StripeClient.d.ts.map +1 -1
- package/dist/src/billing/StripeClient.js +4 -3
- package/dist/src/billing/StripeClient.js.map +1 -1
- package/dist/src/billing/StripeWebhookHandler.d.ts +13 -0
- package/dist/src/billing/StripeWebhookHandler.d.ts.map +1 -1
- package/dist/src/billing/StripeWebhookHandler.js +52 -9
- package/dist/src/billing/StripeWebhookHandler.js.map +1 -1
- package/dist/src/db/migration.d.ts +129 -0
- package/dist/src/db/migration.d.ts.map +1 -0
- package/dist/src/db/migration.js +289 -0
- package/dist/src/db/migration.js.map +1 -0
- package/dist/src/db/schema.d.ts +2 -2
- package/dist/src/db/schema.d.ts.map +1 -1
- package/dist/src/db/schema.js +23 -1
- package/dist/src/db/schema.js.map +1 -1
- package/dist/src/embeddings/hnsw-store.d.ts +8 -518
- package/dist/src/embeddings/hnsw-store.d.ts.map +1 -1
- package/dist/src/embeddings/hnsw-store.helpers.d.ts +83 -0
- package/dist/src/embeddings/hnsw-store.helpers.d.ts.map +1 -0
- package/dist/src/embeddings/hnsw-store.helpers.js +147 -0
- package/dist/src/embeddings/hnsw-store.helpers.js.map +1 -0
- package/dist/src/embeddings/hnsw-store.js +66 -517
- package/dist/src/embeddings/hnsw-store.js.map +1 -1
- package/dist/src/embeddings/hnsw-store.types.d.ts +154 -0
- package/dist/src/embeddings/hnsw-store.types.d.ts.map +1 -0
- package/dist/src/embeddings/hnsw-store.types.js +26 -0
- package/dist/src/embeddings/hnsw-store.types.js.map +1 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +1 -1
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +8 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +18 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/indexer/GitHubIndexer.d.ts.map +1 -1
- package/dist/src/indexer/GitHubIndexer.js +17 -4
- package/dist/src/indexer/GitHubIndexer.js.map +1 -1
- package/dist/src/indexer/SwarmIndexer.d.ts.map +1 -1
- package/dist/src/indexer/SwarmIndexer.js +1 -1
- package/dist/src/indexer/SwarmIndexer.js.map +1 -1
- package/dist/src/learning/PatternStore.d.ts +6 -426
- package/dist/src/learning/PatternStore.d.ts.map +1 -1
- package/dist/src/learning/PatternStore.helpers.d.ts +88 -0
- package/dist/src/learning/PatternStore.helpers.d.ts.map +1 -0
- package/dist/src/learning/PatternStore.helpers.js +286 -0
- package/dist/src/learning/PatternStore.helpers.js.map +1 -0
- package/dist/src/learning/PatternStore.js +52 -598
- package/dist/src/learning/PatternStore.js.map +1 -1
- package/dist/src/learning/PatternStore.queries.d.ts +83 -0
- package/dist/src/learning/PatternStore.queries.d.ts.map +1 -0
- package/dist/src/learning/PatternStore.queries.js +189 -0
- package/dist/src/learning/PatternStore.queries.js.map +1 -0
- package/dist/src/learning/PatternStore.types.d.ts +308 -0
- package/dist/src/learning/PatternStore.types.d.ts.map +1 -0
- package/dist/src/learning/PatternStore.types.js +44 -0
- package/dist/src/learning/PatternStore.types.js.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.d.ts +5 -345
- package/dist/src/learning/ReasoningBankIntegration.d.ts.map +1 -1
- package/dist/src/learning/ReasoningBankIntegration.helpers.d.ts +49 -0
- package/dist/src/learning/ReasoningBankIntegration.helpers.d.ts.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.helpers.js +180 -0
- package/dist/src/learning/ReasoningBankIntegration.helpers.js.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.js +21 -390
- package/dist/src/learning/ReasoningBankIntegration.js.map +1 -1
- package/dist/src/learning/ReasoningBankIntegration.types.d.ts +167 -0
- package/dist/src/learning/ReasoningBankIntegration.types.d.ts.map +1 -0
- package/dist/src/learning/ReasoningBankIntegration.types.js +51 -0
- package/dist/src/learning/ReasoningBankIntegration.types.js.map +1 -0
- package/dist/src/learning/interfaces.d.ts.map +1 -1
- package/dist/src/pipeline/DailyIndexPipeline.js +1 -1
- package/dist/src/pipeline/DailyIndexPipeline.js.map +1 -1
- package/dist/src/repositories/IndexerRepository.d.ts +1 -0
- package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
- package/dist/src/repositories/IndexerRepository.js +6 -0
- package/dist/src/repositories/IndexerRepository.js.map +1 -1
- package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
- package/dist/src/repositories/SkillRepository.js +20 -5
- package/dist/src/repositories/SkillRepository.js.map +1 -1
- package/dist/src/routing/SONARouter.d.ts +3 -101
- package/dist/src/routing/SONARouter.d.ts.map +1 -1
- package/dist/src/routing/SONARouter.helpers.d.ts +112 -0
- package/dist/src/routing/SONARouter.helpers.d.ts.map +1 -0
- package/dist/src/routing/SONARouter.helpers.js +184 -0
- package/dist/src/routing/SONARouter.helpers.js.map +1 -0
- package/dist/src/routing/SONARouter.js +16 -318
- package/dist/src/routing/SONARouter.js.map +1 -1
- package/dist/src/scripts/github-import/github-client.js +0 -1
- package/dist/src/scripts/github-import/github-client.js.map +1 -1
- package/dist/src/scripts/ingest-lenny-skills.d.ts +40 -0
- package/dist/src/scripts/ingest-lenny-skills.d.ts.map +1 -0
- package/dist/src/scripts/ingest-lenny-skills.js +346 -0
- package/dist/src/scripts/ingest-lenny-skills.js.map +1 -0
- package/dist/src/scripts/review-lenny-skills.d.ts +25 -0
- package/dist/src/scripts/review-lenny-skills.d.ts.map +1 -0
- package/dist/src/scripts/review-lenny-skills.js +520 -0
- package/dist/src/scripts/review-lenny-skills.js.map +1 -0
- package/dist/src/scripts/sync-to-supabase.d.ts +10 -0
- package/dist/src/scripts/sync-to-supabase.d.ts.map +1 -0
- package/dist/src/scripts/sync-to-supabase.js +93 -0
- package/dist/src/scripts/sync-to-supabase.js.map +1 -0
- package/dist/src/security/AuditLogger.js +1 -1
- package/dist/src/security/AuditLogger.js.map +1 -1
- package/dist/src/security/__tests__/pathValidation.test.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.d.ts +12 -88
- package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.formatters.d.ts +49 -0
- package/dist/src/security/scanner/SecurityScanner.formatters.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.formatters.js +139 -0
- package/dist/src/security/scanner/SecurityScanner.formatters.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.helpers.d.ts +40 -0
- package/dist/src/security/scanner/SecurityScanner.helpers.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.helpers.js +142 -0
- package/dist/src/security/scanner/SecurityScanner.helpers.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.js +26 -255
- package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
- package/dist/src/services/SearchService.d.ts +5 -0
- package/dist/src/services/SearchService.d.ts.map +1 -1
- package/dist/src/services/SearchService.js +143 -11
- package/dist/src/services/SearchService.js.map +1 -1
- package/dist/src/services/SkillAnalyzer.d.ts +117 -0
- package/dist/src/services/SkillAnalyzer.d.ts.map +1 -0
- package/dist/src/services/SkillAnalyzer.js +421 -0
- package/dist/src/services/SkillAnalyzer.js.map +1 -0
- package/dist/src/services/SkillDecomposer.d.ts +103 -0
- package/dist/src/services/SkillDecomposer.d.ts.map +1 -0
- package/dist/src/services/SkillDecomposer.js +359 -0
- package/dist/src/services/SkillDecomposer.js.map +1 -0
- package/dist/src/services/SubagentGenerator.d.ts +68 -0
- package/dist/src/services/SubagentGenerator.d.ts.map +1 -0
- package/dist/src/services/SubagentGenerator.js +319 -0
- package/dist/src/services/SubagentGenerator.js.map +1 -0
- package/dist/src/services/TransformationService.d.ts +163 -0
- package/dist/src/services/TransformationService.d.ts.map +1 -0
- package/dist/src/services/TransformationService.js +291 -0
- package/dist/src/services/TransformationService.js.map +1 -0
- package/dist/src/services/__tests__/SkillAnalyzer.test.d.ts +6 -0
- package/dist/src/services/__tests__/SkillAnalyzer.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/SkillAnalyzer.test.js +177 -0
- package/dist/src/services/__tests__/SkillAnalyzer.test.js.map +1 -0
- package/dist/src/services/__tests__/SkillDecomposer.test.d.ts +6 -0
- package/dist/src/services/__tests__/SkillDecomposer.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/SkillDecomposer.test.js +235 -0
- package/dist/src/services/__tests__/SkillDecomposer.test.js.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.test.d.ts +6 -0
- package/dist/src/services/__tests__/SubagentGenerator.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.test.js +174 -0
- package/dist/src/services/__tests__/SubagentGenerator.test.js.map +1 -0
- package/dist/src/services/__tests__/TransformationService.test.d.ts +6 -0
- package/dist/src/services/__tests__/TransformationService.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/TransformationService.test.js +242 -0
- package/dist/src/services/__tests__/TransformationService.test.js.map +1 -0
- package/dist/src/session/SessionContext.js +1 -1
- package/dist/src/session/SessionContext.js.map +1 -1
- package/dist/src/session/SessionManager.d.ts +3 -67
- package/dist/src/session/SessionManager.d.ts.map +1 -1
- package/dist/src/session/SessionManager.helpers.d.ts +68 -0
- package/dist/src/session/SessionManager.helpers.d.ts.map +1 -0
- package/dist/src/session/SessionManager.helpers.js +152 -0
- package/dist/src/session/SessionManager.helpers.js.map +1 -0
- package/dist/src/session/SessionManager.js +58 -163
- package/dist/src/session/SessionManager.js.map +1 -1
- package/dist/src/session/SessionManager.types.d.ts +88 -0
- package/dist/src/session/SessionManager.types.d.ts.map +1 -0
- package/dist/src/session/SessionManager.types.js +27 -0
- package/dist/src/session/SessionManager.types.js.map +1 -0
- package/dist/src/session/SessionRecovery.d.ts.map +1 -1
- package/dist/src/session/SessionRecovery.js +3 -2
- package/dist/src/session/SessionRecovery.js.map +1 -1
- package/dist/src/sources/RawUrlSourceAdapter.js.map +1 -1
- package/dist/src/sources/SourceAdapterRegistry.js +1 -1
- package/dist/src/sources/SourceAdapterRegistry.js.map +1 -1
- package/dist/src/telemetry/tracer.d.ts.map +1 -1
- package/dist/src/telemetry/tracer.js +2 -3
- package/dist/src/telemetry/tracer.js.map +1 -1
- package/dist/src/testing/MultiLLMProvider.d.ts +17 -293
- package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -1
- package/dist/src/testing/MultiLLMProvider.helpers.d.ts +54 -0
- package/dist/src/testing/MultiLLMProvider.helpers.d.ts.map +1 -0
- package/dist/src/testing/MultiLLMProvider.helpers.js +126 -0
- package/dist/src/testing/MultiLLMProvider.helpers.js.map +1 -0
- package/dist/src/testing/MultiLLMProvider.js +50 -323
- package/dist/src/testing/MultiLLMProvider.js.map +1 -1
- package/dist/src/testing/MultiLLMProvider.types.d.ts +253 -0
- package/dist/src/testing/MultiLLMProvider.types.d.ts.map +1 -0
- package/dist/src/testing/MultiLLMProvider.types.js +111 -0
- package/dist/src/testing/MultiLLMProvider.types.js.map +1 -0
- package/dist/src/triggers/__tests__/TriggerDetector.test.js +1 -1
- package/dist/src/triggers/__tests__/TriggerDetector.test.js.map +1 -1
- package/dist/src/types/skill.d.ts +29 -0
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/types/skill.js +11 -1
- package/dist/src/types/skill.js.map +1 -1
- package/dist/src/types.d.ts +22 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/retry.js +2 -2
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/validation/index.js +2 -2
- package/dist/src/validation/index.js.map +1 -1
- package/dist/src/webhooks/WebhookHandler.d.ts.map +1 -1
- package/dist/src/webhooks/WebhookHandler.js.map +1 -1
- package/dist/src/webhooks/WebhookPayload.js +1 -1
- package/dist/src/webhooks/WebhookPayload.js.map +1 -1
- package/dist/tests/Analytics.integration.test.js +2 -2
- package/dist/tests/Analytics.integration.test.js.map +1 -1
- package/dist/tests/AnalyticsRepository.test.js +3 -5
- package/dist/tests/AnalyticsRepository.test.js.map +1 -1
- package/dist/tests/AnalyticsStorage.test.js.map +1 -1
- package/dist/tests/ApiPartialResponses.test.d.ts +12 -0
- package/dist/tests/ApiPartialResponses.test.d.ts.map +1 -0
- package/dist/tests/ApiPartialResponses.test.js +202 -0
- package/dist/tests/ApiPartialResponses.test.js.map +1 -0
- package/dist/tests/AuditLogger.test.js.map +1 -1
- package/dist/tests/BenchmarkRunner.test.js +6 -6
- package/dist/tests/BenchmarkRunner.test.js.map +1 -1
- package/dist/tests/CacheSecurity.test.js.map +1 -1
- package/dist/tests/CodebaseAnalyzer.test.js.map +1 -1
- package/dist/tests/DailyIndexPipeline.test.js.map +1 -1
- package/dist/tests/EmbeddingService.test.js.map +1 -1
- package/dist/tests/GitHubIndexer.test.js +4 -3
- package/dist/tests/GitHubIndexer.test.js.map +1 -1
- package/dist/tests/MemoryProfiler.test.js +3 -3
- package/dist/tests/MemoryProfiler.test.js.map +1 -1
- package/dist/tests/QualityScorer.test.js.map +1 -1
- package/dist/tests/RateLimiter.test.js.map +1 -1
- package/dist/tests/ScraperAdapters.test.js.map +1 -1
- package/dist/tests/SecurityScanner.test.js +4 -4
- package/dist/tests/SecurityScanner.test.js.map +1 -1
- package/dist/tests/SessionManager.security.test.js +1 -1
- package/dist/tests/SessionManager.security.test.js.map +1 -1
- package/dist/tests/SessionManager.test.js +4 -4
- package/dist/tests/SessionManager.test.js.map +1 -1
- package/dist/tests/SwarmIndexer.test.js +1 -1
- package/dist/tests/SwarmIndexer.test.js.map +1 -1
- package/dist/tests/TieredCache.test.js +2 -11
- package/dist/tests/TieredCache.test.js.map +1 -1
- package/dist/tests/WebhookHandler.test.js.map +1 -1
- package/dist/tests/fixtures/api-responses/index.d.ts +119 -0
- package/dist/tests/fixtures/api-responses/index.d.ts.map +1 -0
- package/dist/tests/fixtures/api-responses/index.js +419 -0
- package/dist/tests/fixtures/api-responses/index.js.map +1 -0
- package/dist/tests/logger.test.js +1 -1
- package/dist/tests/logger.test.js.map +1 -1
- package/dist/tests/performance/LargeScalePerformance.test.js +1 -1
- package/dist/tests/performance/LargeScalePerformance.test.js.map +1 -1
- package/dist/tests/sanitization.test.js.map +1 -1
- package/dist/tests/session/SessionManager.helpers.test.d.ts +8 -0
- package/dist/tests/session/SessionManager.helpers.test.d.ts.map +1 -0
- package/dist/tests/session/SessionManager.helpers.test.js +105 -0
- package/dist/tests/session/SessionManager.helpers.test.js.map +1 -0
- package/dist/tests/sources.test.js.map +1 -1
- package/dist/tests/webhooks/WebhookHandler.idempotency.test.js +1 -1
- package/dist/tests/webhooks/WebhookHandler.idempotency.test.js.map +1 -1
- package/dist/tests/webhooks/WebhookPayload.security.test.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-XXX: SubagentGenerator - Generate companion subagent definitions
|
|
3
|
+
*
|
|
4
|
+
* Creates subagent definitions for skills that benefit from parallel
|
|
5
|
+
* execution with context isolation. Subagents enable:
|
|
6
|
+
* - 37-97% token savings through context isolation
|
|
7
|
+
* - Parallel execution of heavy operations
|
|
8
|
+
* - Specialized tool access per agent
|
|
9
|
+
*
|
|
10
|
+
* Part of the Skillsmith Optimization Layer for transforming
|
|
11
|
+
* community skills into more performant versions.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Tool detection patterns for analyzing skill content
|
|
15
|
+
*/
|
|
16
|
+
const TOOL_PATTERNS = {
|
|
17
|
+
Read: {
|
|
18
|
+
patterns: ['read file', 'read the', 'examine', 'view file', 'Read tool', 'check file'],
|
|
19
|
+
priority: 1,
|
|
20
|
+
},
|
|
21
|
+
Write: {
|
|
22
|
+
patterns: ['write file', 'create file', 'save to', 'output to', 'Write tool', 'generate file'],
|
|
23
|
+
priority: 2,
|
|
24
|
+
},
|
|
25
|
+
Edit: {
|
|
26
|
+
patterns: [
|
|
27
|
+
'edit file',
|
|
28
|
+
'modify',
|
|
29
|
+
'update file',
|
|
30
|
+
'patch',
|
|
31
|
+
'Edit tool',
|
|
32
|
+
'change file',
|
|
33
|
+
'refactor',
|
|
34
|
+
],
|
|
35
|
+
priority: 2,
|
|
36
|
+
},
|
|
37
|
+
Bash: {
|
|
38
|
+
patterns: [
|
|
39
|
+
'bash',
|
|
40
|
+
'npm',
|
|
41
|
+
'npx',
|
|
42
|
+
'git',
|
|
43
|
+
'docker',
|
|
44
|
+
'yarn',
|
|
45
|
+
'pnpm',
|
|
46
|
+
'terminal',
|
|
47
|
+
'shell',
|
|
48
|
+
'command',
|
|
49
|
+
],
|
|
50
|
+
priority: 3,
|
|
51
|
+
},
|
|
52
|
+
Grep: {
|
|
53
|
+
patterns: ['grep', 'search for', 'find text', 'pattern match', 'Grep tool', 'search in'],
|
|
54
|
+
priority: 1,
|
|
55
|
+
},
|
|
56
|
+
Glob: {
|
|
57
|
+
patterns: ['glob', 'find file', 'file pattern', 'list files', 'Glob tool', 'locate'],
|
|
58
|
+
priority: 1,
|
|
59
|
+
},
|
|
60
|
+
WebFetch: {
|
|
61
|
+
patterns: ['fetch', 'http', 'api call', 'url', 'WebFetch', 'download', 'request'],
|
|
62
|
+
priority: 2,
|
|
63
|
+
},
|
|
64
|
+
WebSearch: {
|
|
65
|
+
patterns: ['web search', 'search online', 'lookup online', 'WebSearch', 'search the web'],
|
|
66
|
+
priority: 2,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Minimum tools that most subagents need
|
|
71
|
+
*/
|
|
72
|
+
const BASE_TOOLS = ['Read'];
|
|
73
|
+
/**
|
|
74
|
+
* Generate tool usage guidelines for a subagent
|
|
75
|
+
*/
|
|
76
|
+
function generateToolGuidelines(tools) {
|
|
77
|
+
const guidelines = [];
|
|
78
|
+
if (tools.includes('Read')) {
|
|
79
|
+
guidelines.push('- **Read**: Use to examine files before modifications');
|
|
80
|
+
}
|
|
81
|
+
if (tools.includes('Write')) {
|
|
82
|
+
guidelines.push('- **Write**: Use for creating new files only');
|
|
83
|
+
}
|
|
84
|
+
if (tools.includes('Edit')) {
|
|
85
|
+
guidelines.push('- **Edit**: Use for modifying existing files');
|
|
86
|
+
}
|
|
87
|
+
if (tools.includes('Bash')) {
|
|
88
|
+
guidelines.push('- **Bash**: Use for command execution, prefer non-destructive commands');
|
|
89
|
+
}
|
|
90
|
+
if (tools.includes('Grep')) {
|
|
91
|
+
guidelines.push('- **Grep**: Use for searching file contents');
|
|
92
|
+
}
|
|
93
|
+
if (tools.includes('Glob')) {
|
|
94
|
+
guidelines.push('- **Glob**: Use for finding files by pattern');
|
|
95
|
+
}
|
|
96
|
+
if (tools.includes('WebFetch')) {
|
|
97
|
+
guidelines.push('- **WebFetch**: Use for fetching web content');
|
|
98
|
+
}
|
|
99
|
+
if (tools.includes('WebSearch')) {
|
|
100
|
+
guidelines.push('- **WebSearch**: Use for searching the web');
|
|
101
|
+
}
|
|
102
|
+
return guidelines.length > 0 ? guidelines.join('\n') : '- Use tools minimally and efficiently';
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Generate subagent markdown content
|
|
106
|
+
*/
|
|
107
|
+
function generateSubagentContent(name, description, triggerPhrases, tools, model) {
|
|
108
|
+
const triggerString = triggerPhrases.length > 0
|
|
109
|
+
? triggerPhrases.map((p) => `"${p}"`).join(', ')
|
|
110
|
+
: '[describe trigger conditions]';
|
|
111
|
+
const toolGuidelines = generateToolGuidelines(tools);
|
|
112
|
+
return `---
|
|
113
|
+
name: ${name}
|
|
114
|
+
description: ${description} Use when ${triggerString}.
|
|
115
|
+
skills: ${name.replace('-specialist', '')}
|
|
116
|
+
tools: ${tools.join(', ')}
|
|
117
|
+
model: ${model}
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Operating Protocol
|
|
121
|
+
|
|
122
|
+
1. Execute the ${name.replace('-specialist', '')} skill for the delegated task
|
|
123
|
+
2. Process all intermediate results internally
|
|
124
|
+
3. Return ONLY a structured summary to the orchestrator
|
|
125
|
+
|
|
126
|
+
## Output Format
|
|
127
|
+
|
|
128
|
+
- **Task:** [what was requested]
|
|
129
|
+
- **Actions:** [what you did]
|
|
130
|
+
- **Results:** [key outcomes, max 3-5 bullet points]
|
|
131
|
+
- **Artifacts:** [file paths or outputs created]
|
|
132
|
+
|
|
133
|
+
Keep response under 500 tokens unless explicitly requested otherwise.
|
|
134
|
+
|
|
135
|
+
## Tool Usage Guidelines
|
|
136
|
+
|
|
137
|
+
${toolGuidelines}
|
|
138
|
+
|
|
139
|
+
## Error Handling
|
|
140
|
+
|
|
141
|
+
If the task cannot be completed:
|
|
142
|
+
- Report specific blocking issue
|
|
143
|
+
- Suggest alternative approaches
|
|
144
|
+
- Do not retry indefinitely
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
*Generated by Skillsmith Optimization Layer*
|
|
149
|
+
`;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Generate CLAUDE.md integration snippet
|
|
153
|
+
*/
|
|
154
|
+
function generateClaudeMdSnippet(skillName, description, triggerPhrases, tools, model) {
|
|
155
|
+
const triggerPatterns = triggerPhrases.length > 0
|
|
156
|
+
? triggerPhrases.map((p) => `- "${p}"`).join('\n')
|
|
157
|
+
: '- [add trigger patterns]';
|
|
158
|
+
const exampleTask = triggerPhrases.length > 0 ? triggerPhrases[0] : `execute ${skillName} task`;
|
|
159
|
+
return `
|
|
160
|
+
### Subagent Delegation: ${skillName}
|
|
161
|
+
|
|
162
|
+
When tasks match ${skillName} triggers, delegate to the ${skillName}-specialist
|
|
163
|
+
subagent instead of executing directly. This provides context isolation and
|
|
164
|
+
~37-97% token savings.
|
|
165
|
+
|
|
166
|
+
**Trigger Patterns:**
|
|
167
|
+
${triggerPatterns}
|
|
168
|
+
|
|
169
|
+
**Delegation Example:**
|
|
170
|
+
\`\`\`
|
|
171
|
+
Task("${skillName}-specialist", "${exampleTask}", "${skillName}-specialist")
|
|
172
|
+
\`\`\`
|
|
173
|
+
|
|
174
|
+
**Model:** ${model}
|
|
175
|
+
**Tools:** ${tools.join(', ')}
|
|
176
|
+
`;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Extract trigger phrases from skill description and content
|
|
180
|
+
*/
|
|
181
|
+
function extractTriggerPhrases(description, content) {
|
|
182
|
+
const phrases = [];
|
|
183
|
+
// Common trigger phrase patterns
|
|
184
|
+
const patterns = [
|
|
185
|
+
/when\s+(?:you\s+)?(?:need\s+to\s+)?(.+?)(?:[.,]|$)/gi,
|
|
186
|
+
/use\s+(?:this\s+)?(?:when|for)\s+(.+?)(?:[.,]|$)/gi,
|
|
187
|
+
/(?:helps?\s+(?:you\s+)?(?:to\s+)?)?(.+?)(?:\s+tasks?|\s+operations?)/gi,
|
|
188
|
+
];
|
|
189
|
+
const textToSearch = description + ' ' + content.slice(0, 2000); // Search first 2000 chars
|
|
190
|
+
for (const pattern of patterns) {
|
|
191
|
+
let match;
|
|
192
|
+
while ((match = pattern.exec(textToSearch)) !== null) {
|
|
193
|
+
const phrase = match[1].trim().toLowerCase();
|
|
194
|
+
if (phrase.length >= 5 && phrase.length <= 50 && !phrases.includes(phrase)) {
|
|
195
|
+
phrases.push(phrase);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Extract from "trigger" or "invoke" mentions
|
|
200
|
+
const triggerMatch = content.match(/trigger[s]?\s*[:=]\s*["`']([^"`']+)["`']/gi);
|
|
201
|
+
if (triggerMatch) {
|
|
202
|
+
for (const match of triggerMatch) {
|
|
203
|
+
const phrase = match.replace(/trigger[s]?\s*[:=]\s*["`']/i, '').replace(/["`']$/, '');
|
|
204
|
+
if (!phrases.includes(phrase.toLowerCase())) {
|
|
205
|
+
phrases.push(phrase.toLowerCase());
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return phrases.slice(0, 5); // Limit to 5 phrases
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Determine optimal model for subagent
|
|
213
|
+
*/
|
|
214
|
+
function determineModel(toolUsage, lineCount) {
|
|
215
|
+
// Haiku for simple, fast operations
|
|
216
|
+
if (toolUsage.detectedTools.length <= 2 && lineCount < 200) {
|
|
217
|
+
return 'haiku';
|
|
218
|
+
}
|
|
219
|
+
// Opus for complex, reasoning-heavy tasks
|
|
220
|
+
if (toolUsage.bashCommandCount > 5 ||
|
|
221
|
+
(toolUsage.fileReadCount > 3 && toolUsage.fileWriteCount > 3)) {
|
|
222
|
+
return 'opus';
|
|
223
|
+
}
|
|
224
|
+
// Sonnet for balanced workloads (default)
|
|
225
|
+
return 'sonnet';
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Detect tools needed from skill content
|
|
229
|
+
*/
|
|
230
|
+
function detectTools(content) {
|
|
231
|
+
const lowerContent = content.toLowerCase();
|
|
232
|
+
const detectedTools = new Set(BASE_TOOLS);
|
|
233
|
+
for (const [tool, config] of Object.entries(TOOL_PATTERNS)) {
|
|
234
|
+
for (const pattern of config.patterns) {
|
|
235
|
+
if (lowerContent.includes(pattern.toLowerCase())) {
|
|
236
|
+
detectedTools.add(tool);
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return Array.from(detectedTools);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Generate a companion subagent for a skill
|
|
245
|
+
*
|
|
246
|
+
* @param skillName - The name of the skill
|
|
247
|
+
* @param description - The skill's description
|
|
248
|
+
* @param content - The full SKILL.md content
|
|
249
|
+
* @param analysis - Analysis from SkillAnalyzer
|
|
250
|
+
* @returns Subagent generation result
|
|
251
|
+
*/
|
|
252
|
+
export function generateSubagent(skillName, description, content, analysis) {
|
|
253
|
+
// Check if subagent is recommended
|
|
254
|
+
if (!analysis.toolUsage.suggestsSubagent && analysis.lineCount < 300) {
|
|
255
|
+
return {
|
|
256
|
+
generated: false,
|
|
257
|
+
reason: 'Skill does not have heavy tool usage or complexity that would benefit from a subagent',
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
// Detect tools from content (supplement analysis)
|
|
261
|
+
const detectedTools = detectTools(content);
|
|
262
|
+
const allTools = Array.from(new Set([...analysis.toolUsage.detectedTools, ...detectedTools]));
|
|
263
|
+
// Extract trigger phrases
|
|
264
|
+
const triggerPhrases = extractTriggerPhrases(description, content);
|
|
265
|
+
// Determine model
|
|
266
|
+
const model = determineModel(analysis.toolUsage, analysis.lineCount);
|
|
267
|
+
// Generate subagent name
|
|
268
|
+
const subagentName = `${skillName}-specialist`;
|
|
269
|
+
// Generate subagent description
|
|
270
|
+
const subagentDescription = description || `Specialist agent for ${skillName} operations`;
|
|
271
|
+
// Generate content
|
|
272
|
+
const subagentContent = generateSubagentContent(subagentName, subagentDescription, triggerPhrases, allTools, model);
|
|
273
|
+
// Generate CLAUDE.md snippet
|
|
274
|
+
const claudeMdSnippet = generateClaudeMdSnippet(skillName, subagentDescription, triggerPhrases, allTools, model);
|
|
275
|
+
return {
|
|
276
|
+
generated: true,
|
|
277
|
+
subagent: {
|
|
278
|
+
name: subagentName,
|
|
279
|
+
description: subagentDescription,
|
|
280
|
+
triggerPhrases,
|
|
281
|
+
tools: allTools,
|
|
282
|
+
model,
|
|
283
|
+
content: subagentContent,
|
|
284
|
+
},
|
|
285
|
+
claudeMdSnippet,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Generate a minimal subagent for skills that don't need full analysis
|
|
290
|
+
*
|
|
291
|
+
* @param skillName - The name of the skill
|
|
292
|
+
* @param description - The skill's description
|
|
293
|
+
* @param content - The full SKILL.md content
|
|
294
|
+
* @returns Subagent generation result
|
|
295
|
+
*/
|
|
296
|
+
export function generateMinimalSubagent(skillName, description, content) {
|
|
297
|
+
const detectedTools = detectTools(content);
|
|
298
|
+
const triggerPhrases = extractTriggerPhrases(description, content);
|
|
299
|
+
// Default to sonnet for minimal subagents
|
|
300
|
+
const model = 'sonnet';
|
|
301
|
+
const subagentName = `${skillName}-specialist`;
|
|
302
|
+
const subagentDescription = description || `Specialist agent for ${skillName} operations`;
|
|
303
|
+
const subagentContent = generateSubagentContent(subagentName, subagentDescription, triggerPhrases, detectedTools, model);
|
|
304
|
+
const claudeMdSnippet = generateClaudeMdSnippet(skillName, subagentDescription, triggerPhrases, detectedTools, model);
|
|
305
|
+
return {
|
|
306
|
+
generated: true,
|
|
307
|
+
subagent: {
|
|
308
|
+
name: subagentName,
|
|
309
|
+
description: subagentDescription,
|
|
310
|
+
triggerPhrases,
|
|
311
|
+
tools: detectedTools,
|
|
312
|
+
model,
|
|
313
|
+
content: subagentContent,
|
|
314
|
+
},
|
|
315
|
+
claudeMdSnippet,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
export default { generateSubagent, generateMinimalSubagent };
|
|
319
|
+
//# sourceMappingURL=SubagentGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubagentGenerator.js","sourceRoot":"","sources":["../../../src/services/SubagentGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-XXX: TransformationService - Orchestrate skill optimization pipeline
|
|
3
|
+
*
|
|
4
|
+
* The central service for transforming community skills into optimized versions.
|
|
5
|
+
* Coordinates the full pipeline:
|
|
6
|
+
* 1. SkillAnalyzer - Analyze skill for optimization patterns
|
|
7
|
+
* 2. SkillDecomposer - Decompose large skills into sub-skills
|
|
8
|
+
* 3. SubagentGenerator - Generate companion subagent definitions
|
|
9
|
+
* 4. Caching - Cache transformed skills for reuse
|
|
10
|
+
*
|
|
11
|
+
* Implements the hybrid approach:
|
|
12
|
+
* - Hot skills (>100 installs): Pre-transformed, cached
|
|
13
|
+
* - Warm skills (10-100 installs): JIT on first install, cached
|
|
14
|
+
* - Cold skills (<10 installs): JIT on demand, short TTL
|
|
15
|
+
*
|
|
16
|
+
* Part of the Skillsmith Optimization Layer.
|
|
17
|
+
*/
|
|
18
|
+
import type { Database as DatabaseType } from 'better-sqlite3';
|
|
19
|
+
import { type SkillAnalysis } from './SkillAnalyzer.js';
|
|
20
|
+
import { type SubagentDefinition } from './SubagentGenerator.js';
|
|
21
|
+
/**
|
|
22
|
+
* Full transformation result for a skill
|
|
23
|
+
*/
|
|
24
|
+
export interface TransformationResult {
|
|
25
|
+
/** Whether transformation was applied */
|
|
26
|
+
transformed: boolean;
|
|
27
|
+
/** The optimized main SKILL.md content */
|
|
28
|
+
mainSkillContent: string;
|
|
29
|
+
/** Sub-skills (if decomposed) */
|
|
30
|
+
subSkills: Array<{
|
|
31
|
+
filename: string;
|
|
32
|
+
content: string;
|
|
33
|
+
}>;
|
|
34
|
+
/** Companion subagent (if generated) */
|
|
35
|
+
subagent?: SubagentDefinition;
|
|
36
|
+
/** CLAUDE.md integration snippet */
|
|
37
|
+
claudeMdSnippet?: string;
|
|
38
|
+
/** Transformation statistics */
|
|
39
|
+
stats: TransformationStats;
|
|
40
|
+
/** Analysis that informed the transformation */
|
|
41
|
+
analysis: SkillAnalysis;
|
|
42
|
+
/** Attribution footer added to content */
|
|
43
|
+
attribution: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Statistics about the transformation
|
|
47
|
+
*/
|
|
48
|
+
export interface TransformationStats {
|
|
49
|
+
/** Original content line count */
|
|
50
|
+
originalLines: number;
|
|
51
|
+
/** Optimized main skill line count */
|
|
52
|
+
optimizedLines: number;
|
|
53
|
+
/** Number of sub-skills extracted */
|
|
54
|
+
subSkillCount: number;
|
|
55
|
+
/** Whether Task() calls were parallelized */
|
|
56
|
+
tasksParallelized: boolean;
|
|
57
|
+
/** Whether subagent was generated */
|
|
58
|
+
subagentGenerated: boolean;
|
|
59
|
+
/** Estimated token reduction percentage */
|
|
60
|
+
tokenReductionPercent: number;
|
|
61
|
+
/** Transformation duration in ms */
|
|
62
|
+
transformDurationMs: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Configuration for TransformationService
|
|
66
|
+
*/
|
|
67
|
+
export interface TransformationServiceOptions {
|
|
68
|
+
/** Cache TTL in seconds (default: 3600 = 1 hour) */
|
|
69
|
+
cacheTtl?: number;
|
|
70
|
+
/** Enable caching (default: true) */
|
|
71
|
+
enableCache?: boolean;
|
|
72
|
+
/** Force re-transformation even if cached (default: false) */
|
|
73
|
+
forceTransform?: boolean;
|
|
74
|
+
/** Transformation version for cache invalidation */
|
|
75
|
+
version?: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* TransformationService orchestrates the skill optimization pipeline
|
|
79
|
+
*/
|
|
80
|
+
export declare class TransformationService {
|
|
81
|
+
private cache;
|
|
82
|
+
private options;
|
|
83
|
+
/**
|
|
84
|
+
* Create a new TransformationService
|
|
85
|
+
*
|
|
86
|
+
* @param db - Database connection (optional, for caching)
|
|
87
|
+
* @param options - Service configuration
|
|
88
|
+
*/
|
|
89
|
+
constructor(db?: DatabaseType, options?: TransformationServiceOptions);
|
|
90
|
+
/**
|
|
91
|
+
* Transform a skill through the full optimization pipeline
|
|
92
|
+
*
|
|
93
|
+
* @param skillId - Unique identifier for the skill (for caching)
|
|
94
|
+
* @param skillName - Human-readable skill name
|
|
95
|
+
* @param description - Skill description
|
|
96
|
+
* @param content - The full SKILL.md content
|
|
97
|
+
* @returns Transformation result
|
|
98
|
+
*/
|
|
99
|
+
transform(skillId: string, skillName: string, description: string, content: string): Promise<TransformationResult>;
|
|
100
|
+
/**
|
|
101
|
+
* Quick transform without caching (for testing or one-off transforms)
|
|
102
|
+
*
|
|
103
|
+
* @param skillName - Human-readable skill name
|
|
104
|
+
* @param description - Skill description
|
|
105
|
+
* @param content - The full SKILL.md content
|
|
106
|
+
* @returns Transformation result
|
|
107
|
+
*/
|
|
108
|
+
transformSync(skillName: string, description: string, content: string): TransformationResult;
|
|
109
|
+
/**
|
|
110
|
+
* Check if a skill would benefit from transformation without fully transforming
|
|
111
|
+
*
|
|
112
|
+
* @param content - The SKILL.md content
|
|
113
|
+
* @returns Analysis with transformation recommendations
|
|
114
|
+
*/
|
|
115
|
+
analyze(content: string): SkillAnalysis;
|
|
116
|
+
/**
|
|
117
|
+
* Get cached transformation if available and valid
|
|
118
|
+
*/
|
|
119
|
+
private getCachedTransformation;
|
|
120
|
+
/**
|
|
121
|
+
* Cache a transformation result
|
|
122
|
+
*/
|
|
123
|
+
private cacheTransformation;
|
|
124
|
+
/**
|
|
125
|
+
* Build cache key for a skill
|
|
126
|
+
*/
|
|
127
|
+
private buildCacheKey;
|
|
128
|
+
/**
|
|
129
|
+
* Simple hash function for content comparison
|
|
130
|
+
*/
|
|
131
|
+
private hashContent;
|
|
132
|
+
/**
|
|
133
|
+
* Create minimal result for skills that don't need transformation
|
|
134
|
+
*/
|
|
135
|
+
private createMinimalResult;
|
|
136
|
+
/**
|
|
137
|
+
* Build full transformation result
|
|
138
|
+
*/
|
|
139
|
+
private buildResult;
|
|
140
|
+
/**
|
|
141
|
+
* Clear transformation cache
|
|
142
|
+
*/
|
|
143
|
+
clearCache(): number;
|
|
144
|
+
/**
|
|
145
|
+
* Get cache statistics
|
|
146
|
+
*/
|
|
147
|
+
getCacheStats(): {
|
|
148
|
+
enabled: boolean;
|
|
149
|
+
ttl: number;
|
|
150
|
+
version: string;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Create a standalone transformation (no caching)
|
|
155
|
+
*
|
|
156
|
+
* @param skillName - Human-readable skill name
|
|
157
|
+
* @param description - Skill description
|
|
158
|
+
* @param content - The full SKILL.md content
|
|
159
|
+
* @returns Transformation result
|
|
160
|
+
*/
|
|
161
|
+
export declare function transformSkill(skillName: string, description: string, content: string): TransformationResult;
|
|
162
|
+
export default TransformationService;
|
|
163
|
+
//# sourceMappingURL=TransformationService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransformationService.d.ts","sourceRoot":"","sources":["../../../src/services/TransformationService.ts"],"names":[],"mappings":"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"}
|