@morphllm/morphsdk 0.2.180 → 0.2.182

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 (215) hide show
  1. package/dist/{chunk-EJZFQAKT.js → chunk-27EP7ZJK.js} +2 -2
  2. package/dist/{chunk-HXDITEO6.js → chunk-4WQGJMOW.js} +2 -2
  3. package/dist/{chunk-BN4IHFWR.js → chunk-66X4NBG7.js} +2 -2
  4. package/dist/{chunk-DFTKUEF5.js → chunk-7ICJYWTT.js} +2 -2
  5. package/dist/{chunk-D4XCP2ZE.js → chunk-7JLPTKPQ.js} +39 -4
  6. package/dist/chunk-7JLPTKPQ.js.map +1 -0
  7. package/dist/{chunk-AERVDGON.js → chunk-BTIJDM7J.js} +2 -2
  8. package/dist/{chunk-XEQZQTZR.js → chunk-C7HLMZXK.js} +2 -2
  9. package/dist/{chunk-JG5MJI34.js → chunk-D4K2OZTC.js} +2 -2
  10. package/dist/{chunk-GVN6B4YX.js → chunk-DFZY4NAL.js} +3 -3
  11. package/dist/{chunk-2DLMZDDB.js → chunk-DOGRQEOM.js} +52 -9
  12. package/dist/chunk-DOGRQEOM.js.map +1 -0
  13. package/dist/{chunk-QW33U4EI.js → chunk-F477JTM2.js} +4 -4
  14. package/dist/{chunk-LDXKXBYN.js → chunk-G7FT3MCW.js} +2 -2
  15. package/dist/{chunk-2WQTCETP.js → chunk-GX2KTPXV.js} +2 -2
  16. package/dist/{chunk-IOZMMARY.js → chunk-H2K7JQOW.js} +2 -2
  17. package/dist/{chunk-U4KCWD3I.js → chunk-H2SWEPM3.js} +2 -2
  18. package/dist/{chunk-4RARO46V.js → chunk-HTKN3WER.js} +4 -4
  19. package/dist/{chunk-QAZM5ELA.js → chunk-JX4HNDGL.js} +2 -2
  20. package/dist/{chunk-TBVIOQ5O.js → chunk-KEFVC7WL.js} +2 -2
  21. package/dist/{chunk-IS5TDLAJ.js → chunk-KEYFDMOM.js} +2 -2
  22. package/dist/{chunk-WQC3YOER.js → chunk-LAQPE5RA.js} +3 -3
  23. package/dist/{chunk-LBOFTF6A.js → chunk-LXCTENG5.js} +25 -23
  24. package/dist/{chunk-LBOFTF6A.js.map → chunk-LXCTENG5.js.map} +1 -1
  25. package/dist/{chunk-EAGSRHRT.js → chunk-MVMSALBH.js} +2 -2
  26. package/dist/{chunk-4TMCQZNB.js → chunk-NBO7EVSO.js} +2 -2
  27. package/dist/{chunk-4TMCQZNB.js.map → chunk-NBO7EVSO.js.map} +1 -1
  28. package/dist/{chunk-SX2P5ZUP.js → chunk-NP5R3I25.js} +2 -2
  29. package/dist/{chunk-LN7GNFET.js → chunk-OPNTDMHH.js} +4 -4
  30. package/dist/{chunk-X4VPV3A7.js → chunk-P2ZUVNZ2.js} +2 -2
  31. package/dist/{chunk-GZDRJBI2.js → chunk-QFPPKZ5G.js} +2 -2
  32. package/dist/{chunk-MWUFDBWQ.js → chunk-QGR4P3P3.js} +2 -2
  33. package/dist/{chunk-XYHP2TFY.js → chunk-TH3AVISW.js} +2 -2
  34. package/dist/{chunk-35ZAMQ3A.js → chunk-WVGAOPMD.js} +7 -7
  35. package/dist/{chunk-OE2LFOYB.js → chunk-XQ5YMAAE.js} +2 -2
  36. package/dist/{chunk-TDT6J2X4.js → chunk-ZXL7SYO2.js} +2 -2
  37. package/dist/{client-Dh6yzCm4.d.ts → client-DUvmVWQJ.d.ts} +2 -1
  38. package/dist/client.cjs +86 -8
  39. package/dist/client.cjs.map +1 -1
  40. package/dist/client.d.ts +1 -1
  41. package/dist/client.js +29 -29
  42. package/dist/core/client.cjs +1 -1
  43. package/dist/core/client.cjs.map +1 -1
  44. package/dist/core/client.js +4 -4
  45. package/dist/core/error.cjs +1 -1
  46. package/dist/core/error.cjs.map +1 -1
  47. package/dist/core/error.js +3 -3
  48. package/dist/core/index.cjs +1 -1
  49. package/dist/core/index.cjs.map +1 -1
  50. package/dist/core/index.js +4 -4
  51. package/dist/edge.cjs +37 -1
  52. package/dist/edge.cjs.map +1 -1
  53. package/dist/edge.d.ts +2 -2
  54. package/dist/edge.js +10 -8
  55. package/dist/git/client.cjs +1 -1
  56. package/dist/git/client.cjs.map +1 -1
  57. package/dist/git/client.js +5 -5
  58. package/dist/git/index.cjs +1 -1
  59. package/dist/git/index.cjs.map +1 -1
  60. package/dist/git/index.js +5 -5
  61. package/dist/index.cjs +86 -8
  62. package/dist/index.cjs.map +1 -1
  63. package/dist/index.d.ts +2 -2
  64. package/dist/index.js +31 -31
  65. package/dist/modelrouter/core.cjs +39 -3
  66. package/dist/modelrouter/core.cjs.map +1 -1
  67. package/dist/modelrouter/core.d.ts +15 -2
  68. package/dist/modelrouter/core.js +9 -7
  69. package/dist/modelrouter/index.cjs +39 -3
  70. package/dist/modelrouter/index.cjs.map +1 -1
  71. package/dist/modelrouter/index.d.ts +2 -2
  72. package/dist/modelrouter/index.js +9 -7
  73. package/dist/modelrouter/types.cjs.map +1 -1
  74. package/dist/modelrouter/types.d.ts +24 -1
  75. package/dist/subagents/anthropic.cjs +1 -1
  76. package/dist/subagents/anthropic.cjs.map +1 -1
  77. package/dist/subagents/anthropic.js +10 -10
  78. package/dist/subagents/vercel.cjs +1 -1
  79. package/dist/subagents/vercel.cjs.map +1 -1
  80. package/dist/subagents/vercel.js +10 -10
  81. package/dist/tools/browser/anthropic.cjs +1 -1
  82. package/dist/tools/browser/anthropic.cjs.map +1 -1
  83. package/dist/tools/browser/anthropic.js +7 -7
  84. package/dist/tools/browser/core.cjs +1 -1
  85. package/dist/tools/browser/core.cjs.map +1 -1
  86. package/dist/tools/browser/core.js +6 -6
  87. package/dist/tools/browser/index.cjs +1 -1
  88. package/dist/tools/browser/index.cjs.map +1 -1
  89. package/dist/tools/browser/index.js +9 -9
  90. package/dist/tools/browser/openai.cjs +1 -1
  91. package/dist/tools/browser/openai.cjs.map +1 -1
  92. package/dist/tools/browser/openai.js +7 -7
  93. package/dist/tools/browser/profiles/core.cjs +1 -1
  94. package/dist/tools/browser/profiles/core.cjs.map +1 -1
  95. package/dist/tools/browser/profiles/core.js +3 -3
  96. package/dist/tools/browser/profiles/index.cjs +1 -1
  97. package/dist/tools/browser/profiles/index.cjs.map +1 -1
  98. package/dist/tools/browser/profiles/index.js +3 -3
  99. package/dist/tools/browser/vercel.cjs +1 -1
  100. package/dist/tools/browser/vercel.cjs.map +1 -1
  101. package/dist/tools/browser/vercel.js +7 -7
  102. package/dist/tools/codebase_search/anthropic.cjs +1 -1
  103. package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
  104. package/dist/tools/codebase_search/anthropic.js +6 -6
  105. package/dist/tools/codebase_search/core.cjs +1 -1
  106. package/dist/tools/codebase_search/core.cjs.map +1 -1
  107. package/dist/tools/codebase_search/core.js +5 -5
  108. package/dist/tools/codebase_search/index.cjs +1 -1
  109. package/dist/tools/codebase_search/index.cjs.map +1 -1
  110. package/dist/tools/codebase_search/index.js +8 -8
  111. package/dist/tools/codebase_search/openai.cjs +1 -1
  112. package/dist/tools/codebase_search/openai.cjs.map +1 -1
  113. package/dist/tools/codebase_search/openai.js +6 -6
  114. package/dist/tools/codebase_search/vercel.cjs +1 -1
  115. package/dist/tools/codebase_search/vercel.cjs.map +1 -1
  116. package/dist/tools/codebase_search/vercel.js +6 -6
  117. package/dist/tools/compact/core.cjs +1 -1
  118. package/dist/tools/compact/core.cjs.map +1 -1
  119. package/dist/tools/compact/core.js +5 -5
  120. package/dist/tools/compact/index.cjs +1 -1
  121. package/dist/tools/compact/index.cjs.map +1 -1
  122. package/dist/tools/compact/index.js +6 -6
  123. package/dist/tools/fastapply/anthropic.cjs +1 -1
  124. package/dist/tools/fastapply/anthropic.cjs.map +1 -1
  125. package/dist/tools/fastapply/anthropic.js +7 -7
  126. package/dist/tools/fastapply/apply.cjs +1 -1
  127. package/dist/tools/fastapply/apply.cjs.map +1 -1
  128. package/dist/tools/fastapply/apply.js +2 -2
  129. package/dist/tools/fastapply/core.cjs +1 -1
  130. package/dist/tools/fastapply/core.cjs.map +1 -1
  131. package/dist/tools/fastapply/core.js +6 -6
  132. package/dist/tools/fastapply/index.cjs +1 -1
  133. package/dist/tools/fastapply/index.cjs.map +1 -1
  134. package/dist/tools/fastapply/index.js +9 -9
  135. package/dist/tools/fastapply/openai.cjs +1 -1
  136. package/dist/tools/fastapply/openai.cjs.map +1 -1
  137. package/dist/tools/fastapply/openai.js +7 -7
  138. package/dist/tools/fastapply/vercel.cjs +1 -1
  139. package/dist/tools/fastapply/vercel.cjs.map +1 -1
  140. package/dist/tools/fastapply/vercel.js +7 -7
  141. package/dist/tools/index.cjs +1 -1
  142. package/dist/tools/index.cjs.map +1 -1
  143. package/dist/tools/index.js +9 -9
  144. package/dist/tools/reflex/core.cjs +50 -7
  145. package/dist/tools/reflex/core.cjs.map +1 -1
  146. package/dist/tools/reflex/core.d.ts +6 -1
  147. package/dist/tools/reflex/core.js +5 -5
  148. package/dist/tools/reflex/index.cjs +50 -7
  149. package/dist/tools/reflex/index.cjs.map +1 -1
  150. package/dist/tools/reflex/index.js +5 -5
  151. package/dist/tools/reflex/types.cjs.map +1 -1
  152. package/dist/tools/reflex/types.d.ts +60 -4
  153. package/dist/tools/utils/resilience.cjs +1 -1
  154. package/dist/tools/utils/resilience.cjs.map +1 -1
  155. package/dist/tools/utils/resilience.js +2 -2
  156. package/dist/tools/warp_grep/agent/runner.cjs +1 -1
  157. package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
  158. package/dist/tools/warp_grep/agent/runner.js +2 -2
  159. package/dist/tools/warp_grep/anthropic.cjs +1 -1
  160. package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
  161. package/dist/tools/warp_grep/anthropic.js +10 -10
  162. package/dist/tools/warp_grep/client.cjs +1 -1
  163. package/dist/tools/warp_grep/client.cjs.map +1 -1
  164. package/dist/tools/warp_grep/client.js +9 -9
  165. package/dist/tools/warp_grep/gemini.cjs +1 -1
  166. package/dist/tools/warp_grep/gemini.cjs.map +1 -1
  167. package/dist/tools/warp_grep/gemini.js +9 -9
  168. package/dist/tools/warp_grep/harness.js +2 -2
  169. package/dist/tools/warp_grep/index.cjs +1 -1
  170. package/dist/tools/warp_grep/index.cjs.map +1 -1
  171. package/dist/tools/warp_grep/index.js +11 -11
  172. package/dist/tools/warp_grep/openai.cjs +1 -1
  173. package/dist/tools/warp_grep/openai.cjs.map +1 -1
  174. package/dist/tools/warp_grep/openai.js +10 -10
  175. package/dist/tools/warp_grep/providers/local.js +2 -2
  176. package/dist/tools/warp_grep/vercel.cjs +1 -1
  177. package/dist/tools/warp_grep/vercel.cjs.map +1 -1
  178. package/dist/tools/warp_grep/vercel.js +10 -10
  179. package/dist/tracing/index.cjs.map +1 -1
  180. package/dist/tracing/types.cjs.map +1 -1
  181. package/dist/tracing/types.d.ts +9 -8
  182. package/dist/version.cjs +1 -1
  183. package/dist/version.cjs.map +1 -1
  184. package/dist/version.js +1 -1
  185. package/package.json +1 -1
  186. package/dist/chunk-2DLMZDDB.js.map +0 -1
  187. package/dist/chunk-D4XCP2ZE.js.map +0 -1
  188. /package/dist/{chunk-EJZFQAKT.js.map → chunk-27EP7ZJK.js.map} +0 -0
  189. /package/dist/{chunk-HXDITEO6.js.map → chunk-4WQGJMOW.js.map} +0 -0
  190. /package/dist/{chunk-BN4IHFWR.js.map → chunk-66X4NBG7.js.map} +0 -0
  191. /package/dist/{chunk-DFTKUEF5.js.map → chunk-7ICJYWTT.js.map} +0 -0
  192. /package/dist/{chunk-AERVDGON.js.map → chunk-BTIJDM7J.js.map} +0 -0
  193. /package/dist/{chunk-XEQZQTZR.js.map → chunk-C7HLMZXK.js.map} +0 -0
  194. /package/dist/{chunk-JG5MJI34.js.map → chunk-D4K2OZTC.js.map} +0 -0
  195. /package/dist/{chunk-GVN6B4YX.js.map → chunk-DFZY4NAL.js.map} +0 -0
  196. /package/dist/{chunk-QW33U4EI.js.map → chunk-F477JTM2.js.map} +0 -0
  197. /package/dist/{chunk-LDXKXBYN.js.map → chunk-G7FT3MCW.js.map} +0 -0
  198. /package/dist/{chunk-2WQTCETP.js.map → chunk-GX2KTPXV.js.map} +0 -0
  199. /package/dist/{chunk-IOZMMARY.js.map → chunk-H2K7JQOW.js.map} +0 -0
  200. /package/dist/{chunk-U4KCWD3I.js.map → chunk-H2SWEPM3.js.map} +0 -0
  201. /package/dist/{chunk-4RARO46V.js.map → chunk-HTKN3WER.js.map} +0 -0
  202. /package/dist/{chunk-QAZM5ELA.js.map → chunk-JX4HNDGL.js.map} +0 -0
  203. /package/dist/{chunk-TBVIOQ5O.js.map → chunk-KEFVC7WL.js.map} +0 -0
  204. /package/dist/{chunk-IS5TDLAJ.js.map → chunk-KEYFDMOM.js.map} +0 -0
  205. /package/dist/{chunk-WQC3YOER.js.map → chunk-LAQPE5RA.js.map} +0 -0
  206. /package/dist/{chunk-EAGSRHRT.js.map → chunk-MVMSALBH.js.map} +0 -0
  207. /package/dist/{chunk-SX2P5ZUP.js.map → chunk-NP5R3I25.js.map} +0 -0
  208. /package/dist/{chunk-LN7GNFET.js.map → chunk-OPNTDMHH.js.map} +0 -0
  209. /package/dist/{chunk-X4VPV3A7.js.map → chunk-P2ZUVNZ2.js.map} +0 -0
  210. /package/dist/{chunk-GZDRJBI2.js.map → chunk-QFPPKZ5G.js.map} +0 -0
  211. /package/dist/{chunk-MWUFDBWQ.js.map → chunk-QGR4P3P3.js.map} +0 -0
  212. /package/dist/{chunk-XYHP2TFY.js.map → chunk-TH3AVISW.js.map} +0 -0
  213. /package/dist/{chunk-35ZAMQ3A.js.map → chunk-WVGAOPMD.js.map} +0 -0
  214. /package/dist/{chunk-OE2LFOYB.js.map → chunk-XQ5YMAAE.js.map} +0 -0
  215. /package/dist/{chunk-TDT6J2X4.js.map → chunk-ZXL7SYO2.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  executeEditFile
3
- } from "./chunk-AERVDGON.js";
3
+ } from "./chunk-BTIJDM7J.js";
4
4
  import {
5
5
  EDIT_FILE_SYSTEM_PROMPT,
6
6
  EDIT_FILE_TOOL_DESCRIPTION
@@ -86,4 +86,4 @@ export {
86
86
  vercel_default,
87
87
  vercel_exports
88
88
  };
89
- //# sourceMappingURL=chunk-EJZFQAKT.js.map
89
+ //# sourceMappingURL=chunk-27EP7ZJK.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-YQMPVJ2L.js";
5
5
  import {
6
6
  executeCodebaseSearch
7
- } from "./chunk-GVN6B4YX.js";
7
+ } from "./chunk-DFZY4NAL.js";
8
8
 
9
9
  // tools/codebase_search/anthropic.ts
10
10
  function createCodebaseSearchTool(config) {
@@ -80,4 +80,4 @@ function formatResult(result) {
80
80
  export {
81
81
  createCodebaseSearchTool
82
82
  };
83
- //# sourceMappingURL=chunk-HXDITEO6.js.map
83
+ //# sourceMappingURL=chunk-4WQGJMOW.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-F3NCFNUX.js";
4
4
  import {
5
5
  SDK_VERSION
6
- } from "./chunk-4TMCQZNB.js";
6
+ } from "./chunk-NBO7EVSO.js";
7
7
 
8
8
  // tools/fastapply/apply.ts
9
9
  import { createTwoFilesPatch } from "diff";
@@ -145,4 +145,4 @@ export {
145
145
  callMorphAPI,
146
146
  applyEdit
147
147
  };
148
- //# sourceMappingURL=chunk-BN4IHFWR.js.map
148
+ //# sourceMappingURL=chunk-66X4NBG7.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-YQMPVJ2L.js";
4
4
  import {
5
5
  executeCodebaseSearch
6
- } from "./chunk-GVN6B4YX.js";
6
+ } from "./chunk-DFZY4NAL.js";
7
7
 
8
8
  // tools/codebase_search/vercel.ts
9
9
  import { tool } from "ai";
@@ -55,4 +55,4 @@ export {
55
55
  getSystemPrompt,
56
56
  vercel_default
57
57
  };
58
- //# sourceMappingURL=chunk-DFTKUEF5.js.map
58
+ //# sourceMappingURL=chunk-7ICJYWTT.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  MorphAPIClient
3
- } from "./chunk-4RARO46V.js";
3
+ } from "./chunk-HTKN3WER.js";
4
4
  import {
5
5
  logger
6
6
  } from "./chunk-F3NCFNUX.js";
7
7
  import {
8
8
  MorphError
9
- } from "./chunk-LDXKXBYN.js";
9
+ } from "./chunk-G7FT3MCW.js";
10
10
  import {
11
11
  APIResource
12
12
  } from "./chunk-LKFZBBTD.js";
@@ -132,11 +132,46 @@ var RawRouter = class extends BaseRouter {
132
132
  return { difficulty };
133
133
  }
134
134
  };
135
+ var RouterClassifier = class extends APIResource {
136
+ timeout;
137
+ constructor(clientOrConfig = {}) {
138
+ super(resolveClient(clientOrConfig));
139
+ const cfg = clientOrConfig instanceof MorphAPIClient ? {} : clientOrConfig;
140
+ this.timeout = cfg.timeout ?? DEFAULT_TIMEOUT;
141
+ }
142
+ /** Classify an input across the requested axes (all three by default). */
143
+ async classify(input) {
144
+ if (!this._client.resolveApiKey()) {
145
+ throw new Error(
146
+ "Morph API key is required. Set MORPH_API_KEY environment variable or pass apiKey in config."
147
+ );
148
+ }
149
+ logger.debug("RouterClassifier", "request", { classes: input.classes ?? "all" });
150
+ try {
151
+ const res = await this._client.post("/v1/router/classify", {
152
+ body: { input: input.input, ...input.classes ? { classes: input.classes } : {} },
153
+ timeout: this.timeout
154
+ });
155
+ logger.debug("RouterClassifier", "classified", {
156
+ difficulty: res.classifications.difficulty?.label,
157
+ ambiguity: res.classifications.ambiguity?.label,
158
+ domain: res.classifications.domain?.label
159
+ });
160
+ return res.classifications;
161
+ } catch (error) {
162
+ if (error instanceof MorphError) {
163
+ throw new Error(`Router API error (${error.statusCode}): ${error.message}`);
164
+ }
165
+ throw error;
166
+ }
167
+ }
168
+ };
135
169
 
136
170
  export {
137
171
  OpenAIRouter,
138
172
  AnthropicRouter,
139
173
  GeminiRouter,
140
- RawRouter
174
+ RawRouter,
175
+ RouterClassifier
141
176
  };
142
- //# sourceMappingURL=chunk-D4XCP2ZE.js.map
177
+ //# sourceMappingURL=chunk-7JLPTKPQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../modelrouter/core.ts"],"sourcesContent":["/**\n * Core implementation for intelligent model routing.\n *\n * Routers are thin resources over the shared `MorphAPIClient` transport: they\n * POST to `/v1/router/<provider>` and map the response. Auth, retries, timeouts,\n * and the SDK-version header all live in the transport.\n */\nimport { MorphAPIClient } from '../core/client.js';\nimport { APIResource } from '../core/resource.js';\nimport { MorphError } from '../tools/utils/resilience.js';\nimport { logger } from '../logger.js';\nimport type {\n RouterConfig,\n RouterInput,\n RouterResult,\n RawRouterResult,\n ComplexityLevel,\n Provider,\n ClassifyInput,\n ClassifyResult,\n} from './types.js';\n\nconst DEFAULT_API_URL = 'https://api.morphllm.com';\nconst DEFAULT_TIMEOUT = 5000; // 5 seconds (responses typically <500ms)\n\nfunction resolveClient(clientOrConfig: MorphAPIClient | RouterConfig): MorphAPIClient {\n if (clientOrConfig instanceof MorphAPIClient) return clientOrConfig;\n return new MorphAPIClient({\n apiKey: clientOrConfig.apiKey,\n baseURL: clientOrConfig.apiUrl ?? DEFAULT_API_URL,\n timeout: clientOrConfig.timeout ?? DEFAULT_TIMEOUT,\n retryConfig: clientOrConfig.retryConfig,\n debug: clientOrConfig.debug,\n });\n}\n\nabstract class BaseRouter extends APIResource {\n protected provider: Provider;\n protected timeout: number;\n\n constructor(provider: Provider, clientOrConfig: MorphAPIClient | RouterConfig = {}) {\n super(resolveClient(clientOrConfig));\n this.provider = provider;\n const cfg = clientOrConfig instanceof MorphAPIClient ? {} : clientOrConfig;\n this.timeout = cfg.timeout ?? DEFAULT_TIMEOUT;\n }\n\n /** Throw the historical \"API key is required\" message when no key is resolvable. */\n protected requireApiKey(): void {\n if (!this._client.resolveApiKey()) {\n throw new Error(\n 'Morph API key is required. Set MORPH_API_KEY environment variable or pass apiKey in config.',\n );\n }\n }\n\n /** POST to the router and surface failures as `Router API error (<status>): ...`. */\n protected async route<T>(provider: string, input: RouterInput): Promise<T> {\n try {\n return await this._client.post<T>(`/v1/router/${provider}`, {\n body: { input: input.input, mode: input.mode || 'balanced' },\n timeout: this.timeout,\n });\n } catch (error) {\n if (error instanceof MorphError) {\n throw new Error(`Router API error (${error.statusCode}): ${error.message}`);\n }\n throw error;\n }\n }\n\n /**\n * Select the optimal model for a given input and mode\n */\n async selectModel(input: RouterInput): Promise<RouterResult> {\n this.requireApiKey();\n logger.debug('ModelRouter', 'request', { provider: this.provider, mode: input.mode || 'balanced' });\n const apiResult = await this.route<{ model: string; confidence?: number }>(this.provider, input);\n logger.debug('ModelRouter', 'selected', { provider: this.provider, model: apiResult.model });\n return { model: apiResult.model };\n }\n}\n\n/**\n * OpenAI model router for GPT-5 series\n *\n * @deprecated Prefer `MorphClient` (`new MorphClient({ apiKey }).routers.openai`). In edge\n * runtimes where `MorphClient` is unavailable, pass a shared transport:\n * `new OpenAIRouter(new MorphAPIClient({ apiKey }))`. Kept only for backwards compatibility.\n */\nexport class OpenAIRouter extends BaseRouter {\n constructor(clientOrConfig: MorphAPIClient | RouterConfig = {}) {\n super('openai', clientOrConfig);\n }\n\n /**\n * Select optimal GPT-5 model\n *\n * @param input - User input and mode\n * @returns Selected model name (gpt-5-mini | gpt-5-low | gpt-5-medium | gpt-5-high)\n */\n async selectModel(input: RouterInput): Promise<RouterResult> {\n return super.selectModel(input);\n }\n}\n\n/**\n * Anthropic model router for Claude 4.5 series\n *\n * @deprecated Prefer `MorphClient` (`new MorphClient({ apiKey }).routers.anthropic`). In edge\n * runtimes where `MorphClient` is unavailable, pass a shared transport:\n * `new AnthropicRouter(new MorphAPIClient({ apiKey }))`. Kept only for backwards compatibility.\n */\nexport class AnthropicRouter extends BaseRouter {\n constructor(clientOrConfig: MorphAPIClient | RouterConfig = {}) {\n super('anthropic', clientOrConfig);\n }\n\n /**\n * Select optimal Claude model\n *\n * @param input - User input and mode\n * @returns Selected model name (claude-4.5-haiku | claude-4.5-sonnet)\n */\n async selectModel(input: RouterInput): Promise<RouterResult> {\n return super.selectModel(input);\n }\n}\n\n/**\n * Google Gemini model router\n *\n * @deprecated Prefer `MorphClient` (`new MorphClient({ apiKey }).routers.gemini`). In edge\n * runtimes where `MorphClient` is unavailable, pass a shared transport:\n * `new GeminiRouter(new MorphAPIClient({ apiKey }))`. Kept only for backwards compatibility.\n */\nexport class GeminiRouter extends BaseRouter {\n constructor(clientOrConfig: MorphAPIClient | RouterConfig = {}) {\n super('gemini', clientOrConfig);\n }\n\n /**\n * Select optimal Gemini model\n *\n * @param input - User input and mode\n * @returns Selected model name (gemini-2.5-flash | gemini-2.5-pro)\n */\n async selectModel(input: RouterInput): Promise<RouterResult> {\n return super.selectModel(input);\n }\n}\n\n/**\n * Raw difficulty classification router (no provider-specific mapping)\n *\n * @deprecated Prefer `MorphClient` (`new MorphClient({ apiKey }).routers.raw`). In edge\n * runtimes where `MorphClient` is unavailable, pass a shared transport:\n * `new RawRouter(new MorphAPIClient({ apiKey }))`. Kept only for backwards compatibility.\n */\nexport class RawRouter extends BaseRouter {\n constructor(clientOrConfig: MorphAPIClient | RouterConfig = {}) {\n super('raw' as Provider, clientOrConfig);\n }\n\n /**\n * Get raw difficulty classification\n *\n * @param input - User input and mode\n * @returns Raw difficulty (easy | medium | hard | needs_info)\n */\n async classify(input: RouterInput): Promise<RawRouterResult> {\n this.requireApiKey();\n logger.debug('RawRouter', 'request', { mode: input.mode || 'balanced' });\n\n const apiResult = await this.route<{ model?: string; difficulty?: string; confidence?: number }>('raw', input);\n\n // Support both 'model' and 'difficulty' fields for compatibility.\n // Empty string from API means \"medium\" difficulty (API bug workaround).\n let difficulty: ComplexityLevel;\n if (apiResult.difficulty === '') {\n difficulty = 'medium';\n } else {\n difficulty = (apiResult.difficulty || apiResult.model) as ComplexityLevel;\n }\n\n logger.debug('RawRouter', 'classified', { difficulty });\n return { difficulty };\n }\n}\n\n/**\n * Classifier for `/v1/router/classify`.\n *\n * Returns the raw difficulty/ambiguity/domain signals without mapping them to a\n * model. The caller owns the policy — this is what `@morphllm/morphrouter` uses\n * so the routing matrix configured in the dashboard stays the source of truth.\n */\nexport class RouterClassifier extends APIResource {\n private timeout: number;\n\n constructor(clientOrConfig: MorphAPIClient | RouterConfig = {}) {\n super(resolveClient(clientOrConfig));\n const cfg = clientOrConfig instanceof MorphAPIClient ? {} : clientOrConfig;\n this.timeout = cfg.timeout ?? DEFAULT_TIMEOUT;\n }\n\n /** Classify an input across the requested axes (all three by default). */\n async classify(input: ClassifyInput): Promise<ClassifyResult> {\n if (!this._client.resolveApiKey()) {\n throw new Error(\n 'Morph API key is required. Set MORPH_API_KEY environment variable or pass apiKey in config.',\n );\n }\n logger.debug('RouterClassifier', 'request', { classes: input.classes ?? 'all' });\n try {\n const res = await this._client.post<{ classifications: ClassifyResult }>('/v1/router/classify', {\n body: { input: input.input, ...(input.classes ? { classes: input.classes } : {}) },\n timeout: this.timeout,\n });\n logger.debug('RouterClassifier', 'classified', {\n difficulty: res.classifications.difficulty?.label,\n ambiguity: res.classifications.ambiguity?.label,\n domain: res.classifications.domain?.label,\n });\n return res.classifications;\n } catch (error) {\n if (error instanceof MorphError) {\n throw new Error(`Router API error (${error.statusCode}): ${error.message}`);\n }\n throw error;\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  MorphAPIClient
3
- } from "./chunk-4RARO46V.js";
3
+ } from "./chunk-HTKN3WER.js";
4
4
  import {
5
5
  logger
6
6
  } from "./chunk-F3NCFNUX.js";
@@ -139,4 +139,4 @@ export {
139
139
  FastApplyClient,
140
140
  executeEditFile
141
141
  };
142
- //# sourceMappingURL=chunk-AERVDGON.js.map
142
+ //# sourceMappingURL=chunk-BTIJDM7J.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  WarpGrepClient,
3
3
  formatResult
4
- } from "./chunk-35ZAMQ3A.js";
4
+ } from "./chunk-WVGAOPMD.js";
5
5
  import {
6
6
  CODEBASE_SEARCH_TOOL,
7
7
  SEND_MESSAGE_TOOL,
@@ -285,4 +285,4 @@ function deduplicateContexts(contexts) {
285
285
  export {
286
286
  createExploreSubagent
287
287
  };
288
- //# sourceMappingURL=chunk-XEQZQTZR.js.map
288
+ //# sourceMappingURL=chunk-C7HLMZXK.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-YQMPVJ2L.js";
5
5
  import {
6
6
  executeCodebaseSearch
7
- } from "./chunk-GVN6B4YX.js";
7
+ } from "./chunk-DFZY4NAL.js";
8
8
 
9
9
  // tools/codebase_search/openai.ts
10
10
  var codebaseSearchTool = {
@@ -125,4 +125,4 @@ export {
125
125
  getSystemPrompt,
126
126
  openai_default
127
127
  };
128
- //# sourceMappingURL=chunk-JG5MJI34.js.map
128
+ //# sourceMappingURL=chunk-D4K2OZTC.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  MorphAPIClient
3
- } from "./chunk-4RARO46V.js";
3
+ } from "./chunk-HTKN3WER.js";
4
4
  import {
5
5
  logger
6
6
  } from "./chunk-F3NCFNUX.js";
7
7
  import {
8
8
  MorphError
9
- } from "./chunk-LDXKXBYN.js";
9
+ } from "./chunk-G7FT3MCW.js";
10
10
  import {
11
11
  APIResource
12
12
  } from "./chunk-LKFZBBTD.js";
@@ -94,4 +94,4 @@ export {
94
94
  CodebaseSearchClient,
95
95
  executeCodebaseSearch
96
96
  };
97
- //# sourceMappingURL=chunk-GVN6B4YX.js.map
97
+ //# sourceMappingURL=chunk-DFZY4NAL.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  MorphAPIClient
3
- } from "./chunk-4RARO46V.js";
3
+ } from "./chunk-HTKN3WER.js";
4
4
  import {
5
5
  MorphError
6
- } from "./chunk-LDXKXBYN.js";
6
+ } from "./chunk-G7FT3MCW.js";
7
7
  import {
8
8
  APIResource
9
9
  } from "./chunk-LKFZBBTD.js";
@@ -29,15 +29,34 @@ var ReflexClient = class extends APIResource {
29
29
  }
30
30
  /** Classify text against a trained model. The model must be `succeeded`. */
31
31
  async predict(input) {
32
+ const completionId = input.completionId ?? crypto.randomUUID();
32
33
  const raw = await this._client.post("/v1/reflex/predict", {
33
- body: { model: input.model, text: input.text }
34
+ body: { model: input.model, text: input.text },
35
+ headers: { "X-Completion-Id": completionId }
34
36
  });
37
+ return toPredictResult(raw, completionId);
38
+ }
39
+ /**
40
+ * Record thumbs-up / thumbs-down feedback on a prediction. Reference the
41
+ * prediction by the `completionId` from `predict()` or by a stored `resultId`.
42
+ */
43
+ async flag(input) {
44
+ if (!input.completionId && !input.resultId) {
45
+ throw new MorphError("flag() requires completionId or resultId", "reflex_flag_missing_ref");
46
+ }
47
+ const body = { good_or_bad: input.verdict };
48
+ if (input.completionId) body.completion_id = input.completionId;
49
+ if (input.resultId) body.result_id = input.resultId;
50
+ if (input.correctedLabel != null) body.corrected_label = input.correctedLabel;
51
+ if (input.reason != null) body.reason = input.reason;
52
+ if (input.score != null) body.score = input.score;
53
+ const raw = await this._client.post("/v1/reflex/predictions/flag", { body });
35
54
  return {
36
- model: raw.model,
37
- label: raw.label,
38
- confidence: raw.confidence,
39
- allScores: raw.all_scores ?? [],
40
- inferenceTimeMs: raw.inference_time_ms
55
+ resultId: raw.result_id ?? null,
56
+ completionId: raw.completion_id ?? null,
57
+ verdict: raw.flagged_good_or_bad ?? null,
58
+ correctedLabel: raw.flagged_corrected_label ?? null,
59
+ flagged: Boolean(raw.flagged)
41
60
  };
42
61
  }
43
62
  };
@@ -137,6 +156,30 @@ function toReflexJob(raw) {
137
156
  suffix: raw.suffix ?? null
138
157
  };
139
158
  }
159
+ function toPredictResult(raw, completionId) {
160
+ const classes = (raw.classes ?? []).map((c) => ({
161
+ classId: c.class_id,
162
+ label: c.label,
163
+ score: c.score,
164
+ selected: c.selected
165
+ }));
166
+ const selectedClasses = classes.filter((c) => c.selected);
167
+ const top = selectedClasses.reduce(
168
+ (best, c) => best === null || c.score > best.score ? c : best,
169
+ null
170
+ );
171
+ return {
172
+ model: raw.model,
173
+ mode: raw.mode === "multi_label" ? "multi_label" : "single_label",
174
+ classes,
175
+ selected: selectedClasses.map((c) => c.label),
176
+ label: top ? top.label : null,
177
+ confidence: top ? top.score : null,
178
+ allScores: classes.map((c) => c.score),
179
+ inferenceTimeMs: raw.inference_time_ms,
180
+ completionId
181
+ };
182
+ }
140
183
  function toReflexEvent(raw) {
141
184
  return {
142
185
  id: raw.id,
@@ -155,4 +198,4 @@ export {
155
198
  ReflexClient,
156
199
  ReflexJobsResource
157
200
  };
158
- //# sourceMappingURL=chunk-2DLMZDDB.js.map
201
+ //# sourceMappingURL=chunk-DOGRQEOM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../tools/reflex/core.ts"],"sourcesContent":["/**\n * Reflex: train and serve small text classifiers.\n *\n * const morph = new MorphClient({ apiKey });\n * const job = await morph.reflex.jobs.create({ trainingData: rows, suffix: 'support' });\n * const ready = await morph.reflex.jobs.waitForReady(job.id);\n * const out = await morph.reflex.predict({ model: ready.fineTunedModel!, text: 'refund please' });\n *\n * Mirrors the OpenAI fine-tuning shape (`reflex.jobs.create/retrieve/list/cancel/delete`)\n * plus `reflex.predict`. All HTTP goes through the shared `MorphAPIClient` transport.\n */\nimport { MorphAPIClient } from '../../core/client.js';\nimport { APIResource } from '../../core/resource.js';\nimport { MorphError } from '../utils/resilience.js';\nimport type {\n CreateReflexJobInput,\n DeletedReflexJob,\n ListReflexJobsInput,\n ReflexConfig,\n ReflexEvent,\n ReflexFlagInput,\n ReflexFlagResult,\n ReflexJob,\n ReflexJobList,\n ReflexPredictClass,\n ReflexPredictInput,\n ReflexPredictResult,\n} from './types.js';\n\nconst BASE_MODEL = 'morph-reflex-v1';\n\n/** Build a transport from either a shared client or a standalone `ReflexConfig`. */\nfunction resolveClient(clientOrConfig: MorphAPIClient | ReflexConfig): MorphAPIClient {\n if (clientOrConfig instanceof MorphAPIClient) return clientOrConfig;\n return new MorphAPIClient({\n apiKey: clientOrConfig.apiKey,\n baseURL: clientOrConfig.baseUrl,\n timeout: clientOrConfig.timeout,\n retryConfig: clientOrConfig.retryConfig,\n debug: clientOrConfig.debug,\n });\n}\n\n/**\n * @deprecated Prefer the unified `MorphClient` (`new MorphClient({ apiKey }).reflex`).\n * Standalone clients remain only for backwards compatibility and may be removed in a future\n * major version — do not use them in new code.\n */\nexport class ReflexClient extends APIResource {\n /** Train, retrieve, and manage classifier jobs. */\n public readonly jobs: ReflexJobsResource;\n\n constructor(clientOrConfig: MorphAPIClient | ReflexConfig = {}) {\n super(resolveClient(clientOrConfig));\n this.jobs = new ReflexJobsResource(this._client);\n }\n\n /** Classify text against a trained model. The model must be `succeeded`. */\n async predict(input: ReflexPredictInput): Promise<ReflexPredictResult> {\n const completionId = input.completionId ?? crypto.randomUUID();\n const raw = await this._client.post<RawPredict>('/v1/reflex/predict', {\n body: { model: input.model, text: input.text },\n headers: { 'X-Completion-Id': completionId },\n });\n return toPredictResult(raw, completionId);\n }\n\n /**\n * Record thumbs-up / thumbs-down feedback on a prediction. Reference the\n * prediction by the `completionId` from `predict()` or by a stored `resultId`.\n */\n async flag(input: ReflexFlagInput): Promise<ReflexFlagResult> {\n if (!input.completionId && !input.resultId) {\n throw new MorphError('flag() requires completionId or resultId', 'reflex_flag_missing_ref');\n }\n const body: Record<string, unknown> = { good_or_bad: input.verdict };\n if (input.completionId) body.completion_id = input.completionId;\n if (input.resultId) body.result_id = input.resultId;\n if (input.correctedLabel != null) body.corrected_label = input.correctedLabel;\n if (input.reason != null) body.reason = input.reason;\n if (input.score != null) body.score = input.score;\n\n const raw = await this._client.post<RawFlag>('/v1/reflex/predictions/flag', { body });\n return {\n resultId: raw.result_id ?? null,\n completionId: raw.completion_id ?? null,\n verdict: raw.flagged_good_or_bad ?? null,\n correctedLabel: raw.flagged_corrected_label ?? null,\n flagged: Boolean(raw.flagged),\n };\n }\n}\n\nexport class ReflexJobsResource extends APIResource {\n /** Start a training job from labeled data, a description, or unlabeled text. */\n async create(input: CreateReflexJobInput): Promise<ReflexJob> {\n return toReflexJob(await this._client.post<RawJob>('/v1/fine_tuning/jobs', { body: createBody(input) }));\n }\n\n /** Fetch a job by id. */\n async retrieve(id: string): Promise<ReflexJob> {\n return toReflexJob(await this._client.get<RawJob>(`/v1/fine_tuning/jobs/${encodeURIComponent(id)}`));\n }\n\n /** List the caller's jobs, newest first. */\n async list(input: ListReflexJobsInput = {}): Promise<ReflexJobList> {\n const raw = await this._client.get<RawJobList>('/v1/fine_tuning/jobs', {\n query: { limit: input.limit, after: input.after },\n });\n return { data: (raw.data ?? []).map(toReflexJob), hasMore: Boolean(raw.has_more) };\n }\n\n /** Stop a queued or running job. */\n async cancel(id: string): Promise<ReflexJob> {\n return toReflexJob(await this._client.post<RawJob>(`/v1/fine_tuning/jobs/${encodeURIComponent(id)}/cancel`));\n }\n\n /** Delete a job and its trained model. */\n async delete(id: string): Promise<DeletedReflexJob> {\n const raw = await this._client.delete<{ id: string; deleted?: boolean }>(\n `/v1/fine_tuning/jobs/${encodeURIComponent(id)}`,\n );\n return { id: raw.id, deleted: Boolean(raw.deleted) };\n }\n\n /** The training loss curve as events, plus a terminal event. */\n async events(id: string): Promise<ReflexEvent[]> {\n const raw = await this._client.get<{ data?: RawEvent[] }>(\n `/v1/fine_tuning/jobs/${encodeURIComponent(id)}/events`,\n );\n return (raw.data ?? []).map(toReflexEvent);\n }\n\n /**\n * Poll until the job reaches a terminal status and return it on success.\n * Throws a `MorphError` if it fails, is cancelled, or exceeds `timeoutMs`.\n */\n async waitForReady(id: string, opts: { pollMs?: number; timeoutMs?: number } = {}): Promise<ReflexJob> {\n const pollMs = opts.pollMs ?? 3_000;\n const deadline = Date.now() + (opts.timeoutMs ?? 15 * 60_000);\n\n for (;;) {\n const job = await this.retrieve(id);\n if (job.status === 'succeeded') return job;\n if (job.status === 'failed' || job.status === 'cancelled') {\n throw new MorphError(job.error?.message ?? `Reflex job ${job.status}`, `reflex_job_${job.status}`);\n }\n if (Date.now() >= deadline) {\n throw new MorphError(`Reflex job ${id} did not finish in time`, 'reflex_timeout');\n }\n await sleep(pollMs);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Mapping (camelCase <-> snake_case) and helpers\n// ---------------------------------------------------------------------------\n\ninterface RawJob {\n id: string;\n model: string;\n created_at: number;\n finished_at: number | null;\n fine_tuned_model: string | null;\n status: ReflexJob['status'];\n labels?: string[];\n trained_examples?: number;\n result?: { accuracy: number | null; f1_score: number | null } | null;\n error?: { message: string } | null;\n suffix?: string | null;\n}\ninterface RawJobList {\n data?: RawJob[];\n has_more?: boolean;\n}\ninterface RawPredictClass {\n class_id: number;\n label: string;\n score: number;\n selected: boolean;\n}\ninterface RawPredict {\n model: string;\n mode?: string;\n classes?: RawPredictClass[];\n inference_time_ms: number;\n}\ninterface RawFlag {\n result_id?: string | null;\n completion_id?: string | null;\n flagged?: boolean;\n flagged_good_or_bad?: 'good' | 'bad' | null;\n flagged_corrected_label?: string | null;\n}\ninterface RawEvent {\n id: string;\n created_at: number;\n level: ReflexEvent['level'];\n message: string;\n type: ReflexEvent['type'];\n data?: { epoch?: number; step?: number; train_loss?: number };\n}\n\nfunction createBody(input: CreateReflexJobInput): Record<string, unknown> {\n const base: Record<string, unknown> = { model: BASE_MODEL };\n if (input.suffix) base.suffix = input.suffix;\n\n if ('trainingData' in input) {\n if (input.labels) base.labels = input.labels;\n return { ...base, training_data: input.trainingData };\n }\n if ('generate' in input) {\n return {\n ...base,\n labels: input.labels,\n generate: {\n description: input.generate.description,\n ...(input.generate.examplesPerLabel != null ? { examples_per_label: input.generate.examplesPerLabel } : {}),\n },\n };\n }\n return {\n ...base,\n labels: input.labels,\n label_data: {\n texts: input.labelData.texts,\n ...(input.labelData.description ? { description: input.labelData.description } : {}),\n },\n };\n}\n\nfunction toReflexJob(raw: RawJob): ReflexJob {\n return {\n id: raw.id,\n object: 'fine_tuning.job',\n model: raw.model,\n createdAt: raw.created_at,\n finishedAt: raw.finished_at ?? null,\n fineTunedModel: raw.fine_tuned_model ?? null,\n status: raw.status,\n labels: raw.labels ?? [],\n trainedExamples: raw.trained_examples ?? 0,\n result: raw.result ? { accuracy: raw.result.accuracy ?? null, f1Score: raw.result.f1_score ?? null } : null,\n error: raw.error ? { message: raw.error.message } : null,\n suffix: raw.suffix ?? null,\n };\n}\n\nfunction toPredictResult(raw: RawPredict, completionId: string): ReflexPredictResult {\n const classes: ReflexPredictClass[] = (raw.classes ?? []).map(c => ({\n classId: c.class_id,\n label: c.label,\n score: c.score,\n selected: c.selected,\n }));\n const selectedClasses = classes.filter(c => c.selected);\n // Top selected class by score derives the back-compat label/confidence.\n const top = selectedClasses.reduce<ReflexPredictClass | null>(\n (best, c) => (best === null || c.score > best.score ? c : best),\n null,\n );\n return {\n model: raw.model,\n mode: raw.mode === 'multi_label' ? 'multi_label' : 'single_label',\n classes,\n selected: selectedClasses.map(c => c.label),\n label: top ? top.label : null,\n confidence: top ? top.score : null,\n allScores: classes.map(c => c.score),\n inferenceTimeMs: raw.inference_time_ms,\n completionId,\n };\n}\n\nfunction toReflexEvent(raw: RawEvent): ReflexEvent {\n return {\n id: raw.id,\n createdAt: raw.created_at,\n level: raw.level,\n message: raw.message,\n type: raw.type,\n data: { epoch: raw.data?.epoch ?? 0, step: raw.data?.step ?? 0, trainLoss: raw.data?.train_loss ?? 0 },\n };\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ProfilesClient
3
- } from "./chunk-TDT6J2X4.js";
3
+ } from "./chunk-ZXL7SYO2.js";
4
4
  import {
5
5
  buildEmbedCode,
6
6
  buildLiveIframe,
@@ -9,14 +9,14 @@ import {
9
9
  } from "./chunk-YTYCHRQ2.js";
10
10
  import {
11
11
  MorphAPIClient
12
- } from "./chunk-4RARO46V.js";
12
+ } from "./chunk-HTKN3WER.js";
13
13
  import {
14
14
  logger
15
15
  } from "./chunk-F3NCFNUX.js";
16
16
  import {
17
17
  fetchWithRetry,
18
18
  withTimeout
19
- } from "./chunk-LDXKXBYN.js";
19
+ } from "./chunk-G7FT3MCW.js";
20
20
  import {
21
21
  APIResource
22
22
  } from "./chunk-LKFZBBTD.js";
@@ -619,4 +619,4 @@ export {
619
619
  getWebp,
620
620
  checkHealth
621
621
  };
622
- //# sourceMappingURL=chunk-QW33U4EI.js.map
622
+ //# sourceMappingURL=chunk-F477JTM2.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SDK_VERSION
3
- } from "./chunk-4TMCQZNB.js";
3
+ } from "./chunk-NBO7EVSO.js";
4
4
 
5
5
  // tools/utils/resilience.ts
6
6
  var DEFAULT_RETRY_CONFIG = {
@@ -91,4 +91,4 @@ export {
91
91
  withTimeout,
92
92
  MorphError
93
93
  };
94
- //# sourceMappingURL=chunk-LDXKXBYN.js.map
94
+ //# sourceMappingURL=chunk-G7FT3MCW.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  executeEditFile
3
- } from "./chunk-AERVDGON.js";
3
+ } from "./chunk-BTIJDM7J.js";
4
4
  import {
5
5
  EDIT_FILE_SYSTEM_PROMPT,
6
6
  EDIT_FILE_TOOL_DESCRIPTION
@@ -91,4 +91,4 @@ export {
91
91
  openai_default,
92
92
  openai_exports
93
93
  };
94
- //# sourceMappingURL=chunk-2WQTCETP.js.map
94
+ //# sourceMappingURL=chunk-GX2KTPXV.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  executeEditFile
3
- } from "./chunk-AERVDGON.js";
3
+ } from "./chunk-BTIJDM7J.js";
4
4
  import {
5
5
  EDIT_FILE_SYSTEM_PROMPT,
6
6
  EDIT_FILE_TOOL_DESCRIPTION
@@ -79,4 +79,4 @@ export {
79
79
  getSystemPrompt,
80
80
  anthropic_exports
81
81
  };
82
- //# sourceMappingURL=chunk-IOZMMARY.js.map
82
+ //# sourceMappingURL=chunk-H2K7JQOW.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-2HMEZZKK.js";
4
4
  import {
5
5
  executeBrowserTask
6
- } from "./chunk-QW33U4EI.js";
6
+ } from "./chunk-F477JTM2.js";
7
7
  import {
8
8
  __export
9
9
  } from "./chunk-PZ5AY32C.js";
@@ -54,4 +54,4 @@ export {
54
54
  browserTool,
55
55
  vercel_exports
56
56
  };
57
- //# sourceMappingURL=chunk-U4KCWD3I.js.map
57
+ //# sourceMappingURL=chunk-H2SWEPM3.js.map
@@ -3,15 +3,15 @@ import {
3
3
  } from "./chunk-F3NCFNUX.js";
4
4
  import {
5
5
  toMorphError
6
- } from "./chunk-X4VPV3A7.js";
6
+ } from "./chunk-P2ZUVNZ2.js";
7
7
  import {
8
8
  MorphError,
9
9
  fetchWithRetry,
10
10
  withTimeout
11
- } from "./chunk-LDXKXBYN.js";
11
+ } from "./chunk-G7FT3MCW.js";
12
12
  import {
13
13
  SDK_VERSION
14
- } from "./chunk-4TMCQZNB.js";
14
+ } from "./chunk-NBO7EVSO.js";
15
15
 
16
16
  // core/client.ts
17
17
  var DEFAULT_BASE_URL = "https://api.morphllm.com";
@@ -117,4 +117,4 @@ var MorphAPIClient = class {
117
117
  export {
118
118
  MorphAPIClient
119
119
  };
120
- //# sourceMappingURL=chunk-4RARO46V.js.map
120
+ //# sourceMappingURL=chunk-HTKN3WER.js.map
@@ -14,7 +14,7 @@ import {
14
14
  executeToolCall,
15
15
  formatGitHubReadFileResult,
16
16
  formatResult
17
- } from "./chunk-35ZAMQ3A.js";
17
+ } from "./chunk-WVGAOPMD.js";
18
18
 
19
19
  // tools/warp_grep/openai.ts
20
20
  var TOOL_PARAMETERS = {
@@ -104,4 +104,4 @@ export {
104
104
  createGitHubReadFileTool,
105
105
  openai_default
106
106
  };
107
- //# sourceMappingURL=chunk-QAZM5ELA.js.map
107
+ //# sourceMappingURL=chunk-JX4HNDGL.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CompactClient
3
- } from "./chunk-WQC3YOER.js";
3
+ } from "./chunk-LAQPE5RA.js";
4
4
 
5
5
  // tools/compact/utils.ts
6
6
  async function compactFileContexts(files, query, apiKey, apiUrl, maxTokens = 1e4, maxConcurrency = 3) {
@@ -50,4 +50,4 @@ async function compactFileContexts(files, query, apiKey, apiUrl, maxTokens = 1e4
50
50
  export {
51
51
  compactFileContexts
52
52
  };
53
- //# sourceMappingURL=chunk-TBVIOQ5O.js.map
53
+ //# sourceMappingURL=chunk-KEFVC7WL.js.map
@@ -14,7 +14,7 @@ import {
14
14
  executeToolCall,
15
15
  formatGitHubReadFileResult,
16
16
  formatResult
17
- } from "./chunk-35ZAMQ3A.js";
17
+ } from "./chunk-WVGAOPMD.js";
18
18
 
19
19
  // tools/warp_grep/anthropic.ts
20
20
  var INPUT_SCHEMA = {
@@ -90,4 +90,4 @@ export {
90
90
  createGitHubSearchTool,
91
91
  createGitHubReadFileTool
92
92
  };
93
- //# sourceMappingURL=chunk-IS5TDLAJ.js.map
93
+ //# sourceMappingURL=chunk-KEYFDMOM.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  MorphAPIClient
3
- } from "./chunk-4RARO46V.js";
3
+ } from "./chunk-HTKN3WER.js";
4
4
  import {
5
5
  MorphError
6
- } from "./chunk-LDXKXBYN.js";
6
+ } from "./chunk-G7FT3MCW.js";
7
7
  import {
8
8
  APIResource
9
9
  } from "./chunk-LKFZBBTD.js";
@@ -75,4 +75,4 @@ var CompactClient = class extends APIResource {
75
75
  export {
76
76
  CompactClient
77
77
  };
78
- //# sourceMappingURL=chunk-WQC3YOER.js.map
78
+ //# sourceMappingURL=chunk-LAQPE5RA.js.map
@@ -1,69 +1,70 @@
1
1
  import {
2
2
  createGitHubSearchTool as createGitHubSearchTool3,
3
3
  createWarpGrepTool as createWarpGrepTool3
4
- } from "./chunk-OE2LFOYB.js";
4
+ } from "./chunk-XQ5YMAAE.js";
5
5
  import {
6
6
  createGitHubSearchTool as createGitHubSearchTool2,
7
7
  createWarpGrepTool as createWarpGrepTool2
8
- } from "./chunk-IS5TDLAJ.js";
8
+ } from "./chunk-KEYFDMOM.js";
9
9
  import {
10
10
  createGitHubSearchTool,
11
11
  createWarpGrepTool
12
- } from "./chunk-QAZM5ELA.js";
12
+ } from "./chunk-JX4HNDGL.js";
13
13
  import {
14
14
  ReflexClient
15
- } from "./chunk-2DLMZDDB.js";
15
+ } from "./chunk-DOGRQEOM.js";
16
16
  import {
17
17
  createCodebaseSearchTool as createCodebaseSearchTool3
18
- } from "./chunk-DFTKUEF5.js";
18
+ } from "./chunk-7ICJYWTT.js";
19
19
  import {
20
20
  createCodebaseSearchTool as createCodebaseSearchTool2
21
- } from "./chunk-HXDITEO6.js";
21
+ } from "./chunk-4WQGJMOW.js";
22
22
  import {
23
23
  createCodebaseSearchTool
24
- } from "./chunk-JG5MJI34.js";
24
+ } from "./chunk-D4K2OZTC.js";
25
25
  import {
26
26
  CodebaseSearchClient
27
- } from "./chunk-GVN6B4YX.js";
27
+ } from "./chunk-DFZY4NAL.js";
28
28
  import {
29
29
  BrowserClient
30
- } from "./chunk-QW33U4EI.js";
30
+ } from "./chunk-F477JTM2.js";
31
31
  import {
32
32
  createExploreSubagent as createExploreSubagent2
33
- } from "./chunk-GZDRJBI2.js";
33
+ } from "./chunk-QFPPKZ5G.js";
34
34
  import {
35
35
  createEditFileTool
36
- } from "./chunk-2WQTCETP.js";
36
+ } from "./chunk-GX2KTPXV.js";
37
37
  import {
38
38
  createEditFileTool as createEditFileTool3
39
- } from "./chunk-EJZFQAKT.js";
39
+ } from "./chunk-27EP7ZJK.js";
40
40
  import {
41
41
  createEditFileTool as createEditFileTool2
42
- } from "./chunk-IOZMMARY.js";
42
+ } from "./chunk-H2K7JQOW.js";
43
43
  import {
44
44
  FastApplyClient
45
- } from "./chunk-AERVDGON.js";
45
+ } from "./chunk-BTIJDM7J.js";
46
46
  import {
47
47
  MorphGit
48
- } from "./chunk-XYHP2TFY.js";
48
+ } from "./chunk-TH3AVISW.js";
49
49
  import {
50
50
  createExploreSubagent
51
- } from "./chunk-XEQZQTZR.js";
51
+ } from "./chunk-C7HLMZXK.js";
52
52
  import {
53
53
  WarpGrepClient
54
- } from "./chunk-35ZAMQ3A.js";
54
+ } from "./chunk-WVGAOPMD.js";
55
55
  import {
56
56
  AnthropicRouter,
57
57
  GeminiRouter,
58
58
  OpenAIRouter,
59
- RawRouter
60
- } from "./chunk-D4XCP2ZE.js";
59
+ RawRouter,
60
+ RouterClassifier
61
+ } from "./chunk-7JLPTKPQ.js";
61
62
  import {
62
63
  CompactClient
63
- } from "./chunk-WQC3YOER.js";
64
+ } from "./chunk-LAQPE5RA.js";
64
65
  import {
65
66
  MorphAPIClient
66
- } from "./chunk-4RARO46V.js";
67
+ } from "./chunk-HTKN3WER.js";
67
68
  import {
68
69
  logger
69
70
  } from "./chunk-F3NCFNUX.js";
@@ -665,7 +666,8 @@ var MorphClient = class extends MorphAPIClient {
665
666
  openai: new OpenAIRouter(this),
666
667
  anthropic: new AnthropicRouter(this),
667
668
  gemini: new GeminiRouter(this),
668
- raw: new RawRouter(this)
669
+ raw: new RawRouter(this),
670
+ classify: new RouterClassifier(this)
669
671
  };
670
672
  const compactClient = new CompactClient(this);
671
673
  this.compact = compactClient.compact.bind(compactClient);
@@ -687,4 +689,4 @@ export {
687
689
  VercelToolFactory,
688
690
  MorphClient
689
691
  };
690
- //# sourceMappingURL=chunk-LBOFTF6A.js.map
692
+ //# sourceMappingURL=chunk-LXCTENG5.js.map