jiva-core 0.3.3 → 0.3.4-dev.3c78d8b
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 +232 -570
- package/dist/code/agent.d.ts +105 -0
- package/dist/code/agent.d.ts.map +1 -0
- package/dist/code/agent.js +697 -0
- package/dist/code/agent.js.map +1 -0
- package/dist/code/file-lock.d.ts +15 -0
- package/dist/code/file-lock.d.ts.map +1 -0
- package/dist/code/file-lock.js +36 -0
- package/dist/code/file-lock.js.map +1 -0
- package/dist/code/lsp/client.d.ts +30 -0
- package/dist/code/lsp/client.d.ts.map +1 -0
- package/dist/code/lsp/client.js +181 -0
- package/dist/code/lsp/client.js.map +1 -0
- package/dist/code/lsp/language.d.ts +12 -0
- package/dist/code/lsp/language.d.ts.map +1 -0
- package/dist/code/lsp/language.js +145 -0
- package/dist/code/lsp/language.js.map +1 -0
- package/dist/code/lsp/manager.d.ts +39 -0
- package/dist/code/lsp/manager.d.ts.map +1 -0
- package/dist/code/lsp/manager.js +108 -0
- package/dist/code/lsp/manager.js.map +1 -0
- package/dist/code/lsp/server.d.ts +15 -0
- package/dist/code/lsp/server.d.ts.map +1 -0
- package/dist/code/lsp/server.js +78 -0
- package/dist/code/lsp/server.js.map +1 -0
- package/dist/code/tools/bash.d.ts +3 -0
- package/dist/code/tools/bash.d.ts.map +1 -0
- package/dist/code/tools/bash.js +110 -0
- package/dist/code/tools/bash.js.map +1 -0
- package/dist/code/tools/edit.d.ts +11 -0
- package/dist/code/tools/edit.d.ts.map +1 -0
- package/dist/code/tools/edit.js +459 -0
- package/dist/code/tools/edit.js.map +1 -0
- package/dist/code/tools/glob.d.ts +3 -0
- package/dist/code/tools/glob.d.ts.map +1 -0
- package/dist/code/tools/glob.js +62 -0
- package/dist/code/tools/glob.js.map +1 -0
- package/dist/code/tools/grep.d.ts +3 -0
- package/dist/code/tools/grep.d.ts.map +1 -0
- package/dist/code/tools/grep.js +147 -0
- package/dist/code/tools/grep.js.map +1 -0
- package/dist/code/tools/index.d.ts +31 -0
- package/dist/code/tools/index.d.ts.map +1 -0
- package/dist/code/tools/index.js +9 -0
- package/dist/code/tools/index.js.map +1 -0
- package/dist/code/tools/read.d.ts +3 -0
- package/dist/code/tools/read.d.ts.map +1 -0
- package/dist/code/tools/read.js +120 -0
- package/dist/code/tools/read.js.map +1 -0
- package/dist/code/tools/spawn.d.ts +3 -0
- package/dist/code/tools/spawn.d.ts.map +1 -0
- package/dist/code/tools/spawn.js +49 -0
- package/dist/code/tools/spawn.js.map +1 -0
- package/dist/code/tools/write.d.ts +3 -0
- package/dist/code/tools/write.d.ts.map +1 -0
- package/dist/code/tools/write.js +82 -0
- package/dist/code/tools/write.js.map +1 -0
- package/dist/core/agent-interface.d.ts +54 -0
- package/dist/core/agent-interface.d.ts.map +1 -0
- package/dist/core/agent-interface.js +8 -0
- package/dist/core/agent-interface.js.map +1 -0
- package/dist/core/config.d.ts +71 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +16 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/conversation-manager.d.ts +4 -1
- package/dist/core/conversation-manager.d.ts.map +1 -1
- package/dist/core/conversation-manager.js +47 -17
- package/dist/core/conversation-manager.js.map +1 -1
- package/dist/core/dual-agent.d.ts +3 -10
- package/dist/core/dual-agent.d.ts.map +1 -1
- package/dist/core/dual-agent.js +42 -117
- package/dist/core/dual-agent.js.map +1 -1
- package/dist/core/manager-agent.d.ts +30 -1
- package/dist/core/manager-agent.d.ts.map +1 -1
- package/dist/core/manager-agent.js +109 -17
- package/dist/core/manager-agent.js.map +1 -1
- package/dist/core/worker-agent.d.ts +5 -2
- package/dist/core/worker-agent.d.ts.map +1 -1
- package/dist/core/worker-agent.js +48 -51
- package/dist/core/worker-agent.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/cli/index.js +88 -25
- package/dist/interfaces/cli/index.js.map +1 -1
- package/dist/interfaces/cli/repl.d.ts +8 -2
- package/dist/interfaces/cli/repl.d.ts.map +1 -1
- package/dist/interfaces/cli/repl.js +39 -3
- package/dist/interfaces/cli/repl.js.map +1 -1
- package/dist/interfaces/http/routes/chat.js +2 -2
- package/dist/interfaces/http/routes/chat.js.map +1 -1
- package/dist/interfaces/http/session-manager.d.ts +7 -4
- package/dist/interfaces/http/session-manager.d.ts.map +1 -1
- package/dist/interfaces/http/session-manager.js +38 -15
- package/dist/interfaces/http/session-manager.js.map +1 -1
- package/dist/models/base.d.ts +8 -0
- package/dist/models/base.d.ts.map +1 -1
- package/dist/models/harmony.d.ts +7 -1
- package/dist/models/harmony.d.ts.map +1 -1
- package/dist/models/harmony.js +21 -3
- package/dist/models/harmony.js.map +1 -1
- package/dist/models/krutrim.d.ts +30 -0
- package/dist/models/krutrim.d.ts.map +1 -1
- package/dist/models/krutrim.js +51 -8
- package/dist/models/krutrim.js.map +1 -1
- package/package.json +8 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/code/lsp/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ChildProcessWithoutNullStreams } from 'child_process';
|
|
2
|
+
export interface LspServerHandle {
|
|
3
|
+
process: ChildProcessWithoutNullStreams;
|
|
4
|
+
initialization?: Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Attempt to spawn a language server for the given server ID.
|
|
8
|
+
* Returns the handle if successful, undefined if the server is not installed.
|
|
9
|
+
*/
|
|
10
|
+
export declare function spawnLspServer(serverId: string): LspServerHandle | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Check which language servers are available on this system.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getAvailableServers(): string[];
|
|
15
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/code/lsp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAG3E,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,8BAA8B,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AA6CD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAyB5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAK9C"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
/**
|
|
4
|
+
* Find the path of an executable in PATH.
|
|
5
|
+
* Returns undefined if not found.
|
|
6
|
+
*/
|
|
7
|
+
function which(cmd) {
|
|
8
|
+
try {
|
|
9
|
+
const result = execSync(`which ${cmd} 2>/dev/null`, { encoding: 'utf-8' }).trim();
|
|
10
|
+
return result || undefined;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Per-server configurations: how to detect and launch each language server.
|
|
18
|
+
*/
|
|
19
|
+
const SERVER_CONFIGS = {
|
|
20
|
+
typescript: {
|
|
21
|
+
detect: () => which('typescript-language-server'),
|
|
22
|
+
args: () => ['--stdio'],
|
|
23
|
+
},
|
|
24
|
+
python: {
|
|
25
|
+
detect: () => which('pylsp') ?? which('pyright-langserver') ?? which('pyls'),
|
|
26
|
+
args: (binary) => binary.endsWith('pyright-langserver') ? ['--stdio'] : [],
|
|
27
|
+
},
|
|
28
|
+
go: {
|
|
29
|
+
detect: () => which('gopls'),
|
|
30
|
+
args: () => ['serve'],
|
|
31
|
+
},
|
|
32
|
+
rust: {
|
|
33
|
+
detect: () => which('rust-analyzer'),
|
|
34
|
+
args: () => [],
|
|
35
|
+
},
|
|
36
|
+
ruby: {
|
|
37
|
+
detect: () => which('solargraph'),
|
|
38
|
+
args: () => ['stdio'],
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Attempt to spawn a language server for the given server ID.
|
|
43
|
+
* Returns the handle if successful, undefined if the server is not installed.
|
|
44
|
+
*/
|
|
45
|
+
export function spawnLspServer(serverId) {
|
|
46
|
+
const config = SERVER_CONFIGS[serverId];
|
|
47
|
+
if (!config)
|
|
48
|
+
return undefined;
|
|
49
|
+
const binary = config.detect();
|
|
50
|
+
if (!binary)
|
|
51
|
+
return undefined;
|
|
52
|
+
const args = config.args(binary);
|
|
53
|
+
try {
|
|
54
|
+
const proc = spawn(binary, args, {
|
|
55
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
56
|
+
env: { ...process.env },
|
|
57
|
+
});
|
|
58
|
+
// Swallow stderr to avoid polluting Jiva's output
|
|
59
|
+
proc.stderr.resume();
|
|
60
|
+
return {
|
|
61
|
+
process: proc,
|
|
62
|
+
initialization: config.initialization,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check which language servers are available on this system.
|
|
71
|
+
*/
|
|
72
|
+
export function getAvailableServers() {
|
|
73
|
+
return Object.keys(SERVER_CONFIGS).filter((id) => {
|
|
74
|
+
const config = SERVER_CONFIGS[id];
|
|
75
|
+
return config.detect() !== undefined;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/code/lsp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAuC,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOzC;;;GAGG;AACH,SAAS,KAAK,CAAC,GAAW;IACxB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,GAAG,cAAc,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAClF,OAAO,MAAM,IAAI,SAAS,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,cAAc,GAIf;IACH,UAAU,EAAE;QACV,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC;QACjD,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC;KACxB;IACD,MAAM,EAAE;QACN,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;QAC5E,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;KAC3E;IACD,EAAE,EAAE;QACF,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC;KACtB;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC;QACpC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;KACf;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC;QACjC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC;KACtB;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAC/B,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE;YAC/B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QAEH,kDAAkD;QAClD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAErB,OAAO;YACL,OAAO,EAAE,IAAsC;YAC/C,cAAc,EAAE,MAAM,CAAC,cAAc;SACtC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC,MAAM,EAAE,KAAK,SAAS,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../src/code/tools/bash.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,YAAY,CAAC;AAS7D,eAAO,MAAM,QAAQ,EAAE,SAwEtB,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
const DEFAULT_TIMEOUT = 30_000; // 30s
|
|
3
|
+
const MAX_TIMEOUT = 300_000; // 5 min
|
|
4
|
+
// Output limits — same as read_file to keep model context manageable
|
|
5
|
+
const MAX_OUTPUT_LINES = 2000;
|
|
6
|
+
const MAX_OUTPUT_BYTES = 50 * 1024; // 50KB
|
|
7
|
+
export const BashTool = {
|
|
8
|
+
name: 'bash',
|
|
9
|
+
description: `Execute a shell command in the workspace directory.
|
|
10
|
+
|
|
11
|
+
REQUIRED parameter: "command" (string) — the shell command to run.
|
|
12
|
+
Example: {"command": "git status"}
|
|
13
|
+
Example: {"command": "npm test", "timeout_ms": 60000}
|
|
14
|
+
|
|
15
|
+
Do NOT pass "path", "limit", "offset", or "query" to this tool — use read_file or grep for those.
|
|
16
|
+
|
|
17
|
+
Use for:
|
|
18
|
+
- Running build commands (npm run build, go build, cargo build)
|
|
19
|
+
- Running tests (npm test, pytest, go test ./...)
|
|
20
|
+
- Running linters (eslint, pylint, ruff)
|
|
21
|
+
- Git operations (git status, git diff --staged)
|
|
22
|
+
- Installing dependencies
|
|
23
|
+
|
|
24
|
+
Returns: stdout + stderr combined, plus exit code.
|
|
25
|
+
Commands timeout after ${DEFAULT_TIMEOUT / 1000}s by default (configurable up to ${MAX_TIMEOUT / 1000}s).
|
|
26
|
+
Output is truncated at ${MAX_OUTPUT_LINES} lines / ${MAX_OUTPUT_BYTES / 1024}KB.`,
|
|
27
|
+
parameters: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: {
|
|
30
|
+
command: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
description: 'Shell command to execute (e.g. "git diff --staged", "npm test")',
|
|
33
|
+
},
|
|
34
|
+
timeout_ms: {
|
|
35
|
+
type: 'number',
|
|
36
|
+
description: `Timeout in milliseconds (default: ${DEFAULT_TIMEOUT}, max: ${MAX_TIMEOUT})`,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
required: ['command'],
|
|
40
|
+
},
|
|
41
|
+
async execute(args, ctx) {
|
|
42
|
+
const command = args.command;
|
|
43
|
+
const timeout = Math.min(args.timeout_ms || DEFAULT_TIMEOUT, MAX_TIMEOUT);
|
|
44
|
+
return new Promise((resolve) => {
|
|
45
|
+
const proc = exec(command, {
|
|
46
|
+
cwd: ctx.workspaceDir,
|
|
47
|
+
timeout,
|
|
48
|
+
maxBuffer: 10 * 1024 * 1024, // 10MB raw buffer; we truncate before returning
|
|
49
|
+
env: { ...process.env },
|
|
50
|
+
}, (error, stdout, stderr) => {
|
|
51
|
+
const output = [];
|
|
52
|
+
if (stdout.trim())
|
|
53
|
+
output.push(stdout.trim());
|
|
54
|
+
if (stderr.trim())
|
|
55
|
+
output.push(`[stderr]\n${stderr.trim()}`);
|
|
56
|
+
if (error) {
|
|
57
|
+
if (error.killed) {
|
|
58
|
+
output.push(`\n[Command timed out after ${timeout / 1000}s]`);
|
|
59
|
+
}
|
|
60
|
+
else if (error.code !== undefined && error.code !== 0) {
|
|
61
|
+
output.push(`\n[Exit code: ${error.code}]`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const raw = output.join('\n') || '(no output)';
|
|
65
|
+
resolve(truncateOutput(raw));
|
|
66
|
+
});
|
|
67
|
+
// Abort signal support
|
|
68
|
+
if (ctx.signal) {
|
|
69
|
+
ctx.signal.addEventListener('abort', () => {
|
|
70
|
+
try {
|
|
71
|
+
proc.kill();
|
|
72
|
+
}
|
|
73
|
+
catch { /* ignore */ }
|
|
74
|
+
}, { once: true });
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Truncate command output to MAX_OUTPUT_LINES lines and MAX_OUTPUT_BYTES bytes.
|
|
81
|
+
* Mirrors the limits in read_file so the model context stays manageable.
|
|
82
|
+
* Truncation note is appended so the model knows output was cut.
|
|
83
|
+
*/
|
|
84
|
+
function truncateOutput(text) {
|
|
85
|
+
// Byte limit first — apply to raw text
|
|
86
|
+
let result = text;
|
|
87
|
+
let bytesTruncated = false;
|
|
88
|
+
if (Buffer.byteLength(result, 'utf-8') > MAX_OUTPUT_BYTES) {
|
|
89
|
+
// Slice to byte limit, then back up to the last complete line
|
|
90
|
+
const buf = Buffer.from(result, 'utf-8').subarray(0, MAX_OUTPUT_BYTES);
|
|
91
|
+
result = buf.toString('utf-8');
|
|
92
|
+
// Trim to last newline to avoid split multibyte char
|
|
93
|
+
const lastNl = result.lastIndexOf('\n');
|
|
94
|
+
if (lastNl > 0)
|
|
95
|
+
result = result.substring(0, lastNl);
|
|
96
|
+
bytesTruncated = true;
|
|
97
|
+
}
|
|
98
|
+
// Line limit
|
|
99
|
+
const lines = result.split('\n');
|
|
100
|
+
if (lines.length > MAX_OUTPUT_LINES) {
|
|
101
|
+
const kept = lines.slice(0, MAX_OUTPUT_LINES);
|
|
102
|
+
const dropped = lines.length - MAX_OUTPUT_LINES;
|
|
103
|
+
result = kept.join('\n') + `\n\n[Output truncated: ${dropped} more line(s) not shown. Narrow the command or redirect output to a file.]`;
|
|
104
|
+
}
|
|
105
|
+
else if (bytesTruncated) {
|
|
106
|
+
result += `\n\n[Output truncated at ${MAX_OUTPUT_BYTES / 1024}KB. Redirect output to a file to capture everything.]`;
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=bash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../src/code/tools/bash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edit tool — multi-strategy text replacement with LSP diagnostics.
|
|
3
|
+
*
|
|
4
|
+
* The replacement strategies are ported from opencode (https://github.com/sst/opencode),
|
|
5
|
+
* which in turn sourced them from cline and gemini-cli.
|
|
6
|
+
*/
|
|
7
|
+
import type { ICodeTool } from './index.js';
|
|
8
|
+
export declare const EditFileTool: ICodeTool;
|
|
9
|
+
/** Apply the first matching replacement strategy. */
|
|
10
|
+
export declare function replace(content: string, oldString: string, newString: string, replaceAll?: boolean): string;
|
|
11
|
+
//# sourceMappingURL=edit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../src/code/tools/edit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,YAAY,CAAC;AAI7D,eAAO,MAAM,YAAY,EAAE,SAwI1B,CAAC;AA2OF,qDAAqD;AACrD,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG,MAAM,CAiCzG"}
|