@redigg/redigg 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +145 -0
  3. package/dist/agent/ResearchAgent.d.ts +35 -0
  4. package/dist/agent/ResearchAgent.js +818 -0
  5. package/dist/agent/ResearchAgent.js.map +1 -0
  6. package/dist/agent/subagent/SubAgent.d.ts +23 -0
  7. package/dist/agent/subagent/SubAgent.js +87 -0
  8. package/dist/agent/subagent/SubAgent.js.map +1 -0
  9. package/dist/agent/subagent/SubAgentManager.d.ts +19 -0
  10. package/dist/agent/subagent/SubAgentManager.js +40 -0
  11. package/dist/agent/subagent/SubAgentManager.js.map +1 -0
  12. package/dist/bin.d.ts +2 -0
  13. package/dist/bin.js +34 -0
  14. package/dist/bin.js.map +1 -0
  15. package/dist/cli.d.ts +1 -0
  16. package/dist/cli.js +179 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/events/EventManager.d.ts +39 -0
  19. package/dist/events/EventManager.js +20 -0
  20. package/dist/events/EventManager.js.map +1 -0
  21. package/dist/gateway/index.d.ts +9 -0
  22. package/dist/gateway/index.js +474 -0
  23. package/dist/gateway/index.js.map +1 -0
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.js +97 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/llm/LLMClient.d.ts +30 -0
  28. package/dist/llm/LLMClient.js +21 -0
  29. package/dist/llm/LLMClient.js.map +1 -0
  30. package/dist/llm/OpenAIClient.d.ts +16 -0
  31. package/dist/llm/OpenAIClient.js +58 -0
  32. package/dist/llm/OpenAIClient.js.map +1 -0
  33. package/dist/memory/MemoryManager.d.ts +41 -0
  34. package/dist/memory/MemoryManager.js +221 -0
  35. package/dist/memory/MemoryManager.js.map +1 -0
  36. package/dist/memory/evolution/MemoryEvolutionSystem.d.ts +17 -0
  37. package/dist/memory/evolution/MemoryEvolutionSystem.js +71 -0
  38. package/dist/memory/evolution/MemoryEvolutionSystem.js.map +1 -0
  39. package/dist/memory/search/BM25Search.d.ts +22 -0
  40. package/dist/memory/search/BM25Search.js +61 -0
  41. package/dist/memory/search/BM25Search.js.map +1 -0
  42. package/dist/memory/structure/PageIndex.d.ts +26 -0
  43. package/dist/memory/structure/PageIndex.js +156 -0
  44. package/dist/memory/structure/PageIndex.js.map +1 -0
  45. package/dist/quality/QualityManager.d.ts +12 -0
  46. package/dist/quality/QualityManager.js +61 -0
  47. package/dist/quality/QualityManager.js.map +1 -0
  48. package/dist/scheduling/CronManager.d.ts +21 -0
  49. package/dist/scheduling/CronManager.js +66 -0
  50. package/dist/scheduling/CronManager.js.map +1 -0
  51. package/dist/session/SessionManager.d.ts +37 -0
  52. package/dist/session/SessionManager.js +238 -0
  53. package/dist/session/SessionManager.js.map +1 -0
  54. package/dist/skills/SkillManager.d.ts +31 -0
  55. package/dist/skills/SkillManager.js +254 -0
  56. package/dist/skills/SkillManager.js.map +1 -0
  57. package/dist/skills/agent/PACK.md +13 -0
  58. package/dist/skills/agent/agent-orchestration/SKILL.md +37 -0
  59. package/dist/skills/agent/agent-orchestration/index.d.ts +9 -0
  60. package/dist/skills/agent/agent-orchestration/index.js +70 -0
  61. package/dist/skills/agent/agent-orchestration/index.js.map +1 -0
  62. package/dist/skills/agent/evolution/SKILL.md +25 -0
  63. package/dist/skills/agent/evolution/index.d.ts +9 -0
  64. package/dist/skills/agent/evolution/index.js +57 -0
  65. package/dist/skills/agent/evolution/index.js.map +1 -0
  66. package/dist/skills/agent/heartbeat/index.d.ts +8 -0
  67. package/dist/skills/agent/heartbeat/index.js +44 -0
  68. package/dist/skills/agent/heartbeat/index.js.map +1 -0
  69. package/dist/skills/agent/memory-management/SKILL.md +40 -0
  70. package/dist/skills/agent/memory-management/index.d.ts +8 -0
  71. package/dist/skills/agent/memory-management/index.js +44 -0
  72. package/dist/skills/agent/memory-management/index.js.map +1 -0
  73. package/dist/skills/agent/scheduling/SKILL.md +33 -0
  74. package/dist/skills/agent/scheduling/index.d.ts +13 -0
  75. package/dist/skills/agent/scheduling/index.js +80 -0
  76. package/dist/skills/agent/scheduling/index.js.map +1 -0
  77. package/dist/skills/agent/session-management/SKILL.md +35 -0
  78. package/dist/skills/agent/session-management/index.d.ts +11 -0
  79. package/dist/skills/agent/session-management/index.js +54 -0
  80. package/dist/skills/agent/session-management/index.js.map +1 -0
  81. package/dist/skills/agent/skill-management/SKILL.md +31 -0
  82. package/dist/skills/agent/skill-management/index.d.ts +8 -0
  83. package/dist/skills/agent/skill-management/index.js +25 -0
  84. package/dist/skills/agent/skill-management/index.js.map +1 -0
  85. package/dist/skills/evolution/SkillEvolutionSystem.d.ts +12 -0
  86. package/dist/skills/evolution/SkillEvolutionSystem.js +157 -0
  87. package/dist/skills/evolution/SkillEvolutionSystem.js.map +1 -0
  88. package/dist/skills/lib/ScholarTool.d.ts +14 -0
  89. package/dist/skills/lib/ScholarTool.js +71 -0
  90. package/dist/skills/lib/ScholarTool.js.map +1 -0
  91. package/dist/skills/research/PACK.md +7 -0
  92. package/dist/skills/research/academic-survey-self-improve/SKILL.md +17 -0
  93. package/dist/skills/research/academic-survey-self-improve/index.d.ts +10 -0
  94. package/dist/skills/research/academic-survey-self-improve/index.js +75 -0
  95. package/dist/skills/research/academic-survey-self-improve/index.js.map +1 -0
  96. package/dist/skills/research/concept-explainer/SKILL.md +3 -0
  97. package/dist/skills/research/concept-explainer/index.d.ts +8 -0
  98. package/dist/skills/research/concept-explainer/index.js +37 -0
  99. package/dist/skills/research/concept-explainer/index.js.map +1 -0
  100. package/dist/skills/research/literature-review/SKILL.md +25 -0
  101. package/dist/skills/research/literature-review/index.d.ts +9 -0
  102. package/dist/skills/research/literature-review/index.js +132 -0
  103. package/dist/skills/research/literature-review/index.js.map +1 -0
  104. package/dist/skills/research/paper-analysis/SKILL.md +3 -0
  105. package/dist/skills/research/paper-analysis/index.d.ts +9 -0
  106. package/dist/skills/research/paper-analysis/index.js +64 -0
  107. package/dist/skills/research/paper-analysis/index.js.map +1 -0
  108. package/dist/skills/research/pdf-generator/SKILL.md +16 -0
  109. package/dist/skills/research/pdf-generator/index.d.ts +10 -0
  110. package/dist/skills/research/pdf-generator/index.js +88 -0
  111. package/dist/skills/research/pdf-generator/index.js.map +1 -0
  112. package/dist/skills/system/PACK.md +8 -0
  113. package/dist/skills/system/code-analysis/SKILL.md +43 -0
  114. package/dist/skills/system/code-analysis/index.d.ts +12 -0
  115. package/dist/skills/system/code-analysis/index.js +172 -0
  116. package/dist/skills/system/code-analysis/index.js.map +1 -0
  117. package/dist/skills/system/local-file-ops/SKILL.md +55 -0
  118. package/dist/skills/system/local-file-ops/index.d.ts +9 -0
  119. package/dist/skills/system/local-file-ops/index.js +111 -0
  120. package/dist/skills/system/local-file-ops/index.js.map +1 -0
  121. package/dist/skills/types.d.ts +41 -0
  122. package/dist/skills/types.js +2 -0
  123. package/dist/skills/types.js.map +1 -0
  124. package/dist/skills/vendor/PACK.md +11 -0
  125. package/dist/skills/vendor/agent-browser/CONTRIBUTING.md +63 -0
  126. package/dist/skills/vendor/agent-browser/SKILL.md +328 -0
  127. package/dist/skills/vendor/find-skills/SKILL.md +133 -0
  128. package/dist/skills/vendor/proactive-agent/SKILL-v2.3-backup.md +554 -0
  129. package/dist/skills/vendor/proactive-agent/SKILL-v3-draft.md +499 -0
  130. package/dist/skills/vendor/proactive-agent/SKILL.md +632 -0
  131. package/dist/skills/vendor/proactive-agent/assets/AGENTS.md +155 -0
  132. package/dist/skills/vendor/proactive-agent/assets/HEARTBEAT.md +128 -0
  133. package/dist/skills/vendor/proactive-agent/assets/MEMORY.md +47 -0
  134. package/dist/skills/vendor/proactive-agent/assets/ONBOARDING.md +103 -0
  135. package/dist/skills/vendor/proactive-agent/assets/SOUL.md +40 -0
  136. package/dist/skills/vendor/proactive-agent/assets/TOOLS.md +55 -0
  137. package/dist/skills/vendor/proactive-agent/assets/USER.md +36 -0
  138. package/dist/skills/vendor/proactive-agent/references/onboarding-flow.md +158 -0
  139. package/dist/skills/vendor/proactive-agent/references/security-patterns.md +109 -0
  140. package/dist/skills/vendor/searxng/CHANGELOG.md +38 -0
  141. package/dist/skills/vendor/searxng/PUBLISH.md +147 -0
  142. package/dist/skills/vendor/searxng/PUBLISHING_CHECKLIST.md +111 -0
  143. package/dist/skills/vendor/searxng/README.md +168 -0
  144. package/dist/skills/vendor/searxng/SKILL.md +69 -0
  145. package/dist/skills/vendor/self-improving-agent/.learnings/ERRORS.md +5 -0
  146. package/dist/skills/vendor/self-improving-agent/.learnings/FEATURE_REQUESTS.md +5 -0
  147. package/dist/skills/vendor/self-improving-agent/.learnings/LEARNINGS.md +5 -0
  148. package/dist/skills/vendor/self-improving-agent/SKILL.md +647 -0
  149. package/dist/skills/vendor/self-improving-agent/assets/LEARNINGS.md +45 -0
  150. package/dist/skills/vendor/self-improving-agent/assets/SKILL-TEMPLATE.md +177 -0
  151. package/dist/skills/vendor/self-improving-agent/hooks/openclaw/HOOK.md +23 -0
  152. package/dist/skills/vendor/self-improving-agent/hooks/openclaw/handler.d.ts +9 -0
  153. package/dist/skills/vendor/self-improving-agent/hooks/openclaw/handler.js +54 -0
  154. package/dist/skills/vendor/self-improving-agent/hooks/openclaw/handler.js.map +1 -0
  155. package/dist/skills/vendor/self-improving-agent/references/examples.md +374 -0
  156. package/dist/skills/vendor/self-improving-agent/references/hooks-setup.md +223 -0
  157. package/dist/skills/vendor/self-improving-agent/references/openclaw-integration.md +248 -0
  158. package/dist/skills/vendor/skill-vetter/SKILL.md +138 -0
  159. package/dist/src/agent/ResearchAgent.d.ts +35 -0
  160. package/dist/src/agent/ResearchAgent.js +818 -0
  161. package/dist/src/agent/ResearchAgent.js.map +1 -0
  162. package/dist/src/agent/subagent/SubAgent.d.ts +23 -0
  163. package/dist/src/agent/subagent/SubAgent.js +87 -0
  164. package/dist/src/agent/subagent/SubAgent.js.map +1 -0
  165. package/dist/src/agent/subagent/SubAgentManager.d.ts +19 -0
  166. package/dist/src/agent/subagent/SubAgentManager.js +40 -0
  167. package/dist/src/agent/subagent/SubAgentManager.js.map +1 -0
  168. package/dist/src/bin.d.ts +2 -0
  169. package/dist/src/bin.js +34 -0
  170. package/dist/src/bin.js.map +1 -0
  171. package/dist/src/cli.d.ts +1 -0
  172. package/dist/src/cli.js +179 -0
  173. package/dist/src/cli.js.map +1 -0
  174. package/dist/src/events/EventManager.d.ts +39 -0
  175. package/dist/src/events/EventManager.js +20 -0
  176. package/dist/src/events/EventManager.js.map +1 -0
  177. package/dist/src/gateway/index.d.ts +9 -0
  178. package/dist/src/gateway/index.js +474 -0
  179. package/dist/src/gateway/index.js.map +1 -0
  180. package/dist/src/index.d.ts +3 -0
  181. package/dist/src/index.js +105 -0
  182. package/dist/src/index.js.map +1 -0
  183. package/dist/src/llm/LLMClient.d.ts +30 -0
  184. package/dist/src/llm/LLMClient.js +21 -0
  185. package/dist/src/llm/LLMClient.js.map +1 -0
  186. package/dist/src/llm/OpenAIClient.d.ts +16 -0
  187. package/dist/src/llm/OpenAIClient.js +58 -0
  188. package/dist/src/llm/OpenAIClient.js.map +1 -0
  189. package/dist/src/memory/MemoryManager.d.ts +41 -0
  190. package/dist/src/memory/MemoryManager.js +221 -0
  191. package/dist/src/memory/MemoryManager.js.map +1 -0
  192. package/dist/src/memory/evolution/MemoryEvolutionSystem.d.ts +17 -0
  193. package/dist/src/memory/evolution/MemoryEvolutionSystem.js +71 -0
  194. package/dist/src/memory/evolution/MemoryEvolutionSystem.js.map +1 -0
  195. package/dist/src/memory/search/BM25Search.d.ts +22 -0
  196. package/dist/src/memory/search/BM25Search.js +61 -0
  197. package/dist/src/memory/search/BM25Search.js.map +1 -0
  198. package/dist/src/memory/structure/PageIndex.d.ts +26 -0
  199. package/dist/src/memory/structure/PageIndex.js +156 -0
  200. package/dist/src/memory/structure/PageIndex.js.map +1 -0
  201. package/dist/src/quality/QualityManager.d.ts +12 -0
  202. package/dist/src/quality/QualityManager.js +61 -0
  203. package/dist/src/quality/QualityManager.js.map +1 -0
  204. package/dist/src/scheduling/CronManager.d.ts +21 -0
  205. package/dist/src/scheduling/CronManager.js +66 -0
  206. package/dist/src/scheduling/CronManager.js.map +1 -0
  207. package/dist/src/session/SessionManager.d.ts +37 -0
  208. package/dist/src/session/SessionManager.js +238 -0
  209. package/dist/src/session/SessionManager.js.map +1 -0
  210. package/dist/src/skills/SkillManager.d.ts +33 -0
  211. package/dist/src/skills/SkillManager.js +260 -0
  212. package/dist/src/skills/SkillManager.js.map +1 -0
  213. package/dist/src/skills/evolution/SkillEvolutionSystem.d.ts +12 -0
  214. package/dist/src/skills/evolution/SkillEvolutionSystem.js +157 -0
  215. package/dist/src/skills/evolution/SkillEvolutionSystem.js.map +1 -0
  216. package/dist/src/skills/lib/ScholarTool.d.ts +14 -0
  217. package/dist/src/skills/lib/ScholarTool.js +71 -0
  218. package/dist/src/skills/lib/ScholarTool.js.map +1 -0
  219. package/dist/src/skills/types.d.ts +41 -0
  220. package/dist/src/skills/types.js +2 -0
  221. package/dist/src/skills/types.js.map +1 -0
  222. package/dist/src/storage/sqlite.d.ts +8 -0
  223. package/dist/src/storage/sqlite.js +73 -0
  224. package/dist/src/storage/sqlite.js.map +1 -0
  225. package/dist/src/utils/logger.d.ts +12 -0
  226. package/dist/src/utils/logger.js +53 -0
  227. package/dist/src/utils/logger.js.map +1 -0
  228. package/dist/storage/sqlite.d.ts +8 -0
  229. package/dist/storage/sqlite.js +73 -0
  230. package/dist/storage/sqlite.js.map +1 -0
  231. package/dist/utils/logger.d.ts +12 -0
  232. package/dist/utils/logger.js +53 -0
  233. package/dist/utils/logger.js.map +1 -0
  234. package/package.json +71 -0
  235. package/skills/agent/PACK.md +13 -0
  236. package/skills/agent/agent-orchestration/SKILL.md +37 -0
  237. package/skills/agent/agent-orchestration/index.ts +84 -0
  238. package/skills/agent/evolution/SKILL.md +25 -0
  239. package/skills/agent/evolution/index.ts +67 -0
  240. package/skills/agent/heartbeat/index.ts +48 -0
  241. package/skills/agent/memory-management/SKILL.md +40 -0
  242. package/skills/agent/memory-management/index.ts +48 -0
  243. package/skills/agent/scheduling/SKILL.md +33 -0
  244. package/skills/agent/scheduling/index.ts +97 -0
  245. package/skills/agent/session-management/SKILL.md +35 -0
  246. package/skills/agent/session-management/index.ts +65 -0
  247. package/skills/agent/skill-management/SKILL.md +31 -0
  248. package/skills/agent/skill-management/index.ts +32 -0
  249. package/skills/research/PACK.md +7 -0
  250. package/skills/research/academic-survey-self-improve/SKILL.md +17 -0
  251. package/skills/research/academic-survey-self-improve/index.ts +87 -0
  252. package/skills/research/concept-explainer/SKILL.md +3 -0
  253. package/skills/research/concept-explainer/index.ts +42 -0
  254. package/skills/research/literature-review/SKILL.md +25 -0
  255. package/skills/research/literature-review/index.ts +168 -0
  256. package/skills/research/paper-analysis/SKILL.md +3 -0
  257. package/skills/research/paper-analysis/index.ts +73 -0
  258. package/skills/research/pdf-generator/SKILL.md +16 -0
  259. package/skills/research/pdf-generator/index.d.ts +10 -0
  260. package/skills/research/pdf-generator/index.js +114 -0
  261. package/skills/research/pdf-generator/index.js.map +1 -0
  262. package/skills/research/pdf-generator/index.ts +97 -0
  263. package/skills/system/PACK.md +8 -0
  264. package/skills/system/code-analysis/SKILL.md +43 -0
  265. package/skills/system/code-analysis/index.ts +180 -0
  266. package/skills/system/local-file-ops/SKILL.md +55 -0
  267. package/skills/system/local-file-ops/index.ts +123 -0
  268. package/skills/vendor/PACK.md +11 -0
  269. package/skills/vendor/agent-browser/.clawhub/origin.json +7 -0
  270. package/skills/vendor/agent-browser/CONTRIBUTING.md +63 -0
  271. package/skills/vendor/agent-browser/SKILL.md +328 -0
  272. package/skills/vendor/agent-browser/_meta.json +6 -0
  273. package/skills/vendor/find-skills/.clawhub/origin.json +7 -0
  274. package/skills/vendor/find-skills/SKILL.md +133 -0
  275. package/skills/vendor/find-skills/_meta.json +6 -0
  276. package/skills/vendor/proactive-agent/.clawhub/origin.json +7 -0
  277. package/skills/vendor/proactive-agent/SKILL-v2.3-backup.md +554 -0
  278. package/skills/vendor/proactive-agent/SKILL-v3-draft.md +499 -0
  279. package/skills/vendor/proactive-agent/SKILL.md +632 -0
  280. package/skills/vendor/proactive-agent/_meta.json +6 -0
  281. package/skills/vendor/proactive-agent/assets/AGENTS.md +155 -0
  282. package/skills/vendor/proactive-agent/assets/HEARTBEAT.md +128 -0
  283. package/skills/vendor/proactive-agent/assets/MEMORY.md +47 -0
  284. package/skills/vendor/proactive-agent/assets/ONBOARDING.md +103 -0
  285. package/skills/vendor/proactive-agent/assets/SOUL.md +40 -0
  286. package/skills/vendor/proactive-agent/assets/TOOLS.md +55 -0
  287. package/skills/vendor/proactive-agent/assets/USER.md +36 -0
  288. package/skills/vendor/proactive-agent/references/onboarding-flow.md +158 -0
  289. package/skills/vendor/proactive-agent/references/security-patterns.md +109 -0
  290. package/skills/vendor/proactive-agent/scripts/security-audit.sh +149 -0
  291. package/skills/vendor/searxng/.clawdhub/origin.json +7 -0
  292. package/skills/vendor/searxng/CHANGELOG.md +38 -0
  293. package/skills/vendor/searxng/PUBLISH.md +147 -0
  294. package/skills/vendor/searxng/PUBLISHING_CHECKLIST.md +111 -0
  295. package/skills/vendor/searxng/README.md +168 -0
  296. package/skills/vendor/searxng/SKILL.md +69 -0
  297. package/skills/vendor/searxng/_meta.json +6 -0
  298. package/skills/vendor/searxng/config/settings.yml +36 -0
  299. package/skills/vendor/searxng/run-searxng.sh +48 -0
  300. package/skills/vendor/searxng/scripts/searxng.py +211 -0
  301. package/skills/vendor/self-improving-agent/.clawhub/origin.json +7 -0
  302. package/skills/vendor/self-improving-agent/.learnings/ERRORS.md +5 -0
  303. package/skills/vendor/self-improving-agent/.learnings/FEATURE_REQUESTS.md +5 -0
  304. package/skills/vendor/self-improving-agent/.learnings/LEARNINGS.md +5 -0
  305. package/skills/vendor/self-improving-agent/SKILL.md +647 -0
  306. package/skills/vendor/self-improving-agent/_meta.json +6 -0
  307. package/skills/vendor/self-improving-agent/assets/LEARNINGS.md +45 -0
  308. package/skills/vendor/self-improving-agent/assets/SKILL-TEMPLATE.md +177 -0
  309. package/skills/vendor/self-improving-agent/hooks/openclaw/HOOK.md +23 -0
  310. package/skills/vendor/self-improving-agent/hooks/openclaw/handler.js +56 -0
  311. package/skills/vendor/self-improving-agent/hooks/openclaw/handler.ts +62 -0
  312. package/skills/vendor/self-improving-agent/references/examples.md +374 -0
  313. package/skills/vendor/self-improving-agent/references/hooks-setup.md +223 -0
  314. package/skills/vendor/self-improving-agent/references/openclaw-integration.md +248 -0
  315. package/skills/vendor/self-improving-agent/scripts/activator.sh +20 -0
  316. package/skills/vendor/self-improving-agent/scripts/error-detector.sh +55 -0
  317. package/skills/vendor/self-improving-agent/scripts/extract-skill.sh +221 -0
  318. package/skills/vendor/skill-vetter/.clawhub/origin.json +7 -0
  319. package/skills/vendor/skill-vetter/SKILL.md +138 -0
  320. package/skills/vendor/skill-vetter/_meta.json +6 -0
  321. package/web/README.md +73 -0
  322. package/web/package.json +65 -0
@@ -0,0 +1,17 @@
1
+ # Academic Survey Self-Improve
2
+
3
+ ## Description
4
+ Conducts a comprehensive academic survey on a given topic using arXiv and LLM-based analysis. It iteratively refines the search based on initial findings to improve the quality of the survey.
5
+
6
+ ## Author
7
+ vixuowis
8
+
9
+ ## Version
10
+ 0.1.0
11
+
12
+ ## Usage
13
+ - `topic`: The research topic to survey.
14
+ - `depth`: (Optional) Depth of the survey (default: "brief").
15
+
16
+ ## Tags
17
+ research, survey, academic, self-improve
@@ -0,0 +1,10 @@
1
+ import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
2
+ export default class AcademicSurveySelfImproveSkill implements Skill {
3
+ id: string;
4
+ name: string;
5
+ description: string;
6
+ tags: string[];
7
+ execute(context: SkillContext, params: SkillParams): Promise<SkillResult>;
8
+ private refineQuery;
9
+ private summarizePapers;
10
+ }
@@ -0,0 +1,75 @@
1
+ import { ScholarTool } from '../../../src/skills/lib/ScholarTool.js';
2
+ export default class AcademicSurveySelfImproveSkill {
3
+ id = 'academic_survey_self_improve';
4
+ name = 'Academic Survey (Self-Improve)';
5
+ description = 'Conducts an academic survey and iteratively refines it.';
6
+ tags = ['research', 'survey', 'academic'];
7
+ async execute(context, params) {
8
+ const { topic, depth = 'brief' } = params;
9
+ context.log('thinking', `Starting academic survey on: ${topic}`);
10
+ if (context.updateProgress) {
11
+ await context.updateProgress(10, 'Initializing search', { topic });
12
+ }
13
+ const scholar = new ScholarTool();
14
+ let papers = await scholar.searchPapers(topic, 5);
15
+ if (papers.length === 0) {
16
+ context.log('thinking', 'No papers found. Attempting to broaden search...');
17
+ if (context.updateProgress) {
18
+ await context.updateProgress(30, 'No results found, refining query...', { originalTopic: topic });
19
+ }
20
+ const betterQuery = await this.refineQuery(context, topic);
21
+ if (betterQuery !== topic) {
22
+ context.log('thinking', `Refined query to: ${betterQuery}`);
23
+ if (context.updateProgress) {
24
+ await context.updateProgress(40, `Searching with refined query: ${betterQuery}`);
25
+ }
26
+ papers = await scholar.searchPapers(betterQuery, 5);
27
+ }
28
+ }
29
+ if (papers.length === 0) {
30
+ if (context.updateProgress) {
31
+ await context.updateProgress(100, 'Survey failed: No papers found');
32
+ }
33
+ return {
34
+ success: false,
35
+ message: 'No papers found even after refinement.',
36
+ papers: []
37
+ };
38
+ }
39
+ context.log('thinking', `Found ${papers.length} papers. Analyzing...`);
40
+ if (context.updateProgress) {
41
+ await context.updateProgress(60, `Analyzing ${papers.length} papers`, { papers });
42
+ }
43
+ // Summarize
44
+ const summary = await this.summarizePapers(context, topic, papers);
45
+ if (context.updateProgress) {
46
+ await context.updateProgress(100, 'Survey complete');
47
+ }
48
+ return {
49
+ success: true,
50
+ summary,
51
+ papers,
52
+ formatted_output: summary
53
+ };
54
+ }
55
+ async refineQuery(context, originalQuery) {
56
+ const prompt = `The user searched for "${originalQuery}" on arXiv but found no results. Suggest a broader or more effective search query for the same intent. Return ONLY the new query string.`;
57
+ const response = await context.llm.chat([{ role: 'user', content: prompt }]);
58
+ return response.content.trim().replace(/^"|"$/g, '');
59
+ }
60
+ async summarizePapers(context, topic, papers) {
61
+ const papersText = papers.map((p, i) => `[${i + 1}] ${p.title} (${p.year})\nSummary: ${p.summary}`).join('\n\n');
62
+ const prompt = `
63
+ Perform a literature survey on the topic: "${topic}".
64
+ Based on the following papers found:
65
+
66
+ ${papersText}
67
+
68
+ Synthesize a coherent summary of the state of research. Highlight key trends, methodologies, and findings.
69
+ Format as Markdown.
70
+ `;
71
+ const response = await context.llm.chat([{ role: 'user', content: prompt }]);
72
+ return response.content;
73
+ }
74
+ }
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../skills/research/academic-survey-self-improve/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ # Concept Explainer
2
+
3
+ Explain a complex scientific or technical concept in simple terms, with examples and historical context.
@@ -0,0 +1,8 @@
1
+ import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
2
+ export default class ConceptExplainerSkill implements Skill {
3
+ id: string;
4
+ name: string;
5
+ description: string;
6
+ tags: string[];
7
+ execute(ctx: SkillContext, params: SkillParams): Promise<SkillResult>;
8
+ }
@@ -0,0 +1,37 @@
1
+ export default class ConceptExplainerSkill {
2
+ id = 'concept_explainer';
3
+ name = 'Concept Explainer';
4
+ description = 'Explain a complex scientific concept';
5
+ tags = ['research', 'education', 'explanation'];
6
+ async execute(ctx, params) {
7
+ const concept = params.concept || params.topic || params.query;
8
+ if (!concept) {
9
+ throw new Error('Concept is required');
10
+ }
11
+ ctx.log('thinking', `Explaining concept: ${concept}`);
12
+ if (ctx.updateProgress)
13
+ await ctx.updateProgress(10, `Researching concept: ${concept}`);
14
+ const prompt = `
15
+ You are an expert science communicator (like Feynman).
16
+ Explain the following concept in a clear, engaging, and depth-first manner: "${concept}"
17
+
18
+ Structure:
19
+ 1. **Definition**: Simple, one-sentence definition.
20
+ 2. **The "Why"**: Why is this concept important?
21
+ 3. **Deep Dive**: How does it work? (Use analogies).
22
+ 4. **History**: Who discovered it and when?
23
+ 5. **Applications**: Real-world examples.
24
+ 6. **Related Concepts**: What else should I know?
25
+ `;
26
+ const response = await ctx.llm.complete(prompt);
27
+ const explanation = response.content;
28
+ if (ctx.updateProgress)
29
+ await ctx.updateProgress(100, `Explanation ready.`);
30
+ return {
31
+ concept,
32
+ explanation,
33
+ formatted_output: `### Concept: ${concept}\n\n${explanation}`
34
+ };
35
+ }
36
+ }
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../skills/research/concept-explainer/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,qBAAqB;IACxC,EAAE,GAAG,mBAAmB,CAAC;IACzB,IAAI,GAAG,mBAAmB,CAAC;IAC3B,WAAW,GAAG,sCAAsC,CAAC;IACrD,IAAI,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IAEhD,KAAK,CAAC,OAAO,CAAC,GAAiB,EAAE,MAAmB;QAClD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;QAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,uBAAuB,OAAO,EAAE,CAAC,CAAC;QACtD,IAAI,GAAG,CAAC,cAAc;YAAE,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,wBAAwB,OAAO,EAAE,CAAC,CAAC;QAExF,MAAM,MAAM,GAAG;;qFAEkE,OAAO;;;;;;;;;KASvF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;QAErC,IAAI,GAAG,CAAC,cAAc;YAAE,MAAM,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;QAE5E,OAAO;YACL,OAAO;YACP,WAAW;YACX,gBAAgB,EAAE,gBAAgB,OAAO,OAAO,WAAW,EAAE;SAC9D,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: literature-review
3
+ description: Search for papers and generate a literature review
4
+ tags: [research, literature, review]
5
+ ---
6
+
7
+ # Literature Review
8
+
9
+ This skill performs an automated literature review on a given topic.
10
+
11
+ ## Instructions
12
+
13
+ 1. **Search**: Queries academic databases (e.g. arXiv, Semantic Scholar) for relevant papers.
14
+ 2. **Filter**: Selects the most relevant papers based on the topic.
15
+ 3. **Analyze**: Extracts key insights, methodologies, and findings.
16
+ 4. **Synthesize**: Generates a comprehensive review summary.
17
+
18
+ ## Parameters
19
+
20
+ - `topic` (required): The research topic or question.
21
+
22
+ ## Examples
23
+
24
+ - "Do a literature review on Large Language Model reasoning"
25
+ - "Survey recent advances in multimodal agents"
@@ -0,0 +1,9 @@
1
+ import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
2
+ export default class LiteratureReviewSkill implements Skill {
3
+ id: string;
4
+ name: string;
5
+ description: string;
6
+ tags: string[];
7
+ private scholar;
8
+ execute(ctx: SkillContext, params: SkillParams): Promise<SkillResult>;
9
+ }
@@ -0,0 +1,132 @@
1
+ import { ScholarTool } from '../../../src/skills/lib/ScholarTool.js';
2
+ export default class LiteratureReviewSkill {
3
+ id = 'literature_review';
4
+ name = 'Literature Review';
5
+ description = 'Search for papers and generate a literature review';
6
+ tags = ['research', 'literature', 'review'];
7
+ scholar = new ScholarTool();
8
+ async execute(ctx, params) {
9
+ const topic = params.topic;
10
+ if (!topic) {
11
+ throw new Error('Topic is required');
12
+ }
13
+ ctx.log('thinking', `Starting literature review on topic: ${topic}`);
14
+ if (ctx.updateProgress) {
15
+ await ctx.updateProgress(10, `Starting literature review on ${topic}`);
16
+ }
17
+ // 1. Search Papers
18
+ ctx.log('action', 'Initializing academic search');
19
+ ctx.log('tool_call', 'Searching for papers', {
20
+ tool_name: 'ScholarSearch',
21
+ tool_args: { topic, limit: 5 }
22
+ });
23
+ const papers = await this.scholar.searchPapers(topic, 5);
24
+ ctx.log('tool_result', `Found ${papers.length} relevant papers`, {
25
+ tool_name: 'ScholarSearch',
26
+ papers_count: papers.length
27
+ });
28
+ if (ctx.updateProgress) {
29
+ await ctx.updateProgress(50, `Found ${papers.length} papers, analyzing...`);
30
+ }
31
+ // 2. Add to Memory (Memory Injection)
32
+ for (const paper of papers) {
33
+ // Simulate memory addition (in a real scenario, this would persist the paper as a memory)
34
+ // Actually, we can use ctx.memory.addPaper() if available, but SkillContext might not have it directly exposed as `addPaper` if it's generic
35
+ // But we have `memory` which is `MemoryManager`, so we can call it.
36
+ if (ctx.memory && typeof ctx.memory.addPaper === 'function') {
37
+ await ctx.memory.addPaper(ctx.userId, paper.title, paper.authors, paper.url, paper.summary);
38
+ }
39
+ }
40
+ // 3. Generate Summary
41
+ ctx.log('thinking', 'Synthesizing literature review');
42
+ if (ctx.updateProgress) {
43
+ await ctx.updateProgress(75, 'Synthesizing literature review...');
44
+ }
45
+ const prompt = `
46
+ You are a rigorous academic researcher.
47
+ Write a literature review summary based on the following papers about "${topic}".
48
+
49
+ CRITICAL INSTRUCTIONS:
50
+ 1. ONLY cite papers that are directly relevant to the user's topic.
51
+ 2. If a paper in the list below is irrelevant, ignore it completely.
52
+ 3. At the end of your summary, provide a "Selected Sources" list containing ONLY the papers you actually used/cited in the text.
53
+ 4. Do not include a "Sources" list if you didn't use any.
54
+
55
+ Available Papers:
56
+ ${papers.map((p, i) => `[${i + 1}] ${p.title} (${p.year}): ${p.summary}`).join('\n')}
57
+
58
+ Output Format:
59
+ <Summary text with inline citations like [1]>
60
+
61
+ **Selected Sources:**
62
+ [1] Title (Year)
63
+ ...
64
+ `;
65
+ const summaryResponse = await ctx.llm.complete(prompt);
66
+ const summary = summaryResponse.content;
67
+ // Parse the LLM response to extract the actually used papers
68
+ // This is a heuristic: we trust the LLM's "Selected Sources" list or we could parse inline citations.
69
+ // For now, let's rely on the LLM's output for the summary, but we need to filter the `papers` array returned in result
70
+ // to match what the user sees.
71
+ // Actually, the `ResearchAgent.ts` constructs the final response string using `result.papers`.
72
+ // So we should update `result.papers` to only include relevant ones.
73
+ // Let's ask the LLM to output a JSON list of indices of used papers to be precise.
74
+ const promptRefinement = `
75
+ Based on the summary you just wrote, which of the provided papers (by index 1-${papers.length}) were actually relevant and cited?
76
+ Return ONLY a JSON array of numbers, e.g., [1, 3, 5]. If none, return [].
77
+ `;
78
+ // This second call might be expensive. Alternatively, we can just ask for the filtered list in the first prompt
79
+ // and parse it. Let's try a single prompt approach with structured output if possible,
80
+ // or just strict formatting.
81
+ // Let's stick to the prompt update above, but we need to parse the "Selected Sources" section
82
+ // to filter the `papers` array returned to the agent.
83
+ // Simple parsing: check if paper title appears in the "Selected Sources" section of the response.
84
+ const relevantPapers = papers.filter(p => summary.includes(p.title));
85
+ // If the heuristic fails (LLM changes title format), we fall back to all papers
86
+ // OR we can just return the summary as is (which includes the sources list)
87
+ // and pass an empty array for papers so the Agent doesn't duplicate the list.
88
+ // ResearchAgent.ts does:
89
+ // const response = ... result.summary ... \n\n**Sources:**\n${result.papers.map(...)}
90
+ // So if we include sources in the summary, we should return empty papers to Agent,
91
+ // OR we strip sources from summary and return filtered papers.
92
+ // Let's strip the "Selected Sources" from the LLM output and return the filtered list.
93
+ let finalSummary = summary;
94
+ let finalPapers = papers;
95
+ if (summary.includes('**Selected Sources:**')) {
96
+ const parts = summary.split('**Selected Sources:**');
97
+ finalSummary = parts[0].trim();
98
+ const sourcesText = parts[1];
99
+ // Filter papers based on what's in sourcesText
100
+ finalPapers = papers.filter(p => sourcesText.includes(p.title) || sourcesText.includes(p.summary.slice(0, 20)));
101
+ }
102
+ else if (summary.includes('Selected Sources:')) {
103
+ const parts = summary.split('Selected Sources:');
104
+ finalSummary = parts[0].trim();
105
+ const sourcesText = parts[1];
106
+ finalPapers = papers.filter(p => sourcesText.includes(p.title) || sourcesText.includes(p.summary.slice(0, 20)));
107
+ }
108
+ else {
109
+ // Fallback: if no explicit sources section, try to filter by inline citations or titles in text
110
+ // This is safer than returning all papers if the user specifically asked to filter.
111
+ // But if LLM didn't follow format, we might lose all sources.
112
+ // Let's keep all papers if format wasn't followed, or maybe try to match titles in summary.
113
+ const papersInText = papers.filter(p => summary.includes(p.title));
114
+ if (papersInText.length > 0) {
115
+ finalPapers = papersInText;
116
+ }
117
+ }
118
+ if (ctx.updateProgress) {
119
+ await ctx.updateProgress(100, `Completed analysis. Selected ${finalPapers.length} relevant sources.`);
120
+ }
121
+ ctx.log('result', `Completed literature review on ${topic}`, {
122
+ papers_count: finalPapers.length,
123
+ summary_length: finalSummary.length
124
+ });
125
+ return {
126
+ topic,
127
+ summary: finalSummary,
128
+ papers: finalPapers
129
+ };
130
+ }
131
+ }
132
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../skills/research/literature-review/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ # Paper Analysis
2
+
3
+ Analyze a scientific paper in depth, including summary, methodology, results, and critique.
@@ -0,0 +1,9 @@
1
+ import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
2
+ export default class PaperAnalysisSkill implements Skill {
3
+ id: string;
4
+ name: string;
5
+ description: string;
6
+ tags: string[];
7
+ private scholar;
8
+ execute(ctx: SkillContext, params: SkillParams): Promise<SkillResult>;
9
+ }
@@ -0,0 +1,64 @@
1
+ import { ScholarTool } from '../../../src/skills/lib/ScholarTool.js';
2
+ export default class PaperAnalysisSkill {
3
+ id = 'paper_analysis';
4
+ name = 'Paper Analysis';
5
+ description = 'Analyze a scientific paper in depth';
6
+ tags = ['research', 'analysis', 'critique'];
7
+ scholar = new ScholarTool();
8
+ async execute(ctx, params) {
9
+ const paperTitle = params.paper_title || params.title || params.query;
10
+ if (!paperTitle) {
11
+ throw new Error('Paper title is required');
12
+ }
13
+ ctx.log('thinking', `Analyzing paper: ${paperTitle}`);
14
+ if (ctx.updateProgress)
15
+ await ctx.updateProgress(10, `Searching for paper: ${paperTitle}`);
16
+ // 1. Search for the paper to get metadata/summary if we don't have full text
17
+ // In a real system, we might download the PDF here.
18
+ ctx.log('action', 'Searching for paper details...');
19
+ const papers = await this.scholar.searchPapers(paperTitle, 1);
20
+ if (papers.length === 0) {
21
+ throw new Error(`Paper not found: ${paperTitle}`);
22
+ }
23
+ const paper = papers[0];
24
+ ctx.log('thinking', `Found paper: ${paper.title} (${paper.year})`);
25
+ if (ctx.updateProgress)
26
+ await ctx.updateProgress(40, `Found paper: ${paper.title}`);
27
+ // 2. Analyze using LLM
28
+ // Since we can't read the full PDF yet (ScholarTool just gets metadata/abstract),
29
+ // we will ask the LLM to analyze based on its internal knowledge + the abstract.
30
+ // If we had PDF reading capability, we'd feed the text here.
31
+ const prompt = `
32
+ You are an expert research scientist.
33
+ Please perform a deep analysis of the following paper:
34
+
35
+ Title: ${paper.title}
36
+ Authors: ${paper.authors.join(', ')}
37
+ Year: ${paper.year}
38
+ Abstract: ${paper.summary}
39
+ URL: ${paper.url || 'N/A'}
40
+
41
+ If you have internal knowledge about this specific paper (based on title/authors), please use it to enrich the analysis.
42
+
43
+ Structure your response as follows:
44
+ 1. **Executive Summary**: 2-3 sentences.
45
+ 2. **Key Contributions**: Bullet points.
46
+ 3. **Methodology**: How did they do it?
47
+ 4. **Results**: What did they find?
48
+ 5. **Critique & Limitations**: What are the weaknesses?
49
+ 6. **Relevance**: Why does this matter?
50
+ `;
51
+ if (ctx.updateProgress)
52
+ await ctx.updateProgress(60, `Analyzing content...`);
53
+ const response = await ctx.llm.complete(prompt);
54
+ const analysis = response.content;
55
+ if (ctx.updateProgress)
56
+ await ctx.updateProgress(100, `Analysis complete.`);
57
+ return {
58
+ paper: paper,
59
+ analysis: analysis,
60
+ formatted_output: `### Paper Analysis: ${paper.title}\n\n${analysis}\n\n[View Paper](${paper.url})`
61
+ };
62
+ }
63
+ }
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../skills/research/paper-analysis/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAErE,MAAM,CAAC,OAAO,OAAO,kBAAkB;IACrC,EAAE,GAAG,gBAAgB,CAAC;IACtB,IAAI,GAAG,gBAAgB,CAAC;IACxB,WAAW,GAAG,qCAAqC,CAAC;IACpD,IAAI,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAEpC,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAEpC,KAAK,CAAC,OAAO,CAAC,GAAiB,EAAE,MAAmB;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;QACtE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,oBAAoB,UAAU,EAAE,CAAC,CAAC;QACtD,IAAI,GAAG,CAAC,cAAc;YAAE,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,wBAAwB,UAAU,EAAE,CAAC,CAAC;QAE3F,6EAA6E;QAC7E,oDAAoD;QACpD,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAE9D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACnE,IAAI,GAAG,CAAC,cAAc;YAAE,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,gBAAgB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAEpF,uBAAuB;QACvB,kFAAkF;QAClF,iFAAiF;QACjF,6DAA6D;QAE7D,MAAM,MAAM,GAAG;;;;eAIJ,KAAK,CAAC,KAAK;iBACT,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;cAC3B,KAAK,CAAC,IAAI;kBACN,KAAK,CAAC,OAAO;aAClB,KAAK,CAAC,GAAG,IAAI,KAAK;;;;;;;;;;;KAW1B,CAAC;QAEF,IAAI,GAAG,CAAC,cAAc;YAAE,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;QAE7E,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;QAElC,IAAI,GAAG,CAAC,cAAc;YAAE,MAAM,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;QAE5E,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EAAE,uBAAuB,KAAK,CAAC,KAAK,OAAO,QAAQ,oBAAoB,KAAK,CAAC,GAAG,GAAG;SACpG,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ # PDF Generator (LaTeX)
2
+
3
+ Generate high-quality PDF documents from text or markdown using LaTeX.
4
+ This skill creates a `.tex` file and compiles it to PDF.
5
+
6
+ ## Dependencies
7
+ - `pdflatex` must be installed on the system (e.g., via TeX Live or MacTeX).
8
+ - Node.js `child_process` to run the command.
9
+
10
+ ## Usage
11
+ Provide the `content` (markdown or plain text) and a `title`.
12
+ The skill will:
13
+ 1. Convert the content to LaTeX format (using a template).
14
+ 2. Write the `.tex` file.
15
+ 3. Run `pdflatex` to generate the PDF.
16
+ 4. Return the path to the generated PDF.
@@ -0,0 +1,10 @@
1
+ import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
2
+ export default class PdfGeneratorSkill implements Skill {
3
+ id: string;
4
+ name: string;
5
+ description: string;
6
+ tags: string[];
7
+ private workspaceDir;
8
+ constructor();
9
+ execute(ctx: SkillContext, params: SkillParams): Promise<SkillResult>;
10
+ }
@@ -0,0 +1,88 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { v4 as uuidv4 } from 'uuid';
4
+ import PDFDocument from 'pdfkit';
5
+ export default class PdfGeneratorSkill {
6
+ id = 'pdf_generator';
7
+ name = 'PDF Generator';
8
+ description = 'Generate a PDF from text/markdown using PDFKit';
9
+ tags = ['research', 'document', 'pdf'];
10
+ workspaceDir;
11
+ constructor() {
12
+ // Ensure output directory exists
13
+ this.workspaceDir = path.resolve(process.cwd(), 'workspace/output/pdfs');
14
+ }
15
+ async execute(ctx, params) {
16
+ const { title, content, author = 'Redigg AI' } = params;
17
+ if (!content) {
18
+ throw new Error('Content is required to generate PDF');
19
+ }
20
+ // Ensure output directory exists
21
+ if (!fs.existsSync(this.workspaceDir)) {
22
+ fs.mkdirSync(this.workspaceDir, { recursive: true });
23
+ }
24
+ ctx.log('thinking', `Generating PDF for "${title || 'Untitled'}"`);
25
+ if (ctx.updateProgress)
26
+ await ctx.updateProgress(10, `Initializing PDF document...`);
27
+ const filename = (title || 'document').replace(/[^a-z0-9]/gi, '_').toLowerCase() + '_' + uuidv4().slice(0, 8);
28
+ const pdfPath = path.join(this.workspaceDir, `${filename}.pdf`);
29
+ // Create a document
30
+ const doc = new PDFDocument({ margin: 50 });
31
+ const stream = fs.createWriteStream(pdfPath);
32
+ doc.pipe(stream);
33
+ // Title Page
34
+ doc.fontSize(24).text(title || 'Research Report', { align: 'center' });
35
+ doc.moveDown();
36
+ doc.fontSize(14).text(`Author: ${author}`, { align: 'center' });
37
+ doc.fontSize(12).text(`Date: ${new Date().toLocaleDateString()}`, { align: 'center' });
38
+ doc.moveDown(2);
39
+ // Content Rendering (Simple Markdown Parser)
40
+ const lines = content.split('\n');
41
+ let inList = false;
42
+ for (const line of lines) {
43
+ const trimmed = line.trim();
44
+ if (trimmed.startsWith('# ')) {
45
+ doc.addPage(); // New page for main chapters? Maybe just space
46
+ doc.fontSize(20).text(trimmed.substring(2), { underline: true });
47
+ doc.moveDown(0.5);
48
+ }
49
+ else if (trimmed.startsWith('## ')) {
50
+ doc.fontSize(16).text(trimmed.substring(3));
51
+ doc.moveDown(0.5);
52
+ }
53
+ else if (trimmed.startsWith('### ')) {
54
+ doc.fontSize(14).text(trimmed.substring(4));
55
+ doc.moveDown(0.5);
56
+ }
57
+ else if (trimmed.startsWith('- ') || trimmed.startsWith('* ')) {
58
+ doc.fontSize(12).text(`• ${trimmed.substring(2)}`, { indent: 20 });
59
+ }
60
+ else if (trimmed.match(/^\d+\./)) {
61
+ doc.fontSize(12).text(trimmed, { indent: 20 });
62
+ }
63
+ else if (trimmed === '') {
64
+ doc.moveDown(0.5);
65
+ }
66
+ else {
67
+ // Normal paragraph
68
+ // Handle bold **text** (simple regex replace won't work easily with pdfkit text flow without mixed fonts)
69
+ // For now, just render plain text
70
+ doc.fontSize(12).text(line, { align: 'justify' });
71
+ }
72
+ }
73
+ // Finalize PDF file
74
+ doc.end();
75
+ if (ctx.updateProgress)
76
+ await ctx.updateProgress(100, `PDF Generated.`);
77
+ // Return relative path for frontend to access (assuming static serve)
78
+ // We need to make sure the workspace/output is served by express.
79
+ const relativeUrl = `/files/pdfs/${filename}.pdf`;
80
+ return {
81
+ success: true,
82
+ file_path: pdfPath,
83
+ url: relativeUrl,
84
+ formatted_output: `### PDF Generated\n\n[Download PDF](${relativeUrl})`
85
+ };
86
+ }
87
+ }
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../skills/research/pdf-generator/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ # System Skills Pack
2
+
3
+ Infrastructure and OS-level capabilities.
4
+
5
+ ## Skills
6
+
7
+ - `code-analysis`: Analyzing project structure and files
8
+ - `local-file-ops`: Reading and writing files
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: code-analysis
3
+ description: Analyze project structure, scan codebase stats, and summarize code files
4
+ tags: [code, analysis, summary, scan]
5
+ ---
6
+
7
+ # Code Analysis
8
+
9
+ This skill provides capabilities to analyze the codebase structure, scan for overall statistics, and summarize individual files.
10
+
11
+ ## Instructions
12
+
13
+ Use this skill when the user asks to:
14
+ - Understand the project structure
15
+ - Get an overview of the codebase (size, languages, key files)
16
+ - Summarize what a specific file does
17
+ - Analyze code statistics (SLOC, imports, exports)
18
+
19
+ ## Actions
20
+
21
+ ### structure
22
+ Recursively lists the file structure of the project, ignoring `node_modules` and hidden files.
23
+
24
+ **Parameters:**
25
+ - `path` (optional): The root directory to analyze. Defaults to current working directory.
26
+
27
+ ### scan
28
+ Scans the codebase to provide a high-level summary including total files, directories, size, SLOC, and language breakdown.
29
+
30
+ **Parameters:**
31
+ - `path` (optional): The root directory to scan. Defaults to current working directory.
32
+
33
+ ### summarize
34
+ Provides a summary of a specific code file or directory. For files, it may use LLM to generate a description.
35
+
36
+ **Parameters:**
37
+ - `path` (required): The path to the file or directory to summarize.
38
+
39
+ ## Examples
40
+
41
+ - "Show me the project structure" -> `structure`
42
+ - "Scan the codebase" -> `scan`
43
+ - "Analyze src/index.ts" -> `summarize(path="src/index.ts")`
@@ -0,0 +1,12 @@
1
+ import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
2
+ export default class CodeAnalysisSkill implements Skill {
3
+ id: string;
4
+ name: string;
5
+ description: string;
6
+ tags: string[];
7
+ execute(ctx: SkillContext, params: SkillParams): Promise<SkillResult>;
8
+ private getProjectStructure;
9
+ private scanCodebase;
10
+ private traverse;
11
+ private summarizeCode;
12
+ }