@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,180 @@
1
+ import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
2
+ import fs from 'fs/promises';
3
+ import path from 'path';
4
+
5
+ export default class CodeAnalysisSkill implements Skill {
6
+ id = 'code_analysis';
7
+ name = 'Code Analysis';
8
+ description = 'Analyze project structure, scan codebase stats, and summarize code files';
9
+ tags = ['code', 'analysis', 'summary', 'scan'];
10
+
11
+ async execute(ctx: SkillContext, params: SkillParams): Promise<SkillResult> {
12
+ const targetPath = params.path || '.';
13
+ const operation = params.operation || 'scan'; // Default to scan
14
+ const safePath = path.resolve(process.cwd(), targetPath);
15
+
16
+ ctx.log('thinking', `Analyzing code at ${safePath} (operation: ${operation})`);
17
+
18
+ try {
19
+ if (operation === 'structure') {
20
+ const structure = await this.getProjectStructure(safePath);
21
+ return { structure };
22
+ } else if (operation === 'summarize') {
23
+ const summary = await this.summarizeCode(ctx, safePath);
24
+ return { summary };
25
+ } else if (operation === 'scan') {
26
+ const scan = await this.scanCodebase(safePath);
27
+ return { scan };
28
+ } else {
29
+ throw new Error(`Unknown operation: ${operation}`);
30
+ }
31
+ } catch (error) {
32
+ ctx.log('error', `Code analysis failed: ${error}`);
33
+ throw error;
34
+ }
35
+ }
36
+
37
+ private async getProjectStructure(dir: string, depth = 0, maxDepth = 4): Promise<string> {
38
+ if (depth > maxDepth) return '';
39
+
40
+ let output = '';
41
+ try {
42
+ const files = await fs.readdir(dir);
43
+ // Sort: directories first, then files
44
+ const entries = await Promise.all(files.map(async file => {
45
+ const filePath = path.join(dir, file);
46
+ const stat = await fs.stat(filePath).catch(() => null);
47
+ return { file, stat };
48
+ }));
49
+
50
+ const validEntries = entries.filter(e => e.stat && !e.file.startsWith('.') && e.file !== 'node_modules' && e.file !== 'dist' && e.file !== 'build' && e.file !== '.git');
51
+
52
+ validEntries.sort((a, b) => {
53
+ if (a.stat!.isDirectory() && !b.stat!.isDirectory()) return -1;
54
+ if (!a.stat!.isDirectory() && b.stat!.isDirectory()) return 1;
55
+ return a.file.localeCompare(b.file);
56
+ });
57
+
58
+ for (const { file, stat } of validEntries) {
59
+ const indent = ' '.repeat(depth);
60
+ if (stat!.isDirectory()) {
61
+ output += `${indent}- ${file}/\n`;
62
+ output += await this.getProjectStructure(path.join(dir, file), depth + 1, maxDepth);
63
+ } else {
64
+ output += `${indent}- ${file}\n`;
65
+ }
66
+ }
67
+ } catch (e) {
68
+ // Ignore errors
69
+ }
70
+ return output;
71
+ }
72
+
73
+ private async scanCodebase(dir: string): Promise<any> {
74
+ const stats = {
75
+ files: 0,
76
+ directories: 0,
77
+ totalSize: 0,
78
+ extensions: {} as Record<string, number>,
79
+ sloc: 0,
80
+ keyFiles: [] as string[]
81
+ };
82
+
83
+ await this.traverse(dir, stats);
84
+
85
+ // Format extensions for display
86
+ const extSummary = Object.entries(stats.extensions)
87
+ .sort(([,a], [,b]) => b - a)
88
+ .slice(0, 10)
89
+ .map(([ext, count]) => `${ext}: ${count}`)
90
+ .join(', ');
91
+
92
+ const summary = `
93
+ **Codebase Scan Results**
94
+ - **Total Files:** ${stats.files}
95
+ - **Directories:** ${stats.directories}
96
+ - **Total Size:** ${(stats.totalSize / 1024 / 1024).toFixed(2)} MB
97
+ - **Total SLOC:** ${stats.sloc}
98
+ - **Key Files:** ${stats.keyFiles.join(', ')}
99
+ - **Extensions:** ${extSummary}
100
+ `.trim();
101
+
102
+ return { stats, summary };
103
+ }
104
+
105
+ private async traverse(dir: string, stats: any, depth = 0) {
106
+ if (depth > 10) return;
107
+
108
+ try {
109
+ const files = await fs.readdir(dir);
110
+ for (const file of files) {
111
+ if (file.startsWith('.') || file === 'node_modules' || file === 'dist' || file === 'build' || file === 'coverage') continue;
112
+
113
+ const filePath = path.join(dir, file);
114
+ const stat = await fs.stat(filePath);
115
+
116
+ if (stat.isDirectory()) {
117
+ stats.directories++;
118
+ await this.traverse(filePath, stats, depth + 1);
119
+ } else {
120
+ stats.files++;
121
+ stats.totalSize += stat.size;
122
+ const ext = path.extname(file);
123
+ if (ext) {
124
+ stats.extensions[ext] = (stats.extensions[ext] || 0) + 1;
125
+ }
126
+
127
+ if (['.ts', '.tsx', '.js', '.jsx', '.css', '.scss', '.html', '.md', '.json', '.py', '.go', '.rs'].includes(ext)) {
128
+ // Only count SLOC for text files
129
+ const content = await fs.readFile(filePath, 'utf-8');
130
+ stats.sloc += content.split('\n').filter(l => l.trim().length > 0).length;
131
+ }
132
+
133
+ if (['package.json', 'tsconfig.json', 'README.md', 'Dockerfile', 'docker-compose.yml', 'Makefile', 'Cargo.toml', 'go.mod'].includes(file)) {
134
+ stats.keyFiles.push(path.relative(process.cwd(), filePath));
135
+ }
136
+ }
137
+ }
138
+ } catch (e) {
139
+ // ignore
140
+ }
141
+ }
142
+
143
+ private async summarizeCode(ctx: SkillContext, filePath: string): Promise<string> {
144
+ try {
145
+ const stat = await fs.stat(filePath);
146
+ if (stat.isDirectory()) {
147
+ // Summarize directory: list files and maybe read README
148
+ const files = await fs.readdir(filePath);
149
+ const visibleFiles = files.filter(f => !f.startsWith('.'));
150
+ let summary = `Directory: ${path.basename(filePath)}\nFiles: ${visibleFiles.join(', ')}\n`;
151
+
152
+ if (visibleFiles.includes('README.md')) {
153
+ const readme = await fs.readFile(path.join(filePath, 'README.md'), 'utf-8');
154
+ summary += `\nREADME Preview:\n${readme.slice(0, 200)}...\n`;
155
+ }
156
+ return summary;
157
+ } else {
158
+ // Summarize file
159
+ const content = await fs.readFile(filePath, 'utf-8');
160
+ const lines = content.split('\n');
161
+ const sloc = lines.filter(l => l.trim().length > 0).length;
162
+
163
+ if (sloc > 500) {
164
+ return `File: ${path.basename(filePath)}\nSLOC: ${sloc}\n(File too large for full summary)`;
165
+ }
166
+
167
+ // Use LLM to summarize
168
+ const prompt = `Summarize this code file in 1-2 sentences:\n\n${content}`;
169
+ try {
170
+ const response = await ctx.llm.chat([{ role: 'user', content: prompt }]);
171
+ return `File: ${path.basename(filePath)}\nSLOC: ${sloc}\nSummary: ${response.content}`;
172
+ } catch (e) {
173
+ return `File: ${path.basename(filePath)}\nSLOC: ${sloc}\n(LLM summary failed)`;
174
+ }
175
+ }
176
+ } catch (e) {
177
+ return `Failed to summarize ${filePath}`;
178
+ }
179
+ }
180
+ }
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: local-file-ops
3
+ description: List, read, organize, and search local research files
4
+ tags: [system, file, local]
5
+ ---
6
+
7
+ # Local File Operations
8
+
9
+ This skill allows the agent to interact with the local filesystem.
10
+
11
+ ## Instructions
12
+
13
+ Use this skill to:
14
+ - Explore the file system
15
+ - Read file contents
16
+ - Organize files (e.g. moving PDFs)
17
+ - Search for files by name
18
+
19
+ ## Actions
20
+
21
+ ### list
22
+ List files in a directory.
23
+
24
+ **Parameters:**
25
+ - `path`: Directory path (default: current)
26
+ - `recursive`: Boolean, whether to list recursively
27
+
28
+ ### read
29
+ Read the content of a file.
30
+
31
+ **Parameters:**
32
+ - `path`: File path
33
+
34
+ ### write
35
+ Write content to a file.
36
+
37
+ **Parameters:**
38
+ - `path`: File path
39
+ - `content`: Content string
40
+
41
+ ### search
42
+ Find files matching a pattern.
43
+
44
+ **Parameters:**
45
+ - `pattern`: Search string (filename substring)
46
+ - `path`: Root directory
47
+
48
+ ### organize
49
+ Organize files based on rules (currently specialized for PDFs).
50
+
51
+ **Parameters:**
52
+ - `operation`: 'organize'
53
+
54
+ ## Security
55
+ Operations are restricted to the current workspace.
@@ -0,0 +1,123 @@
1
+ import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
2
+ import fs from 'fs/promises';
3
+ import path from 'path';
4
+
5
+ export default class LocalFileSkill implements Skill {
6
+ id = 'local_file_ops';
7
+ name = 'Local File Operations';
8
+ description = 'List, read, organize, and search local research files';
9
+ tags = ['system', 'file', 'local'];
10
+
11
+ async execute(ctx: SkillContext, params: SkillParams): Promise<SkillResult> {
12
+ const operation = params.operation as 'list' | 'read' | 'write' | 'organize' | 'search';
13
+ const targetPath = params.path || '.';
14
+ const recursive = params.recursive === true;
15
+
16
+ // Security check: ensure path is within workspace or allowed dirs
17
+ const safePath = path.resolve(process.cwd(), targetPath); // Default to CWD for now
18
+
19
+ ctx.log('thinking', `Performing ${operation} on ${safePath} (recursive: ${recursive})`);
20
+
21
+ try {
22
+ switch (operation) {
23
+ case 'list':
24
+ if (recursive) {
25
+ const files = await this.listRecursive(safePath);
26
+ ctx.log('tool_result', `Found ${files.length} files recursively`);
27
+ return { files };
28
+ } else {
29
+ const files = await fs.readdir(safePath);
30
+ ctx.log('tool_result', `Found ${files.length} files`);
31
+ return { files };
32
+ }
33
+
34
+ case 'read':
35
+ try {
36
+ const stat = await fs.stat(safePath);
37
+ if (stat.isDirectory()) {
38
+ throw new Error('Path is a directory, not a file');
39
+ }
40
+ const content = await fs.readFile(safePath, 'utf-8');
41
+ ctx.log('tool_result', `Read ${content.length} characters`);
42
+ return { content, path: safePath };
43
+ } catch (err) {
44
+ ctx.log('error', `Failed to read file: ${err}`);
45
+ throw err;
46
+ }
47
+
48
+ case 'write':
49
+ if (!params.content) throw new Error('Content required for write');
50
+ await fs.writeFile(safePath, params.content, 'utf-8');
51
+ ctx.log('action', `Wrote to file ${safePath}`);
52
+ return { success: true, path: safePath };
53
+
54
+ case 'search':
55
+ const pattern = params.pattern as string;
56
+ if (!pattern) throw new Error('Pattern required for search');
57
+
58
+ const allFiles = await this.listRecursive(safePath);
59
+ const matchedFiles = allFiles.filter(f => f.includes(pattern));
60
+
61
+ ctx.log('tool_result', `Found ${matchedFiles.length} files matching "${pattern}"`);
62
+ return { files: matchedFiles };
63
+
64
+ case 'organize':
65
+ // Example: Move PDFs to a 'papers' folder
66
+ ctx.log('action', 'Organizing PDF files...');
67
+
68
+ let fileList: string[] = [];
69
+ try {
70
+ fileList = await fs.readdir(safePath);
71
+ } catch (e) {
72
+ ctx.log('error', `Failed to read dir ${safePath}: ${e}`);
73
+ return { moved: 0 };
74
+ }
75
+
76
+ const pdfs = fileList.filter(f => f.toLowerCase().endsWith('.pdf'));
77
+
78
+ if (pdfs.length === 0) {
79
+ return { moved: 0, destination: safePath };
80
+ }
81
+
82
+ const papersDir = path.join(safePath, 'papers');
83
+ await fs.mkdir(papersDir, { recursive: true });
84
+
85
+ for (const pdf of pdfs) {
86
+ await fs.rename(path.join(safePath, pdf), path.join(papersDir, pdf));
87
+ }
88
+
89
+ ctx.log('tool_result', `Moved ${pdfs.length} PDFs to ${papersDir}`);
90
+ return { moved: pdfs.length, destination: papersDir };
91
+
92
+ default:
93
+ throw new Error(`Unknown operation: ${operation}`);
94
+ }
95
+ } catch (error) {
96
+ ctx.log('error', `File operation failed: ${error}`);
97
+ throw error;
98
+ }
99
+ }
100
+
101
+ private async listRecursive(dir: string): Promise<string[]> {
102
+ let results: string[] = [];
103
+ try {
104
+ const list = await fs.readdir(dir);
105
+ for (const file of list) {
106
+ if (file.startsWith('.') || file === 'node_modules') continue;
107
+
108
+ const filePath = path.resolve(dir, file);
109
+ const stat = await fs.stat(filePath);
110
+
111
+ if (stat && stat.isDirectory()) {
112
+ const res = await this.listRecursive(filePath);
113
+ results = results.concat(res);
114
+ } else {
115
+ results.push(filePath);
116
+ }
117
+ }
118
+ } catch (err) {
119
+ // Ignore permission errors or missing dirs during recursion
120
+ }
121
+ return results;
122
+ }
123
+ }
@@ -0,0 +1,11 @@
1
+ # Vendor Skills Pack
2
+
3
+ Third-party or specialized domain skills.
4
+
5
+ ## Skills
6
+
7
+ - `literature-review`: Literature review and academic search
8
+ - `agent-browser`: Web browsing capabilities
9
+ - `searxng`: Meta-search engine integration
10
+ - `proactive-agent`: Autonomous behavior modules
11
+ - `self-improving-agent`: Learning mechanisms
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 1,
3
+ "registry": "https://clawhub.ai",
4
+ "slug": "agent-browser",
5
+ "installedVersion": "0.2.0",
6
+ "installedAt": 1772701268218
7
+ }
@@ -0,0 +1,63 @@
1
+ # Contributing to Agent Browser Skill
2
+
3
+ This skill wraps the agent-browser CLI. Determine where the problem lies before reporting issues.
4
+
5
+ ## Issue Reporting Guide
6
+
7
+ ### Open an issue in this repository if
8
+
9
+ - The skill documentation is unclear or missing
10
+ - Examples in SKILL.md do not work
11
+ - You need help using the CLI with this skill wrapper
12
+ - The skill is missing a command or feature
13
+
14
+ ### Open an issue at the agent-browser repository if
15
+
16
+ - The CLI crashes or throws errors
17
+ - Commands do not behave as documented
18
+ - You found a bug in the browser automation
19
+ - You need a new feature in the CLI
20
+
21
+ ## Before Opening an Issue
22
+
23
+ 1. Install the latest version
24
+ ```bash
25
+ npm install -g agent-browser@latest
26
+ ```
27
+
28
+ 2. Test the command in your terminal to isolate the issue
29
+
30
+ ## Issue Report Template
31
+
32
+ Use this template to provide necessary information.
33
+
34
+ ```markdown
35
+ ### Description
36
+ [Provide a clear and concise description of the bug]
37
+
38
+ ### Reproduction Steps
39
+ 1. [First Step]
40
+ 2. [Second Step]
41
+ 3. [Observe error]
42
+
43
+ ### Expected Behavior
44
+ [Describe what you expected to happen]
45
+
46
+ ### Environment Details
47
+ - **Skill Version:** [e.g. 1.0.2]
48
+ - **agent-browser Version:** [output of agent-browser --version]
49
+ - **Node.js Version:** [output of node -v]
50
+ - **Operating System:** [e.g. macOS Sonoma, Windows 11, Ubuntu 22.04]
51
+
52
+ ### Additional Context
53
+ - [Full error output or stack trace]
54
+ - [Screenshots]
55
+ - [Website URLs where the failure occurred]
56
+ ```
57
+
58
+ ## Adding New Commands to the Skill
59
+
60
+ Update SKILL.md when the upstream CLI adds new commands.
61
+ - Keep the Installation section
62
+ - Add new commands in the correct category
63
+ - Include usage examples