@morphllm/morphsdk 0.2.20 → 0.2.22

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 (164) hide show
  1. package/dist/chunk-73RQWOQC.js +16 -0
  2. package/dist/chunk-73RQWOQC.js.map +1 -0
  3. package/dist/chunk-AFEPUNAO.js +15 -0
  4. package/dist/chunk-AFEPUNAO.js.map +1 -0
  5. package/dist/chunk-EAA7D24N.js +201 -0
  6. package/dist/chunk-EAA7D24N.js.map +1 -0
  7. package/dist/chunk-EK7OQPWD.js +44 -0
  8. package/dist/chunk-EK7OQPWD.js.map +1 -0
  9. package/dist/chunk-FSVBNZMU.js +44 -0
  10. package/dist/chunk-FSVBNZMU.js.map +1 -0
  11. package/dist/chunk-G2RSY56Q.js +11 -0
  12. package/dist/chunk-G2RSY56Q.js.map +1 -0
  13. package/dist/chunk-GTOXMAF2.js +140 -0
  14. package/dist/chunk-GTOXMAF2.js.map +1 -0
  15. package/dist/chunk-HKZB23U7.js +85 -0
  16. package/dist/chunk-HKZB23U7.js.map +1 -0
  17. package/dist/chunk-JZGU5UC6.js +53 -0
  18. package/dist/chunk-JZGU5UC6.js.map +1 -0
  19. package/dist/chunk-NDZO5IPV.js +121 -0
  20. package/dist/chunk-NDZO5IPV.js.map +1 -0
  21. package/dist/{chunk-XUL4CHWU.js → chunk-NSQGPBMU.js} +4 -4
  22. package/dist/chunk-RSLIOCOE.js +26 -0
  23. package/dist/chunk-RSLIOCOE.js.map +1 -0
  24. package/dist/chunk-SMGZ6A64.js +53 -0
  25. package/dist/chunk-SMGZ6A64.js.map +1 -0
  26. package/dist/chunk-TICMYDII.js +81 -0
  27. package/dist/chunk-TICMYDII.js.map +1 -0
  28. package/dist/chunk-UYBIKZPM.js +135 -0
  29. package/dist/chunk-UYBIKZPM.js.map +1 -0
  30. package/dist/chunk-VBBJGWHY.js +73 -0
  31. package/dist/chunk-VBBJGWHY.js.map +1 -0
  32. package/dist/chunk-XQLKK2ZH.js +56 -0
  33. package/dist/chunk-XQLKK2ZH.js.map +1 -0
  34. package/dist/chunk-XYPMN4A3.js +1 -0
  35. package/dist/chunk-XYPMN4A3.js.map +1 -0
  36. package/dist/chunk-Z2FBMSNE.js +10 -0
  37. package/dist/chunk-Z2FBMSNE.js.map +1 -0
  38. package/dist/client.js +3 -3
  39. package/dist/index.js +5 -5
  40. package/dist/tools/warp_grep/agent/config.cjs +41 -0
  41. package/dist/tools/warp_grep/agent/config.cjs.map +1 -0
  42. package/dist/tools/warp_grep/agent/config.js +12 -0
  43. package/dist/tools/warp_grep/agent/config.js.map +1 -0
  44. package/dist/tools/warp_grep/agent/formatter.cjs +106 -0
  45. package/dist/tools/warp_grep/agent/formatter.cjs.map +1 -0
  46. package/dist/tools/warp_grep/agent/formatter.js +10 -0
  47. package/dist/tools/warp_grep/agent/formatter.js.map +1 -0
  48. package/dist/tools/warp_grep/agent/grep_helpers.cjs +148 -0
  49. package/dist/tools/warp_grep/agent/grep_helpers.cjs.map +1 -0
  50. package/dist/tools/warp_grep/agent/grep_helpers.js +14 -0
  51. package/dist/tools/warp_grep/agent/grep_helpers.js.map +1 -0
  52. package/dist/tools/warp_grep/agent/parser.cjs +165 -0
  53. package/dist/tools/warp_grep/agent/parser.cjs.map +1 -0
  54. package/dist/tools/warp_grep/agent/parser.js +10 -0
  55. package/dist/tools/warp_grep/agent/parser.js.map +1 -0
  56. package/dist/tools/warp_grep/agent/prompt.cjs +110 -0
  57. package/dist/tools/warp_grep/agent/prompt.cjs.map +1 -0
  58. package/dist/tools/warp_grep/agent/prompt.js +10 -0
  59. package/dist/tools/warp_grep/agent/prompt.js.map +1 -0
  60. package/dist/tools/warp_grep/agent/runner.cjs +744 -0
  61. package/dist/tools/warp_grep/agent/runner.cjs.map +1 -0
  62. package/dist/tools/warp_grep/agent/runner.js +17 -0
  63. package/dist/tools/warp_grep/agent/runner.js.map +1 -0
  64. package/dist/tools/warp_grep/agent/types.cjs +19 -0
  65. package/dist/tools/warp_grep/agent/types.cjs.map +1 -0
  66. package/dist/tools/warp_grep/agent/types.js +2 -0
  67. package/dist/tools/warp_grep/agent/types.js.map +1 -0
  68. package/dist/tools/warp_grep/anthropic.cjs +977 -0
  69. package/dist/tools/warp_grep/anthropic.cjs.map +1 -0
  70. package/dist/tools/warp_grep/anthropic.js +22 -0
  71. package/dist/tools/warp_grep/anthropic.js.map +1 -0
  72. package/dist/tools/warp_grep/index.cjs +1136 -0
  73. package/dist/tools/warp_grep/index.cjs.map +1 -0
  74. package/dist/tools/warp_grep/index.js +48 -0
  75. package/dist/tools/warp_grep/index.js.map +1 -0
  76. package/dist/tools/warp_grep/openai.cjs +980 -0
  77. package/dist/tools/warp_grep/openai.cjs.map +1 -0
  78. package/dist/tools/warp_grep/openai.js +22 -0
  79. package/dist/tools/warp_grep/openai.js.map +1 -0
  80. package/dist/tools/warp_grep/providers/command.cjs +98 -0
  81. package/dist/tools/warp_grep/providers/command.cjs.map +1 -0
  82. package/dist/tools/warp_grep/providers/command.js +9 -0
  83. package/dist/tools/warp_grep/providers/command.js.map +1 -0
  84. package/dist/tools/warp_grep/providers/local.cjs +232 -0
  85. package/dist/tools/warp_grep/providers/local.cjs.map +1 -0
  86. package/dist/tools/warp_grep/providers/local.js +12 -0
  87. package/dist/tools/warp_grep/providers/local.js.map +1 -0
  88. package/dist/tools/warp_grep/providers/types.cjs +19 -0
  89. package/dist/tools/warp_grep/providers/types.cjs.map +1 -0
  90. package/dist/tools/warp_grep/providers/types.js +1 -0
  91. package/dist/tools/warp_grep/providers/types.js.map +1 -0
  92. package/dist/tools/warp_grep/tools/analyse.cjs +40 -0
  93. package/dist/tools/warp_grep/tools/analyse.cjs.map +1 -0
  94. package/dist/tools/warp_grep/tools/analyse.js +8 -0
  95. package/dist/tools/warp_grep/tools/analyse.js.map +1 -0
  96. package/dist/tools/warp_grep/tools/finish.cjs +69 -0
  97. package/dist/tools/warp_grep/tools/finish.cjs.map +1 -0
  98. package/dist/tools/warp_grep/tools/finish.js +10 -0
  99. package/dist/tools/warp_grep/tools/finish.js.map +1 -0
  100. package/dist/tools/warp_grep/tools/grep.cjs +35 -0
  101. package/dist/tools/warp_grep/tools/grep.cjs.map +1 -0
  102. package/dist/tools/warp_grep/tools/grep.js +12 -0
  103. package/dist/tools/warp_grep/tools/grep.js.map +1 -0
  104. package/dist/tools/warp_grep/tools/read.cjs +34 -0
  105. package/dist/tools/warp_grep/tools/read.cjs.map +1 -0
  106. package/dist/tools/warp_grep/tools/read.js +8 -0
  107. package/dist/tools/warp_grep/tools/read.js.map +1 -0
  108. package/dist/tools/warp_grep/utils/files.cjs +45 -0
  109. package/dist/tools/warp_grep/utils/files.cjs.map +1 -0
  110. package/dist/tools/warp_grep/utils/files.js +8 -0
  111. package/dist/tools/warp_grep/utils/files.js.map +1 -0
  112. package/dist/tools/warp_grep/utils/format.cjs +42 -0
  113. package/dist/tools/warp_grep/utils/format.cjs.map +1 -0
  114. package/dist/tools/warp_grep/utils/format.js +18 -0
  115. package/dist/tools/warp_grep/utils/format.js.map +1 -0
  116. package/dist/tools/warp_grep/utils/paths.cjs +91 -0
  117. package/dist/tools/warp_grep/utils/paths.cjs.map +1 -0
  118. package/dist/tools/warp_grep/utils/paths.js +16 -0
  119. package/dist/tools/warp_grep/utils/paths.js.map +1 -0
  120. package/dist/tools/warp_grep/utils/ripgrep.cjs +50 -0
  121. package/dist/tools/warp_grep/utils/ripgrep.cjs.map +1 -0
  122. package/dist/tools/warp_grep/utils/ripgrep.js +8 -0
  123. package/dist/tools/warp_grep/utils/ripgrep.js.map +1 -0
  124. package/dist/tools/warp_grep/vercel.cjs +968 -0
  125. package/dist/tools/warp_grep/vercel.cjs.map +1 -0
  126. package/dist/tools/warp_grep/vercel.js +22 -0
  127. package/dist/tools/warp_grep/vercel.js.map +1 -0
  128. package/package.json +23 -3
  129. package/dist/anthropic-CknfcMoO.d.ts +0 -64
  130. package/dist/client.d.ts +0 -114
  131. package/dist/git/client.d.ts +0 -230
  132. package/dist/git/config.d.ts +0 -11
  133. package/dist/git/index.d.ts +0 -5
  134. package/dist/git/types.d.ts +0 -91
  135. package/dist/index.d.ts +0 -14
  136. package/dist/modelrouter/core.d.ts +0 -56
  137. package/dist/modelrouter/index.d.ts +0 -2
  138. package/dist/modelrouter/types.d.ts +0 -35
  139. package/dist/openai-BkKsS30n.d.ts +0 -111
  140. package/dist/tools/browser/anthropic.d.ts +0 -51
  141. package/dist/tools/browser/core.d.ts +0 -196
  142. package/dist/tools/browser/index.d.ts +0 -72
  143. package/dist/tools/browser/openai.d.ts +0 -69
  144. package/dist/tools/browser/prompts.d.ts +0 -7
  145. package/dist/tools/browser/types.d.ts +0 -227
  146. package/dist/tools/browser/vercel.d.ts +0 -69
  147. package/dist/tools/codebase_search/anthropic.d.ts +0 -40
  148. package/dist/tools/codebase_search/core.d.ts +0 -40
  149. package/dist/tools/codebase_search/index.d.ts +0 -10
  150. package/dist/tools/codebase_search/openai.d.ts +0 -87
  151. package/dist/tools/codebase_search/prompts.d.ts +0 -7
  152. package/dist/tools/codebase_search/types.d.ts +0 -46
  153. package/dist/tools/codebase_search/vercel.d.ts +0 -65
  154. package/dist/tools/fastapply/anthropic.d.ts +0 -4
  155. package/dist/tools/fastapply/core.d.ts +0 -41
  156. package/dist/tools/fastapply/index.d.ts +0 -10
  157. package/dist/tools/fastapply/openai.d.ts +0 -4
  158. package/dist/tools/fastapply/prompts.d.ts +0 -7
  159. package/dist/tools/fastapply/types.d.ts +0 -77
  160. package/dist/tools/fastapply/vercel.d.ts +0 -4
  161. package/dist/tools/index.d.ts +0 -10
  162. package/dist/tools/utils/resilience.d.ts +0 -58
  163. package/dist/vercel-B1GZ_g9N.d.ts +0 -69
  164. /package/dist/{chunk-XUL4CHWU.js.map → chunk-NSQGPBMU.js.map} +0 -0
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // tools/warp_grep/agent/parser.ts
21
+ var parser_exports = {};
22
+ __export(parser_exports, {
23
+ LLMResponseParseError: () => LLMResponseParseError,
24
+ LLMResponseParser: () => LLMResponseParser
25
+ });
26
+ module.exports = __toCommonJS(parser_exports);
27
+ var LLMResponseParseError = class extends Error {
28
+ constructor(message) {
29
+ super(message);
30
+ this.name = "LLMResponseParseError";
31
+ }
32
+ };
33
+ var LLMResponseParser = class {
34
+ finishSpecSplitRe = /,(?=[^,\s]+:)/;
35
+ parse(text) {
36
+ if (typeof text !== "string") {
37
+ throw new TypeError("Command text must be a string.");
38
+ }
39
+ const lines = text.split(/\r?\n/).map((l) => l.trim());
40
+ const commands = [];
41
+ let finishAccumulator = null;
42
+ lines.forEach((line, idx) => {
43
+ if (!line || line.startsWith("#")) return;
44
+ const ctx = { lineNumber: idx + 1, raw: line };
45
+ const parts = this.splitLine(line, ctx);
46
+ if (parts.length === 0) return;
47
+ const cmd = parts[0];
48
+ switch (cmd) {
49
+ case "analyse":
50
+ this.handleAnalyse(parts, ctx, commands);
51
+ break;
52
+ case "grep":
53
+ this.handleGrep(parts, ctx, commands);
54
+ break;
55
+ case "read":
56
+ this.handleRead(parts, ctx, commands);
57
+ break;
58
+ case "finish":
59
+ finishAccumulator = this.handleFinish(parts, ctx, finishAccumulator);
60
+ break;
61
+ default:
62
+ throw new LLMResponseParseError(`Line ${ctx.lineNumber}: Unsupported command '${cmd}'`);
63
+ }
64
+ });
65
+ if (finishAccumulator) {
66
+ const map = finishAccumulator;
67
+ const entries = [...map.entries()];
68
+ const filesPayload = entries.map(([path, ranges]) => ({
69
+ path,
70
+ lines: [...ranges].sort((a, b) => a[0] - b[0])
71
+ }));
72
+ commands.push({ name: "finish", arguments: { files: filesPayload } });
73
+ }
74
+ return commands;
75
+ }
76
+ splitLine(line, ctx) {
77
+ try {
78
+ const parts = [];
79
+ let current = "";
80
+ let inSingle = false;
81
+ for (let i = 0; i < line.length; i++) {
82
+ const ch = line[i];
83
+ if (ch === "'" && line[i - 1] !== "\\") {
84
+ inSingle = !inSingle;
85
+ current += ch;
86
+ } else if (!inSingle && /\s/.test(ch)) {
87
+ if (current) {
88
+ parts.push(current);
89
+ current = "";
90
+ }
91
+ } else {
92
+ current += ch;
93
+ }
94
+ }
95
+ if (current) parts.push(current);
96
+ return parts;
97
+ } catch {
98
+ throw new LLMResponseParseError(`Line ${ctx.lineNumber}: Unable to parse line.`);
99
+ }
100
+ }
101
+ handleAnalyse(parts, ctx, commands) {
102
+ if (parts.length < 2) {
103
+ throw new LLMResponseParseError(`Line ${ctx.lineNumber}: analyse requires <path>`);
104
+ }
105
+ const path = parts[1];
106
+ const pattern = parts[2]?.replace(/^"|"$/g, "") ?? null;
107
+ commands.push({ name: "analyse", arguments: { path, pattern } });
108
+ }
109
+ // no glob tool in MCP
110
+ handleGrep(parts, ctx, commands) {
111
+ if (parts.length < 3) {
112
+ throw new LLMResponseParseError(`Line ${ctx.lineNumber}: grep requires '<pattern>' and <path>`);
113
+ }
114
+ const pat = parts[1];
115
+ if (!pat.startsWith("'") || !pat.endsWith("'")) {
116
+ throw new LLMResponseParseError(`Line ${ctx.lineNumber}: grep pattern must be single-quoted`);
117
+ }
118
+ commands.push({ name: "grep", arguments: { pattern: pat.slice(1, -1), path: parts[2] } });
119
+ }
120
+ handleRead(parts, ctx, commands) {
121
+ if (parts.length < 2) {
122
+ throw new LLMResponseParseError(`Line ${ctx.lineNumber}: read requires <path> or <path>:<start-end>`);
123
+ }
124
+ const spec = parts[1];
125
+ const rangeIdx = spec.indexOf(":");
126
+ if (rangeIdx === -1) {
127
+ commands.push({ name: "read", arguments: { path: spec } });
128
+ return;
129
+ }
130
+ const path = spec.slice(0, rangeIdx);
131
+ const range = spec.slice(rangeIdx + 1);
132
+ const [s, e] = range.split("-").map((v) => parseInt(v, 10));
133
+ if (!Number.isFinite(s) || !Number.isFinite(e)) {
134
+ throw new LLMResponseParseError(`Line ${ctx.lineNumber}: invalid read range '${range}'`);
135
+ }
136
+ commands.push({ name: "read", arguments: { path, start: s, end: e } });
137
+ }
138
+ handleFinish(parts, ctx, acc) {
139
+ const map = acc ?? /* @__PURE__ */ new Map();
140
+ const args = parts.slice(1);
141
+ for (const token of args) {
142
+ const [path, rangesText] = token.split(":", 2);
143
+ if (!path || !rangesText) {
144
+ throw new LLMResponseParseError(`Line ${ctx.lineNumber}: invalid finish token '${token}'`);
145
+ }
146
+ const rangeSpecs = rangesText.split(",").filter(Boolean);
147
+ for (const spec of rangeSpecs) {
148
+ const [s, e] = spec.split("-").map((v) => parseInt(v, 10));
149
+ if (!Number.isFinite(s) || !Number.isFinite(e) || e < s) {
150
+ throw new LLMResponseParseError(`Line ${ctx.lineNumber}: invalid range '${spec}'`);
151
+ }
152
+ const arr = map.get(path) ?? [];
153
+ arr.push([s, e]);
154
+ map.set(path, arr);
155
+ }
156
+ }
157
+ return map;
158
+ }
159
+ };
160
+ // Annotate the CommonJS export names for ESM import in node:
161
+ 0 && (module.exports = {
162
+ LLMResponseParseError,
163
+ LLMResponseParser
164
+ });
165
+ //# sourceMappingURL=parser.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../tools/warp_grep/agent/parser.ts"],"sourcesContent":["// Parses assistant lines into structured tool calls\nimport type { ToolCall } from './types.js';\n\nexport class LLMResponseParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'LLMResponseParseError';\n }\n}\n\ntype LineContext = { lineNumber: number; raw: string };\n\nexport class LLMResponseParser {\n private readonly finishSpecSplitRe = /,(?=[^,\\s]+:)/;\n\n parse(text: string): ToolCall[] {\n if (typeof text !== 'string') {\n throw new TypeError('Command text must be a string.');\n }\n const lines = text.split(/\\r?\\n/).map(l => l.trim());\n const commands: ToolCall[] = [];\n let finishAccumulator: Map<string, number[][]> | null = null;\n\n lines.forEach((line, idx) => {\n if (!line || line.startsWith('#')) return;\n const ctx: LineContext = { lineNumber: idx + 1, raw: line };\n const parts = this.splitLine(line, ctx);\n if (parts.length === 0) return;\n const cmd = parts[0];\n switch (cmd) {\n case 'analyse':\n this.handleAnalyse(parts, ctx, commands);\n break;\n case 'grep':\n this.handleGrep(parts, ctx, commands);\n break;\n case 'read':\n this.handleRead(parts, ctx, commands);\n break;\n case 'finish':\n finishAccumulator = this.handleFinish(parts, ctx, finishAccumulator);\n break;\n default:\n throw new LLMResponseParseError(`Line ${ctx.lineNumber}: Unsupported command '${cmd}'`);\n }\n });\n\n if (finishAccumulator) {\n const map = finishAccumulator as Map<string, number[][]>;\n const entries = [...map.entries()];\n const filesPayload = entries.map(([path, ranges]) => ({\n path,\n lines: [...ranges].sort((a, b) => a[0] - b[0]) as Array<[number, number]>,\n }));\n commands.push({ name: 'finish', arguments: { files: filesPayload } });\n }\n return commands;\n }\n\n private splitLine(line: string, ctx: LineContext): string[] {\n try {\n // Split by whitespace but keep quoted blocks as one\n const parts: string[] = [];\n let current = '';\n let inSingle = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (ch === \"'\" && line[i - 1] !== '\\\\') {\n inSingle = !inSingle;\n current += ch;\n } else if (!inSingle && /\\s/.test(ch)) {\n if (current) {\n parts.push(current);\n current = '';\n }\n } else {\n current += ch;\n }\n }\n if (current) parts.push(current);\n return parts;\n } catch {\n throw new LLMResponseParseError(`Line ${ctx.lineNumber}: Unable to parse line.`);\n }\n }\n\n private handleAnalyse(parts: string[], ctx: LineContext, commands: ToolCall[]) {\n // analyse <path> [pattern]\n if (parts.length < 2) {\n throw new LLMResponseParseError(`Line ${ctx.lineNumber}: analyse requires <path>`);\n }\n const path = parts[1];\n const pattern = parts[2]?.replace(/^\"|\"$/g, '') ?? null;\n commands.push({ name: 'analyse', arguments: { path, pattern } });\n }\n\n // no glob tool in MCP\n\n private handleGrep(parts: string[], ctx: LineContext, commands: ToolCall[]) {\n // grep '<pattern>' <path>\n if (parts.length < 3) {\n throw new LLMResponseParseError(`Line ${ctx.lineNumber}: grep requires '<pattern>' and <path>`);\n }\n const pat = parts[1];\n if (!pat.startsWith(\"'\") || !pat.endsWith(\"'\")) {\n throw new LLMResponseParseError(`Line ${ctx.lineNumber}: grep pattern must be single-quoted`);\n }\n commands.push({ name: 'grep', arguments: { pattern: pat.slice(1, -1), path: parts[2] } });\n }\n\n private handleRead(parts: string[], ctx: LineContext, commands: ToolCall[]) {\n // read <path>[:start-end]\n if (parts.length < 2) {\n throw new LLMResponseParseError(`Line ${ctx.lineNumber}: read requires <path> or <path>:<start-end>`);\n }\n const spec = parts[1];\n const rangeIdx = spec.indexOf(':');\n if (rangeIdx === -1) {\n commands.push({ name: 'read', arguments: { path: spec } });\n return;\n }\n const path = spec.slice(0, rangeIdx);\n const range = spec.slice(rangeIdx + 1);\n const [s, e] = range.split('-').map(v => parseInt(v, 10));\n if (!Number.isFinite(s) || !Number.isFinite(e)) {\n throw new LLMResponseParseError(`Line ${ctx.lineNumber}: invalid read range '${range}'`);\n }\n commands.push({ name: 'read', arguments: { path, start: s, end: e } });\n }\n\n private handleFinish(parts: string[], ctx: LineContext, acc: Map<string, number[][]> | null) {\n // finish file1:1-10,20-30 file2:5-7\n const map = acc ?? new Map<string, number[][]>();\n const args = parts.slice(1);\n for (const token of args) {\n const [path, rangesText] = token.split(':', 2);\n if (!path || !rangesText) {\n throw new LLMResponseParseError(`Line ${ctx.lineNumber}: invalid finish token '${token}'`);\n }\n const rangeSpecs = rangesText.split(',').filter(Boolean);\n for (const spec of rangeSpecs) {\n const [s, e] = spec.split('-').map(v => parseInt(v, 10));\n if (!Number.isFinite(s) || !Number.isFinite(e) || e < s) {\n throw new LLMResponseParseError(`Line ${ctx.lineNumber}: invalid range '${spec}'`);\n }\n const arr = map.get(path) ?? [];\n arr.push([s, e]);\n map.set(path, arr);\n }\n }\n return map;\n }\n}\n\n\n"],"mappings":"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","names":[]}
@@ -0,0 +1,10 @@
1
+ import {
2
+ LLMResponseParseError,
3
+ LLMResponseParser
4
+ } from "../../../chunk-GTOXMAF2.js";
5
+ import "../../../chunk-PZ5AY32C.js";
6
+ export {
7
+ LLMResponseParseError,
8
+ LLMResponseParser
9
+ };
10
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // tools/warp_grep/agent/prompt.ts
21
+ var prompt_exports = {};
22
+ __export(prompt_exports, {
23
+ SYSTEM_PROMPT: () => SYSTEM_PROMPT,
24
+ getSystemPrompt: () => getSystemPrompt
25
+ });
26
+ module.exports = __toCommonJS(prompt_exports);
27
+ var SYSTEM_PROMPT = `You are a code search agent. Your task is to find relevant code snippets based on a search query.
28
+
29
+ <workflow>
30
+ You operate in exactly 3 rounds of tool exploration, followed by a final answer:
31
+
32
+ 1. In each round, you can make MULTIPLE tool calls (up to 8) to search in parallel. All tool results will be returned together after each round.
33
+ 2. After your third round of tool calls, your next turn MUST be a single call to the \`finish\` tool with all the context you have found.
34
+ </workflow>
35
+
36
+ <tool_calling>
37
+ You have tools at your disposal to solve the coding task. Follow these rules regarding tool calls:
38
+
39
+ ### 1. \`analyse\` - Explore Directories
40
+ Explore directory structure in a tree-like format.
41
+ **Syntax:** \`analyse <path> [pattern]\`
42
+ - \`<path>\`: Directory path to analyze (defaults to \`.\`)
43
+ - \`[pattern]\`: Optional regex pattern to filter names
44
+
45
+ For example:
46
+ \`\`\`
47
+ analyse src/api
48
+ analyse . "test"
49
+ \`\`\`
50
+
51
+ ### 2. \`read\` - Read File Contents
52
+ Read entire files or specific line ranges.
53
+ **Syntax:** \`read <path>[:start-end]\`
54
+ - \`<path>\`: File path to read
55
+ - \`[:start-end]\`: Optional 1-based, inclusive line range
56
+
57
+ For example:
58
+ \`\`\`
59
+ read src/main.py
60
+ read src/database/connection.py:10-50
61
+ \`\`\`
62
+
63
+ ### 3. \`grep\` - Search with Regex
64
+ Search for regex patterns across files using ripgrep.
65
+ **Syntax:** \`grep '<pattern>' <path>\`
66
+ - \`'<pattern>'\`: Regex pattern (always wrap in single quotes)
67
+ - \`<path>\`: Directory or file to search (use \`.\` for the repo root)
68
+
69
+ For example:
70
+ \`\`\`
71
+ grep 'create_user' .
72
+ grep 'import.*requests' src/api
73
+ grep 'class\\\\s+AuthService' controllers/auth.py
74
+ \`\`\`
75
+
76
+ ### 4. \`finish\` - Submit Final Answer
77
+ Submit your findings when complete.
78
+ **Syntax:** \`finish <file1:range1,range2...> [file2:range3...]\`
79
+ - Provide file paths with colon-separated, comma-separated line ranges
80
+
81
+ For example:
82
+ \`\`\`
83
+ finish src/api/auth.py:25-50,75-80 src/models/user.py:10-15
84
+ \`\`\`
85
+ </tool_calling>
86
+
87
+ <strategy>
88
+ - Use the \`analyse\`, \`grep\`, and \`read\` tools to gather information about the codebase.
89
+ - Leverage the tools smartly to make full use of their potential
90
+ - Make parallel tool calls within each round to investigate multiple paths or files efficiently
91
+ - Be systematic and thorough within your 3-round limit
92
+ </strategy>
93
+
94
+ <output_format>
95
+ - Only output tool calls themselves
96
+ - Do not include explanatory text, reasoning, or commentary
97
+ - Each tool call should be on its own line
98
+ - After 3 rounds of exploration, call \`finish\` with all relevant code snippets you found
99
+ </output_format>
100
+
101
+ Begin your exploration now to find code relevant to the query.`;
102
+ function getSystemPrompt() {
103
+ return SYSTEM_PROMPT;
104
+ }
105
+ // Annotate the CommonJS export names for ESM import in node:
106
+ 0 && (module.exports = {
107
+ SYSTEM_PROMPT,
108
+ getSystemPrompt
109
+ });
110
+ //# sourceMappingURL=prompt.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../tools/warp_grep/agent/prompt.ts"],"sourcesContent":["export const SYSTEM_PROMPT = `You are a code search agent. Your task is to find relevant code snippets based on a search query.\n\n<workflow>\nYou operate in exactly 3 rounds of tool exploration, followed by a final answer:\n\n1. In each round, you can make MULTIPLE tool calls (up to 8) to search in parallel. All tool results will be returned together after each round.\n2. After your third round of tool calls, your next turn MUST be a single call to the \\`finish\\` tool with all the context you have found.\n</workflow>\n\n<tool_calling>\nYou have tools at your disposal to solve the coding task. Follow these rules regarding tool calls:\n\n### 1. \\`analyse\\` - Explore Directories\nExplore directory structure in a tree-like format.\n**Syntax:** \\`analyse <path> [pattern]\\`\n- \\`<path>\\`: Directory path to analyze (defaults to \\`.\\`)\n- \\`[pattern]\\`: Optional regex pattern to filter names\n\nFor example:\n\\`\\`\\`\nanalyse src/api\nanalyse . \"test\"\n\\`\\`\\`\n\n### 2. \\`read\\` - Read File Contents\nRead entire files or specific line ranges.\n**Syntax:** \\`read <path>[:start-end]\\`\n- \\`<path>\\`: File path to read\n- \\`[:start-end]\\`: Optional 1-based, inclusive line range\n\nFor example:\n\\`\\`\\`\nread src/main.py\nread src/database/connection.py:10-50\n\\`\\`\\`\n\n### 3. \\`grep\\` - Search with Regex\nSearch for regex patterns across files using ripgrep.\n**Syntax:** \\`grep '<pattern>' <path>\\`\n- \\`'<pattern>'\\`: Regex pattern (always wrap in single quotes)\n- \\`<path>\\`: Directory or file to search (use \\`.\\` for the repo root)\n\nFor example:\n\\`\\`\\`\ngrep 'create_user' .\ngrep 'import.*requests' src/api\ngrep 'class\\\\\\\\s+AuthService' controllers/auth.py\n\\`\\`\\`\n\n### 4. \\`finish\\` - Submit Final Answer\nSubmit your findings when complete.\n**Syntax:** \\`finish <file1:range1,range2...> [file2:range3...]\\`\n- Provide file paths with colon-separated, comma-separated line ranges\n\nFor example:\n\\`\\`\\`\nfinish src/api/auth.py:25-50,75-80 src/models/user.py:10-15\n\\`\\`\\`\n</tool_calling>\n\n<strategy>\n- Use the \\`analyse\\`, \\`grep\\`, and \\`read\\` tools to gather information about the codebase.\n- Leverage the tools smartly to make full use of their potential\n- Make parallel tool calls within each round to investigate multiple paths or files efficiently\n- Be systematic and thorough within your 3-round limit\n</strategy>\n\n<output_format>\n- Only output tool calls themselves\n- Do not include explanatory text, reasoning, or commentary\n- Each tool call should be on its own line\n- After 3 rounds of exploration, call \\`finish\\` with all relevant code snippets you found\n</output_format>\n\nBegin your exploration now to find code relevant to the query.`;\n\nexport function getSystemPrompt(): string {\n\treturn SYSTEM_PROMPT;\n}\n\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4EtB,SAAS,kBAA0B;AACzC,SAAO;AACR;","names":[]}
@@ -0,0 +1,10 @@
1
+ import {
2
+ SYSTEM_PROMPT,
3
+ getSystemPrompt
4
+ } from "../../../chunk-HKZB23U7.js";
5
+ import "../../../chunk-PZ5AY32C.js";
6
+ export {
7
+ SYSTEM_PROMPT,
8
+ getSystemPrompt
9
+ };
10
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}