@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,44 @@
|
|
|
1
|
+
export default class MemoryManagementSkill {
|
|
2
|
+
id = 'memory_management';
|
|
3
|
+
name = 'Memory Management';
|
|
4
|
+
description = 'Manage and consolidate agent memories';
|
|
5
|
+
tags = ['memory', 'system', 'consolidation'];
|
|
6
|
+
async execute(ctx, params) {
|
|
7
|
+
const operation = params.operation || 'consolidate';
|
|
8
|
+
const userId = params.userId || ctx.userId;
|
|
9
|
+
ctx.log('thinking', `Performing memory operation: ${operation} for user ${userId}`);
|
|
10
|
+
try {
|
|
11
|
+
switch (operation) {
|
|
12
|
+
case 'consolidate':
|
|
13
|
+
await ctx.memory.consolidateMemories(userId);
|
|
14
|
+
ctx.log('tool_result', 'Memory consolidation completed.');
|
|
15
|
+
return { success: true, message: 'Memories consolidated.' };
|
|
16
|
+
case 'search':
|
|
17
|
+
const query = params.query;
|
|
18
|
+
if (!query)
|
|
19
|
+
throw new Error('Search query is required');
|
|
20
|
+
const results = await ctx.memory.searchMemories(userId, query, {
|
|
21
|
+
limit: params.limit,
|
|
22
|
+
type: params.type,
|
|
23
|
+
tier: params.tier
|
|
24
|
+
});
|
|
25
|
+
ctx.log('tool_result', `Found ${results.length} memories matching "${query}"`);
|
|
26
|
+
return { results };
|
|
27
|
+
case 'retrieve':
|
|
28
|
+
const tier = params.tier;
|
|
29
|
+
if (!tier)
|
|
30
|
+
throw new Error('Tier is required for retrieval');
|
|
31
|
+
const memories = await ctx.memory.getMemoriesByTier(userId, tier);
|
|
32
|
+
ctx.log('tool_result', `Retrieved ${memories.length} ${tier} memories`);
|
|
33
|
+
return { memories };
|
|
34
|
+
default:
|
|
35
|
+
throw new Error(`Unknown operation: ${operation}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
ctx.log('error', `Memory operation failed: ${error}`);
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../skills/agent/memory-management/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,qBAAqB;IACxC,EAAE,GAAG,mBAAmB,CAAC;IACzB,IAAI,GAAG,mBAAmB,CAAC;IAC3B,WAAW,GAAG,uCAAuC,CAAC;IACtD,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IAE7C,KAAK,CAAC,OAAO,CAAC,GAAiB,EAAE,MAAmB;QAClD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,aAAa,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;QAE3C,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,gCAAgC,SAAS,aAAa,MAAM,EAAE,CAAC,CAAC;QAEpF,IAAI,CAAC;YACH,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,aAAa;oBAChB,MAAM,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;oBAC7C,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,iCAAiC,CAAC,CAAC;oBAC1D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;gBAE9D,KAAK,QAAQ;oBACX,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC3B,IAAI,CAAC,KAAK;wBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;oBACxD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE;wBAC7D,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;qBAClB,CAAC,CAAC;oBACH,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,OAAO,CAAC,MAAM,uBAAuB,KAAK,GAAG,CAAC,CAAC;oBAC/E,OAAO,EAAE,OAAO,EAAE,CAAC;gBAErB,KAAK,UAAU;oBACb,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;oBACzB,IAAI,CAAC,IAAI;wBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBAC7D,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBAClE,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,QAAQ,CAAC,MAAM,IAAI,IAAI,WAAW,CAAC,CAAC;oBACxE,OAAO,EAAE,QAAQ,EAAE,CAAC;gBAEtB;oBACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,4BAA4B,KAAK,EAAE,CAAC,CAAC;YACtD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scheduling
|
|
3
|
+
description: Schedule and manage automated tasks (cron)
|
|
4
|
+
tags: [system, cron, tasks]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Scheduling
|
|
8
|
+
|
|
9
|
+
This skill allows the agent to schedule tasks to run automatically at specified times.
|
|
10
|
+
|
|
11
|
+
## Actions
|
|
12
|
+
|
|
13
|
+
### schedule_task
|
|
14
|
+
Schedule a new recurring task.
|
|
15
|
+
|
|
16
|
+
**Parameters:**
|
|
17
|
+
- `name` (required): Name of the task.
|
|
18
|
+
- `cron` (required): Cron expression (e.g. "0 * * * *").
|
|
19
|
+
- `skill` (required): The ID of the skill to execute.
|
|
20
|
+
- `params` (optional): JSON object of parameters for the skill.
|
|
21
|
+
|
|
22
|
+
### list_tasks
|
|
23
|
+
List all scheduled tasks.
|
|
24
|
+
|
|
25
|
+
### remove_task
|
|
26
|
+
Stop and remove a scheduled task.
|
|
27
|
+
|
|
28
|
+
**Parameters:**
|
|
29
|
+
- `taskId` (required): The ID of the task to remove.
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
- "Check weather every hour" -> `schedule_task(name="Check Weather", cron="0 * * * *", skill="weather_skill", params={})`
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
|
|
2
|
+
import { CronManager } from '../../../src/scheduling/CronManager.js';
|
|
3
|
+
import { SkillManager } from '../../../src/skills/SkillManager.js';
|
|
4
|
+
export default class SchedulingSkill implements Skill {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
tags: string[];
|
|
9
|
+
private static cronManager;
|
|
10
|
+
private static skillManager;
|
|
11
|
+
execute(ctx: SkillContext, params: SkillParams): Promise<SkillResult>;
|
|
12
|
+
static setManagers(cron: CronManager, skill: SkillManager): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { CronManager } from '../../../src/scheduling/CronManager.js';
|
|
2
|
+
export default class SchedulingSkill {
|
|
3
|
+
id = 'scheduling';
|
|
4
|
+
name = 'Scheduling';
|
|
5
|
+
description = 'Schedule and manage automated tasks (cron)';
|
|
6
|
+
tags = ['system', 'cron', 'tasks'];
|
|
7
|
+
static cronManager = null;
|
|
8
|
+
static skillManager = null;
|
|
9
|
+
async execute(ctx, params) {
|
|
10
|
+
const operation = params.operation || 'list_tasks';
|
|
11
|
+
// Prioritize context-injected managers, fallback to static (legacy support)
|
|
12
|
+
const cron = ctx.managers?.cron || SchedulingSkill.cronManager;
|
|
13
|
+
const skillMgr = ctx.managers?.skill || SchedulingSkill.skillManager;
|
|
14
|
+
if (!cron) {
|
|
15
|
+
// Last resort fallback
|
|
16
|
+
if (!SchedulingSkill.cronManager) {
|
|
17
|
+
SchedulingSkill.cronManager = new CronManager();
|
|
18
|
+
}
|
|
19
|
+
// return this.execute(ctx, params); // Recursion risk if logic fails
|
|
20
|
+
}
|
|
21
|
+
const finalCron = cron || SchedulingSkill.cronManager; // Should be set by now
|
|
22
|
+
ctx.log('thinking', `Performing scheduling operation: ${operation}`);
|
|
23
|
+
try {
|
|
24
|
+
switch (operation) {
|
|
25
|
+
case 'list_tasks':
|
|
26
|
+
const tasks = finalCron.getAllTasks();
|
|
27
|
+
return {
|
|
28
|
+
tasks: tasks.map((t) => ({
|
|
29
|
+
id: t.id,
|
|
30
|
+
name: t.name,
|
|
31
|
+
cron: t.cronExpression,
|
|
32
|
+
enabled: t.enabled,
|
|
33
|
+
lastRun: t.lastRun
|
|
34
|
+
}))
|
|
35
|
+
};
|
|
36
|
+
case 'schedule_task':
|
|
37
|
+
const name = params.name;
|
|
38
|
+
const cronExp = params.cron;
|
|
39
|
+
const skillId = params.skill;
|
|
40
|
+
const skillParams = params.params || {};
|
|
41
|
+
if (!name || !cronExp || !skillId)
|
|
42
|
+
throw new Error('Name, cron, and skill are required');
|
|
43
|
+
if (!skillMgr) {
|
|
44
|
+
throw new Error('SkillManager not available. Cannot execute scheduled tasks.');
|
|
45
|
+
}
|
|
46
|
+
const task = finalCron.scheduleTask(name, cronExp, async () => {
|
|
47
|
+
console.log(`[ScheduledTask:${name}] Executing skill ${skillId}...`);
|
|
48
|
+
try {
|
|
49
|
+
await skillMgr.executeSkill(skillId, 'scheduled-task', // generic user id for system tasks
|
|
50
|
+
skillParams, (type, content) => console.log(`[ScheduledTask:${name}] [${type}] ${content}`));
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
console.error(`[ScheduledTask:${name}] Failed:`, e);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
finalCron.startTask(task.id);
|
|
57
|
+
ctx.log('tool_result', `Scheduled task '${name}' (${task.id})`);
|
|
58
|
+
return { success: true, taskId: task.id, message: 'Task scheduled and started.' };
|
|
59
|
+
case 'remove_task':
|
|
60
|
+
const taskId = params.taskId;
|
|
61
|
+
if (!taskId)
|
|
62
|
+
throw new Error('TaskId is required');
|
|
63
|
+
finalCron.removeTask(taskId);
|
|
64
|
+
ctx.log('tool_result', `Removed task ${taskId}`);
|
|
65
|
+
return { success: true, message: 'Task removed.' };
|
|
66
|
+
default:
|
|
67
|
+
throw new Error(`Unknown operation: ${operation}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
ctx.log('error', `Scheduling operation failed: ${error}`);
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
static setManagers(cron, skill) {
|
|
76
|
+
SchedulingSkill.cronManager = cron;
|
|
77
|
+
SchedulingSkill.skillManager = skill;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../skills/agent/scheduling/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: session-management
|
|
3
|
+
description: Manage chat sessions and history
|
|
4
|
+
tags: [system, session, history]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Session Management
|
|
8
|
+
|
|
9
|
+
This skill allows the agent to manage user sessions and chat history.
|
|
10
|
+
|
|
11
|
+
## Actions
|
|
12
|
+
|
|
13
|
+
### list_sessions
|
|
14
|
+
List all active sessions for the current user.
|
|
15
|
+
|
|
16
|
+
### get_history
|
|
17
|
+
Retrieve message history for a session.
|
|
18
|
+
|
|
19
|
+
**Parameters:**
|
|
20
|
+
- `sessionId` (optional): If not provided, uses current active session.
|
|
21
|
+
- `limit` (optional): Number of messages to retrieve (default 10).
|
|
22
|
+
|
|
23
|
+
### clear_history
|
|
24
|
+
Clear message history for a session.
|
|
25
|
+
|
|
26
|
+
**Parameters:**
|
|
27
|
+
- `sessionId` (optional): If not provided, uses current active session.
|
|
28
|
+
|
|
29
|
+
### summarize_session
|
|
30
|
+
Generate a summary of the current session. (Future)
|
|
31
|
+
|
|
32
|
+
## Examples
|
|
33
|
+
|
|
34
|
+
- "Show my chat history" -> `get_history`
|
|
35
|
+
- "Clear this session" -> `clear_history`
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
|
|
2
|
+
import { SessionManager } from '../../../src/session/SessionManager.js';
|
|
3
|
+
export default class SessionSkill implements Skill {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
tags: string[];
|
|
8
|
+
private static manager;
|
|
9
|
+
execute(ctx: SkillContext, params: SkillParams): Promise<SkillResult>;
|
|
10
|
+
static setManager(manager: SessionManager): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { SessionManager } from '../../../src/session/SessionManager.js';
|
|
2
|
+
export default class SessionSkill {
|
|
3
|
+
id = 'session_management';
|
|
4
|
+
name = 'Session Management';
|
|
5
|
+
description = 'Manage chat sessions and history';
|
|
6
|
+
tags = ['system', 'session', 'history'];
|
|
7
|
+
static manager = null;
|
|
8
|
+
async execute(ctx, params) {
|
|
9
|
+
const operation = params.operation || 'get_history';
|
|
10
|
+
// Prioritize context-injected manager, fallback to static (legacy support)
|
|
11
|
+
const manager = ctx.managers?.session || SessionSkill.manager || new SessionManager();
|
|
12
|
+
// We need to know the current session context.
|
|
13
|
+
const userId = ctx.userId;
|
|
14
|
+
let sessionId = params.sessionId;
|
|
15
|
+
// Resolve session
|
|
16
|
+
if (!sessionId) {
|
|
17
|
+
// Use the manager instance we resolved
|
|
18
|
+
const session = manager.getOrCreateActiveSession(userId);
|
|
19
|
+
sessionId = session.id;
|
|
20
|
+
}
|
|
21
|
+
ctx.log('thinking', `Performing session operation: ${operation} for session ${sessionId}`);
|
|
22
|
+
try {
|
|
23
|
+
switch (operation) {
|
|
24
|
+
case 'list_sessions':
|
|
25
|
+
const activeSession = manager.getActiveSession(userId);
|
|
26
|
+
return {
|
|
27
|
+
sessions: activeSession ? [{ id: activeSession.id, created: activeSession.created_at }] : []
|
|
28
|
+
};
|
|
29
|
+
case 'get_history':
|
|
30
|
+
const limit = params.limit || 10;
|
|
31
|
+
const history = manager.getHistory(sessionId, limit);
|
|
32
|
+
return {
|
|
33
|
+
sessionId,
|
|
34
|
+
history: history.map((m) => ({ role: m.role, content: m.content, time: m.timestamp }))
|
|
35
|
+
};
|
|
36
|
+
case 'clear_history':
|
|
37
|
+
manager.clearHistory(sessionId);
|
|
38
|
+
ctx.log('tool_result', `Cleared history for session ${sessionId}`);
|
|
39
|
+
return { success: true, message: 'Session history cleared.' };
|
|
40
|
+
default:
|
|
41
|
+
throw new Error(`Unknown operation: ${operation}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
ctx.log('error', `Session operation failed: ${error}`);
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Helper to inject manager (called by Agent)
|
|
50
|
+
static setManager(manager) {
|
|
51
|
+
SessionSkill.manager = manager;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../skills/agent/session-management/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAExE,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,EAAE,GAAG,oBAAoB,CAAC;IAC1B,IAAI,GAAG,oBAAoB,CAAC;IAC5B,WAAW,GAAG,kCAAkC,CAAC;IACjD,IAAI,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAEhC,MAAM,CAAC,OAAO,GAA0B,IAAI,CAAC;IAErD,KAAK,CAAC,OAAO,CAAC,GAAiB,EAAE,MAAmB;QAClD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,aAAa,CAAC;QAEpD,2EAA2E;QAC3E,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,OAAO,IAAI,YAAY,CAAC,OAAO,IAAI,IAAI,cAAc,EAAE,CAAC;QAEtF,+CAA+C;QAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAEjC,kBAAkB;QAClB,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,uCAAuC;YACvC,MAAM,OAAO,GAAG,OAAO,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;YACzD,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;QAC3B,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,iCAAiC,SAAS,gBAAgB,SAAS,EAAE,CAAC,CAAC;QAE3F,IAAI,CAAC;YACH,QAAQ,SAAS,EAAE,CAAC;gBAClB,KAAK,eAAe;oBACjB,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBACvD,OAAO;wBACH,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;qBAC/F,CAAC;gBAEL,KAAK,aAAa;oBAChB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;oBACjC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;oBACrD,OAAO;wBACH,SAAS;wBACT,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;qBAC9F,CAAC;gBAEJ,KAAK,eAAe;oBAClB,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;oBAChC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,+BAA+B,SAAS,EAAE,CAAC,CAAC;oBACnE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;gBAEhE;oBACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,6BAA6B,KAAK,EAAE,CAAC,CAAC;YACvD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,6CAA6C;IACtC,MAAM,CAAC,UAAU,CAAC,OAAuB;QAC5C,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC;IACnC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-management
|
|
3
|
+
description: Manage skill packs (load, unload, list)
|
|
4
|
+
tags: [system, management, packs]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill Management
|
|
8
|
+
|
|
9
|
+
This skill allows the agent to manage its own skill sets (packs).
|
|
10
|
+
|
|
11
|
+
## Actions
|
|
12
|
+
|
|
13
|
+
### list_packs
|
|
14
|
+
List all loaded skill packs.
|
|
15
|
+
|
|
16
|
+
### unload_pack
|
|
17
|
+
Unload a specific skill pack.
|
|
18
|
+
|
|
19
|
+
**Parameters:**
|
|
20
|
+
- `packId` (required): The ID of the pack to unload.
|
|
21
|
+
|
|
22
|
+
### load_pack
|
|
23
|
+
Load a skill pack from disk (if not already loaded, or to reload).
|
|
24
|
+
|
|
25
|
+
**Parameters:**
|
|
26
|
+
- `packId` (required): The folder name of the pack in `skills/`.
|
|
27
|
+
|
|
28
|
+
## Examples
|
|
29
|
+
|
|
30
|
+
- "List loaded skill packs" -> `list_packs`
|
|
31
|
+
- "Unload the dev-tools pack" -> `unload_pack(packId="dev-tools")`
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
|
|
2
|
+
export default class SkillManagementSkill implements Skill {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
tags: string[];
|
|
7
|
+
execute(ctx: SkillContext, params: SkillParams): Promise<SkillResult>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export default class SkillManagementSkill {
|
|
2
|
+
id = 'skill_management';
|
|
3
|
+
name = 'Skill Management';
|
|
4
|
+
description = 'Manage skill packs (load, unload, list)';
|
|
5
|
+
tags = ['system', 'management', 'packs'];
|
|
6
|
+
async execute(ctx, params) {
|
|
7
|
+
const operation = params.operation || 'list_packs';
|
|
8
|
+
// We need access to the SkillManager.
|
|
9
|
+
// In our architecture, the agent has it. But here we are inside a skill execution.
|
|
10
|
+
// For now, we assume we can't easily get the parent SkillManager instance directly from context unless we injected it.
|
|
11
|
+
// However, since we are moving towards a more dynamic system, we might need to expose it.
|
|
12
|
+
// Let's assume we can't do real loading/unloading in this MVP without refactoring Context.
|
|
13
|
+
// BUT, we can inspect the file system which reflects the 'potential' state.
|
|
14
|
+
// AND, if we had the instance, we could call methods.
|
|
15
|
+
// For this MVP, let's just implement 'list_packs' by reading the file system or if we can hack access.
|
|
16
|
+
// Real implementation requires Context refactoring.
|
|
17
|
+
// TODO: Refactor SkillContext to include skillManager
|
|
18
|
+
// For now, let's return a message saying this is a placeholder for the architecture.
|
|
19
|
+
return {
|
|
20
|
+
success: true,
|
|
21
|
+
message: `Operation '${operation}' processed. (Note: Runtime pack management requires Context injection update).`
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../skills/agent/skill-management/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACvC,EAAE,GAAG,kBAAkB,CAAC;IACxB,IAAI,GAAG,kBAAkB,CAAC;IAC1B,WAAW,GAAG,yCAAyC,CAAC;IACxD,IAAI,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAEzC,KAAK,CAAC,OAAO,CAAC,GAAiB,EAAE,MAAmB;QAClD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,YAAY,CAAC;QAEnD,uCAAuC;QACvC,mFAAmF;QACnF,uHAAuH;QACvH,0FAA0F;QAC1F,2FAA2F;QAE3F,4EAA4E;QAC5E,sDAAsD;QAEtD,uGAAuG;QACvG,oDAAoD;QAEpD,sDAAsD;QACtD,qFAAqF;QAErF,OAAO;YACH,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,cAAc,SAAS,iFAAiF;SACpH,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -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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"}
|