@superblocksteam/gateway 2.0.0-SNAPSHOT.1d4c72c0ab174c21

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 (248) hide show
  1. package/LICENSE.txt +87 -0
  2. package/README.md +291 -0
  3. package/dist/agents/resolve-orchestrator-url.d.ts +22 -0
  4. package/dist/agents/resolve-orchestrator-url.js +38 -0
  5. package/dist/agents/resolve-orchestrator-url.js.map +1 -0
  6. package/dist/capabilities/integration-metadata.d.ts +28 -0
  7. package/dist/capabilities/integration-metadata.js +174 -0
  8. package/dist/capabilities/integration-metadata.js.map +1 -0
  9. package/dist/capabilities/lifecycle.d.ts +93 -0
  10. package/dist/capabilities/lifecycle.js +3450 -0
  11. package/dist/capabilities/lifecycle.js.map +1 -0
  12. package/dist/capabilities/query-integration.d.ts +14 -0
  13. package/dist/capabilities/query-integration.js +172 -0
  14. package/dist/capabilities/query-integration.js.map +1 -0
  15. package/dist/capabilities/source-files-archive.d.ts +11 -0
  16. package/dist/capabilities/source-files-archive.js +54 -0
  17. package/dist/capabilities/source-files-archive.js.map +1 -0
  18. package/dist/capabilities/types.d.ts +542 -0
  19. package/dist/capabilities/types.js +86 -0
  20. package/dist/capabilities/types.js.map +1 -0
  21. package/dist/capture/browser-contract.d.ts +46 -0
  22. package/dist/capture/browser-contract.js +34 -0
  23. package/dist/capture/browser-contract.js.map +1 -0
  24. package/dist/capture/browser-instructions.d.ts +10 -0
  25. package/dist/capture/browser-instructions.js +18 -0
  26. package/dist/capture/browser-instructions.js.map +1 -0
  27. package/dist/capture/capture-library-probe.d.ts +55 -0
  28. package/dist/capture/capture-library-probe.js +177 -0
  29. package/dist/capture/capture-library-probe.js.map +1 -0
  30. package/dist/capture/capture-library.d.ts +52 -0
  31. package/dist/capture/capture-library.js +249 -0
  32. package/dist/capture/capture-library.js.map +1 -0
  33. package/dist/capture/classify-library-paint.d.ts +21 -0
  34. package/dist/capture/classify-library-paint.js +13 -0
  35. package/dist/capture/classify-library-paint.js.map +1 -0
  36. package/dist/capture/host-mcp-scan.d.ts +16 -0
  37. package/dist/capture/host-mcp-scan.js +64 -0
  38. package/dist/capture/host-mcp-scan.js.map +1 -0
  39. package/dist/capture/library-parent-script.d.ts +35 -0
  40. package/dist/capture/library-parent-script.js +82 -0
  41. package/dist/capture/library-parent-script.js.map +1 -0
  42. package/dist/capture/mode.d.ts +29 -0
  43. package/dist/capture/mode.js +65 -0
  44. package/dist/capture/mode.js.map +1 -0
  45. package/dist/config.d.ts +148 -0
  46. package/dist/config.js +111 -0
  47. package/dist/config.js.map +1 -0
  48. package/dist/debug.d.ts +2 -0
  49. package/dist/debug.js +9 -0
  50. package/dist/debug.js.map +1 -0
  51. package/dist/deps.d.ts +38 -0
  52. package/dist/deps.js +2 -0
  53. package/dist/deps.js.map +1 -0
  54. package/dist/health/readiness.d.ts +99 -0
  55. package/dist/health/readiness.js +202 -0
  56. package/dist/health/readiness.js.map +1 -0
  57. package/dist/index.d.ts +8 -0
  58. package/dist/index.js +8 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/integrations/filters.d.ts +8 -0
  61. package/dist/integrations/filters.js +40 -0
  62. package/dist/integrations/filters.js.map +1 -0
  63. package/dist/integrations/map.d.ts +27 -0
  64. package/dist/integrations/map.js +43 -0
  65. package/dist/integrations/map.js.map +1 -0
  66. package/dist/integrations/profile-key.d.ts +19 -0
  67. package/dist/integrations/profile-key.js +35 -0
  68. package/dist/integrations/profile-key.js.map +1 -0
  69. package/dist/integrations/read-only-postgres-query.d.ts +2 -0
  70. package/dist/integrations/read-only-postgres-query.js +164 -0
  71. package/dist/integrations/read-only-postgres-query.js.map +1 -0
  72. package/dist/main.d.ts +2 -0
  73. package/dist/main.js +5 -0
  74. package/dist/main.js.map +1 -0
  75. package/dist/orchestrator/client.d.ts +62 -0
  76. package/dist/orchestrator/client.js +160 -0
  77. package/dist/orchestrator/client.js.map +1 -0
  78. package/dist/playwright/ensure-chromium.d.ts +24 -0
  79. package/dist/playwright/ensure-chromium.js +60 -0
  80. package/dist/playwright/ensure-chromium.js.map +1 -0
  81. package/dist/preview/capture-screenshot.d.ts +67 -0
  82. package/dist/preview/capture-screenshot.js +179 -0
  83. package/dist/preview/capture-screenshot.js.map +1 -0
  84. package/dist/preview/viewer-url.d.ts +82 -0
  85. package/dist/preview/viewer-url.js +130 -0
  86. package/dist/preview/viewer-url.js.map +1 -0
  87. package/dist/process/fault-barrier.d.ts +55 -0
  88. package/dist/process/fault-barrier.js +113 -0
  89. package/dist/process/fault-barrier.js.map +1 -0
  90. package/dist/sabs/agent-facing-text.d.ts +35 -0
  91. package/dist/sabs/agent-facing-text.js +165 -0
  92. package/dist/sabs/agent-facing-text.js.map +1 -0
  93. package/dist/sabs/app-state.d.ts +126 -0
  94. package/dist/sabs/app-state.js +332 -0
  95. package/dist/sabs/app-state.js.map +1 -0
  96. package/dist/sabs/awaited-decision.d.ts +47 -0
  97. package/dist/sabs/awaited-decision.js +124 -0
  98. package/dist/sabs/awaited-decision.js.map +1 -0
  99. package/dist/sabs/browser-context.d.ts +53 -0
  100. package/dist/sabs/browser-context.js +92 -0
  101. package/dist/sabs/browser-context.js.map +1 -0
  102. package/dist/sabs/editor-client-methods.d.ts +164 -0
  103. package/dist/sabs/editor-client-methods.js +750 -0
  104. package/dist/sabs/editor-client-methods.js.map +1 -0
  105. package/dist/sabs/editor-socket.d.ts +84 -0
  106. package/dist/sabs/editor-socket.js +64 -0
  107. package/dist/sabs/editor-socket.js.map +1 -0
  108. package/dist/sabs/recent-tool-runs.d.ts +14 -0
  109. package/dist/sabs/recent-tool-runs.js +61 -0
  110. package/dist/sabs/recent-tool-runs.js.map +1 -0
  111. package/dist/sabs/session-peer.d.ts +392 -0
  112. package/dist/sabs/session-peer.js +11 -0
  113. package/dist/sabs/session-peer.js.map +1 -0
  114. package/dist/sabs/streamed-reply.d.ts +42 -0
  115. package/dist/sabs/streamed-reply.js +110 -0
  116. package/dist/sabs/streamed-reply.js.map +1 -0
  117. package/dist/sabs/turn-collector.d.ts +169 -0
  118. package/dist/sabs/turn-collector.js +506 -0
  119. package/dist/sabs/turn-collector.js.map +1 -0
  120. package/dist/sabs/websocket-session-peer.d.ts +540 -0
  121. package/dist/sabs/websocket-session-peer.js +3289 -0
  122. package/dist/sabs/websocket-session-peer.js.map +1 -0
  123. package/dist/security/constant-time.d.ts +9 -0
  124. package/dist/security/constant-time.js +13 -0
  125. package/dist/security/constant-time.js.map +1 -0
  126. package/dist/server/client.d.ts +405 -0
  127. package/dist/server/client.js +684 -0
  128. package/dist/server/client.js.map +1 -0
  129. package/dist/server/identity-reads.d.ts +76 -0
  130. package/dist/server/identity-reads.js +209 -0
  131. package/dist/server/identity-reads.js.map +1 -0
  132. package/dist/start.d.ts +24 -0
  133. package/dist/start.js +81 -0
  134. package/dist/start.js.map +1 -0
  135. package/dist/stores/memory.d.ts +42 -0
  136. package/dist/stores/memory.js +121 -0
  137. package/dist/stores/memory.js.map +1 -0
  138. package/dist/stores/types.d.ts +74 -0
  139. package/dist/stores/types.js +11 -0
  140. package/dist/stores/types.js.map +1 -0
  141. package/dist/telemetry/mcp-client.d.ts +22 -0
  142. package/dist/telemetry/mcp-client.js +140 -0
  143. package/dist/telemetry/mcp-client.js.map +1 -0
  144. package/dist/telemetry/metrics.d.ts +41 -0
  145. package/dist/telemetry/metrics.js +103 -0
  146. package/dist/telemetry/metrics.js.map +1 -0
  147. package/dist/telemetry/runtime.d.ts +9 -0
  148. package/dist/telemetry/runtime.js +118 -0
  149. package/dist/telemetry/runtime.js.map +1 -0
  150. package/dist/transports/mcp/admin-tools.d.ts +56 -0
  151. package/dist/transports/mcp/admin-tools.js +252 -0
  152. package/dist/transports/mcp/admin-tools.js.map +1 -0
  153. package/dist/transports/mcp/app-status-html.d.ts +11 -0
  154. package/dist/transports/mcp/app-status-html.js +899 -0
  155. package/dist/transports/mcp/app-status-html.js.map +1 -0
  156. package/dist/transports/mcp/client-presentation.d.ts +16 -0
  157. package/dist/transports/mcp/client-presentation.js +13 -0
  158. package/dist/transports/mcp/client-presentation.js.map +1 -0
  159. package/dist/transports/mcp/cowork-editor-url.d.ts +6 -0
  160. package/dist/transports/mcp/cowork-editor-url.js +10 -0
  161. package/dist/transports/mcp/cowork-editor-url.js.map +1 -0
  162. package/dist/transports/mcp/decision-card-html.d.ts +26 -0
  163. package/dist/transports/mcp/decision-card-html.js +876 -0
  164. package/dist/transports/mcp/decision-card-html.js.map +1 -0
  165. package/dist/transports/mcp/decision-elicitation.d.ts +116 -0
  166. package/dist/transports/mcp/decision-elicitation.js +292 -0
  167. package/dist/transports/mcp/decision-elicitation.js.map +1 -0
  168. package/dist/transports/mcp/dispatch-probe.d.ts +24 -0
  169. package/dist/transports/mcp/dispatch-probe.js +48 -0
  170. package/dist/transports/mcp/dispatch-probe.js.map +1 -0
  171. package/dist/transports/mcp/editor-document-probe.d.ts +4 -0
  172. package/dist/transports/mcp/editor-document-probe.js +35 -0
  173. package/dist/transports/mcp/editor-document-probe.js.map +1 -0
  174. package/dist/transports/mcp/editor-integration-setup-url.d.ts +8 -0
  175. package/dist/transports/mcp/editor-integration-setup-url.js +23 -0
  176. package/dist/transports/mcp/editor-integration-setup-url.js.map +1 -0
  177. package/dist/transports/mcp/format-tool-content.d.ts +20 -0
  178. package/dist/transports/mcp/format-tool-content.js +89 -0
  179. package/dist/transports/mcp/format-tool-content.js.map +1 -0
  180. package/dist/transports/mcp/instructions/index.d.ts +23 -0
  181. package/dist/transports/mcp/instructions/index.js +81 -0
  182. package/dist/transports/mcp/instructions/index.js.map +1 -0
  183. package/dist/transports/mcp/instructions/result.d.ts +18 -0
  184. package/dist/transports/mcp/instructions/result.js +58 -0
  185. package/dist/transports/mcp/instructions/result.js.map +1 -0
  186. package/dist/transports/mcp/instructions/tools/ask-user.d.ts +2 -0
  187. package/dist/transports/mcp/instructions/tools/ask-user.js +17 -0
  188. package/dist/transports/mcp/instructions/tools/ask-user.js.map +1 -0
  189. package/dist/transports/mcp/instructions/tools/check-app-progress.d.ts +3 -0
  190. package/dist/transports/mcp/instructions/tools/check-app-progress.js +75 -0
  191. package/dist/transports/mcp/instructions/tools/check-app-progress.js.map +1 -0
  192. package/dist/transports/mcp/instructions/tools/check-publish-progress.d.ts +3 -0
  193. package/dist/transports/mcp/instructions/tools/check-publish-progress.js +23 -0
  194. package/dist/transports/mcp/instructions/tools/check-publish-progress.js.map +1 -0
  195. package/dist/transports/mcp/instructions/tools/copy.d.ts +14 -0
  196. package/dist/transports/mcp/instructions/tools/copy.js +35 -0
  197. package/dist/transports/mcp/instructions/tools/copy.js.map +1 -0
  198. package/dist/transports/mcp/instructions/tools/create-integration.d.ts +4 -0
  199. package/dist/transports/mcp/instructions/tools/create-integration.js +41 -0
  200. package/dist/transports/mcp/instructions/tools/create-integration.js.map +1 -0
  201. package/dist/transports/mcp/instructions/tools/edit-app.d.ts +2 -0
  202. package/dist/transports/mcp/instructions/tools/edit-app.js +18 -0
  203. package/dist/transports/mcp/instructions/tools/edit-app.js.map +1 -0
  204. package/dist/transports/mcp/instructions/tools/get-app.d.ts +3 -0
  205. package/dist/transports/mcp/instructions/tools/get-app.js +47 -0
  206. package/dist/transports/mcp/instructions/tools/get-app.js.map +1 -0
  207. package/dist/transports/mcp/instructions/tools/get-integration-metadata.d.ts +2 -0
  208. package/dist/transports/mcp/instructions/tools/get-integration-metadata.js +13 -0
  209. package/dist/transports/mcp/instructions/tools/get-integration-metadata.js.map +1 -0
  210. package/dist/transports/mcp/instructions/tools/index.d.ts +7 -0
  211. package/dist/transports/mcp/instructions/tools/index.js +26 -0
  212. package/dist/transports/mcp/instructions/tools/index.js.map +1 -0
  213. package/dist/transports/mcp/instructions/tools/preview-app.d.ts +3 -0
  214. package/dist/transports/mcp/instructions/tools/preview-app.js +14 -0
  215. package/dist/transports/mcp/instructions/tools/preview-app.js.map +1 -0
  216. package/dist/transports/mcp/instructions/tools/publish-app.d.ts +3 -0
  217. package/dist/transports/mcp/instructions/tools/publish-app.js +23 -0
  218. package/dist/transports/mcp/instructions/tools/publish-app.js.map +1 -0
  219. package/dist/transports/mcp/instructions/tools/start-app.d.ts +2 -0
  220. package/dist/transports/mcp/instructions/tools/start-app.js +22 -0
  221. package/dist/transports/mcp/instructions/tools/start-app.js.map +1 -0
  222. package/dist/transports/mcp/instructions/tools/upload-artifact.d.ts +2 -0
  223. package/dist/transports/mcp/instructions/tools/upload-artifact.js +13 -0
  224. package/dist/transports/mcp/instructions/tools/upload-artifact.js.map +1 -0
  225. package/dist/transports/mcp/mcp-app-brand-css.d.ts +1 -0
  226. package/dist/transports/mcp/mcp-app-brand-css.js +180 -0
  227. package/dist/transports/mcp/mcp-app-brand-css.js.map +1 -0
  228. package/dist/transports/mcp/mount.d.ts +22 -0
  229. package/dist/transports/mcp/mount.js +1040 -0
  230. package/dist/transports/mcp/mount.js.map +1 -0
  231. package/dist/transports/mcp/native-browser-presence.d.ts +45 -0
  232. package/dist/transports/mcp/native-browser-presence.js +158 -0
  233. package/dist/transports/mcp/native-browser-presence.js.map +1 -0
  234. package/dist/transports/mcp/plan-approval.d.ts +38 -0
  235. package/dist/transports/mcp/plan-approval.js +175 -0
  236. package/dist/transports/mcp/plan-approval.js.map +1 -0
  237. package/dist/transports/mcp/progress-notifier.d.ts +39 -0
  238. package/dist/transports/mcp/progress-notifier.js +52 -0
  239. package/dist/transports/mcp/progress-notifier.js.map +1 -0
  240. package/dist/transports/mcp/session-directory.d.ts +7 -0
  241. package/dist/transports/mcp/session-directory.js +18 -0
  242. package/dist/transports/mcp/session-directory.js.map +1 -0
  243. package/dist/transports/mcp/tool-names.d.ts +2 -0
  244. package/dist/transports/mcp/tool-names.js +2 -0
  245. package/dist/transports/mcp/tool-names.js.map +1 -0
  246. package/package.json +78 -0
  247. package/skills/superblocks-build/SKILL.md +59 -0
  248. package/skills/superblocks-import/SKILL.md +88 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/server/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Why an identity lookup produced no answer.
3
+ *
4
+ * `caller_timeout` and `read_failed` need telling apart: the first means the
5
+ * endpoint is slow and the cache is about to fill, the second means it is down.
6
+ */
7
+ export type IdentityUnavailableReason = "breaker_open" | "caller_timeout" | "read_failed";
8
+ /**
9
+ * The identity lookup did not produce an answer this caller can act on.
10
+ *
11
+ * Distinct from "the credential was refused": nothing is known about the
12
+ * caller's account, so the right response is to try again rather than to
13
+ * re-link. Capabilities map this to `downstream_unavailable`.
14
+ */
15
+ export declare class IdentityUnavailableError extends Error {
16
+ readonly reason: IdentityUnavailableReason;
17
+ constructor(message: string, options?: {
18
+ cause?: unknown;
19
+ reason?: IdentityUnavailableReason;
20
+ });
21
+ }
22
+ /**
23
+ * What one guarded call cost. A closed set because it becomes a metric label.
24
+ */
25
+ export type IdentityReadOutcome = "breaker_open" | "cached" | "caller_timeout"
26
+ /**
27
+ * The read failed in a way that says something about this one credential
28
+ * rather than about the endpoint — the errors `opensBreaker` rejects.
29
+ * Separate from `outage` so a client looping on a revoked key cannot make a
30
+ * healthy endpoint look like it is failing.
31
+ */
32
+ | "credential_error" | "outage" | "refused" | "resolved";
33
+ /** Resolves the identity behind a downstream credential, or refuses it. */
34
+ export type IdentityRead<T> = (apiKey: string) => Promise<T | undefined>;
35
+ export type GuardedIdentityReadOptions = {
36
+ /** How long a resolved identity is trusted before the API is asked again. */
37
+ cacheTtlMs?: number;
38
+ /** How long one caller waits for a read before it gives up on this call. */
39
+ callerWaitMs?: number;
40
+ /** How long reads fail fast after the API failed to answer one. */
41
+ cooldownMs?: number;
42
+ now?: () => number;
43
+ /** Reports what one call cost. Wired to a counter in the HTTP client. */
44
+ onOutcome?: (outcome: IdentityReadOutcome) => void;
45
+ /**
46
+ * Whether a failed read means the endpoint is unhealthy, rather than that
47
+ * this one credential was refused. Only the former opens the breaker: a
48
+ * single bad credential must not fail every other caller fast.
49
+ */
50
+ opensBreaker?: (error: unknown) => boolean;
51
+ };
52
+ /**
53
+ * Makes the identity lookup that every tool call gates on cheap and bounded.
54
+ *
55
+ * `GET /api/v1/users/me` is the first thing every capability does and the
56
+ * slowest endpoint the Superblocks API exposes. Read straight through, one
57
+ * wedged upstream took down the whole tool surface: each call waited out the
58
+ * full client timeout, a burst of callers multiplied the load on the endpoint
59
+ * that was already stuck, and nothing remembered that the last twenty calls
60
+ * had just failed the same way.
61
+ *
62
+ * Four things fix that, and they have to work together:
63
+ *
64
+ * - **Cache.** Identity does not change between polls, so a poll loop spends
65
+ * one read per TTL instead of one per call.
66
+ * - **Collapse.** Concurrent callers on a cold cache join one read rather than
67
+ * each starting their own.
68
+ * - **Caller deadline.** A tool call stops waiting at the window its own
69
+ * contract advertises. The read keeps running, so an endpoint that answers
70
+ * slowly still fills the cache and the next call is served from it — the
71
+ * reason this is a deadline on the wait and not a shorter timeout on the
72
+ * read.
73
+ * - **Breaker.** Once a read fails, later calls fail fast for a cooldown
74
+ * instead of each discovering the same outage the slow way.
75
+ */
76
+ export declare function withGuardedIdentityReads<T>(read: IdentityRead<T>, options?: GuardedIdentityReadOptions): IdentityRead<T>;
@@ -0,0 +1,209 @@
1
+ import { createHash } from "node:crypto";
2
+ /**
3
+ * The identity lookup did not produce an answer this caller can act on.
4
+ *
5
+ * Distinct from "the credential was refused": nothing is known about the
6
+ * caller's account, so the right response is to try again rather than to
7
+ * re-link. Capabilities map this to `downstream_unavailable`.
8
+ */
9
+ export class IdentityUnavailableError extends Error {
10
+ reason;
11
+ constructor(message, options = {}) {
12
+ super(message, { cause: options.cause });
13
+ this.name = "IdentityUnavailableError";
14
+ this.reason = options.reason ?? "read_failed";
15
+ }
16
+ }
17
+ /**
18
+ * Short enough that losing access or switching org lands within a minute,
19
+ * long enough that a poll loop stops paying for a round trip per call.
20
+ */
21
+ const DEFAULT_CACHE_TTL_MS = 60_000;
22
+ /**
23
+ * The tool contract promises callers an answer in about ten seconds, so that
24
+ * is the longest a tool call waits on identity. The read itself is not
25
+ * cancelled at this point — see {@link withGuardedIdentityReads}.
26
+ */
27
+ const DEFAULT_CALLER_WAIT_MS = 10_000;
28
+ /**
29
+ * How long a wedged endpoint is taken at its word. Long enough that a burst of
30
+ * polls costs one read rather than one per call, short enough that recovery is
31
+ * noticed without anyone restarting a client.
32
+ */
33
+ const DEFAULT_COOLDOWN_MS = 30_000;
34
+ /** Cached entries are swept once the map is big enough for it to be worth it. */
35
+ const PRUNE_AT_ENTRIES = 512;
36
+ const OUTAGE_MESSAGE = "The Superblocks API could not confirm who this caller is in time. This is usually transient — try again in a moment.";
37
+ /**
38
+ * A deadline a caller can stop waiting at without cancelling what it waits on.
39
+ */
40
+ function callerDeadline(ms) {
41
+ let timer;
42
+ const expired = new Promise((_resolve, reject) => {
43
+ timer = setTimeout(() => reject(new IdentityUnavailableError(OUTAGE_MESSAGE, {
44
+ reason: "caller_timeout",
45
+ })), ms);
46
+ });
47
+ return { cancel: () => clearTimeout(timer), expired };
48
+ }
49
+ /**
50
+ * Makes the identity lookup that every tool call gates on cheap and bounded.
51
+ *
52
+ * `GET /api/v1/users/me` is the first thing every capability does and the
53
+ * slowest endpoint the Superblocks API exposes. Read straight through, one
54
+ * wedged upstream took down the whole tool surface: each call waited out the
55
+ * full client timeout, a burst of callers multiplied the load on the endpoint
56
+ * that was already stuck, and nothing remembered that the last twenty calls
57
+ * had just failed the same way.
58
+ *
59
+ * Four things fix that, and they have to work together:
60
+ *
61
+ * - **Cache.** Identity does not change between polls, so a poll loop spends
62
+ * one read per TTL instead of one per call.
63
+ * - **Collapse.** Concurrent callers on a cold cache join one read rather than
64
+ * each starting their own.
65
+ * - **Caller deadline.** A tool call stops waiting at the window its own
66
+ * contract advertises. The read keeps running, so an endpoint that answers
67
+ * slowly still fills the cache and the next call is served from it — the
68
+ * reason this is a deadline on the wait and not a shorter timeout on the
69
+ * read.
70
+ * - **Breaker.** Once a read fails, later calls fail fast for a cooldown
71
+ * instead of each discovering the same outage the slow way.
72
+ */
73
+ export function withGuardedIdentityReads(read, options = {}) {
74
+ const now = options.now ?? Date.now;
75
+ const cacheTtlMs = options.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;
76
+ const callerWaitMs = options.callerWaitMs ?? DEFAULT_CALLER_WAIT_MS;
77
+ const cooldownMs = options.cooldownMs ?? DEFAULT_COOLDOWN_MS;
78
+ const onOutcome = options.onOutcome ?? (() => undefined);
79
+ const opensBreaker = options.opensBreaker ?? (() => true);
80
+ // Hashed so raw credentials are never held as map keys.
81
+ const cache = new Map();
82
+ const inflight = new Map();
83
+ let failFastUntil = 0;
84
+ // The breaker has tripped and nothing has succeeded since. While that holds,
85
+ // the cooldown expiring admits exactly one probe rather than one per
86
+ // credential. Collapsing is keyed per credential, so without this a burst of
87
+ // distinct callers each opened its own read against the wedged route the
88
+ // moment the cooldown lapsed -- eight agents, eight probes, every 30s.
89
+ let recovering = false;
90
+ let probeInFlight = false;
91
+ // Errors `opensBreaker` judged to be about one credential. They propagate
92
+ // raw, so the caller still sees its own 401 rather than a wrapped one, and
93
+ // this is what lets the outcome be labelled without re-inspecting them here.
94
+ // Weak so a rejected read holds nothing once its error is collected.
95
+ const credentialErrors = new WeakSet();
96
+ function prune() {
97
+ if (cache.size < PRUNE_AT_ENTRIES) {
98
+ return;
99
+ }
100
+ const timestamp = now();
101
+ for (const [key, entry] of cache) {
102
+ if (entry.expiresAt <= timestamp) {
103
+ cache.delete(key);
104
+ }
105
+ }
106
+ }
107
+ function startRead(key, apiKey) {
108
+ const pending = (async () => {
109
+ try {
110
+ const value = await read(apiKey);
111
+ failFastUntil = 0;
112
+ recovering = false;
113
+ // `undefined` means the API refused this credential. Caching that
114
+ // would keep refusing a caller who has since re-linked their account.
115
+ if (value !== undefined) {
116
+ prune();
117
+ cache.set(key, { expiresAt: now() + cacheTtlMs, value });
118
+ }
119
+ return value;
120
+ }
121
+ catch (error) {
122
+ if (!opensBreaker(error)) {
123
+ // The endpoint answered — it just refused this caller. That is proof
124
+ // of life, so it closes the breaker rather than leaving it half-open:
125
+ // holding it open on the strength of a refusal would serialize every
126
+ // later read behind the one-probe gate for as long as refusals kept
127
+ // arriving, answering `breaker_open` to healthy callers against a
128
+ // healthy endpoint.
129
+ failFastUntil = 0;
130
+ recovering = false;
131
+ if (typeof error === "object" && error !== null) {
132
+ credentialErrors.add(error);
133
+ }
134
+ throw error;
135
+ }
136
+ failFastUntil = now() + cooldownMs;
137
+ recovering = true;
138
+ // The raw failure names a timeout on an endpoint the caller never
139
+ // asked for, which reads as "the gateway is broken". This says what
140
+ // the caller can actually do about it.
141
+ throw new IdentityUnavailableError(OUTAGE_MESSAGE, {
142
+ cause: error,
143
+ reason: "read_failed",
144
+ });
145
+ }
146
+ finally {
147
+ inflight.delete(key);
148
+ probeInFlight = false;
149
+ }
150
+ })();
151
+ inflight.set(key, pending);
152
+ return pending;
153
+ }
154
+ function classifyFailure(error) {
155
+ if (error instanceof IdentityUnavailableError) {
156
+ return error.reason === "caller_timeout" ? "caller_timeout" : "outage";
157
+ }
158
+ if (typeof error === "object" && error !== null) {
159
+ // Raw and not wrapped: `startRead` decided this one is the credential's
160
+ // fault, not the endpoint's. Calling it an outage would put a healthy
161
+ // endpoint in the outage bucket every time a stale key retries.
162
+ return credentialErrors.has(error) ? "credential_error" : "outage";
163
+ }
164
+ return "outage";
165
+ }
166
+ return async function guardedRead(apiKey) {
167
+ const key = createHash("sha256").update(apiKey).digest("hex");
168
+ const cached = cache.get(key);
169
+ if (cached) {
170
+ if (cached.expiresAt > now()) {
171
+ onOutcome("cached");
172
+ return cached.value;
173
+ }
174
+ cache.delete(key);
175
+ }
176
+ // A read already running is the one to wait on even while the breaker is
177
+ // open: it is the probe that will close it.
178
+ let pending = inflight.get(key);
179
+ if (!pending) {
180
+ // Open, or half-open with the one probe already out.
181
+ if (failFastUntil > now() || (recovering && probeInFlight)) {
182
+ onOutcome("breaker_open");
183
+ throw new IdentityUnavailableError(OUTAGE_MESSAGE, {
184
+ reason: "breaker_open",
185
+ });
186
+ }
187
+ if (recovering) {
188
+ probeInFlight = true;
189
+ }
190
+ pending = startRead(key, apiKey);
191
+ }
192
+ // Promise.race keeps a rejection handler on `pending` for its whole life,
193
+ // so a read that fails after this caller gave up stays handled.
194
+ const deadline = callerDeadline(callerWaitMs);
195
+ try {
196
+ const value = await Promise.race([pending, deadline.expired]);
197
+ onOutcome(value === undefined ? "refused" : "resolved");
198
+ return value;
199
+ }
200
+ catch (error) {
201
+ onOutcome(classifyFailure(error));
202
+ throw error;
203
+ }
204
+ finally {
205
+ deadline.cancel();
206
+ }
207
+ };
208
+ }
209
+ //# sourceMappingURL=identity-reads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-reads.js","sourceRoot":"","sources":["../../src/server/identity-reads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type GatewayConfig } from "./config.js";
2
+ import type { AppDeps } from "./deps.js";
3
+ export type StartGatewayOptions = {
4
+ /** Personal API key of the already-logged-in Superblocks CLI user. */
5
+ apiKey: string;
6
+ };
7
+ export type StartedGateway = {
8
+ close: () => Promise<void>;
9
+ config: GatewayConfig;
10
+ };
11
+ /**
12
+ * Chromium never blocks Gateway start. Preview screenshots fail closed when
13
+ * Playwright is missing (ENG-5796).
14
+ */
15
+ export declare function createRuntime(apiKey: string): Promise<{
16
+ close: () => Promise<void>;
17
+ config: GatewayConfig;
18
+ deps: AppDeps;
19
+ }>;
20
+ /**
21
+ * Boots Gateway MCP over stdio as the CLI user. Shared by
22
+ * `superblocks mcp serve` (the IR path) and `node dist/main.js`.
23
+ */
24
+ export declare function startStdioGateway(options: StartGatewayOptions): Promise<StartedGateway>;
package/dist/start.js ADDED
@@ -0,0 +1,81 @@
1
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
2
+ import { loadConfig } from "./config.js";
3
+ import { installFaultBarrier } from "./process/fault-barrier.js";
4
+ import { AppState } from "./sabs/app-state.js";
5
+ import { WebSocketSessionPeer } from "./sabs/websocket-session-peer.js";
6
+ import { HttpSuperblocksServerClient } from "./server/client.js";
7
+ import { createStores } from "./stores/memory.js";
8
+ import { startGatewayTelemetry } from "./telemetry/runtime.js";
9
+ import { createMcpServer } from "./transports/mcp/mount.js";
10
+ /**
11
+ * Chromium never blocks Gateway start. Preview screenshots fail closed when
12
+ * Playwright is missing (ENG-5796).
13
+ */
14
+ export async function createRuntime(apiKey) {
15
+ const config = loadConfig();
16
+ const stores = createStores();
17
+ const telemetry = startGatewayTelemetry({ apiKey, config });
18
+ const serverClient = new HttpSuperblocksServerClient(config.serverUrl);
19
+ const appState = new AppState();
20
+ const sessionPeer = new WebSocketSessionPeer({
21
+ appState,
22
+ beatLostGraceMs: config.beatLostGraceMs,
23
+ idleMs: config.heldSessionIdleMs,
24
+ profileKey: config.profileKey,
25
+ readyWaitMs: config.clarkReadyWaitMs,
26
+ releaseAfterTurnMs: config.heldSessionReleaseAfterTurnMs,
27
+ server: serverClient,
28
+ settleMs: config.clarkSettleMs,
29
+ testingEnabled: config.clarkTestingEnabled,
30
+ turnTimeoutMs: config.clarkTurnTimeoutMs,
31
+ uiBaseUrl: config.uiBaseUrl,
32
+ });
33
+ const deps = {
34
+ appState,
35
+ cliApiKey: apiKey,
36
+ config,
37
+ progress: stores.progress,
38
+ mcpTelemetry: telemetry.mcpTelemetry,
39
+ recentApps: stores.recentApps,
40
+ server: serverClient,
41
+ sessionPeer,
42
+ stepUpTurns: stores.stepUpTurns,
43
+ };
44
+ return {
45
+ config,
46
+ deps,
47
+ close: async () => {
48
+ sessionPeer.closeAll();
49
+ await telemetry.shutdown();
50
+ },
51
+ };
52
+ }
53
+ /**
54
+ * Boots Gateway MCP over stdio as the CLI user. Shared by
55
+ * `superblocks mcp serve` (the IR path) and `node dist/main.js`.
56
+ */
57
+ export async function startStdioGateway(options) {
58
+ const apiKey = options.apiKey.trim();
59
+ if (!apiKey) {
60
+ throw new Error("Not logged in to Superblocks. Run: superblocks login");
61
+ }
62
+ const runtime = await createRuntime(apiKey);
63
+ const disposeFaultBarrier = installFaultBarrier({
64
+ onFault: () => undefined,
65
+ shutdown: () => runtime.close(),
66
+ });
67
+ const server = createMcpServer(runtime.deps);
68
+ const transport = new StdioServerTransport();
69
+ await server.connect(transport);
70
+ console.error("gateway MCP listening on stdio as the Superblocks CLI user");
71
+ console.error("gateway live canvas capture uses libraryBrowserContext (testingEnabled does not gate it)", { testingEnabled: runtime.config.clarkTestingEnabled });
72
+ return {
73
+ config: runtime.config,
74
+ close: async () => {
75
+ disposeFaultBarrier();
76
+ await server.close().catch(() => undefined);
77
+ await runtime.close();
78
+ },
79
+ };
80
+ }
81
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { type AppScopeKey, type ProgressStore, type RecentAppStore, type StepUpTurn, type StepUpTurnStore, type UserScopeKey } from "./types.js";
2
+ export declare class MemoryRecentAppStore implements RecentAppStore {
3
+ private readonly byUser;
4
+ get(key: UserScopeKey): string | undefined;
5
+ set(input: UserScopeKey & {
6
+ applicationId: string;
7
+ }): void;
8
+ }
9
+ export declare class MemoryProgressStore implements ProgressStore {
10
+ private readonly byApp;
11
+ lastActivityAtMs(key: AppScopeKey): number | undefined;
12
+ recordActivity(input: AppScopeKey & {
13
+ atMs: number;
14
+ }): void;
15
+ stallHintedAtMs(key: AppScopeKey): number | undefined;
16
+ recordStallHint(input: AppScopeKey & {
17
+ atMs: number | undefined;
18
+ }): void;
19
+ private entry;
20
+ }
21
+ export declare class MemoryStepUpTurnStore implements StepUpTurnStore {
22
+ private readonly byId;
23
+ private readonly byIdempotency;
24
+ create(input: {
25
+ authUrl: string;
26
+ callbackToken?: string;
27
+ idempotencyKey: string;
28
+ reason: StepUpTurn["reason"];
29
+ ttlMs?: number;
30
+ turnId?: string;
31
+ }): StepUpTurn;
32
+ get(turnId: string): StepUpTurn | undefined;
33
+ getByIdempotencyKey(idempotencyKey: string): StepUpTurn | undefined;
34
+ complete(turnId: string, callbackToken: string): StepUpTurn | undefined;
35
+ private expireIfDue;
36
+ }
37
+ export type Stores = {
38
+ progress: ProgressStore;
39
+ recentApps: RecentAppStore;
40
+ stepUpTurns: StepUpTurnStore;
41
+ };
42
+ export declare function createStores(): Stores;
@@ -0,0 +1,121 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { constantTimeEquals } from "../security/constant-time.js";
3
+ import { DEFAULT_STEP_UP_TTL_MS, } from "./types.js";
4
+ function appKey(key) {
5
+ return `${key.organizationId}/${key.applicationId}`;
6
+ }
7
+ function userKey(key) {
8
+ return `${key.organizationId}/${key.userId}`;
9
+ }
10
+ export class MemoryRecentAppStore {
11
+ byUser = new Map();
12
+ get(key) {
13
+ return this.byUser.get(userKey(key));
14
+ }
15
+ set(input) {
16
+ this.byUser.set(userKey(input), input.applicationId);
17
+ }
18
+ }
19
+ export class MemoryProgressStore {
20
+ byApp = new Map();
21
+ lastActivityAtMs(key) {
22
+ return this.byApp.get(appKey(key))?.lastActivityAtMs;
23
+ }
24
+ recordActivity(input) {
25
+ this.entry(input).lastActivityAtMs = input.atMs;
26
+ }
27
+ stallHintedAtMs(key) {
28
+ return this.byApp.get(appKey(key))?.stallHintedAtMs;
29
+ }
30
+ recordStallHint(input) {
31
+ const entry = this.entry(input);
32
+ if (input.atMs === undefined) {
33
+ delete entry.stallHintedAtMs;
34
+ return;
35
+ }
36
+ entry.stallHintedAtMs = input.atMs;
37
+ }
38
+ entry(key) {
39
+ const id = appKey(key);
40
+ const existing = this.byApp.get(id);
41
+ if (existing) {
42
+ return existing;
43
+ }
44
+ const created = {};
45
+ this.byApp.set(id, created);
46
+ return created;
47
+ }
48
+ }
49
+ export class MemoryStepUpTurnStore {
50
+ byId = new Map();
51
+ byIdempotency = new Map();
52
+ create(input) {
53
+ const existingId = this.byIdempotency.get(input.idempotencyKey);
54
+ if (existingId) {
55
+ const existing = this.get(existingId);
56
+ if (existing && existing.status !== "expired") {
57
+ return existing;
58
+ }
59
+ }
60
+ const now = Date.now();
61
+ const turn = {
62
+ authUrl: input.authUrl,
63
+ callbackToken: input.callbackToken ?? randomUUID(),
64
+ createdAtMs: now,
65
+ idempotencyKey: input.idempotencyKey,
66
+ reason: input.reason,
67
+ status: "pending",
68
+ turnId: input.turnId ?? randomUUID(),
69
+ };
70
+ this.byId.set(turn.turnId, {
71
+ expiresAtMs: now + (input.ttlMs ?? DEFAULT_STEP_UP_TTL_MS),
72
+ turn,
73
+ });
74
+ this.byIdempotency.set(input.idempotencyKey, turn.turnId);
75
+ return turn;
76
+ }
77
+ get(turnId) {
78
+ const entry = this.byId.get(turnId);
79
+ if (!entry) {
80
+ return undefined;
81
+ }
82
+ return this.expireIfDue(entry) ?? entry.turn;
83
+ }
84
+ getByIdempotencyKey(idempotencyKey) {
85
+ const turnId = this.byIdempotency.get(idempotencyKey);
86
+ return turnId === undefined ? undefined : this.get(turnId);
87
+ }
88
+ complete(turnId, callbackToken) {
89
+ const entry = this.byId.get(turnId);
90
+ if (!entry) {
91
+ return undefined;
92
+ }
93
+ const expired = this.expireIfDue(entry);
94
+ if (expired) {
95
+ return expired;
96
+ }
97
+ // Constant-time because the token is the only thing standing between a
98
+ // caller and someone else's completed step-up.
99
+ if (!constantTimeEquals(entry.turn.callbackToken, callbackToken)) {
100
+ return undefined;
101
+ }
102
+ entry.turn = { ...entry.turn, status: "ready" };
103
+ return entry.turn;
104
+ }
105
+ expireIfDue(entry) {
106
+ if (Date.now() < entry.expiresAtMs) {
107
+ return undefined;
108
+ }
109
+ this.byId.delete(entry.turn.turnId);
110
+ this.byIdempotency.delete(entry.turn.idempotencyKey);
111
+ return { ...entry.turn, status: "expired" };
112
+ }
113
+ }
114
+ export function createStores() {
115
+ return {
116
+ progress: new MemoryProgressStore(),
117
+ recentApps: new MemoryRecentAppStore(),
118
+ stepUpTurns: new MemoryStepUpTurnStore(),
119
+ };
120
+ }
121
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/stores/memory.ts"],"names":[],"mappings":"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"}