@hasna/skills 0.0.2 → 0.0.4

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 (957) hide show
  1. package/LICENSE +200 -0
  2. package/README.md +19 -91
  3. package/bin/index.js +573 -555
  4. package/bin/mcp.js +265 -495
  5. package/dist/cli/cli.test.d.ts +1 -0
  6. package/dist/cli/components/App.d.ts +6 -0
  7. package/dist/cli/components/CategorySelect.d.ts +6 -0
  8. package/dist/cli/components/Header.d.ts +6 -0
  9. package/dist/cli/components/InstallProgress.d.ts +8 -0
  10. package/dist/cli/components/SearchView.d.ts +8 -0
  11. package/dist/cli/components/SkillSelect.d.ts +10 -0
  12. package/dist/cli/index.d.ts +2 -0
  13. package/dist/index.d.ts +12 -0
  14. package/{src/lib/registry.ts → dist/index.js} +736 -738
  15. package/dist/index.test.d.ts +1 -0
  16. package/dist/lib/installer.d.ts +67 -0
  17. package/dist/lib/installer.test.d.ts +1 -0
  18. package/dist/lib/registry.d.ts +16 -0
  19. package/dist/lib/registry.test.d.ts +1 -0
  20. package/dist/lib/skillinfo-run.test.d.ts +1 -0
  21. package/dist/lib/skillinfo.d.ts +44 -0
  22. package/dist/lib/skillinfo.test.d.ts +1 -0
  23. package/dist/lib/utils.d.ts +4 -0
  24. package/dist/lib/utils.test.d.ts +1 -0
  25. package/dist/lib/validation.test.d.ts +1 -0
  26. package/dist/mcp/index.d.ts +10 -0
  27. package/dist/mcp/mcp.test.d.ts +1 -0
  28. package/dist/server/serve.d.ts +7 -0
  29. package/package.json +16 -5
  30. package/skills/_common/index.ts +23 -0
  31. package/skills/skill-academic-journal-matcher/package.json +9 -8
  32. package/skills/skill-academic-journal-matcher/tsconfig.json +6 -10
  33. package/skills/skill-action-item-router/package.json +9 -8
  34. package/skills/skill-action-item-router/tsconfig.json +6 -10
  35. package/skills/skill-ad-creative-generator/package.json +9 -8
  36. package/skills/skill-ad-creative-generator/tsconfig.json +6 -10
  37. package/skills/skill-advanced-math/package.json +9 -8
  38. package/skills/skill-advanced-math/tsconfig.json +6 -10
  39. package/skills/skill-analyze-data/package.json +3 -5
  40. package/skills/skill-analyze-data/tsconfig.json +12 -9
  41. package/skills/skill-anomaly-investigator/package.json +9 -8
  42. package/skills/skill-anomaly-investigator/tsconfig.json +6 -10
  43. package/skills/skill-api-test-suite/package.json +9 -8
  44. package/skills/skill-api-test-suite/tsconfig.json +6 -10
  45. package/skills/skill-apidocs/CLAUDE.md +1 -1
  46. package/skills/skill-apidocs/LICENSE +192 -21
  47. package/skills/skill-apidocs/package.json +1 -2
  48. package/skills/skill-apidocs/tsconfig.json +12 -9
  49. package/skills/skill-audio/package.json +1 -1
  50. package/skills/skill-audio/src/index-local.ts +1 -1
  51. package/skills/skill-audio/src/index.ts +1 -2
  52. package/skills/skill-audio/tsconfig.json +11 -8
  53. package/skills/skill-audio-cleanup-lab/package.json +2 -5
  54. package/skills/skill-audio-cleanup-lab/tsconfig.json +6 -10
  55. package/skills/skill-audiobook-chapter-proofer/package.json +9 -8
  56. package/skills/skill-audiobook-chapter-proofer/tsconfig.json +6 -10
  57. package/skills/skill-banner-ad-suite/package.json +9 -8
  58. package/skills/skill-banner-ad-suite/tsconfig.json +6 -10
  59. package/skills/skill-benchmark-finder/package.json +9 -8
  60. package/skills/skill-benchmark-finder/tsconfig.json +6 -10
  61. package/skills/skill-bio-sequence-tool/package.json +9 -8
  62. package/skills/skill-bio-sequence-tool/tsconfig.json +6 -10
  63. package/skills/skill-blog-topic-cluster/package.json +9 -8
  64. package/skills/skill-blog-topic-cluster/tsconfig.json +6 -10
  65. package/skills/skill-brand-style-guide/package.json +3 -4
  66. package/skills/skill-brand-style-guide/tsconfig.json +12 -9
  67. package/skills/skill-brand-voice-audit/package.json +9 -8
  68. package/skills/skill-brand-voice-audit/tsconfig.json +6 -10
  69. package/skills/skill-browse/LICENSE +192 -21
  70. package/skills/skill-browse/package.json +1 -1
  71. package/skills/skill-browse/src/index-local.ts +1 -1
  72. package/skills/skill-browse/src/index.ts +1 -2
  73. package/skills/skill-browse/tsconfig.json +11 -8
  74. package/skills/skill-budget-variance-analyzer/package.json +2 -4
  75. package/skills/skill-budget-variance-analyzer/tsconfig.json +12 -7
  76. package/skills/skill-businessactivity/LICENSE +192 -21
  77. package/skills/skill-businessactivity/package.json +1 -1
  78. package/skills/skill-businessactivity/tsconfig.json +15 -7
  79. package/skills/skill-calendar-events/package.json +9 -8
  80. package/skills/skill-calendar-events/tsconfig.json +6 -10
  81. package/skills/skill-campaign-metric-brief/package.json +9 -8
  82. package/skills/skill-campaign-metric-brief/tsconfig.json +6 -10
  83. package/skills/skill-campaign-moodboard/package.json +9 -8
  84. package/skills/skill-campaign-moodboard/tsconfig.json +6 -10
  85. package/skills/skill-caption-style-stylist/package.json +9 -8
  86. package/skills/skill-caption-style-stylist/tsconfig.json +6 -10
  87. package/skills/skill-chemistry-calculator/package.json +9 -8
  88. package/skills/skill-chemistry-calculator/tsconfig.json +6 -10
  89. package/skills/skill-churn-risk-notifier/package.json +9 -8
  90. package/skills/skill-churn-risk-notifier/tsconfig.json +6 -10
  91. package/skills/skill-citation-formatter/package.json +9 -8
  92. package/skills/skill-citation-formatter/tsconfig.json +6 -10
  93. package/skills/skill-classroom-newsletter-kit/package.json +9 -8
  94. package/skills/skill-classroom-newsletter-kit/tsconfig.json +6 -10
  95. package/skills/skill-codefix/LICENSE +192 -21
  96. package/skills/skill-codefix/src/index-local.ts +1 -1
  97. package/skills/skill-codefix/src/index.ts +1 -2
  98. package/skills/skill-codefix/tsconfig.json +9 -10
  99. package/skills/skill-color-palette-harmonizer/package.json +9 -8
  100. package/skills/skill-color-palette-harmonizer/tsconfig.json +6 -10
  101. package/skills/skill-competitor-ad-analyzer/package.json +9 -8
  102. package/skills/skill-competitor-ad-analyzer/tsconfig.json +6 -10
  103. package/skills/skill-compliance-copy-check/package.json +9 -8
  104. package/skills/skill-compliance-copy-check/tsconfig.json +6 -10
  105. package/skills/skill-compliance-report-pack/package.json +9 -8
  106. package/skills/skill-compliance-report-pack/tsconfig.json +6 -10
  107. package/skills/skill-compress-video/package.json +2 -5
  108. package/skills/skill-compress-video/tsconfig.json +6 -10
  109. package/skills/skill-consolelog/LICENSE +192 -21
  110. package/skills/skill-consolelog/package.json +1 -2
  111. package/skills/skill-consolelog/tsconfig.json +14 -10
  112. package/skills/skill-contract-plainlanguage/package.json +9 -8
  113. package/skills/skill-contract-plainlanguage/tsconfig.json +6 -10
  114. package/skills/skill-convert/LICENSE +192 -21
  115. package/skills/skill-convert/src/index-local.ts +1 -1
  116. package/skills/skill-convert/src/index.ts +1 -2
  117. package/skills/skill-convert/tsconfig.json +9 -10
  118. package/skills/skill-copytone-translator/package.json +9 -8
  119. package/skills/skill-copytone-translator/tsconfig.json +6 -10
  120. package/skills/skill-create-blog-article/package.json +9 -8
  121. package/skills/skill-create-blog-article/tsconfig.json +6 -10
  122. package/skills/skill-create-ebook/package.json +9 -8
  123. package/skills/skill-create-ebook/tsconfig.json +6 -10
  124. package/skills/skill-crm-note-enhancer/package.json +9 -8
  125. package/skills/skill-crm-note-enhancer/tsconfig.json +6 -10
  126. package/skills/skill-customer-journey-mapper/package.json +9 -8
  127. package/skills/skill-customer-journey-mapper/tsconfig.json +6 -10
  128. package/skills/skill-dashboard-builder/package.json +9 -8
  129. package/skills/skill-dashboard-builder/tsconfig.json +6 -10
  130. package/skills/skill-dashboard-narrator/package.json +9 -8
  131. package/skills/skill-dashboard-narrator/tsconfig.json +6 -10
  132. package/skills/skill-data-anonymizer/package.json +9 -8
  133. package/skills/skill-data-anonymizer/tsconfig.json +6 -10
  134. package/skills/skill-database-explorer/package.json +9 -8
  135. package/skills/skill-database-explorer/tsconfig.json +6 -10
  136. package/skills/skill-dataset-health-check/package.json +9 -8
  137. package/skills/skill-dataset-health-check/tsconfig.json +6 -10
  138. package/skills/skill-decision-journal/package.json +9 -8
  139. package/skills/skill-decision-journal/tsconfig.json +6 -10
  140. package/skills/skill-deepresearch/package.json +1 -1
  141. package/skills/skill-deepresearch/tsconfig.json +11 -9
  142. package/skills/skill-delegation-brief-writer/package.json +9 -8
  143. package/skills/skill-delegation-brief-writer/tsconfig.json +6 -10
  144. package/skills/skill-deploy/LICENSE +192 -21
  145. package/skills/skill-deploy/src/hosts.ts +9 -26
  146. package/skills/skill-deploy/src/http-client.ts +1 -1
  147. package/skills/skill-deploy/src/index-local.ts +1 -1
  148. package/skills/skill-deploy/src/index.ts +1 -1
  149. package/skills/skill-deploy/tsconfig.json +10 -9
  150. package/skills/skill-destination-briefing/package.json +9 -8
  151. package/skills/skill-destination-briefing/tsconfig.json +6 -10
  152. package/skills/skill-diff-viewer/package.json +9 -8
  153. package/skills/skill-diff-viewer/tsconfig.json +6 -10
  154. package/skills/skill-domainpurchase/.env.example +1 -1
  155. package/skills/skill-domainpurchase/LICENSE +192 -21
  156. package/skills/skill-domainpurchase/package.json +3 -4
  157. package/skills/skill-domainpurchase/src/lib/config.ts +2 -2
  158. package/skills/skill-domainpurchase/tsconfig.json +4 -5
  159. package/skills/skill-domainsearch/.env.example +1 -1
  160. package/skills/skill-domainsearch/LICENSE +192 -21
  161. package/skills/skill-domainsearch/package.json +3 -5
  162. package/skills/skill-domainsearch/tsconfig.json +4 -4
  163. package/skills/skill-e2bswarm/package.json +1 -1
  164. package/skills/skill-e2bswarm/src/lib/config.ts +3 -6
  165. package/skills/skill-e2bswarm/tsconfig.json +9 -10
  166. package/skills/skill-educational-resource-finder/package.json +9 -8
  167. package/skills/skill-educational-resource-finder/tsconfig.json +6 -10
  168. package/skills/skill-email-campaign/package.json +9 -8
  169. package/skills/skill-email-campaign/tsconfig.json +6 -10
  170. package/skills/skill-emoji/package.json +1 -1
  171. package/skills/skill-emoji/tsconfig.json +9 -9
  172. package/skills/skill-exam-readiness-check/package.json +9 -8
  173. package/skills/skill-exam-readiness-check/tsconfig.json +6 -10
  174. package/skills/skill-experiment-power-calculator/package.json +9 -8
  175. package/skills/skill-experiment-power-calculator/tsconfig.json +6 -10
  176. package/skills/skill-extract/LICENSE +192 -21
  177. package/skills/skill-extract/package.json +1 -1
  178. package/skills/skill-extract/src/index-local.ts +1 -1
  179. package/skills/skill-extract/src/index.ts +1 -2
  180. package/skills/skill-extract/tsconfig.json +11 -9
  181. package/skills/skill-extract-audio/package.json +2 -5
  182. package/skills/skill-extract-audio/tsconfig.json +6 -10
  183. package/skills/skill-extract-frames/package.json +9 -8
  184. package/skills/skill-extract-frames/tsconfig.json +6 -10
  185. package/skills/skill-extract-invoice/package.json +9 -8
  186. package/skills/skill-extract-invoice/tsconfig.json +6 -10
  187. package/skills/skill-family-activity-curator/package.json +9 -8
  188. package/skills/skill-family-activity-curator/tsconfig.json +6 -10
  189. package/skills/skill-faq-packager/package.json +9 -8
  190. package/skills/skill-faq-packager/tsconfig.json +6 -10
  191. package/skills/skill-feedback-survey-designer/package.json +9 -8
  192. package/skills/skill-feedback-survey-designer/tsconfig.json +6 -10
  193. package/skills/skill-field-trip-planner/package.json +9 -8
  194. package/skills/skill-field-trip-planner/tsconfig.json +6 -10
  195. package/skills/skill-file-organizer/package.json +9 -8
  196. package/skills/skill-file-organizer/tsconfig.json +6 -10
  197. package/skills/skill-folder-tree/package.json +9 -8
  198. package/skills/skill-folder-tree/tsconfig.json +6 -10
  199. package/skills/skill-forecast-scenario-lab/package.json +9 -8
  200. package/skills/skill-forecast-scenario-lab/tsconfig.json +6 -10
  201. package/skills/skill-form-filler/package.json +9 -8
  202. package/skills/skill-form-filler/tsconfig.json +6 -10
  203. package/skills/skill-generate-api-client/package.json +9 -8
  204. package/skills/skill-generate-api-client/tsconfig.json +6 -10
  205. package/skills/skill-generate-book-cover/package.json +9 -8
  206. package/skills/skill-generate-book-cover/tsconfig.json +6 -10
  207. package/skills/skill-generate-chart/package.json +9 -8
  208. package/skills/skill-generate-chart/tsconfig.json +6 -10
  209. package/skills/skill-generate-diagram/package.json +9 -8
  210. package/skills/skill-generate-diagram/tsconfig.json +6 -10
  211. package/skills/skill-generate-dockerfile/package.json +9 -8
  212. package/skills/skill-generate-dockerfile/tsconfig.json +6 -10
  213. package/skills/skill-generate-documentation/package.json +9 -8
  214. package/skills/skill-generate-documentation/tsconfig.json +6 -10
  215. package/skills/skill-generate-docx/package.json +3 -5
  216. package/skills/skill-generate-docx/tsconfig.json +10 -10
  217. package/skills/skill-generate-env/package.json +9 -8
  218. package/skills/skill-generate-env/tsconfig.json +6 -10
  219. package/skills/skill-generate-excel/package.json +9 -8
  220. package/skills/skill-generate-excel/tsconfig.json +6 -10
  221. package/skills/skill-generate-favicon/package.json +9 -8
  222. package/skills/skill-generate-favicon/tsconfig.json +6 -10
  223. package/skills/skill-generate-mock-data/package.json +9 -8
  224. package/skills/skill-generate-mock-data/tsconfig.json +6 -10
  225. package/skills/skill-generate-pdf/package.json +3 -5
  226. package/skills/skill-generate-pdf/tsconfig.json +10 -10
  227. package/skills/skill-generate-pr-description/package.json +9 -8
  228. package/skills/skill-generate-pr-description/tsconfig.json +6 -10
  229. package/skills/skill-generate-presentation/package.json +9 -8
  230. package/skills/skill-generate-presentation/tsconfig.json +6 -10
  231. package/skills/skill-generate-qrcode/package.json +9 -8
  232. package/skills/skill-generate-qrcode/tsconfig.json +6 -10
  233. package/skills/skill-generate-regex/package.json +9 -8
  234. package/skills/skill-generate-regex/tsconfig.json +6 -10
  235. package/skills/skill-generate-resume/package.json +9 -8
  236. package/skills/skill-generate-resume/tsconfig.json +6 -10
  237. package/skills/skill-generate-sitemap/package.json +9 -8
  238. package/skills/skill-generate-sitemap/tsconfig.json +6 -10
  239. package/skills/skill-generate-social-posts/package.json +9 -8
  240. package/skills/skill-generate-social-posts/tsconfig.json +6 -10
  241. package/skills/skill-generate-sql/package.json +9 -8
  242. package/skills/skill-generate-sql/tsconfig.json +6 -10
  243. package/skills/skill-gif-maker/package.json +9 -8
  244. package/skills/skill-gif-maker/tsconfig.json +6 -10
  245. package/skills/skill-github-manager/package.json +9 -8
  246. package/skills/skill-github-manager/tsconfig.json +6 -10
  247. package/skills/{skill-compose-gmail → skill-gmail}/package.json +9 -8
  248. package/skills/skill-gmail/tsconfig.json +10 -0
  249. package/skills/skill-goal-quarterly-roadmap/package.json +9 -8
  250. package/skills/skill-goal-quarterly-roadmap/tsconfig.json +6 -10
  251. package/skills/skill-grant-application-drafter/package.json +9 -8
  252. package/skills/skill-grant-application-drafter/tsconfig.json +6 -10
  253. package/skills/skill-grocery-basket-optimizer/package.json +9 -8
  254. package/skills/skill-grocery-basket-optimizer/tsconfig.json +6 -10
  255. package/skills/skill-guest-communication-suite/package.json +9 -8
  256. package/skills/skill-guest-communication-suite/tsconfig.json +6 -10
  257. package/skills/skill-habit-reflection-digest/package.json +9 -8
  258. package/skills/skill-habit-reflection-digest/tsconfig.json +6 -10
  259. package/skills/skill-highlight-reel-generator/package.json +9 -8
  260. package/skills/skill-highlight-reel-generator/tsconfig.json +6 -10
  261. package/skills/skill-homework-feedback-coach/package.json +9 -8
  262. package/skills/skill-homework-feedback-coach/tsconfig.json +6 -10
  263. package/skills/skill-hook/LICENSE +192 -21
  264. package/skills/skill-hook/package.json +1 -1
  265. package/skills/skill-hook/src/commands/create.ts +1 -1
  266. package/skills/skill-hook/tsconfig.json +8 -8
  267. package/skills/skill-household-maintenance-mgr/package.json +9 -8
  268. package/skills/skill-household-maintenance-mgr/tsconfig.json +6 -10
  269. package/skills/skill-http-server/package.json +9 -8
  270. package/skills/skill-http-server/tsconfig.json +6 -10
  271. package/skills/skill-image/LICENSE +192 -21
  272. package/skills/skill-image/package.json +1 -1
  273. package/skills/skill-image/src/index-local.ts +1 -1
  274. package/skills/skill-image/src/index.ts +1 -2
  275. package/skills/skill-image/tsconfig.json +11 -9
  276. package/skills/skill-implementation/LICENSE +192 -21
  277. package/skills/skill-implementation/package.json +1 -1
  278. package/skills/skill-implementation/tsconfig.json +8 -8
  279. package/skills/skill-implementation-agent/package.json +9 -8
  280. package/skills/skill-implementation-agent/tsconfig.json +6 -10
  281. package/skills/skill-implementation-plan/package.json +9 -8
  282. package/skills/skill-implementation-plan/tsconfig.json +6 -10
  283. package/skills/skill-implementation-todo/package.json +9 -8
  284. package/skills/skill-implementation-todo/tsconfig.json +6 -10
  285. package/skills/skill-inbox-priority-planner/package.json +9 -8
  286. package/skills/skill-inbox-priority-planner/tsconfig.json +6 -10
  287. package/skills/skill-invoice/LICENSE +192 -21
  288. package/skills/skill-invoice/README.md +1 -1
  289. package/skills/skill-invoice/tsconfig.json +13 -9
  290. package/skills/skill-invoice-dispute-helper/package.json +9 -8
  291. package/skills/skill-invoice-dispute-helper/tsconfig.json +6 -10
  292. package/skills/skill-itinerary-architect/package.json +9 -8
  293. package/skills/skill-itinerary-architect/tsconfig.json +6 -10
  294. package/skills/skill-jingle-composer/package.json +9 -8
  295. package/skills/skill-jingle-composer/tsconfig.json +6 -10
  296. package/skills/skill-kpi-digest-generator/package.json +9 -8
  297. package/skills/skill-kpi-digest-generator/tsconfig.json +6 -10
  298. package/skills/skill-lab-notebook-formatter/package.json +9 -8
  299. package/skills/skill-lab-notebook-formatter/tsconfig.json +6 -10
  300. package/skills/skill-landing-page-copy/package.json +9 -8
  301. package/skills/skill-landing-page-copy/tsconfig.json +6 -10
  302. package/skills/skill-latex-table-generator/package.json +9 -8
  303. package/skills/skill-latex-table-generator/tsconfig.json +6 -10
  304. package/skills/skill-learning-style-profiler/package.json +9 -8
  305. package/skills/skill-learning-style-profiler/tsconfig.json +6 -10
  306. package/skills/skill-lesson-plan-customizer/package.json +9 -8
  307. package/skills/skill-lesson-plan-customizer/tsconfig.json +6 -10
  308. package/skills/skill-livestream-runofshow/package.json +9 -8
  309. package/skills/skill-livestream-runofshow/tsconfig.json +6 -10
  310. package/skills/skill-longform-structurer/package.json +9 -8
  311. package/skills/skill-longform-structurer/tsconfig.json +6 -10
  312. package/skills/skill-lorem-generator/package.json +9 -8
  313. package/skills/skill-lorem-generator/tsconfig.json +6 -10
  314. package/skills/skill-managehook/.env.example +2 -2
  315. package/skills/skill-managehook/CLAUDE.md +23 -134
  316. package/skills/skill-managehook/README.md +28 -27
  317. package/skills/skill-managehook/package.json +5 -6
  318. package/skills/skill-managehook/src/db/index.ts +2 -2
  319. package/skills/skill-managehook/src/lib/api-client.ts +2 -2
  320. package/skills/skill-managehook/src/lib/config.ts +1 -1
  321. package/skills/skill-managehook/src/lib/service-dir.ts +2 -2
  322. package/skills/skill-managehook/src/server/index.ts +2 -2
  323. package/skills/skill-managehook/tsconfig.json +15 -7
  324. package/skills/skill-managemcp/.env.example +2 -2
  325. package/skills/skill-managemcp/CLAUDE.md +23 -134
  326. package/skills/skill-managemcp/README.md +28 -27
  327. package/skills/skill-managemcp/package.json +5 -6
  328. package/skills/skill-managemcp/src/db/index.ts +2 -2
  329. package/skills/skill-managemcp/src/lib/api-client.ts +2 -2
  330. package/skills/skill-managemcp/src/lib/config.ts +1 -1
  331. package/skills/skill-managemcp/src/lib/service-dir.ts +2 -2
  332. package/skills/skill-managemcp/src/server/index.ts +2 -2
  333. package/skills/skill-managemcp/tsconfig.json +15 -7
  334. package/skills/skill-manageskill/.env.example +2 -2
  335. package/skills/skill-manageskill/CLAUDE.md +23 -134
  336. package/skills/skill-manageskill/README.md +28 -27
  337. package/skills/skill-manageskill/package.json +5 -6
  338. package/skills/skill-manageskill/src/db/index.ts +2 -2
  339. package/skills/skill-manageskill/src/lib/api-client.ts +2 -2
  340. package/skills/skill-manageskill/src/lib/config.ts +1 -1
  341. package/skills/skill-manageskill/src/lib/service-dir.ts +2 -2
  342. package/skills/skill-manageskill/src/server/index.ts +2 -2
  343. package/skills/skill-manageskill/tsconfig.json +15 -7
  344. package/skills/skill-markdown-validator/package.json +9 -8
  345. package/skills/skill-markdown-validator/tsconfig.json +6 -10
  346. package/skills/skill-mcp-builder/package.json +9 -8
  347. package/skills/skill-mcp-builder/tsconfig.json +6 -10
  348. package/skills/skill-meal-plan-designer/package.json +9 -8
  349. package/skills/skill-meal-plan-designer/tsconfig.json +6 -10
  350. package/skills/skill-meeting-insight-summarizer/package.json +9 -8
  351. package/skills/skill-meeting-insight-summarizer/tsconfig.json +6 -10
  352. package/skills/skill-merge-pdfs/package.json +9 -8
  353. package/skills/skill-merge-pdfs/tsconfig.json +6 -10
  354. package/skills/skill-microcopy-generator/package.json +9 -8
  355. package/skills/skill-microcopy-generator/tsconfig.json +6 -10
  356. package/skills/skill-mindfulness-prompt-cache/package.json +9 -8
  357. package/skills/skill-mindfulness-prompt-cache/tsconfig.json +6 -10
  358. package/skills/skill-notion-manager/package.json +9 -8
  359. package/skills/skill-notion-manager/tsconfig.json +6 -10
  360. package/skills/skill-npmpublish/package.json +1 -1
  361. package/skills/skill-npmpublish/tsconfig.json +7 -7
  362. package/skills/skill-onboarding-sequence-builder/package.json +9 -8
  363. package/skills/skill-onboarding-sequence-builder/tsconfig.json +6 -10
  364. package/skills/skill-onsite-ops-checklist/package.json +9 -8
  365. package/skills/skill-onsite-ops-checklist/tsconfig.json +6 -10
  366. package/skills/skill-outreach-cadence-designer/package.json +9 -8
  367. package/skills/skill-outreach-cadence-designer/tsconfig.json +6 -10
  368. package/skills/skill-packaging-concept-studio/package.json +9 -8
  369. package/skills/skill-packaging-concept-studio/tsconfig.json +6 -10
  370. package/skills/skill-packing-plan-pro/package.json +9 -8
  371. package/skills/skill-packing-plan-pro/tsconfig.json +6 -10
  372. package/skills/skill-parent-teacher-brief/package.json +9 -8
  373. package/skills/skill-parent-teacher-brief/tsconfig.json +6 -10
  374. package/skills/skill-partner-kit-assembler/package.json +9 -8
  375. package/skills/skill-partner-kit-assembler/tsconfig.json +6 -10
  376. package/skills/skill-payroll-change-prepper/package.json +9 -8
  377. package/skills/skill-payroll-change-prepper/tsconfig.json +6 -10
  378. package/skills/skill-persona-based-adwriter/package.json +9 -8
  379. package/skills/skill-persona-based-adwriter/tsconfig.json +6 -10
  380. package/skills/skill-persona-generator/package.json +9 -8
  381. package/skills/skill-persona-generator/tsconfig.json +6 -10
  382. package/skills/skill-personal-daily-ops/package.json +9 -8
  383. package/skills/skill-personal-daily-ops/tsconfig.json +6 -10
  384. package/skills/skill-pet-care-scheduler/package.json +9 -8
  385. package/skills/skill-pet-care-scheduler/tsconfig.json +6 -10
  386. package/skills/skill-podcast-show-notes/package.json +9 -8
  387. package/skills/skill-podcast-show-notes/tsconfig.json +6 -10
  388. package/skills/skill-presentation-theme-maker/package.json +9 -8
  389. package/skills/skill-presentation-theme-maker/tsconfig.json +6 -10
  390. package/skills/skill-press-release-drafter/package.json +9 -8
  391. package/skills/skill-press-release-drafter/tsconfig.json +6 -10
  392. package/skills/skill-print-collateral-designer/package.json +9 -8
  393. package/skills/skill-print-collateral-designer/tsconfig.json +6 -10
  394. package/skills/skill-procurement-scorecard/package.json +9 -8
  395. package/skills/skill-procurement-scorecard/tsconfig.json +6 -10
  396. package/skills/skill-product-demo-script/package.json +9 -8
  397. package/skills/skill-product-demo-script/tsconfig.json +6 -10
  398. package/skills/skill-product-mockup/package.json +9 -8
  399. package/skills/skill-product-mockup/tsconfig.json +6 -10
  400. package/skills/skill-project-retro-companion/package.json +9 -8
  401. package/skills/skill-project-retro-companion/tsconfig.json +6 -10
  402. package/skills/skill-proposal-redline-advisor/package.json +9 -8
  403. package/skills/skill-proposal-redline-advisor/tsconfig.json +6 -10
  404. package/skills/skill-regex-tester/package.json +9 -8
  405. package/skills/skill-regex-tester/tsconfig.json +6 -10
  406. package/skills/skill-remove-background/package.json +9 -8
  407. package/skills/skill-remove-background/tsconfig.json +6 -10
  408. package/skills/skill-risk-disclosure-kit/package.json +9 -8
  409. package/skills/skill-risk-disclosure-kit/tsconfig.json +6 -10
  410. package/skills/skill-roi-comparison-tool/package.json +9 -8
  411. package/skills/skill-roi-comparison-tool/tsconfig.json +6 -10
  412. package/skills/skill-sales-call-recapper/package.json +9 -8
  413. package/skills/skill-sales-call-recapper/tsconfig.json +6 -10
  414. package/skills/skill-salescopy/LICENSE +192 -21
  415. package/skills/skill-salescopy/README.md +1 -1
  416. package/skills/skill-salescopy/tsconfig.json +13 -9
  417. package/skills/skill-scaffold-project/package.json +8 -5
  418. package/skills/skill-scaffold-project/tsconfig.json +6 -10
  419. package/skills/skill-scholarship-tracker/package.json +9 -8
  420. package/skills/skill-scholarship-tracker/tsconfig.json +6 -10
  421. package/skills/skill-scientific-figure-check/package.json +9 -8
  422. package/skills/skill-scientific-figure-check/tsconfig.json +6 -10
  423. package/skills/skill-seating-chart-maker/package.json +9 -8
  424. package/skills/skill-seating-chart-maker/tsconfig.json +6 -10
  425. package/skills/skill-security-audit/package.json +9 -8
  426. package/skills/skill-security-audit/tsconfig.json +6 -10
  427. package/skills/skill-seo-brief-builder/package.json +9 -8
  428. package/skills/skill-seo-brief-builder/tsconfig.json +6 -10
  429. package/skills/skill-slack-assistant/package.json +9 -8
  430. package/skills/skill-slack-assistant/tsconfig.json +6 -10
  431. package/skills/skill-sleep-routine-analyzer/package.json +9 -8
  432. package/skills/skill-sleep-routine-analyzer/tsconfig.json +6 -10
  433. package/skills/skill-sms/package.json +1 -1
  434. package/skills/skill-sms/tsconfig.json +10 -9
  435. package/skills/skill-social-media-kit/package.json +9 -8
  436. package/skills/skill-social-media-kit/tsconfig.json +6 -10
  437. package/skills/skill-split-pdf/package.json +9 -8
  438. package/skills/skill-split-pdf/tsconfig.json +6 -10
  439. package/skills/skill-sponsorship-proposal-lab/package.json +9 -8
  440. package/skills/skill-sponsorship-proposal-lab/tsconfig.json +6 -10
  441. package/skills/skill-spreadsheet-cleanroom/package.json +9 -8
  442. package/skills/skill-spreadsheet-cleanroom/tsconfig.json +6 -10
  443. package/skills/skill-statistical-test-selector/package.json +9 -8
  444. package/skills/skill-statistical-test-selector/tsconfig.json +6 -10
  445. package/skills/skill-stress-relief-playbook/package.json +9 -8
  446. package/skills/skill-stress-relief-playbook/tsconfig.json +6 -10
  447. package/skills/skill-study-guide-builder/package.json +9 -8
  448. package/skills/skill-study-guide-builder/tsconfig.json +6 -10
  449. package/skills/skill-subscription-spend-watcher/package.json +9 -8
  450. package/skills/skill-subscription-spend-watcher/tsconfig.json +6 -10
  451. package/skills/skill-subtitle/LICENSE +192 -21
  452. package/skills/skill-subtitle/package.json +1 -1
  453. package/skills/skill-subtitle/tsconfig.json +13 -9
  454. package/skills/skill-survey-insight-extractor/package.json +9 -8
  455. package/skills/skill-survey-insight-extractor/tsconfig.json +6 -10
  456. package/skills/skill-terraform-generator/package.json +9 -8
  457. package/skills/skill-terraform-generator/tsconfig.json +6 -10
  458. package/skills/skill-testimonial-graphics/package.json +9 -8
  459. package/skills/skill-testimonial-graphics/tsconfig.json +6 -10
  460. package/skills/skill-timesheet/package.json +1 -1
  461. package/skills/skill-timesheet/tsconfig.json +15 -7
  462. package/skills/skill-transcript/LICENSE +192 -21
  463. package/skills/skill-transcript/package.json +1 -1
  464. package/skills/skill-transcript/src/index-local.ts +1 -1
  465. package/skills/skill-transcript/src/index.ts +1 -2
  466. package/skills/skill-transcript/tsconfig.json +9 -9
  467. package/skills/skill-travel-budget-balancer/package.json +9 -8
  468. package/skills/skill-travel-budget-balancer/tsconfig.json +6 -10
  469. package/skills/skill-validate-config/package.json +9 -8
  470. package/skills/skill-validate-config/tsconfig.json +6 -10
  471. package/skills/skill-video/LICENSE +192 -21
  472. package/skills/skill-video/package.json +1 -1
  473. package/skills/skill-video/src/index-local.ts +1 -1
  474. package/skills/skill-video/src/index.ts +1 -2
  475. package/skills/skill-video/tsconfig.json +5 -8
  476. package/skills/skill-video-cut-suggester/package.json +9 -8
  477. package/skills/skill-video-cut-suggester/tsconfig.json +6 -10
  478. package/skills/skill-video-downloader/package.json +9 -8
  479. package/skills/skill-video-downloader/tsconfig.json +6 -10
  480. package/skills/skill-video-thumbnail/package.json +9 -8
  481. package/skills/skill-video-thumbnail/tsconfig.json +6 -10
  482. package/skills/skill-voiceover-casting-assistant/package.json +9 -8
  483. package/skills/skill-voiceover-casting-assistant/tsconfig.json +6 -10
  484. package/skills/skill-watermark/package.json +9 -8
  485. package/skills/skill-watermark/tsconfig.json +6 -10
  486. package/skills/skill-webcrawling/LICENSE +192 -21
  487. package/skills/skill-webcrawling/package.json +1 -1
  488. package/skills/skill-webcrawling/tsconfig.json +14 -9
  489. package/skills/skill-webinar-script-coach/package.json +9 -8
  490. package/skills/skill-webinar-script-coach/tsconfig.json +6 -10
  491. package/skills/skill-wellness-progress-reporter/package.json +9 -8
  492. package/skills/skill-wellness-progress-reporter/tsconfig.json +6 -10
  493. package/skills/skill-workout-cycle-planner/package.json +9 -8
  494. package/skills/skill-workout-cycle-planner/tsconfig.json +6 -10
  495. package/skills/skill-write/LICENSE +192 -21
  496. package/skills/skill-write/package.json +1 -1
  497. package/skills/skill-write/src/index-local.ts +1 -1
  498. package/skills/skill-write/src/index.ts +1 -2
  499. package/skills/skill-write/tsconfig.json +9 -9
  500. package/skills/{skill-architecture-docs/tsconfig.json → tsconfig.base.json} +1 -3
  501. package/.env.example +0 -18
  502. package/.npmrc.example +0 -1
  503. package/CONTRIBUTING.md +0 -32
  504. package/bunfig.toml +0 -2
  505. package/skills/skill-architecture-docs/CLAUDE.md +0 -19
  506. package/skills/skill-architecture-docs/package.json +0 -32
  507. package/skills/skill-architecture-docs/src/index.ts +0 -543
  508. package/skills/skill-audio/src/index-http.ts +0 -111
  509. package/skills/skill-auto-format/CLAUDE.md +0 -19
  510. package/skills/skill-auto-format/package.json +0 -32
  511. package/skills/skill-auto-format/src/index.ts +0 -103
  512. package/skills/skill-auto-format/tsconfig.json +0 -14
  513. package/skills/skill-brainstorm/README.md +0 -17
  514. package/skills/skill-brainstorm/install.sh +0 -112
  515. package/skills/skill-brainstorm/src/auth.ts +0 -49
  516. package/skills/skill-brainstorm/src/installer.ts +0 -324
  517. package/skills/skill-brainstorm/src/skill-install.ts +0 -205
  518. package/skills/skill-browse/install.sh +0 -112
  519. package/skills/skill-browse/src/auth.ts +0 -49
  520. package/skills/skill-browse/src/http-client.ts +0 -128
  521. package/skills/skill-browse/src/index-http.ts +0 -111
  522. package/skills/skill-browse/src/installer.ts +0 -324
  523. package/skills/skill-browse/src/skill-install.ts +0 -205
  524. package/skills/skill-browser-agent/CLAUDE.md +0 -19
  525. package/skills/skill-browser-agent/package.json +0 -32
  526. package/skills/skill-browser-agent/src/index.ts +0 -626
  527. package/skills/skill-browser-agent/tsconfig.json +0 -14
  528. package/skills/skill-browseruse/LICENSE +0 -21
  529. package/skills/skill-browseruse/README.md +0 -27
  530. package/skills/skill-browseruse/SKILL.md +0 -113
  531. package/skills/skill-browseruse/install.sh +0 -112
  532. package/skills/skill-browseruse/package.json +0 -31
  533. package/skills/skill-browseruse/src/auth.ts +0 -49
  534. package/skills/skill-browseruse/src/installer.ts +0 -324
  535. package/skills/skill-browseruse/src/skill-install.ts +0 -174
  536. package/skills/skill-calculate/LICENSE +0 -21
  537. package/skills/skill-calculate/README.md +0 -17
  538. package/skills/skill-calculate/install.sh +0 -112
  539. package/skills/skill-calculate/package.json +0 -31
  540. package/skills/skill-calculate/src/auth.ts +0 -49
  541. package/skills/skill-calculate/src/installer.ts +0 -324
  542. package/skills/skill-calculate/src/skill-install.ts +0 -205
  543. package/skills/skill-chromedevtools/LICENSE +0 -21
  544. package/skills/skill-chromedevtools/README.md +0 -27
  545. package/skills/skill-chromedevtools/SKILL.md +0 -110
  546. package/skills/skill-chromedevtools/install.sh +0 -112
  547. package/skills/skill-chromedevtools/package.json +0 -31
  548. package/skills/skill-chromedevtools/src/auth.ts +0 -49
  549. package/skills/skill-chromedevtools/src/installer.ts +0 -324
  550. package/skills/skill-chromedevtools/src/skill-install.ts +0 -174
  551. package/skills/skill-codefix/install.sh +0 -112
  552. package/skills/skill-codefix/src/auth.ts +0 -49
  553. package/skills/skill-codefix/src/http-client.ts +0 -128
  554. package/skills/skill-codefix/src/index-http.ts +0 -111
  555. package/skills/skill-codefix/src/installer.ts +0 -324
  556. package/skills/skill-codefix/src/skill-install.ts +0 -205
  557. package/skills/skill-companyguide/LICENSE +0 -21
  558. package/skills/skill-companyguide/README.md +0 -17
  559. package/skills/skill-companyguide/install.sh +0 -112
  560. package/skills/skill-companyguide/package.json +0 -31
  561. package/skills/skill-companyguide/src/auth.ts +0 -49
  562. package/skills/skill-companyguide/src/installer.ts +0 -324
  563. package/skills/skill-companyguide/src/skill-install.ts +0 -205
  564. package/skills/skill-compose-gmail/tsconfig.json +0 -14
  565. package/skills/skill-consolelog/storage/login-error.png +0 -0
  566. package/skills/skill-consolelog/storage/products-page.png +0 -0
  567. package/skills/skill-context7/LICENSE +0 -21
  568. package/skills/skill-context7/README.md +0 -27
  569. package/skills/skill-context7/SKILL.md +0 -103
  570. package/skills/skill-context7/install.sh +0 -112
  571. package/skills/skill-context7/package.json +0 -31
  572. package/skills/skill-context7/src/auth.ts +0 -49
  573. package/skills/skill-context7/src/installer.ts +0 -324
  574. package/skills/skill-context7/src/skill-install.ts +0 -174
  575. package/skills/skill-convert/install.sh +0 -112
  576. package/skills/skill-convert/src/auth.ts +0 -49
  577. package/skills/skill-convert/src/http-client.ts +0 -128
  578. package/skills/skill-convert/src/index-http.ts +0 -111
  579. package/skills/skill-convert/src/installer.ts +0 -324
  580. package/skills/skill-convert/src/skill-install.ts +0 -205
  581. package/skills/skill-crawl/LICENSE +0 -21
  582. package/skills/skill-crawl/README.md +0 -17
  583. package/skills/skill-crawl/install.sh +0 -112
  584. package/skills/skill-crawl/package.json +0 -31
  585. package/skills/skill-crawl/src/auth.ts +0 -49
  586. package/skills/skill-crawl/src/installer.ts +0 -324
  587. package/skills/skill-crawl/src/skill-install.ts +0 -205
  588. package/skills/skill-csv-transformer/CLAUDE.md +0 -19
  589. package/skills/skill-csv-transformer/package.json +0 -32
  590. package/skills/skill-csv-transformer/src/index.ts +0 -81
  591. package/skills/skill-csv-transformer/tsconfig.json +0 -14
  592. package/skills/skill-debug/LICENSE +0 -21
  593. package/skills/skill-debug/README.md +0 -17
  594. package/skills/skill-debug/install.sh +0 -112
  595. package/skills/skill-debug/package.json +0 -31
  596. package/skills/skill-debug/src/auth.ts +0 -49
  597. package/skills/skill-debug/src/installer.ts +0 -324
  598. package/skills/skill-debug/src/skill-install.ts +0 -205
  599. package/skills/skill-deep-research/CLAUDE.md +0 -19
  600. package/skills/skill-deep-research/package.json +0 -32
  601. package/skills/skill-deep-research/src/index.ts +0 -1149
  602. package/skills/skill-deep-research/tsconfig.json +0 -14
  603. package/skills/skill-deploy/install.sh +0 -112
  604. package/skills/skill-deploy/src/auth.ts +0 -49
  605. package/skills/skill-deploy/src/index-http.ts +0 -111
  606. package/skills/skill-deploy/src/installer.ts +0 -324
  607. package/skills/skill-deploy/src/skill-install.ts +0 -205
  608. package/skills/skill-dns-manager/CLAUDE.md +0 -19
  609. package/skills/skill-dns-manager/package.json +0 -32
  610. package/skills/skill-dns-manager/src/index.ts +0 -92
  611. package/skills/skill-dns-manager/tsconfig.json +0 -14
  612. package/skills/skill-download/LICENSE +0 -21
  613. package/skills/skill-download/README.md +0 -17
  614. package/skills/skill-download/install.sh +0 -112
  615. package/skills/skill-download/package.json +0 -31
  616. package/skills/skill-download/src/auth.ts +0 -49
  617. package/skills/skill-download/src/installer.ts +0 -324
  618. package/skills/skill-download/src/skill-install.ts +0 -205
  619. package/skills/skill-exa/LICENSE +0 -21
  620. package/skills/skill-exa/README.md +0 -26
  621. package/skills/skill-exa/SKILL.md +0 -92
  622. package/skills/skill-exa/install.sh +0 -112
  623. package/skills/skill-exa/package.json +0 -31
  624. package/skills/skill-exa/src/auth.ts +0 -49
  625. package/skills/skill-exa/src/installer.ts +0 -324
  626. package/skills/skill-exa/src/skill-install.ts +0 -174
  627. package/skills/skill-extract/install.sh +0 -112
  628. package/skills/skill-extract/src/auth.ts +0 -49
  629. package/skills/skill-extract/src/http-client.ts +0 -128
  630. package/skills/skill-extract/src/index-http.ts +0 -111
  631. package/skills/skill-extract/src/installer.ts +0 -324
  632. package/skills/skill-extract/src/skill-install.ts +0 -205
  633. package/skills/skill-filesearch/LICENSE +0 -21
  634. package/skills/skill-filesearch/README.md +0 -17
  635. package/skills/skill-filesearch/install.sh +0 -112
  636. package/skills/skill-filesearch/package.json +0 -31
  637. package/skills/skill-filesearch/src/auth.ts +0 -49
  638. package/skills/skill-filesearch/src/installer.ts +0 -324
  639. package/skills/skill-filesearch/src/skill-install.ts +0 -205
  640. package/skills/skill-fill/LICENSE +0 -21
  641. package/skills/skill-fill/README.md +0 -17
  642. package/skills/skill-fill/install.sh +0 -112
  643. package/skills/skill-fill/package.json +0 -31
  644. package/skills/skill-fill/src/auth.ts +0 -49
  645. package/skills/skill-fill/src/installer.ts +0 -324
  646. package/skills/skill-fill/src/skill-install.ts +0 -205
  647. package/skills/skill-generate-audio/CLAUDE.md +0 -3
  648. package/skills/skill-generate-audio/SKILL.md +0 -53
  649. package/skills/skill-generate-audio/package.json +0 -30
  650. package/skills/skill-generate-audio/src/index.ts +0 -656
  651. package/skills/skill-generate-audio/tsconfig.json +0 -18
  652. package/skills/skill-generate-readme/CLAUDE.md +0 -19
  653. package/skills/skill-generate-readme/package.json +0 -32
  654. package/skills/skill-generate-readme/src/index.ts +0 -867
  655. package/skills/skill-generate-readme/tsconfig.json +0 -14
  656. package/skills/skill-generate-slides/CLAUDE.md +0 -19
  657. package/skills/skill-generate-slides/package.json +0 -32
  658. package/skills/skill-generate-slides/src/ai.ts +0 -140
  659. package/skills/skill-generate-slides/src/cli.ts +0 -161
  660. package/skills/skill-generate-slides/src/export.ts +0 -65
  661. package/skills/skill-generate-slides/src/index.ts +0 -1417
  662. package/skills/skill-generate-slides/src/layout.ts +0 -31
  663. package/skills/skill-generate-slides/src/parse.ts +0 -282
  664. package/skills/skill-generate-slides/src/render.ts +0 -711
  665. package/skills/skill-generate-slides/tsconfig.json +0 -14
  666. package/skills/skill-get-api-docs/CLAUDE.md +0 -19
  667. package/skills/skill-get-api-docs/package.json +0 -32
  668. package/skills/skill-get-api-docs/src/index.ts +0 -1176
  669. package/skills/skill-get-api-docs/tsconfig.json +0 -14
  670. package/skills/skill-googledrive/LICENSE +0 -21
  671. package/skills/skill-googledrive/README.md +0 -27
  672. package/skills/skill-googledrive/SKILL.md +0 -140
  673. package/skills/skill-googledrive/install.sh +0 -112
  674. package/skills/skill-googledrive/package.json +0 -31
  675. package/skills/skill-googledrive/src/auth.ts +0 -49
  676. package/skills/skill-googledrive/src/installer.ts +0 -324
  677. package/skills/skill-googledrive/src/skill-install.ts +0 -174
  678. package/skills/skill-grant-compliance-scanner/CLAUDE.md +0 -19
  679. package/skills/skill-grant-compliance-scanner/package.json +0 -32
  680. package/skills/skill-grant-compliance-scanner/src/index.ts +0 -94
  681. package/skills/skill-grant-compliance-scanner/tsconfig.json +0 -14
  682. package/skills/skill-hubsearch/LICENSE +0 -21
  683. package/skills/skill-hubsearch/README.md +0 -17
  684. package/skills/skill-hubsearch/install.sh +0 -112
  685. package/skills/skill-hubsearch/package.json +0 -31
  686. package/skills/skill-hubsearch/src/auth.ts +0 -49
  687. package/skills/skill-hubsearch/src/installer.ts +0 -324
  688. package/skills/skill-hubsearch/src/skill-install.ts +0 -205
  689. package/skills/skill-image/install.sh +0 -112
  690. package/skills/skill-image/src/auth.ts +0 -49
  691. package/skills/skill-image/src/http-client.ts +0 -128
  692. package/skills/skill-image/src/index-http.ts +0 -111
  693. package/skills/skill-image/src/installer.ts +0 -324
  694. package/skills/skill-image/src/skill-install.ts +0 -205
  695. package/skills/skill-implementation-architecture/CLAUDE.md +0 -19
  696. package/skills/skill-implementation-architecture/package.json +0 -32
  697. package/skills/skill-implementation-architecture/src/index.ts +0 -460
  698. package/skills/skill-implementation-architecture/tsconfig.json +0 -14
  699. package/skills/skill-implementation-audit/CLAUDE.md +0 -19
  700. package/skills/skill-implementation-audit/package.json +0 -32
  701. package/skills/skill-implementation-audit/src/index.ts +0 -502
  702. package/skills/skill-implementation-audit/tsconfig.json +0 -14
  703. package/skills/skill-implementation-cost/CLAUDE.md +0 -19
  704. package/skills/skill-implementation-cost/package.json +0 -32
  705. package/skills/skill-implementation-cost/src/index.ts +0 -873
  706. package/skills/skill-implementation-cost/tsconfig.json +0 -14
  707. package/skills/skill-implementation-dispatch/CLAUDE.md +0 -19
  708. package/skills/skill-implementation-dispatch/package.json +0 -32
  709. package/skills/skill-implementation-dispatch/src/index.ts +0 -390
  710. package/skills/skill-implementation-dispatch/tsconfig.json +0 -14
  711. package/skills/skill-implementation-hook/CLAUDE.md +0 -19
  712. package/skills/skill-implementation-hook/package.json +0 -32
  713. package/skills/skill-implementation-hook/src/index.ts +0 -787
  714. package/skills/skill-implementation-hook/tsconfig.json +0 -14
  715. package/skills/skill-implementation-index/CLAUDE.md +0 -19
  716. package/skills/skill-implementation-index/package.json +0 -32
  717. package/skills/skill-implementation-index/src/index.ts +0 -767
  718. package/skills/skill-implementation-index/tsconfig.json +0 -14
  719. package/skills/skill-implementation-init/CLAUDE.md +0 -19
  720. package/skills/skill-implementation-init/package.json +0 -32
  721. package/skills/skill-implementation-init/src/index.ts +0 -378
  722. package/skills/skill-implementation-init/tsconfig.json +0 -14
  723. package/skills/skill-implementation-memento/CLAUDE.md +0 -19
  724. package/skills/skill-implementation-memento/package.json +0 -32
  725. package/skills/skill-implementation-memento/src/index.ts +0 -442
  726. package/skills/skill-implementation-memento/tsconfig.json +0 -14
  727. package/skills/skill-linear/LICENSE +0 -21
  728. package/skills/skill-linear/README.md +0 -28
  729. package/skills/skill-linear/SKILL.md +0 -94
  730. package/skills/skill-linear/install.sh +0 -112
  731. package/skills/skill-linear/package.json +0 -31
  732. package/skills/skill-linear/src/auth.ts +0 -49
  733. package/skills/skill-linear/src/installer.ts +0 -324
  734. package/skills/skill-linear/src/skill-install.ts +0 -174
  735. package/skills/skill-mail/LICENSE +0 -21
  736. package/skills/skill-mail/README.md +0 -17
  737. package/skills/skill-mail/install.sh +0 -112
  738. package/skills/skill-mail/package.json +0 -31
  739. package/skills/skill-mail/src/auth.ts +0 -49
  740. package/skills/skill-mail/src/installer.ts +0 -324
  741. package/skills/skill-mail/src/skill-install.ts +0 -205
  742. package/skills/skill-manage-gmail/CLAUDE.md +0 -19
  743. package/skills/skill-manage-gmail/package.json +0 -32
  744. package/skills/skill-manage-gmail/src/index.ts +0 -504
  745. package/skills/skill-manage-gmail/tsconfig.json +0 -14
  746. package/skills/skill-merch-mockup-factory/CLAUDE.md +0 -19
  747. package/skills/skill-merch-mockup-factory/package.json +0 -32
  748. package/skills/skill-merch-mockup-factory/src/index.ts +0 -296
  749. package/skills/skill-merch-mockup-factory/tsconfig.json +0 -14
  750. package/skills/skill-message/LICENSE +0 -21
  751. package/skills/skill-message/README.md +0 -17
  752. package/skills/skill-message/install.sh +0 -112
  753. package/skills/skill-message/package.json +0 -31
  754. package/skills/skill-message/src/auth.ts +0 -49
  755. package/skills/skill-message/src/installer.ts +0 -324
  756. package/skills/skill-message/src/skill-install.ts +0 -205
  757. package/skills/skill-newsletter-campaign-planner/CLAUDE.md +0 -19
  758. package/skills/skill-newsletter-campaign-planner/package.json +0 -32
  759. package/skills/skill-newsletter-campaign-planner/src/index.ts +0 -252
  760. package/skills/skill-newsletter-campaign-planner/tsconfig.json +0 -14
  761. package/skills/skill-notify/LICENSE +0 -21
  762. package/skills/skill-notify/README.md +0 -17
  763. package/skills/skill-notify/install.sh +0 -112
  764. package/skills/skill-notify/package.json +0 -31
  765. package/skills/skill-notify/src/auth.ts +0 -49
  766. package/skills/skill-notify/src/installer.ts +0 -324
  767. package/skills/skill-notify/src/skill-install.ts +0 -205
  768. package/skills/skill-notion/LICENSE +0 -21
  769. package/skills/skill-notion/README.md +0 -27
  770. package/skills/skill-notion/SKILL.md +0 -115
  771. package/skills/skill-notion/install.sh +0 -112
  772. package/skills/skill-notion/package.json +0 -31
  773. package/skills/skill-notion/src/auth.ts +0 -49
  774. package/skills/skill-notion/src/installer.ts +0 -324
  775. package/skills/skill-notion/src/skill-install.ts +0 -174
  776. package/skills/skill-parse-pdf/CLAUDE.md +0 -19
  777. package/skills/skill-parse-pdf/package.json +0 -32
  778. package/skills/skill-parse-pdf/src/index.ts +0 -581
  779. package/skills/skill-parse-pdf/tsconfig.json +0 -14
  780. package/skills/skill-playwright/LICENSE +0 -21
  781. package/skills/skill-playwright/README.md +0 -27
  782. package/skills/skill-playwright/SKILL.md +0 -116
  783. package/skills/skill-playwright/install.sh +0 -112
  784. package/skills/skill-playwright/package.json +0 -31
  785. package/skills/skill-playwright/src/auth.ts +0 -49
  786. package/skills/skill-playwright/src/installer.ts +0 -324
  787. package/skills/skill-playwright/src/skill-install.ts +0 -174
  788. package/skills/skill-projectbuild/LICENSE +0 -21
  789. package/skills/skill-projectbuild/README.md +0 -17
  790. package/skills/skill-projectbuild/install.sh +0 -112
  791. package/skills/skill-projectbuild/package.json +0 -31
  792. package/skills/skill-projectbuild/src/auth.ts +0 -49
  793. package/skills/skill-projectbuild/src/installer.ts +0 -324
  794. package/skills/skill-projectbuild/src/skill-install.ts +0 -205
  795. package/skills/skill-read-gmail/CLAUDE.md +0 -19
  796. package/skills/skill-read-gmail/package.json +0 -32
  797. package/skills/skill-read-gmail/src/index.ts +0 -343
  798. package/skills/skill-read-gmail/tsconfig.json +0 -14
  799. package/skills/skill-remember/LICENSE +0 -21
  800. package/skills/skill-remember/README.md +0 -17
  801. package/skills/skill-remember/install.sh +0 -112
  802. package/skills/skill-remember/package.json +0 -31
  803. package/skills/skill-remember/src/auth.ts +0 -49
  804. package/skills/skill-remember/src/installer.ts +0 -324
  805. package/skills/skill-remember/src/skill-install.ts +0 -205
  806. package/skills/skill-schedule/README.md +0 -17
  807. package/skills/skill-schedule/install.sh +0 -112
  808. package/skills/skill-schedule/src/auth.ts +0 -49
  809. package/skills/skill-schedule/src/installer.ts +0 -324
  810. package/skills/skill-schedule/src/skill-install.ts +0 -205
  811. package/skills/skill-search/LICENSE +0 -21
  812. package/skills/skill-search/README.md +0 -17
  813. package/skills/skill-search/install.sh +0 -112
  814. package/skills/skill-search/package.json +0 -31
  815. package/skills/skill-search/src/auth.ts +0 -49
  816. package/skills/skill-search/src/installer.ts +0 -324
  817. package/skills/skill-search/src/skill-install.ts +0 -205
  818. package/skills/skill-shadcn/LICENSE +0 -21
  819. package/skills/skill-shadcn/README.md +0 -27
  820. package/skills/skill-shadcn/SKILL.md +0 -113
  821. package/skills/skill-shadcn/install.sh +0 -112
  822. package/skills/skill-shadcn/package.json +0 -31
  823. package/skills/skill-shadcn/src/auth.ts +0 -49
  824. package/skills/skill-shadcn/src/installer.ts +0 -324
  825. package/skills/skill-shadcn/src/skill-install.ts +0 -174
  826. package/skills/skill-shadcn-theme/CLAUDE.md +0 -19
  827. package/skills/skill-shadcn-theme/package.json +0 -32
  828. package/skills/skill-shadcn-theme/src/index.ts +0 -16
  829. package/skills/skill-shadcn-theme/tsconfig.json +0 -14
  830. package/skills/skill-social-template-kit/CLAUDE.md +0 -19
  831. package/skills/skill-social-template-kit/package.json +0 -32
  832. package/skills/skill-social-template-kit/src/index.ts +0 -303
  833. package/skills/skill-social-template-kit/tsconfig.json +0 -14
  834. package/skills/skill-summarize/LICENSE +0 -21
  835. package/skills/skill-summarize/README.md +0 -17
  836. package/skills/skill-summarize/install.sh +0 -112
  837. package/skills/skill-summarize/package.json +0 -31
  838. package/skills/skill-summarize/src/auth.ts +0 -49
  839. package/skills/skill-summarize/src/installer.ts +0 -324
  840. package/skills/skill-summarize/src/skill-install.ts +0 -205
  841. package/skills/skill-sync/LICENSE +0 -21
  842. package/skills/skill-sync/README.md +0 -17
  843. package/skills/skill-sync/install.sh +0 -112
  844. package/skills/skill-sync/package.json +0 -31
  845. package/skills/skill-sync/src/auth.ts +0 -49
  846. package/skills/skill-sync/src/installer.ts +0 -324
  847. package/skills/skill-sync/src/skill-install.ts +0 -205
  848. package/skills/skill-time-blocking-orchestrator/CLAUDE.md +0 -19
  849. package/skills/skill-time-blocking-orchestrator/package.json +0 -32
  850. package/skills/skill-time-blocking-orchestrator/src/index.ts +0 -328
  851. package/skills/skill-time-blocking-orchestrator/tsconfig.json +0 -14
  852. package/skills/skill-transcript/install.sh +0 -112
  853. package/skills/skill-transcript/src/auth.ts +0 -49
  854. package/skills/skill-transcript/src/http-client.ts +0 -128
  855. package/skills/skill-transcript/src/index-http.ts +0 -111
  856. package/skills/skill-transcript/src/installer.ts +0 -324
  857. package/skills/skill-transcript/src/skill-install.ts +0 -205
  858. package/skills/skill-transform/.env.example +0 -2
  859. package/skills/skill-transform/LICENSE +0 -21
  860. package/skills/skill-transform/README.md +0 -17
  861. package/skills/skill-transform/SKILL.md +0 -127
  862. package/skills/skill-transform/install.sh +0 -112
  863. package/skills/skill-transform/package.json +0 -37
  864. package/skills/skill-transform/src/auth.ts +0 -49
  865. package/skills/skill-transform/src/http-client.ts +0 -128
  866. package/skills/skill-transform/src/index-http.ts +0 -111
  867. package/skills/skill-transform/src/index-local.ts +0 -368
  868. package/skills/skill-transform/src/index.ts +0 -111
  869. package/skills/skill-transform/src/installer.ts +0 -324
  870. package/skills/skill-transform/src/skill-install.ts +0 -205
  871. package/skills/skill-transform/src/transformers/ai-transformer.ts +0 -202
  872. package/skills/skill-transform/src/transformers/format-detector.ts +0 -147
  873. package/skills/skill-transform/src/types.ts +0 -95
  874. package/skills/skill-transform/tsconfig.json +0 -18
  875. package/skills/skill-translate/LICENSE +0 -21
  876. package/skills/skill-translate/README.md +0 -17
  877. package/skills/skill-translate/install.sh +0 -112
  878. package/skills/skill-translate/package.json +0 -31
  879. package/skills/skill-translate/src/auth.ts +0 -49
  880. package/skills/skill-translate/src/installer.ts +0 -324
  881. package/skills/skill-translate/src/skill-install.ts +0 -205
  882. package/skills/skill-vendor-comparison-coach/CLAUDE.md +0 -19
  883. package/skills/skill-vendor-comparison-coach/package.json +0 -32
  884. package/skills/skill-vendor-comparison-coach/src/index.ts +0 -337
  885. package/skills/skill-vendor-comparison-coach/tsconfig.json +0 -14
  886. package/skills/skill-video/install.sh +0 -112
  887. package/skills/skill-video/src/auth.ts +0 -49
  888. package/skills/skill-video/src/http-client.ts +0 -128
  889. package/skills/skill-video/src/index-http.ts +0 -111
  890. package/skills/skill-video/src/installer.ts +0 -324
  891. package/skills/skill-video/src/skill-install.ts +0 -205
  892. package/skills/skill-videodownload/.env.example +0 -5
  893. package/skills/skill-videodownload/CLAUDE.md +0 -64
  894. package/skills/skill-videodownload/LICENSE +0 -21
  895. package/skills/skill-videodownload/README.md +0 -166
  896. package/skills/skill-videodownload/package.json +0 -49
  897. package/skills/skill-videodownload/src/commands/config.ts +0 -89
  898. package/skills/skill-videodownload/src/commands/download.ts +0 -61
  899. package/skills/skill-videodownload/src/commands/info.ts +0 -83
  900. package/skills/skill-videodownload/src/commands/list.ts +0 -84
  901. package/skills/skill-videodownload/src/lib/downloader.ts +0 -270
  902. package/skills/skill-videodownload/src/lib/storage.ts +0 -167
  903. package/skills/skill-videodownload/src/types/index.ts +0 -64
  904. package/skills/skill-videodownload/src/utils/logger.ts +0 -49
  905. package/skills/skill-videodownload/src/utils/paths.ts +0 -94
  906. package/skills/skill-videodownload/tsconfig.json +0 -17
  907. package/skills/skill-voiceover/.env.example +0 -5
  908. package/skills/skill-voiceover/CLAUDE.md +0 -40
  909. package/skills/skill-voiceover/LICENSE +0 -21
  910. package/skills/skill-voiceover/README.md +0 -64
  911. package/skills/skill-voiceover/package.json +0 -43
  912. package/skills/skill-voiceover/src/commands/config.ts +0 -38
  913. package/skills/skill-voiceover/src/commands/generate.ts +0 -37
  914. package/skills/skill-voiceover/src/commands/voices.ts +0 -33
  915. package/skills/skill-voiceover/src/lib/generator.ts +0 -159
  916. package/skills/skill-voiceover/src/lib/storage.ts +0 -55
  917. package/skills/skill-voiceover/src/types/index.ts +0 -55
  918. package/skills/skill-voiceover/src/utils/logger.ts +0 -30
  919. package/skills/skill-voiceover/src/utils/paths.ts +0 -22
  920. package/skills/skill-voiceover/tsconfig.json +0 -17
  921. package/skills/skill-websearch/LICENSE +0 -21
  922. package/skills/skill-websearch/README.md +0 -17
  923. package/skills/skill-websearch/install.sh +0 -112
  924. package/skills/skill-websearch/package.json +0 -31
  925. package/skills/skill-websearch/src/auth.ts +0 -49
  926. package/skills/skill-websearch/src/installer.ts +0 -324
  927. package/skills/skill-websearch/src/skill-install.ts +0 -205
  928. package/skills/skill-write/install.sh +0 -112
  929. package/skills/skill-write/src/auth.ts +0 -49
  930. package/skills/skill-write/src/http-client.ts +0 -128
  931. package/skills/skill-write/src/index-http.ts +0 -111
  932. package/skills/skill-write/src/installer.ts +0 -324
  933. package/skills/skill-write/src/skill-install.ts +0 -205
  934. package/src/cli/cli.test.ts +0 -325
  935. package/src/cli/components/App.tsx +0 -186
  936. package/src/cli/components/CategorySelect.tsx +0 -38
  937. package/src/cli/components/Header.tsx +0 -18
  938. package/src/cli/components/InstallProgress.tsx +0 -97
  939. package/src/cli/components/SearchView.tsx +0 -108
  940. package/src/cli/components/SkillSelect.tsx +0 -92
  941. package/src/cli/index.tsx +0 -559
  942. package/src/index.ts +0 -49
  943. package/src/lib/installer.test.ts +0 -328
  944. package/src/lib/installer.ts +0 -297
  945. package/src/lib/registry.test.ts +0 -147
  946. package/src/lib/skillinfo.test.ts +0 -195
  947. package/src/lib/skillinfo.ts +0 -356
  948. package/src/mcp/index.ts +0 -234
  949. package/src/mcp/mcp.test.ts +0 -212
  950. package/tsconfig.json +0 -17
  951. /package/skills/{skill-audio/src → _common}/auth.ts +0 -0
  952. /package/skills/{skill-audio/src → _common}/http-client.ts +0 -0
  953. /package/skills/{skill-audio → _common}/install.sh +0 -0
  954. /package/skills/{skill-audio/src → _common}/installer.ts +0 -0
  955. /package/skills/{skill-audio/src → _common}/skill-install.ts +0 -0
  956. /package/skills/{skill-compose-gmail → skill-gmail}/CLAUDE.md +0 -0
  957. /package/skills/{skill-compose-gmail → skill-gmail}/src/index.ts +0 -0
@@ -1,1149 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- /**
4
- * Deep Research Skill
5
- *
6
- * Performs comprehensive multi-step research using AI and web search.
7
- * Breaks down questions, searches sources, analyzes content, and generates
8
- * detailed reports with proper citations.
9
- */
10
-
11
- import { parseArgs } from "util";
12
- import { writeFile, mkdir, appendFile } from "fs/promises";
13
- import { join } from "path";
14
- import { existsSync, mkdirSync } from "fs";
15
- import { randomUUID } from "crypto";
16
-
17
- // ============================================================================
18
- // Security: HTML Escaping to prevent XSS
19
- // ============================================================================
20
-
21
- /**
22
- * Escape HTML special characters to prevent XSS attacks
23
- */
24
- function escapeHtml(str: string | undefined | null): string {
25
- if (str === undefined || str === null) return "";
26
- return String(str)
27
- .replace(/&/g, "&")
28
- .replace(/</g, "&lt;")
29
- .replace(/>/g, "&gt;")
30
- .replace(/"/g, "&quot;")
31
- .replace(/'/g, "&#x27;");
32
- }
33
-
34
- // ============================================================================
35
- // Constants & Logging
36
- // ============================================================================
37
-
38
- const SKILL_NAME = "deep-research";
39
- const SESSION_ID = randomUUID().slice(0, 8);
40
- const SKILLS_OUTPUT_DIR = process.env.SKILLS_OUTPUT_DIR || join(process.cwd(), ".skills");
41
- const LOGS_DIR = join(SKILLS_OUTPUT_DIR, "logs", SKILL_NAME);
42
- const SESSION_TIMESTAMP = new Date().toISOString().replace(/[:.]/g, "_").slice(0, 19);
43
-
44
- function ensureDir(dir: string) {
45
- if (!existsSync(dir)) {
46
- mkdirSync(dir, { recursive: true });
47
- }
48
- }
49
-
50
- async function log(message: string, level: "info" | "error" | "success" | "debug" = "info") {
51
- ensureDir(LOGS_DIR);
52
- const timestamp = new Date().toISOString();
53
- const logFile = join(LOGS_DIR, `log_${SESSION_TIMESTAMP}_${SESSION_ID}.log`);
54
- const logEntry = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
55
-
56
- try {
57
- await appendFile(logFile, logEntry);
58
- } catch (e) {
59
- // Silent fail for logging
60
- }
61
-
62
- const prefix = level === "error" ? "āŒ" : level === "success" ? "āœ…" : level === "debug" ? "šŸ”" : "ā„¹ļø";
63
- if (level === "error") {
64
- console.error(`${prefix} ${message}`);
65
- } else if (level !== "debug") {
66
- console.log(`${prefix} ${message}`);
67
- }
68
- }
69
-
70
- // ============================================================================
71
- // Types
72
- // ============================================================================
73
-
74
- type ResearchDepth = "quick" | "standard" | "deep" | "exhaustive";
75
- type ResearchMode = "general" | "academic" | "news" | "technical" | "market";
76
- type OutputFormat = "md" | "json" | "html" | "pdf";
77
- type CitationStyle = "apa" | "mla" | "chicago" | "none";
78
-
79
- interface ResearchOptions {
80
- query: string;
81
- depth: ResearchDepth;
82
- mode: ResearchMode;
83
- maxSources: number;
84
- output?: string;
85
- format: OutputFormat;
86
- citationStyle: CitationStyle;
87
- includeRaw: boolean;
88
- focusDomains?: string[];
89
- excludeDomains?: string[];
90
- dateRange?: { start: string; end: string };
91
- language: string;
92
- verbose: boolean;
93
- }
94
-
95
- interface Source {
96
- id: number;
97
- title: string;
98
- url: string;
99
- authors?: string[];
100
- date?: string;
101
- type: string;
102
- content: string;
103
- credibilityScore: number;
104
- domain: string;
105
- }
106
-
107
- interface Finding {
108
- finding: string;
109
- sources: number[];
110
- confidence: "high" | "medium" | "low";
111
- quotes?: string[];
112
- }
113
-
114
- interface ResearchResult {
115
- metadata: {
116
- topic: string;
117
- generatedAt: string;
118
- depth: ResearchDepth;
119
- mode: ResearchMode;
120
- sourcesAnalyzed: number;
121
- durationSeconds: number;
122
- tokenUsage: number;
123
- };
124
- executiveSummary: string;
125
- keyFindings: Finding[];
126
- sections: Array<{
127
- title: string;
128
- content: string;
129
- subsections?: Array<{ title: string; content: string }>;
130
- }>;
131
- sources: Source[];
132
- searchQueries: string[];
133
- rawData?: any;
134
- }
135
-
136
- // ============================================================================
137
- // Configuration
138
- // ============================================================================
139
-
140
- const DEPTH_CONFIG = {
141
- quick: { sources: 10, iterations: 1, queries: 5 },
142
- standard: { sources: 20, iterations: 3, queries: 12 },
143
- deep: { sources: 50, iterations: 5, queries: 25 },
144
- exhaustive: { sources: 100, iterations: 7, queries: 40 },
145
- };
146
-
147
- const MODE_CONFIG = {
148
- general: {
149
- domains: [],
150
- keywords: [],
151
- },
152
- academic: {
153
- domains: ["arxiv.org", "scholar.google.com", "pubmed.ncbi.nlm.nih.gov", ".edu", ".gov"],
154
- keywords: ["research", "study", "paper", "journal", "peer-reviewed"],
155
- },
156
- news: {
157
- domains: ["reuters.com", "apnews.com", "bbc.com", "theguardian.com", "nytimes.com"],
158
- keywords: ["news", "breaking", "report", "announced"],
159
- },
160
- technical: {
161
- domains: ["github.com", "stackoverflow.com", "dev.to", "medium.com/tag/programming"],
162
- keywords: ["documentation", "tutorial", "guide", "implementation", "code"],
163
- },
164
- market: {
165
- domains: ["bloomberg.com", "reuters.com", "wsj.com", "forbes.com", "crunchbase.com"],
166
- keywords: ["market", "business", "company", "revenue", "industry"],
167
- },
168
- };
169
-
170
- // ============================================================================
171
- // API Clients
172
- // ============================================================================
173
-
174
- class AIClient {
175
- private provider: "openai" | "anthropic";
176
- private apiKey: string;
177
- private baseURL: string;
178
- private model: string;
179
-
180
- constructor() {
181
- if (process.env.OPENAI_API_KEY) {
182
- this.provider = "openai";
183
- this.apiKey = process.env.OPENAI_API_KEY;
184
- this.baseURL = "https://api.openai.com/v1";
185
- this.model = "gpt-4o";
186
- } else if (process.env.ANTHROPIC_API_KEY) {
187
- this.provider = "anthropic";
188
- this.apiKey = process.env.ANTHROPIC_API_KEY;
189
- this.baseURL = "https://api.anthropic.com/v1";
190
- this.model = "claude-3-5-sonnet-20241022";
191
- } else {
192
- throw new Error("No AI API key found. Set OPENAI_API_KEY or ANTHROPIC_API_KEY");
193
- }
194
- }
195
-
196
- async chat(messages: Array<{ role: string; content: string }>, options?: { maxTokens?: number }): Promise<string> {
197
- if (this.provider === "openai") {
198
- return this.chatOpenAI(messages, options);
199
- } else {
200
- return this.chatAnthropic(messages, options);
201
- }
202
- }
203
-
204
- private async chatOpenAI(messages: Array<{ role: string; content: string }>, options?: { maxTokens?: number }): Promise<string> {
205
- const response = await fetch(`${this.baseURL}/chat/completions`, {
206
- method: "POST",
207
- headers: {
208
- "Content-Type": "application/json",
209
- "Authorization": `Bearer ${this.apiKey}`,
210
- },
211
- body: JSON.stringify({
212
- model: this.model,
213
- messages,
214
- max_tokens: options?.maxTokens || 4000,
215
- temperature: 0.7,
216
- }),
217
- });
218
-
219
- if (!response.ok) {
220
- const error = await response.text();
221
- throw new Error(`OpenAI API error: ${response.status} ${error}`);
222
- }
223
-
224
- const data = await response.json();
225
- return data.choices[0].message.content;
226
- }
227
-
228
- private async chatAnthropic(messages: Array<{ role: string; content: string }>, options?: { maxTokens?: number }): Promise<string> {
229
- // Convert messages format for Anthropic
230
- const systemMessage = messages.find((m) => m.role === "system")?.content || "";
231
- const userMessages = messages.filter((m) => m.role !== "system");
232
-
233
- const response = await fetch(`${this.baseURL}/messages`, {
234
- method: "POST",
235
- headers: {
236
- "Content-Type": "application/json",
237
- "x-api-key": this.apiKey,
238
- "anthropic-version": "2023-06-01",
239
- },
240
- body: JSON.stringify({
241
- model: this.model,
242
- max_tokens: options?.maxTokens || 4000,
243
- system: systemMessage,
244
- messages: userMessages,
245
- }),
246
- });
247
-
248
- if (!response.ok) {
249
- const error = await response.text();
250
- throw new Error(`Anthropic API error: ${response.status} ${error}`);
251
- }
252
-
253
- const data = await response.json();
254
- return data.content[0].text;
255
- }
256
- }
257
-
258
- class SearchClient {
259
- private provider: "exa" | "tavily" | "serpapi";
260
- private apiKey: string;
261
- private baseURL: string;
262
-
263
- constructor() {
264
- if (process.env.EXA_API_KEY) {
265
- this.provider = "exa";
266
- this.apiKey = process.env.EXA_API_KEY;
267
- this.baseURL = "https://api.exa.ai";
268
- } else if (process.env.TAVILY_API_KEY) {
269
- this.provider = "tavily";
270
- this.apiKey = process.env.TAVILY_API_KEY;
271
- this.baseURL = "https://api.tavily.com";
272
- } else if (process.env.SERPAPI_KEY) {
273
- this.provider = "serpapi";
274
- this.apiKey = process.env.SERPAPI_KEY;
275
- this.baseURL = "https://serpapi.com";
276
- } else {
277
- throw new Error("No search API key found. Set EXA_API_KEY, TAVILY_API_KEY, or SERPAPI_KEY");
278
- }
279
- }
280
-
281
- async search(
282
- query: string,
283
- options: {
284
- numResults?: number;
285
- includeDomains?: string[];
286
- excludeDomains?: string[];
287
- dateRange?: { start: string; end: string };
288
- } = {}
289
- ): Promise<Array<{ title: string; url: string; snippet: string; date?: string }>> {
290
- if (this.provider === "exa") {
291
- return this.searchExa(query, options);
292
- } else if (this.provider === "tavily") {
293
- return this.searchTavily(query, options);
294
- } else {
295
- return this.searchSerpAPI(query, options);
296
- }
297
- }
298
-
299
- private async searchExa(
300
- query: string,
301
- options: {
302
- numResults?: number;
303
- includeDomains?: string[];
304
- excludeDomains?: string[];
305
- dateRange?: { start: string; end: string };
306
- }
307
- ): Promise<Array<{ title: string; url: string; snippet: string; date?: string }>> {
308
- const response = await fetch(`${this.baseURL}/search`, {
309
- method: "POST",
310
- headers: {
311
- "Content-Type": "application/json",
312
- "x-api-key": this.apiKey,
313
- },
314
- body: JSON.stringify({
315
- query,
316
- num_results: options.numResults || 10,
317
- use_autoprompt: true,
318
- include_domains: options.includeDomains,
319
- exclude_domains: options.excludeDomains,
320
- start_published_date: options.dateRange?.start,
321
- end_published_date: options.dateRange?.end,
322
- }),
323
- });
324
-
325
- if (!response.ok) {
326
- throw new Error(`Exa API error: ${response.status}`);
327
- }
328
-
329
- const data = await response.json();
330
- return data.results.map((r: any) => ({
331
- title: r.title,
332
- url: r.url,
333
- snippet: r.text || r.snippet || "",
334
- date: r.published_date,
335
- }));
336
- }
337
-
338
- private async searchTavily(
339
- query: string,
340
- options: {
341
- numResults?: number;
342
- includeDomains?: string[];
343
- excludeDomains?: string[];
344
- }
345
- ): Promise<Array<{ title: string; url: string; snippet: string; date?: string }>> {
346
- const response = await fetch(`${this.baseURL}/search`, {
347
- method: "POST",
348
- headers: {
349
- "Content-Type": "application/json",
350
- },
351
- body: JSON.stringify({
352
- api_key: this.apiKey,
353
- query,
354
- max_results: options.numResults || 10,
355
- include_domains: options.includeDomains,
356
- exclude_domains: options.excludeDomains,
357
- search_depth: "advanced",
358
- }),
359
- });
360
-
361
- if (!response.ok) {
362
- throw new Error(`Tavily API error: ${response.status}`);
363
- }
364
-
365
- const data = await response.json();
366
- return data.results.map((r: any) => ({
367
- title: r.title,
368
- url: r.url,
369
- snippet: r.content,
370
- }));
371
- }
372
-
373
- private async searchSerpAPI(
374
- query: string,
375
- options: {
376
- numResults?: number;
377
- }
378
- ): Promise<Array<{ title: string; url: string; snippet: string }>> {
379
- const params = new URLSearchParams({
380
- api_key: this.apiKey,
381
- q: query,
382
- num: String(options.numResults || 10),
383
- engine: "google",
384
- });
385
-
386
- const response = await fetch(`${this.baseURL}/search?${params}`);
387
-
388
- if (!response.ok) {
389
- throw new Error(`SerpAPI error: ${response.status}`);
390
- }
391
-
392
- const data = await response.json();
393
- return (data.organic_results || []).map((r: any) => ({
394
- title: r.title,
395
- url: r.link,
396
- snippet: r.snippet,
397
- }));
398
- }
399
- }
400
-
401
- // ============================================================================
402
- // Content Fetcher
403
- // ============================================================================
404
-
405
- async function fetchContent(url: string): Promise<string> {
406
- try {
407
- // Try Jina AI Reader first if available
408
- if (process.env.JINA_API_KEY) {
409
- const response = await fetch(`https://r.jina.ai/${url}`, {
410
- headers: {
411
- Authorization: `Bearer ${process.env.JINA_API_KEY}`,
412
- },
413
- });
414
- if (response.ok) {
415
- return await response.text();
416
- }
417
- }
418
-
419
- // Fallback to direct fetch
420
- const response = await fetch(url, {
421
- headers: {
422
- "User-Agent": "Mozilla/5.0 (compatible; skills.md-deep-research/1.0)",
423
- },
424
- });
425
-
426
- if (!response.ok) {
427
- throw new Error(`HTTP ${response.status}`);
428
- }
429
-
430
- const html = await response.text();
431
- // Basic text extraction (remove HTML tags)
432
- return html
433
- .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "")
434
- .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, "")
435
- .replace(/<[^>]+>/g, " ")
436
- .replace(/\s+/g, " ")
437
- .trim()
438
- .slice(0, 10000); // Limit to 10k chars
439
- } catch (error) {
440
- log(`Failed to fetch ${url}: ${error}`, "error");
441
- return "";
442
- }
443
- }
444
-
445
- // ============================================================================
446
- // Research Engine
447
- // ============================================================================
448
-
449
- class ResearchEngine {
450
- private ai: AIClient;
451
- private search: SearchClient;
452
- private options: ResearchOptions;
453
- private sources: Source[] = [];
454
- private allQueries: string[] = [];
455
- private tokenUsage = 0;
456
-
457
- constructor(options: ResearchOptions) {
458
- this.ai = new AIClient();
459
- this.search = new SearchClient();
460
- this.options = options;
461
- }
462
-
463
- async run(): Promise<ResearchResult> {
464
- const startTime = Date.now();
465
-
466
- if (this.options.verbose) {
467
- log(`Starting ${this.options.depth} research on: "${this.options.query}"`, "info");
468
- log(`Mode: ${this.options.mode}`, "info");
469
- }
470
-
471
- // Step 1: Break down the research question
472
- const subQuestions = await this.generateSubQuestions();
473
- if (this.options.verbose) {
474
- log(`Generated ${subQuestions.length} sub-questions`, "debug");
475
- }
476
-
477
- // Step 2: Generate search queries
478
- const searchQueries = await this.generateSearchQueries(subQuestions);
479
- if (this.options.verbose) {
480
- log(`Generated ${searchQueries.length} search queries`, "debug");
481
- }
482
-
483
- // Step 3: Search and fetch sources
484
- await this.searchAndFetchSources(searchQueries);
485
- if (this.options.verbose) {
486
- log(`Collected ${this.sources.length} sources`, "debug");
487
- }
488
-
489
- // Step 4: Analyze sources and extract findings
490
- const findings = await this.analyzeSourcesForFindings();
491
- if (this.options.verbose) {
492
- log(`Extracted ${findings.length} key findings`, "debug");
493
- }
494
-
495
- // Step 5: Generate executive summary
496
- const executiveSummary = await this.generateExecutiveSummary(findings);
497
-
498
- // Step 6: Generate detailed sections
499
- const sections = await this.generateDetailedSections(findings);
500
-
501
- // Step 7: Build result
502
- const duration = Math.floor((Date.now() - startTime) / 1000);
503
- const result: ResearchResult = {
504
- metadata: {
505
- topic: this.options.query,
506
- generatedAt: new Date().toISOString(),
507
- depth: this.options.depth,
508
- mode: this.options.mode,
509
- sourcesAnalyzed: this.sources.length,
510
- durationSeconds: duration,
511
- tokenUsage: this.tokenUsage,
512
- },
513
- executiveSummary,
514
- keyFindings: findings,
515
- sections,
516
- sources: this.sources,
517
- searchQueries: this.allQueries,
518
- rawData: this.options.includeRaw ? { subQuestions, searchQueries } : undefined,
519
- };
520
-
521
- return result;
522
- }
523
-
524
- private async generateSubQuestions(): Promise<string[]> {
525
- const config = DEPTH_CONFIG[this.options.depth];
526
- const numQuestions = Math.ceil(config.iterations * 2);
527
-
528
- const prompt = `You are a research expert. Break down this research question into ${numQuestions} focused sub-questions that will help conduct comprehensive research.
529
-
530
- Research Question: "${this.options.query}"
531
- Research Mode: ${this.options.mode}
532
-
533
- Generate ${numQuestions} specific, focused sub-questions. Each should explore a different aspect or angle.
534
- Return ONLY the questions, one per line, numbered.`;
535
-
536
- const response = await this.ai.chat([
537
- { role: "system", content: "You are a research planning expert." },
538
- { role: "user", content: prompt },
539
- ]);
540
-
541
- this.tokenUsage += response.length;
542
-
543
- return response
544
- .split("\n")
545
- .filter((line) => line.trim().match(/^\d+\./))
546
- .map((line) => line.replace(/^\d+\.\s*/, "").trim())
547
- .slice(0, numQuestions);
548
- }
549
-
550
- private async generateSearchQueries(subQuestions: string[]): Promise<string[]> {
551
- const config = DEPTH_CONFIG[this.options.depth];
552
- const modeConfig = MODE_CONFIG[this.options.mode];
553
-
554
- const prompt = `Generate ${config.queries} search queries to find information about these questions:
555
-
556
- ${subQuestions.map((q, i) => `${i + 1}. ${q}`).join("\n")}
557
-
558
- Research Mode: ${this.options.mode}
559
- ${modeConfig.keywords.length > 0 ? `Focus Keywords: ${modeConfig.keywords.join(", ")}` : ""}
560
-
561
- Generate diverse, specific search queries. Include different phrasings, technical terms, and related concepts.
562
- Return ONLY the search queries, one per line.`;
563
-
564
- const response = await this.ai.chat([
565
- { role: "system", content: "You are a search query optimization expert." },
566
- { role: "user", content: prompt },
567
- ]);
568
-
569
- this.tokenUsage += response.length;
570
-
571
- const queries = response
572
- .split("\n")
573
- .map((line) => line.replace(/^\d+\.\s*|-\s*/, "").trim())
574
- .filter((q) => q.length > 0)
575
- .slice(0, config.queries);
576
-
577
- this.allQueries = queries;
578
- return queries;
579
- }
580
-
581
- private async searchAndFetchSources(queries: string[]): Promise<void> {
582
- const config = DEPTH_CONFIG[this.options.depth];
583
- const modeConfig = MODE_CONFIG[this.options.mode];
584
- const resultsPerQuery = Math.ceil(config.sources / queries.length);
585
-
586
- const searchOptions = {
587
- numResults: resultsPerQuery,
588
- includeDomains: this.options.focusDomains || modeConfig.domains,
589
- excludeDomains: this.options.excludeDomains,
590
- dateRange: this.options.dateRange,
591
- };
592
-
593
- let sourceId = 1;
594
- const seenUrls = new Set<string>();
595
-
596
- for (const query of queries) {
597
- if (this.sources.length >= this.options.maxSources) break;
598
-
599
- try {
600
- const results = await this.search.search(query, searchOptions);
601
-
602
- for (const result of results) {
603
- if (this.sources.length >= this.options.maxSources) break;
604
- if (seenUrls.has(result.url)) continue;
605
-
606
- seenUrls.add(result.url);
607
-
608
- if (this.options.verbose) {
609
- log(`Fetching: ${result.title.slice(0, 60)}...`, "debug");
610
- }
611
-
612
- const content = await fetchContent(result.url);
613
- if (!content) continue;
614
-
615
- const domain = new URL(result.url).hostname;
616
- const source: Source = {
617
- id: sourceId++,
618
- title: result.title,
619
- url: result.url,
620
- date: result.date,
621
- type: this.classifySourceType(domain),
622
- content,
623
- credibilityScore: this.calculateCredibilityScore(domain, content),
624
- domain,
625
- };
626
-
627
- this.sources.push(source);
628
- }
629
- } catch (error) {
630
- log(`Search failed for query "${query}": ${error}`, "error");
631
- }
632
-
633
- // Rate limiting
634
- await new Promise((resolve) => setTimeout(resolve, 500));
635
- }
636
- }
637
-
638
- private classifySourceType(domain: string): string {
639
- if (domain.includes("arxiv.org") || domain.includes("scholar.google")) return "academic_preprint";
640
- if (domain.endsWith(".edu")) return "academic";
641
- if (domain.endsWith(".gov")) return "government";
642
- if (domain.includes("github.com")) return "code_repository";
643
- if (domain.includes("stackoverflow.com")) return "technical_forum";
644
- if (domain.includes("medium.com") || domain.includes("dev.to")) return "blog";
645
- if (domain.includes("reuters.com") || domain.includes("bbc.com")) return "news";
646
- return "web";
647
- }
648
-
649
- private calculateCredibilityScore(domain: string, content: string): number {
650
- let score = 0.5; // Base score
651
-
652
- // Domain-based scoring
653
- if (domain.endsWith(".edu")) score += 0.2;
654
- if (domain.endsWith(".gov")) score += 0.3;
655
- if (domain.includes("arxiv.org") || domain.includes("scholar.google")) score += 0.25;
656
- if (domain.includes("reuters.com") || domain.includes("apnews.com")) score += 0.2;
657
-
658
- // Content-based scoring
659
- if (content.includes("peer-reviewed") || content.includes("published in")) score += 0.1;
660
- if (content.includes("citation") || content.includes("references")) score += 0.05;
661
- if (content.length > 5000) score += 0.05; // Substantial content
662
-
663
- return Math.min(score, 1.0);
664
- }
665
-
666
- private async analyzeSourcesForFindings(): Promise<Finding[]> {
667
- const findings: Finding[] = [];
668
-
669
- // Group sources into batches for analysis
670
- const batchSize = 5;
671
- for (let i = 0; i < this.sources.length; i += batchSize) {
672
- const batch = this.sources.slice(i, i + batchSize);
673
-
674
- const sourcesText = batch
675
- .map(
676
- (s) =>
677
- `[Source ${s.id}] ${s.title}\nURL: ${s.url}\nContent: ${s.content.slice(0, 2000)}...`
678
- )
679
- .join("\n\n");
680
-
681
- const prompt = `Analyze these sources and extract key findings related to: "${this.options.query}"
682
-
683
- ${sourcesText}
684
-
685
- For each finding:
686
- 1. State the finding clearly
687
- 2. List source IDs that support it
688
- 3. Rate confidence (high/medium/low)
689
- 4. Extract 1-2 key quotes if relevant
690
-
691
- Return findings in JSON format:
692
- [
693
- {
694
- "finding": "Finding text",
695
- "sources": [1, 2],
696
- "confidence": "high",
697
- "quotes": ["quote 1", "quote 2"]
698
- }
699
- ]`;
700
-
701
- try {
702
- const response = await this.ai.chat([
703
- { role: "system", content: "You are a research analyst expert at synthesizing information." },
704
- { role: "user", content: prompt },
705
- ]);
706
-
707
- this.tokenUsage += response.length;
708
-
709
- // Extract JSON from response
710
- const jsonMatch = response.match(/\[[\s\S]*\]/);
711
- if (jsonMatch) {
712
- const batchFindings = JSON.parse(jsonMatch[0]);
713
- findings.push(...batchFindings);
714
- }
715
- } catch (error) {
716
- log(`Failed to analyze batch: ${error}`, "error");
717
- }
718
- }
719
-
720
- return findings.slice(0, 20); // Limit to top 20 findings
721
- }
722
-
723
- private async generateExecutiveSummary(findings: Finding[]): Promise<string> {
724
- const findingsText = findings
725
- .map((f) => `- ${f.finding} (Confidence: ${f.confidence})`)
726
- .join("\n");
727
-
728
- const prompt = `Write a comprehensive executive summary (2-3 paragraphs) for this research on: "${this.options.query}"
729
-
730
- Key Findings:
731
- ${findingsText}
732
-
733
- The summary should:
734
- - Highlight the most important insights
735
- - Provide context and implications
736
- - Be clear and concise
737
- - Use professional language`;
738
-
739
- const response = await this.ai.chat([
740
- { role: "system", content: "You are a professional research writer." },
741
- { role: "user", content: prompt },
742
- ]);
743
-
744
- this.tokenUsage += response.length;
745
- return response.trim();
746
- }
747
-
748
- private async generateDetailedSections(findings: Finding[]): Promise<Array<{ title: string; content: string }>> {
749
- // Group findings into sections
750
- const sectionsPrompt = `Given these findings about "${this.options.query}", suggest 3-5 main section titles for organizing them:
751
-
752
- ${findings.map((f, i) => `${i + 1}. ${f.finding}`).join("\n")}
753
-
754
- Return ONLY the section titles, one per line.`;
755
-
756
- const sectionsResponse = await this.ai.chat([
757
- { role: "system", content: "You are a document structure expert." },
758
- { role: "user", content: sectionsPrompt },
759
- ]);
760
-
761
- this.tokenUsage += sectionsResponse.length;
762
-
763
- const sectionTitles = sectionsResponse
764
- .split("\n")
765
- .map((line) => line.replace(/^\d+\.\s*|-\s*/, "").trim())
766
- .filter((t) => t.length > 0)
767
- .slice(0, 5);
768
-
769
- // Generate content for each section
770
- const sections = [];
771
- for (const title of sectionTitles) {
772
- const relevantFindings = findings.slice(0, 4); // Use top findings
773
-
774
- const contentPrompt = `Write detailed content for the section "${title}" in a research report about "${this.options.query}".
775
-
776
- Incorporate these findings:
777
- ${relevantFindings.map((f) => `- ${f.finding}`).join("\n")}
778
-
779
- Include:
780
- - Detailed analysis
781
- - Evidence and supporting information
782
- - Citations in format [Source N]
783
- - 2-3 paragraphs
784
-
785
- Write in clear, professional academic style.`;
786
-
787
- const content = await this.ai.chat([
788
- { role: "system", content: "You are a professional research writer." },
789
- { role: "user", content: contentPrompt },
790
- ]);
791
-
792
- this.tokenUsage += content.length;
793
-
794
- sections.push({
795
- title,
796
- content: content.trim(),
797
- });
798
- }
799
-
800
- return sections;
801
- }
802
- }
803
-
804
- // ============================================================================
805
- // Output Formatters
806
- // ============================================================================
807
-
808
- function formatMarkdown(result: ResearchResult, citationStyle: CitationStyle): string {
809
- let md = `# Research Report: ${result.metadata.topic}\n\n`;
810
- md += `**Generated**: ${new Date(result.metadata.generatedAt).toLocaleString()}\n`;
811
- md += `**Depth**: ${result.metadata.depth}\n`;
812
- md += `**Sources Analyzed**: ${result.metadata.sourcesAnalyzed}\n`;
813
- md += `**Research Mode**: ${result.metadata.mode}\n\n`;
814
- md += `---\n\n`;
815
-
816
- // Executive Summary
817
- md += `## Executive Summary\n\n`;
818
- md += `${result.executiveSummary}\n\n`;
819
- md += `---\n\n`;
820
-
821
- // Table of Contents
822
- md += `## Table of Contents\n\n`;
823
- md += `1. Introduction\n`;
824
- md += `2. Key Findings\n`;
825
- md += `3. Detailed Analysis\n`;
826
- result.sections.forEach((section, i) => {
827
- md += ` 3.${i + 1} ${section.title}\n`;
828
- });
829
- md += `4. Methodology\n`;
830
- md += `5. Conclusions\n`;
831
- md += `6. Sources\n\n`;
832
- md += `---\n\n`;
833
-
834
- // Introduction
835
- md += `## 1. Introduction\n\n`;
836
- md += `This report presents comprehensive research on "${result.metadata.topic}". `;
837
- md += `The research was conducted using ${result.metadata.mode} mode with ${result.metadata.depth} depth, `;
838
- md += `analyzing ${result.metadata.sourcesAnalyzed} sources over ${result.searchQueries.length} search queries.\n\n`;
839
- md += `---\n\n`;
840
-
841
- // Key Findings
842
- md += `## 2. Key Findings\n\n`;
843
- result.keyFindings.forEach((finding) => {
844
- const sourceRefs = finding.sources.map((id) => id).join(", ");
845
- md += `- **${finding.finding}** [Sources: ${sourceRefs}] _(Confidence: ${finding.confidence})_\n`;
846
-
847
- if (finding.quotes && finding.quotes.length > 0) {
848
- md += ` > "${finding.quotes[0]}"\n`;
849
- }
850
- });
851
- md += `\n---\n\n`;
852
-
853
- // Detailed Analysis
854
- md += `## 3. Detailed Analysis\n\n`;
855
- result.sections.forEach((section, i) => {
856
- md += `### 3.${i + 1} ${section.title}\n\n`;
857
- md += `${section.content}\n\n`;
858
- });
859
- md += `---\n\n`;
860
-
861
- // Methodology
862
- md += `## 4. Methodology\n\n`;
863
- md += `**Search Strategy**: Multi-iteration search with AI-generated queries\n`;
864
- md += `**Research Mode**: ${result.metadata.mode}\n`;
865
- md += `**Sources Consulted**: ${result.metadata.sourcesAnalyzed}\n`;
866
- md += `**Search Queries**: ${result.searchQueries.length}\n`;
867
- md += `**Quality Assessment**: Sources rated by domain credibility and content quality\n\n`;
868
- md += `---\n\n`;
869
-
870
- // Conclusions
871
- md += `## 5. Conclusions\n\n`;
872
- md += `This research on "${result.metadata.topic}" has revealed several key insights across ${result.sections.length} main areas. `;
873
- md += `The findings are supported by ${result.metadata.sourcesAnalyzed} diverse sources and provide a comprehensive overview of the current state of knowledge on this topic.\n\n`;
874
- md += `---\n\n`;
875
-
876
- // Sources
877
- md += `## 6. Sources\n\n`;
878
- result.sources.forEach((source) => {
879
- const citation = formatCitation(source, citationStyle);
880
- md += `${source.id}. ${citation}\n`;
881
- });
882
- md += `\n---\n\n`;
883
-
884
- // Footer
885
- md += `**Research completed in**: ${Math.floor(result.metadata.durationSeconds / 60)} minutes ${result.metadata.durationSeconds % 60} seconds\n`;
886
- md += `**Token usage**: ~${result.metadata.tokenUsage.toLocaleString()} tokens\n`;
887
-
888
- return md;
889
- }
890
-
891
- function formatCitation(source: Source, style: CitationStyle): string {
892
- if (style === "none") {
893
- return `${source.title}. ${source.url}`;
894
- }
895
-
896
- const domain = source.domain;
897
- const year = source.date ? new Date(source.date).getFullYear() : new Date().getFullYear();
898
-
899
- if (style === "apa") {
900
- return `${domain}. (${year}). ${source.title}. Retrieved from ${source.url}`;
901
- } else if (style === "mla") {
902
- return `"${source.title}." ${domain}, ${year}, ${source.url}.`;
903
- } else if (style === "chicago") {
904
- return `${domain}. "${source.title}." ${year}. ${source.url}.`;
905
- }
906
-
907
- return `${source.title}. ${source.url}`;
908
- }
909
-
910
- function formatJSON(result: ResearchResult): string {
911
- return JSON.stringify(result, null, 2);
912
- }
913
-
914
- function formatHTML(result: ResearchResult, citationStyle: CitationStyle): string {
915
- const md = formatMarkdown(result, citationStyle);
916
-
917
- // Convert markdown to HTML with proper escaping
918
- // Process line by line to maintain control over escaping
919
- const lines = md.split("\n");
920
- const htmlLines: string[] = [];
921
-
922
- for (const line of lines) {
923
- const trimmed = line.trim();
924
-
925
- if (!trimmed) {
926
- htmlLines.push("");
927
- continue;
928
- }
929
-
930
- // Escape the content first, then apply formatting
931
- if (trimmed.startsWith("# ")) {
932
- htmlLines.push(`<h1>${escapeHtml(trimmed.slice(2))}</h1>`);
933
- } else if (trimmed.startsWith("## ")) {
934
- htmlLines.push(`<h2>${escapeHtml(trimmed.slice(3))}</h2>`);
935
- } else if (trimmed.startsWith("### ")) {
936
- htmlLines.push(`<h3>${escapeHtml(trimmed.slice(4))}</h3>`);
937
- } else if (trimmed.startsWith("- ")) {
938
- htmlLines.push(`<li>${escapeHtml(trimmed.slice(2))}</li>`);
939
- } else if (trimmed === "---") {
940
- htmlLines.push("<hr>");
941
- } else {
942
- // Apply inline formatting to escaped content
943
- let escapedLine = escapeHtml(trimmed);
944
- // Bold: **text** - need to unescape the asterisks temporarily
945
- escapedLine = escapedLine.replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>");
946
- // Italic: *text*
947
- escapedLine = escapedLine.replace(/\*([^*]+)\*/g, "<em>$1</em>");
948
- htmlLines.push(`<p>${escapedLine}</p>`);
949
- }
950
- }
951
-
952
- // Wrap consecutive list items in ul tags
953
- let html = htmlLines.join("\n");
954
- html = html.replace(/(<li>[\s\S]*?<\/li>\n?)+/g, (match) => `<ul>\n${match}</ul>\n`);
955
-
956
- return `<!DOCTYPE html>
957
- <html>
958
- <head>
959
- <meta charset="UTF-8">
960
- <title>Research Report: ${escapeHtml(result.metadata.topic)}</title>
961
- <style>
962
- body { font-family: Georgia, serif; max-width: 800px; margin: 50px auto; line-height: 1.6; }
963
- h1 { color: #2c3e50; }
964
- h2 { color: #34495e; border-bottom: 2px solid #3498db; padding-bottom: 10px; }
965
- h3 { color: #7f8c8d; }
966
- hr { border: 0; border-top: 1px solid #ecf0f1; margin: 30px 0; }
967
- ul { margin: 1em 0; padding-left: 2em; }
968
- li { margin: 0.5em 0; }
969
- </style>
970
- </head>
971
- <body>
972
- ${html}
973
- </body>
974
- </html>`;
975
- }
976
-
977
- // ============================================================================
978
- // Main
979
- // ============================================================================
980
-
981
- async function main() {
982
- try {
983
- // Parse arguments
984
- const { values, positionals } = parseArgs({
985
- args: process.argv.slice(2),
986
- options: {
987
- depth: { type: "string", default: "standard" },
988
- mode: { type: "string", default: "general" },
989
- "max-sources": { type: "string", default: "20" },
990
- output: { type: "string" },
991
- format: { type: "string", default: "md" },
992
- "citation-style": { type: "string", default: "apa" },
993
- "include-raw": { type: "boolean", default: false },
994
- "focus-domains": { type: "string" },
995
- "exclude-domains": { type: "string" },
996
- "date-range": { type: "string" },
997
- language: { type: "string", default: "en" },
998
- verbose: { type: "boolean", default: false },
999
- help: { type: "boolean", default: false },
1000
- },
1001
- allowPositionals: true,
1002
- });
1003
-
1004
- if (values.help) {
1005
- console.log(`
1006
- Deep Research Skill
1007
-
1008
- Usage:
1009
- skills run deep-research -- "Your research question" [options]
1010
-
1011
- Options:
1012
- --depth <level> Research depth: quick, standard, deep, exhaustive (default: standard)
1013
- --mode <type> Research mode: general, academic, news, technical, market (default: general)
1014
- --max-sources <number> Maximum sources to analyze (default: 20)
1015
- --output <path> Output file path
1016
- --format <type> Output format: md, json, html (default: md)
1017
- --citation-style <style> Citation style: apa, mla, chicago, none (default: apa)
1018
- --include-raw Include raw source data
1019
- --focus-domains <list> Comma-separated domains to prioritize
1020
- --exclude-domains <list> Comma-separated domains to exclude
1021
- --date-range <range> Date range: YYYY-MM-DD:YYYY-MM-DD
1022
- --language <code> Research language (default: en)
1023
- --verbose Show progress
1024
- --help Show this help
1025
-
1026
- Examples:
1027
- skills run deep-research -- "What are the latest advances in quantum computing?" --depth quick
1028
- skills run deep-research -- "Impact of microplastics" --mode academic --citation-style apa
1029
- skills run deep-research -- "Best Kubernetes practices" --mode technical --verbose
1030
- `);
1031
- return;
1032
- }
1033
-
1034
- // Get query
1035
- const query = positionals.join(" ").trim();
1036
- if (!query) {
1037
- log("Error: Research query is required", "error");
1038
- console.error('Usage: skills run deep-research -- "Your research question"');
1039
- process.exit(1);
1040
- }
1041
-
1042
- // Validate options
1043
- const depth = values.depth as ResearchDepth;
1044
- if (!["quick", "standard", "deep", "exhaustive"].includes(depth)) {
1045
- log("Error: Invalid depth. Use: quick, standard, deep, or exhaustive", "error");
1046
- process.exit(1);
1047
- }
1048
-
1049
- const mode = values.mode as ResearchMode;
1050
- if (!["general", "academic", "news", "technical", "market"].includes(mode)) {
1051
- log("Error: Invalid mode. Use: general, academic, news, technical, or market", "error");
1052
- process.exit(1);
1053
- }
1054
-
1055
- const format = values.format as OutputFormat;
1056
- if (!["md", "json", "html", "pdf"].includes(format)) {
1057
- log("Error: Invalid format. Use: md, json, html, or pdf", "error");
1058
- process.exit(1);
1059
- }
1060
-
1061
- if (format === "pdf") {
1062
- log("Error: PDF format not yet implemented. Use md, json, or html", "error");
1063
- process.exit(1);
1064
- }
1065
-
1066
- const citationStyle = values["citation-style"] as CitationStyle;
1067
- if (!["apa", "mla", "chicago", "none"].includes(citationStyle)) {
1068
- log("Error: Invalid citation style. Use: apa, mla, chicago, or none", "error");
1069
- process.exit(1);
1070
- }
1071
-
1072
- // Parse optional fields
1073
- const focusDomains = values["focus-domains"]?.split(",").map((d) => d.trim());
1074
- const excludeDomains = values["exclude-domains"]?.split(",").map((d) => d.trim());
1075
-
1076
- let dateRange: { start: string; end: string } | undefined;
1077
- if (values["date-range"]) {
1078
- const [start, end] = values["date-range"].split(":");
1079
- if (start && end) {
1080
- dateRange = { start, end };
1081
- }
1082
- }
1083
-
1084
- const options: ResearchOptions = {
1085
- query,
1086
- depth,
1087
- mode,
1088
- maxSources: parseInt(values["max-sources"] || "20"),
1089
- output: values.output,
1090
- format,
1091
- citationStyle,
1092
- includeRaw: values["include-raw"] || false,
1093
- focusDomains,
1094
- excludeDomains,
1095
- dateRange,
1096
- language: values.language || "en",
1097
- verbose: values.verbose || false,
1098
- };
1099
-
1100
- // Run research
1101
- log(`Starting ${SKILL_NAME} session: ${SESSION_ID}`, "debug");
1102
- console.log(`\nšŸš€ Deep Research v1.0.0\n`);
1103
- const engine = new ResearchEngine(options);
1104
- const result = await engine.run();
1105
-
1106
- // Format output
1107
- let output: string;
1108
- if (format === "json") {
1109
- output = formatJSON(result);
1110
- } else if (format === "html") {
1111
- output = formatHTML(result, citationStyle);
1112
- } else {
1113
- output = formatMarkdown(result, citationStyle);
1114
- }
1115
-
1116
- // Save or print
1117
- if (options.output) {
1118
- await writeFile(options.output, output, "utf-8");
1119
- log(`Research report saved to: ${options.output}`, "success");
1120
- } else {
1121
- // Auto-generate filename in exports directory
1122
- const outputDir = process.env.SKILLS_OUTPUT_DIR || ".skills";
1123
- const exportsDir = join(outputDir, "exports", "deep-research");
1124
- await mkdir(exportsDir, { recursive: true });
1125
-
1126
- const timestamp = new Date().toISOString().replace(/[:.]/g, "-").split("T")[0];
1127
- const sanitizedQuery = query.slice(0, 50).replace(/[^a-z0-9]/gi, "-").toLowerCase();
1128
- const filename = `research-${sanitizedQuery}-${timestamp}.${format}`;
1129
- const filepath = join(exportsDir, filename);
1130
-
1131
- await writeFile(filepath, output, "utf-8");
1132
- log(`Research report saved to: ${filepath}`, "success");
1133
- }
1134
-
1135
- // Print summary
1136
- console.log(`\nšŸ“Š Research Summary:`);
1137
- console.log(` Topic: ${result.metadata.topic}`);
1138
- console.log(` Sources: ${result.metadata.sourcesAnalyzed}`);
1139
- console.log(` Findings: ${result.keyFindings.length}`);
1140
- console.log(` Duration: ${Math.floor(result.metadata.durationSeconds / 60)}m ${result.metadata.durationSeconds % 60}s`);
1141
- console.log(` Tokens: ~${result.metadata.tokenUsage.toLocaleString()}`);
1142
- console.log();
1143
- } catch (error) {
1144
- log(`Error: ${error instanceof Error ? error.message : String(error)}`, "error");
1145
- process.exit(1);
1146
- }
1147
- }
1148
-
1149
- main();