@morphllm/morphsdk 0.2.57 → 0.2.58

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 (158) hide show
  1. package/dist/anthropic-CaFUHxBW.d.ts +89 -0
  2. package/dist/{chunk-6X5UOY7B.js → chunk-2CASO3ZO.js} +46 -79
  3. package/dist/chunk-2CASO3ZO.js.map +1 -0
  4. package/dist/chunk-374N3GIA.js +118 -0
  5. package/dist/chunk-374N3GIA.js.map +1 -0
  6. package/dist/chunk-3IQIT6MC.js +65 -0
  7. package/dist/chunk-3IQIT6MC.js.map +1 -0
  8. package/dist/chunk-4VGOBA2J.js +57 -0
  9. package/dist/chunk-4VGOBA2J.js.map +1 -0
  10. package/dist/chunk-527P5X2E.js +98 -0
  11. package/dist/chunk-527P5X2E.js.map +1 -0
  12. package/dist/chunk-6N6ZYZYD.js +74 -0
  13. package/dist/chunk-6N6ZYZYD.js.map +1 -0
  14. package/dist/chunk-6Y5JB4JC.js +195 -0
  15. package/dist/chunk-6Y5JB4JC.js.map +1 -0
  16. package/dist/{chunk-QFIHUCTF.js → chunk-7EIHYJSG.js} +18 -18
  17. package/dist/chunk-7EIHYJSG.js.map +1 -0
  18. package/dist/{chunk-TICMYDII.js → chunk-APP75CBN.js} +33 -16
  19. package/dist/chunk-APP75CBN.js.map +1 -0
  20. package/dist/chunk-ILJ3J5IA.js +72 -0
  21. package/dist/chunk-ILJ3J5IA.js.map +1 -0
  22. package/dist/chunk-ISWL67SF.js +1 -0
  23. package/dist/chunk-KW7OEGZK.js +9 -0
  24. package/dist/chunk-KW7OEGZK.js.map +1 -0
  25. package/dist/chunk-Q5AHGIQO.js +205 -0
  26. package/dist/chunk-Q5AHGIQO.js.map +1 -0
  27. package/dist/{chunk-TJIUA27P.js → chunk-XT5ZO6ES.js} +9 -5
  28. package/dist/chunk-XT5ZO6ES.js.map +1 -0
  29. package/dist/{chunk-LVPVVLTI.js → chunk-YV75OQTE.js} +105 -17
  30. package/dist/chunk-YV75OQTE.js.map +1 -0
  31. package/dist/{chunk-ZJIIICRA.js → chunk-ZO4PPFCZ.js} +60 -29
  32. package/dist/chunk-ZO4PPFCZ.js.map +1 -0
  33. package/dist/{client-CFoR--IU.d.ts → client-CextMMm9.d.ts} +10 -15
  34. package/dist/client.cjs +687 -341
  35. package/dist/client.cjs.map +1 -1
  36. package/dist/client.d.ts +3 -2
  37. package/dist/client.js +14 -14
  38. package/dist/finish-kXAcUJyB.d.ts +33 -0
  39. package/dist/gemini-CE80Pbdy.d.ts +117 -0
  40. package/dist/index.cjs +700 -341
  41. package/dist/index.cjs.map +1 -1
  42. package/dist/index.d.ts +4 -3
  43. package/dist/index.js +16 -15
  44. package/dist/openai-Fvpqln7F.d.ts +89 -0
  45. package/dist/tools/warp_grep/agent/config.cjs +8 -4
  46. package/dist/tools/warp_grep/agent/config.cjs.map +1 -1
  47. package/dist/tools/warp_grep/agent/config.d.ts +7 -2
  48. package/dist/tools/warp_grep/agent/config.js +1 -1
  49. package/dist/tools/warp_grep/agent/formatter.cjs +32 -15
  50. package/dist/tools/warp_grep/agent/formatter.cjs.map +1 -1
  51. package/dist/tools/warp_grep/agent/formatter.d.ts +1 -1
  52. package/dist/tools/warp_grep/agent/formatter.js +1 -1
  53. package/dist/tools/warp_grep/agent/parser.cjs +104 -17
  54. package/dist/tools/warp_grep/agent/parser.cjs.map +1 -1
  55. package/dist/tools/warp_grep/agent/parser.d.ts +3 -5
  56. package/dist/tools/warp_grep/agent/parser.js +1 -3
  57. package/dist/tools/warp_grep/agent/prompt.cjs +132 -56
  58. package/dist/tools/warp_grep/agent/prompt.cjs.map +1 -1
  59. package/dist/tools/warp_grep/agent/prompt.d.ts +1 -1
  60. package/dist/tools/warp_grep/agent/prompt.js +1 -1
  61. package/dist/tools/warp_grep/agent/runner.cjs +459 -192
  62. package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
  63. package/dist/tools/warp_grep/agent/runner.d.ts +1 -0
  64. package/dist/tools/warp_grep/agent/runner.js +6 -8
  65. package/dist/tools/warp_grep/agent/types.cjs.map +1 -1
  66. package/dist/tools/warp_grep/agent/types.d.ts +9 -2
  67. package/dist/tools/warp_grep/anthropic.cjs +650 -260
  68. package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
  69. package/dist/tools/warp_grep/anthropic.d.ts +4 -74
  70. package/dist/tools/warp_grep/anthropic.js +13 -15
  71. package/dist/tools/warp_grep/client.cjs +1593 -0
  72. package/dist/tools/warp_grep/client.cjs.map +1 -0
  73. package/dist/tools/warp_grep/client.d.ts +87 -0
  74. package/dist/tools/warp_grep/client.js +26 -0
  75. package/dist/tools/warp_grep/gemini.cjs +1587 -0
  76. package/dist/tools/warp_grep/gemini.cjs.map +1 -0
  77. package/dist/tools/warp_grep/gemini.d.ts +7 -0
  78. package/dist/tools/warp_grep/gemini.js +34 -0
  79. package/dist/tools/warp_grep/harness.cjs +556 -220
  80. package/dist/tools/warp_grep/harness.cjs.map +1 -1
  81. package/dist/tools/warp_grep/harness.d.ts +50 -119
  82. package/dist/tools/warp_grep/harness.js +33 -41
  83. package/dist/tools/warp_grep/harness.js.map +1 -1
  84. package/dist/tools/warp_grep/index.cjs +812 -346
  85. package/dist/tools/warp_grep/index.cjs.map +1 -1
  86. package/dist/tools/warp_grep/index.d.ts +11 -6
  87. package/dist/tools/warp_grep/index.js +43 -22
  88. package/dist/tools/warp_grep/openai.cjs +650 -258
  89. package/dist/tools/warp_grep/openai.cjs.map +1 -1
  90. package/dist/tools/warp_grep/openai.d.ts +4 -74
  91. package/dist/tools/warp_grep/openai.js +13 -13
  92. package/dist/tools/warp_grep/providers/local.cjs +66 -27
  93. package/dist/tools/warp_grep/providers/local.cjs.map +1 -1
  94. package/dist/tools/warp_grep/providers/local.d.ts +4 -9
  95. package/dist/tools/warp_grep/providers/local.js +2 -2
  96. package/dist/tools/warp_grep/providers/remote.cjs +211 -0
  97. package/dist/tools/warp_grep/providers/remote.cjs.map +1 -0
  98. package/dist/tools/warp_grep/providers/remote.d.ts +67 -0
  99. package/dist/tools/warp_grep/providers/remote.js +9 -0
  100. package/dist/tools/warp_grep/providers/types.cjs.map +1 -1
  101. package/dist/tools/warp_grep/providers/types.d.ts +7 -15
  102. package/dist/tools/warp_grep/vercel.cjs +662 -277
  103. package/dist/tools/warp_grep/vercel.cjs.map +1 -1
  104. package/dist/tools/warp_grep/vercel.d.ts +4 -51
  105. package/dist/tools/warp_grep/vercel.js +16 -14
  106. package/dist/types-a_hxdPI6.d.ts +144 -0
  107. package/dist/vercel-3yjvfmVB.d.ts +66 -0
  108. package/package.json +12 -2
  109. package/dist/chunk-6X5UOY7B.js.map +0 -1
  110. package/dist/chunk-73RQWOQC.js +0 -16
  111. package/dist/chunk-73RQWOQC.js.map +0 -1
  112. package/dist/chunk-7OQOOB3R.js +0 -1
  113. package/dist/chunk-CFF636UC.js +0 -70
  114. package/dist/chunk-CFF636UC.js.map +0 -1
  115. package/dist/chunk-EK7OQPWD.js +0 -44
  116. package/dist/chunk-EK7OQPWD.js.map +0 -1
  117. package/dist/chunk-GJ5TYNRD.js +0 -107
  118. package/dist/chunk-GJ5TYNRD.js.map +0 -1
  119. package/dist/chunk-HQO45BAJ.js +0 -14
  120. package/dist/chunk-HQO45BAJ.js.map +0 -1
  121. package/dist/chunk-IMYQOKFO.js +0 -83
  122. package/dist/chunk-IMYQOKFO.js.map +0 -1
  123. package/dist/chunk-KBQWGT5L.js +0 -77
  124. package/dist/chunk-KBQWGT5L.js.map +0 -1
  125. package/dist/chunk-LVPVVLTI.js.map +0 -1
  126. package/dist/chunk-QFIHUCTF.js.map +0 -1
  127. package/dist/chunk-TICMYDII.js.map +0 -1
  128. package/dist/chunk-TJIUA27P.js.map +0 -1
  129. package/dist/chunk-WETRQJGU.js +0 -129
  130. package/dist/chunk-WETRQJGU.js.map +0 -1
  131. package/dist/chunk-ZJIIICRA.js.map +0 -1
  132. package/dist/core-CpkYEi_T.d.ts +0 -158
  133. package/dist/tools/warp_grep/tools/analyse.cjs +0 -40
  134. package/dist/tools/warp_grep/tools/analyse.cjs.map +0 -1
  135. package/dist/tools/warp_grep/tools/analyse.d.ts +0 -10
  136. package/dist/tools/warp_grep/tools/analyse.js +0 -8
  137. package/dist/tools/warp_grep/tools/finish.cjs +0 -69
  138. package/dist/tools/warp_grep/tools/finish.cjs.map +0 -1
  139. package/dist/tools/warp_grep/tools/finish.d.ts +0 -10
  140. package/dist/tools/warp_grep/tools/finish.js +0 -10
  141. package/dist/tools/warp_grep/tools/grep.cjs +0 -38
  142. package/dist/tools/warp_grep/tools/grep.cjs.map +0 -1
  143. package/dist/tools/warp_grep/tools/grep.d.ts +0 -8
  144. package/dist/tools/warp_grep/tools/grep.js +0 -15
  145. package/dist/tools/warp_grep/tools/grep.js.map +0 -1
  146. package/dist/tools/warp_grep/tools/read.cjs +0 -38
  147. package/dist/tools/warp_grep/tools/read.cjs.map +0 -1
  148. package/dist/tools/warp_grep/tools/read.d.ts +0 -9
  149. package/dist/tools/warp_grep/tools/read.js +0 -8
  150. package/dist/tools/warp_grep/utils/format.cjs +0 -42
  151. package/dist/tools/warp_grep/utils/format.cjs.map +0 -1
  152. package/dist/tools/warp_grep/utils/format.d.ts +0 -4
  153. package/dist/tools/warp_grep/utils/format.js +0 -18
  154. package/dist/tools/warp_grep/utils/format.js.map +0 -1
  155. /package/dist/{chunk-7OQOOB3R.js.map → chunk-ISWL67SF.js.map} +0 -0
  156. /package/dist/tools/warp_grep/{tools/analyse.js.map → client.js.map} +0 -0
  157. /package/dist/tools/warp_grep/{tools/finish.js.map → gemini.js.map} +0 -0
  158. /package/dist/tools/warp_grep/{tools/read.js.map → providers/remote.js.map} +0 -0
@@ -1,25 +1,34 @@
1
+ import {
2
+ buildInitialState,
3
+ calculateContextBudget,
4
+ formatListDirectoryTree,
5
+ formatTurnMessage,
6
+ normalizeFinishFiles,
7
+ readFinishFiles,
8
+ toolGrep,
9
+ toolListDirectory,
10
+ toolRead
11
+ } from "../../chunk-6Y5JB4JC.js";
12
+ import {
13
+ formatAgentToolOutput
14
+ } from "../../chunk-APP75CBN.js";
1
15
  import {
2
16
  LLMResponseParser
3
- } from "../../chunk-LVPVVLTI.js";
17
+ } from "../../chunk-YV75OQTE.js";
4
18
  import {
5
- SYSTEM_PROMPT
6
- } from "../../chunk-WETRQJGU.js";
19
+ SYSTEM_PROMPT,
20
+ getSystemPrompt
21
+ } from "../../chunk-Q5AHGIQO.js";
7
22
  import {
8
23
  LocalRipgrepProvider
9
- } from "../../chunk-ZJIIICRA.js";
24
+ } from "../../chunk-ZO4PPFCZ.js";
10
25
  import "../../chunk-G2RSY56Q.js";
11
26
  import "../../chunk-SMGZ6A64.js";
12
27
  import "../../chunk-TPP2UGQP.js";
13
- import {
14
- readFinishFiles
15
- } from "../../chunk-EK7OQPWD.js";
16
28
  import {
17
29
  AGENT_CONFIG,
18
30
  DEFAULT_EXCLUDES
19
- } from "../../chunk-TJIUA27P.js";
20
- import {
21
- formatAgentToolOutput
22
- } from "../../chunk-TICMYDII.js";
31
+ } from "../../chunk-XT5ZO6ES.js";
23
32
  import "../../chunk-PZ5AY32C.js";
24
33
 
25
34
  // tools/warp_grep/harness.ts
@@ -27,29 +36,6 @@ var parser = new LLMResponseParser();
27
36
  function parseToolCalls(text) {
28
37
  return parser.parse(text);
29
38
  }
30
- function formatToolResult(name, args, output, options) {
31
- return formatAgentToolOutput(name, args, output, options ?? {});
32
- }
33
- function formatTurnMessage(turn, maxTurns = 4) {
34
- const remaining = maxTurns - turn;
35
- if (remaining === 0) {
36
- return `
37
-
38
- [Turn ${turn}/${maxTurns}] This is your LAST turn. You MUST call finish now.`;
39
- }
40
- if (remaining === 1) {
41
- return `
42
-
43
- [Turn ${turn}/${maxTurns}] You have 1 turn remaining.`;
44
- }
45
- return `
46
-
47
- [Turn ${turn}/${maxTurns}] You have ${remaining} turns remaining.`;
48
- }
49
- function formatAnalyseTree(entries) {
50
- if (!entries.length) return "empty";
51
- return entries.map((e) => `${" ".repeat(e.depth)}- ${e.type === "dir" ? "[D]" : "[F]"} ${e.name}`).join("\n");
52
- }
53
39
  async function resolveFinishFiles(provider, files) {
54
40
  return readFinishFiles("", files, async (p, s, e) => {
55
41
  const r = await provider.read({ path: p, start: s, end: e });
@@ -59,18 +45,24 @@ async function resolveFinishFiles(provider, files) {
59
45
  });
60
46
  });
61
47
  }
62
- var MAX_TURNS = 4;
63
- var TIMEOUT_MS = AGENT_CONFIG.TIMEOUT_MS;
64
48
  export {
49
+ AGENT_CONFIG,
65
50
  DEFAULT_EXCLUDES,
51
+ LLMResponseParser,
66
52
  LocalRipgrepProvider,
67
- MAX_TURNS,
68
53
  SYSTEM_PROMPT,
69
- TIMEOUT_MS,
70
- formatAnalyseTree,
71
- formatToolResult,
54
+ buildInitialState,
55
+ calculateContextBudget,
56
+ formatListDirectoryTree,
57
+ formatAgentToolOutput as formatToolResult,
72
58
  formatTurnMessage,
59
+ getSystemPrompt,
60
+ normalizeFinishFiles,
73
61
  parseToolCalls,
74
- resolveFinishFiles
62
+ readFinishFiles,
63
+ resolveFinishFiles,
64
+ toolGrep,
65
+ toolListDirectory,
66
+ toolRead
75
67
  };
76
68
  //# sourceMappingURL=harness.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../tools/warp_grep/harness.ts"],"sourcesContent":["/**\n * Warp Grep Harness Primitives\n *\n * Building blocks for custom agent harnesses.\n * Use these when you want to control the agent loop yourself.\n *\n * @example\n * ```typescript\n * import {\n * parseToolCalls,\n * SYSTEM_PROMPT,\n * formatToolResult,\n * formatTurnMessage,\n * formatAnalyseTree,\n * resolveFinishFiles,\n * MAX_TURNS,\n * LocalRipgrepProvider,\n * type ToolCall,\n * type WarpGrepProvider,\n * } from '@morphllm/morphsdk/tools/warp-grep/harness';\n *\n * const provider = new LocalRipgrepProvider(repoRoot);\n * const messages = [\n * { role: 'system', content: SYSTEM_PROMPT },\n * { role: 'user', content: `<query>${query}</query>` },\n * ];\n *\n * for (let turn = 1; turn <= MAX_TURNS; turn++) {\n * const response = await myModel(messages);\n * messages.push({ role: 'assistant', content: response });\n *\n * const toolCalls = parseToolCalls(response);\n * const results: string[] = [];\n *\n * for (const call of toolCalls) {\n * if (call.name === 'finish') {\n * return await resolveFinishFiles(provider, call.arguments.files);\n * }\n *\n * let output: string;\n * if (call.name === 'grep') {\n * const r = await provider.grep(call.arguments);\n * output = r.error || r.lines.join('\\n') || 'no matches';\n * } else if (call.name === 'read') {\n * const r = await provider.read(call.arguments);\n * output = r.error || r.lines.join('\\n') || '(empty)';\n * } else if (call.name === 'analyse') {\n * const entries = await provider.analyse(call.arguments);\n * output = formatAnalyseTree(entries);\n * }\n *\n * results.push(formatToolResult(call.name, call.arguments, output));\n * }\n *\n * messages.push({\n * role: 'user',\n * content: results.join('\\n') + formatTurnMessage(turn)\n * });\n * }\n * ```\n */\n\nimport { LLMResponseParser } from './agent/parser.js';\nimport { formatAgentToolOutput } from './agent/formatter.js';\nimport { SYSTEM_PROMPT } from './agent/prompt.js';\nimport { AGENT_CONFIG, DEFAULT_EXCLUDES } from './agent/config.js';\nimport { readFinishFiles } from './tools/finish.js';\nimport { LocalRipgrepProvider } from './providers/local.js';\nimport type { ToolCall, ToolName, FinishFileSpec, ChatMessage } from './agent/types.js';\nimport type { WarpGrepProvider, GrepResult, ReadResult, AnalyseEntry } from './providers/types.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// PARSING\n// ════════════════════════════════════════════════════════════════════════════\n\nconst parser = new LLMResponseParser();\n\n/**\n * Parse model output into tool calls.\n * Automatically handles <think> block removal and <tool_call> extraction.\n *\n * @param text - Raw model response text\n * @returns Array of parsed tool calls\n *\n * @example\n * ```typescript\n * const response = `\n * <think>Looking for auth code...</think>\n * <tool_call>grep 'authenticate' src/</tool_call>\n * <tool_call>analyse src/auth</tool_call>\n * `;\n * const calls = parseToolCalls(response);\n * // [{ name: 'grep', arguments: { pattern: 'authenticate', path: 'src/' } },\n * // { name: 'analyse', arguments: { path: 'src/auth' } }]\n * ```\n */\nexport function parseToolCalls(text: string): ToolCall[] {\n return parser.parse(text);\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// SYSTEM PROMPT\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { SYSTEM_PROMPT };\n\n// ════════════════════════════════════════════════════════════════════════════\n// FORMATTING\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Format tool output with XML wrapper for model consumption.\n * Handles grep, read, analyse with appropriate tags.\n *\n * @param name - Tool name ('grep', 'read', 'analyse')\n * @param args - Tool arguments\n * @param output - Tool output string\n * @param options - Optional settings (isError)\n * @returns Formatted XML string\n *\n * @example\n * ```typescript\n * const formatted = formatToolResult('grep', { pattern: 'auth', path: 'src/' }, 'src/auth.ts:10:function auth()');\n * // <grep_output pattern=\"auth\" path=\"src/\">\n * // src/auth.ts:10:function auth()\n * // </grep_output>\n * ```\n */\nexport function formatToolResult(\n name: string,\n args: Record<string, unknown>,\n output: string,\n options?: { isError?: boolean }\n): string {\n return formatAgentToolOutput(name, args, output, options ?? {});\n}\n\n/**\n * Format turn counter message for the model.\n *\n * @param turn - Current turn number (1-based)\n * @param maxTurns - Maximum turns allowed (default: 4)\n * @returns Turn message string\n *\n * @example\n * ```typescript\n * formatTurnMessage(1); // \"\\n\\n[Turn 1/4] You have 3 turns remaining.\"\n * formatTurnMessage(3); // \"\\n\\n[Turn 3/4] You have 1 turn remaining.\"\n * formatTurnMessage(4); // \"\\n\\n[Turn 4/4] This is your LAST turn. You MUST call finish now.\"\n * ```\n */\nexport function formatTurnMessage(turn: number, maxTurns = 4): string {\n const remaining = maxTurns - turn;\n if (remaining === 0) {\n return `\\n\\n[Turn ${turn}/${maxTurns}] This is your LAST turn. You MUST call finish now.`;\n }\n if (remaining === 1) {\n return `\\n\\n[Turn ${turn}/${maxTurns}] You have 1 turn remaining.`;\n }\n return `\\n\\n[Turn ${turn}/${maxTurns}] You have ${remaining} turns remaining.`;\n}\n\n/**\n * Convert AnalyseEntry[] to tree view string.\n * Matches the format expected by the model.\n *\n * @param entries - Array of analyse entries\n * @returns Tree view string\n *\n * @example\n * ```typescript\n * const entries = [\n * { name: 'src', path: 'src', type: 'dir', depth: 0 },\n * { name: 'index.ts', path: 'src/index.ts', type: 'file', depth: 1 },\n * ];\n * formatAnalyseTree(entries);\n * // \"- [D] src\\n - [F] index.ts\"\n * ```\n */\nexport function formatAnalyseTree(entries: AnalyseEntry[]): string {\n if (!entries.length) return 'empty';\n return entries\n .map((e) => `${' '.repeat(e.depth)}- ${e.type === 'dir' ? '[D]' : '[F]'} ${e.name}`)\n .join('\\n');\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// FINISH RESOLUTION\n// ════════════════════════════════════════════════════════════════════════════\n\n/**\n * Resolved file with path and content\n */\nexport type ResolvedFile = { path: string; content: string };\n\n/**\n * Resolve finish command - read all specified file ranges.\n *\n * @param provider - WarpGrepProvider implementation\n * @param files - Array of file specs from finish command\n * @returns Array of resolved files with content\n *\n * @example\n * ```typescript\n * const files = [\n * { path: 'src/auth.ts', lines: [[1, 50], [100, 120]] },\n * { path: 'src/types.ts', lines: [[1, 30]] },\n * ];\n * const resolved = await resolveFinishFiles(provider, files);\n * // [{ path: 'src/auth.ts', content: '...' }, { path: 'src/types.ts', content: '...' }]\n * ```\n */\nexport async function resolveFinishFiles(\n provider: WarpGrepProvider,\n files: FinishFileSpec[]\n): Promise<ResolvedFile[]> {\n return readFinishFiles('', files, async (p, s, e) => {\n const r = await provider.read({ path: p, start: s, end: e });\n return r.lines.map((l) => {\n const idx = l.indexOf('|');\n return idx >= 0 ? l.slice(idx + 1) : l;\n });\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// CONSTANTS\n// ════════════════════════════════════════════════════════════════════════════\n\n/** Maximum turns before forced finish (default: 4) */\nexport const MAX_TURNS = 4;\n\n/** Request timeout in milliseconds */\nexport const TIMEOUT_MS = AGENT_CONFIG.TIMEOUT_MS;\n\n/** Default file/directory exclusions */\nexport { DEFAULT_EXCLUDES };\n\n// ════════════════════════════════════════════════════════════════════════════\n// PROVIDER + TYPES\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { LocalRipgrepProvider };\n\nexport type {\n ToolCall,\n ToolName,\n FinishFileSpec,\n ChatMessage,\n WarpGrepProvider,\n GrepResult,\n ReadResult,\n AnalyseEntry,\n};\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA2EA,IAAM,SAAS,IAAI,kBAAkB;AAqB9B,SAAS,eAAe,MAA0B;AACvD,SAAO,OAAO,MAAM,IAAI;AAC1B;AA8BO,SAAS,iBACd,MACA,MACA,QACA,SACQ;AACR,SAAO,sBAAsB,MAAM,MAAM,QAAQ,WAAW,CAAC,CAAC;AAChE;AAgBO,SAAS,kBAAkB,MAAc,WAAW,GAAW;AACpE,QAAM,YAAY,WAAW;AAC7B,MAAI,cAAc,GAAG;AACnB,WAAO;AAAA;AAAA,QAAa,IAAI,IAAI,QAAQ;AAAA,EACtC;AACA,MAAI,cAAc,GAAG;AACnB,WAAO;AAAA;AAAA,QAAa,IAAI,IAAI,QAAQ;AAAA,EACtC;AACA,SAAO;AAAA;AAAA,QAAa,IAAI,IAAI,QAAQ,cAAc,SAAS;AAC7D;AAmBO,SAAS,kBAAkB,SAAiC;AACjE,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAC5B,SAAO,QACJ,IAAI,CAAC,MAAM,GAAG,KAAK,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,QAAQ,QAAQ,KAAK,IAAI,EAAE,IAAI,EAAE,EACnF,KAAK,IAAI;AACd;AA4BA,eAAsB,mBACpB,UACA,OACyB;AACzB,SAAO,gBAAgB,IAAI,OAAO,OAAO,GAAG,GAAG,MAAM;AACnD,UAAM,IAAI,MAAM,SAAS,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC;AAC3D,WAAO,EAAE,MAAM,IAAI,CAAC,MAAM;AACxB,YAAM,MAAM,EAAE,QAAQ,GAAG;AACzB,aAAO,OAAO,IAAI,EAAE,MAAM,MAAM,CAAC,IAAI;AAAA,IACvC,CAAC;AAAA,EACH,CAAC;AACH;AAOO,IAAM,YAAY;AAGlB,IAAM,aAAa,aAAa;","names":[]}
1
+ {"version":3,"sources":["../../../tools/warp_grep/harness.ts"],"sourcesContent":["/**\n * Warp Grep Harness Primitives\n *\n * Building blocks for custom agent harnesses.\n * Use these when you want to control the agent loop yourself.\n *\n * @example\n * ```typescript\n * import {\n * parseToolCalls,\n * SYSTEM_PROMPT,\n * formatToolResult,\n * formatTurnMessage,\n * formatListDirectoryTree,\n * calculateContextBudget,\n * buildInitialState,\n * toolGrep,\n * toolRead,\n * toolListDirectory,\n * resolveFinishFiles,\n * AGENT_CONFIG,\n * LocalRipgrepProvider,\n * type ToolCall,\n * type WarpGrepProvider,\n * } from '@morphllm/morphsdk/tools/warp-grep/harness';\n *\n * const provider = new LocalRipgrepProvider(repoRoot);\n * const messages = [\n * { role: 'system', content: SYSTEM_PROMPT },\n * { role: 'user', content: await buildInitialState(repoRoot, query, provider) },\n * ];\n *\n * for (let turn = 1; turn <= AGENT_CONFIG.MAX_TURNS; turn++) {\n * const response = await myModel(messages);\n * messages.push({ role: 'assistant', content: response });\n *\n * const toolCalls = parseToolCalls(response);\n * const results: string[] = [];\n *\n * for (const call of toolCalls) {\n * if (call.name === 'finish') {\n * return await resolveFinishFiles(provider, call.arguments.files);\n * }\n *\n * let output: string;\n * if (call.name === 'grep') {\n * const r = await toolGrep(provider, call.arguments);\n * output = r.output;\n * } else if (call.name === 'read') {\n * output = await toolRead(provider, call.arguments);\n * } else if (call.name === 'list_directory') {\n * output = await toolListDirectory(provider, call.arguments);\n * }\n *\n * results.push(formatToolResult(call.name, call.arguments, output));\n * }\n *\n * const turnMsg = formatTurnMessage(turn, AGENT_CONFIG.MAX_TURNS);\n * const budget = calculateContextBudget(messages);\n * messages.push({ role: 'user', content: results.join('\\n') + turnMsg + '\\n' + budget });\n * }\n * ```\n */\n\nimport { LLMResponseParser } from './agent/parser.js';\nimport type { ToolCall, ToolName, FinishFileSpec, ChatMessage } from './agent/types.js';\nimport type { WarpGrepProvider, GrepResult, ReadResult, ListDirectoryEntry } from './providers/types.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// PARSING\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { LLMResponseParser };\n\nconst parser = new LLMResponseParser();\n\nexport function parseToolCalls(text: string): ToolCall[] {\n return parser.parse(text);\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// SYSTEM PROMPT\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { SYSTEM_PROMPT, getSystemPrompt } from './agent/prompt.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// FORMATTING\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { formatAgentToolOutput as formatToolResult } from './agent/formatter.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// HELPERS - same functions runner.ts uses\n// ════════════════════════════════════════════════════════════════════════════\n\nexport {\n formatTurnMessage,\n calculateContextBudget,\n buildInitialState,\n formatListDirectoryTree,\n} from './agent/helpers.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// TOOL EXECUTORS\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { toolGrep } from './agent/tools/grep.js';\nexport { toolRead } from './agent/tools/read.js';\nexport { toolListDirectory } from './agent/tools/list_directory.js';\nexport { readFinishFiles, normalizeFinishFiles } from './agent/tools/finish.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// FINISH RESOLUTION (convenience wrapper)\n// ════════════════════════════════════════════════════════════════════════════\n\nimport { readFinishFiles } from './agent/tools/finish.js';\n\nexport type ResolvedFile = { path: string; content: string };\n\nexport async function resolveFinishFiles(\n provider: WarpGrepProvider,\n files: FinishFileSpec[]\n): Promise<ResolvedFile[]> {\n return readFinishFiles('', files, async (p, s, e) => {\n const r = await provider.read({ path: p, start: s, end: e });\n return r.lines.map((l) => {\n const idx = l.indexOf('|');\n return idx >= 0 ? l.slice(idx + 1) : l;\n });\n });\n}\n\n// ════════════════════════════════════════════════════════════════════════════\n// CONFIG + CONSTANTS\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { AGENT_CONFIG, DEFAULT_EXCLUDES } from './agent/config.js';\n\n// ════════════════════════════════════════════════════════════════════════════\n// PROVIDER + TYPES\n// ════════════════════════════════════════════════════════════════════════════\n\nexport { LocalRipgrepProvider } from './providers/local.js';\n\nexport type {\n ToolCall,\n ToolName,\n FinishFileSpec,\n ChatMessage,\n WarpGrepProvider,\n GrepResult,\n ReadResult,\n ListDirectoryEntry,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EA,IAAM,SAAS,IAAI,kBAAkB;AAE9B,SAAS,eAAe,MAA0B;AACvD,SAAO,OAAO,MAAM,IAAI;AAC1B;AA0CA,eAAsB,mBACpB,UACA,OACyB;AACzB,SAAO,gBAAgB,IAAI,OAAO,OAAO,GAAG,GAAG,MAAM;AACnD,UAAM,IAAI,MAAM,SAAS,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC;AAC3D,WAAO,EAAE,MAAM,IAAI,CAAC,MAAM;AACxB,YAAM,MAAM,EAAE,QAAQ,GAAG;AACzB,aAAO,OAAO,IAAI,EAAE,MAAM,MAAM,CAAC,IAAI;AAAA,IACvC,CAAC;AAAA,EACH,CAAC;AACH;","names":[]}