@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.
- package/LICENSE +21 -0
- package/README.md +145 -0
- package/dist/agent/ResearchAgent.d.ts +35 -0
- package/dist/agent/ResearchAgent.js +818 -0
- package/dist/agent/ResearchAgent.js.map +1 -0
- package/dist/agent/subagent/SubAgent.d.ts +23 -0
- package/dist/agent/subagent/SubAgent.js +87 -0
- package/dist/agent/subagent/SubAgent.js.map +1 -0
- package/dist/agent/subagent/SubAgentManager.d.ts +19 -0
- package/dist/agent/subagent/SubAgentManager.js +40 -0
- package/dist/agent/subagent/SubAgentManager.js.map +1 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +34 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +179 -0
- package/dist/cli.js.map +1 -0
- package/dist/events/EventManager.d.ts +39 -0
- package/dist/events/EventManager.js +20 -0
- package/dist/events/EventManager.js.map +1 -0
- package/dist/gateway/index.d.ts +9 -0
- package/dist/gateway/index.js +474 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/LLMClient.d.ts +30 -0
- package/dist/llm/LLMClient.js +21 -0
- package/dist/llm/LLMClient.js.map +1 -0
- package/dist/llm/OpenAIClient.d.ts +16 -0
- package/dist/llm/OpenAIClient.js +58 -0
- package/dist/llm/OpenAIClient.js.map +1 -0
- package/dist/memory/MemoryManager.d.ts +41 -0
- package/dist/memory/MemoryManager.js +221 -0
- package/dist/memory/MemoryManager.js.map +1 -0
- package/dist/memory/evolution/MemoryEvolutionSystem.d.ts +17 -0
- package/dist/memory/evolution/MemoryEvolutionSystem.js +71 -0
- package/dist/memory/evolution/MemoryEvolutionSystem.js.map +1 -0
- package/dist/memory/search/BM25Search.d.ts +22 -0
- package/dist/memory/search/BM25Search.js +61 -0
- package/dist/memory/search/BM25Search.js.map +1 -0
- package/dist/memory/structure/PageIndex.d.ts +26 -0
- package/dist/memory/structure/PageIndex.js +156 -0
- package/dist/memory/structure/PageIndex.js.map +1 -0
- package/dist/quality/QualityManager.d.ts +12 -0
- package/dist/quality/QualityManager.js +61 -0
- package/dist/quality/QualityManager.js.map +1 -0
- package/dist/scheduling/CronManager.d.ts +21 -0
- package/dist/scheduling/CronManager.js +66 -0
- package/dist/scheduling/CronManager.js.map +1 -0
- package/dist/session/SessionManager.d.ts +37 -0
- package/dist/session/SessionManager.js +238 -0
- package/dist/session/SessionManager.js.map +1 -0
- package/dist/skills/SkillManager.d.ts +31 -0
- package/dist/skills/SkillManager.js +254 -0
- package/dist/skills/SkillManager.js.map +1 -0
- package/dist/skills/agent/PACK.md +13 -0
- package/dist/skills/agent/agent-orchestration/SKILL.md +37 -0
- package/dist/skills/agent/agent-orchestration/index.d.ts +9 -0
- package/dist/skills/agent/agent-orchestration/index.js +70 -0
- package/dist/skills/agent/agent-orchestration/index.js.map +1 -0
- package/dist/skills/agent/evolution/SKILL.md +25 -0
- package/dist/skills/agent/evolution/index.d.ts +9 -0
- package/dist/skills/agent/evolution/index.js +57 -0
- package/dist/skills/agent/evolution/index.js.map +1 -0
- package/dist/skills/agent/heartbeat/index.d.ts +8 -0
- package/dist/skills/agent/heartbeat/index.js +44 -0
- package/dist/skills/agent/heartbeat/index.js.map +1 -0
- package/dist/skills/agent/memory-management/SKILL.md +40 -0
- package/dist/skills/agent/memory-management/index.d.ts +8 -0
- package/dist/skills/agent/memory-management/index.js +44 -0
- package/dist/skills/agent/memory-management/index.js.map +1 -0
- package/dist/skills/agent/scheduling/SKILL.md +33 -0
- package/dist/skills/agent/scheduling/index.d.ts +13 -0
- package/dist/skills/agent/scheduling/index.js +80 -0
- package/dist/skills/agent/scheduling/index.js.map +1 -0
- package/dist/skills/agent/session-management/SKILL.md +35 -0
- package/dist/skills/agent/session-management/index.d.ts +11 -0
- package/dist/skills/agent/session-management/index.js +54 -0
- package/dist/skills/agent/session-management/index.js.map +1 -0
- package/dist/skills/agent/skill-management/SKILL.md +31 -0
- package/dist/skills/agent/skill-management/index.d.ts +8 -0
- package/dist/skills/agent/skill-management/index.js +25 -0
- package/dist/skills/agent/skill-management/index.js.map +1 -0
- package/dist/skills/evolution/SkillEvolutionSystem.d.ts +12 -0
- package/dist/skills/evolution/SkillEvolutionSystem.js +157 -0
- package/dist/skills/evolution/SkillEvolutionSystem.js.map +1 -0
- package/dist/skills/lib/ScholarTool.d.ts +14 -0
- package/dist/skills/lib/ScholarTool.js +71 -0
- package/dist/skills/lib/ScholarTool.js.map +1 -0
- package/dist/skills/research/PACK.md +7 -0
- package/dist/skills/research/academic-survey-self-improve/SKILL.md +17 -0
- package/dist/skills/research/academic-survey-self-improve/index.d.ts +10 -0
- package/dist/skills/research/academic-survey-self-improve/index.js +75 -0
- package/dist/skills/research/academic-survey-self-improve/index.js.map +1 -0
- package/dist/skills/research/concept-explainer/SKILL.md +3 -0
- package/dist/skills/research/concept-explainer/index.d.ts +8 -0
- package/dist/skills/research/concept-explainer/index.js +37 -0
- package/dist/skills/research/concept-explainer/index.js.map +1 -0
- package/dist/skills/research/literature-review/SKILL.md +25 -0
- package/dist/skills/research/literature-review/index.d.ts +9 -0
- package/dist/skills/research/literature-review/index.js +132 -0
- package/dist/skills/research/literature-review/index.js.map +1 -0
- package/dist/skills/research/paper-analysis/SKILL.md +3 -0
- package/dist/skills/research/paper-analysis/index.d.ts +9 -0
- package/dist/skills/research/paper-analysis/index.js +64 -0
- package/dist/skills/research/paper-analysis/index.js.map +1 -0
- package/dist/skills/research/pdf-generator/SKILL.md +16 -0
- package/dist/skills/research/pdf-generator/index.d.ts +10 -0
- package/dist/skills/research/pdf-generator/index.js +88 -0
- package/dist/skills/research/pdf-generator/index.js.map +1 -0
- package/dist/skills/system/PACK.md +8 -0
- package/dist/skills/system/code-analysis/SKILL.md +43 -0
- package/dist/skills/system/code-analysis/index.d.ts +12 -0
- package/dist/skills/system/code-analysis/index.js +172 -0
- package/dist/skills/system/code-analysis/index.js.map +1 -0
- package/dist/skills/system/local-file-ops/SKILL.md +55 -0
- package/dist/skills/system/local-file-ops/index.d.ts +9 -0
- package/dist/skills/system/local-file-ops/index.js +111 -0
- package/dist/skills/system/local-file-ops/index.js.map +1 -0
- package/dist/skills/types.d.ts +41 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills/vendor/PACK.md +11 -0
- package/dist/skills/vendor/agent-browser/CONTRIBUTING.md +63 -0
- package/dist/skills/vendor/agent-browser/SKILL.md +328 -0
- package/dist/skills/vendor/find-skills/SKILL.md +133 -0
- package/dist/skills/vendor/proactive-agent/SKILL-v2.3-backup.md +554 -0
- package/dist/skills/vendor/proactive-agent/SKILL-v3-draft.md +499 -0
- package/dist/skills/vendor/proactive-agent/SKILL.md +632 -0
- package/dist/skills/vendor/proactive-agent/assets/AGENTS.md +155 -0
- package/dist/skills/vendor/proactive-agent/assets/HEARTBEAT.md +128 -0
- package/dist/skills/vendor/proactive-agent/assets/MEMORY.md +47 -0
- package/dist/skills/vendor/proactive-agent/assets/ONBOARDING.md +103 -0
- package/dist/skills/vendor/proactive-agent/assets/SOUL.md +40 -0
- package/dist/skills/vendor/proactive-agent/assets/TOOLS.md +55 -0
- package/dist/skills/vendor/proactive-agent/assets/USER.md +36 -0
- package/dist/skills/vendor/proactive-agent/references/onboarding-flow.md +158 -0
- package/dist/skills/vendor/proactive-agent/references/security-patterns.md +109 -0
- package/dist/skills/vendor/searxng/CHANGELOG.md +38 -0
- package/dist/skills/vendor/searxng/PUBLISH.md +147 -0
- package/dist/skills/vendor/searxng/PUBLISHING_CHECKLIST.md +111 -0
- package/dist/skills/vendor/searxng/README.md +168 -0
- package/dist/skills/vendor/searxng/SKILL.md +69 -0
- package/dist/skills/vendor/self-improving-agent/.learnings/ERRORS.md +5 -0
- package/dist/skills/vendor/self-improving-agent/.learnings/FEATURE_REQUESTS.md +5 -0
- package/dist/skills/vendor/self-improving-agent/.learnings/LEARNINGS.md +5 -0
- package/dist/skills/vendor/self-improving-agent/SKILL.md +647 -0
- package/dist/skills/vendor/self-improving-agent/assets/LEARNINGS.md +45 -0
- package/dist/skills/vendor/self-improving-agent/assets/SKILL-TEMPLATE.md +177 -0
- package/dist/skills/vendor/self-improving-agent/hooks/openclaw/HOOK.md +23 -0
- package/dist/skills/vendor/self-improving-agent/hooks/openclaw/handler.d.ts +9 -0
- package/dist/skills/vendor/self-improving-agent/hooks/openclaw/handler.js +54 -0
- package/dist/skills/vendor/self-improving-agent/hooks/openclaw/handler.js.map +1 -0
- package/dist/skills/vendor/self-improving-agent/references/examples.md +374 -0
- package/dist/skills/vendor/self-improving-agent/references/hooks-setup.md +223 -0
- package/dist/skills/vendor/self-improving-agent/references/openclaw-integration.md +248 -0
- package/dist/skills/vendor/skill-vetter/SKILL.md +138 -0
- package/dist/src/agent/ResearchAgent.d.ts +35 -0
- package/dist/src/agent/ResearchAgent.js +818 -0
- package/dist/src/agent/ResearchAgent.js.map +1 -0
- package/dist/src/agent/subagent/SubAgent.d.ts +23 -0
- package/dist/src/agent/subagent/SubAgent.js +87 -0
- package/dist/src/agent/subagent/SubAgent.js.map +1 -0
- package/dist/src/agent/subagent/SubAgentManager.d.ts +19 -0
- package/dist/src/agent/subagent/SubAgentManager.js +40 -0
- package/dist/src/agent/subagent/SubAgentManager.js.map +1 -0
- package/dist/src/bin.d.ts +2 -0
- package/dist/src/bin.js +34 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/cli.d.ts +1 -0
- package/dist/src/cli.js +179 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/events/EventManager.d.ts +39 -0
- package/dist/src/events/EventManager.js +20 -0
- package/dist/src/events/EventManager.js.map +1 -0
- package/dist/src/gateway/index.d.ts +9 -0
- package/dist/src/gateway/index.js +474 -0
- package/dist/src/gateway/index.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +105 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/llm/LLMClient.d.ts +30 -0
- package/dist/src/llm/LLMClient.js +21 -0
- package/dist/src/llm/LLMClient.js.map +1 -0
- package/dist/src/llm/OpenAIClient.d.ts +16 -0
- package/dist/src/llm/OpenAIClient.js +58 -0
- package/dist/src/llm/OpenAIClient.js.map +1 -0
- package/dist/src/memory/MemoryManager.d.ts +41 -0
- package/dist/src/memory/MemoryManager.js +221 -0
- package/dist/src/memory/MemoryManager.js.map +1 -0
- package/dist/src/memory/evolution/MemoryEvolutionSystem.d.ts +17 -0
- package/dist/src/memory/evolution/MemoryEvolutionSystem.js +71 -0
- package/dist/src/memory/evolution/MemoryEvolutionSystem.js.map +1 -0
- package/dist/src/memory/search/BM25Search.d.ts +22 -0
- package/dist/src/memory/search/BM25Search.js +61 -0
- package/dist/src/memory/search/BM25Search.js.map +1 -0
- package/dist/src/memory/structure/PageIndex.d.ts +26 -0
- package/dist/src/memory/structure/PageIndex.js +156 -0
- package/dist/src/memory/structure/PageIndex.js.map +1 -0
- package/dist/src/quality/QualityManager.d.ts +12 -0
- package/dist/src/quality/QualityManager.js +61 -0
- package/dist/src/quality/QualityManager.js.map +1 -0
- package/dist/src/scheduling/CronManager.d.ts +21 -0
- package/dist/src/scheduling/CronManager.js +66 -0
- package/dist/src/scheduling/CronManager.js.map +1 -0
- package/dist/src/session/SessionManager.d.ts +37 -0
- package/dist/src/session/SessionManager.js +238 -0
- package/dist/src/session/SessionManager.js.map +1 -0
- package/dist/src/skills/SkillManager.d.ts +33 -0
- package/dist/src/skills/SkillManager.js +260 -0
- package/dist/src/skills/SkillManager.js.map +1 -0
- package/dist/src/skills/evolution/SkillEvolutionSystem.d.ts +12 -0
- package/dist/src/skills/evolution/SkillEvolutionSystem.js +157 -0
- package/dist/src/skills/evolution/SkillEvolutionSystem.js.map +1 -0
- package/dist/src/skills/lib/ScholarTool.d.ts +14 -0
- package/dist/src/skills/lib/ScholarTool.js +71 -0
- package/dist/src/skills/lib/ScholarTool.js.map +1 -0
- package/dist/src/skills/types.d.ts +41 -0
- package/dist/src/skills/types.js +2 -0
- package/dist/src/skills/types.js.map +1 -0
- package/dist/src/storage/sqlite.d.ts +8 -0
- package/dist/src/storage/sqlite.js +73 -0
- package/dist/src/storage/sqlite.js.map +1 -0
- package/dist/src/utils/logger.d.ts +12 -0
- package/dist/src/utils/logger.js +53 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/storage/sqlite.d.ts +8 -0
- package/dist/storage/sqlite.js +73 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/utils/logger.d.ts +12 -0
- package/dist/utils/logger.js +53 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +71 -0
- package/skills/agent/PACK.md +13 -0
- package/skills/agent/agent-orchestration/SKILL.md +37 -0
- package/skills/agent/agent-orchestration/index.ts +84 -0
- package/skills/agent/evolution/SKILL.md +25 -0
- package/skills/agent/evolution/index.ts +67 -0
- package/skills/agent/heartbeat/index.ts +48 -0
- package/skills/agent/memory-management/SKILL.md +40 -0
- package/skills/agent/memory-management/index.ts +48 -0
- package/skills/agent/scheduling/SKILL.md +33 -0
- package/skills/agent/scheduling/index.ts +97 -0
- package/skills/agent/session-management/SKILL.md +35 -0
- package/skills/agent/session-management/index.ts +65 -0
- package/skills/agent/skill-management/SKILL.md +31 -0
- package/skills/agent/skill-management/index.ts +32 -0
- package/skills/research/PACK.md +7 -0
- package/skills/research/academic-survey-self-improve/SKILL.md +17 -0
- package/skills/research/academic-survey-self-improve/index.ts +87 -0
- package/skills/research/concept-explainer/SKILL.md +3 -0
- package/skills/research/concept-explainer/index.ts +42 -0
- package/skills/research/literature-review/SKILL.md +25 -0
- package/skills/research/literature-review/index.ts +168 -0
- package/skills/research/paper-analysis/SKILL.md +3 -0
- package/skills/research/paper-analysis/index.ts +73 -0
- package/skills/research/pdf-generator/SKILL.md +16 -0
- package/skills/research/pdf-generator/index.d.ts +10 -0
- package/skills/research/pdf-generator/index.js +114 -0
- package/skills/research/pdf-generator/index.js.map +1 -0
- package/skills/research/pdf-generator/index.ts +97 -0
- package/skills/system/PACK.md +8 -0
- package/skills/system/code-analysis/SKILL.md +43 -0
- package/skills/system/code-analysis/index.ts +180 -0
- package/skills/system/local-file-ops/SKILL.md +55 -0
- package/skills/system/local-file-ops/index.ts +123 -0
- package/skills/vendor/PACK.md +11 -0
- package/skills/vendor/agent-browser/.clawhub/origin.json +7 -0
- package/skills/vendor/agent-browser/CONTRIBUTING.md +63 -0
- package/skills/vendor/agent-browser/SKILL.md +328 -0
- package/skills/vendor/agent-browser/_meta.json +6 -0
- package/skills/vendor/find-skills/.clawhub/origin.json +7 -0
- package/skills/vendor/find-skills/SKILL.md +133 -0
- package/skills/vendor/find-skills/_meta.json +6 -0
- package/skills/vendor/proactive-agent/.clawhub/origin.json +7 -0
- package/skills/vendor/proactive-agent/SKILL-v2.3-backup.md +554 -0
- package/skills/vendor/proactive-agent/SKILL-v3-draft.md +499 -0
- package/skills/vendor/proactive-agent/SKILL.md +632 -0
- package/skills/vendor/proactive-agent/_meta.json +6 -0
- package/skills/vendor/proactive-agent/assets/AGENTS.md +155 -0
- package/skills/vendor/proactive-agent/assets/HEARTBEAT.md +128 -0
- package/skills/vendor/proactive-agent/assets/MEMORY.md +47 -0
- package/skills/vendor/proactive-agent/assets/ONBOARDING.md +103 -0
- package/skills/vendor/proactive-agent/assets/SOUL.md +40 -0
- package/skills/vendor/proactive-agent/assets/TOOLS.md +55 -0
- package/skills/vendor/proactive-agent/assets/USER.md +36 -0
- package/skills/vendor/proactive-agent/references/onboarding-flow.md +158 -0
- package/skills/vendor/proactive-agent/references/security-patterns.md +109 -0
- package/skills/vendor/proactive-agent/scripts/security-audit.sh +149 -0
- package/skills/vendor/searxng/.clawdhub/origin.json +7 -0
- package/skills/vendor/searxng/CHANGELOG.md +38 -0
- package/skills/vendor/searxng/PUBLISH.md +147 -0
- package/skills/vendor/searxng/PUBLISHING_CHECKLIST.md +111 -0
- package/skills/vendor/searxng/README.md +168 -0
- package/skills/vendor/searxng/SKILL.md +69 -0
- package/skills/vendor/searxng/_meta.json +6 -0
- package/skills/vendor/searxng/config/settings.yml +36 -0
- package/skills/vendor/searxng/run-searxng.sh +48 -0
- package/skills/vendor/searxng/scripts/searxng.py +211 -0
- package/skills/vendor/self-improving-agent/.clawhub/origin.json +7 -0
- package/skills/vendor/self-improving-agent/.learnings/ERRORS.md +5 -0
- package/skills/vendor/self-improving-agent/.learnings/FEATURE_REQUESTS.md +5 -0
- package/skills/vendor/self-improving-agent/.learnings/LEARNINGS.md +5 -0
- package/skills/vendor/self-improving-agent/SKILL.md +647 -0
- package/skills/vendor/self-improving-agent/_meta.json +6 -0
- package/skills/vendor/self-improving-agent/assets/LEARNINGS.md +45 -0
- package/skills/vendor/self-improving-agent/assets/SKILL-TEMPLATE.md +177 -0
- package/skills/vendor/self-improving-agent/hooks/openclaw/HOOK.md +23 -0
- package/skills/vendor/self-improving-agent/hooks/openclaw/handler.js +56 -0
- package/skills/vendor/self-improving-agent/hooks/openclaw/handler.ts +62 -0
- package/skills/vendor/self-improving-agent/references/examples.md +374 -0
- package/skills/vendor/self-improving-agent/references/hooks-setup.md +223 -0
- package/skills/vendor/self-improving-agent/references/openclaw-integration.md +248 -0
- package/skills/vendor/self-improving-agent/scripts/activator.sh +20 -0
- package/skills/vendor/self-improving-agent/scripts/error-detector.sh +55 -0
- package/skills/vendor/self-improving-agent/scripts/extract-skill.sh +221 -0
- package/skills/vendor/skill-vetter/.clawhub/origin.json +7 -0
- package/skills/vendor/skill-vetter/SKILL.md +138 -0
- package/skills/vendor/skill-vetter/_meta.json +6 -0
- package/web/README.md +73 -0
- package/web/package.json +65 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export class MockLLMClient {
|
|
2
|
+
async complete(prompt) {
|
|
3
|
+
return { content: 'Mock response' };
|
|
4
|
+
}
|
|
5
|
+
async chat(messages) {
|
|
6
|
+
// Simple mock logic for testing memory extraction
|
|
7
|
+
const lastMsg = messages[messages.length - 1].content.toLowerCase();
|
|
8
|
+
if (lastMsg.includes('extract memory')) {
|
|
9
|
+
return {
|
|
10
|
+
content: JSON.stringify({
|
|
11
|
+
memories: [
|
|
12
|
+
{ type: 'preference', content: 'User is interested in oncology' },
|
|
13
|
+
{ type: 'fact', content: 'User is asking about THBS2' }
|
|
14
|
+
]
|
|
15
|
+
})
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
return { content: 'I am a mock LLM.' };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=LLMClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LLMClient.js","sourceRoot":"","sources":["../../src/llm/LLMClient.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,aAAa;IACxB,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAA6C;QACtD,kDAAkD;QAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAEpE,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvC,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;oBACtB,QAAQ,EAAE;wBACR,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,gCAAgC,EAAE;wBACjE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,4BAA4B,EAAE;qBACxD;iBACF,CAAC;aACH,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LLMClient, LLMResponse, LLMStreamHandler } from './LLMClient.js';
|
|
2
|
+
export declare class OpenAIClient implements LLMClient {
|
|
3
|
+
private openai;
|
|
4
|
+
private model;
|
|
5
|
+
constructor(apiKey: string, baseURL?: string, model?: string);
|
|
6
|
+
complete(prompt: string): Promise<LLMResponse>;
|
|
7
|
+
chat(messages: {
|
|
8
|
+
role: string;
|
|
9
|
+
content: string;
|
|
10
|
+
}[]): Promise<LLMResponse>;
|
|
11
|
+
chatStream(messages: {
|
|
12
|
+
role: string;
|
|
13
|
+
content: string;
|
|
14
|
+
}[], handler: LLMStreamHandler): Promise<void>;
|
|
15
|
+
embed(text: string): Promise<number[]>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import OpenAI from 'openai';
|
|
2
|
+
export class OpenAIClient {
|
|
3
|
+
openai;
|
|
4
|
+
model;
|
|
5
|
+
constructor(apiKey, baseURL, model) {
|
|
6
|
+
this.openai = new OpenAI({
|
|
7
|
+
apiKey,
|
|
8
|
+
baseURL: baseURL || 'https://api.openai.com/v1'
|
|
9
|
+
});
|
|
10
|
+
this.model = model || 'gpt-3.5-turbo';
|
|
11
|
+
}
|
|
12
|
+
async complete(prompt) {
|
|
13
|
+
const response = await this.openai.chat.completions.create({
|
|
14
|
+
model: this.model,
|
|
15
|
+
messages: [{ role: 'user', content: prompt }],
|
|
16
|
+
});
|
|
17
|
+
return { content: response.choices[0].message.content || '' };
|
|
18
|
+
}
|
|
19
|
+
async chat(messages) {
|
|
20
|
+
const response = await this.openai.chat.completions.create({
|
|
21
|
+
model: this.model,
|
|
22
|
+
messages: messages,
|
|
23
|
+
stream: false,
|
|
24
|
+
});
|
|
25
|
+
return { content: response.choices[0].message.content || '' };
|
|
26
|
+
}
|
|
27
|
+
async chatStream(messages, handler) {
|
|
28
|
+
try {
|
|
29
|
+
const stream = await this.openai.chat.completions.create({
|
|
30
|
+
model: this.model,
|
|
31
|
+
messages: messages,
|
|
32
|
+
stream: true,
|
|
33
|
+
});
|
|
34
|
+
let fullText = '';
|
|
35
|
+
for await (const chunk of stream) {
|
|
36
|
+
const content = chunk.choices[0]?.delta?.content || '';
|
|
37
|
+
if (content) {
|
|
38
|
+
fullText += content;
|
|
39
|
+
handler.onToken?.(content);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
handler.onComplete?.(fullText);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
handler.onError?.(error);
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async embed(text) {
|
|
50
|
+
const response = await this.openai.embeddings.create({
|
|
51
|
+
model: 'text-embedding-3-small',
|
|
52
|
+
input: text,
|
|
53
|
+
encoding_format: 'float',
|
|
54
|
+
});
|
|
55
|
+
return response.data[0].embedding;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=OpenAIClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenAIClient.js","sourceRoot":"","sources":["../../src/llm/OpenAIClient.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,OAAO,YAAY;IACf,MAAM,CAAS;IACf,KAAK,CAAS;IAEtB,YAAY,MAAc,EAAE,OAAgB,EAAE,KAAc;QAC1D,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,MAAM;YACN,OAAO,EAAE,OAAO,IAAI,2BAA2B;SAChD,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,eAAe,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACzD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;SAC9C,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAA6C;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACzD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,QAAe;YACzB,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAA6C,EAAE,OAAyB;QACvF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACvD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,QAAe;gBACzB,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YAEH,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;gBACvD,IAAI,OAAO,EAAE,CAAC;oBACZ,QAAQ,IAAI,OAAO,CAAC;oBACpB,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YACD,OAAO,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;YACnD,KAAK,EAAE,wBAAwB;YAC/B,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,OAAO;SACzB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { SQLiteStorage } from '../storage/sqlite.js';
|
|
2
|
+
export interface Memory {
|
|
3
|
+
id: string;
|
|
4
|
+
user_id: string;
|
|
5
|
+
type: 'preference' | 'fact' | 'context' | 'paper' | 'experiment' | 'page_index' | 'page_index_node';
|
|
6
|
+
tier: 'working' | 'short_term' | 'long_term';
|
|
7
|
+
content: string;
|
|
8
|
+
metadata?: any;
|
|
9
|
+
weight: number;
|
|
10
|
+
last_accessed_at: string;
|
|
11
|
+
created_at: string;
|
|
12
|
+
updated_at: string;
|
|
13
|
+
parent_id?: string;
|
|
14
|
+
index_path?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class MemoryManager {
|
|
17
|
+
storage: SQLiteStorage;
|
|
18
|
+
constructor(storage: SQLiteStorage);
|
|
19
|
+
private initializeSchema;
|
|
20
|
+
addMemory(userId: string, type: Memory['type'], content: string, metadata?: any, weight?: number, tier?: Memory['tier'], parentId?: string): Promise<Memory>;
|
|
21
|
+
addPaper(userId: string, title: string, authors: string[], url?: string, summary?: string): Promise<Memory>;
|
|
22
|
+
private parseRow;
|
|
23
|
+
getMemory(id: string): Promise<Memory>;
|
|
24
|
+
getUserMemories(userId: string, type?: string): Promise<Memory[]>;
|
|
25
|
+
updateMemoryWeight(id: string, delta: number): Promise<void>;
|
|
26
|
+
searchMemories(userId: string, query: string, options?: {
|
|
27
|
+
limit?: number;
|
|
28
|
+
type?: Memory['type'];
|
|
29
|
+
tier?: Memory['tier'];
|
|
30
|
+
}): Promise<Memory[]>;
|
|
31
|
+
getFormattedMemories(userId: string, query?: string): Promise<string>;
|
|
32
|
+
updateMemoryTier(id: string, tier: Memory['tier']): Promise<void>;
|
|
33
|
+
deleteMemory(id: string): Promise<void>;
|
|
34
|
+
getMemoriesByTier(userId: string, tier: Memory['tier']): Promise<Memory[]>;
|
|
35
|
+
consolidateMemories(userId: string): Promise<{
|
|
36
|
+
moved: number;
|
|
37
|
+
promoted: number;
|
|
38
|
+
pruned: number;
|
|
39
|
+
}>;
|
|
40
|
+
consolidatePreferences(userId: string): Promise<void>;
|
|
41
|
+
}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
+
export class MemoryManager {
|
|
3
|
+
storage;
|
|
4
|
+
constructor(storage) {
|
|
5
|
+
this.storage = storage;
|
|
6
|
+
try {
|
|
7
|
+
if (this.storage && typeof this.storage.getDb === 'function') {
|
|
8
|
+
this.initializeSchema();
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
catch (e) {
|
|
12
|
+
// Ignore initialization errors in test/mock envs
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
initializeSchema() {
|
|
16
|
+
if (!this.storage || typeof this.storage.getDb !== 'function')
|
|
17
|
+
return;
|
|
18
|
+
try {
|
|
19
|
+
const db = this.storage.getDb();
|
|
20
|
+
// Add new columns if not exist (simple migration)
|
|
21
|
+
try {
|
|
22
|
+
db.prepare('ALTER TABLE memories ADD COLUMN tier TEXT DEFAULT "working"').run();
|
|
23
|
+
}
|
|
24
|
+
catch (e) { }
|
|
25
|
+
try {
|
|
26
|
+
db.prepare('ALTER TABLE memories ADD COLUMN last_accessed_at TEXT').run();
|
|
27
|
+
}
|
|
28
|
+
catch (e) { }
|
|
29
|
+
try {
|
|
30
|
+
db.prepare('ALTER TABLE memories ADD COLUMN parent_id TEXT').run();
|
|
31
|
+
}
|
|
32
|
+
catch (e) { }
|
|
33
|
+
try {
|
|
34
|
+
db.prepare('ALTER TABLE memories ADD COLUMN index_path TEXT').run();
|
|
35
|
+
}
|
|
36
|
+
catch (e) { }
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
// Ignore DB connection errors
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async addMemory(userId, type, content, metadata, weight = 1.0, tier = 'working', parentId) {
|
|
43
|
+
const db = this.storage.getDb();
|
|
44
|
+
const id = uuidv4();
|
|
45
|
+
const metadataStr = metadata ? JSON.stringify(metadata) : null;
|
|
46
|
+
const now = new Date().toISOString();
|
|
47
|
+
// Calculate index_path
|
|
48
|
+
let indexPath = id;
|
|
49
|
+
if (parentId) {
|
|
50
|
+
try {
|
|
51
|
+
const parent = await this.getMemory(parentId);
|
|
52
|
+
if (parent && parent.index_path) {
|
|
53
|
+
indexPath = `${parent.index_path}/${id}`;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Fallback if parent has no path or not found (though should be found)
|
|
57
|
+
indexPath = `${parentId}/${id}`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
// Parent might not exist or error
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const stmt = db.prepare(`
|
|
65
|
+
INSERT INTO memories (id, user_id, type, tier, content, metadata, weight, last_accessed_at, created_at, updated_at, parent_id, index_path)
|
|
66
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
67
|
+
`);
|
|
68
|
+
stmt.run(id, userId, type, tier, content, metadataStr, weight, now, now, now, parentId || null, indexPath);
|
|
69
|
+
return this.getMemory(id);
|
|
70
|
+
}
|
|
71
|
+
async addPaper(userId, title, authors, url, summary) {
|
|
72
|
+
const content = `Paper: ${title} by ${authors.join(', ')}`;
|
|
73
|
+
const metadata = {
|
|
74
|
+
subtype: 'paper',
|
|
75
|
+
title,
|
|
76
|
+
authors,
|
|
77
|
+
url,
|
|
78
|
+
summary
|
|
79
|
+
};
|
|
80
|
+
return this.addMemory(userId, 'paper', content, metadata, 1.0, 'long_term');
|
|
81
|
+
}
|
|
82
|
+
parseRow(row) {
|
|
83
|
+
if (!row)
|
|
84
|
+
return row;
|
|
85
|
+
return {
|
|
86
|
+
...row,
|
|
87
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async getMemory(id) {
|
|
91
|
+
const db = this.storage.getDb();
|
|
92
|
+
const stmt = db.prepare('SELECT * FROM memories WHERE id = ?');
|
|
93
|
+
const row = stmt.get(id);
|
|
94
|
+
if (!row)
|
|
95
|
+
throw new Error(`Memory with id ${id} not found`);
|
|
96
|
+
return this.parseRow(row);
|
|
97
|
+
}
|
|
98
|
+
async getUserMemories(userId, type) {
|
|
99
|
+
const db = this.storage.getDb();
|
|
100
|
+
let query = 'SELECT * FROM memories WHERE user_id = ?';
|
|
101
|
+
const params = [userId];
|
|
102
|
+
if (type) {
|
|
103
|
+
query += ' AND type = ?';
|
|
104
|
+
params.push(type);
|
|
105
|
+
}
|
|
106
|
+
query += ' ORDER BY weight DESC, created_at DESC';
|
|
107
|
+
const stmt = db.prepare(query);
|
|
108
|
+
const rows = stmt.all(...params);
|
|
109
|
+
return rows.map(this.parseRow);
|
|
110
|
+
}
|
|
111
|
+
async updateMemoryWeight(id, delta) {
|
|
112
|
+
const db = this.storage.getDb();
|
|
113
|
+
const stmt = db.prepare('UPDATE memories SET weight = weight + ? WHERE id = ?');
|
|
114
|
+
stmt.run(delta, id);
|
|
115
|
+
}
|
|
116
|
+
async searchMemories(userId, query, options = {}) {
|
|
117
|
+
const db = this.storage.getDb();
|
|
118
|
+
const limit = options.limit || 5;
|
|
119
|
+
let sql = `
|
|
120
|
+
SELECT * FROM memories
|
|
121
|
+
WHERE user_id = ?
|
|
122
|
+
AND content LIKE ?
|
|
123
|
+
`;
|
|
124
|
+
const params = [userId, `%${query}%`];
|
|
125
|
+
if (options.type) {
|
|
126
|
+
sql += ' AND type = ?';
|
|
127
|
+
params.push(options.type);
|
|
128
|
+
}
|
|
129
|
+
if (options.tier) {
|
|
130
|
+
sql += ' AND tier = ?';
|
|
131
|
+
params.push(options.tier);
|
|
132
|
+
}
|
|
133
|
+
sql += ' ORDER BY weight DESC, created_at DESC LIMIT ?';
|
|
134
|
+
params.push(limit);
|
|
135
|
+
const stmt = db.prepare(sql);
|
|
136
|
+
const rows = stmt.all(...params);
|
|
137
|
+
return rows.map(this.parseRow);
|
|
138
|
+
}
|
|
139
|
+
// Format memories for LLM context injection
|
|
140
|
+
async getFormattedMemories(userId, query) {
|
|
141
|
+
let memories;
|
|
142
|
+
if (query) {
|
|
143
|
+
memories = await this.searchMemories(userId, query);
|
|
144
|
+
// If no relevant memories found, fallback to recent high-weight memories
|
|
145
|
+
if (memories.length === 0) {
|
|
146
|
+
memories = await this.getUserMemories(userId);
|
|
147
|
+
memories = memories.slice(0, 5);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
memories = await this.getUserMemories(userId);
|
|
152
|
+
memories = memories.slice(0, 10);
|
|
153
|
+
}
|
|
154
|
+
if (memories.length === 0)
|
|
155
|
+
return '';
|
|
156
|
+
return memories.map(m => `- [${m.type.toUpperCase()}] ${m.content} (weight: ${m.weight})`).join('\n');
|
|
157
|
+
}
|
|
158
|
+
// Example of Memory Evolution logic: consolidating preferences
|
|
159
|
+
async updateMemoryTier(id, tier) {
|
|
160
|
+
const db = this.storage.getDb();
|
|
161
|
+
const now = new Date().toISOString();
|
|
162
|
+
db.prepare('UPDATE memories SET tier = ?, updated_at = ? WHERE id = ?').run(tier, now, id);
|
|
163
|
+
}
|
|
164
|
+
async deleteMemory(id) {
|
|
165
|
+
const db = this.storage.getDb();
|
|
166
|
+
db.prepare('DELETE FROM memories WHERE id = ?').run(id);
|
|
167
|
+
}
|
|
168
|
+
async getMemoriesByTier(userId, tier) {
|
|
169
|
+
const db = this.storage.getDb();
|
|
170
|
+
const rows = db.prepare('SELECT * FROM memories WHERE user_id = ? AND tier = ? ORDER BY weight DESC').all(userId, tier);
|
|
171
|
+
return rows.map(this.parseRow);
|
|
172
|
+
}
|
|
173
|
+
// Consolidate memories: Working -> Short-term -> Long-term
|
|
174
|
+
// Logic:
|
|
175
|
+
// 1. Working memory items older than 1 hour move to Short-term
|
|
176
|
+
// 2. Short-term items with high weight (> 5) move to Long-term
|
|
177
|
+
// 3. Short-term items with low weight (< 0.5) and old (> 7 days) are pruned (deleted)
|
|
178
|
+
async consolidateMemories(userId) {
|
|
179
|
+
const db = this.storage.getDb();
|
|
180
|
+
const now = new Date();
|
|
181
|
+
let stats = { moved: 0, promoted: 0, pruned: 0 };
|
|
182
|
+
// 1. Working -> Short-term (if > 1 hour old)
|
|
183
|
+
const workingMemories = await this.getMemoriesByTier(userId, 'working');
|
|
184
|
+
// Log working memories stats if any
|
|
185
|
+
if (workingMemories.length > 0) {
|
|
186
|
+
console.log(`[Memory] Active working memories for ${userId}: ${workingMemories.length}`);
|
|
187
|
+
}
|
|
188
|
+
for (const mem of workingMemories) {
|
|
189
|
+
const age = now.getTime() - new Date(mem.created_at).getTime();
|
|
190
|
+
if (age > 60 * 60 * 1000) {
|
|
191
|
+
console.log(`[Memory] Moving ${mem.id} to short-term`);
|
|
192
|
+
await this.updateMemoryTier(mem.id, 'short_term');
|
|
193
|
+
stats.moved++;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// 2. Short-term -> Long-term (if weight > 5)
|
|
197
|
+
const shortTermMemories = await this.getMemoriesByTier(userId, 'short_term');
|
|
198
|
+
for (const mem of shortTermMemories) {
|
|
199
|
+
if (mem.weight > 5) {
|
|
200
|
+
console.log(`[Memory] Promoting ${mem.id} to long-term (high importance)`);
|
|
201
|
+
await this.updateMemoryTier(mem.id, 'long_term');
|
|
202
|
+
stats.promoted++;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
// Pruning check
|
|
206
|
+
const age = now.getTime() - new Date(mem.created_at).getTime();
|
|
207
|
+
if (mem.weight < 0.5 && age > 7 * 24 * 60 * 60 * 1000) {
|
|
208
|
+
console.log(`[Memory] Pruning low-value memory ${mem.id}`);
|
|
209
|
+
db.prepare('DELETE FROM memories WHERE id = ?').run(mem.id);
|
|
210
|
+
stats.pruned++;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return stats;
|
|
215
|
+
}
|
|
216
|
+
async consolidatePreferences(userId) {
|
|
217
|
+
// This would involve LLM to summarize preferences, but for now just a placeholder
|
|
218
|
+
console.log(`Consolidating preferences for user ${userId}...`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=MemoryManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryManager.js","sourceRoot":"","sources":["../../src/memory/MemoryManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { MemoryManager } from '../MemoryManager.js';
|
|
2
|
+
import { LLMClient } from '../../llm/LLMClient.js';
|
|
3
|
+
export interface ExtractedMemory {
|
|
4
|
+
type: 'preference' | 'fact' | 'context' | 'paper';
|
|
5
|
+
content: string;
|
|
6
|
+
metadata?: any;
|
|
7
|
+
}
|
|
8
|
+
export declare class MemoryEvolutionSystem {
|
|
9
|
+
private memoryManager;
|
|
10
|
+
private llm;
|
|
11
|
+
constructor(memoryManager: MemoryManager, llm: LLMClient);
|
|
12
|
+
evolve(userId: string, userQuery: string, agentResponse: string, onProgress?: (message: string) => void): Promise<{
|
|
13
|
+
added: any[];
|
|
14
|
+
updated: any[];
|
|
15
|
+
}>;
|
|
16
|
+
private parseResponse;
|
|
17
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export class MemoryEvolutionSystem {
|
|
2
|
+
memoryManager;
|
|
3
|
+
llm;
|
|
4
|
+
constructor(memoryManager, llm) {
|
|
5
|
+
this.memoryManager = memoryManager;
|
|
6
|
+
this.llm = llm;
|
|
7
|
+
}
|
|
8
|
+
// Analyze interaction and extract new memories
|
|
9
|
+
async evolve(userId, userQuery, agentResponse, onProgress) {
|
|
10
|
+
const log = (msg) => {
|
|
11
|
+
if (onProgress) {
|
|
12
|
+
onProgress(msg);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
console.log(msg);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
log(`[Evolution] Analyzing interaction for user ${userId}...`);
|
|
19
|
+
const prompt = `
|
|
20
|
+
Analyze the following interaction between a User and an AI Assistant.
|
|
21
|
+
Extract any new information about:
|
|
22
|
+
1. User's preferences, research interests, or factual constraints (type: preference/fact/context).
|
|
23
|
+
2. Specific research papers or materials mentioned (type: paper).
|
|
24
|
+
|
|
25
|
+
For 'paper' type:
|
|
26
|
+
- Extract the Title, Authors, and URL (if present in markdown link or text).
|
|
27
|
+
- Metadata object: { title, authors (array), url (string), summary (string) }.
|
|
28
|
+
|
|
29
|
+
Output ONLY a JSON object with a "memories" array. Each item should have "type", "content", and optional "metadata".
|
|
30
|
+
|
|
31
|
+
User: "${userQuery}"
|
|
32
|
+
AI: "${agentResponse}"
|
|
33
|
+
`;
|
|
34
|
+
try {
|
|
35
|
+
const response = await this.llm.chat([
|
|
36
|
+
{ role: 'system', content: 'You are a memory extraction system. You extract structured memories and research materials from conversations.' },
|
|
37
|
+
{ role: 'user', content: prompt }
|
|
38
|
+
]);
|
|
39
|
+
const extracted = this.parseResponse(response.content);
|
|
40
|
+
const added = [];
|
|
41
|
+
if (extracted && extracted.length > 0) {
|
|
42
|
+
log(`[Evolution] Extracted ${extracted.length} new memories.`);
|
|
43
|
+
for (const mem of extracted) {
|
|
44
|
+
await this.memoryManager.addMemory(userId, mem.type, mem.content, mem.metadata);
|
|
45
|
+
added.push(mem);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
log('[Evolution] No new memories extracted.');
|
|
50
|
+
}
|
|
51
|
+
return { added, updated: [] };
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.error('[MemoryEvolution] Failed to evolve memory:', error);
|
|
55
|
+
return { added: [], updated: [] };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
parseResponse(content) {
|
|
59
|
+
try {
|
|
60
|
+
// Simple JSON parsing, might need more robust handling for real LLM output
|
|
61
|
+
const jsonStr = content.match(/\{[\s\S]*\}/)?.[0] || content;
|
|
62
|
+
const parsed = JSON.parse(jsonStr);
|
|
63
|
+
return parsed.memories || [];
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
console.warn('[MemoryEvolution] Failed to parse LLM response:', content);
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=MemoryEvolutionSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryEvolutionSystem.js","sourceRoot":"","sources":["../../../src/memory/evolution/MemoryEvolutionSystem.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,qBAAqB;IACxB,aAAa,CAAgB;IAC7B,GAAG,CAAY;IAEvB,YAAY,aAA4B,EAAE,GAAc;QACtD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,+CAA+C;IACxC,KAAK,CAAC,MAAM,CACjB,MAAc,EACd,SAAiB,EACjB,aAAqB,EACrB,UAAsC;QAEtC,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE;YAC1B,IAAI,UAAU,EAAE,CAAC;gBACf,UAAU,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;QAEF,GAAG,CAAC,8CAA8C,MAAM,KAAK,CAAC,CAAC;QAE/D,MAAM,MAAM,GAAG;;;;;;;;;;;;eAYJ,SAAS;aACX,aAAa;KACrB,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,gHAAgH,EAAE;gBAC7I,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;aAClC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,EAAE,CAAC;YAEjB,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,GAAG,CAAC,yBAAyB,SAAS,CAAC,MAAM,gBAAgB,CAAC,CAAC;gBAC/D,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;oBAC5B,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAChF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,wCAAwC,CAAC,CAAC;YAChD,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAEhC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;YACnE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,OAAe;QACnC,IAAI,CAAC;YACH,2EAA2E;YAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;YAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,iDAAiD,EAAE,OAAO,CAAC,CAAC;YACzE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface SearchDocument {
|
|
2
|
+
id: string;
|
|
3
|
+
content: string;
|
|
4
|
+
}
|
|
5
|
+
export declare class BM25Search {
|
|
6
|
+
private documents;
|
|
7
|
+
private docLengths;
|
|
8
|
+
private avgDocLength;
|
|
9
|
+
private invertedIndex;
|
|
10
|
+
private k1;
|
|
11
|
+
private b;
|
|
12
|
+
private tokenizer;
|
|
13
|
+
constructor();
|
|
14
|
+
addDocument(doc: SearchDocument): void;
|
|
15
|
+
addDocuments(docs: SearchDocument[]): void;
|
|
16
|
+
private updateStats;
|
|
17
|
+
search(query: string, limit?: number): {
|
|
18
|
+
id: string;
|
|
19
|
+
score: number;
|
|
20
|
+
}[];
|
|
21
|
+
free(): void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { get_encoding } from 'tiktoken';
|
|
2
|
+
export class BM25Search {
|
|
3
|
+
documents = new Map(); // id -> tokens
|
|
4
|
+
docLengths = new Map();
|
|
5
|
+
avgDocLength = 0;
|
|
6
|
+
invertedIndex = new Map(); // token -> list of doc ids
|
|
7
|
+
k1 = 1.5;
|
|
8
|
+
b = 0.75;
|
|
9
|
+
tokenizer;
|
|
10
|
+
constructor() {
|
|
11
|
+
this.tokenizer = get_encoding("cl100k_base");
|
|
12
|
+
}
|
|
13
|
+
addDocument(doc) {
|
|
14
|
+
const tokens = Array.from(this.tokenizer.encode(doc.content));
|
|
15
|
+
this.documents.set(doc.id, tokens);
|
|
16
|
+
this.docLengths.set(doc.id, tokens.length);
|
|
17
|
+
// Update index
|
|
18
|
+
const uniqueTokens = new Set(tokens);
|
|
19
|
+
uniqueTokens.forEach(token => {
|
|
20
|
+
if (!this.invertedIndex.has(token)) {
|
|
21
|
+
this.invertedIndex.set(token, []);
|
|
22
|
+
}
|
|
23
|
+
this.invertedIndex.get(token).push(doc.id);
|
|
24
|
+
});
|
|
25
|
+
this.updateStats();
|
|
26
|
+
}
|
|
27
|
+
addDocuments(docs) {
|
|
28
|
+
docs.forEach(doc => this.addDocument(doc));
|
|
29
|
+
}
|
|
30
|
+
updateStats() {
|
|
31
|
+
let totalLength = 0;
|
|
32
|
+
this.docLengths.forEach(len => totalLength += len);
|
|
33
|
+
this.avgDocLength = totalLength / Math.max(1, this.documents.size);
|
|
34
|
+
}
|
|
35
|
+
search(query, limit = 5) {
|
|
36
|
+
const queryTokens = Array.from(this.tokenizer.encode(query));
|
|
37
|
+
const scores = new Map();
|
|
38
|
+
queryTokens.forEach(token => {
|
|
39
|
+
const postingList = this.invertedIndex.get(token);
|
|
40
|
+
if (!postingList)
|
|
41
|
+
return;
|
|
42
|
+
const idf = Math.log(1 + (this.documents.size - postingList.length + 0.5) / (postingList.length + 0.5));
|
|
43
|
+
postingList.forEach(docId => {
|
|
44
|
+
const docLen = this.docLengths.get(docId) || 0;
|
|
45
|
+
const tf = this.documents.get(docId).filter(t => t === token).length;
|
|
46
|
+
const numerator = tf * (this.k1 + 1);
|
|
47
|
+
const denominator = tf + this.k1 * (1 - this.b + this.b * (docLen / this.avgDocLength));
|
|
48
|
+
const score = idf * (numerator / denominator);
|
|
49
|
+
scores.set(docId, (scores.get(docId) || 0) + score);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
return Array.from(scores.entries())
|
|
53
|
+
.sort((a, b) => b[1] - a[1])
|
|
54
|
+
.slice(0, limit)
|
|
55
|
+
.map(([id, score]) => ({ id, score }));
|
|
56
|
+
}
|
|
57
|
+
free() {
|
|
58
|
+
this.tokenizer.free();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=BM25Search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BM25Search.js","sourceRoot":"","sources":["../../../src/memory/search/BM25Search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAOxC,MAAM,OAAO,UAAU;IACX,SAAS,GAA0B,IAAI,GAAG,EAAE,CAAC,CAAC,eAAe;IAC7D,UAAU,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC5C,YAAY,GAAW,CAAC,CAAC;IACzB,aAAa,GAA0B,IAAI,GAAG,EAAE,CAAC,CAAC,2BAA2B;IAC7E,EAAE,GAAW,GAAG,CAAC;IACjB,CAAC,GAAW,IAAI,CAAC;IACjB,SAAS,CAAM;IAEvB;QACI,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IACjD,CAAC;IAEM,WAAW,CAAC,GAAmB;QAClC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAa,CAAC;QAC1E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAE3C,eAAe;QACf,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAEM,YAAY,CAAC,IAAsB;QACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEO,WAAW;QACf,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;IAEM,MAAM,CAAC,KAAa,EAAE,QAAgB,CAAC;QAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAa,CAAC;QACzE,MAAM,MAAM,GAAwB,IAAI,GAAG,EAAE,CAAC;QAE9C,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,WAAW;gBAAE,OAAO;YAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;YAExG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC;gBAEtE,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACrC,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBAExF,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,CAAC;gBAC9C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;aAC9B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEM,IAAI;QACP,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CACJ"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { MemoryManager } from '../MemoryManager.js';
|
|
2
|
+
import { LLMClient } from '../../llm/LLMClient.js';
|
|
3
|
+
export interface PageNode {
|
|
4
|
+
id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
content: string;
|
|
7
|
+
children: PageNode[];
|
|
8
|
+
parentId?: string;
|
|
9
|
+
level: number;
|
|
10
|
+
}
|
|
11
|
+
export declare class PageIndex {
|
|
12
|
+
private memoryManager;
|
|
13
|
+
private llm;
|
|
14
|
+
constructor(memoryManager: MemoryManager, llm: LLMClient);
|
|
15
|
+
/**
|
|
16
|
+
* Ingests a long document and creates a hierarchical tree of memories (Page Index).
|
|
17
|
+
* 1. Create Root Node (Level 0)
|
|
18
|
+
* 2. Split document into logical sections (Leaf Nodes)
|
|
19
|
+
* 3. Recursively summarize sections to build the tree bottom-up
|
|
20
|
+
* 4. Link the top-level summaries to the Root Node
|
|
21
|
+
*/
|
|
22
|
+
indexDocument(userId: string, title: string, content: string): Promise<string>;
|
|
23
|
+
private updateIndexPaths;
|
|
24
|
+
private splitIntoSections;
|
|
25
|
+
getTree(rootId: string): Promise<PageNode | null>;
|
|
26
|
+
}
|