@cat-factory/contracts 0.245.0 → 0.246.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/dist/audit.d.ts +100 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +156 -0
- package/dist/audit.js.map +1 -0
- package/dist/debug-api.d.ts +154 -6
- package/dist/debug-api.d.ts.map +1 -1
- package/dist/debug-api.js +71 -6
- package/dist/debug-api.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/reserved-env-keys.d.ts.map +1 -1
- package/dist/reserved-env-keys.js +5 -0
- package/dist/reserved-env-keys.js.map +1 -1
- package/dist/routes/debug-api.d.ts +20 -0
- package/dist/routes/debug-api.d.ts.map +1 -1
- package/dist/routes/tool-servers.d.ts +128 -1
- package/dist/routes/tool-servers.d.ts.map +1 -1
- package/dist/routes/tool-servers.js +48 -1
- package/dist/routes/tool-servers.js.map +1 -1
- package/dist/tool-servers.d.ts +183 -2
- package/dist/tool-servers.d.ts.map +1 -1
- package/dist/tool-servers.js +104 -0
- package/dist/tool-servers.js.map +1 -1
- package/package.json +1 -1
package/dist/tool-servers.d.ts
CHANGED
|
@@ -38,6 +38,54 @@ export declare const toolServerCredentialSchema: v.ObjectSchema<{
|
|
|
38
38
|
readonly usage: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
39
39
|
}, undefined>;
|
|
40
40
|
export type ToolServerCredential = v.InferOutput<typeof toolServerCredentialSchema>;
|
|
41
|
+
/** Which OAuth grant a declaration uses, mirroring kernel's `McpOAuthConfig['grant']`. */
|
|
42
|
+
export declare const toolServerOAuthGrantSchema: v.PicklistSchema<["authorization_code", "client_credentials"], undefined>;
|
|
43
|
+
export type ToolServerOAuthGrant = v.InferOutput<typeof toolServerOAuthGrantSchema>;
|
|
44
|
+
/**
|
|
45
|
+
* The non-secret state of a workspace's OAuth grant for one tool server: what is persisted beside
|
|
46
|
+
* the sealed tokens, and what the operator surface renders.
|
|
47
|
+
*
|
|
48
|
+
* Never a token, and never a refresh token's presence dressed up as one. The only reason this is a
|
|
49
|
+
* record rather than a boolean is that "connected" is four separate questions an operator asks in
|
|
50
|
+
* sequence — is there a grant, whose account is it, will it keep working, and did the last renewal
|
|
51
|
+
* fail — and a single flag answers the first while silently implying the other three.
|
|
52
|
+
*/
|
|
53
|
+
export declare const toolServerOAuthStatusSchema: v.ObjectSchema<{
|
|
54
|
+
readonly grant: v.PicklistSchema<["authorization_code", "client_credentials"], undefined>;
|
|
55
|
+
/**
|
|
56
|
+
* Whether this workspace holds a grant for the server.
|
|
57
|
+
*
|
|
58
|
+
* For `client_credentials` this is a fact about a CACHED token rather than about a human
|
|
59
|
+
* decision: nothing needs granting, so a false here means only that no token has been minted
|
|
60
|
+
* yet, and a dispatch mints one. The surface therefore renders the two grants differently and
|
|
61
|
+
* this field is deliberately not overloaded to say so.
|
|
62
|
+
*/
|
|
63
|
+
readonly connected: v.BooleanSchema<undefined>;
|
|
64
|
+
/** Scopes the authorization server actually granted, when it named them. */
|
|
65
|
+
readonly scopes: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
66
|
+
/** When the grant was established (epoch ms). */
|
|
67
|
+
readonly connectedAt: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
68
|
+
/** The user who granted it, so a board can tell whose vendor account its runs authenticate as. */
|
|
69
|
+
readonly connectedBy: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
70
|
+
/** When the current access token expires (epoch ms), when the server stated an expiry. */
|
|
71
|
+
readonly expiresAt: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
72
|
+
/**
|
|
73
|
+
* Whether a refresh token was issued.
|
|
74
|
+
*
|
|
75
|
+
* `false` on an `authorization_code` grant is a real and reportable state, not a detail: the
|
|
76
|
+
* connection works until the access token expires and then needs granting again by hand, which
|
|
77
|
+
* an operator can only plan around if the surface says so before it happens.
|
|
78
|
+
*/
|
|
79
|
+
readonly refreshable: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
80
|
+
/**
|
|
81
|
+
* Why the last token exchange failed, when one did. Present ALONGSIDE `connected: true`, which
|
|
82
|
+
* is the point: the grant is still on file and is no longer producing tokens, and reporting that
|
|
83
|
+
* as a clean connection is how an operator ends up debugging the agent instead of the vendor.
|
|
84
|
+
* Scrubbed at the emit site.
|
|
85
|
+
*/
|
|
86
|
+
readonly lastError: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
87
|
+
}, undefined>;
|
|
88
|
+
export type ToolServerOAuthStatus = v.InferOutput<typeof toolServerOAuthStatusSchema>;
|
|
41
89
|
/**
|
|
42
90
|
* One declared tool server, as an operator sees it.
|
|
43
91
|
*
|
|
@@ -87,6 +135,46 @@ export declare const toolServerViewSchema: v.ObjectSchema<{
|
|
|
87
135
|
readonly required: v.BooleanSchema<undefined>;
|
|
88
136
|
readonly usage: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
89
137
|
}, undefined>, undefined>;
|
|
138
|
+
/**
|
|
139
|
+
* The OAuth declaration's state for THIS workspace, when the server declares one. Absent ⇒ the
|
|
140
|
+
* server authenticates with static credentials (or none), and the Connect affordance does not
|
|
141
|
+
* apply to it at all.
|
|
142
|
+
*/
|
|
143
|
+
readonly oauth: v.OptionalSchema<v.ObjectSchema<{
|
|
144
|
+
readonly grant: v.PicklistSchema<["authorization_code", "client_credentials"], undefined>;
|
|
145
|
+
/**
|
|
146
|
+
* Whether this workspace holds a grant for the server.
|
|
147
|
+
*
|
|
148
|
+
* For `client_credentials` this is a fact about a CACHED token rather than about a human
|
|
149
|
+
* decision: nothing needs granting, so a false here means only that no token has been minted
|
|
150
|
+
* yet, and a dispatch mints one. The surface therefore renders the two grants differently and
|
|
151
|
+
* this field is deliberately not overloaded to say so.
|
|
152
|
+
*/
|
|
153
|
+
readonly connected: v.BooleanSchema<undefined>;
|
|
154
|
+
/** Scopes the authorization server actually granted, when it named them. */
|
|
155
|
+
readonly scopes: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
156
|
+
/** When the grant was established (epoch ms). */
|
|
157
|
+
readonly connectedAt: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
158
|
+
/** The user who granted it, so a board can tell whose vendor account its runs authenticate as. */
|
|
159
|
+
readonly connectedBy: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
160
|
+
/** When the current access token expires (epoch ms), when the server stated an expiry. */
|
|
161
|
+
readonly expiresAt: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
162
|
+
/**
|
|
163
|
+
* Whether a refresh token was issued.
|
|
164
|
+
*
|
|
165
|
+
* `false` on an `authorization_code` grant is a real and reportable state, not a detail: the
|
|
166
|
+
* connection works until the access token expires and then needs granting again by hand, which
|
|
167
|
+
* an operator can only plan around if the surface says so before it happens.
|
|
168
|
+
*/
|
|
169
|
+
readonly refreshable: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
170
|
+
/**
|
|
171
|
+
* Why the last token exchange failed, when one did. Present ALONGSIDE `connected: true`, which
|
|
172
|
+
* is the point: the grant is still on file and is no longer producing tokens, and reporting that
|
|
173
|
+
* as a clean connection is how an operator ends up debugging the agent instead of the vendor.
|
|
174
|
+
* Scrubbed at the emit site.
|
|
175
|
+
*/
|
|
176
|
+
readonly lastError: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
177
|
+
}, undefined>, undefined>;
|
|
90
178
|
/** Whether this deployment can reach the server to probe it. */
|
|
91
179
|
readonly probeable: v.BooleanSchema<undefined>;
|
|
92
180
|
/** Why not, when `probeable` is false. Always present in that case, absent otherwise. */
|
|
@@ -135,6 +223,46 @@ export declare const toolServersViewSchema: v.ObjectSchema<{
|
|
|
135
223
|
readonly required: v.BooleanSchema<undefined>;
|
|
136
224
|
readonly usage: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
137
225
|
}, undefined>, undefined>;
|
|
226
|
+
/**
|
|
227
|
+
* The OAuth declaration's state for THIS workspace, when the server declares one. Absent ⇒ the
|
|
228
|
+
* server authenticates with static credentials (or none), and the Connect affordance does not
|
|
229
|
+
* apply to it at all.
|
|
230
|
+
*/
|
|
231
|
+
readonly oauth: v.OptionalSchema<v.ObjectSchema<{
|
|
232
|
+
readonly grant: v.PicklistSchema<["authorization_code", "client_credentials"], undefined>;
|
|
233
|
+
/**
|
|
234
|
+
* Whether this workspace holds a grant for the server.
|
|
235
|
+
*
|
|
236
|
+
* For `client_credentials` this is a fact about a CACHED token rather than about a human
|
|
237
|
+
* decision: nothing needs granting, so a false here means only that no token has been minted
|
|
238
|
+
* yet, and a dispatch mints one. The surface therefore renders the two grants differently and
|
|
239
|
+
* this field is deliberately not overloaded to say so.
|
|
240
|
+
*/
|
|
241
|
+
readonly connected: v.BooleanSchema<undefined>;
|
|
242
|
+
/** Scopes the authorization server actually granted, when it named them. */
|
|
243
|
+
readonly scopes: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, undefined>;
|
|
244
|
+
/** When the grant was established (epoch ms). */
|
|
245
|
+
readonly connectedAt: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
246
|
+
/** The user who granted it, so a board can tell whose vendor account its runs authenticate as. */
|
|
247
|
+
readonly connectedBy: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
248
|
+
/** When the current access token expires (epoch ms), when the server stated an expiry. */
|
|
249
|
+
readonly expiresAt: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
250
|
+
/**
|
|
251
|
+
* Whether a refresh token was issued.
|
|
252
|
+
*
|
|
253
|
+
* `false` on an `authorization_code` grant is a real and reportable state, not a detail: the
|
|
254
|
+
* connection works until the access token expires and then needs granting again by hand, which
|
|
255
|
+
* an operator can only plan around if the surface says so before it happens.
|
|
256
|
+
*/
|
|
257
|
+
readonly refreshable: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
|
|
258
|
+
/**
|
|
259
|
+
* Why the last token exchange failed, when one did. Present ALONGSIDE `connected: true`, which
|
|
260
|
+
* is the point: the grant is still on file and is no longer producing tokens, and reporting that
|
|
261
|
+
* as a clean connection is how an operator ends up debugging the agent instead of the vendor.
|
|
262
|
+
* Scrubbed at the emit site.
|
|
263
|
+
*/
|
|
264
|
+
readonly lastError: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
265
|
+
}, undefined>, undefined>;
|
|
138
266
|
/** Whether this deployment can reach the server to probe it. */
|
|
139
267
|
readonly probeable: v.BooleanSchema<undefined>;
|
|
140
268
|
/** Why not, when `probeable` is false. Always present in that case, absent otherwise. */
|
|
@@ -161,10 +289,16 @@ export type ToolServersView = v.InferOutput<typeof toolServersViewSchema>;
|
|
|
161
289
|
* - `protocol_error` — it answered, but not as an MCP server: a non-JSON body, a JSON-RPC error, a
|
|
162
290
|
* protocol version it would not negotiate. The url probably names something that is not this
|
|
163
291
|
* server.
|
|
292
|
+
* - `oauth_not_connected` — the declaration authenticates with OAuth and this workspace has not
|
|
293
|
+
* granted it. Kept apart from `credentials_missing` because there is no value to type: the
|
|
294
|
+
* remedy is the Connect flow, and an operator sent to the credential checklist would find no row.
|
|
295
|
+
* - `oauth_token_failed` — a grant is on file and produced no access token (revoked or expired
|
|
296
|
+
* refresh, an authorization server that refused, discovery that failed). The dispatch reports
|
|
297
|
+
* the same condition as `oauth_token_failed`; `error` carries the cause.
|
|
164
298
|
* - `not_probeable` — the probe was refused before it began; see
|
|
165
299
|
* {@link toolServerNotProbeableReasonSchema}.
|
|
166
300
|
*/
|
|
167
|
-
export declare const toolServerProbeStatusSchema: v.PicklistSchema<["ok", "credentials_missing", "credential_refused", "unreachable", "http_error", "protocol_error", "not_probeable"], undefined>;
|
|
301
|
+
export declare const toolServerProbeStatusSchema: v.PicklistSchema<["ok", "credentials_missing", "credential_refused", "oauth_not_connected", "oauth_token_failed", "unreachable", "http_error", "protocol_error", "not_probeable"], undefined>;
|
|
168
302
|
export type ToolServerProbeStatus = v.InferOutput<typeof toolServerProbeStatusSchema>;
|
|
169
303
|
/**
|
|
170
304
|
* Whether the tools the definition NARROWED to actually exist on the server.
|
|
@@ -192,7 +326,7 @@ export type ToolServerAllowedToolsCheck = v.InferOutput<typeof toolServerAllowed
|
|
|
192
326
|
/** What one probe answered. */
|
|
193
327
|
export declare const toolServerProbeResultSchema: v.ObjectSchema<{
|
|
194
328
|
readonly serverId: v.StringSchema<undefined>;
|
|
195
|
-
readonly status: v.PicklistSchema<["ok", "credentials_missing", "credential_refused", "unreachable", "http_error", "protocol_error", "not_probeable"], undefined>;
|
|
329
|
+
readonly status: v.PicklistSchema<["ok", "credentials_missing", "credential_refused", "oauth_not_connected", "oauth_token_failed", "unreachable", "http_error", "protocol_error", "not_probeable"], undefined>;
|
|
196
330
|
/** Present when `status` is `not_probeable`, absent otherwise. */
|
|
197
331
|
readonly notProbeableReason: v.OptionalSchema<v.PicklistSchema<["stdio_transport", "container_local_url", "url_not_allowed"], undefined>, undefined>;
|
|
198
332
|
/** The `serverInfo` the handshake returned. Present on `ok`. */
|
|
@@ -233,6 +367,53 @@ export declare const toolServerProbeResultSchema: v.ObjectSchema<{
|
|
|
233
367
|
readonly error: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
234
368
|
}, undefined>;
|
|
235
369
|
export type ToolServerProbeResult = v.InferOutput<typeof toolServerProbeResultSchema>;
|
|
370
|
+
/**
|
|
371
|
+
* What starting an OAuth grant answers: the vendor's own authorization URL, for the SPA to send
|
|
372
|
+
* the operator to.
|
|
373
|
+
*
|
|
374
|
+
* A url handed back rather than a 302, because the caller is a `fetch` from the settings panel and
|
|
375
|
+
* a redirect there would be followed by the browser into a cross-origin document the SPA cannot
|
|
376
|
+
* observe. It also keeps the refusals (`503` when the redirect URL is unconfigured, `409` when the
|
|
377
|
+
* declaration is not an `authorization_code` one) as ordinary error envelopes with a
|
|
378
|
+
* `details.reason` the panel can translate, which a redirect response cannot carry.
|
|
379
|
+
*/
|
|
380
|
+
export declare const toolServerOAuthStartSchema: v.ObjectSchema<{
|
|
381
|
+
readonly url: v.StringSchema<undefined>;
|
|
382
|
+
}, undefined>;
|
|
383
|
+
export type ToolServerOAuthStart = v.InferOutput<typeof toolServerOAuthStartSchema>;
|
|
384
|
+
/**
|
|
385
|
+
* What the SPA hands back to finish a grant: the two values the vendor put in the redirect it sent
|
|
386
|
+
* the operator's browser to.
|
|
387
|
+
*
|
|
388
|
+
* POSTED BY THE SPA rather than read off a redirect the backend receives, and that is the whole
|
|
389
|
+
* security shape of this flow. A vendor's redirect is a third-party browser navigation carrying no
|
|
390
|
+
* `Authorization` header, so a backend route receiving it directly cannot know WHO is completing
|
|
391
|
+
* the grant, and the session and permission checks such a route makes are unreachable code on any
|
|
392
|
+
* deployment where sessions are bearer tokens. Landing the redirect on an SPA page that re-presents
|
|
393
|
+
* these two values over the authenticated API is what makes the user binding and the
|
|
394
|
+
* `secrets.manage` re-check real rather than decorative.
|
|
395
|
+
*
|
|
396
|
+
* Neither value is a secret this side minted: `code` is single-use at the authorization server and
|
|
397
|
+
* `state` is sealed, so the pair is inert to anyone who cannot also open the seal.
|
|
398
|
+
*/
|
|
399
|
+
export declare const toolServerOAuthCompletionSchema: v.ObjectSchema<{
|
|
400
|
+
readonly code: v.StringSchema<undefined>;
|
|
401
|
+
readonly state: v.StringSchema<undefined>;
|
|
402
|
+
}, undefined>;
|
|
403
|
+
export type ToolServerOAuthCompletion = v.InferOutput<typeof toolServerOAuthCompletionSchema>;
|
|
404
|
+
/**
|
|
405
|
+
* What completing a grant answers: which server was connected, so the page that finishes the flow
|
|
406
|
+
* can name it before sending the operator back to the panel.
|
|
407
|
+
*
|
|
408
|
+
* The server id comes from the SEALED state rather than from anything the caller sent, which is
|
|
409
|
+
* why it is worth returning at all: it is the one fact the SPA could not otherwise know, having
|
|
410
|
+
* handed off to the vendor and come back on a fixed redirect URL that carries no board or server.
|
|
411
|
+
*/
|
|
412
|
+
export declare const toolServerOAuthCompletedSchema: v.ObjectSchema<{
|
|
413
|
+
readonly serverId: v.StringSchema<undefined>;
|
|
414
|
+
readonly workspaceId: v.StringSchema<undefined>;
|
|
415
|
+
}, undefined>;
|
|
416
|
+
export type ToolServerOAuthCompleted = v.InferOutput<typeof toolServerOAuthCompletedSchema>;
|
|
236
417
|
/**
|
|
237
418
|
* How many tool NAMES a probe result carries back.
|
|
238
419
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-servers.d.ts","sourceRoot":"","sources":["../src/tool-servers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AA8B5B,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,gDAAgC,CAAA;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,kCAAkC,4FAI7C,CAAA;AACF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAEnG;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B;;;;aAIrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB;;;;IAI/B;;;;OAIG;;IAEH,8EAA8E;;IAE9E;;;;;;;OAOG;;IAEH;;;;;;;;;OASG;;IAEH,6FAA6F;;IAE7F,4CAA4C;;;;;;IAE5C,gEAAgE;;IAEhE,yFAAyF;;aAEzF,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE,0FAA0F;AAC1F,eAAO,MAAM,qBAAqB;;;;;
|
|
1
|
+
{"version":3,"file":"tool-servers.d.ts","sourceRoot":"","sources":["../src/tool-servers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AA8B5B,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,gDAAgC,CAAA;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,kCAAkC,4FAI7C,CAAA;AACF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAEnG;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B;;;;aAIrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF,0FAA0F;AAC1F,eAAO,MAAM,0BAA0B,2EAA2D,CAAA;AAClG,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B;;IAEtC;;;;;;;OAOG;;IAEH,4EAA4E;;IAE5E,iDAAiD;;IAEjD,kGAAkG;;IAElG,0FAA0F;;IAE1F;;;;;;OAMG;;IAEH;;;;;OAKG;;aAEH,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAErF;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB;;;;IAI/B;;;;OAIG;;IAEH,8EAA8E;;IAE9E;;;;;;;OAOG;;IAEH;;;;;;;;;OASG;;IAEH,6FAA6F;;IAE7F,4CAA4C;;;;;;IAE5C;;;;OAIG;;;QApFH;;;;;;;WAOG;;QAEH,4EAA4E;;QAE5E,iDAAiD;;QAEjD,kGAAkG;;QAElG,0FAA0F;;QAE1F;;;;;;WAMG;;QAEH;;;;;WAKG;;;IAwDH,gEAAgE;;IAEhE,yFAAyF;;aAEzF,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEvE,0FAA0F;AAC1F,eAAO,MAAM,qBAAqB;;;;;QA9ChC;;;;WAIG;;QAEH,8EAA8E;;QAE9E;;;;;;;WAOG;;QAEH;;;;;;;;;WASG;;QAEH,6FAA6F;;QAE7F,4CAA4C;;;;;;QAE5C;;;;WAIG;;;YApFH;;;;;;;eAOG;;YAEH,4EAA4E;;YAE5E,iDAAiD;;YAEjD,kGAAkG;;YAElG,0FAA0F;;YAE1F;;;;;;eAMG;;YAEH;;;;;eAKG;;;QAwDH,gEAAgE;;QAEhE,yFAAyF;;;aAQzF,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,2BAA2B,+LAUtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAErF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iCAAiC;;IAE5C,gFAAgF;;IAEhF,6FAA6F;;aAE7F,CAAA;AACF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,iCAAiC,CAAC,CAAA;AAEjG,+BAA+B;AAC/B,eAAO,MAAM,2BAA2B;;;IAGtC,kEAAkE;;IAElE,gEAAgE;;;IAGhE,mEAAmE;;IAEnE;;;;;OAKG;;IAEH,0FAA0F;;IAE1F,oEAAoE;;IAEpE,mGAAmG;;;QA7BnG,gFAAgF;;QAEhF,6FAA6F;;;IA6B7F,oFAAoF;;IAEpF,4FAA4F;;IAE5F,mEAAmE;;IAEnE;;;;OAIG;;aAEH,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAErF;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B;;aAErC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEnF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,+BAA+B;;;aAG1C,CAAA;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAE7F;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B;;;aAGzC,CAAA;AACF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAE3F;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAA;AAE1C;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,yEAAyE;AACzE,eAAO,MAAM,oBAAoB,QAAS,CAAA"}
|
package/dist/tool-servers.js
CHANGED
|
@@ -66,6 +66,52 @@ export const toolServerCredentialSchema = v.object({
|
|
|
66
66
|
required: v.boolean(),
|
|
67
67
|
usage: v.optional(v.string()),
|
|
68
68
|
});
|
|
69
|
+
/** Which OAuth grant a declaration uses, mirroring kernel's `McpOAuthConfig['grant']`. */
|
|
70
|
+
export const toolServerOAuthGrantSchema = v.picklist(['authorization_code', 'client_credentials']);
|
|
71
|
+
/**
|
|
72
|
+
* The non-secret state of a workspace's OAuth grant for one tool server: what is persisted beside
|
|
73
|
+
* the sealed tokens, and what the operator surface renders.
|
|
74
|
+
*
|
|
75
|
+
* Never a token, and never a refresh token's presence dressed up as one. The only reason this is a
|
|
76
|
+
* record rather than a boolean is that "connected" is four separate questions an operator asks in
|
|
77
|
+
* sequence — is there a grant, whose account is it, will it keep working, and did the last renewal
|
|
78
|
+
* fail — and a single flag answers the first while silently implying the other three.
|
|
79
|
+
*/
|
|
80
|
+
export const toolServerOAuthStatusSchema = v.object({
|
|
81
|
+
grant: toolServerOAuthGrantSchema,
|
|
82
|
+
/**
|
|
83
|
+
* Whether this workspace holds a grant for the server.
|
|
84
|
+
*
|
|
85
|
+
* For `client_credentials` this is a fact about a CACHED token rather than about a human
|
|
86
|
+
* decision: nothing needs granting, so a false here means only that no token has been minted
|
|
87
|
+
* yet, and a dispatch mints one. The surface therefore renders the two grants differently and
|
|
88
|
+
* this field is deliberately not overloaded to say so.
|
|
89
|
+
*/
|
|
90
|
+
connected: v.boolean(),
|
|
91
|
+
/** Scopes the authorization server actually granted, when it named them. */
|
|
92
|
+
scopes: v.optional(v.array(v.string())),
|
|
93
|
+
/** When the grant was established (epoch ms). */
|
|
94
|
+
connectedAt: v.optional(v.number()),
|
|
95
|
+
/** The user who granted it, so a board can tell whose vendor account its runs authenticate as. */
|
|
96
|
+
connectedBy: v.optional(v.string()),
|
|
97
|
+
/** When the current access token expires (epoch ms), when the server stated an expiry. */
|
|
98
|
+
expiresAt: v.optional(v.number()),
|
|
99
|
+
/**
|
|
100
|
+
* Whether a refresh token was issued.
|
|
101
|
+
*
|
|
102
|
+
* `false` on an `authorization_code` grant is a real and reportable state, not a detail: the
|
|
103
|
+
* connection works until the access token expires and then needs granting again by hand, which
|
|
104
|
+
* an operator can only plan around if the surface says so before it happens.
|
|
105
|
+
*/
|
|
106
|
+
refreshable: v.optional(v.boolean()),
|
|
107
|
+
/**
|
|
108
|
+
* Why the last token exchange failed, when one did. Present ALONGSIDE `connected: true`, which
|
|
109
|
+
* is the point: the grant is still on file and is no longer producing tokens, and reporting that
|
|
110
|
+
* as a clean connection is how an operator ends up debugging the agent instead of the vendor.
|
|
111
|
+
* Scrubbed at the emit site.
|
|
112
|
+
*/
|
|
113
|
+
lastError: v.optional(v.string()),
|
|
114
|
+
});
|
|
69
115
|
/**
|
|
70
116
|
* One declared tool server, as an operator sees it.
|
|
71
117
|
*
|
|
@@ -111,6 +157,12 @@ export const toolServerViewSchema = v.object({
|
|
|
111
157
|
allowedTools: v.optional(v.array(v.string())),
|
|
112
158
|
/** The credentials it asks for, by name. */
|
|
113
159
|
credentials: v.array(toolServerCredentialSchema),
|
|
160
|
+
/**
|
|
161
|
+
* The OAuth declaration's state for THIS workspace, when the server declares one. Absent ⇒ the
|
|
162
|
+
* server authenticates with static credentials (or none), and the Connect affordance does not
|
|
163
|
+
* apply to it at all.
|
|
164
|
+
*/
|
|
165
|
+
oauth: v.optional(toolServerOAuthStatusSchema),
|
|
114
166
|
/** Whether this deployment can reach the server to probe it. */
|
|
115
167
|
probeable: v.boolean(),
|
|
116
168
|
/** Why not, when `probeable` is false. Always present in that case, absent otherwise. */
|
|
@@ -139,6 +191,12 @@ export const toolServersViewSchema = v.object({
|
|
|
139
191
|
* - `protocol_error` — it answered, but not as an MCP server: a non-JSON body, a JSON-RPC error, a
|
|
140
192
|
* protocol version it would not negotiate. The url probably names something that is not this
|
|
141
193
|
* server.
|
|
194
|
+
* - `oauth_not_connected` — the declaration authenticates with OAuth and this workspace has not
|
|
195
|
+
* granted it. Kept apart from `credentials_missing` because there is no value to type: the
|
|
196
|
+
* remedy is the Connect flow, and an operator sent to the credential checklist would find no row.
|
|
197
|
+
* - `oauth_token_failed` — a grant is on file and produced no access token (revoked or expired
|
|
198
|
+
* refresh, an authorization server that refused, discovery that failed). The dispatch reports
|
|
199
|
+
* the same condition as `oauth_token_failed`; `error` carries the cause.
|
|
142
200
|
* - `not_probeable` — the probe was refused before it began; see
|
|
143
201
|
* {@link toolServerNotProbeableReasonSchema}.
|
|
144
202
|
*/
|
|
@@ -146,6 +204,8 @@ export const toolServerProbeStatusSchema = v.picklist([
|
|
|
146
204
|
'ok',
|
|
147
205
|
'credentials_missing',
|
|
148
206
|
'credential_refused',
|
|
207
|
+
'oauth_not_connected',
|
|
208
|
+
'oauth_token_failed',
|
|
149
209
|
'unreachable',
|
|
150
210
|
'http_error',
|
|
151
211
|
'protocol_error',
|
|
@@ -210,6 +270,50 @@ export const toolServerProbeResultSchema = v.object({
|
|
|
210
270
|
*/
|
|
211
271
|
error: v.optional(v.string()),
|
|
212
272
|
});
|
|
273
|
+
/**
|
|
274
|
+
* What starting an OAuth grant answers: the vendor's own authorization URL, for the SPA to send
|
|
275
|
+
* the operator to.
|
|
276
|
+
*
|
|
277
|
+
* A url handed back rather than a 302, because the caller is a `fetch` from the settings panel and
|
|
278
|
+
* a redirect there would be followed by the browser into a cross-origin document the SPA cannot
|
|
279
|
+
* observe. It also keeps the refusals (`503` when the redirect URL is unconfigured, `409` when the
|
|
280
|
+
* declaration is not an `authorization_code` one) as ordinary error envelopes with a
|
|
281
|
+
* `details.reason` the panel can translate, which a redirect response cannot carry.
|
|
282
|
+
*/
|
|
283
|
+
export const toolServerOAuthStartSchema = v.object({
|
|
284
|
+
url: v.string(),
|
|
285
|
+
});
|
|
286
|
+
/**
|
|
287
|
+
* What the SPA hands back to finish a grant: the two values the vendor put in the redirect it sent
|
|
288
|
+
* the operator's browser to.
|
|
289
|
+
*
|
|
290
|
+
* POSTED BY THE SPA rather than read off a redirect the backend receives, and that is the whole
|
|
291
|
+
* security shape of this flow. A vendor's redirect is a third-party browser navigation carrying no
|
|
292
|
+
* `Authorization` header, so a backend route receiving it directly cannot know WHO is completing
|
|
293
|
+
* the grant, and the session and permission checks such a route makes are unreachable code on any
|
|
294
|
+
* deployment where sessions are bearer tokens. Landing the redirect on an SPA page that re-presents
|
|
295
|
+
* these two values over the authenticated API is what makes the user binding and the
|
|
296
|
+
* `secrets.manage` re-check real rather than decorative.
|
|
297
|
+
*
|
|
298
|
+
* Neither value is a secret this side minted: `code` is single-use at the authorization server and
|
|
299
|
+
* `state` is sealed, so the pair is inert to anyone who cannot also open the seal.
|
|
300
|
+
*/
|
|
301
|
+
export const toolServerOAuthCompletionSchema = v.object({
|
|
302
|
+
code: v.string(),
|
|
303
|
+
state: v.string(),
|
|
304
|
+
});
|
|
305
|
+
/**
|
|
306
|
+
* What completing a grant answers: which server was connected, so the page that finishes the flow
|
|
307
|
+
* can name it before sending the operator back to the panel.
|
|
308
|
+
*
|
|
309
|
+
* The server id comes from the SEALED state rather than from anything the caller sent, which is
|
|
310
|
+
* why it is worth returning at all: it is the one fact the SPA could not otherwise know, having
|
|
311
|
+
* handed off to the vendor and come back on a fixed redirect URL that carries no board or server.
|
|
312
|
+
*/
|
|
313
|
+
export const toolServerOAuthCompletedSchema = v.object({
|
|
314
|
+
serverId: v.string(),
|
|
315
|
+
workspaceId: v.string(),
|
|
316
|
+
});
|
|
213
317
|
/**
|
|
214
318
|
* How many tool NAMES a probe result carries back.
|
|
215
319
|
*
|
package/dist/tool-servers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-servers.js","sourceRoot":"","sources":["../src/tool-servers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,8EAA8E;AAC9E,6FAA6F;AAC7F,yBAAyB;AACzB,EAAE;AACF,oGAAoG;AACpG,+FAA+F;AAC/F,mGAAmG;AACnG,iGAAiG;AACjG,oGAAoG;AACpG,EAAE;AACF,sCAAsC;AACtC,EAAE;AACF,oGAAoG;AACpG,6FAA6F;AAC7F,mDAAmD;AACnD,qGAAqG;AACrG,gBAAgB;AAChB,EAAE;AACF,oGAAoG;AACpG,kGAAkG;AAClG,iGAAiG;AACjG,uDAAuD;AACvD,EAAE;AACF,mGAAmG;AACnG,6FAA6F;AAC7F,8EAA8E;AAC9E,8EAA8E;AAE9E,qFAAqF;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;AAGtE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC3D,iBAAiB;IACjB,qBAAqB;IACrB,iBAAiB;CAClB,CAAC,CAAA;AAGF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;IACrB,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC9B,CAAC,CAAA;AAGF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,SAAS,EAAE,yBAAyB;IACpC;;;;OAIG;IACH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,8EAA8E;IAC9E,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC;;;;;;;OAOG;IACH,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B;;;;;;;;;OASG;IACH,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACtC,6FAA6F;IAC7F,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,4CAA4C;IAC5C,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC;IAChD,gEAAgE;IAChE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,yFAAyF;IACzF,kBAAkB,EAAE,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CACnE,CAAC,CAAA;AAGF,0FAA0F;AAC1F,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;CACvC,CAAC,CAAA;AAGF
|
|
1
|
+
{"version":3,"file":"tool-servers.js","sourceRoot":"","sources":["../src/tool-servers.ts"],"names":[],"mappings":"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"}
|