@zackbart/connecta 0.7.8 → 0.8.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/CHANGELOG.md +94 -0
- package/README.md +67 -144
- package/dist/activity.d.ts +1 -1
- package/dist/activity.d.ts.map +1 -1
- package/dist/activity.js.map +1 -1
- package/dist/auth/bearer.d.ts +1 -1
- package/dist/auth/bearer.js +4 -4
- package/dist/auth/bearer.js.map +1 -1
- package/dist/auth/clerk.d.ts +1 -1
- package/dist/auth/clerk.js +1 -1
- package/dist/call-admission.d.ts +81 -0
- package/dist/call-admission.d.ts.map +1 -0
- package/dist/call-admission.js +345 -0
- package/dist/call-admission.js.map +1 -0
- package/dist/catalog-fingerprint.d.ts +20 -0
- package/dist/catalog-fingerprint.d.ts.map +1 -0
- package/dist/catalog-fingerprint.js +34 -0
- package/dist/catalog-fingerprint.js.map +1 -0
- package/dist/catalog-limits.d.ts +10 -0
- package/dist/catalog-limits.d.ts.map +1 -0
- package/dist/catalog-limits.js +10 -0
- package/dist/catalog-limits.js.map +1 -0
- package/dist/catalog-service.d.ts +138 -0
- package/dist/catalog-service.d.ts.map +1 -0
- package/dist/catalog-service.js +407 -0
- package/dist/catalog-service.js.map +1 -0
- package/dist/catalog.js +2 -2
- package/dist/catalog.js.map +1 -1
- package/dist/concurrency.d.ts +4 -0
- package/dist/concurrency.d.ts.map +1 -0
- package/dist/concurrency.js +31 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/connectors/api.d.ts +3 -1
- package/dist/connectors/api.d.ts.map +1 -1
- package/dist/connectors/api.js +22 -11
- package/dist/connectors/api.js.map +1 -1
- package/dist/connectors/remote-mcp.d.ts +3 -1
- package/dist/connectors/remote-mcp.d.ts.map +1 -1
- package/dist/connectors/remote-mcp.js +44 -18
- package/dist/connectors/remote-mcp.js.map +1 -1
- package/dist/credential-health.d.ts +0 -22
- package/dist/credential-health.d.ts.map +1 -1
- package/dist/credential-health.js +14 -10
- package/dist/credential-health.js.map +1 -1
- package/dist/credentials.d.ts +3 -2
- package/dist/credentials.d.ts.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/execute.d.ts +9 -8
- package/dist/execute.d.ts.map +1 -1
- package/dist/execute.js +144 -291
- package/dist/execute.js.map +1 -1
- package/dist/executor-result.d.ts +0 -3
- package/dist/executor-result.d.ts.map +1 -1
- package/dist/executor-result.js +2 -2
- package/dist/executor-result.js.map +1 -1
- package/dist/executors/quickjs-child.js +3 -3
- package/dist/executors/quickjs-child.js.map +1 -1
- package/dist/executors/quickjs-protocol.d.ts +4 -1
- package/dist/executors/quickjs-protocol.d.ts.map +1 -1
- package/dist/executors/quickjs-runtime.d.ts.map +1 -1
- package/dist/executors/quickjs-runtime.js +7 -2
- package/dist/executors/quickjs-runtime.js.map +1 -1
- package/dist/executors/quickjs.d.ts.map +1 -1
- package/dist/executors/quickjs.js +4 -1
- package/dist/executors/quickjs.js.map +1 -1
- package/dist/favicon.js +2 -2
- package/dist/favicon.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -17
- package/dist/index.js.map +1 -1
- package/dist/invocation.d.ts +96 -0
- package/dist/invocation.d.ts.map +1 -0
- package/dist/invocation.js +369 -0
- package/dist/invocation.js.map +1 -0
- package/dist/meta-tools.d.ts +11 -86
- package/dist/meta-tools.d.ts.map +1 -1
- package/dist/meta-tools.js +145 -485
- package/dist/meta-tools.js.map +1 -1
- package/dist/operator-ui/generated.d.ts +3 -0
- package/dist/operator-ui/generated.d.ts.map +1 -0
- package/dist/operator-ui/generated.js +5 -0
- package/dist/operator-ui/generated.js.map +1 -0
- package/dist/operator-ui/model.d.ts +94 -0
- package/dist/operator-ui/model.d.ts.map +1 -0
- package/dist/operator-ui/model.js +28 -0
- package/dist/operator-ui/model.js.map +1 -0
- package/dist/registry.d.ts +47 -6
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +356 -35
- package/dist/registry.js.map +1 -1
- package/dist/routes/activity.d.ts +3 -0
- package/dist/routes/activity.d.ts.map +1 -0
- package/dist/routes/activity.js +173 -0
- package/dist/routes/activity.js.map +1 -0
- package/dist/routes/credentials.d.ts +3 -0
- package/dist/routes/credentials.d.ts.map +1 -0
- package/dist/routes/credentials.js +181 -0
- package/dist/routes/credentials.js.map +1 -0
- package/dist/routes/mcp.d.ts +8 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +383 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/oauth.d.ts +4 -0
- package/dist/routes/oauth.d.ts.map +1 -0
- package/dist/routes/oauth.js +268 -0
- package/dist/routes/oauth.js.map +1 -0
- package/dist/routes/shared.d.ts +97 -0
- package/dist/routes/shared.d.ts.map +1 -0
- package/dist/routes/shared.js +199 -0
- package/dist/routes/shared.js.map +1 -0
- package/dist/routes/ui.d.ts +3 -0
- package/dist/routes/ui.d.ts.map +1 -0
- package/dist/routes/ui.js +122 -0
- package/dist/routes/ui.js.map +1 -0
- package/dist/server.d.ts +9 -40
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +67 -1292
- package/dist/server.js.map +1 -1
- package/dist/skills.d.ts +0 -15
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +6 -5
- package/dist/skills.js.map +1 -1
- package/dist/storage/file.d.ts.map +1 -1
- package/dist/storage/file.js +3 -1
- package/dist/storage/file.js.map +1 -1
- package/dist/storage/memory.d.ts.map +1 -1
- package/dist/storage/memory.js +3 -1
- package/dist/storage/memory.js.map +1 -1
- package/dist/toolkits.d.ts +0 -22
- package/dist/toolkits.d.ts.map +1 -1
- package/dist/toolkits.js +2 -2
- package/dist/toolkits.js.map +1 -1
- package/dist/types.d.ts +64 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/ui.d.ts +3 -93
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +26 -1389
- package/dist/ui.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +15 -8
- package/src/activity.ts +5 -1
- package/src/auth/bearer.ts +4 -4
- package/src/auth/clerk.ts +1 -1
- package/src/call-admission.ts +522 -0
- package/src/catalog-fingerprint.ts +52 -0
- package/src/catalog-limits.ts +11 -0
- package/src/catalog-service.ts +601 -0
- package/src/catalog.ts +2 -2
- package/src/concurrency.ts +39 -0
- package/src/connectors/api.ts +25 -11
- package/src/connectors/remote-mcp.ts +55 -21
- package/src/credential-health.ts +13 -10
- package/src/credentials.ts +2 -2
- package/src/errors.ts +1 -1
- package/src/execute.ts +194 -377
- package/src/executor-result.ts +2 -2
- package/src/executors/quickjs-child.ts +8 -4
- package/src/executors/quickjs-protocol.ts +1 -1
- package/src/executors/quickjs-runtime.ts +5 -1
- package/src/executors/quickjs.ts +11 -8
- package/src/favicon.ts +2 -2
- package/src/index.ts +54 -17
- package/src/invocation.ts +527 -0
- package/src/meta-tools.ts +369 -797
- package/src/operator-ui/browser.css +413 -0
- package/src/operator-ui/browser.ts +1121 -0
- package/src/operator-ui/generated.ts +4 -0
- package/src/operator-ui/model.ts +127 -0
- package/src/registry.ts +489 -44
- package/src/routes/activity.ts +220 -0
- package/src/routes/credentials.ts +266 -0
- package/src/routes/mcp.ts +485 -0
- package/src/routes/oauth.ts +328 -0
- package/src/routes/shared.ts +330 -0
- package/src/routes/ui.ts +153 -0
- package/src/server.ts +70 -1702
- package/src/skills.ts +6 -5
- package/src/storage/file.ts +3 -1
- package/src/storage/memory.ts +3 -1
- package/src/toolkits.ts +2 -2
- package/src/types.ts +70 -2
- package/src/ui.ts +52 -1489
- package/src/version.ts +1 -1
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { recordToolActivity, } from "./activity.js";
|
|
2
|
+
import { isCallAdmissionError } from "./call-admission.js";
|
|
3
|
+
import { classifyCallError, ConnectorCallError, messageLooksRetryable, } from "./errors.js";
|
|
4
|
+
import { unwrapMcpResult } from "./mcp-result.js";
|
|
5
|
+
/**
|
|
6
|
+
* The longest the engine will park a synchronous inbound request in *waiting
|
|
7
|
+
* alone*. The engine already treats ~15 s as the outer bound of one reasonable
|
|
8
|
+
* connector call (EXECUTE_HOST_CALL_TIMEOUT_MS), so sleeping for minutes trades
|
|
9
|
+
* a fast, informative failure for a hung one. A connector-reported window this
|
|
10
|
+
* long isn't truncated — it's declined (see `retryBackoffMs`) and reported
|
|
11
|
+
* verbatim as `error.retryAfterMs`, so the agent, which can afford to wait,
|
|
12
|
+
* decides when to re-issue.
|
|
13
|
+
*/
|
|
14
|
+
export const MAX_RETRY_BACKOFF_MS = 10_000;
|
|
15
|
+
/**
|
|
16
|
+
* How long to wait before the next attempt, or `undefined` for "don't retry".
|
|
17
|
+
*
|
|
18
|
+
* A connector that read a `Retry-After` header knows the window exactly, so it
|
|
19
|
+
* is honoured **exactly or not at all**: truncating an exponential *guess* is
|
|
20
|
+
* harmless, but truncating a *known* window means deliberately retrying inside
|
|
21
|
+
* a rate limit — the harm this channel exists to prevent. A window longer than
|
|
22
|
+
* `MAX_RETRY_BACKOFF_MS` therefore declines the retry rather than shortening
|
|
23
|
+
* it. (`retryAfterMs` is normalized non-negative, so `0` means "retry now".)
|
|
24
|
+
* Connectors that report no window keep the historical exponential guess.
|
|
25
|
+
*
|
|
26
|
+
* Waits are per attempt, matching the per-attempt `timeoutMs` race in
|
|
27
|
+
* `InvocationService.invoke`. Exported for direct testing.
|
|
28
|
+
*/
|
|
29
|
+
export function retryBackoffMs(attempt, retryAfterMs) {
|
|
30
|
+
if (retryAfterMs === undefined) {
|
|
31
|
+
return Math.min(250 * 2 ** (attempt - 1), 1_000);
|
|
32
|
+
}
|
|
33
|
+
return retryAfterMs <= MAX_RETRY_BACKOFF_MS ? retryAfterMs : undefined;
|
|
34
|
+
}
|
|
35
|
+
/** The one fail-closed admission predicate for every invocation adapter. */
|
|
36
|
+
function isExplicitlyReadOnly(definition) {
|
|
37
|
+
return (definition.annotations?.readOnlyHint === true &&
|
|
38
|
+
definition.annotations?.destructiveHint !== true);
|
|
39
|
+
}
|
|
40
|
+
function retrySafe(definition) {
|
|
41
|
+
return (definition.annotations?.readOnlyHint === true ||
|
|
42
|
+
definition.annotations?.idempotentHint === true);
|
|
43
|
+
}
|
|
44
|
+
function framingError(code, message) {
|
|
45
|
+
return { code, message, retryable: messageLooksRetryable(message) };
|
|
46
|
+
}
|
|
47
|
+
function callerCancelledDetails() {
|
|
48
|
+
return {
|
|
49
|
+
code: "cancelled",
|
|
50
|
+
message: "Tool call was cancelled by the caller.",
|
|
51
|
+
retryable: false,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function isCallerCancellation(error, signal) {
|
|
55
|
+
return (signal?.aborted === true ||
|
|
56
|
+
(isCallAdmissionError(error) && error.admissionKind === "cancelled"));
|
|
57
|
+
}
|
|
58
|
+
function assertRawMcpSuccess(kind, result) {
|
|
59
|
+
if (kind !== "mcp" || result == null || typeof result !== "object")
|
|
60
|
+
return;
|
|
61
|
+
const mcpResult = result;
|
|
62
|
+
if (!mcpResult.isError)
|
|
63
|
+
return;
|
|
64
|
+
throw new Error(mcpResult.content
|
|
65
|
+
?.filter((block) => block.type === "text")
|
|
66
|
+
.map((block) => block.text ?? "")
|
|
67
|
+
.join("") || "Downstream tool call failed");
|
|
68
|
+
}
|
|
69
|
+
export class InvocationFailure extends Error {
|
|
70
|
+
details;
|
|
71
|
+
code;
|
|
72
|
+
retryable;
|
|
73
|
+
retryAfterMs;
|
|
74
|
+
constructor(details) {
|
|
75
|
+
super(details.message);
|
|
76
|
+
this.details = details;
|
|
77
|
+
this.name = "InvocationFailure";
|
|
78
|
+
this.code = details.code;
|
|
79
|
+
this.retryable = details.retryable;
|
|
80
|
+
this.retryAfterMs = details.retryAfterMs;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Shared downstream invocation engine. Address/catalog resolution is delegated
|
|
85
|
+
* to the request-local CatalogService; every remaining call semantic lives
|
|
86
|
+
* here so MCP and code mode cannot drift independently.
|
|
87
|
+
*/
|
|
88
|
+
export class InvocationService {
|
|
89
|
+
registry;
|
|
90
|
+
catalog;
|
|
91
|
+
activity;
|
|
92
|
+
constructor(registry, catalog, activity) {
|
|
93
|
+
this.registry = registry;
|
|
94
|
+
this.catalog = catalog;
|
|
95
|
+
this.activity = activity;
|
|
96
|
+
}
|
|
97
|
+
async invoke(address, args, context) {
|
|
98
|
+
return this.invokeWithResolution(address, args, context, () => this.catalog.resolveTool(address, context.requestSignal !== undefined
|
|
99
|
+
? { signal: context.requestSignal }
|
|
100
|
+
: {}));
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Code-mode namespace dispatch preserves JavaScript-safe tool aliases while
|
|
104
|
+
* still feeding the resolved catalog entry through the one invocation path.
|
|
105
|
+
*/
|
|
106
|
+
async invokeToolAlias(connectorId, toolAlias, aliasFor, args, context) {
|
|
107
|
+
return this.invokeWithResolution(`${connectorId}.${toolAlias}`, args, context, () => this.catalog.resolveToolAlias(connectorId, toolAlias, aliasFor, context.requestSignal !== undefined
|
|
108
|
+
? { signal: context.requestSignal }
|
|
109
|
+
: {}));
|
|
110
|
+
}
|
|
111
|
+
async invokeWithResolution(address, args, context, resolve) {
|
|
112
|
+
const started = Date.now();
|
|
113
|
+
let catalogMs = 0;
|
|
114
|
+
let admissionMs = 0;
|
|
115
|
+
let connectorMs = 0;
|
|
116
|
+
let backoffMs = 0;
|
|
117
|
+
let resultProcessingMs = 0;
|
|
118
|
+
let attempts = 0;
|
|
119
|
+
let resolved;
|
|
120
|
+
let activityTarget;
|
|
121
|
+
const timing = () => ({
|
|
122
|
+
catalogMs,
|
|
123
|
+
admissionMs,
|
|
124
|
+
connectorMs,
|
|
125
|
+
backoffMs,
|
|
126
|
+
resultProcessingMs,
|
|
127
|
+
totalMs: Date.now() - started,
|
|
128
|
+
});
|
|
129
|
+
const record = (outcome, errorCode) => {
|
|
130
|
+
if (!activityTarget)
|
|
131
|
+
return;
|
|
132
|
+
recordToolActivity(this.activity, {
|
|
133
|
+
connectorId: activityTarget.connector.id,
|
|
134
|
+
toolName: activityTarget.toolName,
|
|
135
|
+
address: `${activityTarget.connector.id}.${activityTarget.toolName}`,
|
|
136
|
+
source: context.source,
|
|
137
|
+
outcome,
|
|
138
|
+
durationMs: Date.now() - started,
|
|
139
|
+
attempts,
|
|
140
|
+
...(errorCode ? { errorCode } : {}),
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
const failed = (error) => {
|
|
144
|
+
const diagnostics = timing();
|
|
145
|
+
record(error.code === "timeout"
|
|
146
|
+
? "timeout"
|
|
147
|
+
: error.code === "cancelled"
|
|
148
|
+
? "cancelled"
|
|
149
|
+
: "error", error.code);
|
|
150
|
+
return {
|
|
151
|
+
ok: false,
|
|
152
|
+
durationMs: Date.now() - started,
|
|
153
|
+
attempts,
|
|
154
|
+
timing: diagnostics,
|
|
155
|
+
...(resolved ? { resolved } : {}),
|
|
156
|
+
error,
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
const resolution = await resolve();
|
|
160
|
+
catalogMs += resolution.catalogMs;
|
|
161
|
+
if (!resolution.ok) {
|
|
162
|
+
if (resolution.connector && resolution.toolName) {
|
|
163
|
+
activityTarget = {
|
|
164
|
+
connector: resolution.connector,
|
|
165
|
+
toolName: resolution.toolName,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
if (resolution.cause && resolution.connector) {
|
|
169
|
+
if (context.requestSignal?.aborted) {
|
|
170
|
+
return failed(callerCancelledDetails());
|
|
171
|
+
}
|
|
172
|
+
// A connector whose catalog cannot be fetched is as unusable as one
|
|
173
|
+
// whose execution fails, so it feeds health accounting the same way the
|
|
174
|
+
// attempt catch below does — otherwise a connector every call fails
|
|
175
|
+
// against (a revoked downstream grant, say) still reads clean from the
|
|
176
|
+
// cheap `list_connectors({ probe: false })` signal.
|
|
177
|
+
//
|
|
178
|
+
// Recorded HERE rather than inside the registry's catalog fetch on
|
|
179
|
+
// purpose: `registry` is this connection's VIEW, so a toolkit-scoped
|
|
180
|
+
// session records into its own log as well as the deployment-wide one,
|
|
181
|
+
// which `Registry.refreshTools` could not reach. A cache hit that
|
|
182
|
+
// avoids a live listTools call records nothing either way — it is not
|
|
183
|
+
// evidence of health, and success stays what it has always been: an
|
|
184
|
+
// actual downstream call that returned.
|
|
185
|
+
this.registry.recordFailure(resolution.connector.id, Date.now() - started, resolution.cause);
|
|
186
|
+
}
|
|
187
|
+
return failed(resolution.error);
|
|
188
|
+
}
|
|
189
|
+
resolved = resolution.resolved;
|
|
190
|
+
activityTarget = resolved;
|
|
191
|
+
if (!isExplicitlyReadOnly(resolved.definition) && !context.allowDestructive) {
|
|
192
|
+
const canonicalAddress = `${resolved.connector.id}.${resolved.toolName}`;
|
|
193
|
+
return failed(framingError("destructive_tool_requires_approval", `Tool "${canonicalAddress}" is not explicitly read-only. Invoke it through call_destructive_tool so the MCP host can request explicit approval.`));
|
|
194
|
+
}
|
|
195
|
+
try {
|
|
196
|
+
context.beforeDispatch?.();
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
return failed(classifyCallError(error));
|
|
200
|
+
}
|
|
201
|
+
const maxRetries = Math.min(2, Math.max(0, Math.trunc(context.maxRetries ?? 0)));
|
|
202
|
+
let result;
|
|
203
|
+
while (true) {
|
|
204
|
+
attempts++;
|
|
205
|
+
let permit;
|
|
206
|
+
const controller = context.timeoutMs || context.requestSignal
|
|
207
|
+
? new AbortController()
|
|
208
|
+
: undefined;
|
|
209
|
+
const forwardAbort = () => controller?.abort(context.requestSignal?.reason);
|
|
210
|
+
if (context.requestSignal?.aborted)
|
|
211
|
+
forwardAbort();
|
|
212
|
+
else {
|
|
213
|
+
context.requestSignal?.addEventListener("abort", forwardAbort, {
|
|
214
|
+
once: true,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
let timer;
|
|
218
|
+
let onAbort;
|
|
219
|
+
let attemptError;
|
|
220
|
+
let attemptFailed = false;
|
|
221
|
+
try {
|
|
222
|
+
const admissionStarted = Date.now();
|
|
223
|
+
try {
|
|
224
|
+
permit = await this.registry.admitCall(resolved.connector.id, {
|
|
225
|
+
toolName: resolved.toolName,
|
|
226
|
+
args: args ?? {},
|
|
227
|
+
...(context.requestSignal !== undefined
|
|
228
|
+
? { signal: context.requestSignal }
|
|
229
|
+
: {}),
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
finally {
|
|
233
|
+
admissionMs += Date.now() - admissionStarted;
|
|
234
|
+
}
|
|
235
|
+
const connectorContext = this.registry.contextFor(resolved.connector.id, this.catalog.baseUrl, this.catalog.requestScope, {
|
|
236
|
+
...(controller?.signal !== undefined
|
|
237
|
+
? { signal: controller.signal }
|
|
238
|
+
: {}),
|
|
239
|
+
...(context.timeoutMs !== undefined
|
|
240
|
+
? { timeoutMs: context.timeoutMs }
|
|
241
|
+
: {}),
|
|
242
|
+
});
|
|
243
|
+
let rejectCancelled;
|
|
244
|
+
const cancelled = controller
|
|
245
|
+
? new Promise((_, reject) => {
|
|
246
|
+
rejectCancelled = reject;
|
|
247
|
+
})
|
|
248
|
+
: undefined;
|
|
249
|
+
onAbort = () => {
|
|
250
|
+
rejectCancelled(controller?.signal.reason ??
|
|
251
|
+
new ConnectorCallError("timeout", "Tool call was cancelled"));
|
|
252
|
+
};
|
|
253
|
+
controller?.signal.addEventListener("abort", onAbort, { once: true });
|
|
254
|
+
if (controller?.signal.aborted)
|
|
255
|
+
onAbort();
|
|
256
|
+
if (controller?.signal.aborted)
|
|
257
|
+
await cancelled;
|
|
258
|
+
if (context.timeoutMs) {
|
|
259
|
+
timer = setTimeout(() => {
|
|
260
|
+
controller?.abort(new ConnectorCallError("timeout", `Tool call timed out after ${context.timeoutMs}ms`));
|
|
261
|
+
}, context.timeoutMs);
|
|
262
|
+
}
|
|
263
|
+
const connectorStarted = Date.now();
|
|
264
|
+
try {
|
|
265
|
+
const pending = resolved.connector.callTool(resolved.toolName, args ?? {}, connectorContext);
|
|
266
|
+
const raw = cancelled
|
|
267
|
+
? await Promise.race([pending, cancelled])
|
|
268
|
+
: await pending;
|
|
269
|
+
// isError is checked here for BOTH result shapes so every adapter
|
|
270
|
+
// reports the same downstream-failure wording, and the throw lands
|
|
271
|
+
// inside the attempt where it stays retry-eligible and feeds health.
|
|
272
|
+
assertRawMcpSuccess(resolved.connector.kind, raw);
|
|
273
|
+
result = context.unwrapResult
|
|
274
|
+
? unwrapMcpResult(resolved.connector.kind, raw)
|
|
275
|
+
: raw;
|
|
276
|
+
}
|
|
277
|
+
finally {
|
|
278
|
+
connectorMs += Date.now() - connectorStarted;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
attemptFailed = true;
|
|
283
|
+
attemptError = error;
|
|
284
|
+
}
|
|
285
|
+
finally {
|
|
286
|
+
if (timer)
|
|
287
|
+
clearTimeout(timer);
|
|
288
|
+
if (onAbort) {
|
|
289
|
+
controller?.signal.removeEventListener("abort", onAbort);
|
|
290
|
+
}
|
|
291
|
+
context.requestSignal?.removeEventListener("abort", forwardAbort);
|
|
292
|
+
permit?.release();
|
|
293
|
+
}
|
|
294
|
+
if (attemptFailed) {
|
|
295
|
+
const callerCancelled = isCallerCancellation(attemptError, context.requestSignal);
|
|
296
|
+
const details = callerCancelled
|
|
297
|
+
? callerCancelledDetails()
|
|
298
|
+
: classifyCallError(attemptError);
|
|
299
|
+
if (!callerCancelled &&
|
|
300
|
+
attempts <= maxRetries &&
|
|
301
|
+
retrySafe(resolved.definition) &&
|
|
302
|
+
details.retryable) {
|
|
303
|
+
const wait = retryBackoffMs(attempts, details.retryAfterMs);
|
|
304
|
+
if (wait !== undefined) {
|
|
305
|
+
const backoffStarted = Date.now();
|
|
306
|
+
if (wait > 0) {
|
|
307
|
+
const completed = await new Promise((resolve) => {
|
|
308
|
+
let settled = false;
|
|
309
|
+
const finish = (value) => {
|
|
310
|
+
if (settled)
|
|
311
|
+
return;
|
|
312
|
+
settled = true;
|
|
313
|
+
clearTimeout(timer);
|
|
314
|
+
context.requestSignal?.removeEventListener("abort", cancel);
|
|
315
|
+
resolve(value);
|
|
316
|
+
};
|
|
317
|
+
const timer = setTimeout(() => finish(true), wait);
|
|
318
|
+
const cancel = () => finish(false);
|
|
319
|
+
context.requestSignal?.addEventListener("abort", cancel, {
|
|
320
|
+
once: true,
|
|
321
|
+
});
|
|
322
|
+
if (context.requestSignal?.aborted)
|
|
323
|
+
cancel();
|
|
324
|
+
});
|
|
325
|
+
backoffMs += Date.now() - backoffStarted;
|
|
326
|
+
if (!completed)
|
|
327
|
+
return failed(callerCancelledDetails());
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
backoffMs += Date.now() - backoffStarted;
|
|
331
|
+
}
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
// The reported window is longer than the engine will park a
|
|
335
|
+
// synchronous request for. Fall through to failure with
|
|
336
|
+
// retryAfterMs reported verbatim so the agent can re-issue.
|
|
337
|
+
}
|
|
338
|
+
if (!callerCancelled && !isCallAdmissionError(attemptError)) {
|
|
339
|
+
this.registry.recordFailure(resolved.connector.id, Date.now() - started, attemptError);
|
|
340
|
+
}
|
|
341
|
+
return failed(details);
|
|
342
|
+
}
|
|
343
|
+
break;
|
|
344
|
+
}
|
|
345
|
+
this.registry.recordSuccess(resolved.connector.id, Date.now() - started);
|
|
346
|
+
const processingStarted = Date.now();
|
|
347
|
+
try {
|
|
348
|
+
const value = context.processResult
|
|
349
|
+
? await context.processResult(result, resolved)
|
|
350
|
+
: result;
|
|
351
|
+
resultProcessingMs += Date.now() - processingStarted;
|
|
352
|
+
const diagnostics = timing();
|
|
353
|
+
record("success");
|
|
354
|
+
return {
|
|
355
|
+
ok: true,
|
|
356
|
+
value,
|
|
357
|
+
resolved,
|
|
358
|
+
durationMs: Date.now() - started,
|
|
359
|
+
attempts,
|
|
360
|
+
timing: diagnostics,
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
resultProcessingMs += Date.now() - processingStarted;
|
|
365
|
+
return failed(framingError("result_processing_failed", error instanceof Error ? error.message : String(error)));
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=invocation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invocation.js","sourceRoot":"","sources":["../src/invocation.ts"],"names":[],"mappings":"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"}
|
package/dist/meta-tools.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
import {
|
|
2
|
+
import type { ActivityRequestContext } from "./activity.js";
|
|
3
|
+
import { DiscoveryPolicyError, MAX_DESCRIBE_ADDRESSES, MAX_DISCOVERY_RESULT_BYTES, MAX_SEARCH_LIMIT } from "./catalog-service.js";
|
|
3
4
|
import { type DeferredWork } from "./connector-scope.js";
|
|
5
|
+
import { MAX_RETRY_BACKOFF_MS, retryBackoffMs } from "./invocation.js";
|
|
4
6
|
import { type RegistryView } from "./registry.js";
|
|
7
|
+
export { MAX_DESCRIBE_ADDRESSES, MAX_DISCOVERY_RESULT_BYTES, MAX_RETRY_BACKOFF_MS, MAX_SEARCH_LIMIT, DiscoveryPolicyError, retryBackoffMs, };
|
|
5
8
|
interface TextContent {
|
|
6
9
|
type: "text";
|
|
7
10
|
text: string;
|
|
@@ -14,73 +17,6 @@ export interface ToolResult {
|
|
|
14
17
|
}
|
|
15
18
|
export declare function jsonResult(obj: unknown): ToolResult;
|
|
16
19
|
export declare function errorResult(message: string): ToolResult;
|
|
17
|
-
export declare const DEFAULT_SEARCH_LIMIT = 25;
|
|
18
|
-
/**
|
|
19
|
-
* A discovery page is for choosing the next tool, not exporting the catalog.
|
|
20
|
-
* One hundred leaves room for broad browsing while keeping each deliberate
|
|
21
|
-
* page far below the catalog sizes Connecta supports.
|
|
22
|
-
*/
|
|
23
|
-
export declare const MAX_SEARCH_LIMIT = 100;
|
|
24
|
-
/** Same one-request work bound for address-based discovery. */
|
|
25
|
-
export declare const MAX_DESCRIBE_ADDRESSES = 100;
|
|
26
|
-
/**
|
|
27
|
-
* Final UTF-8 ceiling for a generated search/describe response. The count
|
|
28
|
-
* limits are the ordinary guard; this catches unusually large full schemas or
|
|
29
|
-
* descriptions that make even a bounded page expensive.
|
|
30
|
-
*/
|
|
31
|
-
export declare const MAX_DISCOVERY_RESULT_BYTES = 256000;
|
|
32
|
-
export declare class DiscoveryPolicyError extends Error {
|
|
33
|
-
readonly code: "invalid_args" | "result_too_large";
|
|
34
|
-
constructor(code: "invalid_args" | "result_too_large", message: string);
|
|
35
|
-
}
|
|
36
|
-
/** Validate before ranking so a huge page request does no proportional work. */
|
|
37
|
-
export declare function discoverySearchLimit(value: unknown): number;
|
|
38
|
-
/** Validate the raw list so duplicate addresses consume the same bound. */
|
|
39
|
-
export declare function discoveryAddresses(value: unknown): unknown[];
|
|
40
|
-
/** Apply the same final result guard to code-mode discovery helpers. */
|
|
41
|
-
export declare function assertDiscoveryResultSize(value: unknown, hint: string): void;
|
|
42
|
-
/**
|
|
43
|
-
* The longest the engine will park a synchronous inbound request in *waiting
|
|
44
|
-
* alone*. The engine already treats ~15 s as the outer bound of one reasonable
|
|
45
|
-
* connector call (EXECUTE_HOST_CALL_TIMEOUT_MS), so sleeping for minutes trades
|
|
46
|
-
* a fast, informative failure for a hung one. A connector-reported window this
|
|
47
|
-
* long isn't truncated — it's declined (see `retryBackoffMs`) and reported
|
|
48
|
-
* verbatim as `error.retryAfterMs`, so the agent, which can afford to wait,
|
|
49
|
-
* decides when to re-issue.
|
|
50
|
-
*/
|
|
51
|
-
export declare const MAX_RETRY_BACKOFF_MS = 10000;
|
|
52
|
-
/**
|
|
53
|
-
* How long to wait before the next attempt, or `undefined` for "don't retry".
|
|
54
|
-
*
|
|
55
|
-
* A connector that read a `Retry-After` header knows the window exactly, so it
|
|
56
|
-
* is honoured **exactly or not at all**: truncating an exponential *guess* is
|
|
57
|
-
* harmless, but truncating a *known* window means deliberately retrying inside
|
|
58
|
-
* a rate limit — the harm this channel exists to prevent. A window longer than
|
|
59
|
-
* `MAX_RETRY_BACKOFF_MS` therefore declines the retry rather than shortening
|
|
60
|
-
* it. (`retryAfterMs` is normalized non-negative, so `0` means "retry now".)
|
|
61
|
-
* Connectors that report no window keep the historical exponential guess.
|
|
62
|
-
*
|
|
63
|
-
* Waits are per attempt, matching the per-attempt `timeoutMs` race in
|
|
64
|
-
* `runCall`. Exported for direct testing.
|
|
65
|
-
*/
|
|
66
|
-
export declare function retryBackoffMs(attempt: number, retryAfterMs: number | undefined): number | undefined;
|
|
67
|
-
/** Smallest accepted `get_result` byte offset. */
|
|
68
|
-
export declare const MIN_RESULT_OFFSET = 0;
|
|
69
|
-
/**
|
|
70
|
-
* The one definition of a usable `get_result` offset: a whole number of bytes
|
|
71
|
-
* at or past {@link MIN_RESULT_OFFSET}. Shared by the registered zod schema and
|
|
72
|
-
* the handler's own check, the way `isValidMaxResultBytes` is shared across the
|
|
73
|
-
* cap's intake points (issue #32) — so a value valid at the wire is valid in
|
|
74
|
-
* process, and the two cannot drift.
|
|
75
|
-
*
|
|
76
|
-
* Everything else is rejected rather than coerced, because coercion is how an
|
|
77
|
-
* out-of-domain offset used to void a result silently: `Math.max(0, NaN)` is
|
|
78
|
-
* `NaN`, which slices to nothing, serializes as `"offset": null`, and reports
|
|
79
|
-
* no `nextOffset` — a caller sees a successful, empty result instead of an
|
|
80
|
-
* error. An offset past the end of the payload stays legal: it is a whole
|
|
81
|
-
* number of bytes, and it answers with an empty final page.
|
|
82
|
-
*/
|
|
83
|
-
export declare function isValidResultOffset(value: number): boolean;
|
|
84
20
|
/**
|
|
85
21
|
* Move a byte `offset` back to the nearest UTF-8 codepoint boundary in
|
|
86
22
|
* `[0, offset]`, so decoding from it never starts mid-character (which emits
|
|
@@ -110,22 +46,6 @@ export declare function alignStartToCharBoundary(bytes: Uint8Array, offset: numb
|
|
|
110
46
|
* ever does. Exported for direct testing of that invariant.
|
|
111
47
|
*/
|
|
112
48
|
export declare function alignEndToCharBoundary(bytes: Uint8Array, offset: number, end: number, total: number): number;
|
|
113
|
-
/**
|
|
114
|
-
* The one serialization every result guard measures, stashes, and pages: JSON
|
|
115
|
-
* text for whatever JSON can represent, and `String(value)` for the returns
|
|
116
|
-
* JSON renders as `undefined` — a handler that returns nothing, a function, or
|
|
117
|
-
* a Symbol. `JSON.stringify` is *typed* as returning `string` while actually
|
|
118
|
-
* returning `undefined` for those, which is how a handler returning `undefined`
|
|
119
|
-
* reached clients as a `{"type":"text"}` block carrying no `text` at all: the
|
|
120
|
-
* size guard measured `enc.encode(undefined)` — the empty string, per the
|
|
121
|
-
* WebIDL default — and emitted the non-string unchanged (issue #42). `null`
|
|
122
|
-
* needs no special case; JSON renders it as `"null"`.
|
|
123
|
-
*
|
|
124
|
-
* Shared by `guardText`, `guardValue`, and execute_code's `guardResultValue` so
|
|
125
|
-
* the three give one answer to the same question. A value JSON cannot serialize
|
|
126
|
-
* at all (a BigInt) still throws, as before, and is reported as a failure.
|
|
127
|
-
*/
|
|
128
|
-
export declare function serializeResultText(value: unknown): string;
|
|
129
49
|
export interface SearchArgs {
|
|
130
50
|
query?: string;
|
|
131
51
|
connector?: string;
|
|
@@ -143,7 +63,7 @@ export interface ListArgs {
|
|
|
143
63
|
/** When false, return cached/observed health without downstream I/O. */
|
|
144
64
|
probe?: boolean;
|
|
145
65
|
}
|
|
146
|
-
|
|
66
|
+
type ResultMode = "mcp" | "value";
|
|
147
67
|
export interface CallArgs {
|
|
148
68
|
address: string;
|
|
149
69
|
args?: Record<string, unknown>;
|
|
@@ -204,7 +124,11 @@ export declare function createMetaTools(registry: RegistryView, baseUrl: string,
|
|
|
204
124
|
defaultToolTimeoutMs?: number;
|
|
205
125
|
/** Per-connector deadline for the list/search/describe probe fan-out. Default 30_000. */
|
|
206
126
|
probeTimeoutMs?: number;
|
|
127
|
+
/** Maximum simultaneous connector discovery operations. Default 4. */
|
|
128
|
+
discoveryConcurrency?: number;
|
|
207
129
|
activity?: ActivityRequestContext;
|
|
130
|
+
/** Inbound request cancellation shared by direct and batch child calls. */
|
|
131
|
+
requestSignal?: AbortSignal;
|
|
208
132
|
/** Runtime continuation for the bounded tail of probe-owned teardown. */
|
|
209
133
|
defer?: DeferredWork;
|
|
210
134
|
}): {
|
|
@@ -223,8 +147,9 @@ export declare function registerMetaTools(server: McpServer, registry: RegistryV
|
|
|
223
147
|
baseUrl: string;
|
|
224
148
|
defaultToolTimeoutMs?: number;
|
|
225
149
|
probeTimeoutMs?: number;
|
|
150
|
+
discoveryConcurrency?: number;
|
|
226
151
|
activity?: ActivityRequestContext;
|
|
152
|
+
requestSignal?: AbortSignal;
|
|
227
153
|
defer?: DeferredWork;
|
|
228
154
|
}): void;
|
|
229
|
-
export {};
|
|
230
155
|
//# sourceMappingURL=meta-tools.d.ts.map
|
package/dist/meta-tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-tools.d.ts","sourceRoot":"","sources":["../src/meta-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"meta-tools.d.ts","sourceRoot":"","sources":["../src/meta-tools.ts"],"names":[],"mappings":"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"}
|