@zackbart/connecta 0.7.9 → 0.8.1

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.
Files changed (199) hide show
  1. package/CHANGELOG.md +135 -0
  2. package/README.md +47 -148
  3. package/dist/activity.d.ts +0 -8
  4. package/dist/activity.d.ts.map +1 -1
  5. package/dist/activity.js +0 -1
  6. package/dist/activity.js.map +1 -1
  7. package/dist/auth/bearer.d.ts +1 -7
  8. package/dist/auth/bearer.d.ts.map +1 -1
  9. package/dist/auth/bearer.js +3 -24
  10. package/dist/auth/bearer.js.map +1 -1
  11. package/dist/auth/clerk.d.ts +2 -11
  12. package/dist/auth/clerk.d.ts.map +1 -1
  13. package/dist/auth/clerk.js +31 -46
  14. package/dist/auth/clerk.js.map +1 -1
  15. package/dist/call-admission.d.ts.map +1 -1
  16. package/dist/call-admission.js +9 -4
  17. package/dist/call-admission.js.map +1 -1
  18. package/dist/catalog-fingerprint.d.ts +20 -0
  19. package/dist/catalog-fingerprint.d.ts.map +1 -0
  20. package/dist/catalog-fingerprint.js +34 -0
  21. package/dist/catalog-fingerprint.js.map +1 -0
  22. package/dist/catalog-limits.d.ts +10 -0
  23. package/dist/catalog-limits.d.ts.map +1 -0
  24. package/dist/catalog-limits.js +10 -0
  25. package/dist/catalog-limits.js.map +1 -0
  26. package/dist/catalog-service.d.ts +137 -0
  27. package/dist/catalog-service.d.ts.map +1 -0
  28. package/dist/catalog-service.js +401 -0
  29. package/dist/catalog-service.js.map +1 -0
  30. package/dist/catalog.d.ts +6 -0
  31. package/dist/catalog.d.ts.map +1 -1
  32. package/dist/catalog.js +53 -2
  33. package/dist/catalog.js.map +1 -1
  34. package/dist/concurrency.d.ts +4 -0
  35. package/dist/concurrency.d.ts.map +1 -0
  36. package/dist/concurrency.js +31 -0
  37. package/dist/concurrency.js.map +1 -0
  38. package/dist/connectors/api.d.ts.map +1 -1
  39. package/dist/connectors/api.js +22 -12
  40. package/dist/connectors/api.js.map +1 -1
  41. package/dist/connectors/remote-mcp.d.ts.map +1 -1
  42. package/dist/connectors/remote-mcp.js +53 -41
  43. package/dist/connectors/remote-mcp.js.map +1 -1
  44. package/dist/credentials.d.ts +3 -2
  45. package/dist/credentials.d.ts.map +1 -1
  46. package/dist/errors.d.ts +19 -1
  47. package/dist/errors.d.ts.map +1 -1
  48. package/dist/errors.js.map +1 -1
  49. package/dist/execute.d.ts +10 -16
  50. package/dist/execute.d.ts.map +1 -1
  51. package/dist/execute.js +143 -330
  52. package/dist/execute.js.map +1 -1
  53. package/dist/executor-result.d.ts +0 -3
  54. package/dist/executor-result.d.ts.map +1 -1
  55. package/dist/executor-result.js +3 -3
  56. package/dist/executor-result.js.map +1 -1
  57. package/dist/executors/quickjs-child.js +3 -3
  58. package/dist/executors/quickjs-child.js.map +1 -1
  59. package/dist/executors/quickjs-protocol.d.ts +4 -1
  60. package/dist/executors/quickjs-protocol.d.ts.map +1 -1
  61. package/dist/executors/quickjs-runtime.d.ts.map +1 -1
  62. package/dist/executors/quickjs-runtime.js +7 -2
  63. package/dist/executors/quickjs-runtime.js.map +1 -1
  64. package/dist/executors/quickjs.d.ts.map +1 -1
  65. package/dist/executors/quickjs.js +4 -1
  66. package/dist/executors/quickjs.js.map +1 -1
  67. package/dist/favicon.js +2 -2
  68. package/dist/favicon.js.map +1 -1
  69. package/dist/index.d.ts +8 -82
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +58 -104
  72. package/dist/index.js.map +1 -1
  73. package/dist/invocation.d.ts +101 -0
  74. package/dist/invocation.d.ts.map +1 -0
  75. package/dist/invocation.js +405 -0
  76. package/dist/invocation.js.map +1 -0
  77. package/dist/meta-tools.d.ts +9 -95
  78. package/dist/meta-tools.d.ts.map +1 -1
  79. package/dist/meta-tools.js +235 -725
  80. package/dist/meta-tools.js.map +1 -1
  81. package/dist/operator-ui/generated.d.ts +3 -0
  82. package/dist/operator-ui/generated.d.ts.map +1 -0
  83. package/dist/operator-ui/generated.js +5 -0
  84. package/dist/operator-ui/generated.js.map +1 -0
  85. package/dist/operator-ui/model.d.ts +73 -0
  86. package/dist/operator-ui/model.d.ts.map +1 -0
  87. package/dist/operator-ui/model.js +28 -0
  88. package/dist/operator-ui/model.js.map +1 -0
  89. package/dist/registry.d.ts +33 -184
  90. package/dist/registry.d.ts.map +1 -1
  91. package/dist/registry.js +345 -330
  92. package/dist/registry.js.map +1 -1
  93. package/dist/retired-toolkits.d.ts +3 -0
  94. package/dist/retired-toolkits.d.ts.map +1 -0
  95. package/dist/retired-toolkits.js +9 -0
  96. package/dist/retired-toolkits.js.map +1 -0
  97. package/dist/routes/activity.d.ts +3 -0
  98. package/dist/routes/activity.d.ts.map +1 -0
  99. package/dist/routes/activity.js +170 -0
  100. package/dist/routes/activity.js.map +1 -0
  101. package/dist/routes/credentials.d.ts +3 -0
  102. package/dist/routes/credentials.d.ts.map +1 -0
  103. package/dist/routes/credentials.js +170 -0
  104. package/dist/routes/credentials.js.map +1 -0
  105. package/dist/routes/mcp.d.ts +8 -0
  106. package/dist/routes/mcp.d.ts.map +1 -0
  107. package/dist/routes/mcp.js +270 -0
  108. package/dist/routes/mcp.js.map +1 -0
  109. package/dist/routes/oauth.d.ts +4 -0
  110. package/dist/routes/oauth.d.ts.map +1 -0
  111. package/dist/routes/oauth.js +263 -0
  112. package/dist/routes/oauth.js.map +1 -0
  113. package/dist/routes/shared.d.ts +76 -0
  114. package/dist/routes/shared.d.ts.map +1 -0
  115. package/dist/routes/shared.js +140 -0
  116. package/dist/routes/shared.js.map +1 -0
  117. package/dist/routes/ui.d.ts +3 -0
  118. package/dist/routes/ui.d.ts.map +1 -0
  119. package/dist/routes/ui.js +116 -0
  120. package/dist/routes/ui.js.map +1 -0
  121. package/dist/server.d.ts +9 -40
  122. package/dist/server.d.ts.map +1 -1
  123. package/dist/server.js +62 -1322
  124. package/dist/server.js.map +1 -1
  125. package/dist/skills.d.ts +3 -21
  126. package/dist/skills.d.ts.map +1 -1
  127. package/dist/skills.js +15 -43
  128. package/dist/skills.js.map +1 -1
  129. package/dist/storage/file.d.ts.map +1 -1
  130. package/dist/storage/file.js +3 -1
  131. package/dist/storage/file.js.map +1 -1
  132. package/dist/storage/memory.d.ts.map +1 -1
  133. package/dist/storage/memory.js +3 -1
  134. package/dist/storage/memory.js.map +1 -1
  135. package/dist/timeout.d.ts.map +1 -1
  136. package/dist/timeout.js +2 -4
  137. package/dist/timeout.js.map +1 -1
  138. package/dist/types.d.ts +9 -59
  139. package/dist/types.d.ts.map +1 -1
  140. package/dist/ui.d.ts +3 -94
  141. package/dist/ui.d.ts.map +1 -1
  142. package/dist/ui.js +30 -1427
  143. package/dist/ui.js.map +1 -1
  144. package/dist/version.d.ts +1 -1
  145. package/dist/version.js +1 -1
  146. package/package.json +15 -8
  147. package/src/activity.ts +0 -9
  148. package/src/auth/bearer.ts +4 -33
  149. package/src/auth/clerk.ts +35 -48
  150. package/src/call-admission.ts +8 -6
  151. package/src/catalog-fingerprint.ts +52 -0
  152. package/src/catalog-limits.ts +11 -0
  153. package/src/catalog-service.ts +601 -0
  154. package/src/catalog.ts +57 -2
  155. package/src/concurrency.ts +39 -0
  156. package/src/connectors/api.ts +22 -12
  157. package/src/connectors/remote-mcp.ts +63 -45
  158. package/src/credentials.ts +2 -2
  159. package/src/errors.ts +21 -1
  160. package/src/execute.ts +193 -423
  161. package/src/executor-result.ts +3 -3
  162. package/src/executors/quickjs-child.ts +8 -4
  163. package/src/executors/quickjs-protocol.ts +1 -1
  164. package/src/executors/quickjs-runtime.ts +5 -1
  165. package/src/executors/quickjs.ts +11 -8
  166. package/src/favicon.ts +2 -2
  167. package/src/index.ts +70 -222
  168. package/src/invocation.ts +580 -0
  169. package/src/meta-tools.ts +393 -985
  170. package/src/operator-ui/browser.css +360 -0
  171. package/src/operator-ui/browser.ts +987 -0
  172. package/src/operator-ui/generated.ts +4 -0
  173. package/src/operator-ui/model.ts +105 -0
  174. package/src/registry.ts +459 -439
  175. package/src/retired-toolkits.ts +14 -0
  176. package/src/routes/activity.ts +215 -0
  177. package/src/routes/credentials.ts +254 -0
  178. package/src/routes/mcp.ts +339 -0
  179. package/src/routes/oauth.ts +322 -0
  180. package/src/routes/shared.ts +240 -0
  181. package/src/routes/ui.ts +143 -0
  182. package/src/server.ts +64 -1731
  183. package/src/skills.ts +15 -43
  184. package/src/storage/file.ts +3 -1
  185. package/src/storage/memory.ts +3 -1
  186. package/src/timeout.ts +2 -4
  187. package/src/types.ts +8 -60
  188. package/src/ui.ts +60 -1538
  189. package/src/version.ts +1 -1
  190. package/dist/credential-health.d.ts +0 -227
  191. package/dist/credential-health.d.ts.map +0 -1
  192. package/dist/credential-health.js +0 -606
  193. package/dist/credential-health.js.map +0 -1
  194. package/dist/toolkits.d.ts +0 -146
  195. package/dist/toolkits.d.ts.map +0 -1
  196. package/dist/toolkits.js +0 -322
  197. package/dist/toolkits.js.map +0 -1
  198. package/src/credential-health.ts +0 -832
  199. package/src/toolkits.ts +0 -461
package/src/version.ts CHANGED
@@ -4,4 +4,4 @@
4
4
  * a bump that forgets this file fails the build rather than shipping a stale
5
5
  * version to `/health` and to downstream MCP handshakes.
6
6
  */
7
- export const CONNECTA_VERSION = "0.7.9";
7
+ export const CONNECTA_VERSION = "0.8.1";
@@ -1,227 +0,0 @@
1
- import type { CredentialVault } from "./credentials.js";
2
- import { type DeferredWork } from "./connector-scope.js";
3
- import type { Connector, ConnectorContext, ConnectorStatusState, KVStorage, Logger } from "./types.js";
4
- /** Verdict of one liveness check. Same vocabulary as `ConnectorStatus.state`. */
5
- export type CredentialCheckState = ConnectorStatusState;
6
- /** The stored verdict of the most recent liveness check of one connector. */
7
- export interface CredentialHealthRecord {
8
- state: CredentialCheckState;
9
- /** ISO timestamp of the check that produced this record. */
10
- checkedAt: string;
11
- /** Why, for a non-ok state — the connector's own reason, verbatim. */
12
- message?: string;
13
- /** Consent URL to open, when the connector reported one. */
14
- authorizationUrl?: string;
15
- }
16
- /**
17
- * Why a connector was not checked.
18
- *
19
- * - `not_found` — no connector with that id is registered. Only reachable
20
- * through an explicit `ids` request, and reported rather than dropped so a
21
- * typo in a scheduled check is visible instead of silent.
22
- * - `not_checkable` — it stores no credential connecta manages, or exposes no
23
- * usable way to ask: neither `status()` nor a credential test hook the
24
- * declared credential shape can use (`credentialTestRule`), against a value
25
- * actually stored under it.
26
- * - `no_credential` — checkable, but nothing is stored yet: there is no
27
- * credential whose liveness could be in question, and probing would start an
28
- * OAuth flow nobody asked for.
29
- * - `fresh` — checked less than `intervalSeconds` ago (by any isolate — the
30
- * record is persisted), so this is the rate limit doing its job.
31
- * - `in_flight` — another check of this connector is already running.
32
- */
33
- export type CredentialCheckSkip = "not_found" | "not_checkable" | "no_credential" | "fresh" | "in_flight";
34
- /** One connector's outcome in a sweep. */
35
- export interface CredentialCheckResult {
36
- connectorId: string;
37
- /**
38
- * The record now in force. Present for a completed check, and for a `fresh`
39
- * skip (where the still-valid record is what the skip deferred to).
40
- */
41
- record?: CredentialHealthRecord;
42
- /** Set when no check ran; `record` is then whatever was already stored. */
43
- skipped?: CredentialCheckSkip;
44
- /**
45
- * The check ran, but its verdict was thrown away: the credential it judged
46
- * was replaced or removed while it was in flight (see `clear`). `record` is
47
- * what the check saw, not what is stored — nothing is.
48
- */
49
- discarded?: true;
50
- /** How long the check took, when one ran. */
51
- latencyMs?: number;
52
- }
53
- /** Deployment-wide tuning for credential liveness checks. */
54
- export interface CredentialHealthConfig {
55
- /**
56
- * Minimum seconds between checks of the same connector, across isolates (the
57
- * verdict is persisted, so a Worker cron isolate and a request isolate share
58
- * one clock). Default 900 (15 minutes). This is the bound on downstream cost:
59
- * repeated status reads never each trigger a check.
60
- */
61
- intervalSeconds?: number;
62
- /** Max checks in flight at once during one sweep. Default 4. */
63
- concurrency?: number;
64
- /** Per-check deadline. Default 30 000, the probe default. */
65
- timeoutMs?: number;
66
- /**
67
- * Let inbound authenticated `/mcp` and `/ui/data` traffic trigger a *due*
68
- * sweep in the background (`ctx.waitUntil` where the runtime has it). Default
69
- * true — it is the trigger that makes stale-credential detection work with no
70
- * scheduler wired at all, and it cannot slow a request down or change a
71
- * result. Set false to check only from `Connecta.checkCredentials()`.
72
- */
73
- onRequest?: boolean;
74
- }
75
- export declare const DEFAULT_CREDENTIAL_CHECK_INTERVAL_SECONDS = 900;
76
- export declare const DEFAULT_CREDENTIAL_CHECK_CONCURRENCY = 4;
77
- /** What the checker needs from the registry, without depending on it. */
78
- export interface CredentialHealthDeps {
79
- listConnectors(): Connector[];
80
- getConnector(id: string): Connector | undefined;
81
- contextFor(id: string, baseUrl: string, requestScope?: object): ConnectorContext;
82
- storage: KVStorage;
83
- logger: Logger;
84
- credentialVault?: CredentialVault;
85
- }
86
- export interface CredentialCheckOptions {
87
- /** Check even connectors whose verdict is still fresh. */
88
- force?: boolean;
89
- /** Restrict the sweep to these connector ids. Default: every connector. */
90
- ids?: string[];
91
- /**
92
- * @deprecated Ignored. Credential checks always create and close their own
93
- * probe scope; no core path supplies an existing request scope.
94
- */
95
- requestScope?: object;
96
- }
97
- /**
98
- * Whether a connector holds a credential connecta stores AND exposes a way to
99
- * ask whether it still works.
100
- *
101
- * Deliberately narrow. `listTools`/`callTool` are NOT liveness probes here: a
102
- * tool call may mutate downstream state, and the catalog path is already covered
103
- * by the existing probe. So a connector is checkable only through the two hooks
104
- * that exist to answer exactly this question — `testCredential(s)` (what the
105
- * Test button runs) and `status()` — and only when it has a credential of ours
106
- * to be asked about: an operator-managed `credential`, or a stored downstream
107
- * grant it reports via `hasStoredCredential`. A static-token connector stores
108
- * nothing here and is never probed on a timer.
109
- *
110
- * Whether a test hook counts is `credentialTestRule`'s call, not this function's
111
- * Credentials Test button and the credential API read (issue #55), so
112
- * a credential the operator cannot test by hand is not one a sweep tests behind
113
- * their back. A connector whose only hook cannot test its declared shape is
114
- * checkable only if it also implements `status()`.
115
- */
116
- export declare function isCheckableConnector(connector: Connector): boolean;
117
- /**
118
- * Runs and caches credential liveness checks. One instance per `Registry`.
119
- *
120
- * Cost is bounded four ways, because a status surface an agent polls must never
121
- * become a way to hammer a downstream auth endpoint:
122
- *
123
- * 1. **Eligibility** — only connectors holding a credential of ours are probed
124
- * at all (`isCheckableConnector`), and only when something is actually stored.
125
- * 2. **Freshness (cross-isolate)** — a persisted verdict younger than
126
- * `intervalSeconds` short-circuits the check, so every isolate and every
127
- * trigger share one budget.
128
- * 3. **Sweep gate (per isolate)** — `sweepIfDue` runs at most one traffic-
129
- * triggered sweep per interval per isolate, and never two at once, so a burst
130
- * of requests costs one sweep, not one per request.
131
- * 4. **Deadline + fan-out bound** — each check is bounded by `timeoutMs` and at
132
- * most `concurrency` run together (the same shape as the
133
- * `discovery.probeTimeoutMs` bound on the discovery fan-out, issue #19).
134
- */
135
- export declare class CredentialHealthChecker {
136
- private readonly deps;
137
- private readonly store;
138
- private readonly intervalMs;
139
- private readonly concurrency;
140
- private readonly timeoutMs;
141
- private readonly onRequest;
142
- /** Per-connector checks in flight in THIS isolate. */
143
- private readonly inFlight;
144
- /** Earliest a traffic-triggered sweep may run again in this isolate. */
145
- private nextSweepAt;
146
- private sweeping;
147
- constructor(deps: CredentialHealthDeps, config?: CredentialHealthConfig);
148
- /**
149
- * The stored verdict, if any. No downstream I/O — and no storage read at all
150
- * for a connector that stores no credential of ours, since only a checkable
151
- * connector can ever have had a verdict written. That keeps
152
- * `list_connectors({ probe: false })` exactly as cheap as it was for the
153
- * deployments this feature does not apply to.
154
- */
155
- healthFor(connectorId: string): Promise<CredentialHealthRecord | undefined>;
156
- /**
157
- * Record a liveness verdict observed elsewhere — today, the live status a
158
- * `list_connectors({ probe: true })` just performed. Filtered by the same
159
- * eligibility rule as a check, so this stays a record of *credential* health
160
- * rather than a general status cache, and so it also counts against the
161
- * freshness budget: an operator who just probed live does not get swept again
162
- * moments later.
163
- */
164
- record(connectorId: string, record: CredentialHealthRecord): Promise<void>;
165
- /** Forget a connector's verdict — its credential just changed under us. */
166
- clear(connectorId: string): Promise<void>;
167
- /** Whether any connector in this deployment could be checked at all. */
168
- hasCheckableConnectors(): boolean;
169
- /**
170
- * Check every (or the named) connector's stored credential and return one
171
- * outcome per connector considered. Never rejects: a connector that throws,
172
- * hangs past `timeoutMs`, or cannot be persisted becomes an `error` verdict.
173
- */
174
- check(baseUrl: string, opts?: CredentialCheckOptions, defer?: DeferredWork): Promise<CredentialCheckResult[]>;
175
- /**
176
- * The traffic-triggered sweep: a promise to hand to `ctx.waitUntil`, or
177
- * `undefined` when nothing is due (the common case, and free — no I/O). The
178
- * gate is armed BEFORE the sweep starts, so a burst of concurrent requests
179
- * produces one sweep.
180
- */
181
- sweepIfDue(baseUrl: string, defer?: DeferredWork): Promise<CredentialCheckResult[]> | undefined;
182
- private checkOne;
183
- private recordOrNothing;
184
- private runCheck;
185
- /**
186
- * `isCheckableConnector` re-asked against what is actually stored: the hook
187
- * the declared shape selects, bound to a value that fits it (see
188
- * {@link testHookFor}), or a `status()` to fall back on. Neither ⇒ there is no
189
- * honest question to put to this connector.
190
- */
191
- private canAsk;
192
- /**
193
- * Ask the connector whether the credential it holds still works — with no
194
- * downstream mutation and no tool call. A credential test is preferred for a
195
- * vault credential because it validates the stored value itself; `status()` is
196
- * the downstream-OAuth answer (it refreshes the grant, which is the liveness
197
- * question for a token).
198
- */
199
- private probe;
200
- private settle;
201
- }
202
- /**
203
- * Whether a liveness verdict may DECIDE a connector's cached status.
204
- *
205
- * Only `auth_required` ever does, and only while nothing better has happened
206
- * since. Two separate judgements:
207
- *
208
- * 1. **`error` is not credential evidence.** A check that timed out, threw, or
209
- * got a 502 from the provider's status endpoint failed to *complete* — it
210
- * learned nothing about the credential. Letting it set the status would flip
211
- * a connector whose calls are fine to `error` for a whole interval on a DNS
212
- * blip. Error verdicts stay visible in `credentialCheck` (an operator wants
213
- * to know checks are failing) but the status keeps coming from observed real
214
- * calls, which is evidence.
215
- * 2. **A successful real call retires the verdict, except static shape drift.**
216
- * Traffic beats a background probe, so a `lastSuccessAt` at or after
217
- * `checkedAt` normally means the credential demonstrably works. Stored-shape
218
- * drift is different: a credential-independent tool can succeed without
219
- * making a missing declared field appear, so only replacement/removal clears
220
- * that verdict.
221
- *
222
- * `auth_required` deliberately outranks an observed real-call *failure*: both
223
- * say something is wrong, and only one of them carries the URL that fixes it.
224
- * The failure stays visible as `lastError`.
225
- */
226
- export declare function credentialVerdictApplies(record: CredentialHealthRecord | undefined, lastSuccessAt: string | undefined): boolean;
227
- //# sourceMappingURL=credential-health.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"credential-health.d.ts","sourceRoot":"","sources":["../src/credential-health.ts"],"names":[],"mappings":"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"}