@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.
Files changed (308) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/src/analysis/CodebaseAnalyzer.d.ts.map +1 -1
  3. package/dist/src/analysis/CodebaseAnalyzer.js.map +1 -1
  4. package/dist/src/analysis/adapters/__tests__/python.test.js.map +1 -1
  5. package/dist/src/analysis/language-detector.d.ts +4 -20
  6. package/dist/src/analysis/language-detector.d.ts.map +1 -1
  7. package/dist/src/analysis/language-detector.js +2 -399
  8. package/dist/src/analysis/language-detector.js.map +1 -1
  9. package/dist/src/analysis/language-detector.patterns.d.ts +17 -0
  10. package/dist/src/analysis/language-detector.patterns.d.ts.map +1 -0
  11. package/dist/src/analysis/language-detector.patterns.js +413 -0
  12. package/dist/src/analysis/language-detector.patterns.js.map +1 -0
  13. package/dist/src/analysis/language-detector.types.d.ts +48 -0
  14. package/dist/src/analysis/language-detector.types.d.ts.map +1 -0
  15. package/dist/src/analysis/language-detector.types.js +6 -0
  16. package/dist/src/analysis/language-detector.types.js.map +1 -0
  17. package/dist/src/analysis/metrics.d.ts +22 -219
  18. package/dist/src/analysis/metrics.d.ts.map +1 -1
  19. package/dist/src/analysis/metrics.implementations.d.ts +39 -0
  20. package/dist/src/analysis/metrics.implementations.d.ts.map +1 -0
  21. package/dist/src/analysis/metrics.implementations.js +114 -0
  22. package/dist/src/analysis/metrics.implementations.js.map +1 -0
  23. package/dist/src/analysis/metrics.js +21 -224
  24. package/dist/src/analysis/metrics.js.map +1 -1
  25. package/dist/src/analysis/metrics.types.d.ts +79 -0
  26. package/dist/src/analysis/metrics.types.d.ts.map +1 -0
  27. package/dist/src/analysis/metrics.types.js +6 -0
  28. package/dist/src/analysis/metrics.types.js.map +1 -0
  29. package/dist/src/analytics/ROIDashboardService.js +4 -2
  30. package/dist/src/analytics/ROIDashboardService.js.map +1 -1
  31. package/dist/src/api/cache.d.ts.map +1 -1
  32. package/dist/src/api/cache.js.map +1 -1
  33. package/dist/src/api/client.d.ts +1 -0
  34. package/dist/src/api/client.d.ts.map +1 -1
  35. package/dist/src/api/client.js +17 -3
  36. package/dist/src/api/client.js.map +1 -1
  37. package/dist/src/api/types.d.ts +1 -1
  38. package/dist/src/api/types.d.ts.map +1 -1
  39. package/dist/src/benchmarks/BenchmarkRunner.d.ts.map +1 -1
  40. package/dist/src/benchmarks/BenchmarkRunner.js +1 -1
  41. package/dist/src/benchmarks/BenchmarkRunner.js.map +1 -1
  42. package/dist/src/billing/BillingService.d.ts +15 -53
  43. package/dist/src/billing/BillingService.d.ts.map +1 -1
  44. package/dist/src/billing/BillingService.helpers.d.ts +15 -0
  45. package/dist/src/billing/BillingService.helpers.d.ts.map +1 -0
  46. package/dist/src/billing/BillingService.helpers.js +45 -0
  47. package/dist/src/billing/BillingService.helpers.js.map +1 -0
  48. package/dist/src/billing/BillingService.js +49 -179
  49. package/dist/src/billing/BillingService.js.map +1 -1
  50. package/dist/src/billing/BillingService.types.d.ts +52 -0
  51. package/dist/src/billing/BillingService.types.d.ts.map +1 -0
  52. package/dist/src/billing/BillingService.types.js +6 -0
  53. package/dist/src/billing/BillingService.types.js.map +1 -0
  54. package/dist/src/billing/StripeClient.d.ts +3 -2
  55. package/dist/src/billing/StripeClient.d.ts.map +1 -1
  56. package/dist/src/billing/StripeClient.js +4 -3
  57. package/dist/src/billing/StripeClient.js.map +1 -1
  58. package/dist/src/billing/StripeWebhookHandler.d.ts +13 -0
  59. package/dist/src/billing/StripeWebhookHandler.d.ts.map +1 -1
  60. package/dist/src/billing/StripeWebhookHandler.js +52 -9
  61. package/dist/src/billing/StripeWebhookHandler.js.map +1 -1
  62. package/dist/src/db/migration.d.ts +129 -0
  63. package/dist/src/db/migration.d.ts.map +1 -0
  64. package/dist/src/db/migration.js +289 -0
  65. package/dist/src/db/migration.js.map +1 -0
  66. package/dist/src/db/schema.d.ts +2 -2
  67. package/dist/src/db/schema.d.ts.map +1 -1
  68. package/dist/src/db/schema.js +23 -1
  69. package/dist/src/db/schema.js.map +1 -1
  70. package/dist/src/embeddings/hnsw-store.d.ts +8 -518
  71. package/dist/src/embeddings/hnsw-store.d.ts.map +1 -1
  72. package/dist/src/embeddings/hnsw-store.helpers.d.ts +83 -0
  73. package/dist/src/embeddings/hnsw-store.helpers.d.ts.map +1 -0
  74. package/dist/src/embeddings/hnsw-store.helpers.js +147 -0
  75. package/dist/src/embeddings/hnsw-store.helpers.js.map +1 -0
  76. package/dist/src/embeddings/hnsw-store.js +66 -517
  77. package/dist/src/embeddings/hnsw-store.js.map +1 -1
  78. package/dist/src/embeddings/hnsw-store.types.d.ts +154 -0
  79. package/dist/src/embeddings/hnsw-store.types.d.ts.map +1 -0
  80. package/dist/src/embeddings/hnsw-store.types.js +26 -0
  81. package/dist/src/embeddings/hnsw-store.types.js.map +1 -0
  82. package/dist/src/errors.d.ts.map +1 -1
  83. package/dist/src/errors.js +1 -1
  84. package/dist/src/errors.js.map +1 -1
  85. package/dist/src/index.d.ts +8 -1
  86. package/dist/src/index.d.ts.map +1 -1
  87. package/dist/src/index.js +18 -0
  88. package/dist/src/index.js.map +1 -1
  89. package/dist/src/indexer/GitHubIndexer.d.ts.map +1 -1
  90. package/dist/src/indexer/GitHubIndexer.js +17 -4
  91. package/dist/src/indexer/GitHubIndexer.js.map +1 -1
  92. package/dist/src/indexer/SwarmIndexer.d.ts.map +1 -1
  93. package/dist/src/indexer/SwarmIndexer.js +1 -1
  94. package/dist/src/indexer/SwarmIndexer.js.map +1 -1
  95. package/dist/src/learning/PatternStore.d.ts +6 -426
  96. package/dist/src/learning/PatternStore.d.ts.map +1 -1
  97. package/dist/src/learning/PatternStore.helpers.d.ts +88 -0
  98. package/dist/src/learning/PatternStore.helpers.d.ts.map +1 -0
  99. package/dist/src/learning/PatternStore.helpers.js +286 -0
  100. package/dist/src/learning/PatternStore.helpers.js.map +1 -0
  101. package/dist/src/learning/PatternStore.js +52 -598
  102. package/dist/src/learning/PatternStore.js.map +1 -1
  103. package/dist/src/learning/PatternStore.queries.d.ts +83 -0
  104. package/dist/src/learning/PatternStore.queries.d.ts.map +1 -0
  105. package/dist/src/learning/PatternStore.queries.js +189 -0
  106. package/dist/src/learning/PatternStore.queries.js.map +1 -0
  107. package/dist/src/learning/PatternStore.types.d.ts +308 -0
  108. package/dist/src/learning/PatternStore.types.d.ts.map +1 -0
  109. package/dist/src/learning/PatternStore.types.js +44 -0
  110. package/dist/src/learning/PatternStore.types.js.map +1 -0
  111. package/dist/src/learning/ReasoningBankIntegration.d.ts +5 -345
  112. package/dist/src/learning/ReasoningBankIntegration.d.ts.map +1 -1
  113. package/dist/src/learning/ReasoningBankIntegration.helpers.d.ts +49 -0
  114. package/dist/src/learning/ReasoningBankIntegration.helpers.d.ts.map +1 -0
  115. package/dist/src/learning/ReasoningBankIntegration.helpers.js +180 -0
  116. package/dist/src/learning/ReasoningBankIntegration.helpers.js.map +1 -0
  117. package/dist/src/learning/ReasoningBankIntegration.js +21 -390
  118. package/dist/src/learning/ReasoningBankIntegration.js.map +1 -1
  119. package/dist/src/learning/ReasoningBankIntegration.types.d.ts +167 -0
  120. package/dist/src/learning/ReasoningBankIntegration.types.d.ts.map +1 -0
  121. package/dist/src/learning/ReasoningBankIntegration.types.js +51 -0
  122. package/dist/src/learning/ReasoningBankIntegration.types.js.map +1 -0
  123. package/dist/src/learning/interfaces.d.ts.map +1 -1
  124. package/dist/src/pipeline/DailyIndexPipeline.js +1 -1
  125. package/dist/src/pipeline/DailyIndexPipeline.js.map +1 -1
  126. package/dist/src/repositories/IndexerRepository.d.ts +1 -0
  127. package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
  128. package/dist/src/repositories/IndexerRepository.js +6 -0
  129. package/dist/src/repositories/IndexerRepository.js.map +1 -1
  130. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  131. package/dist/src/repositories/SkillRepository.js +20 -5
  132. package/dist/src/repositories/SkillRepository.js.map +1 -1
  133. package/dist/src/routing/SONARouter.d.ts +3 -101
  134. package/dist/src/routing/SONARouter.d.ts.map +1 -1
  135. package/dist/src/routing/SONARouter.helpers.d.ts +112 -0
  136. package/dist/src/routing/SONARouter.helpers.d.ts.map +1 -0
  137. package/dist/src/routing/SONARouter.helpers.js +184 -0
  138. package/dist/src/routing/SONARouter.helpers.js.map +1 -0
  139. package/dist/src/routing/SONARouter.js +16 -318
  140. package/dist/src/routing/SONARouter.js.map +1 -1
  141. package/dist/src/scripts/github-import/github-client.js +0 -1
  142. package/dist/src/scripts/github-import/github-client.js.map +1 -1
  143. package/dist/src/scripts/ingest-lenny-skills.d.ts +40 -0
  144. package/dist/src/scripts/ingest-lenny-skills.d.ts.map +1 -0
  145. package/dist/src/scripts/ingest-lenny-skills.js +346 -0
  146. package/dist/src/scripts/ingest-lenny-skills.js.map +1 -0
  147. package/dist/src/scripts/review-lenny-skills.d.ts +25 -0
  148. package/dist/src/scripts/review-lenny-skills.d.ts.map +1 -0
  149. package/dist/src/scripts/review-lenny-skills.js +520 -0
  150. package/dist/src/scripts/review-lenny-skills.js.map +1 -0
  151. package/dist/src/scripts/sync-to-supabase.d.ts +10 -0
  152. package/dist/src/scripts/sync-to-supabase.d.ts.map +1 -0
  153. package/dist/src/scripts/sync-to-supabase.js +93 -0
  154. package/dist/src/scripts/sync-to-supabase.js.map +1 -0
  155. package/dist/src/security/AuditLogger.js +1 -1
  156. package/dist/src/security/AuditLogger.js.map +1 -1
  157. package/dist/src/security/__tests__/pathValidation.test.js.map +1 -1
  158. package/dist/src/security/scanner/SecurityScanner.d.ts +12 -88
  159. package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
  160. package/dist/src/security/scanner/SecurityScanner.formatters.d.ts +49 -0
  161. package/dist/src/security/scanner/SecurityScanner.formatters.d.ts.map +1 -0
  162. package/dist/src/security/scanner/SecurityScanner.formatters.js +139 -0
  163. package/dist/src/security/scanner/SecurityScanner.formatters.js.map +1 -0
  164. package/dist/src/security/scanner/SecurityScanner.helpers.d.ts +40 -0
  165. package/dist/src/security/scanner/SecurityScanner.helpers.d.ts.map +1 -0
  166. package/dist/src/security/scanner/SecurityScanner.helpers.js +142 -0
  167. package/dist/src/security/scanner/SecurityScanner.helpers.js.map +1 -0
  168. package/dist/src/security/scanner/SecurityScanner.js +26 -255
  169. package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
  170. package/dist/src/services/SearchService.d.ts +5 -0
  171. package/dist/src/services/SearchService.d.ts.map +1 -1
  172. package/dist/src/services/SearchService.js +143 -11
  173. package/dist/src/services/SearchService.js.map +1 -1
  174. package/dist/src/services/SkillAnalyzer.d.ts +117 -0
  175. package/dist/src/services/SkillAnalyzer.d.ts.map +1 -0
  176. package/dist/src/services/SkillAnalyzer.js +421 -0
  177. package/dist/src/services/SkillAnalyzer.js.map +1 -0
  178. package/dist/src/services/SkillDecomposer.d.ts +103 -0
  179. package/dist/src/services/SkillDecomposer.d.ts.map +1 -0
  180. package/dist/src/services/SkillDecomposer.js +359 -0
  181. package/dist/src/services/SkillDecomposer.js.map +1 -0
  182. package/dist/src/services/SubagentGenerator.d.ts +68 -0
  183. package/dist/src/services/SubagentGenerator.d.ts.map +1 -0
  184. package/dist/src/services/SubagentGenerator.js +319 -0
  185. package/dist/src/services/SubagentGenerator.js.map +1 -0
  186. package/dist/src/services/TransformationService.d.ts +163 -0
  187. package/dist/src/services/TransformationService.d.ts.map +1 -0
  188. package/dist/src/services/TransformationService.js +291 -0
  189. package/dist/src/services/TransformationService.js.map +1 -0
  190. package/dist/src/services/__tests__/SkillAnalyzer.test.d.ts +6 -0
  191. package/dist/src/services/__tests__/SkillAnalyzer.test.d.ts.map +1 -0
  192. package/dist/src/services/__tests__/SkillAnalyzer.test.js +177 -0
  193. package/dist/src/services/__tests__/SkillAnalyzer.test.js.map +1 -0
  194. package/dist/src/services/__tests__/SkillDecomposer.test.d.ts +6 -0
  195. package/dist/src/services/__tests__/SkillDecomposer.test.d.ts.map +1 -0
  196. package/dist/src/services/__tests__/SkillDecomposer.test.js +235 -0
  197. package/dist/src/services/__tests__/SkillDecomposer.test.js.map +1 -0
  198. package/dist/src/services/__tests__/SubagentGenerator.test.d.ts +6 -0
  199. package/dist/src/services/__tests__/SubagentGenerator.test.d.ts.map +1 -0
  200. package/dist/src/services/__tests__/SubagentGenerator.test.js +174 -0
  201. package/dist/src/services/__tests__/SubagentGenerator.test.js.map +1 -0
  202. package/dist/src/services/__tests__/TransformationService.test.d.ts +6 -0
  203. package/dist/src/services/__tests__/TransformationService.test.d.ts.map +1 -0
  204. package/dist/src/services/__tests__/TransformationService.test.js +242 -0
  205. package/dist/src/services/__tests__/TransformationService.test.js.map +1 -0
  206. package/dist/src/session/SessionContext.js +1 -1
  207. package/dist/src/session/SessionContext.js.map +1 -1
  208. package/dist/src/session/SessionManager.d.ts +3 -67
  209. package/dist/src/session/SessionManager.d.ts.map +1 -1
  210. package/dist/src/session/SessionManager.helpers.d.ts +68 -0
  211. package/dist/src/session/SessionManager.helpers.d.ts.map +1 -0
  212. package/dist/src/session/SessionManager.helpers.js +152 -0
  213. package/dist/src/session/SessionManager.helpers.js.map +1 -0
  214. package/dist/src/session/SessionManager.js +58 -163
  215. package/dist/src/session/SessionManager.js.map +1 -1
  216. package/dist/src/session/SessionManager.types.d.ts +88 -0
  217. package/dist/src/session/SessionManager.types.d.ts.map +1 -0
  218. package/dist/src/session/SessionManager.types.js +27 -0
  219. package/dist/src/session/SessionManager.types.js.map +1 -0
  220. package/dist/src/session/SessionRecovery.d.ts.map +1 -1
  221. package/dist/src/session/SessionRecovery.js +3 -2
  222. package/dist/src/session/SessionRecovery.js.map +1 -1
  223. package/dist/src/sources/RawUrlSourceAdapter.js.map +1 -1
  224. package/dist/src/sources/SourceAdapterRegistry.js +1 -1
  225. package/dist/src/sources/SourceAdapterRegistry.js.map +1 -1
  226. package/dist/src/telemetry/tracer.d.ts.map +1 -1
  227. package/dist/src/telemetry/tracer.js +2 -3
  228. package/dist/src/telemetry/tracer.js.map +1 -1
  229. package/dist/src/testing/MultiLLMProvider.d.ts +17 -293
  230. package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -1
  231. package/dist/src/testing/MultiLLMProvider.helpers.d.ts +54 -0
  232. package/dist/src/testing/MultiLLMProvider.helpers.d.ts.map +1 -0
  233. package/dist/src/testing/MultiLLMProvider.helpers.js +126 -0
  234. package/dist/src/testing/MultiLLMProvider.helpers.js.map +1 -0
  235. package/dist/src/testing/MultiLLMProvider.js +50 -323
  236. package/dist/src/testing/MultiLLMProvider.js.map +1 -1
  237. package/dist/src/testing/MultiLLMProvider.types.d.ts +253 -0
  238. package/dist/src/testing/MultiLLMProvider.types.d.ts.map +1 -0
  239. package/dist/src/testing/MultiLLMProvider.types.js +111 -0
  240. package/dist/src/testing/MultiLLMProvider.types.js.map +1 -0
  241. package/dist/src/triggers/__tests__/TriggerDetector.test.js +1 -1
  242. package/dist/src/triggers/__tests__/TriggerDetector.test.js.map +1 -1
  243. package/dist/src/types/skill.d.ts +29 -0
  244. package/dist/src/types/skill.d.ts.map +1 -1
  245. package/dist/src/types/skill.js +11 -1
  246. package/dist/src/types/skill.js.map +1 -1
  247. package/dist/src/types.d.ts +22 -0
  248. package/dist/src/types.d.ts.map +1 -1
  249. package/dist/src/utils/retry.js +2 -2
  250. package/dist/src/utils/retry.js.map +1 -1
  251. package/dist/src/validation/index.js +2 -2
  252. package/dist/src/validation/index.js.map +1 -1
  253. package/dist/src/webhooks/WebhookHandler.d.ts.map +1 -1
  254. package/dist/src/webhooks/WebhookHandler.js.map +1 -1
  255. package/dist/src/webhooks/WebhookPayload.js +1 -1
  256. package/dist/src/webhooks/WebhookPayload.js.map +1 -1
  257. package/dist/tests/Analytics.integration.test.js +2 -2
  258. package/dist/tests/Analytics.integration.test.js.map +1 -1
  259. package/dist/tests/AnalyticsRepository.test.js +3 -5
  260. package/dist/tests/AnalyticsRepository.test.js.map +1 -1
  261. package/dist/tests/AnalyticsStorage.test.js.map +1 -1
  262. package/dist/tests/ApiPartialResponses.test.d.ts +12 -0
  263. package/dist/tests/ApiPartialResponses.test.d.ts.map +1 -0
  264. package/dist/tests/ApiPartialResponses.test.js +202 -0
  265. package/dist/tests/ApiPartialResponses.test.js.map +1 -0
  266. package/dist/tests/AuditLogger.test.js.map +1 -1
  267. package/dist/tests/BenchmarkRunner.test.js +6 -6
  268. package/dist/tests/BenchmarkRunner.test.js.map +1 -1
  269. package/dist/tests/CacheSecurity.test.js.map +1 -1
  270. package/dist/tests/CodebaseAnalyzer.test.js.map +1 -1
  271. package/dist/tests/DailyIndexPipeline.test.js.map +1 -1
  272. package/dist/tests/EmbeddingService.test.js.map +1 -1
  273. package/dist/tests/GitHubIndexer.test.js +4 -3
  274. package/dist/tests/GitHubIndexer.test.js.map +1 -1
  275. package/dist/tests/MemoryProfiler.test.js +3 -3
  276. package/dist/tests/MemoryProfiler.test.js.map +1 -1
  277. package/dist/tests/QualityScorer.test.js.map +1 -1
  278. package/dist/tests/RateLimiter.test.js.map +1 -1
  279. package/dist/tests/ScraperAdapters.test.js.map +1 -1
  280. package/dist/tests/SecurityScanner.test.js +4 -4
  281. package/dist/tests/SecurityScanner.test.js.map +1 -1
  282. package/dist/tests/SessionManager.security.test.js +1 -1
  283. package/dist/tests/SessionManager.security.test.js.map +1 -1
  284. package/dist/tests/SessionManager.test.js +4 -4
  285. package/dist/tests/SessionManager.test.js.map +1 -1
  286. package/dist/tests/SwarmIndexer.test.js +1 -1
  287. package/dist/tests/SwarmIndexer.test.js.map +1 -1
  288. package/dist/tests/TieredCache.test.js +2 -11
  289. package/dist/tests/TieredCache.test.js.map +1 -1
  290. package/dist/tests/WebhookHandler.test.js.map +1 -1
  291. package/dist/tests/fixtures/api-responses/index.d.ts +119 -0
  292. package/dist/tests/fixtures/api-responses/index.d.ts.map +1 -0
  293. package/dist/tests/fixtures/api-responses/index.js +419 -0
  294. package/dist/tests/fixtures/api-responses/index.js.map +1 -0
  295. package/dist/tests/logger.test.js +1 -1
  296. package/dist/tests/logger.test.js.map +1 -1
  297. package/dist/tests/performance/LargeScalePerformance.test.js +1 -1
  298. package/dist/tests/performance/LargeScalePerformance.test.js.map +1 -1
  299. package/dist/tests/sanitization.test.js.map +1 -1
  300. package/dist/tests/session/SessionManager.helpers.test.d.ts +8 -0
  301. package/dist/tests/session/SessionManager.helpers.test.d.ts.map +1 -0
  302. package/dist/tests/session/SessionManager.helpers.test.js +105 -0
  303. package/dist/tests/session/SessionManager.helpers.test.js.map +1 -0
  304. package/dist/tests/sources.test.js.map +1 -1
  305. package/dist/tests/webhooks/WebhookHandler.idempotency.test.js +1 -1
  306. package/dist/tests/webhooks/WebhookHandler.idempotency.test.js.map +1 -1
  307. package/dist/tests/webhooks/WebhookPayload.security.test.js.map +1 -1
  308. 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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"}