azerclaw 1.0.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 +222 -0
- package/bin/azerclaw.ts +290 -0
- package/dist/bin/azerclaw.d.ts +19 -0
- package/dist/bin/azerclaw.d.ts.map +1 -0
- package/dist/bin/azerclaw.js +247 -0
- package/dist/bin/azerclaw.js.map +1 -0
- package/dist/skills/code-review/SKILL.md +46 -0
- package/dist/skills/daily-briefing/SKILL.md +35 -0
- package/dist/skills/git-assistant/SKILL.md +31 -0
- package/dist/src/agents/builtin.d.ts +52 -0
- package/dist/src/agents/builtin.d.ts.map +1 -0
- package/dist/src/agents/builtin.js +497 -0
- package/dist/src/agents/builtin.js.map +1 -0
- package/dist/src/agents/loader.d.ts +23 -0
- package/dist/src/agents/loader.d.ts.map +1 -0
- package/dist/src/agents/loader.js +154 -0
- package/dist/src/agents/loader.js.map +1 -0
- package/dist/src/channels/adapter.d.ts +57 -0
- package/dist/src/channels/adapter.d.ts.map +1 -0
- package/dist/src/channels/adapter.js +45 -0
- package/dist/src/channels/adapter.js.map +1 -0
- package/dist/src/channels/discord.d.ts +23 -0
- package/dist/src/channels/discord.d.ts.map +1 -0
- package/dist/src/channels/discord.js +129 -0
- package/dist/src/channels/discord.js.map +1 -0
- package/dist/src/channels/slack.d.ts +19 -0
- package/dist/src/channels/slack.d.ts.map +1 -0
- package/dist/src/channels/slack.js +97 -0
- package/dist/src/channels/slack.js.map +1 -0
- package/dist/src/channels/telegram.d.ts +20 -0
- package/dist/src/channels/telegram.d.ts.map +1 -0
- package/dist/src/channels/telegram.js +87 -0
- package/dist/src/channels/telegram.js.map +1 -0
- package/dist/src/channels/webhook.d.ts +19 -0
- package/dist/src/channels/webhook.d.ts.map +1 -0
- package/dist/src/channels/webhook.js +124 -0
- package/dist/src/channels/webhook.js.map +1 -0
- package/dist/src/cli/animations/fish.d.ts +33 -0
- package/dist/src/cli/animations/fish.d.ts.map +1 -0
- package/dist/src/cli/animations/fish.js +297 -0
- package/dist/src/cli/animations/fish.js.map +1 -0
- package/dist/src/cli/commands/agents.d.ts +8 -0
- package/dist/src/cli/commands/agents.d.ts.map +1 -0
- package/dist/src/cli/commands/agents.js +104 -0
- package/dist/src/cli/commands/agents.js.map +1 -0
- package/dist/src/cli/commands/chat.d.ts +9 -0
- package/dist/src/cli/commands/chat.d.ts.map +1 -0
- package/dist/src/cli/commands/chat.js +236 -0
- package/dist/src/cli/commands/chat.js.map +1 -0
- package/dist/src/cli/commands/config.d.ts +9 -0
- package/dist/src/cli/commands/config.d.ts.map +1 -0
- package/dist/src/cli/commands/config.js +97 -0
- package/dist/src/cli/commands/config.js.map +1 -0
- package/dist/src/cli/commands/doctor.d.ts +8 -0
- package/dist/src/cli/commands/doctor.d.ts.map +1 -0
- package/dist/src/cli/commands/doctor.js +159 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/commands/models.d.ts +7 -0
- package/dist/src/cli/commands/models.d.ts.map +1 -0
- package/dist/src/cli/commands/models.js +64 -0
- package/dist/src/cli/commands/models.js.map +1 -0
- package/dist/src/cli/commands/onboard.d.ts +6 -0
- package/dist/src/cli/commands/onboard.d.ts.map +1 -0
- package/dist/src/cli/commands/onboard.js +150 -0
- package/dist/src/cli/commands/onboard.js.map +1 -0
- package/dist/src/cli/commands/run.d.ts +9 -0
- package/dist/src/cli/commands/run.d.ts.map +1 -0
- package/dist/src/cli/commands/run.js +84 -0
- package/dist/src/cli/commands/run.js.map +1 -0
- package/dist/src/cli/commands/tui.d.ts +6 -0
- package/dist/src/cli/commands/tui.d.ts.map +1 -0
- package/dist/src/cli/commands/tui.js +252 -0
- package/dist/src/cli/commands/tui.js.map +1 -0
- package/dist/src/config/manager.d.ts +80 -0
- package/dist/src/config/manager.d.ts.map +1 -0
- package/dist/src/config/manager.js +232 -0
- package/dist/src/config/manager.js.map +1 -0
- package/dist/src/config/schema.d.ts +910 -0
- package/dist/src/config/schema.d.ts.map +1 -0
- package/dist/src/config/schema.js +138 -0
- package/dist/src/config/schema.js.map +1 -0
- package/dist/src/core/gateway.d.ts +35 -0
- package/dist/src/core/gateway.d.ts.map +1 -0
- package/dist/src/core/gateway.js +205 -0
- package/dist/src/core/gateway.js.map +1 -0
- package/dist/src/core/runtime.d.ts +69 -0
- package/dist/src/core/runtime.d.ts.map +1 -0
- package/dist/src/core/runtime.js +188 -0
- package/dist/src/core/runtime.js.map +1 -0
- package/dist/src/core/security.d.ts +55 -0
- package/dist/src/core/security.d.ts.map +1 -0
- package/dist/src/core/security.js +241 -0
- package/dist/src/core/security.js.map +1 -0
- package/dist/src/index.d.ts +24 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +46 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/memory/store.d.ts +65 -0
- package/dist/src/memory/store.d.ts.map +1 -0
- package/dist/src/memory/store.js +250 -0
- package/dist/src/memory/store.js.map +1 -0
- package/dist/src/providers/anthropic.d.ts +25 -0
- package/dist/src/providers/anthropic.d.ts.map +1 -0
- package/dist/src/providers/anthropic.js +163 -0
- package/dist/src/providers/anthropic.js.map +1 -0
- package/dist/src/providers/base.d.ts +90 -0
- package/dist/src/providers/base.d.ts.map +1 -0
- package/dist/src/providers/base.js +12 -0
- package/dist/src/providers/base.js.map +1 -0
- package/dist/src/providers/google.d.ts +23 -0
- package/dist/src/providers/google.d.ts.map +1 -0
- package/dist/src/providers/google.js +118 -0
- package/dist/src/providers/google.js.map +1 -0
- package/dist/src/providers/ollama.d.ts +24 -0
- package/dist/src/providers/ollama.d.ts.map +1 -0
- package/dist/src/providers/ollama.js +81 -0
- package/dist/src/providers/ollama.js.map +1 -0
- package/dist/src/providers/openai.d.ts +30 -0
- package/dist/src/providers/openai.d.ts.map +1 -0
- package/dist/src/providers/openai.js +187 -0
- package/dist/src/providers/openai.js.map +1 -0
- package/dist/src/providers/router.d.ts +20 -0
- package/dist/src/providers/router.d.ts.map +1 -0
- package/dist/src/providers/router.js +156 -0
- package/dist/src/providers/router.js.map +1 -0
- package/dist/src/scheduler/heartbeat.d.ts +62 -0
- package/dist/src/scheduler/heartbeat.d.ts.map +1 -0
- package/dist/src/scheduler/heartbeat.js +267 -0
- package/dist/src/scheduler/heartbeat.js.map +1 -0
- package/dist/src/skills/loader.d.ts +25 -0
- package/dist/src/skills/loader.d.ts.map +1 -0
- package/dist/src/skills/loader.js +165 -0
- package/dist/src/skills/loader.js.map +1 -0
- package/dist/src/tools/advanced.d.ts +15 -0
- package/dist/src/tools/advanced.d.ts.map +1 -0
- package/dist/src/tools/advanced.js +102 -0
- package/dist/src/tools/advanced.js.map +1 -0
- package/dist/src/tools/filesystem.d.ts +10 -0
- package/dist/src/tools/filesystem.d.ts.map +1 -0
- package/dist/src/tools/filesystem.js +160 -0
- package/dist/src/tools/filesystem.js.map +1 -0
- package/dist/src/tools/registry.d.ts +26 -0
- package/dist/src/tools/registry.d.ts.map +1 -0
- package/dist/src/tools/registry.js +49 -0
- package/dist/src/tools/registry.js.map +1 -0
- package/dist/src/tools/shell.d.ts +7 -0
- package/dist/src/tools/shell.d.ts.map +1 -0
- package/dist/src/tools/shell.js +46 -0
- package/dist/src/tools/shell.js.map +1 -0
- package/dist/src/workflow/engine.d.ts +65 -0
- package/dist/src/workflow/engine.d.ts.map +1 -0
- package/dist/src/workflow/engine.js +297 -0
- package/dist/src/workflow/engine.js.map +1 -0
- package/package.json +113 -0
- package/skills/code-review/SKILL.md +46 -0
- package/skills/daily-briefing/SKILL.md +35 -0
- package/skills/git-assistant/SKILL.md +31 -0
- package/templates/HEARTBEAT.md +27 -0
- package/templates/IDENTITY.md +23 -0
- package/templates/deploy-pipeline.fishbone +39 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 🐟 AZERCLAW Skills System
|
|
4
|
+
* Load and execute SKILL.md files compatible with the OpenClaw ecosystem.
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.loadAllSkills = loadAllSkills;
|
|
41
|
+
exports.formatSkillsForPrompt = formatSkillsForPrompt;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const os = __importStar(require("os"));
|
|
45
|
+
// ─── Skill Discovery Paths (priority order) ────────────────────
|
|
46
|
+
function getSkillPaths(workspaceDir) {
|
|
47
|
+
const paths = [];
|
|
48
|
+
if (workspaceDir) {
|
|
49
|
+
paths.push({ path: path.join(workspaceDir, 'skills'), source: 'workspace' });
|
|
50
|
+
paths.push({ path: path.join(workspaceDir, '.agents', 'skills'), source: 'project' });
|
|
51
|
+
}
|
|
52
|
+
paths.push({ path: path.join(os.homedir(), '.agents', 'skills'), source: 'personal' });
|
|
53
|
+
paths.push({ path: path.join(os.homedir(), '.azerclaw', 'skills'), source: 'managed' });
|
|
54
|
+
paths.push({ path: path.join(__dirname, '..', '..', 'skills'), source: 'bundled' });
|
|
55
|
+
return paths;
|
|
56
|
+
}
|
|
57
|
+
// ─── SKILL.md Parser ────────────────────────────────────────────
|
|
58
|
+
function parseSkillFile(filePath, source) {
|
|
59
|
+
try {
|
|
60
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
61
|
+
// Parse YAML frontmatter
|
|
62
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
|
|
63
|
+
let metadata;
|
|
64
|
+
let instructions;
|
|
65
|
+
if (frontmatterMatch) {
|
|
66
|
+
metadata = parseYamlFrontmatter(frontmatterMatch[1]);
|
|
67
|
+
instructions = frontmatterMatch[2].trim();
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// No frontmatter — use filename as name
|
|
71
|
+
const name = path.basename(path.dirname(filePath));
|
|
72
|
+
metadata = { name, description: `Skill: ${name}` };
|
|
73
|
+
instructions = content.trim();
|
|
74
|
+
}
|
|
75
|
+
return { metadata, instructions, filePath, source };
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function parseYamlFrontmatter(yaml) {
|
|
82
|
+
const metadata = { name: '', description: '' };
|
|
83
|
+
for (const line of yaml.split('\n')) {
|
|
84
|
+
const colonIdx = line.indexOf(':');
|
|
85
|
+
if (colonIdx === -1)
|
|
86
|
+
continue;
|
|
87
|
+
const key = line.slice(0, colonIdx).trim().toLowerCase();
|
|
88
|
+
const value = line.slice(colonIdx + 1).trim();
|
|
89
|
+
switch (key) {
|
|
90
|
+
case 'name':
|
|
91
|
+
metadata.name = value;
|
|
92
|
+
break;
|
|
93
|
+
case 'description':
|
|
94
|
+
metadata.description = value;
|
|
95
|
+
break;
|
|
96
|
+
case 'version':
|
|
97
|
+
metadata.version = value;
|
|
98
|
+
break;
|
|
99
|
+
case 'author':
|
|
100
|
+
metadata.author = value;
|
|
101
|
+
break;
|
|
102
|
+
case 'tags':
|
|
103
|
+
metadata.tags = value.split(',').map(t => t.trim());
|
|
104
|
+
break;
|
|
105
|
+
case 'os':
|
|
106
|
+
metadata.os = value.split(',').map(t => t.trim());
|
|
107
|
+
break;
|
|
108
|
+
case 'requires':
|
|
109
|
+
metadata.requires = value.split(',').map(t => t.trim());
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return metadata;
|
|
114
|
+
}
|
|
115
|
+
// ─── Skill Loader ───────────────────────────────────────────────
|
|
116
|
+
function loadAllSkills(workspaceDir) {
|
|
117
|
+
const skills = [];
|
|
118
|
+
const seen = new Set();
|
|
119
|
+
for (const { path: skillDir, source } of getSkillPaths(workspaceDir)) {
|
|
120
|
+
if (!fs.existsSync(skillDir))
|
|
121
|
+
continue;
|
|
122
|
+
try {
|
|
123
|
+
const entries = fs.readdirSync(skillDir, { withFileTypes: true });
|
|
124
|
+
for (const entry of entries) {
|
|
125
|
+
if (!entry.isDirectory())
|
|
126
|
+
continue;
|
|
127
|
+
const skillFile = path.join(skillDir, entry.name, 'SKILL.md');
|
|
128
|
+
if (!fs.existsSync(skillFile))
|
|
129
|
+
continue;
|
|
130
|
+
// Higher-priority sources override lower-priority
|
|
131
|
+
if (seen.has(entry.name))
|
|
132
|
+
continue;
|
|
133
|
+
const skill = parseSkillFile(skillFile, source);
|
|
134
|
+
if (skill) {
|
|
135
|
+
// Check OS compatibility
|
|
136
|
+
if (skill.metadata.os && !skill.metadata.os.includes(process.platform)) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
skills.push(skill);
|
|
140
|
+
seen.add(entry.name);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// Skip inaccessible directories
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return skills;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Format skills as context for the agent system prompt.
|
|
152
|
+
*/
|
|
153
|
+
function formatSkillsForPrompt(skills) {
|
|
154
|
+
if (skills.length === 0)
|
|
155
|
+
return '';
|
|
156
|
+
let context = '\n\n## Available Skills\n\n';
|
|
157
|
+
for (const skill of skills) {
|
|
158
|
+
context += `### ${skill.metadata.name}\n`;
|
|
159
|
+
context += `${skill.metadata.description}\n`;
|
|
160
|
+
context += `Source: ${skill.source}\n\n`;
|
|
161
|
+
context += `Instructions:\n${skill.instructions}\n\n---\n\n`;
|
|
162
|
+
}
|
|
163
|
+
return context;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/skills/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🐟 AZERCLAW Sub-Agent Tool
|
|
3
|
+
* Allows the main agent to spawn sub-agents for parallel task execution.
|
|
4
|
+
*/
|
|
5
|
+
import { Tool } from './registry';
|
|
6
|
+
export declare const spawnSubAgentTool: Tool;
|
|
7
|
+
/**
|
|
8
|
+
* Web search tool for information retrieval
|
|
9
|
+
*/
|
|
10
|
+
export declare const webSearchTool: Tool;
|
|
11
|
+
/**
|
|
12
|
+
* Code analysis tool
|
|
13
|
+
*/
|
|
14
|
+
export declare const codeAnalysisTool: Tool;
|
|
15
|
+
//# sourceMappingURL=advanced.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced.d.ts","sourceRoot":"","sources":["../../../src/tools/advanced.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAc,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,iBAAiB,EAAE,IA8B/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,IAyB3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,IA+B9B,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 🐟 AZERCLAW Sub-Agent Tool
|
|
4
|
+
* Allows the main agent to spawn sub-agents for parallel task execution.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.codeAnalysisTool = exports.webSearchTool = exports.spawnSubAgentTool = void 0;
|
|
8
|
+
exports.spawnSubAgentTool = {
|
|
9
|
+
name: 'spawn_sub_agent',
|
|
10
|
+
description: `Spawn a sub-agent to handle a specific subtask in parallel. Use this for:
|
|
11
|
+
- Breaking large tasks into parallel workstreams
|
|
12
|
+
- Delegating research while you continue coding
|
|
13
|
+
- Running independent analyses simultaneously
|
|
14
|
+
- Code review while implementing changes
|
|
15
|
+
The sub-agent has full access to all tools.`,
|
|
16
|
+
parameters: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
properties: {
|
|
19
|
+
task: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
description: 'Clear, detailed description of the task for the sub-agent',
|
|
22
|
+
},
|
|
23
|
+
systemPrompt: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'Optional custom system prompt for the sub-agent',
|
|
26
|
+
},
|
|
27
|
+
maxIterations: {
|
|
28
|
+
type: 'number',
|
|
29
|
+
description: 'Max iterations for the sub-agent (default: 10)',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
required: ['task'],
|
|
33
|
+
},
|
|
34
|
+
// execute is handled specially by the runtime
|
|
35
|
+
async execute() {
|
|
36
|
+
return { success: false, output: '', error: 'Sub-agent tool must be handled by runtime' };
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Web search tool for information retrieval
|
|
41
|
+
*/
|
|
42
|
+
exports.webSearchTool = {
|
|
43
|
+
name: 'web_search',
|
|
44
|
+
description: 'Search the web for information. Returns relevant results.',
|
|
45
|
+
parameters: {
|
|
46
|
+
type: 'object',
|
|
47
|
+
properties: {
|
|
48
|
+
query: { type: 'string', description: 'Search query' },
|
|
49
|
+
maxResults: { type: 'number', description: 'Max results to return (default: 5)' },
|
|
50
|
+
},
|
|
51
|
+
required: ['query'],
|
|
52
|
+
},
|
|
53
|
+
async execute(args) {
|
|
54
|
+
// Uses DuckDuckGo HTML search (no API key needed)
|
|
55
|
+
const query = encodeURIComponent(args.query);
|
|
56
|
+
try {
|
|
57
|
+
const { execSync } = require('child_process');
|
|
58
|
+
const result = execSync(`curl -sL "https://html.duckduckgo.com/html/?q=${query}" | grep -oP '<a rel="nofollow" class="result__a" href="[^"]*">[^<]*</a>' | head -${args.maxResults || 5} | sed 's/<[^>]*>//g'`, { encoding: 'utf-8', timeout: 10000 });
|
|
59
|
+
return { success: true, output: result.trim() || 'No results found' };
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return { success: true, output: 'Web search unavailable in current environment' };
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Code analysis tool
|
|
68
|
+
*/
|
|
69
|
+
exports.codeAnalysisTool = {
|
|
70
|
+
name: 'analyze_code',
|
|
71
|
+
description: 'Analyze a codebase directory — count files, detect languages, find entry points.',
|
|
72
|
+
parameters: {
|
|
73
|
+
type: 'object',
|
|
74
|
+
properties: {
|
|
75
|
+
path: { type: 'string', description: 'Directory to analyze' },
|
|
76
|
+
},
|
|
77
|
+
required: ['path'],
|
|
78
|
+
},
|
|
79
|
+
async execute(args) {
|
|
80
|
+
const { execSync } = require('child_process');
|
|
81
|
+
const dir = args.path;
|
|
82
|
+
try {
|
|
83
|
+
const analysis = execSync(`
|
|
84
|
+
echo "=== Directory: ${dir} ==="
|
|
85
|
+
echo ""
|
|
86
|
+
echo "--- File counts by extension ---"
|
|
87
|
+
find "${dir}" -type f -not -path '*/node_modules/*' -not -path '*/.git/*' | sed 's/.*\\.//' | sort | uniq -c | sort -rn | head -20
|
|
88
|
+
echo ""
|
|
89
|
+
echo "--- Total files ---"
|
|
90
|
+
find "${dir}" -type f -not -path '*/node_modules/*' -not -path '*/.git/*' | wc -l
|
|
91
|
+
echo ""
|
|
92
|
+
echo "--- Package files ---"
|
|
93
|
+
find "${dir}" -maxdepth 2 -name "package.json" -o -name "Cargo.toml" -o -name "go.mod" -o -name "requirements.txt" -o -name "Gemfile" 2>/dev/null | head -10
|
|
94
|
+
`, { encoding: 'utf-8', timeout: 15000, cwd: dir });
|
|
95
|
+
return { success: true, output: analysis.trim() };
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
return { success: false, output: '', error: e.message };
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=advanced.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced.js","sourceRoot":"","sources":["../../../src/tools/advanced.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🐟 AZERCLAW Filesystem Tools
|
|
3
|
+
* Read, write, search, and manage files.
|
|
4
|
+
*/
|
|
5
|
+
import { Tool } from './registry';
|
|
6
|
+
export declare const readFileTool: Tool;
|
|
7
|
+
export declare const writeFileTool: Tool;
|
|
8
|
+
export declare const listDirTool: Tool;
|
|
9
|
+
export declare const searchFilesTool: Tool;
|
|
10
|
+
//# sourceMappingURL=filesystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../../src/tools/filesystem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,IAAI,EAAc,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,YAAY,EAAE,IA2B1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,IAwB3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,IAwBzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,IAuB7B,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 🐟 AZERCLAW Filesystem Tools
|
|
4
|
+
* Read, write, search, and manage files.
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.searchFilesTool = exports.listDirTool = exports.writeFileTool = exports.readFileTool = void 0;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
exports.readFileTool = {
|
|
44
|
+
name: 'read_file',
|
|
45
|
+
description: 'Read the contents of a file from disk.',
|
|
46
|
+
parameters: {
|
|
47
|
+
type: 'object',
|
|
48
|
+
properties: {
|
|
49
|
+
path: { type: 'string', description: 'Absolute or relative path to the file' },
|
|
50
|
+
startLine: { type: 'number', description: 'Start line (1-indexed, optional)' },
|
|
51
|
+
endLine: { type: 'number', description: 'End line (1-indexed, optional)' },
|
|
52
|
+
},
|
|
53
|
+
required: ['path'],
|
|
54
|
+
},
|
|
55
|
+
async execute(args) {
|
|
56
|
+
const filePath = args.path;
|
|
57
|
+
try {
|
|
58
|
+
const resolved = path.resolve(filePath);
|
|
59
|
+
if (!fs.existsSync(resolved))
|
|
60
|
+
return { success: false, output: '', error: `File not found: ${resolved}` };
|
|
61
|
+
let content = fs.readFileSync(resolved, 'utf-8');
|
|
62
|
+
if (args.startLine || args.endLine) {
|
|
63
|
+
const lines = content.split('\n');
|
|
64
|
+
const start = Math.max(0, (args.startLine || 1) - 1);
|
|
65
|
+
const end = Math.min(lines.length, args.endLine || lines.length);
|
|
66
|
+
content = lines.slice(start, end).join('\n');
|
|
67
|
+
}
|
|
68
|
+
return { success: true, output: content };
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
return { success: false, output: '', error: e.message };
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
exports.writeFileTool = {
|
|
76
|
+
name: 'write_file',
|
|
77
|
+
description: 'Write content to a file. Creates parent directories if needed.',
|
|
78
|
+
parameters: {
|
|
79
|
+
type: 'object',
|
|
80
|
+
properties: {
|
|
81
|
+
path: { type: 'string', description: 'Path to the file' },
|
|
82
|
+
content: { type: 'string', description: 'Content to write' },
|
|
83
|
+
append: { type: 'boolean', description: 'Append instead of overwrite (default: false)' },
|
|
84
|
+
},
|
|
85
|
+
required: ['path', 'content'],
|
|
86
|
+
},
|
|
87
|
+
async execute(args) {
|
|
88
|
+
const filePath = path.resolve(args.path);
|
|
89
|
+
try {
|
|
90
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
91
|
+
if (args.append) {
|
|
92
|
+
fs.appendFileSync(filePath, args.content);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
fs.writeFileSync(filePath, args.content);
|
|
96
|
+
}
|
|
97
|
+
return { success: true, output: `Written to ${filePath}` };
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
return { success: false, output: '', error: e.message };
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
exports.listDirTool = {
|
|
105
|
+
name: 'list_directory',
|
|
106
|
+
description: 'List files and directories in a given path.',
|
|
107
|
+
parameters: {
|
|
108
|
+
type: 'object',
|
|
109
|
+
properties: {
|
|
110
|
+
path: { type: 'string', description: 'Directory path' },
|
|
111
|
+
recursive: { type: 'boolean', description: 'List recursively (default: false)' },
|
|
112
|
+
},
|
|
113
|
+
required: ['path'],
|
|
114
|
+
},
|
|
115
|
+
async execute(args) {
|
|
116
|
+
const dirPath = path.resolve(args.path);
|
|
117
|
+
try {
|
|
118
|
+
if (!fs.existsSync(dirPath))
|
|
119
|
+
return { success: false, output: '', error: `Not found: ${dirPath}` };
|
|
120
|
+
const entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
121
|
+
const listing = entries.map(e => {
|
|
122
|
+
const type = e.isDirectory() ? '[DIR]' : '[FILE]';
|
|
123
|
+
const size = e.isFile() ? ` (${fs.statSync(path.join(dirPath, e.name)).size}b)` : '';
|
|
124
|
+
return `${type} ${e.name}${size}`;
|
|
125
|
+
}).join('\n');
|
|
126
|
+
return { success: true, output: listing };
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
return { success: false, output: '', error: e.message };
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
exports.searchFilesTool = {
|
|
134
|
+
name: 'search_files',
|
|
135
|
+
description: 'Search for a text pattern in files using grep-like functionality.',
|
|
136
|
+
parameters: {
|
|
137
|
+
type: 'object',
|
|
138
|
+
properties: {
|
|
139
|
+
pattern: { type: 'string', description: 'Text or regex pattern to search for' },
|
|
140
|
+
path: { type: 'string', description: 'Directory or file to search in' },
|
|
141
|
+
filePattern: { type: 'string', description: 'Glob pattern for file filtering (e.g. "*.ts")' },
|
|
142
|
+
},
|
|
143
|
+
required: ['pattern', 'path'],
|
|
144
|
+
},
|
|
145
|
+
async execute(args) {
|
|
146
|
+
const searchPath = path.resolve(args.path);
|
|
147
|
+
const pattern = args.pattern;
|
|
148
|
+
try {
|
|
149
|
+
const { execSync } = require('child_process');
|
|
150
|
+
const fileFilter = args.filePattern ? `--include="${args.filePattern}"` : '';
|
|
151
|
+
const cmd = `grep -rnI ${fileFilter} "${pattern}" "${searchPath}" 2>/dev/null | head -50`;
|
|
152
|
+
const output = execSync(cmd, { encoding: 'utf-8', timeout: 10000 });
|
|
153
|
+
return { success: true, output: output.trim() || 'No matches found' };
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return { success: true, output: 'No matches found' };
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=filesystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../../src/tools/filesystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🐟 AZERCLAW Tool Registry
|
|
3
|
+
* Manages all available tools that the agent can use.
|
|
4
|
+
*/
|
|
5
|
+
export interface ToolResult {
|
|
6
|
+
success: boolean;
|
|
7
|
+
output: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface Tool {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
parameters: Record<string, unknown>;
|
|
14
|
+
execute(args: Record<string, unknown>): Promise<ToolResult>;
|
|
15
|
+
}
|
|
16
|
+
declare class ToolRegistry {
|
|
17
|
+
private tools;
|
|
18
|
+
register(tool: Tool): void;
|
|
19
|
+
get(name: string): Tool | undefined;
|
|
20
|
+
getAll(): Tool[];
|
|
21
|
+
getDefinitions(): any[];
|
|
22
|
+
execute(name: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
23
|
+
}
|
|
24
|
+
export declare function getToolRegistry(): ToolRegistry;
|
|
25
|
+
export { ToolRegistry };
|
|
26
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC7D;AAED,cAAM,YAAY;IAChB,OAAO,CAAC,KAAK,CAAgC;IAE7C,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAI1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC,MAAM,IAAI,IAAI,EAAE;IAIhB,cAAc,IAAI,GAAG,EAAE;IAWjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;CAShF;AAGD,wBAAgB,eAAe,IAAI,YAAY,CAG9C;AACD,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 🐟 AZERCLAW Tool Registry
|
|
4
|
+
* Manages all available tools that the agent can use.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ToolRegistry = void 0;
|
|
8
|
+
exports.getToolRegistry = getToolRegistry;
|
|
9
|
+
class ToolRegistry {
|
|
10
|
+
tools = new Map();
|
|
11
|
+
register(tool) {
|
|
12
|
+
this.tools.set(tool.name, tool);
|
|
13
|
+
}
|
|
14
|
+
get(name) {
|
|
15
|
+
return this.tools.get(name);
|
|
16
|
+
}
|
|
17
|
+
getAll() {
|
|
18
|
+
return Array.from(this.tools.values());
|
|
19
|
+
}
|
|
20
|
+
getDefinitions() {
|
|
21
|
+
return this.getAll().map(tool => ({
|
|
22
|
+
type: 'function',
|
|
23
|
+
function: {
|
|
24
|
+
name: tool.name,
|
|
25
|
+
description: tool.description,
|
|
26
|
+
parameters: tool.parameters,
|
|
27
|
+
},
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
async execute(name, args) {
|
|
31
|
+
const tool = this.tools.get(name);
|
|
32
|
+
if (!tool)
|
|
33
|
+
return { success: false, output: '', error: `Unknown tool: ${name}` };
|
|
34
|
+
try {
|
|
35
|
+
return await tool.execute(args);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
return { success: false, output: '', error: error.message || 'Tool execution failed' };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.ToolRegistry = ToolRegistry;
|
|
43
|
+
let instance = null;
|
|
44
|
+
function getToolRegistry() {
|
|
45
|
+
if (!instance)
|
|
46
|
+
instance = new ToolRegistry();
|
|
47
|
+
return instance;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAqDH,0CAGC;AAzCD,MAAM,YAAY;IACR,KAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IAE7C,QAAQ,CAAC,IAAU;QACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,IAA6B;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;QACjF,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACzF,CAAC;IACH,CAAC;CACF;AAOQ,oCAAY;AALrB,IAAI,QAAQ,GAAwB,IAAI,CAAC;AACzC,SAAgB,eAAe;IAC7B,IAAI,CAAC,QAAQ;QAAE,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IAC7C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/tools/shell.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAc,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,SAAS,EAAE,IAoCvB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 🐟 AZERCLAW Shell Tool
|
|
4
|
+
* Execute shell commands with safety checks.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.shellTool = void 0;
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
exports.shellTool = {
|
|
10
|
+
name: 'run_shell',
|
|
11
|
+
description: 'Execute a shell command on the local system. Use this for running scripts, installing packages, git operations, file manipulation, and system tasks.',
|
|
12
|
+
parameters: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
command: { type: 'string', description: 'The shell command to execute' },
|
|
16
|
+
cwd: { type: 'string', description: 'Working directory (optional)' },
|
|
17
|
+
timeout: { type: 'number', description: 'Timeout in milliseconds (default: 30000)' },
|
|
18
|
+
},
|
|
19
|
+
required: ['command'],
|
|
20
|
+
},
|
|
21
|
+
async execute(args) {
|
|
22
|
+
const command = args.command;
|
|
23
|
+
const cwd = args.cwd || process.cwd();
|
|
24
|
+
const timeout = args.timeout || 30000;
|
|
25
|
+
try {
|
|
26
|
+
const output = (0, child_process_1.execSync)(command, {
|
|
27
|
+
cwd,
|
|
28
|
+
timeout,
|
|
29
|
+
encoding: 'utf-8',
|
|
30
|
+
maxBuffer: 1024 * 1024 * 10, // 10MB
|
|
31
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
32
|
+
});
|
|
33
|
+
return { success: true, output: output.trim() };
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
const stderr = error.stderr?.toString() || '';
|
|
37
|
+
const stdout = error.stdout?.toString() || '';
|
|
38
|
+
return {
|
|
39
|
+
success: false,
|
|
40
|
+
output: stdout,
|
|
41
|
+
error: stderr || error.message || 'Command failed',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/tools/shell.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,iDAAgD;AAGnC,QAAA,SAAS,GAAS;IAC7B,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,sJAAsJ;IACnK,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;YACxE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;YACpE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0CAA0C,EAAE;SACrF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IACD,KAAK,CAAC,OAAO,CAAC,IAA6B;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;QACvC,MAAM,GAAG,GAAI,IAAI,CAAC,GAAc,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClD,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB,IAAI,KAAK,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,OAAO,EAAE;gBAC/B,GAAG;gBACH,OAAO;gBACP,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,OAAO;gBACpC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC9C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,gBAAgB;aACnD,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
|