@dlnk/cli 0.1.0 → 0.3.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/dist/tools.js ADDED
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TOOL_MAP = exports.ALL_TOOLS = exports.gitTool = exports.searchTool = exports.fetchUrlTool = exports.shellTool = exports.listDirTool = exports.patchFileTool = exports.writeFileTool = exports.readFileTool = void 0;
37
+ exports.getToolsSystemPrompt = getToolsSystemPrompt;
38
+ exports.parseToolCall = parseToolCall;
39
+ exports.executeTool = executeTool;
40
+ const zod_1 = require("zod");
41
+ // ── DANGEROUS patterns ────────────────────────────────────────
42
+ const DANGEROUS = [
43
+ /rm\s+-rf\s+\//,
44
+ /mkfs/,
45
+ /dd\s+if=/,
46
+ />\s*\/dev\/(sd|hd|nvme)/,
47
+ /chmod\s+777\s+\//,
48
+ /curl.*\|\s*(bash|sh)/,
49
+ /wget.*\|\s*(bash|sh)/,
50
+ ];
51
+ // ── Tool Registry ──────────────────────────────────────────────
52
+ const fs = __importStar(require("fs"));
53
+ const path = __importStar(require("path"));
54
+ const child_process_1 = require("child_process");
55
+ // read_file
56
+ exports.readFileTool = {
57
+ name: 'read_file',
58
+ description: 'Read file contents. Returns text.',
59
+ schema: zod_1.z.object({
60
+ path: zod_1.z.string().describe('File path to read'),
61
+ lines: zod_1.z.tuple([zod_1.z.number(), zod_1.z.number()]).optional().describe('[start, end] line range (1-indexed)'),
62
+ }),
63
+ permission: { mode: 'auto' },
64
+ execute: async ({ path: filePath, lines }) => {
65
+ try {
66
+ let content = fs.readFileSync(filePath, 'utf-8');
67
+ if (lines) {
68
+ const [s, e] = lines;
69
+ content = content.split('\n').slice(s - 1, e).join('\n');
70
+ }
71
+ return { success: true, output: content };
72
+ }
73
+ catch (e) {
74
+ return { success: false, output: '', error: e.message };
75
+ }
76
+ }
77
+ };
78
+ // write_file
79
+ exports.writeFileTool = {
80
+ name: 'write_file',
81
+ description: 'Write or overwrite a file.',
82
+ schema: zod_1.z.object({
83
+ path: zod_1.z.string().describe('File path'),
84
+ content: zod_1.z.string().describe('Full content to write'),
85
+ }),
86
+ permission: { mode: 'ask' },
87
+ execute: async ({ path: filePath, content }) => {
88
+ try {
89
+ const dir = path.dirname(filePath);
90
+ if (!fs.existsSync(dir))
91
+ fs.mkdirSync(dir, { recursive: true });
92
+ fs.writeFileSync(filePath, content, 'utf-8');
93
+ return { success: true, output: `Written ${content.length} bytes → ${filePath}` };
94
+ }
95
+ catch (e) {
96
+ return { success: false, output: '', error: e.message };
97
+ }
98
+ }
99
+ };
100
+ // patch_file — apply unified diff style edit
101
+ exports.patchFileTool = {
102
+ name: 'patch_file',
103
+ description: 'Replace a specific block of text in a file (find & replace). Safer than write_file.',
104
+ schema: zod_1.z.object({
105
+ path: zod_1.z.string().describe('File path'),
106
+ old_text: zod_1.z.string().describe('Exact text to find and replace'),
107
+ new_text: zod_1.z.string().describe('Replacement text'),
108
+ }),
109
+ permission: { mode: 'auto' },
110
+ execute: async ({ path: filePath, old_text, new_text }) => {
111
+ try {
112
+ const content = fs.readFileSync(filePath, 'utf-8');
113
+ if (!content.includes(old_text)) {
114
+ return { success: false, output: '', error: `Text not found in ${filePath}` };
115
+ }
116
+ const newContent = content.replace(old_text, new_text);
117
+ fs.writeFileSync(filePath, newContent, 'utf-8');
118
+ return { success: true, output: `Patched ${filePath}` };
119
+ }
120
+ catch (e) {
121
+ return { success: false, output: '', error: e.message };
122
+ }
123
+ }
124
+ };
125
+ // list_dir
126
+ exports.listDirTool = {
127
+ name: 'list_dir',
128
+ description: 'List directory contents.',
129
+ schema: zod_1.z.object({
130
+ path: zod_1.z.string().default('.').describe('Directory path'),
131
+ recursive: zod_1.z.boolean().default(false).describe('List recursively'),
132
+ }),
133
+ permission: { mode: 'auto' },
134
+ execute: async ({ path: dirPath, recursive }) => {
135
+ try {
136
+ const cmd = recursive
137
+ ? `find ${dirPath} -not -path '*/node_modules/*' -not -path '*/.git/*' | head -100`
138
+ : `ls -la ${dirPath}`;
139
+ const out = (0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000 });
140
+ return { success: true, output: out.trim() };
141
+ }
142
+ catch (e) {
143
+ return { success: false, output: '', error: e.message };
144
+ }
145
+ }
146
+ };
147
+ // shell
148
+ exports.shellTool = {
149
+ name: 'shell',
150
+ description: 'Execute a shell command. For code execution, file operations, git, npm, etc.',
151
+ schema: zod_1.z.object({
152
+ command: zod_1.z.string().describe('Shell command to run'),
153
+ cwd: zod_1.z.string().optional().describe('Working directory'),
154
+ timeout: zod_1.z.number().default(30000).describe('Timeout in ms'),
155
+ }),
156
+ permission: { mode: 'ask', blockedPatterns: DANGEROUS },
157
+ execute: async ({ command, cwd, timeout }, ctx) => {
158
+ // Check dangerous patterns
159
+ for (const pat of DANGEROUS) {
160
+ if (pat.test(command)) {
161
+ return { success: false, output: '', error: `Blocked: dangerous command pattern detected` };
162
+ }
163
+ }
164
+ try {
165
+ const out = (0, child_process_1.execSync)(command, {
166
+ cwd: cwd || ctx.cwd,
167
+ encoding: 'utf-8',
168
+ timeout,
169
+ maxBuffer: 1024 * 1024 * 5,
170
+ });
171
+ return { success: true, output: out.trim() };
172
+ }
173
+ catch (e) {
174
+ return {
175
+ success: false,
176
+ output: e.stdout?.trim() || '',
177
+ error: e.stderr?.trim() || e.message
178
+ };
179
+ }
180
+ }
181
+ };
182
+ // fetch_url
183
+ exports.fetchUrlTool = {
184
+ name: 'fetch_url',
185
+ description: 'Fetch content from a URL. Returns text/HTML.',
186
+ schema: zod_1.z.object({
187
+ url: zod_1.z.string().url().describe('URL to fetch'),
188
+ method: zod_1.z.enum(['GET', 'POST']).default('GET'),
189
+ body: zod_1.z.string().optional(),
190
+ }),
191
+ permission: { mode: 'auto' },
192
+ execute: async ({ url, method, body }) => {
193
+ try {
194
+ const fetch = (await Promise.resolve().then(() => __importStar(require('node-fetch')))).default;
195
+ const res = await fetch(url, {
196
+ method,
197
+ body: body || undefined,
198
+ headers: { 'User-Agent': 'dlnk-agent/0.3.0' },
199
+ timeout: 15000,
200
+ });
201
+ const text = await res.text();
202
+ // Truncate large responses
203
+ const out = text.length > 8000 ? text.slice(0, 8000) + '\n[truncated...]' : text;
204
+ return { success: true, output: out };
205
+ }
206
+ catch (e) {
207
+ return { success: false, output: '', error: e.message };
208
+ }
209
+ }
210
+ };
211
+ // search_web
212
+ exports.searchTool = {
213
+ name: 'search_web',
214
+ description: 'Search the web using DuckDuckGo.',
215
+ schema: zod_1.z.object({
216
+ query: zod_1.z.string().describe('Search query'),
217
+ }),
218
+ permission: { mode: 'auto' },
219
+ execute: async ({ query }) => {
220
+ try {
221
+ const fetch = (await Promise.resolve().then(() => __importStar(require('node-fetch')))).default;
222
+ const url = `https://api.duckduckgo.com/?q=${encodeURIComponent(query)}&format=json&no_html=1&skip_disambig=1`;
223
+ const res = await fetch(url, { timeout: 10000 });
224
+ const data = await res.json();
225
+ const results = [];
226
+ if (data.AbstractText)
227
+ results.push(`📄 ${data.AbstractText}`);
228
+ if (data.RelatedTopics?.length) {
229
+ data.RelatedTopics.slice(0, 6).forEach((t) => {
230
+ if (t.Text)
231
+ results.push(`• ${t.Text}`);
232
+ });
233
+ }
234
+ return { success: true, output: results.join('\n') || 'No results.' };
235
+ }
236
+ catch (e) {
237
+ return { success: false, output: '', error: e.message };
238
+ }
239
+ }
240
+ };
241
+ // git_status / git operations
242
+ exports.gitTool = {
243
+ name: 'git',
244
+ description: 'Run git commands (status, diff, log, add, commit, etc.)',
245
+ schema: zod_1.z.object({
246
+ subcommand: zod_1.z.string().describe('Git subcommand e.g. "status", "diff HEAD", "log --oneline -5"'),
247
+ cwd: zod_1.z.string().optional(),
248
+ }),
249
+ permission: { mode: 'auto' },
250
+ execute: async ({ subcommand, cwd }, ctx) => {
251
+ try {
252
+ const out = (0, child_process_1.execSync)(`git ${subcommand}`, {
253
+ cwd: cwd || ctx.cwd,
254
+ encoding: 'utf-8',
255
+ timeout: 15000,
256
+ });
257
+ return { success: true, output: out.trim() };
258
+ }
259
+ catch (e) {
260
+ return { success: false, output: e.stderr?.trim() || e.message, error: e.stderr?.trim() };
261
+ }
262
+ }
263
+ };
264
+ // ── Registry ───────────────────────────────────────────────────
265
+ exports.ALL_TOOLS = [
266
+ exports.readFileTool,
267
+ exports.writeFileTool,
268
+ exports.patchFileTool,
269
+ exports.listDirTool,
270
+ exports.shellTool,
271
+ exports.fetchUrlTool,
272
+ exports.searchTool,
273
+ exports.gitTool,
274
+ ];
275
+ exports.TOOL_MAP = Object.fromEntries(exports.ALL_TOOLS.map(t => [t.name, t]));
276
+ // ── System prompt builder ──────────────────────────────────────
277
+ function getToolsSystemPrompt(cwd) {
278
+ const toolDocs = exports.ALL_TOOLS.map(t => {
279
+ const shape = t.schema instanceof zod_1.z.ZodObject ? t.schema.shape : {};
280
+ const params = Object.entries(shape)
281
+ .map(([k, v]) => ` ${k}: ${v.description || ''}`)
282
+ .join('\n');
283
+ return `### ${t.name}\n${t.description}\nParameters:\n${params}`;
284
+ }).join('\n\n');
285
+ return `You are a powerful AI coding agent — like Claude Code or Gemini CLI.
286
+ You can autonomously read, write, and execute code to accomplish tasks.
287
+
288
+ Working directory: ${cwd}
289
+
290
+ ## Available Tools
291
+ ${toolDocs}
292
+
293
+ ## Tool Call Format
294
+ When you need to use a tool, emit a JSON block:
295
+ \`\`\`tool
296
+ {"tool": "tool_name", "params": {"key": "value"}}
297
+ \`\`\`
298
+
299
+ ## Rules
300
+ 1. Think step by step before using tools
301
+ 2. Use patch_file for small edits (safer than write_file)
302
+ 3. Always read a file before editing it
303
+ 4. Run tests/verification after making changes
304
+ 5. If a command fails, diagnose and retry with corrected approach
305
+ 6. When done, provide a clear summary of what was accomplished
306
+ 7. Be concise — don't explain things the user didn't ask for`;
307
+ }
308
+ // ── Tool call parser ───────────────────────────────────────────
309
+ function parseToolCall(text) {
310
+ const match = text.match(/```tool\s*([\s\S]*?)\s*```/);
311
+ if (!match)
312
+ return null;
313
+ try {
314
+ const parsed = JSON.parse(match[1]);
315
+ if (parsed.tool && parsed.params !== undefined)
316
+ return parsed;
317
+ return null;
318
+ }
319
+ catch {
320
+ return null;
321
+ }
322
+ }
323
+ // ── Execute with validation ────────────────────────────────────
324
+ async function executeTool(call, ctx) {
325
+ const tool = exports.TOOL_MAP[call.tool];
326
+ if (!tool)
327
+ return { success: false, output: '', error: `Unknown tool: ${call.tool}` };
328
+ // Zod validate
329
+ const parsed = tool.schema.safeParse(call.params);
330
+ if (!parsed.success) {
331
+ return {
332
+ success: false,
333
+ output: '',
334
+ error: `Invalid params: ${parsed.error.issues.map((i) => i.message).join(', ')}`
335
+ };
336
+ }
337
+ // Permission check
338
+ if (tool.permission.mode === 'deny') {
339
+ return { success: false, output: '', error: 'Tool is disabled (deny mode)' };
340
+ }
341
+ if (tool.permission.mode === 'ask') {
342
+ const allowed = await ctx.confirm(`Allow: ${call.tool} ${JSON.stringify(call.params)}`);
343
+ if (!allowed)
344
+ return { success: false, output: '', error: 'Denied by user' };
345
+ }
346
+ return await tool.execute(parsed.data, ctx);
347
+ }
348
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dlnk/cli",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "AI Agent CLI \u2014 Powered by dLNk",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -26,7 +26,8 @@
26
26
  "commander": "^14.0.3",
27
27
  "figlet": "^1.11.0",
28
28
  "node-fetch": "^3.3.2",
29
- "ora": "^9.3.0"
29
+ "ora": "^9.3.0",
30
+ "zod": "^4.3.6"
30
31
  },
31
32
  "devDependencies": {
32
33
  "@types/node": "^25.5.2",