@morphllm/morphsdk 0.2.118 → 0.2.120

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 (163) hide show
  1. package/dist/{chunk-4VWJFZVS.js → chunk-2BPPWIJI.js} +6 -1
  2. package/dist/chunk-2BPPWIJI.js.map +1 -0
  3. package/dist/chunk-4RO43W62.js +225 -0
  4. package/dist/chunk-4RO43W62.js.map +1 -0
  5. package/dist/{chunk-ZYPLV3HP.js → chunk-4VLTYTEY.js} +3 -3
  6. package/dist/{chunk-M5DR2WOZ.js → chunk-5HPN4VL2.js} +1 -1
  7. package/dist/{chunk-5IVVJMMX.js → chunk-6ODXYTLF.js} +2 -2
  8. package/dist/{chunk-OUEJ6XEO.js → chunk-7HKYJ2MW.js} +2 -2
  9. package/dist/{chunk-EMMSRY32.js → chunk-7TM4RBXE.js} +2 -2
  10. package/dist/{chunk-EAT5W3SH.js → chunk-A54BOCBI.js} +2 -2
  11. package/dist/{chunk-QL7MV3GT.js → chunk-BVINWDTA.js} +8 -4
  12. package/dist/chunk-BVINWDTA.js.map +1 -0
  13. package/dist/{chunk-YJZP5ZL5.js → chunk-EF7ZYLA2.js} +10 -5
  14. package/dist/{chunk-YJZP5ZL5.js.map → chunk-EF7ZYLA2.js.map} +1 -1
  15. package/dist/{chunk-3Q7KXILI.js → chunk-FZUUET6R.js} +2 -2
  16. package/dist/{chunk-WM77HRKO.js → chunk-HBWOWL7L.js} +2 -2
  17. package/dist/{chunk-A2LIILDJ.js → chunk-HCN2MLSO.js} +2 -2
  18. package/dist/{chunk-HMAX2FEE.js → chunk-HQAPRX5T.js} +2 -2
  19. package/dist/{chunk-FXBT4UDY.js → chunk-NLDYHLRB.js} +7 -2
  20. package/dist/chunk-NLDYHLRB.js.map +1 -0
  21. package/dist/{chunk-O5DA5V5S.js → chunk-NW6PJIID.js} +2 -2
  22. package/dist/{chunk-QFEVCGR6.js → chunk-P4EPXC2Q.js} +22 -22
  23. package/dist/{chunk-YJXAMX3V.js → chunk-RODHADNG.js} +2 -2
  24. package/dist/{chunk-UR76P62F.js → chunk-RZ4VC4BG.js} +2 -2
  25. package/dist/{chunk-Y5BB7JFH.js → chunk-SNY2UKHQ.js} +2 -2
  26. package/dist/{chunk-PR44LEQQ.js → chunk-T7F3DIRK.js} +2 -2
  27. package/dist/{chunk-SI2CKRKJ.js → chunk-TVPEH6FF.js} +2 -2
  28. package/dist/{chunk-UNHHRMU7.js → chunk-VVEK5JSH.js} +2 -2
  29. package/dist/{chunk-ZRLEAPZV.js → chunk-XQ4KEOJT.js} +2 -2
  30. package/dist/client.cjs +247 -3
  31. package/dist/client.cjs.map +1 -1
  32. package/dist/client.js +22 -21
  33. package/dist/edge.cjs +226 -1
  34. package/dist/edge.cjs.map +1 -1
  35. package/dist/edge.d.ts +1 -0
  36. package/dist/edge.js +11 -7
  37. package/dist/index.cjs +250 -3
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.d.ts +1 -0
  40. package/dist/index.js +32 -28
  41. package/dist/modelrouter/core.cjs +222 -0
  42. package/dist/modelrouter/core.cjs.map +1 -1
  43. package/dist/modelrouter/core.js +3 -2
  44. package/dist/modelrouter/index.cjs +222 -0
  45. package/dist/modelrouter/index.cjs.map +1 -1
  46. package/dist/modelrouter/index.js +3 -2
  47. package/dist/tools/browser/anthropic.cjs +222 -0
  48. package/dist/tools/browser/anthropic.cjs.map +1 -1
  49. package/dist/tools/browser/anthropic.js +6 -5
  50. package/dist/tools/browser/core.cjs +222 -0
  51. package/dist/tools/browser/core.cjs.map +1 -1
  52. package/dist/tools/browser/core.js +5 -4
  53. package/dist/tools/browser/index.cjs +222 -0
  54. package/dist/tools/browser/index.cjs.map +1 -1
  55. package/dist/tools/browser/index.js +13 -12
  56. package/dist/tools/browser/index.js.map +1 -1
  57. package/dist/tools/browser/openai.cjs +222 -0
  58. package/dist/tools/browser/openai.cjs.map +1 -1
  59. package/dist/tools/browser/openai.js +6 -5
  60. package/dist/tools/browser/profiles/core.cjs +222 -0
  61. package/dist/tools/browser/profiles/core.cjs.map +1 -1
  62. package/dist/tools/browser/profiles/core.js +3 -2
  63. package/dist/tools/browser/profiles/index.cjs +222 -0
  64. package/dist/tools/browser/profiles/index.cjs.map +1 -1
  65. package/dist/tools/browser/profiles/index.js +3 -2
  66. package/dist/tools/browser/vercel.cjs +222 -0
  67. package/dist/tools/browser/vercel.cjs.map +1 -1
  68. package/dist/tools/browser/vercel.js +6 -5
  69. package/dist/tools/codebase_search/anthropic.cjs +222 -0
  70. package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
  71. package/dist/tools/codebase_search/anthropic.js +4 -3
  72. package/dist/tools/codebase_search/core.cjs +222 -0
  73. package/dist/tools/codebase_search/core.cjs.map +1 -1
  74. package/dist/tools/codebase_search/core.js +3 -2
  75. package/dist/tools/codebase_search/index.cjs +222 -0
  76. package/dist/tools/codebase_search/index.cjs.map +1 -1
  77. package/dist/tools/codebase_search/index.js +8 -7
  78. package/dist/tools/codebase_search/openai.cjs +222 -0
  79. package/dist/tools/codebase_search/openai.cjs.map +1 -1
  80. package/dist/tools/codebase_search/openai.js +4 -3
  81. package/dist/tools/codebase_search/vercel.cjs +222 -0
  82. package/dist/tools/codebase_search/vercel.cjs.map +1 -1
  83. package/dist/tools/codebase_search/vercel.js +4 -3
  84. package/dist/tools/fastapply/anthropic.cjs +236 -1
  85. package/dist/tools/fastapply/anthropic.cjs.map +1 -1
  86. package/dist/tools/fastapply/anthropic.js +4 -3
  87. package/dist/tools/fastapply/apply.cjs +225 -1
  88. package/dist/tools/fastapply/apply.cjs.map +1 -1
  89. package/dist/tools/fastapply/apply.js +2 -1
  90. package/dist/tools/fastapply/core.cjs +236 -1
  91. package/dist/tools/fastapply/core.cjs.map +1 -1
  92. package/dist/tools/fastapply/core.js +3 -2
  93. package/dist/tools/fastapply/index.cjs +236 -1
  94. package/dist/tools/fastapply/index.cjs.map +1 -1
  95. package/dist/tools/fastapply/index.js +8 -7
  96. package/dist/tools/fastapply/openai.cjs +236 -1
  97. package/dist/tools/fastapply/openai.cjs.map +1 -1
  98. package/dist/tools/fastapply/openai.js +4 -3
  99. package/dist/tools/fastapply/vercel.cjs +236 -1
  100. package/dist/tools/fastapply/vercel.cjs.map +1 -1
  101. package/dist/tools/fastapply/vercel.js +4 -3
  102. package/dist/tools/index.cjs +236 -1
  103. package/dist/tools/index.cjs.map +1 -1
  104. package/dist/tools/index.js +8 -7
  105. package/dist/tools/utils/resilience.cjs +224 -0
  106. package/dist/tools/utils/resilience.cjs.map +1 -1
  107. package/dist/tools/utils/resilience.js +2 -1
  108. package/dist/tools/warp_grep/agent/runner.cjs +225 -1
  109. package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
  110. package/dist/tools/warp_grep/agent/runner.js +3 -2
  111. package/dist/tools/warp_grep/anthropic.cjs +231 -2
  112. package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
  113. package/dist/tools/warp_grep/anthropic.js +5 -4
  114. package/dist/tools/warp_grep/client.cjs +231 -2
  115. package/dist/tools/warp_grep/client.cjs.map +1 -1
  116. package/dist/tools/warp_grep/client.js +4 -3
  117. package/dist/tools/warp_grep/gemini.cjs +231 -2
  118. package/dist/tools/warp_grep/gemini.cjs.map +1 -1
  119. package/dist/tools/warp_grep/gemini.js +4 -3
  120. package/dist/tools/warp_grep/gemini.js.map +1 -1
  121. package/dist/tools/warp_grep/harness.cjs +6 -1
  122. package/dist/tools/warp_grep/harness.cjs.map +1 -1
  123. package/dist/tools/warp_grep/harness.js +5 -5
  124. package/dist/tools/warp_grep/index.cjs +231 -2
  125. package/dist/tools/warp_grep/index.cjs.map +1 -1
  126. package/dist/tools/warp_grep/index.js +6 -5
  127. package/dist/tools/warp_grep/openai.cjs +231 -2
  128. package/dist/tools/warp_grep/openai.cjs.map +1 -1
  129. package/dist/tools/warp_grep/openai.js +5 -4
  130. package/dist/tools/warp_grep/providers/local.cjs +6 -1
  131. package/dist/tools/warp_grep/providers/local.cjs.map +1 -1
  132. package/dist/tools/warp_grep/providers/local.js +2 -2
  133. package/dist/tools/warp_grep/vercel.cjs +231 -2
  134. package/dist/tools/warp_grep/vercel.cjs.map +1 -1
  135. package/dist/tools/warp_grep/vercel.js +5 -4
  136. package/dist/version.cjs +251 -0
  137. package/dist/version.cjs.map +1 -0
  138. package/dist/version.d.ts +3 -0
  139. package/dist/version.js +8 -0
  140. package/dist/version.js.map +1 -0
  141. package/package.json +2 -2
  142. package/dist/chunk-4VWJFZVS.js.map +0 -1
  143. package/dist/chunk-FXBT4UDY.js.map +0 -1
  144. package/dist/chunk-QL7MV3GT.js.map +0 -1
  145. /package/dist/{chunk-ZYPLV3HP.js.map → chunk-4VLTYTEY.js.map} +0 -0
  146. /package/dist/{chunk-M5DR2WOZ.js.map → chunk-5HPN4VL2.js.map} +0 -0
  147. /package/dist/{chunk-5IVVJMMX.js.map → chunk-6ODXYTLF.js.map} +0 -0
  148. /package/dist/{chunk-OUEJ6XEO.js.map → chunk-7HKYJ2MW.js.map} +0 -0
  149. /package/dist/{chunk-EMMSRY32.js.map → chunk-7TM4RBXE.js.map} +0 -0
  150. /package/dist/{chunk-EAT5W3SH.js.map → chunk-A54BOCBI.js.map} +0 -0
  151. /package/dist/{chunk-3Q7KXILI.js.map → chunk-FZUUET6R.js.map} +0 -0
  152. /package/dist/{chunk-WM77HRKO.js.map → chunk-HBWOWL7L.js.map} +0 -0
  153. /package/dist/{chunk-A2LIILDJ.js.map → chunk-HCN2MLSO.js.map} +0 -0
  154. /package/dist/{chunk-HMAX2FEE.js.map → chunk-HQAPRX5T.js.map} +0 -0
  155. /package/dist/{chunk-O5DA5V5S.js.map → chunk-NW6PJIID.js.map} +0 -0
  156. /package/dist/{chunk-QFEVCGR6.js.map → chunk-P4EPXC2Q.js.map} +0 -0
  157. /package/dist/{chunk-YJXAMX3V.js.map → chunk-RODHADNG.js.map} +0 -0
  158. /package/dist/{chunk-UR76P62F.js.map → chunk-RZ4VC4BG.js.map} +0 -0
  159. /package/dist/{chunk-Y5BB7JFH.js.map → chunk-SNY2UKHQ.js.map} +0 -0
  160. /package/dist/{chunk-PR44LEQQ.js.map → chunk-T7F3DIRK.js.map} +0 -0
  161. /package/dist/{chunk-SI2CKRKJ.js.map → chunk-TVPEH6FF.js.map} +0 -0
  162. /package/dist/{chunk-UNHHRMU7.js.map → chunk-VVEK5JSH.js.map} +0 -0
  163. /package/dist/{chunk-ZRLEAPZV.js.map → chunk-XQ4KEOJT.js.map} +0 -0
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  openai_exports
3
- } from "../../chunk-5IVVJMMX.js";
3
+ } from "../../chunk-6ODXYTLF.js";
4
4
  import {
5
5
  vercel_exports
6
- } from "../../chunk-PR44LEQQ.js";
6
+ } from "../../chunk-T7F3DIRK.js";
7
7
  import {
8
8
  anthropic_exports
9
- } from "../../chunk-EAT5W3SH.js";
9
+ } from "../../chunk-A54BOCBI.js";
10
10
  import {
11
11
  BROWSER_SYSTEM_PROMPT,
12
12
  BROWSER_TOOL_DESCRIPTION
@@ -20,11 +20,17 @@ import {
20
20
  getRecording,
21
21
  getWebp,
22
22
  waitForRecording
23
- } from "../../chunk-ZYPLV3HP.js";
23
+ } from "../../chunk-4VLTYTEY.js";
24
24
  import {
25
25
  ProfilesClient
26
- } from "../../chunk-SI2CKRKJ.js";
26
+ } from "../../chunk-TVPEH6FF.js";
27
27
  import "../../chunk-2AMEQAO2.js";
28
+ import {
29
+ LIVE_PRESETS,
30
+ buildEmbedCode,
31
+ buildLiveIframe,
32
+ buildLiveUrl
33
+ } from "../../chunk-YTYCHRQ2.js";
28
34
  import {
29
35
  MorphAPIError,
30
36
  MorphAuthenticationError,
@@ -35,13 +41,8 @@ import {
35
41
  MorphValidationError,
36
42
  parseAPIError
37
43
  } from "../../chunk-2VERUKO2.js";
38
- import {
39
- LIVE_PRESETS,
40
- buildEmbedCode,
41
- buildLiveIframe,
42
- buildLiveUrl
43
- } from "../../chunk-YTYCHRQ2.js";
44
- import "../../chunk-4VWJFZVS.js";
44
+ import "../../chunk-2BPPWIJI.js";
45
+ import "../../chunk-4RO43W62.js";
45
46
  import {
46
47
  __export
47
48
  } from "../../chunk-PZ5AY32C.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../tools/browser/gemini.ts"],"sourcesContent":["/**\n * Google Gemini SDK adapter for browser automation tool\n */\n\nimport type { FunctionDeclaration, FunctionDeclarationSchema } from '@google/generative-ai';\nimport { SchemaType } from '@google/generative-ai';\nimport { executeBrowserTask } from './core.js';\nimport type {\n BrowserConfig,\n BrowserTaskInput,\n BrowserTaskResult,\n} from './types.js';\nimport { BROWSER_TOOL_DESCRIPTION, BROWSER_SYSTEM_PROMPT } from './prompts.js';\n\n/**\n * Parameter schema for the browser tool (Gemini format)\n */\nconst TOOL_PARAMETERS: FunctionDeclarationSchema = {\n type: SchemaType.OBJECT,\n properties: {\n task: {\n type: SchemaType.STRING,\n description: 'Natural language description of what to do (e.g., \"Test checkout flow for buying a pineapple\")',\n },\n url: {\n type: SchemaType.STRING,\n description: 'Starting URL (e.g., https://3000-xyz.e2b.dev). Required if navigating to a specific page.',\n },\n maxSteps: {\n type: SchemaType.NUMBER,\n description: 'Maximum number of browser actions to take (1-50). Default: 10. Use 15-30 for complex flows.',\n },\n region: {\n type: SchemaType.STRING,\n description: 'Browserless region: sfo (US West Coast) or lon (Europe). Default: sfo.',\n },\n },\n required: ['task'],\n};\n\n/**\n * Gemini-native browser function declaration\n * \n * @example\n * ```typescript\n * import { GoogleGenerativeAI } from '@google/generative-ai';\n * import { browserFunctionDeclaration, execute } from '@morphllm/morphsdk/tools/browser/gemini';\n * \n * const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);\n * const model = genAI.getGenerativeModel({\n * model: 'gemini-3-flash-preview',\n * tools: [{ functionDeclarations: [browserFunctionDeclaration] }]\n * });\n * \n * const chat = model.startChat();\n * const result = await chat.sendMessage('Test the checkout flow');\n * \n * // Handle function call\n * const call = result.response.functionCalls()?.[0];\n * if (call) {\n * const taskResult = await execute(call.args, { apiKey: 'key' });\n * console.log(taskResult);\n * }\n * ```\n */\nexport const browserFunctionDeclaration: FunctionDeclaration = {\n name: 'browser_task',\n description: BROWSER_TOOL_DESCRIPTION,\n parameters: TOOL_PARAMETERS,\n};\n\n/**\n * Execute browser task\n * \n * @param input - Tool input with task and optional url/maxSteps\n * @param config - Configuration with apiKey\n * @returns Task execution result\n */\nexport async function execute(\n input: BrowserTaskInput | string,\n config?: BrowserConfig\n): Promise<BrowserTaskResult> {\n const parsedInput = typeof input === 'string' ? JSON.parse(input) : input;\n return executeBrowserTask(parsedInput, config);\n}\n\n/**\n * Format browser task result for Gemini tool result\n * \n * Returns a concise summary suitable for agent context. The full result object\n * (with urls, errors, action_history, judgement, etc.) is available when calling\n * execute() directly, but this formatted string omits those details to save tokens.\n * \n * @param result - Browser task result with full history data\n * @returns Formatted string summary for tool result\n */\nexport function formatResult(result: BrowserTaskResult): string {\n if (result.success) {\n const parts = [\n '✅ Browser task completed successfully',\n `Steps taken: ${result.stepsTaken ?? 0}`,\n result.executionTimeMs ? `Execution time: ${result.executionTimeMs}ms` : null,\n '',\n 'Result:',\n result.result || 'Task completed',\n ];\n return parts.filter(Boolean).join('\\n');\n }\n\n return `❌ Browser task failed: ${result.error || 'Unknown error'}`;\n}\n\n/**\n * Get system prompt for browser automation\n */\nexport function getSystemPrompt(): string {\n return BROWSER_SYSTEM_PROMPT;\n}\n\n/**\n * Gemini tool with execute method attached\n */\nexport interface GeminiBrowserTool extends FunctionDeclaration {\n execute: (input: BrowserTaskInput | string) => Promise<BrowserTaskResult>;\n formatResult: (result: BrowserTaskResult) => string;\n getSystemPrompt: () => string;\n}\n\n/**\n * Create a configured browser tool with execute and formatResult methods\n * \n * @param config - Browser worker configuration\n * @returns Function declaration with execute and formatResult methods\n * \n * @example\n * ```typescript\n * import { GoogleGenerativeAI, FunctionCallingMode } from '@google/generative-ai';\n * import { createBrowserTool } from '@morphllm/morphsdk/tools/browser/gemini';\n * \n * const tool = createBrowserTool({ apiKey: process.env.MORPH_API_KEY });\n * \n * const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);\n * const model = genAI.getGenerativeModel({\n * model: 'gemini-3-flash-preview',\n * tools: [{ functionDeclarations: [tool] }],\n * toolConfig: { functionCallingConfig: { mode: FunctionCallingMode.AUTO } }\n * });\n * \n * const chat = model.startChat();\n * const result = await chat.sendMessage('Test the checkout flow at https://example.com');\n * \n * // Handle function call\n * const call = result.response.functionCalls()?.[0];\n * if (call && call.name === tool.name) {\n * const taskResult = await tool.execute(call.args);\n * console.log(tool.formatResult(taskResult));\n * \n * // Send result back to model\n * await chat.sendMessage([{\n * functionResponse: {\n * name: call.name,\n * response: { result: tool.formatResult(taskResult) }\n * }\n * }]);\n * }\n * ```\n */\nexport function createBrowserTool(config?: BrowserConfig): GeminiBrowserTool {\n const declaration: FunctionDeclaration = {\n name: 'browser_task',\n description: BROWSER_TOOL_DESCRIPTION,\n parameters: TOOL_PARAMETERS,\n };\n\n return Object.assign(declaration, {\n execute: async (input: BrowserTaskInput | string): Promise<BrowserTaskResult> => {\n return execute(input, config);\n },\n formatResult: (result: BrowserTaskResult): string => {\n return formatResult(result);\n },\n getSystemPrompt: (): string => {\n return getSystemPrompt();\n },\n });\n}\n\n// Legacy alias for consistency with some patterns\nexport const browserTool = browserFunctionDeclaration;\n\nexport default browserFunctionDeclaration;\n\n\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,kBAAkB;AAY3B,IAAM,kBAA6C;AAAA,EACjD,MAAM,WAAW;AAAA,EACjB,YAAY;AAAA,IACV,MAAM;AAAA,MACJ,MAAM,WAAW;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,IACA,KAAK;AAAA,MACH,MAAM,WAAW;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,MAAM,WAAW;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,IACA,QAAQ;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,UAAU,CAAC,MAAM;AACnB;AA2BO,IAAM,6BAAkD;AAAA,EAC7D,MAAM;AAAA,EACN,aAAa;AAAA,EACb,YAAY;AACd;AASA,eAAsB,QACpB,OACA,QAC4B;AAC5B,QAAM,cAAc,OAAO,UAAU,WAAW,KAAK,MAAM,KAAK,IAAI;AACpE,SAAO,mBAAmB,aAAa,MAAM;AAC/C;AAYO,SAAS,aAAa,QAAmC;AAC9D,MAAI,OAAO,SAAS;AAClB,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA,gBAAgB,OAAO,cAAc,CAAC;AAAA,MACtC,OAAO,kBAAkB,mBAAmB,OAAO,eAAe,OAAO;AAAA,MACzE;AAAA,MACA;AAAA,MACA,OAAO,UAAU;AAAA,IACnB;AACA,WAAO,MAAM,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,EACxC;AAEA,SAAO,+BAA0B,OAAO,SAAS,eAAe;AAClE;AAKO,SAAS,kBAA0B;AACxC,SAAO;AACT;AAkDO,SAAS,kBAAkB,QAA2C;AAC3E,QAAM,cAAmC;AAAA,IACvC,MAAM;AAAA,IACN,aAAa;AAAA,IACb,YAAY;AAAA,EACd;AAEA,SAAO,OAAO,OAAO,aAAa;AAAA,IAChC,SAAS,OAAO,UAAiE;AAC/E,aAAO,QAAQ,OAAO,MAAM;AAAA,IAC9B;AAAA,IACA,cAAc,CAAC,WAAsC;AACnD,aAAO,aAAa,MAAM;AAAA,IAC5B;AAAA,IACA,iBAAiB,MAAc;AAC7B,aAAO,gBAAgB;AAAA,IACzB;AAAA,EACF,CAAC;AACH;AAGO,IAAM,cAAc;AAE3B,IAAO,iBAAQ;","names":[]}
1
+ {"version":3,"sources":["../../../tools/browser/gemini.ts"],"sourcesContent":["/**\n * Google Gemini SDK adapter for browser automation tool\n */\n\nimport type { FunctionDeclaration, FunctionDeclarationSchema } from '@google/generative-ai';\nimport { SchemaType } from '@google/generative-ai';\nimport { executeBrowserTask } from './core.js';\nimport type {\n BrowserConfig,\n BrowserTaskInput,\n BrowserTaskResult,\n} from './types.js';\nimport { BROWSER_TOOL_DESCRIPTION, BROWSER_SYSTEM_PROMPT } from './prompts.js';\n\n/**\n * Parameter schema for the browser tool (Gemini format)\n */\nconst TOOL_PARAMETERS: FunctionDeclarationSchema = {\n type: SchemaType.OBJECT,\n properties: {\n task: {\n type: SchemaType.STRING,\n description: 'Natural language description of what to do (e.g., \"Test checkout flow for buying a pineapple\")',\n },\n url: {\n type: SchemaType.STRING,\n description: 'Starting URL (e.g., https://3000-xyz.e2b.dev). Required if navigating to a specific page.',\n },\n maxSteps: {\n type: SchemaType.NUMBER,\n description: 'Maximum number of browser actions to take (1-50). Default: 10. Use 15-30 for complex flows.',\n },\n region: {\n type: SchemaType.STRING,\n description: 'Browserless region: sfo (US West Coast) or lon (Europe). Default: sfo.',\n },\n },\n required: ['task'],\n};\n\n/**\n * Gemini-native browser function declaration\n * \n * @example\n * ```typescript\n * import { GoogleGenerativeAI } from '@google/generative-ai';\n * import { browserFunctionDeclaration, execute } from '@morphllm/morphsdk/tools/browser/gemini';\n * \n * const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);\n * const model = genAI.getGenerativeModel({\n * model: 'gemini-3-flash-preview',\n * tools: [{ functionDeclarations: [browserFunctionDeclaration] }]\n * });\n * \n * const chat = model.startChat();\n * const result = await chat.sendMessage('Test the checkout flow');\n * \n * // Handle function call\n * const call = result.response.functionCalls()?.[0];\n * if (call) {\n * const taskResult = await execute(call.args, { apiKey: 'key' });\n * console.log(taskResult);\n * }\n * ```\n */\nexport const browserFunctionDeclaration: FunctionDeclaration = {\n name: 'browser_task',\n description: BROWSER_TOOL_DESCRIPTION,\n parameters: TOOL_PARAMETERS,\n};\n\n/**\n * Execute browser task\n * \n * @param input - Tool input with task and optional url/maxSteps\n * @param config - Configuration with apiKey\n * @returns Task execution result\n */\nexport async function execute(\n input: BrowserTaskInput | string,\n config?: BrowserConfig\n): Promise<BrowserTaskResult> {\n const parsedInput = typeof input === 'string' ? JSON.parse(input) : input;\n return executeBrowserTask(parsedInput, config);\n}\n\n/**\n * Format browser task result for Gemini tool result\n * \n * Returns a concise summary suitable for agent context. The full result object\n * (with urls, errors, action_history, judgement, etc.) is available when calling\n * execute() directly, but this formatted string omits those details to save tokens.\n * \n * @param result - Browser task result with full history data\n * @returns Formatted string summary for tool result\n */\nexport function formatResult(result: BrowserTaskResult): string {\n if (result.success) {\n const parts = [\n '✅ Browser task completed successfully',\n `Steps taken: ${result.stepsTaken ?? 0}`,\n result.executionTimeMs ? `Execution time: ${result.executionTimeMs}ms` : null,\n '',\n 'Result:',\n result.result || 'Task completed',\n ];\n return parts.filter(Boolean).join('\\n');\n }\n\n return `❌ Browser task failed: ${result.error || 'Unknown error'}`;\n}\n\n/**\n * Get system prompt for browser automation\n */\nexport function getSystemPrompt(): string {\n return BROWSER_SYSTEM_PROMPT;\n}\n\n/**\n * Gemini tool with execute method attached\n */\nexport interface GeminiBrowserTool extends FunctionDeclaration {\n execute: (input: BrowserTaskInput | string) => Promise<BrowserTaskResult>;\n formatResult: (result: BrowserTaskResult) => string;\n getSystemPrompt: () => string;\n}\n\n/**\n * Create a configured browser tool with execute and formatResult methods\n * \n * @param config - Browser worker configuration\n * @returns Function declaration with execute and formatResult methods\n * \n * @example\n * ```typescript\n * import { GoogleGenerativeAI, FunctionCallingMode } from '@google/generative-ai';\n * import { createBrowserTool } from '@morphllm/morphsdk/tools/browser/gemini';\n * \n * const tool = createBrowserTool({ apiKey: process.env.MORPH_API_KEY });\n * \n * const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);\n * const model = genAI.getGenerativeModel({\n * model: 'gemini-3-flash-preview',\n * tools: [{ functionDeclarations: [tool] }],\n * toolConfig: { functionCallingConfig: { mode: FunctionCallingMode.AUTO } }\n * });\n * \n * const chat = model.startChat();\n * const result = await chat.sendMessage('Test the checkout flow at https://example.com');\n * \n * // Handle function call\n * const call = result.response.functionCalls()?.[0];\n * if (call && call.name === tool.name) {\n * const taskResult = await tool.execute(call.args);\n * console.log(tool.formatResult(taskResult));\n * \n * // Send result back to model\n * await chat.sendMessage([{\n * functionResponse: {\n * name: call.name,\n * response: { result: tool.formatResult(taskResult) }\n * }\n * }]);\n * }\n * ```\n */\nexport function createBrowserTool(config?: BrowserConfig): GeminiBrowserTool {\n const declaration: FunctionDeclaration = {\n name: 'browser_task',\n description: BROWSER_TOOL_DESCRIPTION,\n parameters: TOOL_PARAMETERS,\n };\n\n return Object.assign(declaration, {\n execute: async (input: BrowserTaskInput | string): Promise<BrowserTaskResult> => {\n return execute(input, config);\n },\n formatResult: (result: BrowserTaskResult): string => {\n return formatResult(result);\n },\n getSystemPrompt: (): string => {\n return getSystemPrompt();\n },\n });\n}\n\n// Legacy alias for consistency with some patterns\nexport const browserTool = browserFunctionDeclaration;\n\nexport default browserFunctionDeclaration;\n\n\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,kBAAkB;AAY3B,IAAM,kBAA6C;AAAA,EACjD,MAAM,WAAW;AAAA,EACjB,YAAY;AAAA,IACV,MAAM;AAAA,MACJ,MAAM,WAAW;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,IACA,KAAK;AAAA,MACH,MAAM,WAAW;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,IACA,UAAU;AAAA,MACR,MAAM,WAAW;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,IACA,QAAQ;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,UAAU,CAAC,MAAM;AACnB;AA2BO,IAAM,6BAAkD;AAAA,EAC7D,MAAM;AAAA,EACN,aAAa;AAAA,EACb,YAAY;AACd;AASA,eAAsB,QACpB,OACA,QAC4B;AAC5B,QAAM,cAAc,OAAO,UAAU,WAAW,KAAK,MAAM,KAAK,IAAI;AACpE,SAAO,mBAAmB,aAAa,MAAM;AAC/C;AAYO,SAAS,aAAa,QAAmC;AAC9D,MAAI,OAAO,SAAS;AAClB,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA,gBAAgB,OAAO,cAAc,CAAC;AAAA,MACtC,OAAO,kBAAkB,mBAAmB,OAAO,eAAe,OAAO;AAAA,MACzE;AAAA,MACA;AAAA,MACA,OAAO,UAAU;AAAA,IACnB;AACA,WAAO,MAAM,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,EACxC;AAEA,SAAO,+BAA0B,OAAO,SAAS,eAAe;AAClE;AAKO,SAAS,kBAA0B;AACxC,SAAO;AACT;AAkDO,SAAS,kBAAkB,QAA2C;AAC3E,QAAM,cAAmC;AAAA,IACvC,MAAM;AAAA,IACN,aAAa;AAAA,IACb,YAAY;AAAA,EACd;AAEA,SAAO,OAAO,OAAO,aAAa;AAAA,IAChC,SAAS,OAAO,UAAiE;AAC/E,aAAO,QAAQ,OAAO,MAAM;AAAA,IAC9B;AAAA,IACA,cAAc,CAAC,WAAsC;AACnD,aAAO,aAAa,MAAM;AAAA,IAC5B;AAAA,IACA,iBAAiB,MAAc;AAC7B,aAAO,gBAAgB;AAAA,IACzB;AAAA,EACF,CAAC;AACH;AAGO,IAAM,cAAc;AAE3B,IAAO,iBAAQ;","names":[]}
@@ -28,6 +28,227 @@ __export(openai_exports, {
28
28
  });
29
29
  module.exports = __toCommonJS(openai_exports);
30
30
 
31
+ // package.json
32
+ var package_default = {
33
+ name: "@morphllm/morphsdk",
34
+ version: "0.2.120",
35
+ description: "TypeScript SDK and CLI for Morph Fast Apply integration",
36
+ type: "module",
37
+ main: "./dist/index.cjs",
38
+ module: "./dist/index.js",
39
+ types: "./dist/index.d.ts",
40
+ exports: {
41
+ ".": {
42
+ types: "./dist/index.d.ts",
43
+ import: "./dist/index.js",
44
+ require: "./dist/index.cjs"
45
+ },
46
+ "./edge": {
47
+ types: "./dist/edge.d.ts",
48
+ import: "./dist/edge.js",
49
+ require: "./dist/edge.cjs"
50
+ },
51
+ "./tools/warp-grep": {
52
+ types: "./dist/tools/warp_grep/index.d.ts",
53
+ import: "./dist/tools/warp_grep/index.js",
54
+ require: "./dist/tools/warp_grep/index.cjs"
55
+ },
56
+ "./tools/warp-grep/openai": {
57
+ types: "./dist/tools/warp_grep/openai.d.ts",
58
+ import: "./dist/tools/warp_grep/openai.js",
59
+ require: "./dist/tools/warp_grep/openai.cjs"
60
+ },
61
+ "./tools/warp-grep/anthropic": {
62
+ types: "./dist/tools/warp_grep/anthropic.d.ts",
63
+ import: "./dist/tools/warp_grep/anthropic.js",
64
+ require: "./dist/tools/warp_grep/anthropic.cjs"
65
+ },
66
+ "./tools/warp-grep/vercel": {
67
+ types: "./dist/tools/warp_grep/vercel.d.ts",
68
+ import: "./dist/tools/warp_grep/vercel.js",
69
+ require: "./dist/tools/warp_grep/vercel.cjs"
70
+ },
71
+ "./tools/warp-grep/client": {
72
+ types: "./dist/tools/warp_grep/client.d.ts",
73
+ import: "./dist/tools/warp_grep/client.js",
74
+ require: "./dist/tools/warp_grep/client.cjs"
75
+ },
76
+ "./tools/warp-grep/gemini": {
77
+ types: "./dist/tools/warp_grep/gemini.d.ts",
78
+ import: "./dist/tools/warp_grep/gemini.js",
79
+ require: "./dist/tools/warp_grep/gemini.cjs"
80
+ },
81
+ "./tools/warp-grep/harness": {
82
+ types: "./dist/tools/warp_grep/harness.d.ts",
83
+ import: "./dist/tools/warp_grep/harness.js",
84
+ require: "./dist/tools/warp_grep/harness.cjs"
85
+ },
86
+ "./tools/fastapply": {
87
+ types: "./dist/tools/fastapply/index.d.ts",
88
+ import: "./dist/tools/fastapply/index.js",
89
+ require: "./dist/tools/fastapply/index.cjs"
90
+ },
91
+ "./tools/fastapply/anthropic": {
92
+ types: "./dist/tools/fastapply/anthropic.d.ts",
93
+ import: "./dist/tools/fastapply/anthropic.js",
94
+ require: "./dist/tools/fastapply/anthropic.cjs"
95
+ },
96
+ "./tools/fastapply/openai": {
97
+ types: "./dist/tools/fastapply/openai.d.ts",
98
+ import: "./dist/tools/fastapply/openai.js",
99
+ require: "./dist/tools/fastapply/openai.cjs"
100
+ },
101
+ "./tools/fastapply/vercel": {
102
+ types: "./dist/tools/fastapply/vercel.d.ts",
103
+ import: "./dist/tools/fastapply/vercel.js",
104
+ require: "./dist/tools/fastapply/vercel.cjs"
105
+ },
106
+ "./tools/codebase-search": {
107
+ types: "./dist/tools/codebase_search/index.d.ts",
108
+ import: "./dist/tools/codebase_search/index.js",
109
+ require: "./dist/tools/codebase_search/index.cjs"
110
+ },
111
+ "./tools/codebase-search/anthropic": {
112
+ types: "./dist/tools/codebase_search/anthropic.d.ts",
113
+ import: "./dist/tools/codebase_search/anthropic.js",
114
+ require: "./dist/tools/codebase_search/anthropic.cjs"
115
+ },
116
+ "./tools/codebase-search/openai": {
117
+ types: "./dist/tools/codebase_search/openai.d.ts",
118
+ import: "./dist/tools/codebase_search/openai.js",
119
+ require: "./dist/tools/codebase_search/openai.cjs"
120
+ },
121
+ "./tools/codebase-search/vercel": {
122
+ types: "./dist/tools/codebase_search/vercel.d.ts",
123
+ import: "./dist/tools/codebase_search/vercel.js",
124
+ require: "./dist/tools/codebase_search/vercel.cjs"
125
+ },
126
+ "./tools/git": {
127
+ types: "./dist/git/index.d.ts",
128
+ import: "./dist/git/index.js",
129
+ require: "./dist/git/index.cjs"
130
+ },
131
+ "./tools/browser": {
132
+ types: "./dist/tools/browser/index.d.ts",
133
+ import: "./dist/tools/browser/index.js",
134
+ require: "./dist/tools/browser/index.cjs"
135
+ },
136
+ "./tools/browser/anthropic": {
137
+ types: "./dist/tools/browser/anthropic.d.ts",
138
+ import: "./dist/tools/browser/anthropic.js",
139
+ require: "./dist/tools/browser/anthropic.cjs"
140
+ },
141
+ "./tools/browser/openai": {
142
+ types: "./dist/tools/browser/openai.d.ts",
143
+ import: "./dist/tools/browser/openai.js",
144
+ require: "./dist/tools/browser/openai.cjs"
145
+ },
146
+ "./tools/browser/vercel": {
147
+ types: "./dist/tools/browser/vercel.d.ts",
148
+ import: "./dist/tools/browser/vercel.js",
149
+ require: "./dist/tools/browser/vercel.cjs"
150
+ },
151
+ "./tools/browser/profiles": {
152
+ types: "./dist/tools/browser/profiles/index.d.ts",
153
+ import: "./dist/tools/browser/profiles/index.js",
154
+ require: "./dist/tools/browser/profiles/index.cjs"
155
+ },
156
+ "./modelrouter": {
157
+ types: "./dist/modelrouter/index.d.ts",
158
+ import: "./dist/modelrouter/index.js",
159
+ require: "./dist/modelrouter/index.cjs"
160
+ }
161
+ },
162
+ files: [
163
+ "dist/**/*.js",
164
+ "dist/**/*.cjs",
165
+ "dist/**/*.d.ts",
166
+ "dist/**/*.map",
167
+ "!dist/**/__tests__/**",
168
+ "!dist/**/*.test.*"
169
+ ],
170
+ scripts: {
171
+ build: "tsup version.ts index.ts edge.ts client.ts tools/index.ts tools/fastapply/index.ts tools/fastapply/core.ts tools/fastapply/apply.ts tools/fastapply/types.ts tools/fastapply/prompts.ts tools/fastapply/anthropic.ts tools/fastapply/openai.ts tools/fastapply/vercel.ts tools/codebase_search/index.ts tools/codebase_search/core.ts tools/codebase_search/types.ts tools/codebase_search/prompts.ts tools/codebase_search/anthropic.ts tools/codebase_search/openai.ts tools/codebase_search/vercel.ts tools/warp_grep/index.ts tools/warp_grep/client.ts tools/warp_grep/openai.ts tools/warp_grep/anthropic.ts tools/warp_grep/vercel.ts tools/warp_grep/gemini.ts tools/warp_grep/harness.ts tools/warp_grep/agent/config.ts tools/warp_grep/agent/prompt.ts tools/warp_grep/agent/parser.ts tools/warp_grep/agent/runner.ts tools/warp_grep/agent/types.ts tools/warp_grep/agent/formatter.ts tools/warp_grep/providers/types.ts tools/warp_grep/providers/local.ts tools/warp_grep/providers/remote.ts tools/warp_grep/tools/grep.ts tools/warp_grep/tools/analyse.ts tools/warp_grep/tools/read.ts tools/warp_grep/tools/finish.ts tools/warp_grep/utils/paths.ts tools/warp_grep/utils/ripgrep.ts tools/warp_grep/utils/format.ts tools/warp_grep/utils/files.ts git/index.ts git/client.ts git/config.ts git/types.ts tools/browser/index.ts tools/browser/core.ts tools/browser/types.ts tools/browser/prompts.ts tools/browser/anthropic.ts tools/browser/openai.ts tools/browser/vercel.ts tools/browser/live.ts tools/browser/errors.ts tools/browser/profiles/index.ts tools/browser/profiles/core.ts tools/browser/profiles/types.ts modelrouter/index.ts modelrouter/core.ts modelrouter/types.ts tools/utils/resilience.ts --format esm,cjs --sourcemap --clean --dts --dts-resolve",
172
+ prepare: "npm run build",
173
+ typecheck: "tsc --noEmit",
174
+ lint: "eslint .",
175
+ test: "vitest run",
176
+ "test:watch": "vitest watch",
177
+ "test:anthropic": "vitest run anthropic",
178
+ "test:openai": "vitest run openai",
179
+ "test:vercel": "vitest run vercel",
180
+ "test:git": "vitest run git",
181
+ "test:browser": "vitest run browser",
182
+ "test:agent": "npx tsx tests/fullAgentTest.ts",
183
+ "test:integration": "npx tsx tests/fullIntegrationTest.ts",
184
+ "release:patch": "npm version patch && npm publish",
185
+ "release:minor": "npm version minor && npm publish",
186
+ "release:major": "npm version major && npm publish"
187
+ },
188
+ keywords: [
189
+ "morph",
190
+ "fast-apply",
191
+ "cli",
192
+ "sdk",
193
+ "edit-file"
194
+ ],
195
+ engines: {
196
+ node: ">=18"
197
+ },
198
+ license: "MIT",
199
+ dependencies: {
200
+ "@vscode/ripgrep": "^1.17.0",
201
+ ai: "^5.0.0",
202
+ diff: "^7.0.0",
203
+ "isomorphic-git": "^1.25.10",
204
+ openai: "^4.52.7",
205
+ zod: "^3.23.8"
206
+ },
207
+ devDependencies: {
208
+ "@ai-sdk/anthropic": "^1.0.9",
209
+ "@ai-sdk/openai": "^2.0.35",
210
+ "@anthropic-ai/sdk": "^0.30.1",
211
+ "@google/generative-ai": "^0.24.1",
212
+ "@types/diff": "^7.0.2",
213
+ "@types/node": "^20.14.10",
214
+ "@typescript-eslint/eslint-plugin": "^7.18.0",
215
+ "@typescript-eslint/parser": "^7.18.0",
216
+ dotenv: "^16.4.5",
217
+ eslint: "^8.57.0",
218
+ shx: "^0.3.4",
219
+ tsup: "^8.5.0",
220
+ tsx: "^4.16.2",
221
+ typescript: "^5.5.4",
222
+ vitest: "^2.1.6"
223
+ },
224
+ peerDependencies: {
225
+ "@anthropic-ai/sdk": ">=0.25.0",
226
+ "@google/generative-ai": ">=0.21.0",
227
+ ai: ">=5.0.0",
228
+ zod: ">=3.23.0"
229
+ },
230
+ peerDependenciesMeta: {
231
+ "@anthropic-ai/sdk": {
232
+ optional: true
233
+ },
234
+ "@google/generative-ai": {
235
+ optional: true
236
+ },
237
+ ai: {
238
+ optional: true
239
+ },
240
+ zod: {
241
+ optional: true
242
+ }
243
+ },
244
+ publishConfig: {
245
+ access: "public"
246
+ }
247
+ };
248
+
249
+ // version.ts
250
+ var SDK_VERSION = package_default.version;
251
+
31
252
  // tools/utils/resilience.ts
32
253
  var DEFAULT_RETRY_CONFIG = {
33
254
  maxRetries: 3,
@@ -47,6 +268,7 @@ async function fetchWithRetry(url, options, retryConfig = {}) {
47
268
  } = retryConfig;
48
269
  let lastError = null;
49
270
  let delay = initialDelay;
271
+ options = { ...options, headers: { "X-Morph-SDK-Version": SDK_VERSION, ...options.headers } };
50
272
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
51
273
  try {
52
274
  const response = await fetch(url, options);