@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,474 @@
1
+ import express from 'express';
2
+ import { v4 as uuidv4 } from 'uuid';
3
+ import multer from 'multer';
4
+ import path from 'path';
5
+ import fs from 'fs';
6
+ import { AGENT_CARD_PATH } from '@a2a-js/sdk';
7
+ import { DefaultRequestHandler, InMemoryTaskStore, } from '@a2a-js/sdk/server';
8
+ import { agentCardHandler, jsonRpcHandler, restHandler, UserBuilder } from '@a2a-js/sdk/server/express';
9
+ import { createLogger } from '../utils/logger.js';
10
+ import { EventEmitter } from 'events';
11
+ import { fileURLToPath } from 'url';
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
14
+ const logger = createLogger('Gateway');
15
+ const sessionEvents = new EventEmitter(); // Bus for streaming events to SSE clients
16
+ // Configure multer for file uploads
17
+ const uploadDir = path.join(process.cwd(), 'data', 'uploads');
18
+ if (!fs.existsSync(uploadDir)) {
19
+ fs.mkdirSync(uploadDir, { recursive: true });
20
+ }
21
+ const storage = multer.diskStorage({
22
+ destination: function (req, file, cb) {
23
+ cb(null, uploadDir);
24
+ },
25
+ filename: function (req, file, cb) {
26
+ const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
27
+ cb(null, uniqueSuffix + '-' + file.originalname);
28
+ }
29
+ });
30
+ const upload = multer({ storage: storage });
31
+ export class A2AGateway {
32
+ app;
33
+ port;
34
+ agent;
35
+ constructor(agent, port = 4000) {
36
+ this.agent = agent;
37
+ this.port = port;
38
+ this.app = express();
39
+ this.setupA2A();
40
+ }
41
+ setupA2A() {
42
+ const agentCard = {
43
+ name: 'Redigg Research Agent',
44
+ description: 'An autonomous research agent that helps with literature review and scientific discovery.',
45
+ protocolVersion: '0.3.0',
46
+ version: '0.1.0',
47
+ url: `http://localhost:${this.port}/a2a/jsonrpc`,
48
+ skills: [
49
+ {
50
+ id: 'chat',
51
+ name: 'Research Chat',
52
+ description: 'Chat with the research agent about scientific topics',
53
+ tags: ['research', 'chat']
54
+ },
55
+ {
56
+ id: 'literature_review',
57
+ name: 'Literature Review',
58
+ description: 'Search for papers and generate a literature review',
59
+ tags: ['research', 'literature', 'review']
60
+ }
61
+ ],
62
+ capabilities: {
63
+ pushNotifications: false,
64
+ },
65
+ defaultInputModes: ['text'],
66
+ defaultOutputModes: ['text'],
67
+ additionalInterfaces: [
68
+ { url: `http://localhost:${this.port}/a2a/jsonrpc`, transport: 'JSONRPC' },
69
+ { url: `http://localhost:${this.port}/a2a/rest`, transport: 'HTTP+JSON' },
70
+ ],
71
+ };
72
+ const executor = {
73
+ execute: async (requestContext, eventBus) => {
74
+ const task = requestContext.task;
75
+ if (!task) {
76
+ logger.error('No task found in context');
77
+ eventBus.finished();
78
+ return;
79
+ }
80
+ const input = task.input;
81
+ const userId = 'a2a-user'; // TODO: Extract from auth context if available
82
+ logger.info(`Received request: ${JSON.stringify(input)}`);
83
+ try {
84
+ // Extract text from input (assuming simple text message for now)
85
+ let userMessage = '';
86
+ if (typeof input === 'string') {
87
+ userMessage = input;
88
+ }
89
+ else if (input && typeof input === 'object' && 'text' in input) {
90
+ userMessage = input.text;
91
+ }
92
+ else if (input && typeof input === 'object' && 'message' in input) {
93
+ // Handle standard A2A message format
94
+ const msg = input;
95
+ if (msg.message && msg.message.parts && msg.message.parts.length > 0) {
96
+ userMessage = msg.message.parts[0].text;
97
+ }
98
+ }
99
+ if (!userMessage) {
100
+ userMessage = "Hello";
101
+ }
102
+ const reply = await this.agent.chat(userId, userMessage);
103
+ const responseMessage = {
104
+ kind: 'message',
105
+ messageId: uuidv4(),
106
+ role: 'agent',
107
+ parts: [{ kind: 'text', text: reply }],
108
+ contextId: requestContext.contextId,
109
+ };
110
+ eventBus.publish(responseMessage);
111
+ eventBus.finished();
112
+ }
113
+ catch (error) {
114
+ logger.error('Error executing task:', error);
115
+ eventBus.finished();
116
+ }
117
+ },
118
+ cancelTask: async () => { },
119
+ };
120
+ const requestHandler = new DefaultRequestHandler(agentCard, new InMemoryTaskStore(), executor);
121
+ // CORS for local development (Must be first)
122
+ this.app.use((req, res, next) => {
123
+ res.header('Access-Control-Allow-Origin', '*');
124
+ res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
125
+ if (req.method === 'OPTIONS') {
126
+ res.sendStatus(200);
127
+ }
128
+ else {
129
+ next();
130
+ }
131
+ });
132
+ this.app.use(`/${AGENT_CARD_PATH}`, agentCardHandler({ agentCardProvider: requestHandler }));
133
+ this.app.use('/a2a/jsonrpc', jsonRpcHandler({ requestHandler, userBuilder: UserBuilder.noAuthentication }));
134
+ this.app.use('/a2a/rest', restHandler({ requestHandler, userBuilder: UserBuilder.noAuthentication }));
135
+ // Simple Chat API for Web Dashboard
136
+ this.app.use(express.json({ limit: '50mb' }));
137
+ this.app.use('/files', express.static(path.join(process.cwd(), 'workspace/output')));
138
+ // Serve Frontend Static Files (Production Mode)
139
+ // Check if web/dist exists (relative to current working directory or package root)
140
+ // In production (npm package), dist/gateway/index.js is running.
141
+ // web/dist should be at ../../web/dist relative to this file?
142
+ // No, usually we look from process.cwd() or __dirname.
143
+ // If installed globally, process.cwd() is where the user runs it.
144
+ // So we need to find the package root.
145
+ // Attempt to find web/dist
146
+ let webDistPath = path.join(process.cwd(), 'web', 'dist'); // Local dev or if run from root
147
+ if (!fs.existsSync(webDistPath)) {
148
+ // Try finding it relative to the executable/module
149
+ // In dist/gateway/index.js, we go up two levels to get to dist/, then we might need to go to web/dist?
150
+ // Actually, if we ship 'web/dist' in the package, it will be in the package root.
151
+ // __dirname is .../dist/gateway
152
+ webDistPath = path.resolve(__dirname, '..', '..', 'web', 'dist');
153
+ }
154
+ if (fs.existsSync(webDistPath)) {
155
+ logger.info(`Serving frontend from ${webDistPath}`);
156
+ this.app.use(express.static(webDistPath));
157
+ // SPA Fallback
158
+ this.app.get('*', (req, res, next) => {
159
+ if (req.path.startsWith('/api') || req.path.startsWith('/a2a')) {
160
+ return next();
161
+ }
162
+ res.sendFile(path.join(webDistPath, 'index.html'));
163
+ });
164
+ }
165
+ else {
166
+ logger.warn(`Frontend build not found at ${webDistPath}. Dashboard may not be available.`);
167
+ }
168
+ // File Upload API
169
+ // File Upload API
170
+ this.app.post('/api/upload', upload.single('file'), (req, res) => {
171
+ try {
172
+ if (!req.file) {
173
+ res.status(400).json({ error: 'No file uploaded' });
174
+ return;
175
+ }
176
+ logger.info(`File uploaded: ${req.file.originalname} (${req.file.size} bytes)`);
177
+ res.json({
178
+ id: req.file.filename,
179
+ name: req.file.originalname,
180
+ path: req.file.path,
181
+ size: req.file.size,
182
+ mimetype: req.file.mimetype
183
+ });
184
+ }
185
+ catch (error) {
186
+ logger.error('Upload error:', error);
187
+ res.status(500).json({ error: String(error) });
188
+ }
189
+ });
190
+ this.app.post('/api/chat', async (req, res) => {
191
+ const { message, userId = 'web-user' } = req.body;
192
+ logger.info(`Chat request: ${message}`);
193
+ try {
194
+ const reply = await this.agent.chat(userId, message);
195
+ res.json({ reply });
196
+ }
197
+ catch (error) {
198
+ logger.error('Chat error:', error);
199
+ res.status(500).json({ error: 'Internal Server Error' });
200
+ }
201
+ });
202
+ // Skill API
203
+ this.app.get('/api/skills', (req, res) => {
204
+ try {
205
+ const skills = this.agent.skillManager.getAllSkills().map(s => {
206
+ // Find which pack this skill belongs to
207
+ const pack = this.agent.skillManager.getAllPacks().find(p => p.skills.some(sk => sk.id === s.id));
208
+ return {
209
+ id: s.id,
210
+ name: s.name || s.id,
211
+ description: s.description || '',
212
+ packId: pack?.id
213
+ };
214
+ });
215
+ res.json(skills);
216
+ }
217
+ catch (error) {
218
+ logger.error('Skills error:', error);
219
+ res.status(500).json({ error: String(error) });
220
+ }
221
+ });
222
+ this.app.get('/api/skill-packs', (req, res) => {
223
+ try {
224
+ const packs = this.agent.skillManager.getAllPacks().map(p => ({
225
+ id: p.id,
226
+ name: p.name,
227
+ description: p.description
228
+ }));
229
+ res.json(packs);
230
+ }
231
+ catch (error) {
232
+ logger.error('Skill packs error:', error);
233
+ res.status(500).json({ error: String(error) });
234
+ }
235
+ });
236
+ // Memory API
237
+ this.app.get('/api/memories', async (req, res) => {
238
+ const userId = req.query.userId || 'web-user';
239
+ try {
240
+ const memories = await this.agent.memoryManager.getUserMemories(userId);
241
+ res.json(memories);
242
+ }
243
+ catch (error) {
244
+ logger.error('Memories error:', error);
245
+ res.status(500).json({ error: String(error) });
246
+ }
247
+ });
248
+ this.app.delete('/api/memories/:id', async (req, res) => {
249
+ const { id } = req.params;
250
+ try {
251
+ await this.agent.memoryManager.deleteMemory(id);
252
+ res.json({ success: true });
253
+ }
254
+ catch (error) {
255
+ logger.error('Delete memory error:', error);
256
+ res.status(500).json({ error: String(error) });
257
+ }
258
+ });
259
+ // Session API
260
+ this.app.get('/api/sessions', (req, res) => {
261
+ const userId = req.query.userId || 'web-user';
262
+ try {
263
+ const sessions = this.agent.sessionManager.getUserSessions(userId);
264
+ res.json(sessions);
265
+ }
266
+ catch (error) {
267
+ logger.error('Sessions error:', error);
268
+ res.status(500).json({ error: String(error) });
269
+ }
270
+ });
271
+ this.app.post('/api/sessions', (req, res) => {
272
+ const { userId = 'web-user', title } = req.body;
273
+ try {
274
+ const session = this.agent.sessionManager.createSession(userId, title);
275
+ res.json(session);
276
+ }
277
+ catch (error) {
278
+ logger.error('Create session error:', error);
279
+ res.status(500).json({ error: String(error) });
280
+ }
281
+ });
282
+ this.app.post('/api/sessions/:sessionId/stop', (req, res) => {
283
+ const { sessionId } = req.params;
284
+ try {
285
+ this.agent.sessionManager.stopSession(sessionId);
286
+ res.json({ success: true });
287
+ }
288
+ catch (error) {
289
+ logger.error('Stop session error:', error);
290
+ res.status(500).json({ error: String(error) });
291
+ }
292
+ });
293
+ this.app.get('/api/sessions/:sessionId/history', (req, res) => {
294
+ const { sessionId } = req.params;
295
+ try {
296
+ const history = this.agent.sessionManager.getHistory(sessionId, 100);
297
+ res.json(history);
298
+ }
299
+ catch (error) {
300
+ logger.error('Session history error:', error);
301
+ res.status(500).json({ error: String(error) });
302
+ }
303
+ });
304
+ this.app.delete('/api/sessions/:sessionId', (req, res) => {
305
+ const { sessionId } = req.params;
306
+ try {
307
+ this.agent.sessionManager.deleteSession(sessionId);
308
+ res.json({ success: true });
309
+ }
310
+ catch (error) {
311
+ logger.error('Delete session error:', error);
312
+ res.status(500).json({ error: String(error) });
313
+ }
314
+ });
315
+ // Async Chat API
316
+ this.app.post('/api/chat/async', (req, res) => {
317
+ let { message, userId = 'web-user', sessionId, webSearch, attachments, autoMode } = req.body;
318
+ if (!message && (!attachments || attachments.length === 0)) {
319
+ res.status(400).json({ error: 'Message or attachments required' });
320
+ return;
321
+ }
322
+ // Process attachments context
323
+ if (attachments && Array.isArray(attachments) && attachments.length > 0) {
324
+ message += `\n\n[ATTACHMENTS]\nThe user has uploaded the following files:\n${attachments.map((f) => `- ${f.name} (ID: ${f.id})`).join('\n')}\nYou can refer to these files in your response.`;
325
+ }
326
+ // Process web search context
327
+ if (webSearch) {
328
+ message = `[WEB SEARCH REQUEST] ${message}\nPlease perform a literature review or web search to answer this question.`;
329
+ }
330
+ // Process auto mode context
331
+ // if (autoMode) {
332
+ // We don't modify the message anymore, just pass the flag
333
+ // }
334
+ logger.info(`Async Chat request: ${message} (Session: ${sessionId || 'auto'})`);
335
+ // Start agent in background
336
+ this.agent.chat(userId, message, (type, content) => {
337
+ // Logs are now persisted by agent itself to DB, so we don't need to do anything here
338
+ // BUT we want to broadcast via SSE/WebSocket for real-time updates.
339
+ if (sessionId) {
340
+ sessionEvents.emit(`session:${sessionId}`, { type, content });
341
+ }
342
+ }, sessionId, { autoMode }).catch(err => {
343
+ logger.error('Async chat error:', err);
344
+ if (sessionId) {
345
+ sessionEvents.emit(`session:${sessionId}`, { type: 'error', content: String(err) });
346
+ }
347
+ }).finally(() => {
348
+ if (sessionId) {
349
+ sessionEvents.emit(`session:${sessionId}`, { type: 'done' });
350
+ }
351
+ });
352
+ res.status(202).json({ status: 'accepted', message: 'Processing started' });
353
+ });
354
+ // Real-time Event Stream for a Session
355
+ this.app.get('/api/sessions/:sessionId/events', (req, res) => {
356
+ const { sessionId } = req.params;
357
+ res.setHeader('Content-Type', 'text/event-stream');
358
+ res.setHeader('Cache-Control', 'no-cache');
359
+ res.setHeader('Connection', 'keep-alive');
360
+ const handler = (data) => {
361
+ res.write(`data: ${JSON.stringify(data)}\n\n`);
362
+ };
363
+ sessionEvents.on(`session:${sessionId}`, handler);
364
+ // Send initial ping
365
+ res.write(`data: ${JSON.stringify({ type: 'ping' })}\n\n`);
366
+ req.on('close', () => {
367
+ sessionEvents.off(`session:${sessionId}`, handler);
368
+ });
369
+ });
370
+ // SSE Chat API (Deprecated for direct use, but kept for compatibility or real-time if needed)
371
+ this.app.get('/api/chat/stream', async (req, res) => {
372
+ let message = req.query.message;
373
+ const userId = req.query.userId || 'web-user';
374
+ const sessionId = req.query.sessionId;
375
+ const webSearch = req.query.webSearch === 'true';
376
+ const attachmentsStr = req.query.attachments;
377
+ if (!message) {
378
+ res.status(400).send('Message required');
379
+ return;
380
+ }
381
+ // Process attachments context
382
+ if (attachmentsStr) {
383
+ try {
384
+ const attachments = JSON.parse(attachmentsStr);
385
+ if (Array.isArray(attachments) && attachments.length > 0) {
386
+ message += `\n\n[ATTACHMENTS]\nThe user has uploaded the following files:\n${attachments.map((f) => `- ${f.name} (ID: ${f.id})`).join('\n')}\nYou can refer to these files in your response.`;
387
+ }
388
+ }
389
+ catch (e) {
390
+ logger.error('Failed to parse attachments', e);
391
+ }
392
+ }
393
+ // Process web search context
394
+ if (webSearch) {
395
+ message = `[WEB SEARCH REQUEST] ${message}\nPlease perform a literature review or web search to answer this question.`;
396
+ }
397
+ logger.info(`SSE Chat request: ${message} (Session: ${sessionId || 'auto'})`);
398
+ res.setHeader('Content-Type', 'text/event-stream');
399
+ res.setHeader('Cache-Control', 'no-cache');
400
+ res.setHeader('Connection', 'keep-alive');
401
+ try {
402
+ const startTime = Date.now();
403
+ let hasStreamedTokens = false;
404
+ const reply = await this.agent.chat(userId, message, (type, content) => {
405
+ if (type === 'token') {
406
+ hasStreamedTokens = true;
407
+ // Send token
408
+ res.write(`data: ${JSON.stringify({ type: 'token', content })}\n\n`);
409
+ }
410
+ else if (type === 'log') {
411
+ // Send log
412
+ res.write(`data: ${JSON.stringify({ type: 'log', content })}\n\n`);
413
+ }
414
+ else if (type === 'plan') {
415
+ // Send plan
416
+ res.write(`data: ${JSON.stringify({ type: 'plan', content })}\n\n`);
417
+ }
418
+ else if (type === 'todo') {
419
+ // Send todo
420
+ res.write(`data: ${JSON.stringify({ type: 'todo', content })}\n\n`);
421
+ }
422
+ }, sessionId);
423
+ const duration = Date.now() - startTime;
424
+ if (!hasStreamedTokens && reply) {
425
+ res.write(`data: ${JSON.stringify({ type: 'token', content: reply })}\n\n`);
426
+ }
427
+ // Calculate approximate token usage (simplified)
428
+ // In a real scenario, this should come from the LLM provider response
429
+ const estimatedTokens = Math.ceil(reply.length / 4);
430
+ // Send stats
431
+ res.write(`data: ${JSON.stringify({
432
+ type: 'stats',
433
+ content: {
434
+ duration,
435
+ tokens: estimatedTokens,
436
+ model: process.env.OPENAI_MODEL || 'gpt-3.5-turbo'
437
+ }
438
+ })}\n\n`);
439
+ // End stream
440
+ res.write(`data: ${JSON.stringify({ type: 'done' })}\n\n`);
441
+ res.end();
442
+ }
443
+ catch (error) {
444
+ logger.error('SSE error:', error);
445
+ res.write(`data: ${JSON.stringify({ type: 'error', content: String(error) })}\n\n`);
446
+ res.end();
447
+ }
448
+ });
449
+ // Config API
450
+ this.app.get('/api/config', (req, res) => {
451
+ try {
452
+ const config = {
453
+ model: process.env.OPENAI_MODEL || 'gpt-3.5-turbo',
454
+ contextWindow: 1000000, // 1M tokens
455
+ maxOutputTokens: 65536,
456
+ provider: process.env.OPENAI_API_KEY ? 'OpenAI' : 'Mock'
457
+ };
458
+ res.json(config);
459
+ }
460
+ catch (error) {
461
+ logger.error('Config error:', error);
462
+ res.status(500).json({ error: String(error) });
463
+ }
464
+ });
465
+ }
466
+ start() {
467
+ this.app.listen(this.port, () => {
468
+ logger.success(`A2A Gateway started on http://localhost:${this.port}`);
469
+ logger.info(`- Agent Card: http://localhost:${this.port}/${AGENT_CARD_PATH}`);
470
+ logger.info(`- JSON-RPC: http://localhost:${this.port}/a2a/jsonrpc`);
471
+ });
472
+ }
473
+ }
474
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateway/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function main(options?: {
2
+ port?: number;
3
+ }): Promise<void>;
package/dist/index.js ADDED
@@ -0,0 +1,97 @@
1
+ import { A2AGateway } from './gateway/index.js';
2
+ import { MemoryManager } from './memory/MemoryManager.js';
3
+ import { SQLiteStorage } from './storage/sqlite.js';
4
+ import { ResearchAgent } from './agent/ResearchAgent.js';
5
+ import { MemoryEvolutionSystem } from './memory/evolution/MemoryEvolutionSystem.js';
6
+ import { MockLLMClient } from './llm/LLMClient.js';
7
+ import OpenAI from 'openai';
8
+ import dotenv from 'dotenv';
9
+ import { createLogger } from './utils/logger.js';
10
+ dotenv.config({ override: true });
11
+ const logger = createLogger('Main');
12
+ // Real OpenAI Client (Copied from cli.ts for now, should be refactored to shared location)
13
+ class OpenAIClient {
14
+ openai;
15
+ model;
16
+ constructor(apiKey, baseURL, model) {
17
+ this.openai = new OpenAI({
18
+ apiKey,
19
+ baseURL: baseURL || 'https://api.openai.com/v1'
20
+ });
21
+ this.model = model || 'gpt-3.5-turbo';
22
+ }
23
+ async complete(prompt) {
24
+ const response = await this.openai.chat.completions.create({
25
+ model: this.model,
26
+ messages: [{ role: 'user', content: prompt }],
27
+ });
28
+ const content = response.choices[0].message.content || '';
29
+ console.log('[LLM Complete Output]:', content);
30
+ return { content };
31
+ }
32
+ async chat(messages) {
33
+ const response = await this.openai.chat.completions.create({
34
+ model: this.model,
35
+ messages: messages,
36
+ });
37
+ const content = response.choices[0].message.content || '';
38
+ console.log('[LLM Chat Output]:', content);
39
+ return { content };
40
+ }
41
+ async chatStream(messages, handler) {
42
+ try {
43
+ const stream = await this.openai.chat.completions.create({
44
+ model: this.model,
45
+ messages: messages,
46
+ stream: true,
47
+ });
48
+ let fullText = '';
49
+ for await (const chunk of stream) {
50
+ const content = chunk.choices[0]?.delta?.content || '';
51
+ if (content) {
52
+ process.stdout.write(content); // Stream to console for debugging
53
+ fullText += content;
54
+ handler.onToken?.(content);
55
+ }
56
+ }
57
+ process.stdout.write('\n'); // End of stream newline
58
+ handler.onComplete?.(fullText);
59
+ }
60
+ catch (error) {
61
+ handler.onError?.(error);
62
+ throw error;
63
+ }
64
+ }
65
+ }
66
+ import { fileURLToPath } from 'url';
67
+ export async function main(options = {}) {
68
+ logger.info('🦎 Redigg Agent System Starting...');
69
+ // 1. Initialize Core Components
70
+ const storage = new SQLiteStorage();
71
+ const memoryManager = new MemoryManager(storage);
72
+ let llm;
73
+ if (process.env.OPENAI_API_KEY) {
74
+ logger.info('Using Real OpenAI API');
75
+ llm = new OpenAIClient(process.env.OPENAI_API_KEY, process.env.OPENAI_BASE_URL, process.env.OPENAI_MODEL);
76
+ }
77
+ else {
78
+ logger.warn('Using Mock LLM');
79
+ llm = new MockLLMClient();
80
+ }
81
+ const memoryEvo = new MemoryEvolutionSystem(memoryManager, llm);
82
+ const agent = new ResearchAgent(memoryManager, memoryEvo, llm);
83
+ // Start agent background processes (heartbeat, cron)
84
+ agent.start();
85
+ // Start A2A Gateway
86
+ const port = options.port || parseInt(process.env.PORT || '4000');
87
+ const gateway = new A2AGateway(agent, port);
88
+ gateway.start();
89
+ }
90
+ // Only run if executed directly
91
+ if (process.argv[1] === fileURLToPath(import.meta.url)) {
92
+ main().catch(error => {
93
+ logger.error('Failed to start Redigg:', error);
94
+ process.exit(1);
95
+ });
96
+ }
97
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface LLMResponse {
2
+ content: string;
3
+ usage?: {
4
+ promptTokens: number;
5
+ completionTokens: number;
6
+ };
7
+ }
8
+ export interface LLMStreamHandler {
9
+ onToken?: (token: string) => void;
10
+ onComplete?: (fullText: string) => void;
11
+ onError?: (error: any) => void;
12
+ }
13
+ export interface LLMClient {
14
+ complete(prompt: string, options?: any): Promise<LLMResponse>;
15
+ chat(messages: {
16
+ role: string;
17
+ content: string;
18
+ }[], options?: any): Promise<LLMResponse>;
19
+ chatStream?(messages: {
20
+ role: string;
21
+ content: string;
22
+ }[], handler: LLMStreamHandler, options?: any): Promise<void>;
23
+ }
24
+ export declare class MockLLMClient implements LLMClient {
25
+ complete(prompt: string): Promise<LLMResponse>;
26
+ chat(messages: {
27
+ role: string;
28
+ content: string;
29
+ }[]): Promise<LLMResponse>;
30
+ }