@zackbart/connecta 0.24.4 → 0.26.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/AGENTS.md +43 -12
- package/CHANGELOG.md +524 -0
- package/README.md +32 -15
- package/SECURITY.md +6 -5
- package/bin/connecta.mjs +5 -1
- package/dist/activity.d.ts +10 -3
- package/dist/activity.js +10 -1
- package/dist/advertised-schema.js +53 -0
- package/dist/artifacts/connector.d.ts +55 -0
- package/dist/artifacts/connector.js +724 -0
- package/dist/artifacts/document.js +76 -0
- package/dist/artifacts/guide.js +140 -0
- package/dist/artifacts/html-scan.js +329 -0
- package/dist/artifacts/json.js +68 -0
- package/dist/artifacts/kv-store.d.ts +20 -0
- package/dist/artifacts/kv-store.js +140 -0
- package/dist/artifacts/markdown.js +449 -0
- package/dist/artifacts/module.d.ts +37 -0
- package/dist/artifacts/module.js +60 -0
- package/dist/artifacts/operations.d.ts +195 -0
- package/dist/artifacts/operations.js +944 -0
- package/dist/artifacts/refresh.d.ts +53 -0
- package/dist/artifacts/refresh.js +235 -0
- package/dist/artifacts/routes.js +194 -0
- package/dist/artifacts/types.d.ts +214 -0
- package/dist/artifacts/types.js +22 -0
- package/dist/artifacts/validate.d.ts +62 -0
- package/dist/artifacts/validate.js +652 -0
- package/dist/artifacts.d.ts +6 -0
- package/dist/artifacts.js +9 -0
- package/dist/auth/downstream-oauth.js +490 -106
- package/dist/call-admission.js +139 -113
- package/dist/catalog-service.js +152 -106
- package/dist/catalog.js +297 -38
- package/dist/concurrency.js +24 -23
- package/dist/connector-access.d.ts +18 -4
- package/dist/connector-access.js +65 -20
- package/dist/connector-caller.d.ts +8 -0
- package/dist/connector-caller.js +19 -0
- package/dist/connector-scope.js +6 -37
- package/dist/connectors/api.d.ts +2 -2
- package/dist/connectors/remote-mcp.d.ts +6 -5
- package/dist/connectors/remote-mcp.js +330 -240
- package/dist/credential-contract.d.ts +9 -0
- package/dist/credential-rules.js +2 -2
- package/dist/credentials.d.ts +6 -1
- package/dist/credentials.js +45 -3
- package/dist/errors.d.ts +16 -1
- package/dist/errors.js +28 -0
- package/dist/execute.js +745 -282
- package/dist/executor-admission.d.ts +11 -1
- package/dist/executor-admission.js +145 -63
- package/dist/executors/quickjs-runtime.js +4 -2
- package/dist/executors/quickjs.js +255 -212
- package/dist/fix-prompt.js +37 -0
- package/dist/index.d.ts +72 -7
- package/dist/index.js +281 -26
- package/dist/invocation.js +371 -286
- package/dist/meta-tools.js +213 -94
- package/dist/module-contracts.d.ts +21 -1
- package/dist/oauth-callback-outcome.js +94 -0
- package/dist/oauth-sealing.js +29 -0
- package/dist/operator-ui/fix-prompts.js +87 -0
- package/dist/operator-ui/generated.js +2 -2
- package/dist/operator-ui/model.d.ts +103 -1
- package/dist/operator-ui/setup-commands.js +53 -0
- package/dist/operator-ui/view.js +128 -3
- package/dist/program-source.js +321 -0
- package/dist/providers/notion.js +2 -2
- package/dist/providers/revenuecat.js +32 -5
- package/dist/providers/stripe.d.ts +3 -2
- package/dist/providers/vercel.js +1 -1
- package/dist/registry.d.ts +43 -7
- package/dist/registry.js +434 -288
- package/dist/resumable.js +1291 -0
- package/dist/routes/activity.js +74 -154
- package/dist/routes/actor-labels.js +114 -0
- package/dist/routes/credentials.js +196 -163
- package/dist/routes/mcp.js +228 -112
- package/dist/routes/oauth-management.js +73 -71
- package/dist/routes/oauth.js +44 -16
- package/dist/routes/operator.js +83 -0
- package/dist/routes/shared.d.ts +25 -1
- package/dist/routes/shared.js +20 -2
- package/dist/routes/ui-data.js +211 -0
- package/dist/routes/ui.js +76 -35
- package/dist/run-journal.js +347 -0
- package/dist/runtime/admission.js +43 -0
- package/dist/runtime/call-admission.js +67 -0
- package/dist/runtime/connector-scope.js +72 -0
- package/dist/runtime/run.js +174 -0
- package/dist/runtime/services.js +130 -0
- package/dist/runtime/shared-read.js +106 -0
- package/dist/runtime/storage.js +66 -0
- package/dist/server.js +137 -89
- package/dist/skills.js +28 -9
- package/dist/storage/file.js +39 -2
- package/dist/storage/memory.js +28 -16
- package/dist/timeout.js +39 -43
- package/dist/tool-safety.d.ts +27 -1
- package/dist/tool-safety.js +31 -0
- package/dist/types.d.ts +45 -7
- package/dist/ui.d.ts +25 -4
- package/dist/ui.js +77 -167
- package/dist/url-safety.js +157 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/documentation/architecture.md +367 -16
- package/documentation/auth.md +163 -2
- package/documentation/code-mode.md +274 -56
- package/documentation/meta-tools.md +200 -44
- package/ethos.md +46 -47
- package/examples/worker/AGENTS.md +6 -0
- package/examples/worker/README.md +224 -14
- package/examples/worker/src/d1-activity-row.ts +14 -2
- package/examples/worker/src/d1-activity.ts +4 -2
- package/examples/worker/src/d1-storage.ts +116 -0
- package/examples/worker/src/index.ts +42 -7
- package/examples/worker/src/r2-artifact-blobs.ts +29 -0
- package/examples/worker/wrangler.jsonc +21 -5
- package/package.json +16 -4
- package/templates/node/AGENTS.md +9 -2
- package/templates/node/README.md +31 -3
- package/templates/node/package.json +1 -1
- package/templates/node/src/index.ts +27 -0
- package/dist/auth/downstream-oauth.d.ts +0 -200
- package/dist/catalog-fingerprint.d.ts +0 -19
- package/dist/catalog-limits.d.ts +0 -9
- package/dist/catalog-service.d.ts +0 -263
- package/dist/catalog.d.ts +0 -87
- package/dist/concurrency.d.ts +0 -3
- package/dist/connectors/guarded-fetch.d.ts +0 -96
- package/dist/credential-rules.d.ts +0 -85
- package/dist/execute.d.ts +0 -154
- package/dist/executor-result.d.ts +0 -10
- package/dist/executors/quickjs-child.d.ts +0 -1
- package/dist/executors/quickjs-protocol.d.ts +0 -67
- package/dist/favicon.d.ts +0 -1
- package/dist/identity.d.ts +0 -4
- package/dist/invocation.d.ts +0 -74
- package/dist/mcp-result.d.ts +0 -8
- package/dist/meta-tools.d.ts +0 -129
- package/dist/operator-ui/generated.d.ts +0 -2
- package/dist/operator-ui/view.d.ts +0 -188
- package/dist/result-shapes.d.ts +0 -13
- package/dist/retired-toolkits.d.ts +0 -2
- package/dist/routes/activity.d.ts +0 -2
- package/dist/routes/credentials.d.ts +0 -2
- package/dist/routes/mcp.d.ts +0 -10
- package/dist/routes/oauth-management.d.ts +0 -2
- package/dist/routes/oauth.d.ts +0 -2
- package/dist/routes/ui.d.ts +0 -2
- package/dist/server.d.ts +0 -9
- package/dist/skills.d.ts +0 -44
- package/dist/timeout.d.ts +0 -21
package/dist/providers/notion.js
CHANGED
|
@@ -89,7 +89,7 @@ function notionFailure(status, body, headers) {
|
|
|
89
89
|
return new ConnectorCallError("unavailable", `${labelled} Notion is overloaded; retry after the reported window.`, { retryAfterMs: retryAfter ?? 5_000 });
|
|
90
90
|
}
|
|
91
91
|
if (status === 401) {
|
|
92
|
-
return new ConnectorCallError("auth_required", `${labelled} The Notion integration token is missing or invalid
|
|
92
|
+
return new ConnectorCallError("auth_required", `${labelled} The Notion integration token is missing or invalid. Call authorize_connector for recovery options. When available, an operator can set a valid token in this connection in the operator UI.`);
|
|
93
93
|
}
|
|
94
94
|
if (status === 403) {
|
|
95
95
|
return new ConnectorCallError("connector_call_failed", `${labelled} The token is valid but this integration is not allowed to perform this operation. An operator must enable the matching capability on the Notion integration (comment capabilities are off by default) or share the object with it. Re-authorizing will not help.`, { retryable: false });
|
|
@@ -133,7 +133,7 @@ const send = guardedFetch({
|
|
|
133
133
|
authenticate: async (ctx) => {
|
|
134
134
|
const token = (await ctx.credential?.get())?.trim();
|
|
135
135
|
if (!token) {
|
|
136
|
-
throw new ConnectorCallError("auth_required", "No Notion integration token is configured for this connector
|
|
136
|
+
throw new ConnectorCallError("auth_required", "No Notion integration token is configured for this connector. Call authorize_connector for recovery options. When available, an operator can add the token in this connection in the operator UI.");
|
|
137
137
|
}
|
|
138
138
|
return { Authorization: `Bearer ${token}` };
|
|
139
139
|
},
|
|
@@ -5,7 +5,7 @@ import { defined } from "../connectors/api.js";
|
|
|
5
5
|
export const REVENUECAT_MCP_ENDPOINT = "https://mcp.revenuecat.ai/mcp";
|
|
6
6
|
/**
|
|
7
7
|
* Reviewed reads, every `Read` row of RevenueCat's tool reference as read on
|
|
8
|
-
* 2026-
|
|
8
|
+
* 2026-09-21 (P5). The list is a superset: plan, platform, and beta enrollment
|
|
9
9
|
* gate parts of the catalog, so a name this account never returns costs
|
|
10
10
|
* nothing while an unlisted new one fails closed.
|
|
11
11
|
*/
|
|
@@ -23,7 +23,11 @@ const READ_ONLY_TOOLS = new Set([
|
|
|
23
23
|
// Products and prices
|
|
24
24
|
"get-product",
|
|
25
25
|
"get-product-store-state",
|
|
26
|
+
// Deprecated in RevenueCat's reference — superseded by the plan family's
|
|
27
|
+
// own read-back below — but still served, so the classification stands.
|
|
26
28
|
"get-product-store-state-operation",
|
|
29
|
+
"get-product-store-state-plan",
|
|
30
|
+
"list-product-store-state-plans",
|
|
27
31
|
"list-products",
|
|
28
32
|
// Entitlements
|
|
29
33
|
"get-entitlement",
|
|
@@ -100,19 +104,36 @@ const WRITE_TOOLS = new Map([
|
|
|
100
104
|
["archive-product", "destructive"],
|
|
101
105
|
["create-product", "additive"],
|
|
102
106
|
// Named `create-`, but "Configure prices for a product": the price set
|
|
103
|
-
// already exists, so this overwrites it, and it is money-facing.
|
|
107
|
+
// already exists, so this overwrites it, and it is money-facing. Deprecated
|
|
108
|
+
// in RevenueCat's reference; products are priced through the plan family
|
|
109
|
+
// below, but the tool is still served, so the classification stands.
|
|
104
110
|
["create-product-prices", "destructive"],
|
|
105
111
|
// "Fills *missing* App Store subscription territory prices" — by
|
|
106
|
-
// RevenueCat's own word it writes only where nothing is set.
|
|
112
|
+
// RevenueCat's own word it writes only where nothing is set. Deprecated in
|
|
113
|
+
// RevenueCat's reference; still served, so the classification stands.
|
|
107
114
|
["equalize-subscription-prices", "additive"],
|
|
108
|
-
// An upsert.
|
|
115
|
+
// An upsert. Deprecated in RevenueCat's reference — the store-state plan
|
|
116
|
+
// family below replaces it — but still served, so the classification stands.
|
|
109
117
|
["set-product-store-state", "destructive"],
|
|
110
118
|
// Sends products to Apple for review.
|
|
111
119
|
["submit-products-to-store", "destructive"],
|
|
112
120
|
["unarchive-product", "destructive"],
|
|
113
121
|
["update-product", "destructive"],
|
|
114
122
|
// Reserves a new App Store Connect review screenshot slot; replaces nothing.
|
|
123
|
+
// Deprecated in RevenueCat's reference; still served, so the classification
|
|
124
|
+
// stands.
|
|
115
125
|
["upload-product-store-state-screenshot", "additive"],
|
|
126
|
+
// Product store state plans, the workflow RevenueCat deprecated
|
|
127
|
+
// `set-product-store-state` for. Create brings a draft into being and
|
|
128
|
+
// touches nothing else; plan recomputes an existing plan's proposed change,
|
|
129
|
+
// overwriting its previous planning; apply pushes the whole plan into
|
|
130
|
+
// RevenueCat and the app stores; update and discard act on an existing plan
|
|
131
|
+
// by name. Every step past create is asynchronous.
|
|
132
|
+
["create-product-store-state-plan", "additive"],
|
|
133
|
+
["plan-product-store-state-plan", "destructive"],
|
|
134
|
+
["apply-product-store-state-plan", "destructive"],
|
|
135
|
+
["update-product-store-state-plan", "destructive"],
|
|
136
|
+
["discard-product-store-state-plan", "destructive"],
|
|
116
137
|
// Entitlements
|
|
117
138
|
["archive-entitlement", "destructive"],
|
|
118
139
|
// Attach adds membership and removes nothing; detach is the destructive half.
|
|
@@ -135,6 +156,11 @@ const WRITE_TOOLS = new Map([
|
|
|
135
156
|
// Targeting and audiences
|
|
136
157
|
["create-audience", "additive"],
|
|
137
158
|
["update-audience", "destructive"],
|
|
159
|
+
// Targeting rules follow the verb: create brings one into being, update
|
|
160
|
+
// and delete act on a rule the project already has.
|
|
161
|
+
["create-targeting-rule", "additive"],
|
|
162
|
+
["update-targeting-rule", "destructive"],
|
|
163
|
+
["delete-targeting-rule", "destructive"],
|
|
138
164
|
// Paywalls
|
|
139
165
|
["attach-offering-to-paywall", "destructive"],
|
|
140
166
|
["detach-offering-from-paywall", "destructive"],
|
|
@@ -204,7 +230,8 @@ function sharedUsageGuide() {
|
|
|
204
230
|
- Customer and subscription objects are large, and a customer's history is larger. Page with the cursor the list returned rather than raising the page size, and reduce inside \`execute_code\` — select the fields the question needs and return those, not the whole object.
|
|
205
231
|
- Whether a customer should have access is \`gives_access\` on each subscription from \`list-subscriptions\`, which RevenueCat calls the authoritative flag. \`status\` and \`expires_date\` describe the store-side state and disagree with it during grace periods, billing retries, and promotional grants — answer access questions from \`gives_access\` and say which subscription it came from.
|
|
206
232
|
- \`get-chart-data\` is the metrics path: read \`get-chart-options-schema\` for the chart you want before calling it, rather than guessing an option name. \`get-overview-metrics\` and \`get-revenue-metric\` answer the summary questions in one call.
|
|
207
|
-
- \`create-paywall-ai
|
|
233
|
+
- \`create-paywall-ai\` and \`edit-paywall-ai\` are asynchronous. Poll the task id they return with \`get-paywall-ai-task\` rather than assuming the work finished when the call returned.
|
|
234
|
+
- Store changes ride the plan workflow, not the deprecated direct tools: \`create-product-store-state-plan\`, then \`plan-product-store-state-plan\`, then \`apply-product-store-state-plan\`. Every step past the create is asynchronous — read the plan back with \`get-product-store-state-plan\` between steps instead of assuming the last one finished.
|
|
208
235
|
- This connection's tool list is not a fixed set. RevenueCat gates parts of its MCP catalog by plan, platform, and beta enrollment — paywall AI editing, benchmarks, experiments, virtual currencies, and the account-billing tools are the usual absentees — so search this connector for what it actually exposes rather than assuming a documented tool is here.
|
|
209
236
|
- \`render-paywall-screenshot\` is unclassified on purpose because RevenueCat's reference gives it no access column. The current server marks it read-only, which Connecta preserves; without that annotation it fails closed onto \`call_destructive_tool\`.
|
|
210
237
|
- RevenueCat meters API v2 per minute and per domain, and the domains differ: 480 requests per minute for customer information and virtual currencies, 60 for project configuration and audiences, 25 for charts and metrics. It answers a breach with \`429\`, a \`Retry-After\` header, and a \`backoff_ms\` field. Back off on that rather than retrying immediately, and expect chart sweeps to hit the ceiling long before customer reads do.
|
|
@@ -28,8 +28,9 @@ export interface StripeOAuthOptions extends StripeCommonOptions {
|
|
|
28
28
|
* Static credentials have one fixed mode, including Stripe Connect calls.
|
|
29
29
|
*
|
|
30
30
|
* Both static shapes belong here: a key the deployment supplies as a literal
|
|
31
|
-
* header, and one the operator pastes
|
|
32
|
-
* its own mode
|
|
31
|
+
* header, and one the operator pastes into the connection in the operator UI.
|
|
32
|
+
* Neither can discover its own mode, since a restricted key answers for
|
|
33
|
+
* exactly one, so both declare it.
|
|
33
34
|
*/
|
|
34
35
|
export interface StripeHeaderOptions extends StripeCommonOptions {
|
|
35
36
|
auth: Exclude<RemoteMcpAuth, {
|
package/dist/providers/vercel.js
CHANGED
|
@@ -138,7 +138,7 @@ function vercelTransport(baseUrl) {
|
|
|
138
138
|
authenticate: async (ctx) => {
|
|
139
139
|
const token = (await ctx.credential?.get())?.trim();
|
|
140
140
|
if (!token) {
|
|
141
|
-
throw new ConnectorCallError("auth_required", "No Vercel access token is configured for this connector.
|
|
141
|
+
throw new ConnectorCallError("auth_required", "No Vercel access token is configured for this connector. Call authorize_connector for recovery options. When available, an operator can add the token in this connection in the operator UI.");
|
|
142
142
|
}
|
|
143
143
|
return { Authorization: `Bearer ${token}` };
|
|
144
144
|
},
|
package/dist/registry.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { CatalogDriftReport, Connector, ConnectorContext, ConnectorStatus,
|
|
|
3
3
|
import { type DeferredWork } from "./connector-scope.js";
|
|
4
4
|
import { type CatalogDriftActivityContext } from "./activity.js";
|
|
5
5
|
import { type CallAdmissionPermit, type ConnectorCallAdmissionSnapshot } from "./call-admission.js";
|
|
6
|
+
import { type ConnectorCaller } from "./connector-caller.js";
|
|
6
7
|
/**
|
|
7
8
|
* Split `"<connectorId>.<toolName>"` on the first dot. Connector ids contain
|
|
8
9
|
* no dots, so a downstream tool name may. Exported because an address that
|
|
@@ -58,7 +59,7 @@ export interface RegistryOptions {
|
|
|
58
59
|
/**
|
|
59
60
|
* Cap on inline result size before truncation + get_result paging. Must be a
|
|
60
61
|
* whole number of bytes >= 1; anything else warns at startup and falls back
|
|
61
|
-
* to the default
|
|
62
|
+
* to the default 24_000.
|
|
62
63
|
*/
|
|
63
64
|
maxResultBytes?: number | undefined;
|
|
64
65
|
results?: {
|
|
@@ -129,8 +130,11 @@ export type ToolAccess = ReadonlyMap<string, ReadonlySet<string>>;
|
|
|
129
130
|
export interface RegistryScope {
|
|
130
131
|
connectorIds: "all" | readonly string[];
|
|
131
132
|
toolAccess?: ToolAccess;
|
|
133
|
+
guardedToolAccess?: ToolAccess;
|
|
132
134
|
subjectKey?: string;
|
|
133
135
|
principalKey?: string;
|
|
136
|
+
/** The admitted caller, readable only by built-in connectors; see connector-caller.ts. */
|
|
137
|
+
caller?: ConnectorCaller;
|
|
134
138
|
}
|
|
135
139
|
/**
|
|
136
140
|
* Holds the connector set, resolves addresses, and caches per-connector tool
|
|
@@ -147,7 +151,7 @@ export declare class Registry implements RegistryView {
|
|
|
147
151
|
private readonly catalogGenerations;
|
|
148
152
|
/** Serialize persisted catalog set/delete operations within this isolate. */
|
|
149
153
|
private readonly catalogMutations;
|
|
150
|
-
/** Same-request cold loads share one
|
|
154
|
+
/** Same-request cold loads share one read without retaining the request.
|
|
151
155
|
* See documentation/architecture.md#the-two-lifetimes. */
|
|
152
156
|
private readonly requestCatalogLoads;
|
|
153
157
|
/** One live refresh per connector across agent and operator requests. */
|
|
@@ -283,11 +287,37 @@ export declare class Registry implements RegistryView {
|
|
|
283
287
|
private enqueueCatalogMutation;
|
|
284
288
|
private refreshToolsWithContext;
|
|
285
289
|
/**
|
|
286
|
-
*
|
|
287
|
-
*
|
|
288
|
-
*
|
|
290
|
+
* Whether a refresh may still enter the shared cache layers: its generation
|
|
291
|
+
* is current, and the flight it runs in has been neither abandoned nor
|
|
292
|
+
* outlived its bound. Asked at each publication point, since listing and
|
|
293
|
+
* snapshotting both yield, and a late result must never overwrite the one a
|
|
294
|
+
* fresh attempt published in the meantime.
|
|
295
|
+
*/
|
|
296
|
+
private mayPublish;
|
|
297
|
+
/**
|
|
298
|
+
* Publish one shared refresh before starting its connector work. The first
|
|
299
|
+
* caller owns the scope and signal, and the flight lives `boundMs` from now
|
|
300
|
+
* at most; every later caller joins the result without gaining access to
|
|
301
|
+
* that context. A flight found past its bound is abandoned here, and this
|
|
302
|
+
* caller starts the fresh attempt.
|
|
289
303
|
*/
|
|
290
304
|
private startCatalogRefresh;
|
|
305
|
+
/**
|
|
306
|
+
* Give up on a flight that outlived its bound. Later readers start a fresh
|
|
307
|
+
* attempt, its joiners are told to, and nothing its owner lists from now on
|
|
308
|
+
* reaches a cache. The owner's work is left alone: it belongs to another
|
|
309
|
+
* request, which nothing here may reach into, and it can no longer publish.
|
|
310
|
+
*/
|
|
311
|
+
private abandonCatalogRefresh;
|
|
312
|
+
/**
|
|
313
|
+
* Wait on another caller's flight, no longer than its bound. Succeeds with
|
|
314
|
+
* its tools, or with `undefined` when it will not answer for this caller —
|
|
315
|
+
* past its bound, when this waiter abandons it, or failed for its owner
|
|
316
|
+
* alone — so the caller makes a fresh attempt. The timer is this waiter's
|
|
317
|
+
* own: on workerd it is what keeps a request that waits on another alive,
|
|
318
|
+
* and bounded.
|
|
319
|
+
*/
|
|
320
|
+
private joinCatalogRefresh;
|
|
291
321
|
/** Force a live listTools refresh and replace both catalog cache layers. */
|
|
292
322
|
private refreshTools;
|
|
293
323
|
private observeCatalogAccess;
|
|
@@ -303,9 +333,15 @@ export declare class Registry implements RegistryView {
|
|
|
303
333
|
* WeakMap neither roots the request scope nor lets its connector context
|
|
304
334
|
* escape into another request; settled entries are also removed eagerly.
|
|
305
335
|
*
|
|
336
|
+
* The read owns its signal, and each caller waits under its own: one that
|
|
337
|
+
* is cancelled while others wait leaves with its own failure, and the read
|
|
338
|
+
* is cancelled only when every caller has gone (src/runtime/shared-read.ts).
|
|
339
|
+
*
|
|
306
340
|
* The deployment-wide flight below this layer coalesces the actual live
|
|
307
|
-
* refresh across requests. Its
|
|
308
|
-
* later callers join only its result, never its
|
|
341
|
+
* refresh across requests. Its owner's context governs the listing, and its
|
|
342
|
+
* owner's deadline bounds it; later callers join only its result, never its
|
|
343
|
+
* request scope, and a failure that was the owner's alone sends them to a
|
|
344
|
+
* fresh attempt rather than to them.
|
|
309
345
|
*/
|
|
310
346
|
getTools(id: string, baseUrl: string, requestScope?: object, callOptions?: ConnectorOperationOptions, readOptions?: CatalogReadOptions): Promise<ToolDef[]>;
|
|
311
347
|
credentialDriftFor(id: string): Promise<string | undefined>;
|