@iambarryking/ag 3.2.5 → 4.2.1
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/README.md +14 -3
- package/dist/cli/repl.d.ts.map +1 -1
- package/dist/cli/repl.js +76 -9
- package/dist/cli/repl.js.map +1 -1
- package/dist/core/agent.d.ts +13 -0
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +177 -22
- package/dist/core/agent.js.map +1 -1
- package/dist/core/context.d.ts +18 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +99 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/types.d.ts +5 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/memory/memory.d.ts +3 -0
- package/dist/memory/memory.d.ts.map +1 -1
- package/dist/memory/memory.js +43 -2
- package/dist/memory/memory.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +58 -15
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/file.d.ts +7 -0
- package/dist/tools/file.d.ts.map +1 -0
- package/dist/tools/file.js +173 -0
- package/dist/tools/file.js.map +1 -0
- package/dist/tools/git.d.ts.map +1 -1
- package/dist/tools/git.js +54 -52
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/grep.d.ts +8 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +279 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/plan.d.ts.map +1 -1
- package/dist/tools/plan.js +20 -4
- package/dist/tools/plan.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/memory/memory.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/memory/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/bash.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAqBxC,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAiEjD"}
|
package/dist/tools/bash.js
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bash tool - the universal interface for system operations
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { spawn } from 'node:child_process';
|
|
5
|
+
const MAX_BUFFER = 1024 * 1024; // 1 MB
|
|
6
|
+
const DANGEROUS_PATTERNS = [
|
|
7
|
+
{ pattern: /\bfind\s+[~\/](?![\w.])/, message: 'Blocked: `find` on home/root directory. Use the grep tool (action=find) to search for files, or scope to a specific subdirectory.' },
|
|
8
|
+
{ pattern: /\brm\s+(-[a-zA-Z]*r[a-zA-Z]*)?\s*-[a-zA-Z]*f[a-zA-Z]*\s+[~\/]\s*/, message: 'Blocked: destructive `rm` targeting home or root directory.' },
|
|
9
|
+
{ pattern: /\brm\s+(-[a-zA-Z]*f[a-zA-Z]*)?\s*-[a-zA-Z]*r[a-zA-Z]*\s+[~\/]\s*/, message: 'Blocked: destructive `rm` targeting home or root directory.' },
|
|
10
|
+
{ pattern: /:\(\)\{.*:\|:/, message: 'Blocked: fork bomb detected.' },
|
|
11
|
+
{ pattern: /\bdd\b.*\bof=\/dev\//, message: 'Blocked: dd write to device.' },
|
|
12
|
+
{ pattern: /\bmkfs\b/, message: 'Blocked: filesystem format command.' },
|
|
13
|
+
{ pattern: /\b(chmod|chown)\s+-[a-zA-Z]*R[a-zA-Z]*\s+[~\/]\s*/, message: 'Blocked: recursive permission change on home/root.' },
|
|
14
|
+
];
|
|
15
|
+
function checkCommand(command) {
|
|
16
|
+
for (const { pattern, message } of DANGEROUS_PATTERNS) {
|
|
17
|
+
if (pattern.test(command))
|
|
18
|
+
return `Error: ${message}`;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
5
22
|
export function bashToolFactory(cwd) {
|
|
6
23
|
return {
|
|
7
24
|
type: 'function',
|
|
@@ -20,22 +37,48 @@ export function bashToolFactory(cwd) {
|
|
|
20
37
|
}
|
|
21
38
|
},
|
|
22
39
|
execute: ({ command }) => {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
40
|
+
const blocked = checkCommand(command);
|
|
41
|
+
if (blocked)
|
|
42
|
+
return Promise.resolve(blocked);
|
|
43
|
+
return new Promise((resolve) => {
|
|
44
|
+
const child = spawn('sh', ['-c', command], {
|
|
27
45
|
cwd,
|
|
28
|
-
encoding: 'utf-8',
|
|
29
46
|
timeout: 60_000,
|
|
30
|
-
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
47
|
+
stdio: ['pipe', 'pipe', 'pipe']
|
|
48
|
+
});
|
|
49
|
+
let stdout = '';
|
|
50
|
+
let stderr = '';
|
|
51
|
+
let stdoutOverflow = false;
|
|
52
|
+
child.stdout.on('data', (chunk) => {
|
|
53
|
+
if (stdout.length < MAX_BUFFER) {
|
|
54
|
+
stdout += chunk.toString();
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
stdoutOverflow = true;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
child.stderr.on('data', (chunk) => {
|
|
61
|
+
if (stderr.length < MAX_BUFFER) {
|
|
62
|
+
stderr += chunk.toString();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
child.on('close', (code) => {
|
|
66
|
+
let result = stdout.trim();
|
|
67
|
+
if (stdoutOverflow) {
|
|
68
|
+
result += '\n... (output truncated at 1MB)';
|
|
69
|
+
}
|
|
70
|
+
if (code === 0) {
|
|
71
|
+
resolve(result);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const status = code ?? 1;
|
|
75
|
+
resolve(`EXIT ${status}\n${(stdout + stderr).trim()}`);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
child.on('error', (err) => {
|
|
79
|
+
resolve(`EXIT 1\n${err.message}`);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
39
82
|
}
|
|
40
83
|
};
|
|
41
84
|
}
|
package/dist/tools/bash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/tools/file.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AA4HxC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CA6B1C"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File tool — read files and list directories
|
|
3
|
+
* Prevents the model from falling back to bash for cat/head/tail/ls.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, readdirSync, statSync, openSync, readSync, closeSync } from 'node:fs';
|
|
6
|
+
import { resolve, extname } from 'node:path';
|
|
7
|
+
const MAX_READ_BYTES = 100 * 1024; // 100 KB text cap
|
|
8
|
+
const MAX_LIST_ENTRIES = 200;
|
|
9
|
+
const MAX_LIST_DEPTH = 3;
|
|
10
|
+
const DEFAULT_IGNORE = new Set([
|
|
11
|
+
'.git', 'node_modules', 'dist', 'build', '.next', '.nuxt',
|
|
12
|
+
'coverage', '.cache', '__pycache__', '.venv', 'venv',
|
|
13
|
+
]);
|
|
14
|
+
function isBinary(filePath) {
|
|
15
|
+
try {
|
|
16
|
+
const fd = openSync(filePath, 'r');
|
|
17
|
+
const buf = Buffer.alloc(512);
|
|
18
|
+
const bytesRead = readSync(fd, buf, 0, 512, 0);
|
|
19
|
+
closeSync(fd);
|
|
20
|
+
for (let i = 0; i < bytesRead; i++) {
|
|
21
|
+
if (buf[i] === 0)
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function formatSize(bytes) {
|
|
31
|
+
if (bytes < 1024)
|
|
32
|
+
return `${bytes}B`;
|
|
33
|
+
if (bytes < 1024 * 1024)
|
|
34
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
35
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
36
|
+
}
|
|
37
|
+
function doRead(cwd, path, offset, limit) {
|
|
38
|
+
const resolved = resolve(cwd, path);
|
|
39
|
+
let stat;
|
|
40
|
+
try {
|
|
41
|
+
stat = statSync(resolved);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
if (e.code === 'ENOENT')
|
|
45
|
+
return `Error: file not found — ${path}. Use grep(action=find) or file(action=list) to discover the correct filename.`;
|
|
46
|
+
if (e.code === 'EACCES')
|
|
47
|
+
return `Error: permission denied — ${path}`;
|
|
48
|
+
return `Error: ${e.message}`;
|
|
49
|
+
}
|
|
50
|
+
if (stat.isDirectory())
|
|
51
|
+
return `Error: "${path}" is a directory. Use action=list instead.`;
|
|
52
|
+
if (isBinary(resolved)) {
|
|
53
|
+
const ext = extname(resolved);
|
|
54
|
+
return `Binary file (${formatSize(stat.size)} ${ext || 'unknown type'}). Use bash with an appropriate tool (e.g. pdftotext, xxd, strings) to inspect.`;
|
|
55
|
+
}
|
|
56
|
+
let content;
|
|
57
|
+
try {
|
|
58
|
+
content = readFileSync(resolved, 'utf-8');
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
return `Error: ${e.message}`;
|
|
62
|
+
}
|
|
63
|
+
const lines = content.split('\n');
|
|
64
|
+
const start = Math.max(0, (offset ?? 1) - 1);
|
|
65
|
+
const count = limit ?? lines.length;
|
|
66
|
+
const slice = lines.slice(start, start + count);
|
|
67
|
+
// Check if we need to truncate by byte size
|
|
68
|
+
let totalBytes = 0;
|
|
69
|
+
let truncIdx = slice.length;
|
|
70
|
+
for (let i = 0; i < slice.length; i++) {
|
|
71
|
+
totalBytes += slice[i].length + 1;
|
|
72
|
+
if (totalBytes > MAX_READ_BYTES) {
|
|
73
|
+
truncIdx = i;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const output = slice.slice(0, truncIdx);
|
|
78
|
+
const numbered = output.map((line, i) => `${String(start + i + 1).padStart(6)}\t${line}`);
|
|
79
|
+
let result = numbered.join('\n');
|
|
80
|
+
if (truncIdx < slice.length) {
|
|
81
|
+
result += `\n... (truncated at 100KB — showing lines ${start + 1}-${start + truncIdx} of ${lines.length} total)`;
|
|
82
|
+
}
|
|
83
|
+
else if (start + count < lines.length && !limit) {
|
|
84
|
+
// no truncation needed
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
function doList(cwd, path, maxDepth) {
|
|
89
|
+
const resolved = resolve(cwd, path);
|
|
90
|
+
const entries = [];
|
|
91
|
+
let count = 0;
|
|
92
|
+
function walk(dir, depth, prefix) {
|
|
93
|
+
if (depth > maxDepth || count >= MAX_LIST_ENTRIES)
|
|
94
|
+
return;
|
|
95
|
+
let items;
|
|
96
|
+
try {
|
|
97
|
+
items = readdirSync(dir, { withFileTypes: true });
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// Sort: dirs first, then files
|
|
103
|
+
items.sort((a, b) => {
|
|
104
|
+
if (a.isDirectory() && !b.isDirectory())
|
|
105
|
+
return -1;
|
|
106
|
+
if (!a.isDirectory() && b.isDirectory())
|
|
107
|
+
return 1;
|
|
108
|
+
return a.name.localeCompare(b.name);
|
|
109
|
+
});
|
|
110
|
+
for (const item of items) {
|
|
111
|
+
if (count >= MAX_LIST_ENTRIES)
|
|
112
|
+
break;
|
|
113
|
+
if (DEFAULT_IGNORE.has(item.name))
|
|
114
|
+
continue;
|
|
115
|
+
if (item.name.startsWith('.') && item.name !== '.')
|
|
116
|
+
continue;
|
|
117
|
+
const full = resolve(dir, item.name);
|
|
118
|
+
if (item.isDirectory()) {
|
|
119
|
+
entries.push(`${prefix}[dir] ${item.name}/`);
|
|
120
|
+
count++;
|
|
121
|
+
if (depth < maxDepth)
|
|
122
|
+
walk(full, depth + 1, prefix + ' ');
|
|
123
|
+
}
|
|
124
|
+
else if (item.isFile()) {
|
|
125
|
+
try {
|
|
126
|
+
const s = statSync(full);
|
|
127
|
+
entries.push(`${prefix}${item.name} (${formatSize(s.size)})`);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
entries.push(`${prefix}${item.name}`);
|
|
131
|
+
}
|
|
132
|
+
count++;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
walk(resolved, 1, '');
|
|
137
|
+
if (entries.length === 0)
|
|
138
|
+
return 'Empty directory.';
|
|
139
|
+
let result = entries.join('\n');
|
|
140
|
+
if (count >= MAX_LIST_ENTRIES)
|
|
141
|
+
result += `\n... (${MAX_LIST_ENTRIES} entries shown. Narrow with path.)`;
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
export function fileTool(cwd) {
|
|
145
|
+
return {
|
|
146
|
+
type: 'function',
|
|
147
|
+
function: {
|
|
148
|
+
name: 'file',
|
|
149
|
+
description: 'Read file contents or list directory entries. Actions: read (view a file with line numbers), list (show directory tree).',
|
|
150
|
+
parameters: {
|
|
151
|
+
type: 'object',
|
|
152
|
+
properties: {
|
|
153
|
+
action: { type: 'string', enum: ['read', 'list'], description: 'read = view file contents, list = directory listing.' },
|
|
154
|
+
path: { type: 'string', description: 'File or directory path (relative to project root, or absolute).' },
|
|
155
|
+
offset: { type: 'number', description: 'Line number to start reading from (read only, default: 1).' },
|
|
156
|
+
limit: { type: 'number', description: 'Max lines to return (read only). Omit to read entire file.' },
|
|
157
|
+
depth: { type: 'number', description: 'Directory depth for list (default: 2, max: 3).' },
|
|
158
|
+
},
|
|
159
|
+
required: ['action', 'path']
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
execute: async ({ action, path, offset, limit, depth }) => {
|
|
163
|
+
if (!path)
|
|
164
|
+
return 'Error: path is required.';
|
|
165
|
+
switch (action) {
|
|
166
|
+
case 'read': return doRead(cwd, path, offset, limit);
|
|
167
|
+
case 'list': return doList(cwd, path, Math.min(depth ?? 2, MAX_LIST_DEPTH));
|
|
168
|
+
default: return `Unknown action "${action}". Use: read, list.`;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/tools/file.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/tools/git.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/tools/git.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AA8LxC,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAsCzC"}
|
package/dist/tools/git.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
2
3
|
import { existsSync } from 'node:fs';
|
|
3
4
|
import { join } from 'node:path';
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
const execFileAsync = promisify(execFile);
|
|
6
|
+
async function run(args, cwd) {
|
|
7
|
+
const { stdout } = await execFileAsync('git', args, { cwd, encoding: 'utf-8', timeout: 30_000 });
|
|
8
|
+
return stdout.trim();
|
|
6
9
|
}
|
|
7
|
-
function tryRun(args, cwd) {
|
|
10
|
+
async function tryRun(args, cwd) {
|
|
8
11
|
try {
|
|
9
|
-
return { ok: true, out: run(args, cwd) };
|
|
12
|
+
return { ok: true, out: await run(args, cwd) };
|
|
10
13
|
}
|
|
11
14
|
catch (e) {
|
|
12
15
|
return { ok: false, out: ((e.stdout ?? '') + (e.stderr ?? '')).trim() };
|
|
@@ -15,11 +18,11 @@ function tryRun(args, cwd) {
|
|
|
15
18
|
function isRepo(cwd) {
|
|
16
19
|
return existsSync(join(cwd, '.git'));
|
|
17
20
|
}
|
|
18
|
-
function defaultBranch(cwd) {
|
|
19
|
-
const ref = tryRun(['symbolic-ref', 'refs/remotes/origin/HEAD'], cwd);
|
|
21
|
+
async function defaultBranch(cwd) {
|
|
22
|
+
const ref = await tryRun(['symbolic-ref', 'refs/remotes/origin/HEAD'], cwd);
|
|
20
23
|
if (ref.ok)
|
|
21
24
|
return ref.out.replace('refs/remotes/origin/', '');
|
|
22
|
-
const branches = tryRun(['branch', '-r'], cwd);
|
|
25
|
+
const branches = await tryRun(['branch', '-r'], cwd);
|
|
23
26
|
if (branches.ok) {
|
|
24
27
|
if (branches.out.includes('origin/main'))
|
|
25
28
|
return 'main';
|
|
@@ -28,38 +31,37 @@ function defaultBranch(cwd) {
|
|
|
28
31
|
}
|
|
29
32
|
return 'main';
|
|
30
33
|
}
|
|
31
|
-
function currentBranch(cwd) {
|
|
32
|
-
const result = tryRun(['rev-parse', '--abbrev-ref', 'HEAD'], cwd);
|
|
34
|
+
async function currentBranch(cwd) {
|
|
35
|
+
const result = await tryRun(['rev-parse', '--abbrev-ref', 'HEAD'], cwd);
|
|
33
36
|
if (result.ok)
|
|
34
37
|
return result.out;
|
|
35
|
-
|
|
36
|
-
const sym = tryRun(['symbolic-ref', '--short', 'HEAD'], cwd);
|
|
38
|
+
const sym = await tryRun(['symbolic-ref', '--short', 'HEAD'], cwd);
|
|
37
39
|
return sym.ok ? `${sym.out} (no commits yet)` : '(no commits yet)';
|
|
38
40
|
}
|
|
39
|
-
function remoteUrl(cwd) {
|
|
40
|
-
const r = tryRun(['remote', 'get-url', 'origin'], cwd);
|
|
41
|
+
async function remoteUrl(cwd) {
|
|
42
|
+
const r = await tryRun(['remote', 'get-url', 'origin'], cwd);
|
|
41
43
|
return r.ok ? r.out : '';
|
|
42
44
|
}
|
|
43
|
-
function compareUrl(cwd, branch) {
|
|
44
|
-
const remote = remoteUrl(cwd);
|
|
45
|
+
async function compareUrl(cwd, branch) {
|
|
46
|
+
const remote = await remoteUrl(cwd);
|
|
45
47
|
if (!remote)
|
|
46
48
|
return '';
|
|
47
|
-
const base = defaultBranch(cwd);
|
|
49
|
+
const base = await defaultBranch(cwd);
|
|
48
50
|
const url = remote
|
|
49
51
|
.replace(/^git@([^:]+):/, 'https://$1/')
|
|
50
52
|
.replace(/\.git$/, '');
|
|
51
53
|
return `${url}/compare/${base}...${branch}`;
|
|
52
54
|
}
|
|
53
55
|
// ── Action handlers ────────────────────────────────────────────────────────
|
|
54
|
-
function doStatus(cwd) {
|
|
56
|
+
async function doStatus(cwd) {
|
|
55
57
|
if (!isRepo(cwd))
|
|
56
58
|
return 'Not a git repository. Use action=init first.';
|
|
57
59
|
const lines = [];
|
|
58
|
-
lines.push(`Branch: ${currentBranch(cwd)}`);
|
|
59
|
-
const remote = remoteUrl(cwd);
|
|
60
|
+
lines.push(`Branch: ${await currentBranch(cwd)}`);
|
|
61
|
+
const remote = await remoteUrl(cwd);
|
|
60
62
|
if (remote)
|
|
61
63
|
lines.push(`Remote: ${remote}`);
|
|
62
|
-
const status = run(['status', '--porcelain'], cwd);
|
|
64
|
+
const status = await run(['status', '--porcelain'], cwd);
|
|
63
65
|
if (status) {
|
|
64
66
|
const files = status.split('\n');
|
|
65
67
|
const staged = files.filter(f => /^[MADRC]/.test(f)).length;
|
|
@@ -70,98 +72,98 @@ function doStatus(cwd) {
|
|
|
70
72
|
else {
|
|
71
73
|
lines.push('Working tree clean.');
|
|
72
74
|
}
|
|
73
|
-
const ahead = tryRun(['rev-list', '@{u}..HEAD', '--count'], cwd);
|
|
74
|
-
const behind = tryRun(['rev-list', 'HEAD..@{u}', '--count'], cwd);
|
|
75
|
+
const ahead = await tryRun(['rev-list', '@{u}..HEAD', '--count'], cwd);
|
|
76
|
+
const behind = await tryRun(['rev-list', 'HEAD..@{u}', '--count'], cwd);
|
|
75
77
|
if (ahead.ok && behind.ok) {
|
|
76
78
|
lines.push(`Ahead: ${ahead.out}, Behind: ${behind.out}`);
|
|
77
79
|
}
|
|
78
|
-
const log = tryRun(['log', '--oneline', '-5'], cwd);
|
|
80
|
+
const log = await tryRun(['log', '--oneline', '-5'], cwd);
|
|
79
81
|
if (log.ok && log.out)
|
|
80
82
|
lines.push(`\nRecent commits:\n${log.out}`);
|
|
81
83
|
return lines.join('\n');
|
|
82
84
|
}
|
|
83
|
-
function doInit(cwd, remote) {
|
|
85
|
+
async function doInit(cwd, remote) {
|
|
84
86
|
if (isRepo(cwd)) {
|
|
85
|
-
const branch = currentBranch(cwd);
|
|
86
|
-
const existing = remoteUrl(cwd);
|
|
87
|
+
const branch = await currentBranch(cwd);
|
|
88
|
+
const existing = await remoteUrl(cwd);
|
|
87
89
|
let msg = `Already a git repo. Branch: ${branch}`;
|
|
88
90
|
if (existing)
|
|
89
91
|
msg += `, Remote: ${existing}`;
|
|
90
92
|
if (remote && remote !== existing) {
|
|
91
|
-
tryRun(['remote', 'remove', 'origin'], cwd);
|
|
92
|
-
run(['remote', 'add', 'origin', remote], cwd);
|
|
93
|
+
await tryRun(['remote', 'remove', 'origin'], cwd);
|
|
94
|
+
await run(['remote', 'add', 'origin', remote], cwd);
|
|
93
95
|
msg += `\nRemote updated to: ${remote}`;
|
|
94
96
|
}
|
|
95
97
|
return msg;
|
|
96
98
|
}
|
|
97
|
-
run(['init'], cwd);
|
|
99
|
+
await run(['init'], cwd);
|
|
98
100
|
let msg = 'Initialized git repository.';
|
|
99
101
|
if (remote) {
|
|
100
|
-
run(['remote', 'add', 'origin', remote], cwd);
|
|
102
|
+
await run(['remote', 'add', 'origin', remote], cwd);
|
|
101
103
|
msg += ` Remote set to: ${remote}`;
|
|
102
104
|
}
|
|
103
105
|
return msg;
|
|
104
106
|
}
|
|
105
|
-
function doBranch(cwd, name) {
|
|
107
|
+
async function doBranch(cwd, name) {
|
|
106
108
|
if (!isRepo(cwd))
|
|
107
109
|
return 'Not a git repository. Use action=init first.';
|
|
108
110
|
const lines = [];
|
|
109
|
-
const status = run(['status', '--porcelain'], cwd);
|
|
111
|
+
const status = await run(['status', '--porcelain'], cwd);
|
|
110
112
|
if (status) {
|
|
111
113
|
lines.push(`Warning: ${status.split('\n').length} uncommitted change(s). Consider committing or stashing first.`);
|
|
112
114
|
}
|
|
113
|
-
const
|
|
114
|
-
if (
|
|
115
|
+
const fetchResult = await tryRun(['fetch', 'origin'], cwd);
|
|
116
|
+
if (fetchResult.ok) {
|
|
115
117
|
lines.push('Fetched latest from origin.');
|
|
116
118
|
}
|
|
117
119
|
else {
|
|
118
120
|
lines.push('Warning: Could not fetch from origin (no remote or offline). Branching from local state.');
|
|
119
121
|
}
|
|
120
|
-
const base = defaultBranch(cwd);
|
|
121
|
-
if (
|
|
122
|
-
tryRun(['checkout', base], cwd);
|
|
123
|
-
tryRun(['reset', '--hard', `origin/${base}`], cwd);
|
|
122
|
+
const base = await defaultBranch(cwd);
|
|
123
|
+
if (fetchResult.ok) {
|
|
124
|
+
await tryRun(['checkout', base], cwd);
|
|
125
|
+
await tryRun(['reset', '--hard', `origin/${base}`], cwd);
|
|
124
126
|
lines.push(`Updated local ${base} to origin/${base}.`);
|
|
125
127
|
}
|
|
126
|
-
const result = tryRun(['checkout', '-b', name], cwd);
|
|
128
|
+
const result = await tryRun(['checkout', '-b', name], cwd);
|
|
127
129
|
if (result.ok) {
|
|
128
130
|
lines.push(`Created and switched to branch: ${name}`);
|
|
129
131
|
}
|
|
130
132
|
else {
|
|
131
|
-
const sw = tryRun(['checkout', name], cwd);
|
|
133
|
+
const sw = await tryRun(['checkout', name], cwd);
|
|
132
134
|
lines.push(sw.ok
|
|
133
135
|
? `Branch ${name} already exists. Switched to it.`
|
|
134
136
|
: `Error creating branch: ${result.out}`);
|
|
135
137
|
}
|
|
136
138
|
return lines.join('\n');
|
|
137
139
|
}
|
|
138
|
-
function doCommit(cwd, message, files) {
|
|
140
|
+
async function doCommit(cwd, message, files) {
|
|
139
141
|
if (!isRepo(cwd))
|
|
140
142
|
return 'Not a git repository. Use action=init first.';
|
|
141
143
|
if (files && files.length > 0) {
|
|
142
|
-
run(['add', ...files], cwd);
|
|
144
|
+
await run(['add', ...files], cwd);
|
|
143
145
|
}
|
|
144
146
|
else {
|
|
145
|
-
run(['add', '-A'], cwd);
|
|
147
|
+
await run(['add', '-A'], cwd);
|
|
146
148
|
}
|
|
147
|
-
const staged = tryRun(['diff', '--cached', '--stat'], cwd);
|
|
149
|
+
const staged = await tryRun(['diff', '--cached', '--stat'], cwd);
|
|
148
150
|
if (!staged.out)
|
|
149
151
|
return 'Nothing to commit. Working tree clean.';
|
|
150
|
-
const result = tryRun(['commit', '-m', message], cwd);
|
|
152
|
+
const result = await tryRun(['commit', '-m', message], cwd);
|
|
151
153
|
return result.ok ? `Committed: ${message}\n${result.out}` : `Commit failed: ${result.out}`;
|
|
152
154
|
}
|
|
153
|
-
function doPush(cwd, force) {
|
|
155
|
+
async function doPush(cwd, force) {
|
|
154
156
|
if (!isRepo(cwd))
|
|
155
157
|
return 'Not a git repository. Use action=init first.';
|
|
156
|
-
const branch = currentBranch(cwd);
|
|
157
|
-
const base = defaultBranch(cwd);
|
|
158
|
+
const branch = await currentBranch(cwd);
|
|
159
|
+
const base = await defaultBranch(cwd);
|
|
158
160
|
if (branch === base) {
|
|
159
161
|
return `You're on ${base}. Create a feature branch first with action=branch.`;
|
|
160
162
|
}
|
|
161
163
|
const args = ['push', '-u', 'origin', branch];
|
|
162
164
|
if (force)
|
|
163
165
|
args.splice(1, 0, '--force-with-lease');
|
|
164
|
-
const result = tryRun(args, cwd);
|
|
166
|
+
const result = await tryRun(args, cwd);
|
|
165
167
|
const lines = [];
|
|
166
168
|
if (result.ok || result.out.includes('->')) {
|
|
167
169
|
lines.push(`Pushed ${branch} to origin.`);
|
|
@@ -169,7 +171,7 @@ function doPush(cwd, force) {
|
|
|
169
171
|
else {
|
|
170
172
|
return `Push failed: ${result.out}`;
|
|
171
173
|
}
|
|
172
|
-
const url = compareUrl(cwd, branch);
|
|
174
|
+
const url = await compareUrl(cwd, branch);
|
|
173
175
|
if (url)
|
|
174
176
|
lines.push(`\nCreate PR: ${url}`);
|
|
175
177
|
return lines.join('\n');
|
|
@@ -194,7 +196,7 @@ export function gitTool(cwd) {
|
|
|
194
196
|
required: ['action']
|
|
195
197
|
}
|
|
196
198
|
},
|
|
197
|
-
execute: ({ action, name, message, files, remote, force }) => {
|
|
199
|
+
execute: async ({ action, name, message, files, remote, force }) => {
|
|
198
200
|
switch (action) {
|
|
199
201
|
case 'status': return doStatus(cwd);
|
|
200
202
|
case 'init': return doInit(cwd, remote);
|
package/dist/tools/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/tools/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/tools/git.ts"],"names":[],"mappings":"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"}
|