@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.
- package/dist/{chunk-MJQNHIUZ.js → chunk-2WAHX6I2.js} +2 -2
- package/dist/{chunk-7AWNEVBE.js → chunk-3BTUUH23.js} +2 -2
- package/dist/{chunk-NO2FGIQ7.js → chunk-3XO33KPS.js} +2 -2
- package/dist/{chunk-NO2FGIQ7.js.map → chunk-3XO33KPS.js.map} +1 -1
- package/dist/{chunk-GAZCVVNY.js → chunk-4R6F66B7.js} +2 -2
- package/dist/{chunk-QFRDNJXM.js → chunk-5IKDEESU.js} +3 -3
- package/dist/{chunk-5D7DDSZQ.js → chunk-A6T6E636.js} +2 -2
- package/dist/{chunk-FWHQH6RG.js → chunk-D5UUKDKL.js} +2 -2
- package/dist/{chunk-YBVAKGFE.js → chunk-FOKMTUWC.js} +2 -2
- package/dist/chunk-GLQWEINZ.js +53 -0
- package/dist/chunk-GLQWEINZ.js.map +1 -0
- package/dist/{chunk-KM7RICB6.js → chunk-J43SJUCO.js} +1 -1
- package/dist/{chunk-UFPDHAZ2.js → chunk-KRRO7FF2.js} +2 -2
- package/dist/{chunk-WTMEO2YB.js → chunk-LK4C3NYX.js} +2 -2
- package/dist/{chunk-QMLGJK66.js → chunk-MTRH7FMN.js} +2 -2
- package/dist/{chunk-I3ZPXGMZ.js → chunk-N4KLUOXK.js} +2 -2
- package/dist/{chunk-GKBKSSUA.js → chunk-P57SFOLD.js} +2 -2
- package/dist/{chunk-QVWKDO76.js → chunk-PRHEWGWC.js} +20 -20
- package/dist/{chunk-77O2YF4B.js → chunk-Q77CT3RI.js} +2 -2
- package/dist/{chunk-ZAADJ3ER.js → chunk-QSATHLZJ.js} +2 -2
- package/dist/{chunk-AGFVQOGJ.js → chunk-SCVWDNQP.js} +2 -2
- package/dist/chunk-SCVWDNQP.js.map +1 -0
- package/dist/{chunk-JB4T3K5T.js → chunk-TAGDMT3K.js} +2 -2
- package/dist/{chunk-H6RMMTKF.js → chunk-UDI5U6QV.js} +2 -2
- package/dist/{chunk-7IQMKVT4.js → chunk-VK76R3IN.js} +2 -2
- package/dist/{chunk-MFKR5VVL.js → chunk-WQU6QXSU.js} +17 -16
- package/dist/chunk-WQU6QXSU.js.map +1 -0
- package/dist/{chunk-Q4DXGXXU.js → chunk-Y5O3A7SU.js} +2 -2
- package/dist/{chunk-6FRGRPUO.js → chunk-YKBVE3CE.js} +2 -2
- package/dist/{chunk-3VMW3UJY.js → chunk-ZHKANLAQ.js} +2 -2
- package/dist/{chunk-QDDT5L5Y.js → chunk-ZSA3NL5T.js} +2 -2
- package/dist/client.cjs +140 -97
- package/dist/client.cjs.map +1 -1
- package/dist/client.js +24 -23
- package/dist/edge.cjs +2 -2
- package/dist/edge.cjs.map +1 -1
- package/dist/edge.js +7 -7
- package/dist/index.cjs +140 -97
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +26 -25
- package/dist/modelrouter/core.cjs +1 -1
- package/dist/modelrouter/core.cjs.map +1 -1
- package/dist/modelrouter/core.js +3 -3
- package/dist/modelrouter/index.cjs +1 -1
- package/dist/modelrouter/index.cjs.map +1 -1
- package/dist/modelrouter/index.js +3 -3
- package/dist/subagents/anthropic.cjs +138 -15
- package/dist/subagents/anthropic.cjs.map +1 -1
- package/dist/subagents/anthropic.js +6 -4
- package/dist/subagents/vercel.cjs +138 -15
- package/dist/subagents/vercel.cjs.map +1 -1
- package/dist/subagents/vercel.js +6 -4
- package/dist/tools/browser/anthropic.cjs +1 -1
- package/dist/tools/browser/anthropic.cjs.map +1 -1
- package/dist/tools/browser/anthropic.js +5 -5
- package/dist/tools/browser/core.cjs +1 -1
- package/dist/tools/browser/core.cjs.map +1 -1
- package/dist/tools/browser/core.js +4 -4
- package/dist/tools/browser/index.cjs +1 -1
- package/dist/tools/browser/index.cjs.map +1 -1
- package/dist/tools/browser/index.js +7 -7
- package/dist/tools/browser/openai.cjs +1 -1
- package/dist/tools/browser/openai.cjs.map +1 -1
- package/dist/tools/browser/openai.js +5 -5
- package/dist/tools/browser/profiles/core.cjs +1 -1
- package/dist/tools/browser/profiles/core.cjs.map +1 -1
- package/dist/tools/browser/profiles/core.js +3 -3
- package/dist/tools/browser/profiles/index.cjs +1 -1
- package/dist/tools/browser/profiles/index.cjs.map +1 -1
- package/dist/tools/browser/profiles/index.js +3 -3
- package/dist/tools/browser/vercel.cjs +1 -1
- package/dist/tools/browser/vercel.cjs.map +1 -1
- package/dist/tools/browser/vercel.js +5 -5
- package/dist/tools/codebase_search/anthropic.cjs +1 -1
- package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
- package/dist/tools/codebase_search/anthropic.js +4 -4
- package/dist/tools/codebase_search/core.cjs +1 -1
- package/dist/tools/codebase_search/core.cjs.map +1 -1
- package/dist/tools/codebase_search/core.js +3 -3
- package/dist/tools/codebase_search/index.cjs +1 -1
- package/dist/tools/codebase_search/index.cjs.map +1 -1
- package/dist/tools/codebase_search/index.js +6 -6
- package/dist/tools/codebase_search/openai.cjs +1 -1
- package/dist/tools/codebase_search/openai.cjs.map +1 -1
- package/dist/tools/codebase_search/openai.js +4 -4
- package/dist/tools/codebase_search/vercel.cjs +1 -1
- package/dist/tools/codebase_search/vercel.cjs.map +1 -1
- package/dist/tools/codebase_search/vercel.js +4 -4
- package/dist/tools/compact/core.cjs +1 -1
- package/dist/tools/compact/core.cjs.map +1 -1
- package/dist/tools/compact/core.js +1 -1
- package/dist/tools/compact/index.cjs +50 -3
- package/dist/tools/compact/index.cjs.map +1 -1
- package/dist/tools/compact/index.d.ts +10 -0
- package/dist/tools/compact/index.js +6 -2
- package/dist/tools/fastapply/anthropic.cjs +1 -1
- package/dist/tools/fastapply/anthropic.cjs.map +1 -1
- package/dist/tools/fastapply/anthropic.js +4 -4
- package/dist/tools/fastapply/apply.cjs +1 -1
- package/dist/tools/fastapply/apply.cjs.map +1 -1
- package/dist/tools/fastapply/apply.js +2 -2
- package/dist/tools/fastapply/core.cjs +1 -1
- package/dist/tools/fastapply/core.cjs.map +1 -1
- package/dist/tools/fastapply/core.js +3 -3
- package/dist/tools/fastapply/index.cjs +1 -1
- package/dist/tools/fastapply/index.cjs.map +1 -1
- package/dist/tools/fastapply/index.js +6 -6
- package/dist/tools/fastapply/openai.cjs +1 -1
- package/dist/tools/fastapply/openai.cjs.map +1 -1
- package/dist/tools/fastapply/openai.js +4 -4
- package/dist/tools/fastapply/vercel.cjs +1 -1
- package/dist/tools/fastapply/vercel.cjs.map +1 -1
- package/dist/tools/fastapply/vercel.js +4 -4
- package/dist/tools/index.cjs +1 -1
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.js +6 -6
- package/dist/tools/utils/resilience.cjs +1 -1
- package/dist/tools/utils/resilience.cjs.map +1 -1
- package/dist/tools/utils/resilience.js +2 -2
- package/dist/tools/warp_grep/agent/runner.cjs +1 -1
- package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/runner.js +2 -2
- package/dist/tools/warp_grep/anthropic.cjs +138 -15
- package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
- package/dist/tools/warp_grep/anthropic.js +6 -4
- package/dist/tools/warp_grep/client.cjs +138 -15
- package/dist/tools/warp_grep/client.cjs.map +1 -1
- package/dist/tools/warp_grep/client.js +5 -3
- package/dist/tools/warp_grep/gemini.cjs +138 -15
- package/dist/tools/warp_grep/gemini.cjs.map +1 -1
- package/dist/tools/warp_grep/gemini.js +5 -3
- package/dist/tools/warp_grep/gemini.js.map +1 -1
- package/dist/tools/warp_grep/index.cjs +138 -15
- package/dist/tools/warp_grep/index.cjs.map +1 -1
- package/dist/tools/warp_grep/index.js +5 -3
- package/dist/tools/warp_grep/openai.cjs +138 -15
- package/dist/tools/warp_grep/openai.cjs.map +1 -1
- package/dist/tools/warp_grep/openai.js +6 -4
- package/dist/tools/warp_grep/vercel.cjs +138 -15
- package/dist/tools/warp_grep/vercel.cjs.map +1 -1
- package/dist/tools/warp_grep/vercel.js +6 -4
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-AGFVQOGJ.js.map +0 -1
- package/dist/chunk-MFKR5VVL.js.map +0 -1
- /package/dist/{chunk-MJQNHIUZ.js.map → chunk-2WAHX6I2.js.map} +0 -0
- /package/dist/{chunk-7AWNEVBE.js.map → chunk-3BTUUH23.js.map} +0 -0
- /package/dist/{chunk-GAZCVVNY.js.map → chunk-4R6F66B7.js.map} +0 -0
- /package/dist/{chunk-QFRDNJXM.js.map → chunk-5IKDEESU.js.map} +0 -0
- /package/dist/{chunk-5D7DDSZQ.js.map → chunk-A6T6E636.js.map} +0 -0
- /package/dist/{chunk-FWHQH6RG.js.map → chunk-D5UUKDKL.js.map} +0 -0
- /package/dist/{chunk-YBVAKGFE.js.map → chunk-FOKMTUWC.js.map} +0 -0
- /package/dist/{chunk-KM7RICB6.js.map → chunk-J43SJUCO.js.map} +0 -0
- /package/dist/{chunk-UFPDHAZ2.js.map → chunk-KRRO7FF2.js.map} +0 -0
- /package/dist/{chunk-WTMEO2YB.js.map → chunk-LK4C3NYX.js.map} +0 -0
- /package/dist/{chunk-QMLGJK66.js.map → chunk-MTRH7FMN.js.map} +0 -0
- /package/dist/{chunk-I3ZPXGMZ.js.map → chunk-N4KLUOXK.js.map} +0 -0
- /package/dist/{chunk-GKBKSSUA.js.map → chunk-P57SFOLD.js.map} +0 -0
- /package/dist/{chunk-QVWKDO76.js.map → chunk-PRHEWGWC.js.map} +0 -0
- /package/dist/{chunk-77O2YF4B.js.map → chunk-Q77CT3RI.js.map} +0 -0
- /package/dist/{chunk-ZAADJ3ER.js.map → chunk-QSATHLZJ.js.map} +0 -0
- /package/dist/{chunk-JB4T3K5T.js.map → chunk-TAGDMT3K.js.map} +0 -0
- /package/dist/{chunk-H6RMMTKF.js.map → chunk-UDI5U6QV.js.map} +0 -0
- /package/dist/{chunk-7IQMKVT4.js.map → chunk-VK76R3IN.js.map} +0 -0
- /package/dist/{chunk-Q4DXGXXU.js.map → chunk-Y5O3A7SU.js.map} +0 -0
- /package/dist/{chunk-6FRGRPUO.js.map → chunk-YKBVE3CE.js.map} +0 -0
- /package/dist/{chunk-3VMW3UJY.js.map → chunk-ZHKANLAQ.js.map} +0 -0
- /package/dist/{chunk-QDDT5L5Y.js.map → chunk-ZSA3NL5T.js.map} +0 -0
|
@@ -933,7 +933,7 @@ var import_openai = __toESM(require("openai"), 1);
|
|
|
933
933
|
// package.json
|
|
934
934
|
var package_default = {
|
|
935
935
|
name: "@morphllm/morphsdk",
|
|
936
|
-
version: "0.2.
|
|
936
|
+
version: "0.2.154",
|
|
937
937
|
description: "TypeScript SDK and CLI for Morph Fast Apply integration",
|
|
938
938
|
type: "module",
|
|
939
939
|
main: "./dist/index.cjs",
|
|
@@ -1799,6 +1799,131 @@ function parseGitHubUrl(input) {
|
|
|
1799
1799
|
);
|
|
1800
1800
|
}
|
|
1801
1801
|
|
|
1802
|
+
// tools/compact/core.ts
|
|
1803
|
+
var DEFAULT_API_URL2 = "https://api.morphllm.com";
|
|
1804
|
+
var DEFAULT_TIMEOUT = 12e4;
|
|
1805
|
+
var CompactClient = class {
|
|
1806
|
+
config;
|
|
1807
|
+
constructor(config = {}) {
|
|
1808
|
+
this.config = {
|
|
1809
|
+
...config,
|
|
1810
|
+
morphApiUrl: config.morphApiUrl ?? DEFAULT_API_URL2,
|
|
1811
|
+
timeout: config.timeout ?? DEFAULT_TIMEOUT
|
|
1812
|
+
};
|
|
1813
|
+
}
|
|
1814
|
+
/**
|
|
1815
|
+
* Compact messages or text via /v1/compact.
|
|
1816
|
+
* Returns per-message `compacted_line_ranges` showing which lines were removed.
|
|
1817
|
+
*
|
|
1818
|
+
* @example
|
|
1819
|
+
* ```typescript
|
|
1820
|
+
* const client = new CompactClient({ morphApiKey: 'sk-...' });
|
|
1821
|
+
* const result = await client.compact({
|
|
1822
|
+
* input: codeFile,
|
|
1823
|
+
* query: "authentication",
|
|
1824
|
+
* compressionRatio: 0.5,
|
|
1825
|
+
* });
|
|
1826
|
+
* console.log(result.output);
|
|
1827
|
+
* ```
|
|
1828
|
+
*/
|
|
1829
|
+
async compact(input) {
|
|
1830
|
+
const apiKey = this.config.morphApiKey || (typeof process !== "undefined" ? process.env?.MORPH_API_KEY : void 0);
|
|
1831
|
+
const debug = this.config.debug || false;
|
|
1832
|
+
if (!apiKey) {
|
|
1833
|
+
throw new Error(
|
|
1834
|
+
"Morph API key not found. Set MORPH_API_KEY environment variable or pass morphApiKey in config."
|
|
1835
|
+
);
|
|
1836
|
+
}
|
|
1837
|
+
const url = `${this.config.morphApiUrl}/v1/compact`;
|
|
1838
|
+
if (debug) {
|
|
1839
|
+
console.log(`[Compact] Calling ${url}`);
|
|
1840
|
+
}
|
|
1841
|
+
const body = {
|
|
1842
|
+
compression_ratio: input.compressionRatio ?? 0.5,
|
|
1843
|
+
preserve_recent: input.preserveRecent ?? 2,
|
|
1844
|
+
model: input.model ?? "morph-compactor",
|
|
1845
|
+
include_line_ranges: input.includeLineRanges ?? true,
|
|
1846
|
+
include_markers: input.includeMarkers ?? true
|
|
1847
|
+
};
|
|
1848
|
+
if (input.query !== void 0) {
|
|
1849
|
+
body.query = input.query;
|
|
1850
|
+
}
|
|
1851
|
+
if (input.messages) {
|
|
1852
|
+
body.messages = input.messages;
|
|
1853
|
+
} else if (typeof input.input === "string") {
|
|
1854
|
+
body.input = input.input;
|
|
1855
|
+
} else if (Array.isArray(input.input)) {
|
|
1856
|
+
body.messages = input.input;
|
|
1857
|
+
} else {
|
|
1858
|
+
throw new Error("Either 'input' or 'messages' must be provided");
|
|
1859
|
+
}
|
|
1860
|
+
const startTime = Date.now();
|
|
1861
|
+
const response = await fetch(url, {
|
|
1862
|
+
method: "POST",
|
|
1863
|
+
headers: {
|
|
1864
|
+
"Authorization": `Bearer ${apiKey}`,
|
|
1865
|
+
"Content-Type": "application/json"
|
|
1866
|
+
},
|
|
1867
|
+
body: JSON.stringify(body),
|
|
1868
|
+
signal: AbortSignal.timeout(this.config.timeout)
|
|
1869
|
+
});
|
|
1870
|
+
if (!response.ok) {
|
|
1871
|
+
const text = await response.text();
|
|
1872
|
+
throw new Error(`Compact API error ${response.status}: ${text}`);
|
|
1873
|
+
}
|
|
1874
|
+
const data = await response.json();
|
|
1875
|
+
if (debug) {
|
|
1876
|
+
console.log(`[Compact] compact() done in ${Date.now() - startTime}ms`);
|
|
1877
|
+
}
|
|
1878
|
+
return data;
|
|
1879
|
+
}
|
|
1880
|
+
};
|
|
1881
|
+
|
|
1882
|
+
// tools/compact/utils.ts
|
|
1883
|
+
async function compactFileContexts(files, query, apiKey, apiUrl, maxTokens = 1e4, maxConcurrency = 3) {
|
|
1884
|
+
const totalLength = files.reduce((sum, file) => sum + file.content.length, 0);
|
|
1885
|
+
const estimatedTokens = totalLength / 3;
|
|
1886
|
+
if (estimatedTokens <= maxTokens) {
|
|
1887
|
+
return files;
|
|
1888
|
+
}
|
|
1889
|
+
let compressionRatio = maxTokens / estimatedTokens;
|
|
1890
|
+
compressionRatio = Math.max(0.3, Math.min(0.99, compressionRatio));
|
|
1891
|
+
const client = new CompactClient({
|
|
1892
|
+
morphApiKey: apiKey,
|
|
1893
|
+
morphApiUrl: apiUrl
|
|
1894
|
+
});
|
|
1895
|
+
const results = [];
|
|
1896
|
+
const inProgress = /* @__PURE__ */ new Set();
|
|
1897
|
+
for (const file of files) {
|
|
1898
|
+
if (file.content.length < 500) {
|
|
1899
|
+
results.push({ path: file.path, content: file.content });
|
|
1900
|
+
continue;
|
|
1901
|
+
}
|
|
1902
|
+
const task = async () => {
|
|
1903
|
+
try {
|
|
1904
|
+
const result = await client.compact({
|
|
1905
|
+
input: file.content,
|
|
1906
|
+
query,
|
|
1907
|
+
compressionRatio,
|
|
1908
|
+
preserveRecent: 0
|
|
1909
|
+
});
|
|
1910
|
+
results.push({ path: file.path, content: result.output });
|
|
1911
|
+
} catch (error) {
|
|
1912
|
+
console.error(`[compactFileContexts] Failed to compact file ${file.path}:`, error);
|
|
1913
|
+
results.push({ path: file.path, content: file.content });
|
|
1914
|
+
}
|
|
1915
|
+
};
|
|
1916
|
+
const promise = task().finally(() => inProgress.delete(promise));
|
|
1917
|
+
inProgress.add(promise);
|
|
1918
|
+
if (inProgress.size >= maxConcurrency) {
|
|
1919
|
+
await Promise.race(inProgress);
|
|
1920
|
+
}
|
|
1921
|
+
}
|
|
1922
|
+
await Promise.all(inProgress);
|
|
1923
|
+
const orderMap = new Map(files.map((f, i) => [f.path, i]));
|
|
1924
|
+
return results.sort((a, b) => (orderMap.get(a.path) ?? 0) - (orderMap.get(b.path) ?? 0));
|
|
1925
|
+
}
|
|
1926
|
+
|
|
1802
1927
|
// tools/warp_grep/client.ts
|
|
1803
1928
|
var DEFAULT_CODE_SEARCH_URL = "https://morphllm.com";
|
|
1804
1929
|
async function getLocalProvider(repoRoot, excludes, allowNames) {
|
|
@@ -1921,20 +2046,9 @@ async function executeToolCall(input, config) {
|
|
|
1921
2046
|
timeout: config.timeout,
|
|
1922
2047
|
search_type: config.search_type
|
|
1923
2048
|
});
|
|
1924
|
-
|
|
1925
|
-
if (result.terminationReason !== "completed" || !finish?.metadata) {
|
|
1926
|
-
const errorDetails = result.errors?.map((e) => e.message).join("; ") || "unknown reason";
|
|
1927
|
-
console.error(`[warp_grep] executeToolCall failed. Reason: ${result.terminationReason}. Errors: ${errorDetails}. Turns: ${result.timings?.turns?.length ?? 0}`);
|
|
1928
|
-
return { success: false, error: `Search did not complete: ${errorDetails}` };
|
|
1929
|
-
}
|
|
1930
|
-
const contexts = (finish.resolved ?? []).map((r) => ({
|
|
1931
|
-
file: r.path,
|
|
1932
|
-
content: r.content,
|
|
1933
|
-
lines: r.ranges
|
|
1934
|
-
}));
|
|
1935
|
-
return { success: true, contexts, summary: finish.payload };
|
|
2049
|
+
return processAgentResult(result, parsed.search_term, config.morphApiKey, config.morphApiUrl);
|
|
1936
2050
|
}
|
|
1937
|
-
function processAgentResult(result) {
|
|
2051
|
+
async function processAgentResult(result, searchTerm, apiKey, apiUrl) {
|
|
1938
2052
|
const finish = result.finish;
|
|
1939
2053
|
if (result.terminationReason !== "completed" || !finish?.metadata) {
|
|
1940
2054
|
const errorDetails = result.errors?.map((e) => e.message).join("; ") || "unknown reason";
|
|
@@ -1946,6 +2060,15 @@ function processAgentResult(result) {
|
|
|
1946
2060
|
content: r.content,
|
|
1947
2061
|
lines: r.ranges
|
|
1948
2062
|
}));
|
|
2063
|
+
try {
|
|
2064
|
+
const compactable = contexts.map((c) => ({ path: c.file, content: c.content }));
|
|
2065
|
+
const compacted = await compactFileContexts(compactable, searchTerm, apiKey, apiUrl);
|
|
2066
|
+
for (let i = 0; i < contexts.length; i++) {
|
|
2067
|
+
contexts[i].content = compacted[i].content;
|
|
2068
|
+
}
|
|
2069
|
+
} catch (error) {
|
|
2070
|
+
console.error(`[warp_grep] Failed to compact result contexts:`, error);
|
|
2071
|
+
}
|
|
1949
2072
|
return { success: true, contexts, summary: finish.payload };
|
|
1950
2073
|
}
|
|
1951
2074
|
async function* executeToolCallStreaming(input, config) {
|
|
@@ -1974,7 +2097,7 @@ async function* executeToolCallStreaming(input, config) {
|
|
|
1974
2097
|
}
|
|
1975
2098
|
yield value;
|
|
1976
2099
|
}
|
|
1977
|
-
return processAgentResult(agentResult);
|
|
2100
|
+
return processAgentResult(agentResult, parsed.search_term, config.morphApiKey, config.morphApiUrl);
|
|
1978
2101
|
}
|
|
1979
2102
|
async function fetchRawGitHubFile(owner, repo, filePath, branch, timeout) {
|
|
1980
2103
|
const branches = branch ? [branch] : ["HEAD"];
|