@morphllm/morphsdk 0.2.153 → 0.2.154

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 (170) hide show
  1. package/dist/{chunk-MJQNHIUZ.js → chunk-2WAHX6I2.js} +2 -2
  2. package/dist/{chunk-7AWNEVBE.js → chunk-3BTUUH23.js} +2 -2
  3. package/dist/{chunk-NO2FGIQ7.js → chunk-3XO33KPS.js} +2 -2
  4. package/dist/{chunk-NO2FGIQ7.js.map → chunk-3XO33KPS.js.map} +1 -1
  5. package/dist/{chunk-GAZCVVNY.js → chunk-4R6F66B7.js} +2 -2
  6. package/dist/{chunk-QFRDNJXM.js → chunk-5IKDEESU.js} +3 -3
  7. package/dist/{chunk-5D7DDSZQ.js → chunk-A6T6E636.js} +2 -2
  8. package/dist/{chunk-FWHQH6RG.js → chunk-D5UUKDKL.js} +2 -2
  9. package/dist/{chunk-YBVAKGFE.js → chunk-FOKMTUWC.js} +2 -2
  10. package/dist/chunk-GLQWEINZ.js +53 -0
  11. package/dist/chunk-GLQWEINZ.js.map +1 -0
  12. package/dist/{chunk-KM7RICB6.js → chunk-J43SJUCO.js} +1 -1
  13. package/dist/{chunk-UFPDHAZ2.js → chunk-KRRO7FF2.js} +2 -2
  14. package/dist/{chunk-WTMEO2YB.js → chunk-LK4C3NYX.js} +2 -2
  15. package/dist/{chunk-QMLGJK66.js → chunk-MTRH7FMN.js} +2 -2
  16. package/dist/{chunk-I3ZPXGMZ.js → chunk-N4KLUOXK.js} +2 -2
  17. package/dist/{chunk-GKBKSSUA.js → chunk-P57SFOLD.js} +2 -2
  18. package/dist/{chunk-QVWKDO76.js → chunk-PRHEWGWC.js} +20 -20
  19. package/dist/{chunk-77O2YF4B.js → chunk-Q77CT3RI.js} +2 -2
  20. package/dist/{chunk-ZAADJ3ER.js → chunk-QSATHLZJ.js} +2 -2
  21. package/dist/{chunk-AGFVQOGJ.js → chunk-SCVWDNQP.js} +2 -2
  22. package/dist/chunk-SCVWDNQP.js.map +1 -0
  23. package/dist/{chunk-JB4T3K5T.js → chunk-TAGDMT3K.js} +2 -2
  24. package/dist/{chunk-H6RMMTKF.js → chunk-UDI5U6QV.js} +2 -2
  25. package/dist/{chunk-7IQMKVT4.js → chunk-VK76R3IN.js} +2 -2
  26. package/dist/{chunk-MFKR5VVL.js → chunk-WQU6QXSU.js} +17 -16
  27. package/dist/chunk-WQU6QXSU.js.map +1 -0
  28. package/dist/{chunk-Q4DXGXXU.js → chunk-Y5O3A7SU.js} +2 -2
  29. package/dist/{chunk-6FRGRPUO.js → chunk-YKBVE3CE.js} +2 -2
  30. package/dist/{chunk-3VMW3UJY.js → chunk-ZHKANLAQ.js} +2 -2
  31. package/dist/{chunk-QDDT5L5Y.js → chunk-ZSA3NL5T.js} +2 -2
  32. package/dist/client.cjs +140 -97
  33. package/dist/client.cjs.map +1 -1
  34. package/dist/client.js +24 -23
  35. package/dist/edge.cjs +2 -2
  36. package/dist/edge.cjs.map +1 -1
  37. package/dist/edge.js +7 -7
  38. package/dist/index.cjs +140 -97
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.js +26 -25
  41. package/dist/modelrouter/core.cjs +1 -1
  42. package/dist/modelrouter/core.cjs.map +1 -1
  43. package/dist/modelrouter/core.js +3 -3
  44. package/dist/modelrouter/index.cjs +1 -1
  45. package/dist/modelrouter/index.cjs.map +1 -1
  46. package/dist/modelrouter/index.js +3 -3
  47. package/dist/subagents/anthropic.cjs +138 -15
  48. package/dist/subagents/anthropic.cjs.map +1 -1
  49. package/dist/subagents/anthropic.js +6 -4
  50. package/dist/subagents/vercel.cjs +138 -15
  51. package/dist/subagents/vercel.cjs.map +1 -1
  52. package/dist/subagents/vercel.js +6 -4
  53. package/dist/tools/browser/anthropic.cjs +1 -1
  54. package/dist/tools/browser/anthropic.cjs.map +1 -1
  55. package/dist/tools/browser/anthropic.js +5 -5
  56. package/dist/tools/browser/core.cjs +1 -1
  57. package/dist/tools/browser/core.cjs.map +1 -1
  58. package/dist/tools/browser/core.js +4 -4
  59. package/dist/tools/browser/index.cjs +1 -1
  60. package/dist/tools/browser/index.cjs.map +1 -1
  61. package/dist/tools/browser/index.js +7 -7
  62. package/dist/tools/browser/openai.cjs +1 -1
  63. package/dist/tools/browser/openai.cjs.map +1 -1
  64. package/dist/tools/browser/openai.js +5 -5
  65. package/dist/tools/browser/profiles/core.cjs +1 -1
  66. package/dist/tools/browser/profiles/core.cjs.map +1 -1
  67. package/dist/tools/browser/profiles/core.js +3 -3
  68. package/dist/tools/browser/profiles/index.cjs +1 -1
  69. package/dist/tools/browser/profiles/index.cjs.map +1 -1
  70. package/dist/tools/browser/profiles/index.js +3 -3
  71. package/dist/tools/browser/vercel.cjs +1 -1
  72. package/dist/tools/browser/vercel.cjs.map +1 -1
  73. package/dist/tools/browser/vercel.js +5 -5
  74. package/dist/tools/codebase_search/anthropic.cjs +1 -1
  75. package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
  76. package/dist/tools/codebase_search/anthropic.js +4 -4
  77. package/dist/tools/codebase_search/core.cjs +1 -1
  78. package/dist/tools/codebase_search/core.cjs.map +1 -1
  79. package/dist/tools/codebase_search/core.js +3 -3
  80. package/dist/tools/codebase_search/index.cjs +1 -1
  81. package/dist/tools/codebase_search/index.cjs.map +1 -1
  82. package/dist/tools/codebase_search/index.js +6 -6
  83. package/dist/tools/codebase_search/openai.cjs +1 -1
  84. package/dist/tools/codebase_search/openai.cjs.map +1 -1
  85. package/dist/tools/codebase_search/openai.js +4 -4
  86. package/dist/tools/codebase_search/vercel.cjs +1 -1
  87. package/dist/tools/codebase_search/vercel.cjs.map +1 -1
  88. package/dist/tools/codebase_search/vercel.js +4 -4
  89. package/dist/tools/compact/core.cjs +1 -1
  90. package/dist/tools/compact/core.cjs.map +1 -1
  91. package/dist/tools/compact/core.js +1 -1
  92. package/dist/tools/compact/index.cjs +50 -3
  93. package/dist/tools/compact/index.cjs.map +1 -1
  94. package/dist/tools/compact/index.d.ts +10 -0
  95. package/dist/tools/compact/index.js +6 -2
  96. package/dist/tools/fastapply/anthropic.cjs +1 -1
  97. package/dist/tools/fastapply/anthropic.cjs.map +1 -1
  98. package/dist/tools/fastapply/anthropic.js +4 -4
  99. package/dist/tools/fastapply/apply.cjs +1 -1
  100. package/dist/tools/fastapply/apply.cjs.map +1 -1
  101. package/dist/tools/fastapply/apply.js +2 -2
  102. package/dist/tools/fastapply/core.cjs +1 -1
  103. package/dist/tools/fastapply/core.cjs.map +1 -1
  104. package/dist/tools/fastapply/core.js +3 -3
  105. package/dist/tools/fastapply/index.cjs +1 -1
  106. package/dist/tools/fastapply/index.cjs.map +1 -1
  107. package/dist/tools/fastapply/index.js +6 -6
  108. package/dist/tools/fastapply/openai.cjs +1 -1
  109. package/dist/tools/fastapply/openai.cjs.map +1 -1
  110. package/dist/tools/fastapply/openai.js +4 -4
  111. package/dist/tools/fastapply/vercel.cjs +1 -1
  112. package/dist/tools/fastapply/vercel.cjs.map +1 -1
  113. package/dist/tools/fastapply/vercel.js +4 -4
  114. package/dist/tools/index.cjs +1 -1
  115. package/dist/tools/index.cjs.map +1 -1
  116. package/dist/tools/index.js +6 -6
  117. package/dist/tools/utils/resilience.cjs +1 -1
  118. package/dist/tools/utils/resilience.cjs.map +1 -1
  119. package/dist/tools/utils/resilience.js +2 -2
  120. package/dist/tools/warp_grep/agent/runner.cjs +1 -1
  121. package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
  122. package/dist/tools/warp_grep/agent/runner.js +2 -2
  123. package/dist/tools/warp_grep/anthropic.cjs +138 -15
  124. package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
  125. package/dist/tools/warp_grep/anthropic.js +6 -4
  126. package/dist/tools/warp_grep/client.cjs +138 -15
  127. package/dist/tools/warp_grep/client.cjs.map +1 -1
  128. package/dist/tools/warp_grep/client.js +5 -3
  129. package/dist/tools/warp_grep/gemini.cjs +138 -15
  130. package/dist/tools/warp_grep/gemini.cjs.map +1 -1
  131. package/dist/tools/warp_grep/gemini.js +5 -3
  132. package/dist/tools/warp_grep/gemini.js.map +1 -1
  133. package/dist/tools/warp_grep/index.cjs +138 -15
  134. package/dist/tools/warp_grep/index.cjs.map +1 -1
  135. package/dist/tools/warp_grep/index.js +5 -3
  136. package/dist/tools/warp_grep/openai.cjs +138 -15
  137. package/dist/tools/warp_grep/openai.cjs.map +1 -1
  138. package/dist/tools/warp_grep/openai.js +6 -4
  139. package/dist/tools/warp_grep/vercel.cjs +138 -15
  140. package/dist/tools/warp_grep/vercel.cjs.map +1 -1
  141. package/dist/tools/warp_grep/vercel.js +6 -4
  142. package/dist/version.cjs +1 -1
  143. package/dist/version.cjs.map +1 -1
  144. package/dist/version.js +1 -1
  145. package/package.json +1 -1
  146. package/dist/chunk-AGFVQOGJ.js.map +0 -1
  147. package/dist/chunk-MFKR5VVL.js.map +0 -1
  148. /package/dist/{chunk-MJQNHIUZ.js.map → chunk-2WAHX6I2.js.map} +0 -0
  149. /package/dist/{chunk-7AWNEVBE.js.map → chunk-3BTUUH23.js.map} +0 -0
  150. /package/dist/{chunk-GAZCVVNY.js.map → chunk-4R6F66B7.js.map} +0 -0
  151. /package/dist/{chunk-QFRDNJXM.js.map → chunk-5IKDEESU.js.map} +0 -0
  152. /package/dist/{chunk-5D7DDSZQ.js.map → chunk-A6T6E636.js.map} +0 -0
  153. /package/dist/{chunk-FWHQH6RG.js.map → chunk-D5UUKDKL.js.map} +0 -0
  154. /package/dist/{chunk-YBVAKGFE.js.map → chunk-FOKMTUWC.js.map} +0 -0
  155. /package/dist/{chunk-KM7RICB6.js.map → chunk-J43SJUCO.js.map} +0 -0
  156. /package/dist/{chunk-UFPDHAZ2.js.map → chunk-KRRO7FF2.js.map} +0 -0
  157. /package/dist/{chunk-WTMEO2YB.js.map → chunk-LK4C3NYX.js.map} +0 -0
  158. /package/dist/{chunk-QMLGJK66.js.map → chunk-MTRH7FMN.js.map} +0 -0
  159. /package/dist/{chunk-I3ZPXGMZ.js.map → chunk-N4KLUOXK.js.map} +0 -0
  160. /package/dist/{chunk-GKBKSSUA.js.map → chunk-P57SFOLD.js.map} +0 -0
  161. /package/dist/{chunk-QVWKDO76.js.map → chunk-PRHEWGWC.js.map} +0 -0
  162. /package/dist/{chunk-77O2YF4B.js.map → chunk-Q77CT3RI.js.map} +0 -0
  163. /package/dist/{chunk-ZAADJ3ER.js.map → chunk-QSATHLZJ.js.map} +0 -0
  164. /package/dist/{chunk-JB4T3K5T.js.map → chunk-TAGDMT3K.js.map} +0 -0
  165. /package/dist/{chunk-H6RMMTKF.js.map → chunk-UDI5U6QV.js.map} +0 -0
  166. /package/dist/{chunk-7IQMKVT4.js.map → chunk-VK76R3IN.js.map} +0 -0
  167. /package/dist/{chunk-Q4DXGXXU.js.map → chunk-Y5O3A7SU.js.map} +0 -0
  168. /package/dist/{chunk-6FRGRPUO.js.map → chunk-YKBVE3CE.js.map} +0 -0
  169. /package/dist/{chunk-3VMW3UJY.js.map → chunk-ZHKANLAQ.js.map} +0 -0
  170. /package/dist/{chunk-QDDT5L5Y.js.map → chunk-ZSA3NL5T.js.map} +0 -0
@@ -5,19 +5,21 @@ import {
5
5
  execute,
6
6
  openai_default,
7
7
  warpGrepTool
8
- } from "../../chunk-JB4T3K5T.js";
8
+ } from "../../chunk-TAGDMT3K.js";
9
9
  import "../../chunk-Q6QCHAMD.js";
10
10
  import {
11
11
  formatResult
12
- } from "../../chunk-MFKR5VVL.js";
12
+ } from "../../chunk-WQU6QXSU.js";
13
13
  import "../../chunk-63VHBANJ.js";
14
- import "../../chunk-6FRGRPUO.js";
14
+ import "../../chunk-YKBVE3CE.js";
15
15
  import "../../chunk-GVGJIXV2.js";
16
16
  import "../../chunk-B3AKP3RA.js";
17
17
  import "../../chunk-VNAGVCSP.js";
18
18
  import "../../chunk-CMSHXALI.js";
19
19
  import "../../chunk-I3J46TSB.js";
20
- import "../../chunk-NO2FGIQ7.js";
20
+ import "../../chunk-GLQWEINZ.js";
21
+ import "../../chunk-SCVWDNQP.js";
22
+ import "../../chunk-3XO33KPS.js";
21
23
  import "../../chunk-PZ5AY32C.js";
22
24
  export {
23
25
  createGitHubReadFileTool,
@@ -941,7 +941,7 @@ var import_openai = __toESM(require("openai"), 1);
941
941
  // package.json
942
942
  var package_default = {
943
943
  name: "@morphllm/morphsdk",
944
- version: "0.2.153",
944
+ version: "0.2.154",
945
945
  description: "TypeScript SDK and CLI for Morph Fast Apply integration",
946
946
  type: "module",
947
947
  main: "./dist/index.cjs",
@@ -1807,6 +1807,131 @@ function parseGitHubUrl(input) {
1807
1807
  );
1808
1808
  }
1809
1809
 
1810
+ // tools/compact/core.ts
1811
+ var DEFAULT_API_URL2 = "https://api.morphllm.com";
1812
+ var DEFAULT_TIMEOUT = 12e4;
1813
+ var CompactClient = class {
1814
+ config;
1815
+ constructor(config = {}) {
1816
+ this.config = {
1817
+ ...config,
1818
+ morphApiUrl: config.morphApiUrl ?? DEFAULT_API_URL2,
1819
+ timeout: config.timeout ?? DEFAULT_TIMEOUT
1820
+ };
1821
+ }
1822
+ /**
1823
+ * Compact messages or text via /v1/compact.
1824
+ * Returns per-message `compacted_line_ranges` showing which lines were removed.
1825
+ *
1826
+ * @example
1827
+ * ```typescript
1828
+ * const client = new CompactClient({ morphApiKey: 'sk-...' });
1829
+ * const result = await client.compact({
1830
+ * input: codeFile,
1831
+ * query: "authentication",
1832
+ * compressionRatio: 0.5,
1833
+ * });
1834
+ * console.log(result.output);
1835
+ * ```
1836
+ */
1837
+ async compact(input) {
1838
+ const apiKey = this.config.morphApiKey || (typeof process !== "undefined" ? process.env?.MORPH_API_KEY : void 0);
1839
+ const debug = this.config.debug || false;
1840
+ if (!apiKey) {
1841
+ throw new Error(
1842
+ "Morph API key not found. Set MORPH_API_KEY environment variable or pass morphApiKey in config."
1843
+ );
1844
+ }
1845
+ const url = `${this.config.morphApiUrl}/v1/compact`;
1846
+ if (debug) {
1847
+ console.log(`[Compact] Calling ${url}`);
1848
+ }
1849
+ const body = {
1850
+ compression_ratio: input.compressionRatio ?? 0.5,
1851
+ preserve_recent: input.preserveRecent ?? 2,
1852
+ model: input.model ?? "morph-compactor",
1853
+ include_line_ranges: input.includeLineRanges ?? true,
1854
+ include_markers: input.includeMarkers ?? true
1855
+ };
1856
+ if (input.query !== void 0) {
1857
+ body.query = input.query;
1858
+ }
1859
+ if (input.messages) {
1860
+ body.messages = input.messages;
1861
+ } else if (typeof input.input === "string") {
1862
+ body.input = input.input;
1863
+ } else if (Array.isArray(input.input)) {
1864
+ body.messages = input.input;
1865
+ } else {
1866
+ throw new Error("Either 'input' or 'messages' must be provided");
1867
+ }
1868
+ const startTime = Date.now();
1869
+ const response = await fetch(url, {
1870
+ method: "POST",
1871
+ headers: {
1872
+ "Authorization": `Bearer ${apiKey}`,
1873
+ "Content-Type": "application/json"
1874
+ },
1875
+ body: JSON.stringify(body),
1876
+ signal: AbortSignal.timeout(this.config.timeout)
1877
+ });
1878
+ if (!response.ok) {
1879
+ const text = await response.text();
1880
+ throw new Error(`Compact API error ${response.status}: ${text}`);
1881
+ }
1882
+ const data = await response.json();
1883
+ if (debug) {
1884
+ console.log(`[Compact] compact() done in ${Date.now() - startTime}ms`);
1885
+ }
1886
+ return data;
1887
+ }
1888
+ };
1889
+
1890
+ // tools/compact/utils.ts
1891
+ async function compactFileContexts(files, query, apiKey, apiUrl, maxTokens = 1e4, maxConcurrency = 3) {
1892
+ const totalLength = files.reduce((sum, file) => sum + file.content.length, 0);
1893
+ const estimatedTokens = totalLength / 3;
1894
+ if (estimatedTokens <= maxTokens) {
1895
+ return files;
1896
+ }
1897
+ let compressionRatio = maxTokens / estimatedTokens;
1898
+ compressionRatio = Math.max(0.3, Math.min(0.99, compressionRatio));
1899
+ const client = new CompactClient({
1900
+ morphApiKey: apiKey,
1901
+ morphApiUrl: apiUrl
1902
+ });
1903
+ const results = [];
1904
+ const inProgress = /* @__PURE__ */ new Set();
1905
+ for (const file of files) {
1906
+ if (file.content.length < 500) {
1907
+ results.push({ path: file.path, content: file.content });
1908
+ continue;
1909
+ }
1910
+ const task = async () => {
1911
+ try {
1912
+ const result = await client.compact({
1913
+ input: file.content,
1914
+ query,
1915
+ compressionRatio,
1916
+ preserveRecent: 0
1917
+ });
1918
+ results.push({ path: file.path, content: result.output });
1919
+ } catch (error) {
1920
+ console.error(`[compactFileContexts] Failed to compact file ${file.path}:`, error);
1921
+ results.push({ path: file.path, content: file.content });
1922
+ }
1923
+ };
1924
+ const promise = task().finally(() => inProgress.delete(promise));
1925
+ inProgress.add(promise);
1926
+ if (inProgress.size >= maxConcurrency) {
1927
+ await Promise.race(inProgress);
1928
+ }
1929
+ }
1930
+ await Promise.all(inProgress);
1931
+ const orderMap = new Map(files.map((f, i) => [f.path, i]));
1932
+ return results.sort((a, b) => (orderMap.get(a.path) ?? 0) - (orderMap.get(b.path) ?? 0));
1933
+ }
1934
+
1810
1935
  // tools/warp_grep/client.ts
1811
1936
  var DEFAULT_CODE_SEARCH_URL = "https://morphllm.com";
1812
1937
  async function getLocalProvider(repoRoot, excludes, allowNames) {
@@ -1929,20 +2054,9 @@ async function executeToolCall(input, config) {
1929
2054
  timeout: config.timeout,
1930
2055
  search_type: config.search_type
1931
2056
  });
1932
- const finish = result.finish;
1933
- if (result.terminationReason !== "completed" || !finish?.metadata) {
1934
- const errorDetails = result.errors?.map((e) => e.message).join("; ") || "unknown reason";
1935
- console.error(`[warp_grep] executeToolCall failed. Reason: ${result.terminationReason}. Errors: ${errorDetails}. Turns: ${result.timings?.turns?.length ?? 0}`);
1936
- return { success: false, error: `Search did not complete: ${errorDetails}` };
1937
- }
1938
- const contexts = (finish.resolved ?? []).map((r) => ({
1939
- file: r.path,
1940
- content: r.content,
1941
- lines: r.ranges
1942
- }));
1943
- return { success: true, contexts, summary: finish.payload };
2057
+ return processAgentResult(result, parsed.search_term, config.morphApiKey, config.morphApiUrl);
1944
2058
  }
1945
- function processAgentResult(result) {
2059
+ async function processAgentResult(result, searchTerm, apiKey, apiUrl) {
1946
2060
  const finish = result.finish;
1947
2061
  if (result.terminationReason !== "completed" || !finish?.metadata) {
1948
2062
  const errorDetails = result.errors?.map((e) => e.message).join("; ") || "unknown reason";
@@ -1954,6 +2068,15 @@ function processAgentResult(result) {
1954
2068
  content: r.content,
1955
2069
  lines: r.ranges
1956
2070
  }));
2071
+ try {
2072
+ const compactable = contexts.map((c) => ({ path: c.file, content: c.content }));
2073
+ const compacted = await compactFileContexts(compactable, searchTerm, apiKey, apiUrl);
2074
+ for (let i = 0; i < contexts.length; i++) {
2075
+ contexts[i].content = compacted[i].content;
2076
+ }
2077
+ } catch (error) {
2078
+ console.error(`[warp_grep] Failed to compact result contexts:`, error);
2079
+ }
1957
2080
  return { success: true, contexts, summary: finish.payload };
1958
2081
  }
1959
2082
  async function* executeToolCallStreaming(input, config) {
@@ -1982,7 +2105,7 @@ async function* executeToolCallStreaming(input, config) {
1982
2105
  }
1983
2106
  yield value;
1984
2107
  }
1985
- return processAgentResult(agentResult);
2108
+ return processAgentResult(agentResult, parsed.search_term, config.morphApiKey, config.morphApiUrl);
1986
2109
  }
1987
2110
  async function fetchRawGitHubFile(owner, repo, filePath, branch, timeout) {
1988
2111
  const branches = branch ? [branch] : ["HEAD"];