@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,33 @@
|
|
|
1
|
+
import { Skill, SkillContext, SkillParams, SkillResult, SkillPack } from './types.js';
|
|
2
|
+
import { LLMClient } from '../llm/LLMClient.js';
|
|
3
|
+
import { MemoryManager } from '../memory/MemoryManager.js';
|
|
4
|
+
export declare class SkillManager {
|
|
5
|
+
private managers?;
|
|
6
|
+
private systemSkillsDir?;
|
|
7
|
+
private skills;
|
|
8
|
+
private packs;
|
|
9
|
+
private llm;
|
|
10
|
+
private memoryManager;
|
|
11
|
+
private workspace;
|
|
12
|
+
private skillsDir;
|
|
13
|
+
constructor(llm: LLMClient, memoryManager: MemoryManager, workspace?: string, managers?: SkillContext['managers'], systemSkillsDir?: string | undefined);
|
|
14
|
+
setManagers(managers: SkillContext['managers']): void;
|
|
15
|
+
registerSkill(skill: Skill): void;
|
|
16
|
+
registerPack(pack: SkillPack): void;
|
|
17
|
+
unloadPack(packId: string): void;
|
|
18
|
+
loadSkillsFromDisk(): Promise<void>;
|
|
19
|
+
private loadSkillsFromDir;
|
|
20
|
+
private loadSkill;
|
|
21
|
+
private parseFrontmatter;
|
|
22
|
+
private loadPack;
|
|
23
|
+
getSkill(id: string): Skill | undefined;
|
|
24
|
+
getPack(id: string): SkillPack | undefined;
|
|
25
|
+
getAllSkills(): Skill[];
|
|
26
|
+
getAllPacks(): SkillPack[];
|
|
27
|
+
getSkillStats(): any;
|
|
28
|
+
executeSkill(skillId: string, userId: string, params: SkillParams, handlers?: {
|
|
29
|
+
onLog?: SkillContext['log'];
|
|
30
|
+
onProgress?: SkillContext['updateProgress'];
|
|
31
|
+
onTodo?: SkillContext['addTodo'];
|
|
32
|
+
} | SkillContext['log']): Promise<SkillResult>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { createLogger } from '../utils/logger.js';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import fs from 'fs/promises';
|
|
4
|
+
const logger = createLogger('SkillManager');
|
|
5
|
+
export class SkillManager {
|
|
6
|
+
managers;
|
|
7
|
+
systemSkillsDir;
|
|
8
|
+
skills = new Map();
|
|
9
|
+
packs = new Map();
|
|
10
|
+
llm;
|
|
11
|
+
memoryManager;
|
|
12
|
+
workspace;
|
|
13
|
+
skillsDir;
|
|
14
|
+
constructor(llm, memoryManager, workspace = process.cwd(), managers, systemSkillsDir) {
|
|
15
|
+
this.managers = managers;
|
|
16
|
+
this.systemSkillsDir = systemSkillsDir;
|
|
17
|
+
this.llm = llm;
|
|
18
|
+
this.memoryManager = memoryManager;
|
|
19
|
+
this.workspace = workspace;
|
|
20
|
+
this.skillsDir = path.join(workspace, 'skills');
|
|
21
|
+
// this.registerSkill(new PdfGeneratorSkill());
|
|
22
|
+
}
|
|
23
|
+
setManagers(managers) {
|
|
24
|
+
this.managers = managers;
|
|
25
|
+
}
|
|
26
|
+
registerSkill(skill) {
|
|
27
|
+
this.skills.set(skill.id, skill);
|
|
28
|
+
}
|
|
29
|
+
registerPack(pack) {
|
|
30
|
+
this.packs.set(pack.id, pack);
|
|
31
|
+
for (const skill of pack.skills) {
|
|
32
|
+
this.registerSkill(skill);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
unloadPack(packId) {
|
|
36
|
+
const pack = this.packs.get(packId);
|
|
37
|
+
if (pack) {
|
|
38
|
+
for (const skill of pack.skills) {
|
|
39
|
+
this.skills.delete(skill.id);
|
|
40
|
+
}
|
|
41
|
+
this.packs.delete(packId);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async loadSkillsFromDisk() {
|
|
45
|
+
// Load from workspace (user skills)
|
|
46
|
+
await this.loadSkillsFromDir(this.skillsDir);
|
|
47
|
+
// Load from system (built-in skills)
|
|
48
|
+
if (this.systemSkillsDir) {
|
|
49
|
+
await this.loadSkillsFromDir(this.systemSkillsDir);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async loadSkillsFromDir(dir) {
|
|
53
|
+
try {
|
|
54
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
55
|
+
for (const entry of entries) {
|
|
56
|
+
if (entry.isDirectory()) {
|
|
57
|
+
const itemPath = path.join(dir, entry.name);
|
|
58
|
+
// Check if it's a Pack (has PACK.md)
|
|
59
|
+
const packMdPath = path.join(itemPath, 'PACK.md');
|
|
60
|
+
try {
|
|
61
|
+
await fs.access(packMdPath);
|
|
62
|
+
// It's a Pack
|
|
63
|
+
await this.loadPack(itemPath, entry.name);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
// Not a pack
|
|
68
|
+
}
|
|
69
|
+
// Check if it's a Skill (has SKILL.md or just index.ts/js?)
|
|
70
|
+
// ... (rest of logic)
|
|
71
|
+
await this.loadSkill(itemPath);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
// If workspace skills dir missing, just warn if it's the main workspace
|
|
77
|
+
if (dir === this.skillsDir && e.code !== 'ENOENT') {
|
|
78
|
+
logger.warn(`Failed to load skills from ${dir}: ${e}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async loadSkill(skillPath) {
|
|
83
|
+
const skillId = path.basename(skillPath);
|
|
84
|
+
let implPath = path.join(skillPath, 'index.ts');
|
|
85
|
+
// Check for .js if .ts not found
|
|
86
|
+
try {
|
|
87
|
+
await fs.access(implPath);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
implPath = path.join(skillPath, 'index.js');
|
|
91
|
+
}
|
|
92
|
+
// 1. Try loading executable skill (index.ts/js)
|
|
93
|
+
try {
|
|
94
|
+
await fs.access(implPath);
|
|
95
|
+
// ... import logic
|
|
96
|
+
// Use pathToFileURL to handle ESM import properly on all platforms
|
|
97
|
+
const { pathToFileURL } = await import('url');
|
|
98
|
+
// Add a timestamp query param to bust the cache when reloading
|
|
99
|
+
const moduleUrl = `${pathToFileURL(implPath).href}?t=${Date.now()}`;
|
|
100
|
+
const module = await import(moduleUrl);
|
|
101
|
+
if (module.default) {
|
|
102
|
+
const skillInstance = new module.default();
|
|
103
|
+
// Check if it's a valid skill
|
|
104
|
+
if (skillInstance.id && skillInstance.execute) {
|
|
105
|
+
// Check for duplicates
|
|
106
|
+
if (this.skills.has(skillInstance.id)) {
|
|
107
|
+
logger.debug(`Overwriting existing skill: ${skillInstance.id}`);
|
|
108
|
+
}
|
|
109
|
+
this.skills.set(skillInstance.id, skillInstance);
|
|
110
|
+
logger.info(`Registered skill: ${skillInstance.id}`);
|
|
111
|
+
return skillInstance;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
// If index.ts/js missing or load failed, fall through to check SKILL.md
|
|
117
|
+
if (e.code !== 'ENOENT') {
|
|
118
|
+
logger.error(`Failed to load skill from ${implPath}: ${e}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// 2. Try loading declarative skill (SKILL.md)
|
|
122
|
+
// ...
|
|
123
|
+
const skillMdPath = path.join(skillPath, 'SKILL.md');
|
|
124
|
+
try {
|
|
125
|
+
const content = await fs.readFile(skillMdPath, 'utf-8');
|
|
126
|
+
const frontmatter = this.parseFrontmatter(content);
|
|
127
|
+
if (frontmatter.name) {
|
|
128
|
+
const skill = {
|
|
129
|
+
id: skillId,
|
|
130
|
+
name: frontmatter.name,
|
|
131
|
+
description: frontmatter.description || 'No description provided.',
|
|
132
|
+
tags: ['vendor', 'declarative'],
|
|
133
|
+
execute: async (ctx, params) => {
|
|
134
|
+
return {
|
|
135
|
+
success: true,
|
|
136
|
+
message: `This is a declarative skill (${frontmatter.name}). It provides tools or capabilities but cannot be executed directly.`
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
this.skills.set(skill.id, skill);
|
|
141
|
+
logger.info(`Registered declarative skill: ${skill.id}`);
|
|
142
|
+
return skill;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
// Ignore if SKILL.md missing
|
|
147
|
+
}
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
parseFrontmatter(content) {
|
|
151
|
+
const match = content.match(/^---\n([\s\S]*?)\n---/);
|
|
152
|
+
if (!match)
|
|
153
|
+
return {};
|
|
154
|
+
const yaml = match[1];
|
|
155
|
+
const result = {};
|
|
156
|
+
const nameMatch = yaml.match(/^name:\s*(.*)$/m);
|
|
157
|
+
if (nameMatch)
|
|
158
|
+
result.name = nameMatch[1].trim();
|
|
159
|
+
const descMatch = yaml.match(/^description:\s*(.*)$/m);
|
|
160
|
+
if (descMatch)
|
|
161
|
+
result.description = descMatch[1].trim();
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
async loadPack(packPath, packId) {
|
|
165
|
+
logger.info(`Loading skill pack: ${packId}`);
|
|
166
|
+
const pack = {
|
|
167
|
+
id: packId,
|
|
168
|
+
name: packId, // TODO: Parse from PACK.md
|
|
169
|
+
description: '',
|
|
170
|
+
skills: [],
|
|
171
|
+
path: packPath
|
|
172
|
+
};
|
|
173
|
+
// Scan for sub-directories which are skills
|
|
174
|
+
const entries = await fs.readdir(packPath, { withFileTypes: true });
|
|
175
|
+
for (const entry of entries) {
|
|
176
|
+
if (entry.isDirectory()) {
|
|
177
|
+
const skillPath = path.join(packPath, entry.name);
|
|
178
|
+
// Wait, if it's 'heartbeat' (no SKILL.md), loadSkill should still work because it looks for index.ts
|
|
179
|
+
// But verify loadSkill logic
|
|
180
|
+
const skill = await this.loadSkill(skillPath);
|
|
181
|
+
if (skill) {
|
|
182
|
+
// Assign packId to skill for organization
|
|
183
|
+
skill.packId = packId;
|
|
184
|
+
pack.skills.push(skill);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
this.packs.set(pack.id, pack);
|
|
189
|
+
logger.info(`Registered pack: ${packId} with ${pack.skills.length} skills`);
|
|
190
|
+
}
|
|
191
|
+
getSkill(id) {
|
|
192
|
+
return this.skills.get(id);
|
|
193
|
+
}
|
|
194
|
+
getPack(id) {
|
|
195
|
+
return this.packs.get(id);
|
|
196
|
+
}
|
|
197
|
+
getAllSkills() {
|
|
198
|
+
return Array.from(this.skills.values());
|
|
199
|
+
}
|
|
200
|
+
getAllPacks() {
|
|
201
|
+
return Array.from(this.packs.values());
|
|
202
|
+
}
|
|
203
|
+
getSkillStats() {
|
|
204
|
+
return {
|
|
205
|
+
totalSkills: this.skills.size,
|
|
206
|
+
totalPacks: this.packs.size,
|
|
207
|
+
skills: Array.from(this.skills.values()).map(s => ({
|
|
208
|
+
id: s.id,
|
|
209
|
+
name: s.name,
|
|
210
|
+
packId: s.packId
|
|
211
|
+
})),
|
|
212
|
+
packs: Array.from(this.packs.values()).map(p => ({ id: p.id, skillsCount: p.skills.length }))
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
async executeSkill(skillId, userId, params, handlers) {
|
|
216
|
+
const skill = this.skills.get(skillId);
|
|
217
|
+
if (!skill) {
|
|
218
|
+
throw new Error(`Skill ${skillId} not found`);
|
|
219
|
+
}
|
|
220
|
+
// Handle legacy signature where 4th arg was just onLog function
|
|
221
|
+
let onLog = handlers;
|
|
222
|
+
let onProgress = undefined;
|
|
223
|
+
let onTodo = undefined;
|
|
224
|
+
if (typeof handlers === 'object' && handlers !== null && !('apply' in handlers)) {
|
|
225
|
+
onLog = handlers.onLog;
|
|
226
|
+
onProgress = handlers.onProgress;
|
|
227
|
+
onTodo = handlers.onTodo;
|
|
228
|
+
}
|
|
229
|
+
else if (typeof handlers === 'function') {
|
|
230
|
+
onLog = handlers;
|
|
231
|
+
}
|
|
232
|
+
const context = {
|
|
233
|
+
llm: this.llm,
|
|
234
|
+
memory: this.memoryManager,
|
|
235
|
+
workspace: this.workspace,
|
|
236
|
+
userId,
|
|
237
|
+
managers: this.managers,
|
|
238
|
+
log: onLog || ((type, content, metadata) => {
|
|
239
|
+
logger.info(`[Skill:${skillId}] [${type}] ${content}`, metadata || '');
|
|
240
|
+
}),
|
|
241
|
+
updateProgress: onProgress || (async (progress, description, metadata) => {
|
|
242
|
+
logger.info(`[Skill:${skillId}] [PROGRESS] ${progress}% - ${description}`, metadata);
|
|
243
|
+
}),
|
|
244
|
+
addTodo: onTodo || (async (content, priority, step_number) => {
|
|
245
|
+
logger.info(`[Skill:${skillId}] [TODO] [${priority}] ${content} (step ${step_number})`);
|
|
246
|
+
}),
|
|
247
|
+
updateTodo: async (todoId, status, content) => {
|
|
248
|
+
logger.info(`[Skill:${skillId}] [TODO_UPDATE] ${todoId} -> ${status}`);
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
try {
|
|
252
|
+
return await skill.execute(context, params);
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
context.log('error', `Execution failed: ${error}`);
|
|
256
|
+
throw error;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=SkillManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillManager.js","sourceRoot":"","sources":["../../../src/skills/SkillManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SkillManager } from '../SkillManager.js';
|
|
2
|
+
import { LLMClient } from '../../llm/LLMClient.js';
|
|
3
|
+
export declare class SkillEvolutionSystem {
|
|
4
|
+
private skillManager;
|
|
5
|
+
private llm;
|
|
6
|
+
private skillsDir;
|
|
7
|
+
constructor(skillManager: SkillManager, llm: LLMClient, skillsDir?: string);
|
|
8
|
+
evolveSkill(intent: string, feedback?: string): Promise<{
|
|
9
|
+
skillId: string;
|
|
10
|
+
code: string;
|
|
11
|
+
} | null>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
export class SkillEvolutionSystem {
|
|
4
|
+
skillManager;
|
|
5
|
+
llm;
|
|
6
|
+
skillsDir;
|
|
7
|
+
constructor(skillManager, llm, skillsDir = path.join(process.cwd(), 'skills')) {
|
|
8
|
+
this.skillManager = skillManager;
|
|
9
|
+
this.llm = llm;
|
|
10
|
+
this.skillsDir = skillsDir;
|
|
11
|
+
// Ensure directory exists
|
|
12
|
+
if (!fs.existsSync(this.skillsDir)) {
|
|
13
|
+
fs.mkdirSync(this.skillsDir, { recursive: true });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async evolveSkill(intent, feedback) {
|
|
17
|
+
console.log(`[SkillEvolution] Analyzing intent: "${intent}"`);
|
|
18
|
+
// 1. Check if we need a new skill OR update an existing one
|
|
19
|
+
const existingSkills = this.skillManager.getAllSkills();
|
|
20
|
+
const prompt = `
|
|
21
|
+
User Intent: "${intent}"
|
|
22
|
+
Feedback (if any): "${feedback || 'None'}"
|
|
23
|
+
|
|
24
|
+
Existing Skills:
|
|
25
|
+
${existingSkills.map(s => `- ${s.id}: ${s.description}`).join('\n')}
|
|
26
|
+
|
|
27
|
+
Analyze the request:
|
|
28
|
+
1. Do we need a NEW skill? (Return "NEW_SKILL")
|
|
29
|
+
2. Should we UPDATE an existing skill? (Return "UPDATE_SKILL")
|
|
30
|
+
3. Is no action needed? (Return "NO_ACTION")
|
|
31
|
+
|
|
32
|
+
Output format:
|
|
33
|
+
{
|
|
34
|
+
"action": "NEW_SKILL" | "UPDATE_SKILL" | "NO_ACTION",
|
|
35
|
+
"id": "skill-id",
|
|
36
|
+
"name": "Skill Name",
|
|
37
|
+
"description": "Skill Description",
|
|
38
|
+
"tags": ["tag1", "tag2"],
|
|
39
|
+
"reasoning": "Why this action is needed"
|
|
40
|
+
}
|
|
41
|
+
`;
|
|
42
|
+
const analysisResponse = await this.llm.chat([
|
|
43
|
+
{ role: 'system', content: 'You are a skill architect. Analyze if a new skill is needed or an existing one should be improved.' },
|
|
44
|
+
{ role: 'user', content: prompt }
|
|
45
|
+
]);
|
|
46
|
+
let skillMeta;
|
|
47
|
+
try {
|
|
48
|
+
skillMeta = JSON.parse(analysisResponse.content.match(/\{[\s\S]*\}/)?.[0] || '{}');
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
console.error('[SkillEvolution] Failed to parse skill metadata');
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
if (skillMeta.action === 'NO_ACTION') {
|
|
55
|
+
console.log('[SkillEvolution] No action needed.');
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
if (!skillMeta.id)
|
|
59
|
+
return null;
|
|
60
|
+
// 2. Generate Skill Code
|
|
61
|
+
console.log(`[SkillEvolution] Generating code for skill: ${skillMeta.id} (${skillMeta.action})`);
|
|
62
|
+
// If updating, load existing code
|
|
63
|
+
let existingCode = '';
|
|
64
|
+
if (skillMeta.action === 'UPDATE_SKILL') {
|
|
65
|
+
const existingSkillPath = path.join(this.skillsDir, skillMeta.id, 'index.ts');
|
|
66
|
+
if (fs.existsSync(existingSkillPath)) {
|
|
67
|
+
existingCode = fs.readFileSync(existingSkillPath, 'utf-8');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const codePrompt = `
|
|
71
|
+
Generate a TypeScript class for a Redigg Skill.
|
|
72
|
+
Action: ${skillMeta.action}
|
|
73
|
+
|
|
74
|
+
Skill Metadata:
|
|
75
|
+
- ID: ${skillMeta.id}
|
|
76
|
+
- Name: ${skillMeta.name}
|
|
77
|
+
- Description: ${skillMeta.description}
|
|
78
|
+
- Tags: ${JSON.stringify(skillMeta.tags)}
|
|
79
|
+
|
|
80
|
+
User Intent: "${intent}"
|
|
81
|
+
Feedback: "${feedback || ''}"
|
|
82
|
+
|
|
83
|
+
${existingCode ? `Existing Code:\n\`\`\`typescript\n${existingCode}\n\`\`\`` : ''}
|
|
84
|
+
|
|
85
|
+
Context Interfaces:
|
|
86
|
+
export interface SkillContext {
|
|
87
|
+
llm: LLMClient;
|
|
88
|
+
memory: MemoryManager;
|
|
89
|
+
workspace: string;
|
|
90
|
+
userId: string;
|
|
91
|
+
log: (type: 'thinking'|'action'|'tool_call'|'tool_result'|'result'|'error', content: string, metadata?: any) => void;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
Requirements:
|
|
95
|
+
1. Implement 'Skill' interface.
|
|
96
|
+
2. Use 'ctx.llm.complete(prompt)' for reasoning.
|
|
97
|
+
3. Use 'ctx.log()' for logging steps.
|
|
98
|
+
4. Return a structured 'SkillResult'.
|
|
99
|
+
5. The class MUST be exported as default: 'export default class ...'
|
|
100
|
+
6. Do NOT import external libraries other than 'path', 'fs' unless absolutely necessary.
|
|
101
|
+
7. If updating, preserve existing functionality unless explicitly asked to change. Improve the logic based on intent.
|
|
102
|
+
|
|
103
|
+
Output ONLY the TypeScript code.
|
|
104
|
+
`;
|
|
105
|
+
const codeResponse = await this.llm.chat([
|
|
106
|
+
{ role: 'system', content: 'You are a senior TypeScript developer. Generate high-quality skill code.' },
|
|
107
|
+
{ role: 'user', content: codePrompt }
|
|
108
|
+
]);
|
|
109
|
+
const code = codeResponse.content.replace(/```typescript|```/g, '').trim();
|
|
110
|
+
// 3. Save and Load Skill
|
|
111
|
+
// Create skill directory
|
|
112
|
+
const skillPath = path.join(this.skillsDir, skillMeta.id);
|
|
113
|
+
if (!fs.existsSync(skillPath)) {
|
|
114
|
+
fs.mkdirSync(skillPath, { recursive: true });
|
|
115
|
+
}
|
|
116
|
+
// Save index.ts
|
|
117
|
+
const indexFilePath = path.join(skillPath, 'index.ts');
|
|
118
|
+
fs.writeFileSync(indexFilePath, code);
|
|
119
|
+
// Save SKILL.md (minimal)
|
|
120
|
+
const skillMdContent = `---
|
|
121
|
+
name: ${skillMeta.id}
|
|
122
|
+
description: ${skillMeta.description}
|
|
123
|
+
tags: ${JSON.stringify(skillMeta.tags)}
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
# ${skillMeta.name}
|
|
127
|
+
|
|
128
|
+
${skillMeta.description}
|
|
129
|
+
|
|
130
|
+
## Generated
|
|
131
|
+
This skill was automatically generated by the Skill Evolution System.
|
|
132
|
+
`;
|
|
133
|
+
fs.writeFileSync(path.join(skillPath, 'SKILL.md'), skillMdContent);
|
|
134
|
+
console.log(`[SkillEvolution] Skill saved to ${skillPath}`);
|
|
135
|
+
// Dynamic Import
|
|
136
|
+
try {
|
|
137
|
+
const fileUrl = `file://${indexFilePath}`;
|
|
138
|
+
const module = await import(fileUrl);
|
|
139
|
+
// Expect default export
|
|
140
|
+
if (module.default) {
|
|
141
|
+
const skillInstance = new module.default();
|
|
142
|
+
if (skillInstance.id && skillInstance.execute) {
|
|
143
|
+
this.skillManager.registerSkill(skillInstance);
|
|
144
|
+
console.log(`[SkillEvolution] Skill ${skillMeta.id} registered successfully.`);
|
|
145
|
+
return { skillId: skillMeta.id, code };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
console.error(`[SkillEvolution] No valid default export found in ${indexFilePath}`);
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
console.error(`[SkillEvolution] Failed to load generated skill: ${error}`);
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=SkillEvolutionSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillEvolutionSystem.js","sourceRoot":"","sources":["../../../../src/skills/evolution/SkillEvolutionSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface Paper {
|
|
2
|
+
title: string;
|
|
3
|
+
authors: string[];
|
|
4
|
+
year: number;
|
|
5
|
+
summary: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
pdfUrl?: string;
|
|
8
|
+
journal?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class ScholarTool {
|
|
11
|
+
private parser;
|
|
12
|
+
constructor();
|
|
13
|
+
searchPapers(topic: string, limit?: number): Promise<Paper[]>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { XMLParser } from 'fast-xml-parser';
|
|
2
|
+
export class ScholarTool {
|
|
3
|
+
parser;
|
|
4
|
+
constructor() {
|
|
5
|
+
this.parser = new XMLParser({
|
|
6
|
+
ignoreAttributes: false,
|
|
7
|
+
attributeNamePrefix: '@_'
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
async searchPapers(topic, limit = 5) {
|
|
11
|
+
console.log(`[ScholarTool] Searching arXiv for: ${topic}`);
|
|
12
|
+
try {
|
|
13
|
+
// arXiv API endpoint
|
|
14
|
+
const baseUrl = 'http://export.arxiv.org/api/query';
|
|
15
|
+
const searchUrl = `${baseUrl}?search_query=all:${encodeURIComponent(topic)}&start=0&max_results=${limit}&sortBy=relevance&sortOrder=descending`;
|
|
16
|
+
const response = await fetch(searchUrl);
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
throw new Error(`arXiv API failed: ${response.statusText}`);
|
|
19
|
+
}
|
|
20
|
+
const xmlData = await response.text();
|
|
21
|
+
const result = this.parser.parse(xmlData);
|
|
22
|
+
if (!result.feed || !result.feed.entry) {
|
|
23
|
+
console.warn('[ScholarTool] No results found');
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
// Handle single result vs array of results
|
|
27
|
+
let entries = [];
|
|
28
|
+
if (Array.isArray(result.feed.entry)) {
|
|
29
|
+
entries = result.feed.entry;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
entries = [result.feed.entry];
|
|
33
|
+
}
|
|
34
|
+
return entries.map((entry) => {
|
|
35
|
+
// Extract authors
|
|
36
|
+
let authors = [];
|
|
37
|
+
if (Array.isArray(entry.author)) {
|
|
38
|
+
authors = entry.author.map((a) => a.name);
|
|
39
|
+
}
|
|
40
|
+
else if (entry.author) {
|
|
41
|
+
authors = [entry.author.name];
|
|
42
|
+
}
|
|
43
|
+
// Extract year
|
|
44
|
+
const published = new Date(entry.published);
|
|
45
|
+
const year = published.getFullYear();
|
|
46
|
+
// Extract URLs
|
|
47
|
+
const idUrl = entry.id;
|
|
48
|
+
let pdfUrl = '';
|
|
49
|
+
if (Array.isArray(entry.link)) {
|
|
50
|
+
const pdfLink = entry.link.find((l) => l['@_title'] === 'pdf');
|
|
51
|
+
if (pdfLink)
|
|
52
|
+
pdfUrl = pdfLink['@_href'];
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
title: typeof entry.title === 'string' ? entry.title.replace(/\n/g, ' ').trim() : 'Untitled',
|
|
56
|
+
authors,
|
|
57
|
+
year,
|
|
58
|
+
summary: typeof entry.summary === 'string' ? entry.summary.replace(/\n/g, ' ').trim() : 'No summary',
|
|
59
|
+
url: idUrl,
|
|
60
|
+
pdfUrl,
|
|
61
|
+
journal: 'arXiv'
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('[ScholarTool] Search failed:', error);
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=ScholarTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScholarTool.js","sourceRoot":"","sources":["../../../../src/skills/lib/ScholarTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { LLMClient } from '../llm/LLMClient.js';
|
|
2
|
+
import { MemoryManager } from '../memory/MemoryManager.js';
|
|
3
|
+
export interface SkillContext {
|
|
4
|
+
llm: LLMClient;
|
|
5
|
+
memory: MemoryManager;
|
|
6
|
+
workspace: string;
|
|
7
|
+
userId: string;
|
|
8
|
+
agentId?: string;
|
|
9
|
+
managers?: {
|
|
10
|
+
skill?: any;
|
|
11
|
+
cron?: any;
|
|
12
|
+
session?: any;
|
|
13
|
+
agent?: any;
|
|
14
|
+
browser?: any;
|
|
15
|
+
event?: any;
|
|
16
|
+
};
|
|
17
|
+
log: (type: 'thinking' | 'action' | 'tool_call' | 'tool_result' | 'result' | 'error', content: string, metadata?: any) => void;
|
|
18
|
+
updateProgress?: (progress: number, description: string, details?: any) => Promise<void>;
|
|
19
|
+
updateTodo?: (todoId: string, status: 'pending' | 'in_progress' | 'completed' | 'cancelled', content?: string) => Promise<void>;
|
|
20
|
+
addTodo?: (content: string, priority: 'high' | 'medium' | 'low', step_number?: number) => Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
export interface SkillParams {
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
}
|
|
25
|
+
export interface SkillResult {
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
}
|
|
28
|
+
export interface Skill {
|
|
29
|
+
id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
description: string;
|
|
32
|
+
tags?: string[];
|
|
33
|
+
execute: (ctx: SkillContext, params: SkillParams) => Promise<SkillResult>;
|
|
34
|
+
}
|
|
35
|
+
export interface SkillPack {
|
|
36
|
+
id: string;
|
|
37
|
+
name: string;
|
|
38
|
+
description: string;
|
|
39
|
+
skills: Skill[];
|
|
40
|
+
path?: string;
|
|
41
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/skills/types.ts"],"names":[],"mappings":""}
|