@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,156 @@
|
|
|
1
|
+
export class PageIndex {
|
|
2
|
+
memoryManager;
|
|
3
|
+
llm;
|
|
4
|
+
constructor(memoryManager, llm) {
|
|
5
|
+
this.memoryManager = memoryManager;
|
|
6
|
+
this.llm = llm;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Ingests a long document and creates a hierarchical tree of memories (Page Index).
|
|
10
|
+
* 1. Create Root Node (Level 0)
|
|
11
|
+
* 2. Split document into logical sections (Leaf Nodes)
|
|
12
|
+
* 3. Recursively summarize sections to build the tree bottom-up
|
|
13
|
+
* 4. Link the top-level summaries to the Root Node
|
|
14
|
+
*/
|
|
15
|
+
async indexDocument(userId, title, content) {
|
|
16
|
+
// 1. Create Root Node (Level 0)
|
|
17
|
+
const rootMemory = await this.memoryManager.addMemory(userId, 'page_index', `Document: ${title}`, { title, isRoot: true, level: 0 }, 1.0, 'long_term');
|
|
18
|
+
// 2. Initial Chunking (Leaf Nodes)
|
|
19
|
+
const sections = this.splitIntoSections(content);
|
|
20
|
+
let currentLevelNodes = [];
|
|
21
|
+
// Create Leaf Memories (Level -1, temporarily, will be assigned real level later)
|
|
22
|
+
// Actually let's assume max depth is dynamic. We'll start from bottom.
|
|
23
|
+
// Let's just create them as 'page_index_node' with no parent initially.
|
|
24
|
+
for (let i = 0; i < sections.length; i++) {
|
|
25
|
+
const section = sections[i];
|
|
26
|
+
const sectionTitle = section.substring(0, 50).replace(/\n/g, ' ') + '...';
|
|
27
|
+
const memory = await this.memoryManager.addMemory(userId, 'page_index_node', section, { title: sectionTitle, docId: rootMemory.id, isLeaf: true }, 0.8, 'long_term');
|
|
28
|
+
currentLevelNodes.push(memory.id);
|
|
29
|
+
}
|
|
30
|
+
// 3. Build Tree Bottom-Up
|
|
31
|
+
// We will loop until we have a small number of nodes, then attach them to root.
|
|
32
|
+
let currentLevel = 1; // 1 means 1 level above leaves? No, let's use depth from root.
|
|
33
|
+
// Actually, let's just group and summarize until we reach < 5 nodes.
|
|
34
|
+
while (currentLevelNodes.length > 5) {
|
|
35
|
+
const nextLevelNodes = [];
|
|
36
|
+
const chunkSize = 5;
|
|
37
|
+
for (let i = 0; i < currentLevelNodes.length; i += chunkSize) {
|
|
38
|
+
const chunkIds = currentLevelNodes.slice(i, i + chunkSize);
|
|
39
|
+
const chunkMemories = await Promise.all(chunkIds.map(id => this.memoryManager.getMemory(id)));
|
|
40
|
+
const combinedContent = chunkMemories.map(m => m.content).join('\n\n');
|
|
41
|
+
// Generate summary
|
|
42
|
+
const summaryPrompt = `Summarize the following section of the document "${title}".
|
|
43
|
+
Capture key points and concepts.
|
|
44
|
+
Content:
|
|
45
|
+
${combinedContent.substring(0, 3000)}...`; // Limit context window
|
|
46
|
+
const summaryRes = await this.llm.chat([{ role: 'user', content: summaryPrompt }]);
|
|
47
|
+
const summary = summaryRes.content;
|
|
48
|
+
const intermediateNode = await this.memoryManager.addMemory(userId, 'page_index_node', summary, { title: `Summary Section ${Math.floor(i / chunkSize) + 1}`, docId: rootMemory.id }, 0.9, 'long_term');
|
|
49
|
+
// Link children to this new parent
|
|
50
|
+
const db = this.memoryManager.storage.getDb();
|
|
51
|
+
for (const childId of chunkIds) {
|
|
52
|
+
// We need to fetch child to get its current index_path or just construct it?
|
|
53
|
+
// Ideally index_path should be Root/Level1/Level2...
|
|
54
|
+
// But we are building bottom up.
|
|
55
|
+
// This is tricky for index_path.
|
|
56
|
+
// Let's just update parent_id. index_path might need a full traversal update or we just ignore it for now and fix it at the end?
|
|
57
|
+
// Or we just store parent_id and use recursive CTEs or multiple queries to reconstruct.
|
|
58
|
+
// Let's update parent_id.
|
|
59
|
+
db.prepare('UPDATE memories SET parent_id = ? WHERE id = ?').run(intermediateNode.id, childId);
|
|
60
|
+
}
|
|
61
|
+
nextLevelNodes.push(intermediateNode.id);
|
|
62
|
+
}
|
|
63
|
+
currentLevelNodes = nextLevelNodes;
|
|
64
|
+
}
|
|
65
|
+
// 4. Attach remaining nodes to Root
|
|
66
|
+
const db = this.memoryManager.storage.getDb();
|
|
67
|
+
for (const nodeId of currentLevelNodes) {
|
|
68
|
+
db.prepare('UPDATE memories SET parent_id = ? WHERE id = ?').run(rootMemory.id, nodeId);
|
|
69
|
+
}
|
|
70
|
+
// 5. Update Index Paths (Top-Down)
|
|
71
|
+
// Now that the tree structure is defined via parent_ids, we can walk it to set index_paths.
|
|
72
|
+
await this.updateIndexPaths(rootMemory.id, rootMemory.id);
|
|
73
|
+
return rootMemory.id;
|
|
74
|
+
}
|
|
75
|
+
async updateIndexPaths(nodeId, currentPath) {
|
|
76
|
+
const db = this.memoryManager.storage.getDb();
|
|
77
|
+
// Update current node
|
|
78
|
+
db.prepare('UPDATE memories SET index_path = ? WHERE id = ?').run(currentPath, nodeId);
|
|
79
|
+
// Get children
|
|
80
|
+
const children = db.prepare('SELECT id FROM memories WHERE parent_id = ?').all(nodeId);
|
|
81
|
+
for (const child of children) {
|
|
82
|
+
await this.updateIndexPaths(child.id, `${currentPath}/${child.id}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
splitIntoSections(content) {
|
|
86
|
+
// Split by double newlines (paragraphs) and merge small ones
|
|
87
|
+
const paragraphs = content.split(/\n\n+/);
|
|
88
|
+
const sections = [];
|
|
89
|
+
let currentSection = '';
|
|
90
|
+
for (const p of paragraphs) {
|
|
91
|
+
if (currentSection.length + p.length > 1500) { // ~500 tokens
|
|
92
|
+
sections.push(currentSection.trim());
|
|
93
|
+
currentSection = p;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
currentSection += (currentSection ? '\n\n' : '') + p;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (currentSection.trim()) {
|
|
100
|
+
sections.push(currentSection.trim());
|
|
101
|
+
}
|
|
102
|
+
return sections;
|
|
103
|
+
}
|
|
104
|
+
async getTree(rootId) {
|
|
105
|
+
const root = await this.memoryManager.getMemory(rootId);
|
|
106
|
+
if (!root)
|
|
107
|
+
return null;
|
|
108
|
+
const db = this.memoryManager.storage.getDb();
|
|
109
|
+
// Get all descendants using recursive CTE or just fetching all with docId if we had one.
|
|
110
|
+
// We didn't consistently store docId in metadata for all levels (we did, actually).
|
|
111
|
+
// But let's use index_path which is cleaner.
|
|
112
|
+
const descendants = db.prepare('SELECT * FROM memories WHERE index_path LIKE ? ORDER BY index_path').all(`${root.id}%`);
|
|
113
|
+
const nodeMap = new Map();
|
|
114
|
+
// Initialize Root Node
|
|
115
|
+
const rootNode = {
|
|
116
|
+
id: root.id,
|
|
117
|
+
title: root.metadata?.title || 'Untitled',
|
|
118
|
+
content: root.content,
|
|
119
|
+
children: [],
|
|
120
|
+
level: 0
|
|
121
|
+
};
|
|
122
|
+
nodeMap.set(root.id, rootNode);
|
|
123
|
+
// Create nodes
|
|
124
|
+
for (const row of descendants) {
|
|
125
|
+
if (row.id === root.id)
|
|
126
|
+
continue;
|
|
127
|
+
const metadata = row.metadata ? JSON.parse(row.metadata) : {};
|
|
128
|
+
const node = {
|
|
129
|
+
id: row.id,
|
|
130
|
+
title: metadata.title || 'Untitled',
|
|
131
|
+
content: row.content,
|
|
132
|
+
children: [],
|
|
133
|
+
parentId: row.parent_id,
|
|
134
|
+
level: 0 // Will calculate
|
|
135
|
+
};
|
|
136
|
+
nodeMap.set(row.id, node);
|
|
137
|
+
}
|
|
138
|
+
// Link children
|
|
139
|
+
for (const [id, node] of nodeMap) {
|
|
140
|
+
if (node.parentId && nodeMap.has(node.parentId)) {
|
|
141
|
+
nodeMap.get(node.parentId).children.push(node);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Calculate levels (BFS from root)
|
|
145
|
+
const queue = [{ node: rootNode, level: 0 }];
|
|
146
|
+
while (queue.length > 0) {
|
|
147
|
+
const { node, level } = queue.shift();
|
|
148
|
+
node.level = level;
|
|
149
|
+
for (const child of node.children) {
|
|
150
|
+
queue.push({ node: child, level: level + 1 });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return rootNode;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=PageIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageIndex.js","sourceRoot":"","sources":["../../../../src/memory/structure/PageIndex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { LLMClient } from '../llm/LLMClient.js';
|
|
2
|
+
export interface QualityReport {
|
|
3
|
+
score: number;
|
|
4
|
+
reasoning: string;
|
|
5
|
+
suggestions: string[];
|
|
6
|
+
passed: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class QualityManager {
|
|
9
|
+
private llm;
|
|
10
|
+
constructor(llm: LLMClient);
|
|
11
|
+
evaluateTask(taskDescription: string, resultContent: string, context?: any): Promise<QualityReport>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createLogger } from '../utils/logger.js';
|
|
2
|
+
const logger = createLogger('QualityManager');
|
|
3
|
+
export class QualityManager {
|
|
4
|
+
llm;
|
|
5
|
+
constructor(llm) {
|
|
6
|
+
this.llm = llm;
|
|
7
|
+
}
|
|
8
|
+
async evaluateTask(taskDescription, resultContent, context) {
|
|
9
|
+
logger.info(`Evaluating task: "${taskDescription.slice(0, 50)}..."`);
|
|
10
|
+
const prompt = `
|
|
11
|
+
You are a Quality Assurance AI for a research agent.
|
|
12
|
+
|
|
13
|
+
Task: "${taskDescription}"
|
|
14
|
+
Context: ${JSON.stringify(context || {})}
|
|
15
|
+
|
|
16
|
+
Result:
|
|
17
|
+
"""
|
|
18
|
+
${resultContent.slice(0, 5000)}
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
Evaluate the result based on the following criteria:
|
|
22
|
+
1. Completeness: Did it answer all parts of the request?
|
|
23
|
+
2. Accuracy: Are there any obvious hallucinations or errors?
|
|
24
|
+
3. Relevance: Is the information relevant to the task?
|
|
25
|
+
4. Clarity: Is the output well-structured and easy to understand?
|
|
26
|
+
|
|
27
|
+
Output strictly in JSON format:
|
|
28
|
+
{
|
|
29
|
+
"score": number, // 0-100
|
|
30
|
+
"reasoning": "string",
|
|
31
|
+
"suggestions": ["string", "string"],
|
|
32
|
+
"passed": boolean // true if score >= 70
|
|
33
|
+
}
|
|
34
|
+
`;
|
|
35
|
+
try {
|
|
36
|
+
const response = await this.llm.chat([
|
|
37
|
+
{ role: 'system', content: 'You are a strict QA evaluator.' },
|
|
38
|
+
{ role: 'user', content: prompt }
|
|
39
|
+
]);
|
|
40
|
+
let jsonStr = response.content.trim();
|
|
41
|
+
// Handle potential markdown code blocks
|
|
42
|
+
if (jsonStr.startsWith('```')) {
|
|
43
|
+
jsonStr = jsonStr.replace(/^```(json)?/, '').replace(/```$/, '').trim();
|
|
44
|
+
}
|
|
45
|
+
const report = JSON.parse(jsonStr);
|
|
46
|
+
logger.info(`Evaluation complete. Score: ${report.score}. Passed: ${report.passed}`);
|
|
47
|
+
return report;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
logger.error('Evaluation failed:', error);
|
|
51
|
+
// Fallback
|
|
52
|
+
return {
|
|
53
|
+
score: 0,
|
|
54
|
+
reasoning: 'Evaluation failed due to error.',
|
|
55
|
+
suggestions: [],
|
|
56
|
+
passed: false
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=QualityManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QualityManager.js","sourceRoot":"","sources":["../../../src/quality/QualityManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAS9C,MAAM,OAAO,cAAc;IACjB,GAAG,CAAY;IAEvB,YAAY,GAAc;QACxB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,eAAuB,EACvB,aAAqB,EACrB,OAAa;QAEb,MAAM,CAAC,IAAI,CAAC,qBAAqB,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG;;;eAGJ,eAAe;iBACb,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC;;;;QAItC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;;;;;;;;;;;;;;;;KAgB/B,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,gCAAgC,EAAE;gBAC7D,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;aAClC,CAAC,CAAC;YAEH,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtC,wCAAwC;YACxC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5E,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAkB,CAAC;YAEpD,MAAM,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,KAAK,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACrF,OAAO,MAAM,CAAC;QAEhB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YAC1C,WAAW;YACX,OAAO;gBACL,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,iCAAiC;gBAC5C,WAAW,EAAE,EAAE;gBACf,MAAM,EAAE,KAAK;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import cron from 'node-cron';
|
|
2
|
+
export interface ScheduledTask {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
cronExpression: string;
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
lastRun?: Date;
|
|
8
|
+
nextRun?: Date;
|
|
9
|
+
handler: () => Promise<void>;
|
|
10
|
+
_job?: cron.ScheduledTask;
|
|
11
|
+
}
|
|
12
|
+
export declare class CronManager {
|
|
13
|
+
private tasks;
|
|
14
|
+
constructor();
|
|
15
|
+
scheduleTask(name: string, cronExpression: string, handler: () => Promise<void>): ScheduledTask;
|
|
16
|
+
startTask(taskId: string): void;
|
|
17
|
+
stopTask(taskId: string): void;
|
|
18
|
+
getTask(taskId: string): ScheduledTask | undefined;
|
|
19
|
+
getAllTasks(): ScheduledTask[];
|
|
20
|
+
removeTask(taskId: string): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import cron from 'node-cron';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
3
|
+
export class CronManager {
|
|
4
|
+
tasks = new Map();
|
|
5
|
+
constructor() { }
|
|
6
|
+
scheduleTask(name, cronExpression, handler) {
|
|
7
|
+
const id = uuidv4();
|
|
8
|
+
// Validate cron expression
|
|
9
|
+
if (!cron.validate(cronExpression)) {
|
|
10
|
+
throw new Error(`Invalid cron expression: ${cronExpression}`);
|
|
11
|
+
}
|
|
12
|
+
// Need to wrap handler in async function for cron.schedule
|
|
13
|
+
const job = cron.schedule(cronExpression, async () => {
|
|
14
|
+
console.log(`[Cron] Executing task: ${name} (${id})`);
|
|
15
|
+
try {
|
|
16
|
+
await handler();
|
|
17
|
+
const task = this.tasks.get(id);
|
|
18
|
+
if (task) {
|
|
19
|
+
task.lastRun = new Date();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
console.error(`[Cron] Task ${name} failed:`, err);
|
|
24
|
+
}
|
|
25
|
+
}, {
|
|
26
|
+
scheduled: false
|
|
27
|
+
});
|
|
28
|
+
const task = {
|
|
29
|
+
id,
|
|
30
|
+
name,
|
|
31
|
+
cronExpression,
|
|
32
|
+
enabled: false,
|
|
33
|
+
handler,
|
|
34
|
+
_job: job
|
|
35
|
+
};
|
|
36
|
+
this.tasks.set(id, task);
|
|
37
|
+
return task;
|
|
38
|
+
}
|
|
39
|
+
startTask(taskId) {
|
|
40
|
+
const task = this.tasks.get(taskId);
|
|
41
|
+
if (task && task._job) {
|
|
42
|
+
task._job.start();
|
|
43
|
+
task.enabled = true;
|
|
44
|
+
console.log(`[Cron] Started task: ${task.name}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
stopTask(taskId) {
|
|
48
|
+
const task = this.tasks.get(taskId);
|
|
49
|
+
if (task && task._job) {
|
|
50
|
+
task._job.stop();
|
|
51
|
+
task.enabled = false;
|
|
52
|
+
console.log(`[Cron] Stopped task: ${task.name}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
getTask(taskId) {
|
|
56
|
+
return this.tasks.get(taskId);
|
|
57
|
+
}
|
|
58
|
+
getAllTasks() {
|
|
59
|
+
return Array.from(this.tasks.values());
|
|
60
|
+
}
|
|
61
|
+
removeTask(taskId) {
|
|
62
|
+
this.stopTask(taskId);
|
|
63
|
+
this.tasks.delete(taskId);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=CronManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CronManager.js","sourceRoot":"","sources":["../../../src/scheduling/CronManager.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAapC,MAAM,OAAO,WAAW;IACd,KAAK,GAA+B,IAAI,GAAG,EAAE,CAAC;IAEtD,gBAAe,CAAC;IAET,YAAY,CAAC,IAAY,EAAE,cAAsB,EAAE,OAA4B;QACpF,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAEpB,2BAA2B;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,4BAA4B,cAAc,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,2DAA2D;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YACnD,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,KAAK,EAAE,GAAG,CAAC,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,OAAO,EAAE,CAAC;gBAChB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChC,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,eAAe,IAAI,UAAU,EAAE,GAAG,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,EAAE;YACD,SAAS,EAAE,KAAK;SACV,CAAC,CAAC;QAEV,MAAM,IAAI,GAAkB;YAC1B,EAAE;YACF,IAAI;YACJ,cAAc;YACd,OAAO,EAAE,KAAK;YACd,OAAO;YACP,IAAI,EAAE,GAAG;SACV,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,SAAS,CAAC,MAAc;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAEM,QAAQ,CAAC,MAAc;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAEM,OAAO,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAEM,WAAW;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAEM,UAAU,CAAC,MAAc;QAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { SQLiteStorage } from '../storage/sqlite.js';
|
|
2
|
+
export interface Message {
|
|
3
|
+
id: string;
|
|
4
|
+
role: 'system' | 'user' | 'assistant' | 'log';
|
|
5
|
+
content: string;
|
|
6
|
+
timestamp: Date;
|
|
7
|
+
metadata?: any;
|
|
8
|
+
}
|
|
9
|
+
export interface Session {
|
|
10
|
+
id: string;
|
|
11
|
+
userId: string;
|
|
12
|
+
title?: string;
|
|
13
|
+
messages: Message[];
|
|
14
|
+
created_at: Date;
|
|
15
|
+
updated_at: Date;
|
|
16
|
+
status: 'active' | 'stopped';
|
|
17
|
+
metadata?: any;
|
|
18
|
+
}
|
|
19
|
+
export declare class SessionManager {
|
|
20
|
+
private sessions;
|
|
21
|
+
private activeSessions;
|
|
22
|
+
private storage;
|
|
23
|
+
constructor(storage?: SQLiteStorage);
|
|
24
|
+
private loadSessions;
|
|
25
|
+
createSession(userId: string, title?: string): Session;
|
|
26
|
+
getSession(sessionId: string): Session | undefined;
|
|
27
|
+
getActiveSession(userId: string): Session | undefined;
|
|
28
|
+
getOrCreateActiveSession(userId: string): Session;
|
|
29
|
+
getUserSessions(userId: string): Session[];
|
|
30
|
+
addMessage(sessionId: string, role: Message['role'], content: string, metadata?: any): Message;
|
|
31
|
+
getHistory(sessionId: string, limit?: number): Message[];
|
|
32
|
+
clearHistory(sessionId: string): void;
|
|
33
|
+
deleteSession(sessionId: string): void;
|
|
34
|
+
stopSession(sessionId: string): void;
|
|
35
|
+
isSessionStopped(sessionId: string): boolean;
|
|
36
|
+
activateSession(sessionId: string): void;
|
|
37
|
+
}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
+
import { SQLiteStorage } from '../storage/sqlite.js';
|
|
3
|
+
export class SessionManager {
|
|
4
|
+
sessions = new Map();
|
|
5
|
+
activeSessions = new Map(); // userId -> sessionId
|
|
6
|
+
storage;
|
|
7
|
+
constructor(storage) {
|
|
8
|
+
this.storage = storage || new SQLiteStorage();
|
|
9
|
+
this.loadSessions();
|
|
10
|
+
}
|
|
11
|
+
loadSessions() {
|
|
12
|
+
try {
|
|
13
|
+
const db = this.storage.getDb();
|
|
14
|
+
const rows = db.prepare('SELECT * FROM sessions ORDER BY updated_at DESC').all();
|
|
15
|
+
for (const row of rows) {
|
|
16
|
+
const messages = db.prepare('SELECT * FROM messages WHERE session_id = ? ORDER BY timestamp ASC').all(row.id);
|
|
17
|
+
const meta = row.metadata ? JSON.parse(row.metadata) : {};
|
|
18
|
+
const session = {
|
|
19
|
+
id: row.id,
|
|
20
|
+
userId: row.user_id,
|
|
21
|
+
title: row.title,
|
|
22
|
+
created_at: new Date(row.created_at),
|
|
23
|
+
updated_at: new Date(row.updated_at),
|
|
24
|
+
status: meta.status || row.status || 'active',
|
|
25
|
+
metadata: meta,
|
|
26
|
+
messages: messages.map(m => ({
|
|
27
|
+
id: m.id,
|
|
28
|
+
role: m.role,
|
|
29
|
+
content: m.content,
|
|
30
|
+
timestamp: new Date(m.timestamp),
|
|
31
|
+
metadata: m.metadata ? JSON.parse(m.metadata) : undefined
|
|
32
|
+
}))
|
|
33
|
+
};
|
|
34
|
+
this.sessions.set(session.id, session);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.error('Failed to load sessions from DB:', error);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
createSession(userId, title) {
|
|
42
|
+
const session = {
|
|
43
|
+
id: uuidv4(),
|
|
44
|
+
userId,
|
|
45
|
+
title: title || 'New Chat',
|
|
46
|
+
messages: [],
|
|
47
|
+
created_at: new Date(),
|
|
48
|
+
updated_at: new Date(),
|
|
49
|
+
status: 'active',
|
|
50
|
+
};
|
|
51
|
+
// Save to DB
|
|
52
|
+
try {
|
|
53
|
+
const db = this.storage.getDb();
|
|
54
|
+
// Ensure status column exists or add migration (assuming it might not exist yet, but for now let's just use metadata or assume column added)
|
|
55
|
+
// Since I can't easily migrate DB schema here without more context, I'll store status in metadata for persistence if column doesn't exist
|
|
56
|
+
// But user asked to persist it. Let's try to add it to SQL.
|
|
57
|
+
// If SQL fails, we catch error.
|
|
58
|
+
// Actually, let's just use metadata for 'status' to avoid schema migration issues for now if possible?
|
|
59
|
+
// No, let's try to use a proper field if I could, but `metadata` is safer for now.
|
|
60
|
+
// Wait, `Session` interface has `status`.
|
|
61
|
+
// Let's modify `loadSessions` to read from metadata if column missing?
|
|
62
|
+
// Or just assume I can add column?
|
|
63
|
+
// Given I am an agent, I should probably stick to `metadata` for `status` if I can't guarantee schema change.
|
|
64
|
+
// BUT, I already modified the interface.
|
|
65
|
+
// Let's check if I can modify the table.
|
|
66
|
+
// The `SQLiteStorage` likely initializes the table.
|
|
67
|
+
// I don't see `SQLiteStorage` code.
|
|
68
|
+
// Let's assume I can store it in metadata for persistence, but keep it as a first-class property in memory.
|
|
69
|
+
// Or I can add a quick migration in `createSession` or `constructor`.
|
|
70
|
+
// Let's just update the INSERT to include status if the column exists, or fallback.
|
|
71
|
+
// Actually, safest bet is to store it in `metadata` in DB, but expose as `status` in object.
|
|
72
|
+
// Reverting the SQL change idea. Let's store in metadata for DB persistence.
|
|
73
|
+
const metadata = { status: 'active' };
|
|
74
|
+
db.prepare(`
|
|
75
|
+
INSERT INTO sessions (id, user_id, title, created_at, updated_at, metadata)
|
|
76
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
77
|
+
`).run(session.id, session.userId, session.title, session.created_at.toISOString(), session.updated_at.toISOString(), JSON.stringify(metadata));
|
|
78
|
+
this.sessions.set(session.id, session);
|
|
79
|
+
this.activeSessions.set(userId, session.id);
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
console.error('Failed to persist session:', e);
|
|
83
|
+
}
|
|
84
|
+
return session;
|
|
85
|
+
}
|
|
86
|
+
getSession(sessionId) {
|
|
87
|
+
return this.sessions.get(sessionId);
|
|
88
|
+
}
|
|
89
|
+
getActiveSession(userId) {
|
|
90
|
+
const sessionId = this.activeSessions.get(userId);
|
|
91
|
+
if (sessionId) {
|
|
92
|
+
return this.sessions.get(sessionId);
|
|
93
|
+
}
|
|
94
|
+
// Fallback: find most recent session for user
|
|
95
|
+
const userSessions = this.getUserSessions(userId);
|
|
96
|
+
if (userSessions.length > 0) {
|
|
97
|
+
this.activeSessions.set(userId, userSessions[0].id);
|
|
98
|
+
return userSessions[0];
|
|
99
|
+
}
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
getOrCreateActiveSession(userId) {
|
|
103
|
+
let session = this.getActiveSession(userId);
|
|
104
|
+
if (!session) {
|
|
105
|
+
session = this.createSession(userId);
|
|
106
|
+
}
|
|
107
|
+
return session;
|
|
108
|
+
}
|
|
109
|
+
getUserSessions(userId) {
|
|
110
|
+
return Array.from(this.sessions.values())
|
|
111
|
+
.filter(session => session.userId === userId)
|
|
112
|
+
.sort((a, b) => b.updated_at.getTime() - a.updated_at.getTime());
|
|
113
|
+
}
|
|
114
|
+
addMessage(sessionId, role, content, metadata) {
|
|
115
|
+
const session = this.sessions.get(sessionId);
|
|
116
|
+
if (!session) {
|
|
117
|
+
throw new Error(`Session ${sessionId} not found`);
|
|
118
|
+
}
|
|
119
|
+
const message = {
|
|
120
|
+
id: uuidv4(),
|
|
121
|
+
role,
|
|
122
|
+
content,
|
|
123
|
+
timestamp: new Date(),
|
|
124
|
+
metadata,
|
|
125
|
+
};
|
|
126
|
+
session.messages.push(message);
|
|
127
|
+
session.updated_at = new Date();
|
|
128
|
+
// Persist to DB
|
|
129
|
+
try {
|
|
130
|
+
const db = this.storage.getDb();
|
|
131
|
+
const insertMsg = db.prepare(`
|
|
132
|
+
INSERT INTO messages (id, session_id, role, content, timestamp, metadata)
|
|
133
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
134
|
+
`);
|
|
135
|
+
const updateSession = db.prepare(`
|
|
136
|
+
UPDATE sessions SET updated_at = ?, title = ? WHERE id = ?
|
|
137
|
+
`);
|
|
138
|
+
const runTransaction = db.transaction(() => {
|
|
139
|
+
const result = insertMsg.run(message.id, sessionId, message.role, message.content, message.timestamp.toISOString(), message.metadata ? JSON.stringify(message.metadata) : null);
|
|
140
|
+
// Auto-update title if it's the first user message and title is empty or default
|
|
141
|
+
let newTitle = session.title;
|
|
142
|
+
if (role === 'user' && (!session.title || session.title === 'New Chat') && session.messages.length <= 2) {
|
|
143
|
+
newTitle = content.slice(0, 30) + (content.length > 30 ? '...' : '');
|
|
144
|
+
session.title = newTitle;
|
|
145
|
+
}
|
|
146
|
+
updateSession.run(session.updated_at.toISOString(), newTitle, sessionId);
|
|
147
|
+
});
|
|
148
|
+
runTransaction();
|
|
149
|
+
}
|
|
150
|
+
catch (e) {
|
|
151
|
+
console.error('Failed to persist message:', e);
|
|
152
|
+
}
|
|
153
|
+
return message;
|
|
154
|
+
}
|
|
155
|
+
getHistory(sessionId, limit = 20) {
|
|
156
|
+
const session = this.sessions.get(sessionId);
|
|
157
|
+
if (!session)
|
|
158
|
+
return [];
|
|
159
|
+
// Return last N messages
|
|
160
|
+
return session.messages.slice(-limit);
|
|
161
|
+
}
|
|
162
|
+
clearHistory(sessionId) {
|
|
163
|
+
const session = this.sessions.get(sessionId);
|
|
164
|
+
if (session) {
|
|
165
|
+
session.messages = [];
|
|
166
|
+
session.updated_at = new Date();
|
|
167
|
+
try {
|
|
168
|
+
const db = this.storage.getDb();
|
|
169
|
+
db.prepare('DELETE FROM messages WHERE session_id = ?').run(sessionId);
|
|
170
|
+
db.prepare('UPDATE sessions SET updated_at = ? WHERE id = ?').run(new Date().toISOString(), sessionId);
|
|
171
|
+
}
|
|
172
|
+
catch (e) {
|
|
173
|
+
console.error('Failed to clear history in DB:', e);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
deleteSession(sessionId) {
|
|
178
|
+
this.sessions.delete(sessionId);
|
|
179
|
+
// Remove from active sessions if it was active
|
|
180
|
+
for (const [userId, activeSessionId] of this.activeSessions.entries()) {
|
|
181
|
+
if (activeSessionId === sessionId) {
|
|
182
|
+
this.activeSessions.delete(userId);
|
|
183
|
+
// Try to set another session as active
|
|
184
|
+
const userSessions = this.getUserSessions(userId);
|
|
185
|
+
if (userSessions.length > 0) {
|
|
186
|
+
this.activeSessions.set(userId, userSessions[0].id);
|
|
187
|
+
}
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
try {
|
|
192
|
+
const db = this.storage.getDb();
|
|
193
|
+
db.prepare('DELETE FROM messages WHERE session_id = ?').run(sessionId);
|
|
194
|
+
db.prepare('DELETE FROM sessions WHERE id = ?').run(sessionId);
|
|
195
|
+
}
|
|
196
|
+
catch (e) {
|
|
197
|
+
console.error('Failed to delete session from DB:', e);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
stopSession(sessionId) {
|
|
201
|
+
const session = this.sessions.get(sessionId);
|
|
202
|
+
if (session) {
|
|
203
|
+
session.status = 'stopped';
|
|
204
|
+
session.updated_at = new Date();
|
|
205
|
+
// Update DB
|
|
206
|
+
try {
|
|
207
|
+
const db = this.storage.getDb();
|
|
208
|
+
const metadata = { ...session.metadata, status: 'stopped' };
|
|
209
|
+
session.metadata = metadata;
|
|
210
|
+
db.prepare('UPDATE sessions SET updated_at = ?, metadata = ? WHERE id = ?')
|
|
211
|
+
.run(session.updated_at.toISOString(), JSON.stringify(metadata), sessionId);
|
|
212
|
+
}
|
|
213
|
+
catch (e) {
|
|
214
|
+
console.error('Failed to stop session:', e);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
isSessionStopped(sessionId) {
|
|
219
|
+
const session = this.sessions.get(sessionId);
|
|
220
|
+
return session ? session.status === 'stopped' : false;
|
|
221
|
+
}
|
|
222
|
+
activateSession(sessionId) {
|
|
223
|
+
const session = this.sessions.get(sessionId);
|
|
224
|
+
if (session) {
|
|
225
|
+
session.status = 'active';
|
|
226
|
+
// Persist if needed
|
|
227
|
+
try {
|
|
228
|
+
const db = this.storage.getDb();
|
|
229
|
+
const metadata = { ...session.metadata, status: 'active' };
|
|
230
|
+
session.metadata = metadata;
|
|
231
|
+
db.prepare('UPDATE sessions SET metadata = ? WHERE id = ?')
|
|
232
|
+
.run(JSON.stringify(metadata), sessionId);
|
|
233
|
+
}
|
|
234
|
+
catch (e) { }
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=SessionManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/session/SessionManager.ts"],"names":[],"mappings":"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"}
|