@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,180 @@
|
|
|
1
|
+
import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
|
|
5
|
+
export default class CodeAnalysisSkill implements Skill {
|
|
6
|
+
id = 'code_analysis';
|
|
7
|
+
name = 'Code Analysis';
|
|
8
|
+
description = 'Analyze project structure, scan codebase stats, and summarize code files';
|
|
9
|
+
tags = ['code', 'analysis', 'summary', 'scan'];
|
|
10
|
+
|
|
11
|
+
async execute(ctx: SkillContext, params: SkillParams): Promise<SkillResult> {
|
|
12
|
+
const targetPath = params.path || '.';
|
|
13
|
+
const operation = params.operation || 'scan'; // Default to scan
|
|
14
|
+
const safePath = path.resolve(process.cwd(), targetPath);
|
|
15
|
+
|
|
16
|
+
ctx.log('thinking', `Analyzing code at ${safePath} (operation: ${operation})`);
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
if (operation === 'structure') {
|
|
20
|
+
const structure = await this.getProjectStructure(safePath);
|
|
21
|
+
return { structure };
|
|
22
|
+
} else if (operation === 'summarize') {
|
|
23
|
+
const summary = await this.summarizeCode(ctx, safePath);
|
|
24
|
+
return { summary };
|
|
25
|
+
} else if (operation === 'scan') {
|
|
26
|
+
const scan = await this.scanCodebase(safePath);
|
|
27
|
+
return { scan };
|
|
28
|
+
} else {
|
|
29
|
+
throw new Error(`Unknown operation: ${operation}`);
|
|
30
|
+
}
|
|
31
|
+
} catch (error) {
|
|
32
|
+
ctx.log('error', `Code analysis failed: ${error}`);
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private async getProjectStructure(dir: string, depth = 0, maxDepth = 4): Promise<string> {
|
|
38
|
+
if (depth > maxDepth) return '';
|
|
39
|
+
|
|
40
|
+
let output = '';
|
|
41
|
+
try {
|
|
42
|
+
const files = await fs.readdir(dir);
|
|
43
|
+
// Sort: directories first, then files
|
|
44
|
+
const entries = await Promise.all(files.map(async file => {
|
|
45
|
+
const filePath = path.join(dir, file);
|
|
46
|
+
const stat = await fs.stat(filePath).catch(() => null);
|
|
47
|
+
return { file, stat };
|
|
48
|
+
}));
|
|
49
|
+
|
|
50
|
+
const validEntries = entries.filter(e => e.stat && !e.file.startsWith('.') && e.file !== 'node_modules' && e.file !== 'dist' && e.file !== 'build' && e.file !== '.git');
|
|
51
|
+
|
|
52
|
+
validEntries.sort((a, b) => {
|
|
53
|
+
if (a.stat!.isDirectory() && !b.stat!.isDirectory()) return -1;
|
|
54
|
+
if (!a.stat!.isDirectory() && b.stat!.isDirectory()) return 1;
|
|
55
|
+
return a.file.localeCompare(b.file);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
for (const { file, stat } of validEntries) {
|
|
59
|
+
const indent = ' '.repeat(depth);
|
|
60
|
+
if (stat!.isDirectory()) {
|
|
61
|
+
output += `${indent}- ${file}/\n`;
|
|
62
|
+
output += await this.getProjectStructure(path.join(dir, file), depth + 1, maxDepth);
|
|
63
|
+
} else {
|
|
64
|
+
output += `${indent}- ${file}\n`;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} catch (e) {
|
|
68
|
+
// Ignore errors
|
|
69
|
+
}
|
|
70
|
+
return output;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
private async scanCodebase(dir: string): Promise<any> {
|
|
74
|
+
const stats = {
|
|
75
|
+
files: 0,
|
|
76
|
+
directories: 0,
|
|
77
|
+
totalSize: 0,
|
|
78
|
+
extensions: {} as Record<string, number>,
|
|
79
|
+
sloc: 0,
|
|
80
|
+
keyFiles: [] as string[]
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
await this.traverse(dir, stats);
|
|
84
|
+
|
|
85
|
+
// Format extensions for display
|
|
86
|
+
const extSummary = Object.entries(stats.extensions)
|
|
87
|
+
.sort(([,a], [,b]) => b - a)
|
|
88
|
+
.slice(0, 10)
|
|
89
|
+
.map(([ext, count]) => `${ext}: ${count}`)
|
|
90
|
+
.join(', ');
|
|
91
|
+
|
|
92
|
+
const summary = `
|
|
93
|
+
**Codebase Scan Results**
|
|
94
|
+
- **Total Files:** ${stats.files}
|
|
95
|
+
- **Directories:** ${stats.directories}
|
|
96
|
+
- **Total Size:** ${(stats.totalSize / 1024 / 1024).toFixed(2)} MB
|
|
97
|
+
- **Total SLOC:** ${stats.sloc}
|
|
98
|
+
- **Key Files:** ${stats.keyFiles.join(', ')}
|
|
99
|
+
- **Extensions:** ${extSummary}
|
|
100
|
+
`.trim();
|
|
101
|
+
|
|
102
|
+
return { stats, summary };
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
private async traverse(dir: string, stats: any, depth = 0) {
|
|
106
|
+
if (depth > 10) return;
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
const files = await fs.readdir(dir);
|
|
110
|
+
for (const file of files) {
|
|
111
|
+
if (file.startsWith('.') || file === 'node_modules' || file === 'dist' || file === 'build' || file === 'coverage') continue;
|
|
112
|
+
|
|
113
|
+
const filePath = path.join(dir, file);
|
|
114
|
+
const stat = await fs.stat(filePath);
|
|
115
|
+
|
|
116
|
+
if (stat.isDirectory()) {
|
|
117
|
+
stats.directories++;
|
|
118
|
+
await this.traverse(filePath, stats, depth + 1);
|
|
119
|
+
} else {
|
|
120
|
+
stats.files++;
|
|
121
|
+
stats.totalSize += stat.size;
|
|
122
|
+
const ext = path.extname(file);
|
|
123
|
+
if (ext) {
|
|
124
|
+
stats.extensions[ext] = (stats.extensions[ext] || 0) + 1;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (['.ts', '.tsx', '.js', '.jsx', '.css', '.scss', '.html', '.md', '.json', '.py', '.go', '.rs'].includes(ext)) {
|
|
128
|
+
// Only count SLOC for text files
|
|
129
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
130
|
+
stats.sloc += content.split('\n').filter(l => l.trim().length > 0).length;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (['package.json', 'tsconfig.json', 'README.md', 'Dockerfile', 'docker-compose.yml', 'Makefile', 'Cargo.toml', 'go.mod'].includes(file)) {
|
|
134
|
+
stats.keyFiles.push(path.relative(process.cwd(), filePath));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
} catch (e) {
|
|
139
|
+
// ignore
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
private async summarizeCode(ctx: SkillContext, filePath: string): Promise<string> {
|
|
144
|
+
try {
|
|
145
|
+
const stat = await fs.stat(filePath);
|
|
146
|
+
if (stat.isDirectory()) {
|
|
147
|
+
// Summarize directory: list files and maybe read README
|
|
148
|
+
const files = await fs.readdir(filePath);
|
|
149
|
+
const visibleFiles = files.filter(f => !f.startsWith('.'));
|
|
150
|
+
let summary = `Directory: ${path.basename(filePath)}\nFiles: ${visibleFiles.join(', ')}\n`;
|
|
151
|
+
|
|
152
|
+
if (visibleFiles.includes('README.md')) {
|
|
153
|
+
const readme = await fs.readFile(path.join(filePath, 'README.md'), 'utf-8');
|
|
154
|
+
summary += `\nREADME Preview:\n${readme.slice(0, 200)}...\n`;
|
|
155
|
+
}
|
|
156
|
+
return summary;
|
|
157
|
+
} else {
|
|
158
|
+
// Summarize file
|
|
159
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
160
|
+
const lines = content.split('\n');
|
|
161
|
+
const sloc = lines.filter(l => l.trim().length > 0).length;
|
|
162
|
+
|
|
163
|
+
if (sloc > 500) {
|
|
164
|
+
return `File: ${path.basename(filePath)}\nSLOC: ${sloc}\n(File too large for full summary)`;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Use LLM to summarize
|
|
168
|
+
const prompt = `Summarize this code file in 1-2 sentences:\n\n${content}`;
|
|
169
|
+
try {
|
|
170
|
+
const response = await ctx.llm.chat([{ role: 'user', content: prompt }]);
|
|
171
|
+
return `File: ${path.basename(filePath)}\nSLOC: ${sloc}\nSummary: ${response.content}`;
|
|
172
|
+
} catch (e) {
|
|
173
|
+
return `File: ${path.basename(filePath)}\nSLOC: ${sloc}\n(LLM summary failed)`;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
} catch (e) {
|
|
177
|
+
return `Failed to summarize ${filePath}`;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: local-file-ops
|
|
3
|
+
description: List, read, organize, and search local research files
|
|
4
|
+
tags: [system, file, local]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Local File Operations
|
|
8
|
+
|
|
9
|
+
This skill allows the agent to interact with the local filesystem.
|
|
10
|
+
|
|
11
|
+
## Instructions
|
|
12
|
+
|
|
13
|
+
Use this skill to:
|
|
14
|
+
- Explore the file system
|
|
15
|
+
- Read file contents
|
|
16
|
+
- Organize files (e.g. moving PDFs)
|
|
17
|
+
- Search for files by name
|
|
18
|
+
|
|
19
|
+
## Actions
|
|
20
|
+
|
|
21
|
+
### list
|
|
22
|
+
List files in a directory.
|
|
23
|
+
|
|
24
|
+
**Parameters:**
|
|
25
|
+
- `path`: Directory path (default: current)
|
|
26
|
+
- `recursive`: Boolean, whether to list recursively
|
|
27
|
+
|
|
28
|
+
### read
|
|
29
|
+
Read the content of a file.
|
|
30
|
+
|
|
31
|
+
**Parameters:**
|
|
32
|
+
- `path`: File path
|
|
33
|
+
|
|
34
|
+
### write
|
|
35
|
+
Write content to a file.
|
|
36
|
+
|
|
37
|
+
**Parameters:**
|
|
38
|
+
- `path`: File path
|
|
39
|
+
- `content`: Content string
|
|
40
|
+
|
|
41
|
+
### search
|
|
42
|
+
Find files matching a pattern.
|
|
43
|
+
|
|
44
|
+
**Parameters:**
|
|
45
|
+
- `pattern`: Search string (filename substring)
|
|
46
|
+
- `path`: Root directory
|
|
47
|
+
|
|
48
|
+
### organize
|
|
49
|
+
Organize files based on rules (currently specialized for PDFs).
|
|
50
|
+
|
|
51
|
+
**Parameters:**
|
|
52
|
+
- `operation`: 'organize'
|
|
53
|
+
|
|
54
|
+
## Security
|
|
55
|
+
Operations are restricted to the current workspace.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { Skill, SkillContext, SkillParams, SkillResult } from '../../../src/skills/types.js';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
|
|
5
|
+
export default class LocalFileSkill implements Skill {
|
|
6
|
+
id = 'local_file_ops';
|
|
7
|
+
name = 'Local File Operations';
|
|
8
|
+
description = 'List, read, organize, and search local research files';
|
|
9
|
+
tags = ['system', 'file', 'local'];
|
|
10
|
+
|
|
11
|
+
async execute(ctx: SkillContext, params: SkillParams): Promise<SkillResult> {
|
|
12
|
+
const operation = params.operation as 'list' | 'read' | 'write' | 'organize' | 'search';
|
|
13
|
+
const targetPath = params.path || '.';
|
|
14
|
+
const recursive = params.recursive === true;
|
|
15
|
+
|
|
16
|
+
// Security check: ensure path is within workspace or allowed dirs
|
|
17
|
+
const safePath = path.resolve(process.cwd(), targetPath); // Default to CWD for now
|
|
18
|
+
|
|
19
|
+
ctx.log('thinking', `Performing ${operation} on ${safePath} (recursive: ${recursive})`);
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
switch (operation) {
|
|
23
|
+
case 'list':
|
|
24
|
+
if (recursive) {
|
|
25
|
+
const files = await this.listRecursive(safePath);
|
|
26
|
+
ctx.log('tool_result', `Found ${files.length} files recursively`);
|
|
27
|
+
return { files };
|
|
28
|
+
} else {
|
|
29
|
+
const files = await fs.readdir(safePath);
|
|
30
|
+
ctx.log('tool_result', `Found ${files.length} files`);
|
|
31
|
+
return { files };
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
case 'read':
|
|
35
|
+
try {
|
|
36
|
+
const stat = await fs.stat(safePath);
|
|
37
|
+
if (stat.isDirectory()) {
|
|
38
|
+
throw new Error('Path is a directory, not a file');
|
|
39
|
+
}
|
|
40
|
+
const content = await fs.readFile(safePath, 'utf-8');
|
|
41
|
+
ctx.log('tool_result', `Read ${content.length} characters`);
|
|
42
|
+
return { content, path: safePath };
|
|
43
|
+
} catch (err) {
|
|
44
|
+
ctx.log('error', `Failed to read file: ${err}`);
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
case 'write':
|
|
49
|
+
if (!params.content) throw new Error('Content required for write');
|
|
50
|
+
await fs.writeFile(safePath, params.content, 'utf-8');
|
|
51
|
+
ctx.log('action', `Wrote to file ${safePath}`);
|
|
52
|
+
return { success: true, path: safePath };
|
|
53
|
+
|
|
54
|
+
case 'search':
|
|
55
|
+
const pattern = params.pattern as string;
|
|
56
|
+
if (!pattern) throw new Error('Pattern required for search');
|
|
57
|
+
|
|
58
|
+
const allFiles = await this.listRecursive(safePath);
|
|
59
|
+
const matchedFiles = allFiles.filter(f => f.includes(pattern));
|
|
60
|
+
|
|
61
|
+
ctx.log('tool_result', `Found ${matchedFiles.length} files matching "${pattern}"`);
|
|
62
|
+
return { files: matchedFiles };
|
|
63
|
+
|
|
64
|
+
case 'organize':
|
|
65
|
+
// Example: Move PDFs to a 'papers' folder
|
|
66
|
+
ctx.log('action', 'Organizing PDF files...');
|
|
67
|
+
|
|
68
|
+
let fileList: string[] = [];
|
|
69
|
+
try {
|
|
70
|
+
fileList = await fs.readdir(safePath);
|
|
71
|
+
} catch (e) {
|
|
72
|
+
ctx.log('error', `Failed to read dir ${safePath}: ${e}`);
|
|
73
|
+
return { moved: 0 };
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const pdfs = fileList.filter(f => f.toLowerCase().endsWith('.pdf'));
|
|
77
|
+
|
|
78
|
+
if (pdfs.length === 0) {
|
|
79
|
+
return { moved: 0, destination: safePath };
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const papersDir = path.join(safePath, 'papers');
|
|
83
|
+
await fs.mkdir(papersDir, { recursive: true });
|
|
84
|
+
|
|
85
|
+
for (const pdf of pdfs) {
|
|
86
|
+
await fs.rename(path.join(safePath, pdf), path.join(papersDir, pdf));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
ctx.log('tool_result', `Moved ${pdfs.length} PDFs to ${papersDir}`);
|
|
90
|
+
return { moved: pdfs.length, destination: papersDir };
|
|
91
|
+
|
|
92
|
+
default:
|
|
93
|
+
throw new Error(`Unknown operation: ${operation}`);
|
|
94
|
+
}
|
|
95
|
+
} catch (error) {
|
|
96
|
+
ctx.log('error', `File operation failed: ${error}`);
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
private async listRecursive(dir: string): Promise<string[]> {
|
|
102
|
+
let results: string[] = [];
|
|
103
|
+
try {
|
|
104
|
+
const list = await fs.readdir(dir);
|
|
105
|
+
for (const file of list) {
|
|
106
|
+
if (file.startsWith('.') || file === 'node_modules') continue;
|
|
107
|
+
|
|
108
|
+
const filePath = path.resolve(dir, file);
|
|
109
|
+
const stat = await fs.stat(filePath);
|
|
110
|
+
|
|
111
|
+
if (stat && stat.isDirectory()) {
|
|
112
|
+
const res = await this.listRecursive(filePath);
|
|
113
|
+
results = results.concat(res);
|
|
114
|
+
} else {
|
|
115
|
+
results.push(filePath);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
} catch (err) {
|
|
119
|
+
// Ignore permission errors or missing dirs during recursion
|
|
120
|
+
}
|
|
121
|
+
return results;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Vendor Skills Pack
|
|
2
|
+
|
|
3
|
+
Third-party or specialized domain skills.
|
|
4
|
+
|
|
5
|
+
## Skills
|
|
6
|
+
|
|
7
|
+
- `literature-review`: Literature review and academic search
|
|
8
|
+
- `agent-browser`: Web browsing capabilities
|
|
9
|
+
- `searxng`: Meta-search engine integration
|
|
10
|
+
- `proactive-agent`: Autonomous behavior modules
|
|
11
|
+
- `self-improving-agent`: Learning mechanisms
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Contributing to Agent Browser Skill
|
|
2
|
+
|
|
3
|
+
This skill wraps the agent-browser CLI. Determine where the problem lies before reporting issues.
|
|
4
|
+
|
|
5
|
+
## Issue Reporting Guide
|
|
6
|
+
|
|
7
|
+
### Open an issue in this repository if
|
|
8
|
+
|
|
9
|
+
- The skill documentation is unclear or missing
|
|
10
|
+
- Examples in SKILL.md do not work
|
|
11
|
+
- You need help using the CLI with this skill wrapper
|
|
12
|
+
- The skill is missing a command or feature
|
|
13
|
+
|
|
14
|
+
### Open an issue at the agent-browser repository if
|
|
15
|
+
|
|
16
|
+
- The CLI crashes or throws errors
|
|
17
|
+
- Commands do not behave as documented
|
|
18
|
+
- You found a bug in the browser automation
|
|
19
|
+
- You need a new feature in the CLI
|
|
20
|
+
|
|
21
|
+
## Before Opening an Issue
|
|
22
|
+
|
|
23
|
+
1. Install the latest version
|
|
24
|
+
```bash
|
|
25
|
+
npm install -g agent-browser@latest
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
2. Test the command in your terminal to isolate the issue
|
|
29
|
+
|
|
30
|
+
## Issue Report Template
|
|
31
|
+
|
|
32
|
+
Use this template to provide necessary information.
|
|
33
|
+
|
|
34
|
+
```markdown
|
|
35
|
+
### Description
|
|
36
|
+
[Provide a clear and concise description of the bug]
|
|
37
|
+
|
|
38
|
+
### Reproduction Steps
|
|
39
|
+
1. [First Step]
|
|
40
|
+
2. [Second Step]
|
|
41
|
+
3. [Observe error]
|
|
42
|
+
|
|
43
|
+
### Expected Behavior
|
|
44
|
+
[Describe what you expected to happen]
|
|
45
|
+
|
|
46
|
+
### Environment Details
|
|
47
|
+
- **Skill Version:** [e.g. 1.0.2]
|
|
48
|
+
- **agent-browser Version:** [output of agent-browser --version]
|
|
49
|
+
- **Node.js Version:** [output of node -v]
|
|
50
|
+
- **Operating System:** [e.g. macOS Sonoma, Windows 11, Ubuntu 22.04]
|
|
51
|
+
|
|
52
|
+
### Additional Context
|
|
53
|
+
- [Full error output or stack trace]
|
|
54
|
+
- [Screenshots]
|
|
55
|
+
- [Website URLs where the failure occurred]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Adding New Commands to the Skill
|
|
59
|
+
|
|
60
|
+
Update SKILL.md when the upstream CLI adds new commands.
|
|
61
|
+
- Keep the Installation section
|
|
62
|
+
- Add new commands in the correct category
|
|
63
|
+
- Include usage examples
|