@morphllm/morphsdk 0.2.162 → 0.2.164

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 (172) hide show
  1. package/dist/{chunk-OGMHU4PJ.js → chunk-3HVVQHHX.js} +9 -2
  2. package/dist/chunk-3HVVQHHX.js.map +1 -0
  3. package/dist/{chunk-JVKGSMEF.js → chunk-3NWJ74R4.js} +2 -2
  4. package/dist/{chunk-XUV5B27P.js → chunk-4DDD65QF.js} +2 -2
  5. package/dist/{chunk-DRTPCCEI.js → chunk-4FZXI4FI.js} +2 -2
  6. package/dist/chunk-5AM23TC7.js +42 -0
  7. package/dist/chunk-5AM23TC7.js.map +1 -0
  8. package/dist/{chunk-CNFHKQ42.js → chunk-BFNH475L.js} +2 -2
  9. package/dist/{chunk-ZG3YLRR5.js → chunk-CFCNSELX.js} +8 -2
  10. package/dist/chunk-CFCNSELX.js.map +1 -0
  11. package/dist/{chunk-NKUGRAYU.js → chunk-CRU3FQ54.js} +2 -2
  12. package/dist/{chunk-DXMNKPB6.js → chunk-DKPC5ZVX.js} +2 -2
  13. package/dist/{chunk-PWGBAVQ5.js → chunk-DVCIADH3.js} +2 -2
  14. package/dist/{chunk-LECHLXI4.js → chunk-EAIAZ2GD.js} +17 -6
  15. package/dist/chunk-EAIAZ2GD.js.map +1 -0
  16. package/dist/{chunk-4GQNYJBB.js → chunk-ECELX2KF.js} +9 -12
  17. package/dist/chunk-ECELX2KF.js.map +1 -0
  18. package/dist/{chunk-YRHM3RCQ.js → chunk-EPYCKNQ3.js} +2 -2
  19. package/dist/{chunk-OOE2TKKY.js → chunk-MRYULNMU.js} +12 -21
  20. package/dist/chunk-MRYULNMU.js.map +1 -0
  21. package/dist/{chunk-4U5JFT6X.js → chunk-MVMB6GBY.js} +33 -26
  22. package/dist/{chunk-4U5JFT6X.js.map → chunk-MVMB6GBY.js.map} +1 -1
  23. package/dist/{chunk-UKT3CKC7.js → chunk-N4SSQFYN.js} +2 -2
  24. package/dist/{chunk-7QMX45QD.js → chunk-NKFMGSUH.js} +33 -6
  25. package/dist/chunk-NKFMGSUH.js.map +1 -0
  26. package/dist/{chunk-LZQBVEY2.js → chunk-NMRQWMTH.js} +35 -27
  27. package/dist/chunk-NMRQWMTH.js.map +1 -0
  28. package/dist/{chunk-UVRC4LKZ.js → chunk-Q7XZ6JGW.js} +2 -2
  29. package/dist/{chunk-UZX7SY33.js → chunk-RR7P4SMP.js} +2 -2
  30. package/dist/{chunk-UETFIUIG.js → chunk-VCFUU5TL.js} +2 -2
  31. package/dist/{chunk-5XTA7GCY.js → chunk-VDMF4WWF.js} +2 -2
  32. package/dist/{chunk-YBKT2UOK.js → chunk-XULEBEBX.js} +2 -2
  33. package/dist/{chunk-Y4NYT5L6.js → chunk-YOF3N2EL.js} +11 -26
  34. package/dist/chunk-YOF3N2EL.js.map +1 -0
  35. package/dist/{chunk-4Q6VFODP.js → chunk-ZEEHRQYJ.js} +2 -2
  36. package/dist/{chunk-VQSLLYKE.js → chunk-ZEMLB2KV.js} +2 -2
  37. package/dist/client.cjs +185 -115
  38. package/dist/client.cjs.map +1 -1
  39. package/dist/client.d.ts +1 -1
  40. package/dist/client.js +25 -24
  41. package/dist/edge.cjs +83 -50
  42. package/dist/edge.cjs.map +1 -1
  43. package/dist/edge.js +5 -4
  44. package/dist/index.cjs +187 -115
  45. package/dist/index.cjs.map +1 -1
  46. package/dist/index.d.ts +1 -1
  47. package/dist/index.js +29 -28
  48. package/dist/modelrouter/core.cjs +51 -25
  49. package/dist/modelrouter/core.cjs.map +1 -1
  50. package/dist/modelrouter/core.js +4 -3
  51. package/dist/modelrouter/index.cjs +51 -25
  52. package/dist/modelrouter/index.cjs.map +1 -1
  53. package/dist/modelrouter/index.js +4 -3
  54. package/dist/subagents/anthropic.cjs +86 -12
  55. package/dist/subagents/anthropic.cjs.map +1 -1
  56. package/dist/subagents/anthropic.js +5 -4
  57. package/dist/subagents/vercel.cjs +86 -12
  58. package/dist/subagents/vercel.cjs.map +1 -1
  59. package/dist/subagents/vercel.js +5 -4
  60. package/dist/tools/browser/anthropic.cjs +48 -9
  61. package/dist/tools/browser/anthropic.cjs.map +1 -1
  62. package/dist/tools/browser/anthropic.js +6 -5
  63. package/dist/tools/browser/core.cjs +51 -19
  64. package/dist/tools/browser/core.cjs.map +1 -1
  65. package/dist/tools/browser/core.js +5 -4
  66. package/dist/tools/browser/index.cjs +51 -19
  67. package/dist/tools/browser/index.cjs.map +1 -1
  68. package/dist/tools/browser/index.js +10 -9
  69. package/dist/tools/browser/index.js.map +1 -1
  70. package/dist/tools/browser/openai.cjs +48 -9
  71. package/dist/tools/browser/openai.cjs.map +1 -1
  72. package/dist/tools/browser/openai.js +6 -5
  73. package/dist/tools/browser/profiles/core.cjs +7 -1
  74. package/dist/tools/browser/profiles/core.cjs.map +1 -1
  75. package/dist/tools/browser/profiles/core.js +3 -3
  76. package/dist/tools/browser/profiles/index.cjs +7 -1
  77. package/dist/tools/browser/profiles/index.cjs.map +1 -1
  78. package/dist/tools/browser/profiles/index.js +3 -3
  79. package/dist/tools/browser/vercel.cjs +48 -9
  80. package/dist/tools/browser/vercel.cjs.map +1 -1
  81. package/dist/tools/browser/vercel.js +6 -5
  82. package/dist/tools/codebase_search/anthropic.cjs +49 -11
  83. package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
  84. package/dist/tools/codebase_search/anthropic.js +5 -4
  85. package/dist/tools/codebase_search/core.cjs +49 -11
  86. package/dist/tools/codebase_search/core.cjs.map +1 -1
  87. package/dist/tools/codebase_search/core.js +4 -3
  88. package/dist/tools/codebase_search/index.cjs +49 -11
  89. package/dist/tools/codebase_search/index.cjs.map +1 -1
  90. package/dist/tools/codebase_search/index.js +9 -8
  91. package/dist/tools/codebase_search/openai.cjs +49 -11
  92. package/dist/tools/codebase_search/openai.cjs.map +1 -1
  93. package/dist/tools/codebase_search/openai.js +5 -4
  94. package/dist/tools/codebase_search/vercel.cjs +49 -11
  95. package/dist/tools/codebase_search/vercel.cjs.map +1 -1
  96. package/dist/tools/codebase_search/vercel.js +5 -4
  97. package/dist/tools/fastapply/anthropic.cjs +95 -31
  98. package/dist/tools/fastapply/anthropic.cjs.map +1 -1
  99. package/dist/tools/fastapply/anthropic.js +5 -4
  100. package/dist/tools/fastapply/apply.cjs +75 -26
  101. package/dist/tools/fastapply/apply.cjs.map +1 -1
  102. package/dist/tools/fastapply/apply.js +3 -2
  103. package/dist/tools/fastapply/core.cjs +95 -31
  104. package/dist/tools/fastapply/core.cjs.map +1 -1
  105. package/dist/tools/fastapply/core.js +4 -3
  106. package/dist/tools/fastapply/index.cjs +95 -31
  107. package/dist/tools/fastapply/index.cjs.map +1 -1
  108. package/dist/tools/fastapply/index.js +9 -8
  109. package/dist/tools/fastapply/openai.cjs +95 -31
  110. package/dist/tools/fastapply/openai.cjs.map +1 -1
  111. package/dist/tools/fastapply/openai.js +5 -4
  112. package/dist/tools/fastapply/vercel.cjs +95 -31
  113. package/dist/tools/fastapply/vercel.cjs.map +1 -1
  114. package/dist/tools/fastapply/vercel.js +5 -4
  115. package/dist/tools/index.cjs +95 -31
  116. package/dist/tools/index.cjs.map +1 -1
  117. package/dist/tools/index.js +9 -8
  118. package/dist/tools/utils/resilience.cjs +7 -1
  119. package/dist/tools/utils/resilience.cjs.map +1 -1
  120. package/dist/tools/utils/resilience.js +2 -2
  121. package/dist/tools/warp_grep/agent/runner.cjs +75 -5
  122. package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
  123. package/dist/tools/warp_grep/agent/runner.js +3 -2
  124. package/dist/tools/warp_grep/anthropic.cjs +86 -12
  125. package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
  126. package/dist/tools/warp_grep/anthropic.js +5 -4
  127. package/dist/tools/warp_grep/client.cjs +86 -12
  128. package/dist/tools/warp_grep/client.cjs.map +1 -1
  129. package/dist/tools/warp_grep/client.js +4 -3
  130. package/dist/tools/warp_grep/gemini.cjs +86 -12
  131. package/dist/tools/warp_grep/gemini.cjs.map +1 -1
  132. package/dist/tools/warp_grep/gemini.js +4 -3
  133. package/dist/tools/warp_grep/gemini.js.map +1 -1
  134. package/dist/tools/warp_grep/index.cjs +86 -12
  135. package/dist/tools/warp_grep/index.cjs.map +1 -1
  136. package/dist/tools/warp_grep/index.js +4 -3
  137. package/dist/tools/warp_grep/openai.cjs +86 -12
  138. package/dist/tools/warp_grep/openai.cjs.map +1 -1
  139. package/dist/tools/warp_grep/openai.js +5 -4
  140. package/dist/tools/warp_grep/vercel.cjs +86 -12
  141. package/dist/tools/warp_grep/vercel.cjs.map +1 -1
  142. package/dist/tools/warp_grep/vercel.d.ts +1 -1
  143. package/dist/tools/warp_grep/vercel.js +5 -4
  144. package/dist/version.cjs +7 -1
  145. package/dist/version.cjs.map +1 -1
  146. package/dist/version.js +1 -1
  147. package/package.json +7 -1
  148. package/dist/chunk-4GQNYJBB.js.map +0 -1
  149. package/dist/chunk-7QMX45QD.js.map +0 -1
  150. package/dist/chunk-LECHLXI4.js.map +0 -1
  151. package/dist/chunk-LZQBVEY2.js.map +0 -1
  152. package/dist/chunk-OGMHU4PJ.js.map +0 -1
  153. package/dist/chunk-OOE2TKKY.js.map +0 -1
  154. package/dist/chunk-Y4NYT5L6.js.map +0 -1
  155. package/dist/chunk-ZG3YLRR5.js.map +0 -1
  156. package/dist/{chunk-JVKGSMEF.js.map → chunk-3NWJ74R4.js.map} +0 -0
  157. package/dist/{chunk-XUV5B27P.js.map → chunk-4DDD65QF.js.map} +0 -0
  158. package/dist/{chunk-DRTPCCEI.js.map → chunk-4FZXI4FI.js.map} +0 -0
  159. package/dist/{chunk-CNFHKQ42.js.map → chunk-BFNH475L.js.map} +0 -0
  160. package/dist/{chunk-NKUGRAYU.js.map → chunk-CRU3FQ54.js.map} +0 -0
  161. package/dist/{chunk-DXMNKPB6.js.map → chunk-DKPC5ZVX.js.map} +0 -0
  162. package/dist/{chunk-PWGBAVQ5.js.map → chunk-DVCIADH3.js.map} +0 -0
  163. package/dist/{chunk-YRHM3RCQ.js.map → chunk-EPYCKNQ3.js.map} +0 -0
  164. package/dist/{chunk-UKT3CKC7.js.map → chunk-N4SSQFYN.js.map} +0 -0
  165. package/dist/{chunk-UVRC4LKZ.js.map → chunk-Q7XZ6JGW.js.map} +0 -0
  166. package/dist/{chunk-UZX7SY33.js.map → chunk-RR7P4SMP.js.map} +0 -0
  167. package/dist/{chunk-UETFIUIG.js.map → chunk-VCFUU5TL.js.map} +0 -0
  168. package/dist/{chunk-5XTA7GCY.js.map → chunk-VDMF4WWF.js.map} +0 -0
  169. package/dist/{chunk-YBKT2UOK.js.map → chunk-XULEBEBX.js.map} +0 -0
  170. package/dist/{chunk-4Q6VFODP.js.map → chunk-ZEEHRQYJ.js.map} +0 -0
  171. package/dist/{chunk-VQSLLYKE.js.map → chunk-ZEMLB2KV.js.map} +0 -0
  172. package/dist/{client-PkB7g9SA.d.ts → client-DsAAqupx.d.ts} +1 -1
@@ -7,13 +7,14 @@ import {
7
7
  getRecording,
8
8
  getWebp,
9
9
  waitForRecording
10
- } from "../../chunk-OOE2TKKY.js";
11
- import "../../chunk-PWGBAVQ5.js";
10
+ } from "../../chunk-MRYULNMU.js";
11
+ import "../../chunk-DVCIADH3.js";
12
12
  import "../../chunk-2AMEQAO2.js";
13
13
  import "../../chunk-2VERUKO2.js";
14
14
  import "../../chunk-YTYCHRQ2.js";
15
- import "../../chunk-UZX7SY33.js";
16
- import "../../chunk-ZG3YLRR5.js";
15
+ import "../../chunk-RR7P4SMP.js";
16
+ import "../../chunk-5AM23TC7.js";
17
+ import "../../chunk-CFCNSELX.js";
17
18
  import "../../chunk-PZ5AY32C.js";
18
19
  export {
19
20
  BrowserClient,
@@ -53,7 +53,7 @@ module.exports = __toCommonJS(browser_exports);
53
53
  // package.json
54
54
  var package_default = {
55
55
  name: "@morphllm/morphsdk",
56
- version: "0.2.162",
56
+ version: "0.2.164",
57
57
  description: "TypeScript SDK and CLI for Morph Fast Apply integration",
58
58
  type: "module",
59
59
  main: "./dist/index.cjs",
@@ -65,6 +65,11 @@ var package_default = {
65
65
  import: "./dist/index.js",
66
66
  require: "./dist/index.cjs"
67
67
  },
68
+ "./logger": {
69
+ types: "./dist/logger.d.ts",
70
+ import: "./dist/logger.js",
71
+ require: "./dist/logger.cjs"
72
+ },
68
73
  "./edge": {
69
74
  types: "./dist/edge.d.ts",
70
75
  import: "./dist/edge.js",
@@ -223,6 +228,7 @@ var package_default = {
223
228
  "test:browser": "vitest run browser",
224
229
  "test:agent": "npx tsx tests/fullAgentTest.ts",
225
230
  "test:integration": "npx tsx tests/fullIntegrationTest.ts",
231
+ "test:e2e": "vitest run --config vitest.e2e.config.ts",
226
232
  "release:patch": "npm version patch && npm publish",
227
233
  "release:minor": "npm version minor && npm publish",
228
234
  "release:major": "npm version major && npm publish"
@@ -366,6 +372,44 @@ function sleep(ms) {
366
372
  return new Promise((resolve) => setTimeout(resolve, ms));
367
373
  }
368
374
 
375
+ // logger.ts
376
+ var import_fs = require("fs");
377
+ var MorphLogger = class {
378
+ enabled;
379
+ fileStream;
380
+ constructor() {
381
+ this.enabled = process.env.MORPH_DEBUG === "1" || !!process.env.MORPH_LOG_FILE;
382
+ const f = process.env.MORPH_LOG_FILE;
383
+ this.fileStream = f ? (0, import_fs.createWriteStream)(f, { flags: "a" }) : null;
384
+ }
385
+ debug(component, msg, data) {
386
+ this._log("debug", component, msg, data);
387
+ }
388
+ info(component, msg, data) {
389
+ this._log("info", component, msg, data);
390
+ }
391
+ warn(component, msg, data) {
392
+ this._log("warn", component, msg, data);
393
+ }
394
+ error(component, msg, data) {
395
+ this._log("error", component, msg, data);
396
+ }
397
+ enable() {
398
+ this.enabled = true;
399
+ }
400
+ get isEnabled() {
401
+ return this.enabled;
402
+ }
403
+ _log(level, component, msg, data) {
404
+ if (level !== "error" && !this.enabled) return;
405
+ const ts = (/* @__PURE__ */ new Date()).toISOString();
406
+ const prefix = `[${ts}] [${level.toUpperCase()}] [${component}]`;
407
+ console.error(data ? `${prefix} ${msg} ${JSON.stringify(data)}` : `${prefix} ${msg}`);
408
+ this.fileStream?.write(JSON.stringify({ ts, level, component, msg, ...data && { data } }) + "\n");
409
+ }
410
+ };
411
+ var logger = new MorphLogger();
412
+
369
413
  // tools/browser/live.ts
370
414
  var LIVE_PRESETS = {
371
415
  /** Read-only monitoring (no interaction) */
@@ -1062,11 +1106,7 @@ var BrowserClient = class {
1062
1106
  if (!hasTask && !hasDiff) {
1063
1107
  throw new Error('Browser task requires either "task" (natural language) or "diff" (PR-review planning)');
1064
1108
  }
1065
- if (debug) {
1066
- const preview = (input.task ?? "").slice(0, 60);
1067
- console.log(`[Browser] createTask: "${preview}..." url=${input.url || "none"}`);
1068
- console.log(`[Browser] Calling async endpoint: ${apiUrl}/browser-task/async`);
1069
- }
1109
+ logger.debug("Browser", "create_task", { task: (input.task ?? "").slice(0, 100), url: input.url, endpoint: `${apiUrl}/browser-task/async` });
1070
1110
  const headers = { "Content-Type": "application/json" };
1071
1111
  if (this.config.apiKey) headers["Authorization"] = `Bearer ${this.config.apiKey}`;
1072
1112
  const response = await fetch(`${apiUrl}/browser-task/async`, {
@@ -1096,14 +1136,11 @@ var BrowserClient = class {
1096
1136
  });
1097
1137
  if (!response.ok) {
1098
1138
  const errorText = await response.text().catch(() => response.statusText);
1099
- if (debug) console.error(`[Browser] Error: ${response.status} - ${errorText}`);
1139
+ logger.error("Browser", "create_task_error", { status: response.status, error: errorText });
1100
1140
  throw new Error(`HTTP ${response.status}: ${errorText}`);
1101
1141
  }
1102
1142
  const result = mapTaskResult(await response.json());
1103
- if (debug) {
1104
- const debugUrl = result.debugUrl;
1105
- console.log(`[Browser] \u2705 Task created: recordingId=${result.recordingId ?? "none"} debugUrl=${debugUrl ? "available" : "none"}`);
1106
- }
1143
+ logger.debug("Browser", "task_created", { recording_id: result.recordingId, task_id: result.taskId, debug_url: !!result.debugUrl });
1107
1144
  if ("schema" in input) {
1108
1145
  return wrapTaskResponseWithSchema(result, this.config, input.schema);
1109
1146
  } else {
@@ -1163,10 +1200,7 @@ async function executeBrowserTask(input, config = {}) {
1163
1200
  error: "maxSteps must be between 1 and 50. Use more steps for complex multi-page flows."
1164
1201
  };
1165
1202
  }
1166
- if (debug) {
1167
- console.log(`[Browser] Task: "${input.task.slice(0, 60)}..." url=${input.url || "none"} maxSteps=${input.maxSteps ?? 10}`);
1168
- console.log(`[Browser] Recording: ${input.recordVideo ? "yes" : "no"} | Calling ${apiUrl}/browser-task`);
1169
- }
1203
+ logger.debug("Browser", "execute_start", { task: input.task.slice(0, 100), url: input.url, max_steps: input.maxSteps ?? 10, record_video: input.recordVideo ?? false });
1170
1204
  const startTime = Date.now();
1171
1205
  try {
1172
1206
  const headers = { "Content-Type": "application/json" };
@@ -1205,14 +1239,12 @@ async function executeBrowserTask(input, config = {}) {
1205
1239
  );
1206
1240
  if (!response.ok) {
1207
1241
  const errorText = await response.text().catch(() => response.statusText);
1208
- if (debug) console.error(`[Browser] Error: ${response.status} - ${errorText}`);
1242
+ logger.error("Browser", "execute_error", { status: response.status, error: errorText });
1209
1243
  throw new Error(`HTTP ${response.status}: ${errorText}`);
1210
1244
  }
1211
1245
  const result = mapTaskResult(await response.json());
1212
1246
  const elapsed = Date.now() - startTime;
1213
- if (debug) {
1214
- console.log(`[Browser] \u2705 ${result.success ? "Success" : "Failed"} in ${elapsed}ms | steps=${result.stepsTaken ?? 0} recordingId=${result.recordingId ?? "none"}`);
1215
- }
1247
+ logger.debug("Browser", "execute_complete", { success: result.success, latency_ms: elapsed, steps: result.stepsTaken ?? 0, recording_id: result.recordingId });
1216
1248
  return result;
1217
1249
  } catch (error) {
1218
1250
  if (error instanceof Error) {