@mono-agent/web 0.20.14 → 0.21.0
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/README.md +388 -70
- package/dist/contracts.d.ts +364 -8
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +2 -0
- package/dist/contracts.js.map +1 -1
- package/dist/cron-reply-context.d.ts +27 -0
- package/dist/cron-reply-context.d.ts.map +1 -0
- package/dist/cron-reply-context.js +241 -0
- package/dist/cron-reply-context.js.map +1 -0
- package/dist/discovery.d.ts +1 -0
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +8 -6
- package/dist/discovery.js.map +1 -1
- package/dist/effort-ladder.d.ts +14 -0
- package/dist/effort-ladder.d.ts.map +1 -1
- package/dist/effort-ladder.js +41 -0
- package/dist/effort-ladder.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/long-lived-fetch.d.ts +5 -0
- package/dist/long-lived-fetch.d.ts.map +1 -0
- package/dist/long-lived-fetch.js +22 -0
- package/dist/long-lived-fetch.js.map +1 -0
- package/dist/monitor-reply.d.ts +10 -0
- package/dist/monitor-reply.d.ts.map +1 -0
- package/dist/monitor-reply.js +67 -0
- package/dist/monitor-reply.js.map +1 -0
- package/dist/notification-client.d.ts.map +1 -1
- package/dist/notification-client.js +5 -4
- package/dist/notification-client.js.map +1 -1
- package/dist/operator-client.d.ts +25 -1
- package/dist/operator-client.d.ts.map +1 -1
- package/dist/operator-client.js +167 -8
- package/dist/operator-client.js.map +1 -1
- package/dist/server.d.ts +42 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +627 -49
- package/dist/server.js.map +1 -1
- package/dist/service.d.ts +201 -8
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +1425 -136
- package/dist/service.js.map +1 -1
- package/dist/store-migrations.d.ts +23 -0
- package/dist/store-migrations.d.ts.map +1 -0
- package/dist/store-migrations.js +212 -0
- package/dist/store-migrations.js.map +1 -0
- package/dist/store.d.ts +294 -17
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +1637 -263
- package/dist/store.js.map +1 -1
- package/package.json +8 -5
- package/webapp/dist/assets/{assistant-ui-BzN2E6n6.js → assistant-ui-pZmGxIp2.js} +16 -16
- package/webapp/dist/assets/index-6uQ7TVQe.css +1 -0
- package/webapp/dist/assets/index-CsSMjSgW.js +156 -0
- package/webapp/dist/assets/{markdown-Vq23xgh7.js → markdown-Du5t10ja.js} +1 -1
- package/webapp/dist/badge-96.png +0 -0
- package/webapp/dist/index.html +26 -6
- package/webapp/dist/manifest.webmanifest +1 -1
- package/webapp/dist/notification-sw.js +3 -1
- package/webapp/dist/sw.js +1 -1
- package/webapp/dist/{workbox-9c191d2f.js → workbox-2fbc6a65.js} +1 -1
- package/webapp/dist/assets/index-C4a2Dv1W.js +0 -155
- package/webapp/dist/assets/index-mhMBLGB0.css +0 -1
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { classifyNotifySuppression } from "@mono-agent/agent-contracts";
|
|
2
|
+
/** Call only after the store verifies a host-owned Monitor delivery association. */
|
|
3
|
+
export function normalizeMonitorTerminalReply(parts, exactOnly = false) {
|
|
4
|
+
const explicit = parts.flatMap((part, index) => isAssistantMessageBoundary(part, "assistant_message_boundary") ? [index] : []);
|
|
5
|
+
// Current Pi emits usage and an explicit boundary for the same message.
|
|
6
|
+
// Usage is a compatibility fallback, never an additional message end.
|
|
7
|
+
const boundaries = explicit.length > 0 ? explicit
|
|
8
|
+
: parts.flatMap((part, index) => isAssistantMessageBoundary(part, "context_usage") ? [index] : []);
|
|
9
|
+
const lastBoundary = boundaries.at(-1) ?? -1;
|
|
10
|
+
const hasTrailingContent = parts.slice(lastBoundary + 1).some((part) => part.type === "text" || part.type === "reasoning");
|
|
11
|
+
const end = lastBoundary >= 0 && !hasTrailingContent ? lastBoundary : parts.length;
|
|
12
|
+
let start = end === lastBoundary ? (boundaries.at(-2) ?? -1) + 1 : lastBoundary + 1;
|
|
13
|
+
// Older providers without explicit boundaries still separate tool messages.
|
|
14
|
+
for (let index = start; index < end; index += 1) {
|
|
15
|
+
if (parts[index]?.type === "tool-call" || parts[index]?.type === "subagent")
|
|
16
|
+
start = index + 1;
|
|
17
|
+
}
|
|
18
|
+
const textParts = parts.slice(start, end).filter((part) => part.type === "text");
|
|
19
|
+
// Without a provider boundary, separate prose parts may be separate assistant
|
|
20
|
+
// messages. Do not concatenate a prior answer into a narrated no-op reply.
|
|
21
|
+
if ((boundaries.length === 0 || start === 0) && textParts.length > 1)
|
|
22
|
+
return { parts: [...parts], changed: false };
|
|
23
|
+
const text = textParts.map((part) => part.text).join("");
|
|
24
|
+
const suppression = classifyNotifySuppression(text);
|
|
25
|
+
if (exactOnly && (suppression !== "sentinel"
|
|
26
|
+
|| parts.some((part) => part.type === "attachment" || part.type === "mcp_app" || part.type === "failure"))) {
|
|
27
|
+
return { parts: [...parts], changed: false };
|
|
28
|
+
}
|
|
29
|
+
if (suppression !== "sentinel" && suppression !== "narrated-sentinel") {
|
|
30
|
+
return { parts: [...parts], changed: false };
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
parts: parts.filter((part, index) => part.type !== "text" || index < start || index >= end),
|
|
34
|
+
changed: true,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function hasMonitorReplyContent(parts) {
|
|
38
|
+
return parts.some((part) => part.type === "text" ? part.text.trim().length > 0
|
|
39
|
+
: part.type === "attachment" || part.type === "mcp_app" || part.type === "failure");
|
|
40
|
+
}
|
|
41
|
+
/** Match the settled console's answer selection, excluding earlier commentary. */
|
|
42
|
+
export function monitorReplyText(parts) {
|
|
43
|
+
for (let index = parts.length - 1; index >= 0; index -= 1) {
|
|
44
|
+
const part = parts[index];
|
|
45
|
+
if (part?.type === "text")
|
|
46
|
+
return part.text;
|
|
47
|
+
}
|
|
48
|
+
return "";
|
|
49
|
+
}
|
|
50
|
+
/** Same bounded legacy telemetry unwrapping contract as the console runtime. */
|
|
51
|
+
function isAssistantMessageBoundary(part, kind) {
|
|
52
|
+
if (part.type !== "telemetry")
|
|
53
|
+
return false;
|
|
54
|
+
let current = part.data;
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
for (let depth = 0; depth < 8; depth += 1) {
|
|
57
|
+
if (current === null || typeof current !== "object" || Array.isArray(current) || seen.has(current))
|
|
58
|
+
return false;
|
|
59
|
+
seen.add(current);
|
|
60
|
+
const record = current;
|
|
61
|
+
if (record.kind === kind)
|
|
62
|
+
return true;
|
|
63
|
+
current = record.data;
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=monitor-reply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-reply.js","sourceRoot":"","sources":["../src/monitor-reply.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-client.d.ts","sourceRoot":"","sources":["../src/notification-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAE3G,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"notification-client.d.ts","sourceRoot":"","sources":["../src/notification-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAE3G,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAC;AAGvE,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQlF,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,gCAAgC,CAAC;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC5C;AAED,iFAAiF;AACjF,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,2BAA2B,GACnC,iCAAiC,GACjC,qCAAqC,GACrC,kCAAkC,CAAC;AAEvC,MAAM,WAAW,6BAA8B,SAAQ,mBAAmB;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;QAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;KAC9B,CAAC;CACH;AAWD,+FAA+F;AAC/F,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B,EAClC,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,4BAA4B,CAAC,CAiEvC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { constants as fsConstants } from "node:fs";
|
|
2
2
|
import { lstat, open } from "node:fs/promises";
|
|
3
3
|
import { errorMessage, WebConsoleError } from "./errors.js";
|
|
4
|
+
import { fetchLongLivedHostWake } from "./long-lived-fetch.js";
|
|
4
5
|
import { resolveWebStatePaths } from "./state-paths.js";
|
|
5
6
|
const NOTIFICATION_INGRESS_SCHEMA = 1;
|
|
6
7
|
const NOTIFICATION_INGRESS_PATH = "/internal/v1/notifications";
|
|
@@ -11,16 +12,16 @@ const DEFAULT_TIMEOUT_MS = 5_000;
|
|
|
11
12
|
export async function deliverWebNotification(input, options = {}) {
|
|
12
13
|
const path = resolveWebStatePaths(options).notificationIngress;
|
|
13
14
|
const ingress = await readIngressRecord(path);
|
|
14
|
-
const
|
|
15
|
+
const carriesWakeTurn = input.triggerKind === "monitor"
|
|
16
|
+
|| (input.triggerKind === "job" && input.wakePrompt !== undefined);
|
|
17
|
+
const fetchImpl = options.fetchImpl ?? (carriesWakeTurn ? fetchLongLivedHostWake : fetch);
|
|
15
18
|
let response;
|
|
16
19
|
try {
|
|
17
20
|
response = await fetchImpl(ingress.url, {
|
|
18
21
|
method: "POST",
|
|
19
22
|
redirect: "error",
|
|
20
23
|
signal: AbortSignal.timeout(options.timeoutMs
|
|
21
|
-
?? (
|
|
22
|
-
? 10 * 60 * 1_000
|
|
23
|
-
: DEFAULT_TIMEOUT_MS)),
|
|
24
|
+
?? (carriesWakeTurn ? 10 * 60 * 1_000 : DEFAULT_TIMEOUT_MS)),
|
|
24
25
|
headers: {
|
|
25
26
|
authorization: `Bearer ${ingress.token}`,
|
|
26
27
|
"content-type": "application/json",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-client.js","sourceRoot":"","sources":["../src/notification-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAK/C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAA4B,MAAM,kBAAkB,CAAC;AAElF,MAAM,2BAA2B,GAAG,CAAC,CAAC;AACtC,MAAM,yBAAyB,GAAG,4BAA4B,CAAC;AAC/D,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAgEjC,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAkC,EAClC,UAAyC,EAAE;IAE3C,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"notification-client.js","sourceRoot":"","sources":["../src/notification-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MCP_APP_SUPPORTED_VERSIONS, type AgentLiveInputSettlement, type AgentLiveInputUnavailableReason, type AgentAttachment, type AgentMcpAppHostRequest, type AgentMcpAppResource, type AgentReplyAttachmentPart, type AgentReplyPart, type AgentStreamWireFrame, type AgentToolEnvironment, type ChannelAskAnswer, type ChannelAskSnapshot, type ChannelAskSubmissionResult, type ProcessJobProjection } from "@mono-agent/agent-contracts";
|
|
1
|
+
import { AGENT_CONTEXT_IMPORT_VERSION, MCP_APP_SUPPORTED_VERSIONS, type AgentLiveInputSettlement, type AgentLiveInputUnavailableReason, type AgentAttachment, type AgentMcpAppHostRequest, type AgentMcpAppResource, type AgentReplyAttachmentPart, type AgentReplyPart, type AgentStreamWireFrame, type AgentToolEnvironment, type ChannelAskAnswer, type ChannelAskSnapshot, type ChannelAskSubmissionResult, type ProcessJobProjection, type ProviderAuthSessionInput, type ProviderAuthSessionSnapshot, type ProviderAuthSessionStartInput, type ProviderAuthStatusSnapshot, type ProviderAuthCheckSessionSnapshot, type ProviderAuthCheckStartInput } from "@mono-agent/agent-contracts";
|
|
2
2
|
import type { WebChannelConfigView, WebCronJob, WebCronMutationResult, WebCronOverview, WebCronRunDetail, WebCronRunPage, WebCronRunSummary, WebAgentProvider, WebModelOption, WebModelPage, WebSkillRegistry } from "./contracts.js";
|
|
3
3
|
type OperatorSkillRegistry = Extract<WebSkillRegistry, {
|
|
4
4
|
readonly status: "ready";
|
|
@@ -11,6 +11,8 @@ export interface OperatorConnection {
|
|
|
11
11
|
readonly apiKey?: string;
|
|
12
12
|
/** Independent owner-only bearer for process-job routes. */
|
|
13
13
|
readonly processJobsBearer?: string;
|
|
14
|
+
/** Independent owner-only bearer for Monitor wake callbacks. */
|
|
15
|
+
readonly monitorsBearer?: string;
|
|
14
16
|
}
|
|
15
17
|
export interface OperatorInfo {
|
|
16
18
|
readonly schema: number;
|
|
@@ -25,9 +27,14 @@ export interface OperatorInfo {
|
|
|
25
27
|
readonly skills?: OperatorSkillRegistry;
|
|
26
28
|
readonly supportsAttachments: boolean;
|
|
27
29
|
readonly supportsHistoryAppend: boolean;
|
|
30
|
+
readonly contextImport?: {
|
|
31
|
+
readonly version: typeof AGENT_CONTEXT_IMPORT_VERSION;
|
|
32
|
+
readonly maxTextBytes: number;
|
|
33
|
+
};
|
|
28
34
|
readonly supportsAskUser: boolean;
|
|
29
35
|
readonly supportsAskById?: boolean;
|
|
30
36
|
readonly supportsLiveInput: boolean;
|
|
37
|
+
readonly supportsLiveInputTargeting?: true;
|
|
31
38
|
readonly supportsToolEnvironment?: boolean;
|
|
32
39
|
readonly replyAttachments?: {
|
|
33
40
|
readonly version: 1;
|
|
@@ -43,6 +50,8 @@ export interface OperatorInfo {
|
|
|
43
50
|
readonly actions: boolean;
|
|
44
51
|
};
|
|
45
52
|
readonly supportsJobs?: boolean;
|
|
53
|
+
readonly supportsProviderAuth?: true;
|
|
54
|
+
readonly supportsProviderAuthChecks?: true;
|
|
46
55
|
}
|
|
47
56
|
export type OperatorLiveInputResult = AgentLiveInputSettlement | {
|
|
48
57
|
readonly status: "unavailable";
|
|
@@ -54,6 +63,8 @@ export interface OperatorLiveInputInput {
|
|
|
54
63
|
readonly text: string;
|
|
55
64
|
readonly receivedAt: string;
|
|
56
65
|
readonly deliveryKey?: string;
|
|
66
|
+
readonly targetTurnId?: string;
|
|
67
|
+
readonly targetRunId?: string;
|
|
57
68
|
readonly signal?: AbortSignal;
|
|
58
69
|
}
|
|
59
70
|
export interface OperatorTurnInput {
|
|
@@ -66,6 +77,7 @@ export interface OperatorTurnInput {
|
|
|
66
77
|
readonly toolEnvironment?: AgentToolEnvironment;
|
|
67
78
|
readonly signal: AbortSignal;
|
|
68
79
|
readonly onFrame: (frame: AgentStreamWireFrame) => void | Promise<void>;
|
|
80
|
+
readonly onAdmitted?: () => void;
|
|
69
81
|
}
|
|
70
82
|
export interface OperatorTurnResult {
|
|
71
83
|
readonly finalText?: string;
|
|
@@ -79,13 +91,24 @@ export declare class OperatorClient {
|
|
|
79
91
|
private readonly baseUrl;
|
|
80
92
|
private readonly apiKey;
|
|
81
93
|
private readonly processJobsBearer;
|
|
94
|
+
private readonly monitorsBearer;
|
|
82
95
|
private readonly fetchImpl;
|
|
96
|
+
private readonly turnFetchImpl;
|
|
83
97
|
constructor(options: OperatorClientOptions);
|
|
84
98
|
info(signal?: AbortSignal): Promise<OperatorInfo>;
|
|
99
|
+
providerAuthStatus(signal?: AbortSignal): Promise<ProviderAuthStatusSnapshot>;
|
|
100
|
+
startProviderAuth(input: ProviderAuthSessionStartInput, signal?: AbortSignal): Promise<ProviderAuthSessionSnapshot>;
|
|
101
|
+
providerAuthSession(sessionId: string, signal?: AbortSignal): Promise<ProviderAuthSessionSnapshot>;
|
|
102
|
+
submitProviderAuth(sessionId: string, input: ProviderAuthSessionInput, signal?: AbortSignal): Promise<ProviderAuthSessionSnapshot>;
|
|
103
|
+
cancelProviderAuth(sessionId: string, signal?: AbortSignal): Promise<void>;
|
|
104
|
+
startProviderAuthCheck(input: ProviderAuthCheckStartInput, signal?: AbortSignal): Promise<ProviderAuthCheckSessionSnapshot>;
|
|
105
|
+
providerAuthCheck(checkId: string, signal?: AbortSignal): Promise<ProviderAuthCheckSessionSnapshot>;
|
|
106
|
+
cancelProviderAuthCheck(checkId: string, signal?: AbortSignal): Promise<void>;
|
|
85
107
|
turn(input: OperatorTurnInput): Promise<OperatorTurnResult>;
|
|
86
108
|
cancel(conversationId: string): Promise<void>;
|
|
87
109
|
liveInput(input: OperatorLiveInputInput): Promise<OperatorLiveInputResult>;
|
|
88
110
|
recordVerbatim(conversationId: string, text: string, idempotencyKey: string): Promise<void>;
|
|
111
|
+
recordContextImport(conversationId: string, text: string, idempotencyKey: string): Promise<"appended" | "duplicate">;
|
|
89
112
|
getJob(jobId: string, signal?: AbortSignal): Promise<ProcessJobProjection>;
|
|
90
113
|
cancelJob(jobId: string, signal?: AbortSignal): Promise<ProcessJobProjection>;
|
|
91
114
|
pendingAsk(conversationId: string, signal?: AbortSignal): Promise<ChannelAskSnapshot | undefined>;
|
|
@@ -125,6 +148,7 @@ export declare class OperatorClient {
|
|
|
125
148
|
mcpAppRequest(conversationId: string, request: Omit<AgentMcpAppHostRequest, "conversationId">, signal?: AbortSignal): Promise<unknown>;
|
|
126
149
|
private headers;
|
|
127
150
|
private cronMutation;
|
|
151
|
+
private monitorWakeHeaders;
|
|
128
152
|
private processJobHeaders;
|
|
129
153
|
private request;
|
|
130
154
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator-client.d.ts","sourceRoot":"","sources":["../src/operator-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,0BAA0B,
|
|
1
|
+
{"version":3,"file":"operator-client.d.ts","sourceRoot":"","sources":["../src/operator-client.ts"],"names":[],"mappings":"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"}
|
package/dist/operator-client.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { CronOperatorWireError, MCP_APP_SUPPORTED_VERSIONS, parseCronOperatorJob, parseCronOperatorOverview, parseCronOperatorRunDetail, parseCronOperatorRunPage, parseCronOperatorRunSummary, parseProcessJobProjection, parseAgentStreamFrame, MAX_INFO_BODY_BYTES, MAX_INFO_PROVIDER_ID_BYTES, MAX_INFO_PROVIDER_ITEMS, MAX_INFO_PROVIDER_LABEL_BYTES, } from "@mono-agent/agent-contracts";
|
|
1
|
+
import { AGENT_CONTEXT_IMPORT_MAX_TEXT_BYTES, AGENT_CONTEXT_IMPORT_VERSION, CronOperatorWireError, MCP_APP_SUPPORTED_VERSIONS, parseCronOperatorJob, parseCronOperatorOverview, parseCronOperatorRunDetail, parseCronOperatorRunPage, parseCronOperatorRunSummary, parseProcessJobProjection, parseProviderAuthSessionSnapshot, parseProviderAuthStatusSnapshot, parseProviderAuthCheckSessionSnapshot, parseAgentStreamFrame, MAX_INFO_BODY_BYTES, MAX_INFO_PROVIDER_ID_BYTES, MAX_INFO_PROVIDER_ITEMS, MAX_INFO_PROVIDER_LABEL_BYTES, } from "@mono-agent/agent-contracts";
|
|
2
2
|
import { errorMessage, WebConsoleError } from "./errors.js";
|
|
3
3
|
import { isTrustedOperatorBaseUrl } from "./discovery.js";
|
|
4
|
+
import { fetchLongLivedTurn } from "./long-lived-fetch.js";
|
|
4
5
|
const OPERATOR_WIRE_SCHEMA = 1;
|
|
5
6
|
const MAX_PROCESS_JOBS_BODY_BYTES = 16 * 1024 * 1024;
|
|
6
7
|
const MAX_ERROR_BODY_BYTES = 64 * 1024;
|
|
@@ -13,8 +14,23 @@ const PRESERVED_MCP_APP_OPERATOR_ERRORS = new Map([
|
|
|
13
14
|
["app_audit_incomplete", 409],
|
|
14
15
|
["app_audit_failed", 507],
|
|
15
16
|
]);
|
|
17
|
+
const PRESERVED_PROVIDER_AUTH_ERRORS = new Map([
|
|
18
|
+
["provider_auth_invalid_request", 400],
|
|
19
|
+
["provider_auth_not_found", 404],
|
|
20
|
+
["provider_auth_conflict", 409],
|
|
21
|
+
["provider_auth_too_large", 413],
|
|
22
|
+
["provider_auth_rate_limited", 429],
|
|
23
|
+
["provider_auth_upstream", 502],
|
|
24
|
+
["provider_auth_unavailable", 503],
|
|
25
|
+
]);
|
|
16
26
|
const CANCEL_TIMEOUT_MS = 2_000;
|
|
17
27
|
const HISTORY_APPEND_TIMEOUT_MS = 5_000;
|
|
28
|
+
const CONTEXT_IMPORT_TIMEOUT_MS = 5_000;
|
|
29
|
+
const PRESERVED_CONTEXT_IMPORT_ERRORS = new Map([
|
|
30
|
+
["context_import_conflict", 409],
|
|
31
|
+
["context_import_failed", 500],
|
|
32
|
+
["context_import_unsupported", 501],
|
|
33
|
+
]);
|
|
18
34
|
// The provider summary rides `/v1/info`, which shares one 1 MiB body cap with
|
|
19
35
|
// every other field and is polled every 5s, so this parse stays bounded: an
|
|
20
36
|
// oversized summary must cost the summary, never the whole response (which
|
|
@@ -35,7 +51,9 @@ export class OperatorClient {
|
|
|
35
51
|
baseUrl;
|
|
36
52
|
apiKey;
|
|
37
53
|
processJobsBearer;
|
|
54
|
+
monitorsBearer;
|
|
38
55
|
fetchImpl;
|
|
56
|
+
turnFetchImpl;
|
|
39
57
|
constructor(options) {
|
|
40
58
|
if (!isTrustedOperatorBaseUrl(options.baseUrl)) {
|
|
41
59
|
throw new WebConsoleError("untrusted_operator_url", "Refusing to connect to a non-loopback operator endpoint.", 400);
|
|
@@ -43,7 +61,9 @@ export class OperatorClient {
|
|
|
43
61
|
this.baseUrl = options.baseUrl.replace(/\/+$/u, "");
|
|
44
62
|
this.apiKey = options.apiKey;
|
|
45
63
|
this.processJobsBearer = options.processJobsBearer;
|
|
64
|
+
this.monitorsBearer = options.monitorsBearer;
|
|
46
65
|
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
66
|
+
this.turnFetchImpl = options.fetchImpl ?? fetchLongLivedTurn;
|
|
47
67
|
}
|
|
48
68
|
async info(signal) {
|
|
49
69
|
const response = await this.request(`${this.baseUrl}/v1/info`, {
|
|
@@ -74,6 +94,7 @@ export class OperatorClient {
|
|
|
74
94
|
const cron = record(capabilities?.cron);
|
|
75
95
|
const replyAttachments = parseReplyAttachmentsCapability(capabilities?.replyAttachments);
|
|
76
96
|
const mcpApps = parseMcpAppsCapability(capabilities?.mcpApps);
|
|
97
|
+
const contextImport = parseContextImportCapability(capabilities?.contextImport);
|
|
77
98
|
return {
|
|
78
99
|
schema: body.schema,
|
|
79
100
|
...(typeof body.label === "string" ? { label: body.label } : {}),
|
|
@@ -85,20 +106,90 @@ export class OperatorClient {
|
|
|
85
106
|
...(skills === undefined ? {} : { skills }),
|
|
86
107
|
supportsAttachments: capabilities?.attachments === true,
|
|
87
108
|
supportsHistoryAppend: capabilities?.historyAppend === true,
|
|
109
|
+
...(contextImport === undefined ? {} : { contextImport }),
|
|
88
110
|
supportsAskUser: capabilities?.askUser === true,
|
|
89
111
|
...(capabilities?.askById === true ? { supportsAskById: true } : {}),
|
|
90
112
|
supportsLiveInput: capabilities?.liveInput === true,
|
|
113
|
+
...(record(capabilities?.liveInputTargeting)?.version === 1 ? { supportsLiveInputTargeting: true } : {}),
|
|
91
114
|
...(capabilities?.toolEnvironment === true ? { supportsToolEnvironment: true } : {}),
|
|
92
115
|
...(replyAttachments === undefined ? {} : { replyAttachments }),
|
|
93
116
|
...(mcpApps === undefined ? {} : { mcpApps }),
|
|
94
117
|
...(cron?.read === true ? { cron: { read: true, actions: cron.actions === true } } : {}),
|
|
95
118
|
...(capabilities?.jobs === true ? { supportsJobs: true } : {}),
|
|
119
|
+
...(record(capabilities?.providerAuth)?.version === 1 ? { supportsProviderAuth: true } : {}),
|
|
120
|
+
...(record(record(capabilities?.providerAuth)?.checks)?.version === 1
|
|
121
|
+
? { supportsProviderAuthChecks: true }
|
|
122
|
+
: {}),
|
|
96
123
|
};
|
|
97
124
|
}
|
|
125
|
+
async providerAuthStatus(signal) {
|
|
126
|
+
const response = await this.request(`${this.baseUrl}/v1/provider-auth`, {
|
|
127
|
+
headers: this.headers(false),
|
|
128
|
+
...(signal === undefined ? {} : { signal }),
|
|
129
|
+
}, PRESERVED_PROVIDER_AUTH_ERRORS);
|
|
130
|
+
return parseProviderAuthStatusSnapshot(JSON.parse(await readBoundedBody(response, MAX_INFO_BODY_BYTES, "operator_provider_auth_too_large")));
|
|
131
|
+
}
|
|
132
|
+
async startProviderAuth(input, signal) {
|
|
133
|
+
const response = await this.request(`${this.baseUrl}/v1/provider-auth/sessions`, {
|
|
134
|
+
method: "POST",
|
|
135
|
+
headers: this.headers(true),
|
|
136
|
+
...(signal === undefined ? {} : { signal }),
|
|
137
|
+
body: JSON.stringify(input),
|
|
138
|
+
}, PRESERVED_PROVIDER_AUTH_ERRORS);
|
|
139
|
+
return parseProviderAuthSessionSnapshot(JSON.parse(await readBoundedBody(response, MAX_INFO_BODY_BYTES, "operator_provider_auth_too_large")));
|
|
140
|
+
}
|
|
141
|
+
async providerAuthSession(sessionId, signal) {
|
|
142
|
+
const response = await this.request(`${this.baseUrl}/v1/provider-auth/sessions/${encodeURIComponent(sessionId)}`, {
|
|
143
|
+
headers: this.headers(false),
|
|
144
|
+
...(signal === undefined ? {} : { signal }),
|
|
145
|
+
}, PRESERVED_PROVIDER_AUTH_ERRORS);
|
|
146
|
+
return parseProviderAuthSessionSnapshot(JSON.parse(await readBoundedBody(response, MAX_INFO_BODY_BYTES, "operator_provider_auth_too_large")));
|
|
147
|
+
}
|
|
148
|
+
async submitProviderAuth(sessionId, input, signal) {
|
|
149
|
+
const response = await this.request(`${this.baseUrl}/v1/provider-auth/sessions/${encodeURIComponent(sessionId)}/input`, {
|
|
150
|
+
method: "POST",
|
|
151
|
+
headers: this.headers(true),
|
|
152
|
+
...(signal === undefined ? {} : { signal }),
|
|
153
|
+
body: JSON.stringify(input),
|
|
154
|
+
}, PRESERVED_PROVIDER_AUTH_ERRORS);
|
|
155
|
+
return parseProviderAuthSessionSnapshot(JSON.parse(await readBoundedBody(response, MAX_INFO_BODY_BYTES, "operator_provider_auth_too_large")));
|
|
156
|
+
}
|
|
157
|
+
async cancelProviderAuth(sessionId, signal) {
|
|
158
|
+
const response = await this.request(`${this.baseUrl}/v1/provider-auth/sessions/${encodeURIComponent(sessionId)}`, {
|
|
159
|
+
method: "DELETE",
|
|
160
|
+
headers: this.headers(false),
|
|
161
|
+
...(signal === undefined ? {} : { signal }),
|
|
162
|
+
}, PRESERVED_PROVIDER_AUTH_ERRORS);
|
|
163
|
+
await response.body?.cancel().catch(() => undefined);
|
|
164
|
+
}
|
|
165
|
+
async startProviderAuthCheck(input, signal) {
|
|
166
|
+
const response = await this.request(`${this.baseUrl}/v1/provider-auth/checks`, {
|
|
167
|
+
method: "POST",
|
|
168
|
+
headers: this.headers(true),
|
|
169
|
+
...(signal === undefined ? {} : { signal }),
|
|
170
|
+
body: JSON.stringify(input),
|
|
171
|
+
}, PRESERVED_PROVIDER_AUTH_ERRORS);
|
|
172
|
+
return parseProviderAuthCheckSessionSnapshot(JSON.parse(await readBoundedBody(response, MAX_INFO_BODY_BYTES, "operator_provider_auth_too_large")));
|
|
173
|
+
}
|
|
174
|
+
async providerAuthCheck(checkId, signal) {
|
|
175
|
+
const response = await this.request(`${this.baseUrl}/v1/provider-auth/checks/${encodeURIComponent(checkId)}`, {
|
|
176
|
+
headers: this.headers(false),
|
|
177
|
+
...(signal === undefined ? {} : { signal }),
|
|
178
|
+
}, PRESERVED_PROVIDER_AUTH_ERRORS);
|
|
179
|
+
return parseProviderAuthCheckSessionSnapshot(JSON.parse(await readBoundedBody(response, MAX_INFO_BODY_BYTES, "operator_provider_auth_too_large")));
|
|
180
|
+
}
|
|
181
|
+
async cancelProviderAuthCheck(checkId, signal) {
|
|
182
|
+
const response = await this.request(`${this.baseUrl}/v1/provider-auth/checks/${encodeURIComponent(checkId)}`, {
|
|
183
|
+
method: "DELETE",
|
|
184
|
+
headers: this.headers(false),
|
|
185
|
+
...(signal === undefined ? {} : { signal }),
|
|
186
|
+
}, PRESERVED_PROVIDER_AUTH_ERRORS);
|
|
187
|
+
await response.body?.cancel().catch(() => undefined);
|
|
188
|
+
}
|
|
98
189
|
async turn(input) {
|
|
99
190
|
const response = await this.request(`${this.baseUrl}/v1/turns`, {
|
|
100
191
|
method: "POST",
|
|
101
|
-
headers: this.headers(true),
|
|
192
|
+
headers: { ...this.headers(true), ...this.monitorWakeHeaders(input.processJobWakeDeliveryKey) },
|
|
102
193
|
signal: input.signal,
|
|
103
194
|
body: JSON.stringify({
|
|
104
195
|
conversationId: input.conversationId,
|
|
@@ -111,7 +202,7 @@ export class OperatorClient {
|
|
|
111
202
|
...(input.toolEnvironment === undefined ? {} : { toolEnvironment: input.toolEnvironment }),
|
|
112
203
|
...(input.attachments.length === 0 ? {} : { attachments: input.attachments }),
|
|
113
204
|
}),
|
|
114
|
-
});
|
|
205
|
+
}, undefined, this.turnFetchImpl);
|
|
115
206
|
if (!response.headers.get("content-type")?.toLowerCase().includes("application/x-ndjson")) {
|
|
116
207
|
await response.body?.cancel().catch(() => undefined);
|
|
117
208
|
throw new WebConsoleError("invalid_operator_content_type", "The agent turn endpoint did not return NDJSON.", 502);
|
|
@@ -119,6 +210,7 @@ export class OperatorClient {
|
|
|
119
210
|
if (response.body === null) {
|
|
120
211
|
throw new WebConsoleError("empty_operator_stream", "The agent returned an empty response stream.", 502);
|
|
121
212
|
}
|
|
213
|
+
input.onAdmitted?.();
|
|
122
214
|
try {
|
|
123
215
|
for await (const line of readBoundedNdjsonLines(response.body, MAX_NDJSON_FRAME_BYTES)) {
|
|
124
216
|
if (line.trim().length === 0)
|
|
@@ -156,12 +248,14 @@ export class OperatorClient {
|
|
|
156
248
|
async liveInput(input) {
|
|
157
249
|
const response = await this.request(`${this.baseUrl}/v1/conversations/${encodeURIComponent(input.conversationId)}/live-input`, {
|
|
158
250
|
method: "POST",
|
|
159
|
-
headers: this.headers(true),
|
|
251
|
+
headers: { ...this.headers(true), ...this.monitorWakeHeaders(input.deliveryKey) },
|
|
160
252
|
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
161
253
|
body: JSON.stringify({
|
|
162
254
|
id: input.id,
|
|
163
255
|
text: input.text,
|
|
164
256
|
receivedAt: input.receivedAt,
|
|
257
|
+
...(input.targetTurnId === undefined ? {} : { targetTurnId: input.targetTurnId }),
|
|
258
|
+
...(input.targetRunId === undefined ? {} : { targetRunId: input.targetRunId }),
|
|
165
259
|
...(input.deliveryKey === undefined ? {} : { deliveryKey: input.deliveryKey }),
|
|
166
260
|
}),
|
|
167
261
|
});
|
|
@@ -175,6 +269,9 @@ export class OperatorClient {
|
|
|
175
269
|
if (body.status === "discarded" && body.reason === "cancelled") {
|
|
176
270
|
return { status: "discarded", reason: "cancelled" };
|
|
177
271
|
}
|
|
272
|
+
if (body.status === "uncertain" && body.reason === "delivery_uncertain") {
|
|
273
|
+
return { status: "uncertain", reason: "delivery_uncertain" };
|
|
274
|
+
}
|
|
178
275
|
if (body.status === "requeue"
|
|
179
276
|
&& (body.reason === "unsupported" || body.reason === "closed" || body.reason === "failed")) {
|
|
180
277
|
return { status: "requeue", reason: body.reason };
|
|
@@ -195,6 +292,39 @@ export class OperatorClient {
|
|
|
195
292
|
await response.body?.cancel().catch(() => undefined);
|
|
196
293
|
});
|
|
197
294
|
}
|
|
295
|
+
async recordContextImport(conversationId, text, idempotencyKey) {
|
|
296
|
+
let response;
|
|
297
|
+
try {
|
|
298
|
+
response = await this.request(`${this.baseUrl}/v1/conversations/${encodeURIComponent(conversationId)}/context-imports`, {
|
|
299
|
+
method: "POST",
|
|
300
|
+
headers: this.headers(true),
|
|
301
|
+
signal: AbortSignal.timeout(CONTEXT_IMPORT_TIMEOUT_MS),
|
|
302
|
+
body: JSON.stringify({ text, idempotencyKey }),
|
|
303
|
+
}, PRESERVED_CONTEXT_IMPORT_ERRORS);
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
if (error instanceof DOMException && error.name === "TimeoutError") {
|
|
307
|
+
throw new WebConsoleError("context_import_outcome_unknown", "Canonical context import timed out; its outcome is unknown.", 504);
|
|
308
|
+
}
|
|
309
|
+
throw error;
|
|
310
|
+
}
|
|
311
|
+
let raw;
|
|
312
|
+
try {
|
|
313
|
+
raw = JSON.parse(await readBoundedBody(response, MAX_INFO_BODY_BYTES, "context_import_response_too_large"));
|
|
314
|
+
}
|
|
315
|
+
catch (error) {
|
|
316
|
+
if (error instanceof WebConsoleError)
|
|
317
|
+
throw error;
|
|
318
|
+
throw new WebConsoleError("invalid_context_import_response", "The agent returned invalid context-import JSON.", 502);
|
|
319
|
+
}
|
|
320
|
+
const body = record(raw);
|
|
321
|
+
if (body?.imported !== true
|
|
322
|
+
|| (body.status !== "appended" && body.status !== "duplicate")
|
|
323
|
+
|| body.conversationId !== conversationId) {
|
|
324
|
+
throw new WebConsoleError("invalid_context_import_response", "The agent returned an invalid context-import receipt.", 502);
|
|
325
|
+
}
|
|
326
|
+
return body.status;
|
|
327
|
+
}
|
|
198
328
|
async getJob(jobId, signal) {
|
|
199
329
|
const response = await this.request(`${this.baseUrl}/v1/jobs/${encodeURIComponent(boundedJobId(jobId))}`, {
|
|
200
330
|
headers: this.processJobHeaders(),
|
|
@@ -418,16 +548,24 @@ export class OperatorClient {
|
|
|
418
548
|
const parsed = JSON.parse(await readBoundedBody(response, MAX_INFO_BODY_BYTES, "operator_cron_too_large"));
|
|
419
549
|
return parseCronMutation(parsed);
|
|
420
550
|
}
|
|
551
|
+
monitorWakeHeaders(deliveryKey) {
|
|
552
|
+
if (deliveryKey?.trim().startsWith("monitor:") !== true)
|
|
553
|
+
return {};
|
|
554
|
+
if (this.monitorsBearer === undefined) {
|
|
555
|
+
throw new WebConsoleError("monitors_unavailable", "Owner Monitor credentials are unavailable for this agent.", 409);
|
|
556
|
+
}
|
|
557
|
+
return { "x-mono-agent-monitor-wake-authorization": `Bearer ${this.monitorsBearer}` };
|
|
558
|
+
}
|
|
421
559
|
processJobHeaders() {
|
|
422
560
|
if (this.processJobsBearer === undefined) {
|
|
423
561
|
throw new WebConsoleError("process_jobs_unavailable", "Owner process-job credentials are unavailable for this agent.", 409);
|
|
424
562
|
}
|
|
425
563
|
return { authorization: `Bearer ${this.processJobsBearer}` };
|
|
426
564
|
}
|
|
427
|
-
async request(url, init, preservedErrors) {
|
|
565
|
+
async request(url, init, preservedErrors, fetchImpl = this.fetchImpl) {
|
|
428
566
|
let response;
|
|
429
567
|
try {
|
|
430
|
-
response = await
|
|
568
|
+
response = await fetchImpl(url, { ...init, redirect: "error" });
|
|
431
569
|
}
|
|
432
570
|
catch (error) {
|
|
433
571
|
if (init.signal?.aborted === true)
|
|
@@ -440,7 +578,14 @@ export class OperatorClient {
|
|
|
440
578
|
? undefined
|
|
441
579
|
: preservedOperatorError(detail, response.status, preservedErrors);
|
|
442
580
|
if (preserved !== undefined) {
|
|
443
|
-
|
|
581
|
+
const retryAfter = response.headers.get("Retry-After");
|
|
582
|
+
const retryAfterSeconds = retryAfter === null ? undefined : Number(retryAfter);
|
|
583
|
+
throw new WebConsoleError(preserved.code, preserved.message, response.status, {
|
|
584
|
+
...(typeof retryAfterSeconds === "number" && Number.isSafeInteger(retryAfterSeconds) && retryAfterSeconds > 0
|
|
585
|
+
? { retryAfterSeconds }
|
|
586
|
+
: {}),
|
|
587
|
+
...(preserved.reason === undefined ? {} : { reason: preserved.reason }),
|
|
588
|
+
});
|
|
444
589
|
}
|
|
445
590
|
throw new WebConsoleError(response.status === 401 ? "agent_unauthorized" : "agent_http_error", `Agent responded ${response.status}${detail.length === 0 ? "." : `: ${detail.slice(0, 300)}`}`, 502);
|
|
446
591
|
}
|
|
@@ -462,7 +607,10 @@ function preservedOperatorError(body, status, expected) {
|
|
|
462
607
|
const message = typeof error?.message === "string" && error.message.length <= 1_024
|
|
463
608
|
? error.message
|
|
464
609
|
: "The MCP App audit operation failed.";
|
|
465
|
-
|
|
610
|
+
const reason = typeof error?.reason === "string" && error.reason.length <= 128
|
|
611
|
+
? error.reason
|
|
612
|
+
: undefined;
|
|
613
|
+
return { code, message, ...(reason === undefined ? {} : { reason }) };
|
|
466
614
|
}
|
|
467
615
|
function invalidCronResponse() {
|
|
468
616
|
throw new WebConsoleError("invalid_operator_cron", "The agent returned invalid cron operator data.", 502);
|
|
@@ -475,6 +623,14 @@ function parseReplyAttachmentsCapability(value) {
|
|
|
475
623
|
? { version: 1, maxBytes: capability.maxBytes }
|
|
476
624
|
: undefined;
|
|
477
625
|
}
|
|
626
|
+
function parseContextImportCapability(value) {
|
|
627
|
+
const capability = record(value);
|
|
628
|
+
return capability?.version === AGENT_CONTEXT_IMPORT_VERSION
|
|
629
|
+
&& Number.isSafeInteger(capability.maxTextBytes)
|
|
630
|
+
&& Number(capability.maxTextBytes) >= AGENT_CONTEXT_IMPORT_MAX_TEXT_BYTES
|
|
631
|
+
? { version: AGENT_CONTEXT_IMPORT_VERSION, maxTextBytes: Number(capability.maxTextBytes) }
|
|
632
|
+
: undefined;
|
|
633
|
+
}
|
|
478
634
|
function parseMcpAppsCapability(value) {
|
|
479
635
|
const capability = record(value);
|
|
480
636
|
const versions = stringArray(capability?.versions);
|
|
@@ -804,6 +960,9 @@ function parseModelOptions(value) {
|
|
|
804
960
|
const effortLevels = stringArray(option.effortLevels);
|
|
805
961
|
result[model] = {
|
|
806
962
|
...(effortLevels === undefined ? {} : { effortLevels }),
|
|
963
|
+
...(typeof option.effort === "string" || option.effort === null
|
|
964
|
+
? { effort: option.effort }
|
|
965
|
+
: {}),
|
|
807
966
|
...(typeof option.reasoning === "boolean" ? { reasoning: option.reasoning } : {}),
|
|
808
967
|
...(typeof option.reasoningMode === "string" ? { reasoningMode: option.reasoningMode } : {}),
|
|
809
968
|
...(typeof option.label === "string" ? { label: option.label } : {}),
|