@morphllm/morphsdk 0.2.179 → 0.2.181
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-ZMXPIXOS.js → chunk-2VETLL6C.js} +2 -2
- package/dist/{chunk-PSJXKCCP.js → chunk-4DLGPMUS.js} +2 -2
- package/dist/{chunk-V2BD6NXI.js → chunk-4NDS3GQB.js} +4 -4
- package/dist/{chunk-U3XOCF4O.js → chunk-4ZTI7JDJ.js} +3 -3
- package/dist/{chunk-BGRGUSNI.js → chunk-AFMB2XGS.js} +2 -2
- package/dist/{chunk-ABQMAHEA.js → chunk-AWUIP46W.js} +2 -2
- package/dist/{chunk-53RYMV2B.js → chunk-CIBOCK5C.js} +39 -4
- package/dist/chunk-CIBOCK5C.js.map +1 -0
- package/dist/{chunk-CXE7CVNL.js → chunk-CTCRNGRP.js} +2 -2
- package/dist/{chunk-WKKPZO4I.js → chunk-DYGQ3BB5.js} +2 -2
- package/dist/{chunk-PP2GHVRI.js → chunk-GG4ATN6M.js} +2 -2
- package/dist/{chunk-PP2GHVRI.js.map → chunk-GG4ATN6M.js.map} +1 -1
- package/dist/{chunk-2MSNIGVA.js → chunk-IDMKQWQG.js} +52 -4
- package/dist/chunk-IDMKQWQG.js.map +1 -0
- package/dist/{chunk-RANVC4NO.js → chunk-IHVQKX6U.js} +25 -23
- package/dist/{chunk-RANVC4NO.js.map → chunk-IHVQKX6U.js.map} +1 -1
- package/dist/{chunk-GEPVEMCF.js → chunk-II3AF6LD.js} +2 -2
- package/dist/{chunk-I3UFROCM.js → chunk-INXEXFQV.js} +2 -2
- package/dist/{chunk-Q5FAU76K.js → chunk-J7BZPA63.js} +78 -9
- package/dist/chunk-J7BZPA63.js.map +1 -0
- package/dist/{chunk-6VFTPA27.js → chunk-KOTSWCSD.js} +2 -2
- package/dist/{chunk-V2QYP4Z7.js → chunk-KP3YMV7Y.js} +2 -2
- package/dist/{chunk-47MAQT6H.js → chunk-KP5VIWLO.js} +2 -2
- package/dist/{chunk-PK2OTDD5.js → chunk-LJ27CQI3.js} +2 -2
- package/dist/{chunk-YO7D5VEC.js → chunk-LZUBCNTC.js} +2 -2
- package/dist/{chunk-OK5Y6FH6.js → chunk-MNDFDO2W.js} +2 -2
- package/dist/{chunk-4YKNHDJI.js → chunk-MYBIXWNM.js} +2 -2
- package/dist/{chunk-6FQLA42K.js → chunk-NOX6MIA2.js} +2 -2
- package/dist/{chunk-S3V5JP26.js → chunk-OWY3P43T.js} +2 -2
- package/dist/{chunk-OR27NPLB.js → chunk-P63CYB3F.js} +2 -2
- package/dist/{chunk-EQJEOG3S.js → chunk-PJWEGYOK.js} +2 -2
- package/dist/{chunk-MA2LJGLZ.js → chunk-QAJW6FOO.js} +2 -2
- package/dist/{chunk-WGIMYL4A.js → chunk-STJTJDAV.js} +28 -13
- package/dist/chunk-STJTJDAV.js.map +1 -0
- package/dist/{chunk-CVH6TA6O.js → chunk-TD2SQ6TQ.js} +3 -3
- package/dist/{chunk-CABQ652L.js → chunk-TLXVGE4R.js} +1 -1
- package/dist/chunk-TLXVGE4R.js.map +1 -0
- package/dist/{chunk-Y6QK7CDW.js → chunk-WJ2LQ3NR.js} +2 -2
- package/dist/{chunk-5G3D45TP.js → chunk-X4JLZWGW.js} +4 -4
- package/dist/{chunk-TROXSFNC.js → chunk-X4XBY7VI.js} +4 -4
- package/dist/{chunk-4PT4J6FV.js → chunk-X5YEUR65.js} +2 -2
- package/dist/{client-Dh6yzCm4.d.ts → client-DUvmVWQJ.d.ts} +2 -1
- package/dist/client.cjs +112 -8
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +28 -28
- package/dist/core/client.cjs +1 -1
- package/dist/core/client.cjs.map +1 -1
- package/dist/core/client.js +4 -4
- package/dist/core/error.cjs +1 -1
- package/dist/core/error.cjs.map +1 -1
- package/dist/core/error.js +3 -3
- package/dist/core/index.cjs +1 -1
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +4 -4
- package/dist/edge.cjs +37 -1
- package/dist/edge.cjs.map +1 -1
- package/dist/edge.d.ts +2 -2
- package/dist/edge.js +10 -8
- package/dist/git/client.cjs +1 -1
- package/dist/git/client.cjs.map +1 -1
- package/dist/git/client.js +5 -5
- package/dist/git/index.cjs +1 -1
- package/dist/git/index.cjs.map +1 -1
- package/dist/git/index.js +5 -5
- package/dist/index.cjs +112 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +28 -28
- package/dist/modelrouter/core.cjs +39 -3
- package/dist/modelrouter/core.cjs.map +1 -1
- package/dist/modelrouter/core.d.ts +15 -2
- package/dist/modelrouter/core.js +9 -7
- package/dist/modelrouter/index.cjs +39 -3
- package/dist/modelrouter/index.cjs.map +1 -1
- package/dist/modelrouter/index.d.ts +2 -2
- package/dist/modelrouter/index.js +9 -7
- package/dist/modelrouter/types.cjs.map +1 -1
- package/dist/modelrouter/types.d.ts +24 -1
- package/dist/{otel-Dk8kdhmZ.d.ts → otel-CG0uqXjp.d.ts} +1 -1
- package/dist/subagents/anthropic.cjs +1 -1
- package/dist/subagents/anthropic.cjs.map +1 -1
- package/dist/subagents/anthropic.js +9 -9
- package/dist/subagents/vercel.cjs +1 -1
- package/dist/subagents/vercel.cjs.map +1 -1
- package/dist/subagents/vercel.js +9 -9
- package/dist/tools/browser/anthropic.cjs +1 -1
- package/dist/tools/browser/anthropic.cjs.map +1 -1
- package/dist/tools/browser/anthropic.js +7 -7
- package/dist/tools/browser/core.cjs +1 -1
- package/dist/tools/browser/core.cjs.map +1 -1
- package/dist/tools/browser/core.js +6 -6
- package/dist/tools/browser/index.cjs +1 -1
- package/dist/tools/browser/index.cjs.map +1 -1
- package/dist/tools/browser/index.js +9 -9
- package/dist/tools/browser/openai.cjs +1 -1
- package/dist/tools/browser/openai.cjs.map +1 -1
- package/dist/tools/browser/openai.js +7 -7
- package/dist/tools/browser/profiles/core.cjs +1 -1
- package/dist/tools/browser/profiles/core.cjs.map +1 -1
- package/dist/tools/browser/profiles/core.js +3 -3
- package/dist/tools/browser/profiles/index.cjs +1 -1
- package/dist/tools/browser/profiles/index.cjs.map +1 -1
- package/dist/tools/browser/profiles/index.js +3 -3
- package/dist/tools/browser/vercel.cjs +1 -1
- package/dist/tools/browser/vercel.cjs.map +1 -1
- package/dist/tools/browser/vercel.js +7 -7
- package/dist/tools/codebase_search/anthropic.cjs +1 -1
- package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
- package/dist/tools/codebase_search/anthropic.js +6 -6
- package/dist/tools/codebase_search/core.cjs +1 -1
- package/dist/tools/codebase_search/core.cjs.map +1 -1
- package/dist/tools/codebase_search/core.js +5 -5
- package/dist/tools/codebase_search/index.cjs +1 -1
- package/dist/tools/codebase_search/index.cjs.map +1 -1
- package/dist/tools/codebase_search/index.js +8 -8
- package/dist/tools/codebase_search/openai.cjs +1 -1
- package/dist/tools/codebase_search/openai.cjs.map +1 -1
- package/dist/tools/codebase_search/openai.js +6 -6
- package/dist/tools/codebase_search/vercel.cjs +1 -1
- package/dist/tools/codebase_search/vercel.cjs.map +1 -1
- package/dist/tools/codebase_search/vercel.js +6 -6
- package/dist/tools/compact/core.cjs +1 -1
- package/dist/tools/compact/core.cjs.map +1 -1
- package/dist/tools/compact/core.js +5 -5
- package/dist/tools/compact/index.cjs +1 -1
- package/dist/tools/compact/index.cjs.map +1 -1
- package/dist/tools/compact/index.js +6 -6
- package/dist/tools/fastapply/anthropic.cjs +1 -1
- package/dist/tools/fastapply/anthropic.cjs.map +1 -1
- package/dist/tools/fastapply/anthropic.js +7 -7
- package/dist/tools/fastapply/apply.cjs +1 -1
- package/dist/tools/fastapply/apply.cjs.map +1 -1
- package/dist/tools/fastapply/apply.js +2 -2
- package/dist/tools/fastapply/core.cjs +1 -1
- package/dist/tools/fastapply/core.cjs.map +1 -1
- package/dist/tools/fastapply/core.js +6 -6
- package/dist/tools/fastapply/index.cjs +1 -1
- package/dist/tools/fastapply/index.cjs.map +1 -1
- package/dist/tools/fastapply/index.js +9 -9
- package/dist/tools/fastapply/openai.cjs +1 -1
- package/dist/tools/fastapply/openai.cjs.map +1 -1
- package/dist/tools/fastapply/openai.js +7 -7
- package/dist/tools/fastapply/vercel.cjs +1 -1
- package/dist/tools/fastapply/vercel.cjs.map +1 -1
- package/dist/tools/fastapply/vercel.js +7 -7
- package/dist/tools/index.cjs +1 -1
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.js +9 -9
- package/dist/tools/reflex/core.cjs +76 -7
- package/dist/tools/reflex/core.cjs.map +1 -1
- package/dist/tools/reflex/core.d.ts +8 -1
- package/dist/tools/reflex/core.js +5 -5
- package/dist/tools/reflex/index.cjs +76 -7
- package/dist/tools/reflex/index.cjs.map +1 -1
- package/dist/tools/reflex/index.js +5 -5
- package/dist/tools/reflex/types.cjs.map +1 -1
- package/dist/tools/reflex/types.d.ts +83 -4
- package/dist/tools/utils/resilience.cjs +1 -1
- package/dist/tools/utils/resilience.cjs.map +1 -1
- package/dist/tools/utils/resilience.js +2 -2
- package/dist/tools/warp_grep/agent/runner.cjs +1 -1
- package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
- package/dist/tools/warp_grep/agent/runner.js +2 -2
- package/dist/tools/warp_grep/anthropic.cjs +1 -1
- package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
- package/dist/tools/warp_grep/anthropic.js +9 -9
- package/dist/tools/warp_grep/client.cjs +1 -1
- package/dist/tools/warp_grep/client.cjs.map +1 -1
- package/dist/tools/warp_grep/client.js +8 -8
- package/dist/tools/warp_grep/gemini.cjs +1 -1
- package/dist/tools/warp_grep/gemini.cjs.map +1 -1
- package/dist/tools/warp_grep/gemini.js +8 -8
- package/dist/tools/warp_grep/index.cjs +1 -1
- package/dist/tools/warp_grep/index.cjs.map +1 -1
- package/dist/tools/warp_grep/index.js +8 -8
- package/dist/tools/warp_grep/openai.cjs +1 -1
- package/dist/tools/warp_grep/openai.cjs.map +1 -1
- package/dist/tools/warp_grep/openai.js +9 -9
- package/dist/tools/warp_grep/vercel.cjs +1 -1
- package/dist/tools/warp_grep/vercel.cjs.map +1 -1
- package/dist/tools/warp_grep/vercel.js +9 -9
- package/dist/tracing/core.cjs +71 -10
- package/dist/tracing/core.cjs.map +1 -1
- package/dist/tracing/core.d.ts +7 -2
- package/dist/tracing/core.js +3 -3
- package/dist/tracing/index.cjs +71 -10
- package/dist/tracing/index.cjs.map +1 -1
- package/dist/tracing/index.d.ts +1 -1
- package/dist/tracing/index.js +3 -3
- package/dist/tracing/interaction.cjs +52 -3
- package/dist/tracing/interaction.cjs.map +1 -1
- package/dist/tracing/interaction.d.ts +12 -2
- package/dist/tracing/interaction.js +6 -4
- package/dist/tracing/otel.cjs.map +1 -1
- package/dist/tracing/otel.d.ts +1 -1
- package/dist/tracing/otel.js +1 -1
- package/dist/tracing/types.cjs.map +1 -1
- package/dist/tracing/types.d.ts +9 -8
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-2MSNIGVA.js.map +0 -1
- package/dist/chunk-53RYMV2B.js.map +0 -1
- package/dist/chunk-CABQ652L.js.map +0 -1
- package/dist/chunk-Q5FAU76K.js.map +0 -1
- package/dist/chunk-WGIMYL4A.js.map +0 -1
- /package/dist/{chunk-ZMXPIXOS.js.map → chunk-2VETLL6C.js.map} +0 -0
- /package/dist/{chunk-PSJXKCCP.js.map → chunk-4DLGPMUS.js.map} +0 -0
- /package/dist/{chunk-V2BD6NXI.js.map → chunk-4NDS3GQB.js.map} +0 -0
- /package/dist/{chunk-U3XOCF4O.js.map → chunk-4ZTI7JDJ.js.map} +0 -0
- /package/dist/{chunk-BGRGUSNI.js.map → chunk-AFMB2XGS.js.map} +0 -0
- /package/dist/{chunk-ABQMAHEA.js.map → chunk-AWUIP46W.js.map} +0 -0
- /package/dist/{chunk-CXE7CVNL.js.map → chunk-CTCRNGRP.js.map} +0 -0
- /package/dist/{chunk-WKKPZO4I.js.map → chunk-DYGQ3BB5.js.map} +0 -0
- /package/dist/{chunk-GEPVEMCF.js.map → chunk-II3AF6LD.js.map} +0 -0
- /package/dist/{chunk-I3UFROCM.js.map → chunk-INXEXFQV.js.map} +0 -0
- /package/dist/{chunk-6VFTPA27.js.map → chunk-KOTSWCSD.js.map} +0 -0
- /package/dist/{chunk-V2QYP4Z7.js.map → chunk-KP3YMV7Y.js.map} +0 -0
- /package/dist/{chunk-47MAQT6H.js.map → chunk-KP5VIWLO.js.map} +0 -0
- /package/dist/{chunk-PK2OTDD5.js.map → chunk-LJ27CQI3.js.map} +0 -0
- /package/dist/{chunk-YO7D5VEC.js.map → chunk-LZUBCNTC.js.map} +0 -0
- /package/dist/{chunk-OK5Y6FH6.js.map → chunk-MNDFDO2W.js.map} +0 -0
- /package/dist/{chunk-4YKNHDJI.js.map → chunk-MYBIXWNM.js.map} +0 -0
- /package/dist/{chunk-6FQLA42K.js.map → chunk-NOX6MIA2.js.map} +0 -0
- /package/dist/{chunk-S3V5JP26.js.map → chunk-OWY3P43T.js.map} +0 -0
- /package/dist/{chunk-OR27NPLB.js.map → chunk-P63CYB3F.js.map} +0 -0
- /package/dist/{chunk-EQJEOG3S.js.map → chunk-PJWEGYOK.js.map} +0 -0
- /package/dist/{chunk-MA2LJGLZ.js.map → chunk-QAJW6FOO.js.map} +0 -0
- /package/dist/{chunk-CVH6TA6O.js.map → chunk-TD2SQ6TQ.js.map} +0 -0
- /package/dist/{chunk-Y6QK7CDW.js.map → chunk-WJ2LQ3NR.js.map} +0 -0
- /package/dist/{chunk-5G3D45TP.js.map → chunk-X4JLZWGW.js.map} +0 -0
- /package/dist/{chunk-TROXSFNC.js.map → chunk-X4XBY7VI.js.map} +0 -0
- /package/dist/{chunk-4PT4J6FV.js.map → chunk-X5YEUR65.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
executeEditFile
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4DLGPMUS.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-
|
|
89
|
+
//# sourceMappingURL=chunk-OWY3P43T.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
executeGitHubReadFile,
|
|
9
9
|
executeToolCall,
|
|
10
10
|
executeToolCallStreaming
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-X4JLZWGW.js";
|
|
12
12
|
|
|
13
13
|
// tools/warp_grep/vercel.ts
|
|
14
14
|
import { tool } from "ai";
|
|
@@ -115,4 +115,4 @@ export {
|
|
|
115
115
|
createGitHubReadFileTool,
|
|
116
116
|
vercel_default
|
|
117
117
|
};
|
|
118
|
-
//# sourceMappingURL=chunk-
|
|
118
|
+
//# sourceMappingURL=chunk-P63CYB3F.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MorphAPIClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-X4XBY7VI.js";
|
|
4
4
|
import {
|
|
5
5
|
APIResource
|
|
6
6
|
} from "./chunk-LKFZBBTD.js";
|
|
@@ -558,4 +558,4 @@ var MorphGit = class extends APIResource {
|
|
|
558
558
|
export {
|
|
559
559
|
MorphGit
|
|
560
560
|
};
|
|
561
|
-
//# sourceMappingURL=chunk-
|
|
561
|
+
//# sourceMappingURL=chunk-PJWEGYOK.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
executeEditFile
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-4DLGPMUS.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-
|
|
94
|
+
//# sourceMappingURL=chunk-QAJW6FOO.js.map
|
|
@@ -2,11 +2,12 @@ import {
|
|
|
2
2
|
shipSignal
|
|
3
3
|
} from "./chunk-PICGNBUE.js";
|
|
4
4
|
import {
|
|
5
|
-
createInteractionApi
|
|
6
|
-
|
|
5
|
+
createInteractionApi,
|
|
6
|
+
createNoopInteraction
|
|
7
|
+
} from "./chunk-IDMKQWQG.js";
|
|
7
8
|
import {
|
|
8
9
|
metadata
|
|
9
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-TLXVGE4R.js";
|
|
10
11
|
|
|
11
12
|
// tracing/core.ts
|
|
12
13
|
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
@@ -32,6 +33,7 @@ var MorphTracing = class {
|
|
|
32
33
|
appName: config.appName ?? process.env.npm_package_name ?? "morph-app",
|
|
33
34
|
disableBatching: config.disableBatching ?? !isProd,
|
|
34
35
|
traceContent: config.traceContent ?? true,
|
|
36
|
+
headers: config.headers,
|
|
35
37
|
debug
|
|
36
38
|
};
|
|
37
39
|
if (config.disabled) {
|
|
@@ -61,7 +63,7 @@ var MorphTracing = class {
|
|
|
61
63
|
}
|
|
62
64
|
const exporter = new OTLPTraceExporter({
|
|
63
65
|
url: `${baseUrl}/v1/traces`,
|
|
64
|
-
headers: { Authorization: `Bearer ${apiKey}`, ...
|
|
66
|
+
headers: { Authorization: `Bearer ${apiKey}`, ...this.cfg.headers }
|
|
65
67
|
});
|
|
66
68
|
traceloop.initialize({
|
|
67
69
|
baseUrl,
|
|
@@ -80,9 +82,18 @@ var MorphTracing = class {
|
|
|
80
82
|
`initialized \u2192 ${baseUrl}/v1/traces (batching ${this.cfg.disableBatching ? "off" : "on"})`
|
|
81
83
|
);
|
|
82
84
|
}
|
|
83
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* Begin a new traced interaction (a single user turn / agent run). On a
|
|
87
|
+
* disabled instance this returns an inert no-op interaction — callbacks still
|
|
88
|
+
* run, but no spans are created or shipped.
|
|
89
|
+
*/
|
|
84
90
|
begin(ctx) {
|
|
85
|
-
|
|
91
|
+
if (!this.enabled) return createNoopInteraction(ctx);
|
|
92
|
+
const interaction = createInteractionApi(
|
|
93
|
+
ctx,
|
|
94
|
+
this.cfg.traceContent,
|
|
95
|
+
(eventId) => this.active.delete(eventId)
|
|
96
|
+
);
|
|
86
97
|
this.active.set(interaction.getEventId(), interaction);
|
|
87
98
|
return interaction;
|
|
88
99
|
}
|
|
@@ -95,12 +106,11 @@ var MorphTracing = class {
|
|
|
95
106
|
* spans/token usage, not a user-facing interaction.
|
|
96
107
|
*/
|
|
97
108
|
tracer(globalProperties = {}) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
);
|
|
109
|
+
const ctx = { userId: globalProperties.userId ?? "batch", properties: globalProperties };
|
|
110
|
+
if (!this.enabled) return createNoopInteraction(ctx);
|
|
111
|
+
return createInteractionApi(ctx, this.cfg.traceContent);
|
|
102
112
|
}
|
|
103
|
-
/** Build Vercel AI SDK telemetry metadata (see
|
|
113
|
+
/** Build Vercel AI SDK telemetry metadata (see `@morphllm/morphsdk/tracing/otel`). */
|
|
104
114
|
metadata(opts) {
|
|
105
115
|
return metadata(opts);
|
|
106
116
|
}
|
|
@@ -112,10 +122,15 @@ var MorphTracing = class {
|
|
|
112
122
|
}
|
|
113
123
|
/** Span processor for `useExternalOtel: true` integrations. */
|
|
114
124
|
createSpanProcessor(options) {
|
|
125
|
+
const exporter = options?.exporter ?? new OTLPTraceExporter({
|
|
126
|
+
url: `${this.cfg.baseUrl}/v1/traces`,
|
|
127
|
+
headers: { Authorization: `Bearer ${this.cfg.apiKey}`, ...this.cfg.headers }
|
|
128
|
+
});
|
|
115
129
|
return traceloop.createSpanProcessor({
|
|
116
130
|
apiKey: this.cfg.apiKey,
|
|
117
131
|
baseUrl: this.cfg.baseUrl,
|
|
118
|
-
...options
|
|
132
|
+
...options,
|
|
133
|
+
exporter
|
|
119
134
|
});
|
|
120
135
|
}
|
|
121
136
|
/** Flush any batched spans immediately. Safe to call when idle. */
|
|
@@ -140,4 +155,4 @@ export {
|
|
|
140
155
|
MorphTracing,
|
|
141
156
|
morphTracing
|
|
142
157
|
};
|
|
143
|
-
//# sourceMappingURL=chunk-
|
|
158
|
+
//# sourceMappingURL=chunk-STJTJDAV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../tracing/core.ts"],"sourcesContent":["/**\n * Morph Tracing — core initialization.\n *\n * Thin Morph layer over OpenLLMetry / Traceloop. `morphTracing()` initializes\n * Traceloop with a JSON OTLP exporter pointed at Morph's ingest endpoint\n * (`${baseUrl}/v1/traces`, `Authorization: Bearer <apiKey>`) and returns a\n * `MorphTracing` handle for interactions, tools, and signals.\n *\n * We deliberately override Traceloop's default protobuf exporter with the\n * JSON-over-HTTP exporter so the ingest service can parse plain OTLP/JSON.\n */\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport * as traceloop from '@traceloop/node-server-sdk';\n\nimport {\n createInteractionApi,\n createNoopInteraction,\n type Interaction,\n type Tracer,\n} from './interaction.js';\nimport { metadata as buildMetadata } from './otel.js';\nimport { shipSignal } from './signals.js';\nimport type {\n MetadataOptions,\n MorphTracingConfig,\n SignalEvent,\n TraceContext,\n} from './types.js';\n\nconst DEFAULT_BASE_URL = 'https://api.morphllm.com';\n\nexport interface ResolvedConfig {\n apiKey: string;\n baseUrl: string;\n signalsEndpoint: string;\n appName: string;\n disableBatching: boolean;\n traceContent: boolean;\n headers?: Record<string, string>;\n debug: boolean;\n}\n\nfunction log(debug: boolean, ...args: unknown[]): void {\n if (debug) console.log('[morph-tracing]', ...args);\n}\n\n/**\n * Handle returned by {@link morphTracing}. Create interactions with `begin()`,\n * get a non-interactive `tracer()`, attach feedback with `trackSignal()`, and\n * flush/shutdown the exporter.\n */\nexport class MorphTracing {\n private readonly cfg: ResolvedConfig;\n private readonly active = new Map<string, Interaction>();\n readonly enabled: boolean;\n\n constructor(config: MorphTracingConfig = {}) {\n const debug = config.debug ?? process.env.MORPH_TRACING_DEBUG === '1';\n const apiKey = config.apiKey ?? process.env.MORPH_API_KEY ?? '';\n const baseUrlRaw =\n config.baseUrl ?? process.env.MORPH_TRACES_URL ?? DEFAULT_BASE_URL;\n const baseUrl = baseUrlRaw.replace(/\\/+$/, '');\n const isProd = process.env.NODE_ENV === 'production';\n\n this.cfg = {\n apiKey,\n baseUrl,\n signalsEndpoint: `${baseUrl}/v1/signals`,\n appName: config.appName ?? process.env.npm_package_name ?? 'morph-app',\n disableBatching: config.disableBatching ?? !isProd,\n traceContent: config.traceContent ?? true,\n headers: config.headers,\n debug,\n };\n\n if (config.disabled) {\n log(debug, 'disabled — no tracing initialized');\n this.enabled = false;\n return;\n }\n if (!apiKey) {\n console.warn(\n '[morph-tracing] No API key (set MORPH_API_KEY or pass { apiKey }). Tracing disabled.',\n );\n this.enabled = false;\n return;\n }\n\n this.enabled = true;\n if (config.useExternalOtel) {\n // Customer drives their own NodeSDK; just register config, no SDK start.\n traceloop.initialize({\n baseUrl,\n apiKey,\n appName: this.cfg.appName,\n tracingEnabled: false,\n traceContent: this.cfg.traceContent,\n silenceInitializationMessage: true,\n });\n log(debug, 'external OTEL mode — add createSpanProcessor() to your NodeSDK');\n return;\n }\n\n const exporter = new OTLPTraceExporter({\n url: `${baseUrl}/v1/traces`,\n headers: { Authorization: `Bearer ${apiKey}`, ...this.cfg.headers },\n });\n\n traceloop.initialize({\n baseUrl,\n apiKey,\n appName: this.cfg.appName,\n exporter,\n disableBatch: this.cfg.disableBatching,\n traceContent: this.cfg.traceContent,\n instrumentModules: config.instrumentModules as NonNullable<\n Parameters<typeof traceloop.initialize>[0]\n >['instrumentModules'],\n tracingEnabled: true,\n traceloopSyncEnabled: false,\n silenceInitializationMessage: !debug,\n });\n log(\n debug,\n `initialized → ${baseUrl}/v1/traces (batching ${this.cfg.disableBatching ? 'off' : 'on'})`,\n );\n }\n\n /**\n * Begin a new traced interaction (a single user turn / agent run). On a\n * disabled instance this returns an inert no-op interaction — callbacks still\n * run, but no spans are created or shipped.\n */\n begin(ctx: TraceContext & { userId: string; event?: string }): Interaction {\n if (!this.enabled) return createNoopInteraction(ctx);\n const interaction = createInteractionApi(ctx, this.cfg.traceContent, (eventId) =>\n this.active.delete(eventId),\n );\n this.active.set(interaction.getEventId()!, interaction);\n return interaction;\n }\n\n /** Look up an in-flight interaction by its eventId. */\n getActiveInteraction(eventId: string): Interaction | undefined {\n return this.active.get(eventId);\n }\n\n /**\n * Non-interactive tracer for batch jobs where you only care about\n * spans/token usage, not a user-facing interaction.\n */\n tracer(globalProperties: Record<string, string> = {}): Tracer {\n const ctx = { userId: globalProperties.userId ?? 'batch', properties: globalProperties };\n if (!this.enabled) return createNoopInteraction(ctx);\n return createInteractionApi(ctx, this.cfg.traceContent);\n }\n\n /** Build Vercel AI SDK telemetry metadata (see `@morphllm/morphsdk/tracing/otel`). */\n metadata(opts: MetadataOptions): Record<string, string> {\n return buildMetadata(opts);\n }\n\n /** Attach a feedback/quality signal to an interaction by eventId. */\n async trackSignal(signal: SignalEvent | SignalEvent[]): Promise<void> {\n if (!this.enabled) return;\n const signals = Array.isArray(signal) ? signal : [signal];\n await shipSignal(this.cfg.signalsEndpoint, this.cfg.apiKey, signals, this.cfg.debug);\n }\n\n /** Span processor for `useExternalOtel: true` integrations. */\n createSpanProcessor(\n options?: Parameters<typeof traceloop.createSpanProcessor>[0],\n ): ReturnType<typeof traceloop.createSpanProcessor> {\n // Traceloop's default exporter here is OTLP/protobuf, but Morph's ingest\n // parses OTLP/JSON only — supply the JSON exporter unless the caller\n // brings their own.\n const exporter =\n options?.exporter ??\n new OTLPTraceExporter({\n url: `${this.cfg.baseUrl}/v1/traces`,\n headers: { Authorization: `Bearer ${this.cfg.apiKey}`, ...this.cfg.headers },\n });\n return traceloop.createSpanProcessor({\n apiKey: this.cfg.apiKey,\n baseUrl: this.cfg.baseUrl,\n ...options,\n exporter,\n });\n }\n\n /** Flush any batched spans immediately. Safe to call when idle. */\n async forceFlush(): Promise<void> {\n if (!this.enabled) return;\n try {\n await traceloop.forceFlush();\n } catch (err) {\n log(this.cfg.debug, 'forceFlush error (ignored):', err);\n }\n }\n\n /** Flush and stop tracing. */\n async shutdown(): Promise<void> {\n await this.forceFlush();\n }\n}\n\n/** Initialize Morph Tracing and auto-instrument supported AI SDKs. */\nexport function morphTracing(config: MorphTracingConfig = {}): MorphTracing {\n return new MorphTracing(config);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MorphAPIClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-X4XBY7VI.js";
|
|
4
4
|
import {
|
|
5
5
|
MorphError
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-KP5VIWLO.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-
|
|
78
|
+
//# sourceMappingURL=chunk-TD2SQ6TQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../tracing/otel.ts"],"sourcesContent":["/**\n * Morph Tracing — Vercel AI SDK helper.\n *\n * The Vercel AI SDK emits its own OpenTelemetry spans when you pass\n * `experimental_telemetry`. There is nothing to monkey-patch; instead you tag\n * each call with `metadata()` so Morph can attribute the resulting spans to a\n * user/conversation/event.\n *\n * @example\n * ```ts\n * import { generateText } from \"ai\";\n * import { metadata } from \"@morphllm/morphsdk/tracing/otel\";\n *\n * const res = await generateText({\n * model: openai(\"gpt-4o\"),\n * prompt: \"Hello!\",\n * experimental_telemetry: {\n * isEnabled: true,\n * metadata: metadata({ userId: \"user-123\", convoId: \"convo-456\" }),\n * },\n * });\n * ```\n */\nimport type { MetadataOptions } from './types.js';\n\n/**\n * Reserved metadata keys Morph owns. Custom `properties` can't overwrite these,\n * so attribution (user_id / convo_id / event_id) stays intact.\n *\n * The AI SDK stores metadata as `ai.telemetry.metadata.<key>`; Traceloop's span\n * processor copies them to `traceloop.association.properties.<key>`, which is\n * what ClickHouse views read. Use snake_case names (user_id, convo_id, …).\n */\nconst RESERVED_KEYS = new Set(['user_id', 'convo_id', 'event_id', 'event_name']);\n\nfunction uuid(): string {\n // Node 18+ and modern runtimes expose globalThis.crypto.randomUUID.\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (c?.randomUUID) return c.randomUUID();\n // Fallback: RFC4122-ish without crypto.\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (ch) => {\n const r = (Math.random() * 16) | 0;\n const v = ch === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * Build the metadata object for the Vercel AI SDK's\n * `experimental_telemetry.metadata`. The values are propagated to every span the\n * AI SDK creates for that call. Generate a fresh `eventId` per call for grouping.\n */\nexport function metadata(opts: MetadataOptions): Record<string, string> {\n const result: Record<string, string> = {\n user_id: opts.userId,\n event_id: opts.eventId ?? uuid(),\n };\n if (opts.convoId) result.convo_id = opts.convoId;\n if (opts.eventName) result.event_name = opts.eventName;\n if (opts.properties) {\n for (const [key, value] of Object.entries(opts.properties)) {\n if (!RESERVED_KEYS.has(key)) result[key] = value;\n }\n }\n return result;\n}\n\nexport default { metadata };\n"],"mappings":";;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCA,IAAM,gBAAgB,oBAAI,IAAI,CAAC,WAAW,YAAY,YAAY,YAAY,CAAC;AAE/E,SAAS,OAAe;AAEtB,QAAM,IAAK,WAA0D;AACrE,MAAI,GAAG,WAAY,QAAO,EAAE,WAAW;AAEvC,SAAO,uCAAuC,QAAQ,SAAS,CAAC,OAAO;AACrE,UAAM,IAAK,KAAK,OAAO,IAAI,KAAM;AACjC,UAAM,IAAI,OAAO,MAAM,IAAK,IAAI,IAAO;AACvC,WAAO,EAAE,SAAS,EAAE;AAAA,EACtB,CAAC;AACH;AAOO,SAAS,SAAS,MAA+C;AACtE,QAAM,SAAiC;AAAA,IACrC,SAAS,KAAK;AAAA,IACd,UAAU,KAAK,WAAW,KAAK;AAAA,EACjC;AACA,MAAI,KAAK,QAAS,QAAO,WAAW,KAAK;AACzC,MAAI,KAAK,UAAW,QAAO,aAAa,KAAK;AAC7C,MAAI,KAAK,YAAY;AACnB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,UAAU,GAAG;AAC1D,UAAI,CAAC,cAAc,IAAI,GAAG,EAAG,QAAO,GAAG,IAAI;AAAA,IAC7C;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAO,eAAQ,EAAE,SAAS;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CompactClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TD2SQ6TQ.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-
|
|
53
|
+
//# sourceMappingURL=chunk-WJ2LQ3NR.js.map
|
|
@@ -10,13 +10,13 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
runWarpGrep,
|
|
12
12
|
runWarpGrepStreaming
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-KP3YMV7Y.js";
|
|
14
14
|
import {
|
|
15
15
|
compactFileContexts
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-WJ2LQ3NR.js";
|
|
17
17
|
import {
|
|
18
18
|
MorphAPIClient
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-X4XBY7VI.js";
|
|
20
20
|
import {
|
|
21
21
|
logger
|
|
22
22
|
} from "./chunk-F3NCFNUX.js";
|
|
@@ -321,4 +321,4 @@ export {
|
|
|
321
321
|
formatGitHubReadFileResult,
|
|
322
322
|
formatResult
|
|
323
323
|
};
|
|
324
|
-
//# sourceMappingURL=chunk-
|
|
324
|
+
//# sourceMappingURL=chunk-X4JLZWGW.js.map
|
|
@@ -3,15 +3,15 @@ import {
|
|
|
3
3
|
} from "./chunk-F3NCFNUX.js";
|
|
4
4
|
import {
|
|
5
5
|
toMorphError
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2VETLL6C.js";
|
|
7
7
|
import {
|
|
8
8
|
MorphError,
|
|
9
9
|
fetchWithRetry,
|
|
10
10
|
withTimeout
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-KP5VIWLO.js";
|
|
12
12
|
import {
|
|
13
13
|
SDK_VERSION
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-GG4ATN6M.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-
|
|
120
|
+
//# sourceMappingURL=chunk-X4XBY7VI.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-2HMEZZKK.js";
|
|
5
5
|
import {
|
|
6
6
|
executeBrowserTask
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-4NDS3GQB.js";
|
|
8
8
|
import {
|
|
9
9
|
__export
|
|
10
10
|
} from "./chunk-PZ5AY32C.js";
|
|
@@ -93,4 +93,4 @@ export {
|
|
|
93
93
|
createBrowserTool,
|
|
94
94
|
openai_exports
|
|
95
95
|
};
|
|
96
|
-
//# sourceMappingURL=chunk-
|
|
96
|
+
//# sourceMappingURL=chunk-X5YEUR65.js.map
|
|
@@ -8,7 +8,7 @@ import { APIResource } from './core/resource.js';
|
|
|
8
8
|
import { MorphGit } from './git/client.js';
|
|
9
9
|
import { CompactClient } from './tools/compact/core.js';
|
|
10
10
|
import { ReflexClient } from './tools/reflex/core.js';
|
|
11
|
-
import { OpenAIRouter, AnthropicRouter, GeminiRouter, RawRouter } from './modelrouter/core.js';
|
|
11
|
+
import { OpenAIRouter, AnthropicRouter, GeminiRouter, RawRouter, RouterClassifier } from './modelrouter/core.js';
|
|
12
12
|
import { EditFileConfig, EditFileInput, EditFileResult, EditChanges } from './tools/fastapply/types.js';
|
|
13
13
|
import { CodebaseSearchConfig, CodebaseSearchInput, CodebaseSearchResult } from './tools/codebase_search/types.js';
|
|
14
14
|
import { d as WarpGrepToolConfig, b as WarpGrepResult, g as GitHubSearchToolConfig, c as WarpGrepContext } from './types-CtkD4o1_.js';
|
|
@@ -989,6 +989,7 @@ declare class MorphClient extends MorphAPIClient {
|
|
|
989
989
|
anthropic: AnthropicRouter;
|
|
990
990
|
gemini: GeminiRouter;
|
|
991
991
|
raw: RawRouter;
|
|
992
|
+
classify: RouterClassifier;
|
|
992
993
|
};
|
|
993
994
|
/** OpenAI-compatible tool factories */
|
|
994
995
|
openai: OpenAIToolFactory;
|
package/dist/client.cjs
CHANGED
|
@@ -36,7 +36,7 @@ var init_package = __esm({
|
|
|
36
36
|
"package.json"() {
|
|
37
37
|
package_default = {
|
|
38
38
|
name: "@morphllm/morphsdk",
|
|
39
|
-
version: "0.2.
|
|
39
|
+
version: "0.2.181",
|
|
40
40
|
description: "TypeScript SDK and CLI for Morph Fast Apply integration",
|
|
41
41
|
type: "module",
|
|
42
42
|
main: "./dist/index.cjs",
|
|
@@ -5044,15 +5044,49 @@ var ReflexClient = class extends APIResource {
|
|
|
5044
5044
|
}
|
|
5045
5045
|
/** Classify text against a trained model. The model must be `succeeded`. */
|
|
5046
5046
|
async predict(input) {
|
|
5047
|
+
const completionId = input.completionId ?? crypto.randomUUID();
|
|
5047
5048
|
const raw = await this._client.post("/v1/reflex/predict", {
|
|
5048
|
-
body: { model: input.model, text: input.text }
|
|
5049
|
+
body: { model: input.model, text: input.text },
|
|
5050
|
+
headers: { "X-Completion-Id": completionId }
|
|
5049
5051
|
});
|
|
5052
|
+
return toPredictResult(raw, completionId);
|
|
5053
|
+
}
|
|
5054
|
+
/**
|
|
5055
|
+
* Record thumbs-up / thumbs-down feedback on a prediction. Reference the
|
|
5056
|
+
* prediction by the `completionId` from `predict()` or by a stored `resultId`.
|
|
5057
|
+
*/
|
|
5058
|
+
async flag(input) {
|
|
5059
|
+
if (!input.completionId && !input.resultId) {
|
|
5060
|
+
throw new MorphError("flag() requires completionId or resultId", "reflex_flag_missing_ref");
|
|
5061
|
+
}
|
|
5062
|
+
const body = { good_or_bad: input.verdict };
|
|
5063
|
+
if (input.completionId) body.completion_id = input.completionId;
|
|
5064
|
+
if (input.resultId) body.result_id = input.resultId;
|
|
5065
|
+
if (input.correctedLabel != null) body.corrected_label = input.correctedLabel;
|
|
5066
|
+
if (input.reason != null) body.reason = input.reason;
|
|
5067
|
+
if (input.score != null) body.score = input.score;
|
|
5068
|
+
const raw = await this._client.post("/v1/reflex/predictions/flag", { body });
|
|
5050
5069
|
return {
|
|
5051
|
-
|
|
5052
|
-
|
|
5053
|
-
|
|
5054
|
-
|
|
5055
|
-
|
|
5070
|
+
resultId: raw.result_id ?? null,
|
|
5071
|
+
completionId: raw.completion_id ?? null,
|
|
5072
|
+
verdict: raw.flagged_good_or_bad ?? null,
|
|
5073
|
+
correctedLabel: raw.flagged_corrected_label ?? null,
|
|
5074
|
+
flagged: Boolean(raw.flagged)
|
|
5075
|
+
};
|
|
5076
|
+
}
|
|
5077
|
+
/** List the caller's labeled examples (predictions that have been flagged). */
|
|
5078
|
+
async listLabels(input = {}) {
|
|
5079
|
+
const raw = await this._client.get("/v1/reflex/labels", {
|
|
5080
|
+
query: {
|
|
5081
|
+
model: input.model,
|
|
5082
|
+
verdict: input.verdict,
|
|
5083
|
+
limit: input.limit,
|
|
5084
|
+
after: input.after
|
|
5085
|
+
}
|
|
5086
|
+
});
|
|
5087
|
+
return {
|
|
5088
|
+
data: (raw.data ?? []).map(toReflexLabel),
|
|
5089
|
+
hasMore: Boolean(raw.has_more)
|
|
5056
5090
|
};
|
|
5057
5091
|
}
|
|
5058
5092
|
};
|
|
@@ -5152,6 +5186,41 @@ function toReflexJob(raw) {
|
|
|
5152
5186
|
suffix: raw.suffix ?? null
|
|
5153
5187
|
};
|
|
5154
5188
|
}
|
|
5189
|
+
function toPredictResult(raw, completionId) {
|
|
5190
|
+
const classes = (raw.classes ?? []).map((c) => ({
|
|
5191
|
+
classId: c.class_id,
|
|
5192
|
+
label: c.label,
|
|
5193
|
+
score: c.score,
|
|
5194
|
+
selected: c.selected
|
|
5195
|
+
}));
|
|
5196
|
+
const selectedClasses = classes.filter((c) => c.selected);
|
|
5197
|
+
const top = selectedClasses.reduce(
|
|
5198
|
+
(best, c) => best === null || c.score > best.score ? c : best,
|
|
5199
|
+
null
|
|
5200
|
+
);
|
|
5201
|
+
return {
|
|
5202
|
+
model: raw.model,
|
|
5203
|
+
mode: raw.mode === "multi_label" ? "multi_label" : "single_label",
|
|
5204
|
+
classes,
|
|
5205
|
+
selected: selectedClasses.map((c) => c.label),
|
|
5206
|
+
label: top ? top.label : null,
|
|
5207
|
+
confidence: top ? top.score : null,
|
|
5208
|
+
allScores: classes.map((c) => c.score),
|
|
5209
|
+
inferenceTimeMs: raw.inference_time_ms,
|
|
5210
|
+
completionId
|
|
5211
|
+
};
|
|
5212
|
+
}
|
|
5213
|
+
function toReflexLabel(raw) {
|
|
5214
|
+
return {
|
|
5215
|
+
resultId: raw.result_id,
|
|
5216
|
+
text: raw.text,
|
|
5217
|
+
model: raw.model,
|
|
5218
|
+
predictedLabel: raw.predicted_label ?? null,
|
|
5219
|
+
verdict: raw.verdict ?? null,
|
|
5220
|
+
correctedLabel: raw.corrected_label ?? null,
|
|
5221
|
+
createdAt: raw.created_at
|
|
5222
|
+
};
|
|
5223
|
+
}
|
|
5155
5224
|
function toReflexEvent(raw) {
|
|
5156
5225
|
return {
|
|
5157
5226
|
id: raw.id,
|
|
@@ -5288,6 +5357,40 @@ var RawRouter = class extends BaseRouter {
|
|
|
5288
5357
|
return { difficulty };
|
|
5289
5358
|
}
|
|
5290
5359
|
};
|
|
5360
|
+
var RouterClassifier = class extends APIResource {
|
|
5361
|
+
timeout;
|
|
5362
|
+
constructor(clientOrConfig = {}) {
|
|
5363
|
+
super(resolveClient3(clientOrConfig));
|
|
5364
|
+
const cfg = clientOrConfig instanceof MorphAPIClient ? {} : clientOrConfig;
|
|
5365
|
+
this.timeout = cfg.timeout ?? DEFAULT_TIMEOUT6;
|
|
5366
|
+
}
|
|
5367
|
+
/** Classify an input across the requested axes (all three by default). */
|
|
5368
|
+
async classify(input) {
|
|
5369
|
+
if (!this._client.resolveApiKey()) {
|
|
5370
|
+
throw new Error(
|
|
5371
|
+
"Morph API key is required. Set MORPH_API_KEY environment variable or pass apiKey in config."
|
|
5372
|
+
);
|
|
5373
|
+
}
|
|
5374
|
+
logger.debug("RouterClassifier", "request", { classes: input.classes ?? "all" });
|
|
5375
|
+
try {
|
|
5376
|
+
const res = await this._client.post("/v1/router/classify", {
|
|
5377
|
+
body: { input: input.input, ...input.classes ? { classes: input.classes } : {} },
|
|
5378
|
+
timeout: this.timeout
|
|
5379
|
+
});
|
|
5380
|
+
logger.debug("RouterClassifier", "classified", {
|
|
5381
|
+
difficulty: res.classifications.difficulty?.label,
|
|
5382
|
+
ambiguity: res.classifications.ambiguity?.label,
|
|
5383
|
+
domain: res.classifications.domain?.label
|
|
5384
|
+
});
|
|
5385
|
+
return res.classifications;
|
|
5386
|
+
} catch (error) {
|
|
5387
|
+
if (error instanceof MorphError) {
|
|
5388
|
+
throw new Error(`Router API error (${error.statusCode}): ${error.message}`);
|
|
5389
|
+
}
|
|
5390
|
+
throw error;
|
|
5391
|
+
}
|
|
5392
|
+
}
|
|
5393
|
+
};
|
|
5291
5394
|
|
|
5292
5395
|
// tools/warp_grep/prompts.ts
|
|
5293
5396
|
var WARP_GREP_TOOL_NAME = "codebase_search";
|
|
@@ -6731,7 +6834,8 @@ var MorphClient = class extends MorphAPIClient {
|
|
|
6731
6834
|
openai: new OpenAIRouter(this),
|
|
6732
6835
|
anthropic: new AnthropicRouter(this),
|
|
6733
6836
|
gemini: new GeminiRouter(this),
|
|
6734
|
-
raw: new RawRouter(this)
|
|
6837
|
+
raw: new RawRouter(this),
|
|
6838
|
+
classify: new RouterClassifier(this)
|
|
6735
6839
|
};
|
|
6736
6840
|
const compactClient = new CompactClient(this);
|
|
6737
6841
|
this.compact = compactClient.compact.bind(compactClient);
|