jiva-core 0.3.3-dev.dc3cf03 → 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.
Files changed (118) hide show
  1. package/README.md +232 -570
  2. package/dist/code/agent.d.ts +105 -0
  3. package/dist/code/agent.d.ts.map +1 -0
  4. package/dist/code/agent.js +697 -0
  5. package/dist/code/agent.js.map +1 -0
  6. package/dist/code/file-lock.d.ts +15 -0
  7. package/dist/code/file-lock.d.ts.map +1 -0
  8. package/dist/code/file-lock.js +36 -0
  9. package/dist/code/file-lock.js.map +1 -0
  10. package/dist/code/lsp/client.d.ts +30 -0
  11. package/dist/code/lsp/client.d.ts.map +1 -0
  12. package/dist/code/lsp/client.js +181 -0
  13. package/dist/code/lsp/client.js.map +1 -0
  14. package/dist/code/lsp/language.d.ts +12 -0
  15. package/dist/code/lsp/language.d.ts.map +1 -0
  16. package/dist/code/lsp/language.js +145 -0
  17. package/dist/code/lsp/language.js.map +1 -0
  18. package/dist/code/lsp/manager.d.ts +39 -0
  19. package/dist/code/lsp/manager.d.ts.map +1 -0
  20. package/dist/code/lsp/manager.js +108 -0
  21. package/dist/code/lsp/manager.js.map +1 -0
  22. package/dist/code/lsp/server.d.ts +15 -0
  23. package/dist/code/lsp/server.d.ts.map +1 -0
  24. package/dist/code/lsp/server.js +78 -0
  25. package/dist/code/lsp/server.js.map +1 -0
  26. package/dist/code/tools/bash.d.ts +3 -0
  27. package/dist/code/tools/bash.d.ts.map +1 -0
  28. package/dist/code/tools/bash.js +110 -0
  29. package/dist/code/tools/bash.js.map +1 -0
  30. package/dist/code/tools/edit.d.ts +11 -0
  31. package/dist/code/tools/edit.d.ts.map +1 -0
  32. package/dist/code/tools/edit.js +459 -0
  33. package/dist/code/tools/edit.js.map +1 -0
  34. package/dist/code/tools/glob.d.ts +3 -0
  35. package/dist/code/tools/glob.d.ts.map +1 -0
  36. package/dist/code/tools/glob.js +62 -0
  37. package/dist/code/tools/glob.js.map +1 -0
  38. package/dist/code/tools/grep.d.ts +3 -0
  39. package/dist/code/tools/grep.d.ts.map +1 -0
  40. package/dist/code/tools/grep.js +147 -0
  41. package/dist/code/tools/grep.js.map +1 -0
  42. package/dist/code/tools/index.d.ts +31 -0
  43. package/dist/code/tools/index.d.ts.map +1 -0
  44. package/dist/code/tools/index.js +9 -0
  45. package/dist/code/tools/index.js.map +1 -0
  46. package/dist/code/tools/read.d.ts +3 -0
  47. package/dist/code/tools/read.d.ts.map +1 -0
  48. package/dist/code/tools/read.js +120 -0
  49. package/dist/code/tools/read.js.map +1 -0
  50. package/dist/code/tools/spawn.d.ts +3 -0
  51. package/dist/code/tools/spawn.d.ts.map +1 -0
  52. package/dist/code/tools/spawn.js +49 -0
  53. package/dist/code/tools/spawn.js.map +1 -0
  54. package/dist/code/tools/write.d.ts +3 -0
  55. package/dist/code/tools/write.d.ts.map +1 -0
  56. package/dist/code/tools/write.js +82 -0
  57. package/dist/code/tools/write.js.map +1 -0
  58. package/dist/core/agent-interface.d.ts +54 -0
  59. package/dist/core/agent-interface.d.ts.map +1 -0
  60. package/dist/core/agent-interface.js +8 -0
  61. package/dist/core/agent-interface.js.map +1 -0
  62. package/dist/core/client-agent.d.ts.map +1 -1
  63. package/dist/core/client-agent.js +26 -3
  64. package/dist/core/client-agent.js.map +1 -1
  65. package/dist/core/config.d.ts +144 -17
  66. package/dist/core/config.d.ts.map +1 -1
  67. package/dist/core/config.js +25 -1
  68. package/dist/core/config.js.map +1 -1
  69. package/dist/core/conversation-manager.d.ts +4 -1
  70. package/dist/core/conversation-manager.d.ts.map +1 -1
  71. package/dist/core/conversation-manager.js +47 -17
  72. package/dist/core/conversation-manager.js.map +1 -1
  73. package/dist/core/dual-agent.d.ts +3 -10
  74. package/dist/core/dual-agent.d.ts.map +1 -1
  75. package/dist/core/dual-agent.js +53 -119
  76. package/dist/core/dual-agent.js.map +1 -1
  77. package/dist/core/manager-agent.d.ts +30 -0
  78. package/dist/core/manager-agent.d.ts.map +1 -1
  79. package/dist/core/manager-agent.js +114 -14
  80. package/dist/core/manager-agent.js.map +1 -1
  81. package/dist/core/worker-agent.d.ts +12 -2
  82. package/dist/core/worker-agent.d.ts.map +1 -1
  83. package/dist/core/worker-agent.js +254 -67
  84. package/dist/core/worker-agent.js.map +1 -1
  85. package/dist/index.d.ts +3 -0
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +2 -0
  88. package/dist/index.js.map +1 -1
  89. package/dist/interfaces/cli/index.js +146 -25
  90. package/dist/interfaces/cli/index.js.map +1 -1
  91. package/dist/interfaces/cli/repl.d.ts +8 -2
  92. package/dist/interfaces/cli/repl.d.ts.map +1 -1
  93. package/dist/interfaces/cli/repl.js +39 -3
  94. package/dist/interfaces/cli/repl.js.map +1 -1
  95. package/dist/interfaces/cli/setup-wizard.d.ts.map +1 -1
  96. package/dist/interfaces/cli/setup-wizard.js +92 -0
  97. package/dist/interfaces/cli/setup-wizard.js.map +1 -1
  98. package/dist/interfaces/http/routes/chat.js +2 -2
  99. package/dist/interfaces/http/routes/chat.js.map +1 -1
  100. package/dist/interfaces/http/session-manager.d.ts +7 -4
  101. package/dist/interfaces/http/session-manager.d.ts.map +1 -1
  102. package/dist/interfaces/http/session-manager.js +56 -15
  103. package/dist/interfaces/http/session-manager.js.map +1 -1
  104. package/dist/models/base.d.ts +8 -0
  105. package/dist/models/base.d.ts.map +1 -1
  106. package/dist/models/harmony.d.ts +7 -1
  107. package/dist/models/harmony.d.ts.map +1 -1
  108. package/dist/models/harmony.js +21 -3
  109. package/dist/models/harmony.js.map +1 -1
  110. package/dist/models/krutrim.d.ts +31 -1
  111. package/dist/models/krutrim.d.ts.map +1 -1
  112. package/dist/models/krutrim.js +55 -11
  113. package/dist/models/krutrim.js.map +1 -1
  114. package/dist/models/orchestrator.d.ts +24 -0
  115. package/dist/models/orchestrator.d.ts.map +1 -1
  116. package/dist/models/orchestrator.js +40 -6
  117. package/dist/models/orchestrator.js.map +1 -1
  118. package/package.json +8 -5
@@ -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,3 @@
1
+ import type { ICodeTool } from './index.js';
2
+ export declare const BashTool: ICodeTool;
3
+ //# sourceMappingURL=bash.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGrC,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,MAAM;AACtC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,QAAQ;AAErC,qEAAqE;AACrE,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO;AAE3C,MAAM,CAAC,MAAM,QAAQ,GAAc;IACjC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE;;;;;;;;;;;;;;;;yBAgBU,eAAe,GAAG,IAAI,oCAAoC,WAAW,GAAG,IAAI;yBAC5E,gBAAgB,YAAY,gBAAgB,GAAG,IAAI,KAAK;IAE/E,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iEAAiE;aAC/E;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qCAAqC,eAAe,UAAU,WAAW,GAAG;aAC1F;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IAED,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAoB;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAE,IAAI,CAAC,UAAqB,IAAI,eAAe,EAAE,WAAW,CAAC,CAAC;QAEtF,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;gBACzB,GAAG,EAAE,GAAG,CAAC,YAAY;gBACrB,OAAO;gBACP,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,gDAAgD;gBAC7E,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;aACxB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBAC3B,MAAM,MAAM,GAAa,EAAE,CAAC;gBAE5B,IAAI,MAAM,CAAC,IAAI,EAAE;oBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9C,IAAI,MAAM,CAAC,IAAI,EAAE;oBAAE,MAAM,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAE7D,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;wBACjB,MAAM,CAAC,IAAI,CAAC,8BAA8B,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC;oBAChE,CAAC;yBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;wBACxD,MAAM,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;oBAC9C,CAAC;gBACH,CAAC;gBAED,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC;gBAC/C,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,uBAAuB;YACvB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBACxC,IAAI,CAAC;wBAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC7C,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF;;;;GAIG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,uCAAuC;IACvC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC1D,8DAA8D;QAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/B,qDAAqD;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,GAAG,CAAC;YAAE,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACrD,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,aAAa;IACb,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC;QAChD,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,0BAA0B,OAAO,4EAA4E,CAAC;IAC3I,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC1B,MAAM,IAAI,4BAA4B,gBAAgB,GAAG,IAAI,uDAAuD,CAAC;IACvH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -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"}