@superblocksteam/gateway 2.0.161 → 2.0.162-next.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 (235) hide show
  1. package/README.md +135 -39
  2. package/dist/agents/resolve-orchestrator-url.d.ts +18 -0
  3. package/dist/agents/resolve-orchestrator-url.js +64 -1
  4. package/dist/agents/resolve-orchestrator-url.js.map +1 -1
  5. package/dist/capabilities/lifecycle.d.ts +46 -29
  6. package/dist/capabilities/lifecycle.js +1731 -843
  7. package/dist/capabilities/lifecycle.js.map +1 -1
  8. package/dist/capabilities/query-integration.d.ts +14 -0
  9. package/dist/capabilities/query-integration.js +172 -0
  10. package/dist/capabilities/query-integration.js.map +1 -0
  11. package/dist/capabilities/source-files-archive.d.ts +11 -0
  12. package/dist/capabilities/source-files-archive.js +54 -0
  13. package/dist/capabilities/source-files-archive.js.map +1 -0
  14. package/dist/capabilities/types.d.ts +197 -119
  15. package/dist/capabilities/types.js +45 -6
  16. package/dist/capabilities/types.js.map +1 -1
  17. package/dist/capture/browser-contract.d.ts +15 -5
  18. package/dist/capture/browser-contract.js +13 -3
  19. package/dist/capture/browser-contract.js.map +1 -1
  20. package/dist/capture/browser-instructions.d.ts +3 -2
  21. package/dist/capture/browser-instructions.js +3 -2
  22. package/dist/capture/browser-instructions.js.map +1 -1
  23. package/dist/capture/mode.d.ts +8 -1
  24. package/dist/capture/mode.js +22 -2
  25. package/dist/capture/mode.js.map +1 -1
  26. package/dist/config.d.ts +22 -23
  27. package/dist/config.js +13 -12
  28. package/dist/config.js.map +1 -1
  29. package/dist/deps.d.ts +7 -7
  30. package/dist/index.d.ts +2 -4
  31. package/dist/index.js +2 -4
  32. package/dist/index.js.map +1 -1
  33. package/dist/integrations/read-only-postgres-query.d.ts +2 -0
  34. package/dist/integrations/read-only-postgres-query.js +164 -0
  35. package/dist/integrations/read-only-postgres-query.js.map +1 -0
  36. package/dist/main.js +1 -1
  37. package/dist/main.js.map +1 -1
  38. package/dist/playwright/ensure-chromium.d.ts +5 -7
  39. package/dist/playwright/ensure-chromium.js +13 -13
  40. package/dist/playwright/ensure-chromium.js.map +1 -1
  41. package/dist/preview/capture-screenshot.d.ts +30 -4
  42. package/dist/preview/capture-screenshot.js +67 -17
  43. package/dist/preview/capture-screenshot.js.map +1 -1
  44. package/dist/preview/viewer-url.js +3 -1
  45. package/dist/preview/viewer-url.js.map +1 -1
  46. package/dist/process/fault-barrier.js +1 -1
  47. package/dist/process/fault-barrier.js.map +1 -1
  48. package/dist/sabs/agent-facing-text.d.ts +2 -0
  49. package/dist/sabs/agent-facing-text.js +56 -2
  50. package/dist/sabs/agent-facing-text.js.map +1 -1
  51. package/dist/sabs/app-state.d.ts +126 -0
  52. package/dist/sabs/app-state.js +332 -0
  53. package/dist/sabs/app-state.js.map +1 -0
  54. package/dist/sabs/awaited-decision.d.ts +49 -0
  55. package/dist/sabs/awaited-decision.js +129 -0
  56. package/dist/sabs/awaited-decision.js.map +1 -0
  57. package/dist/sabs/editor-client-methods.d.ts +23 -5
  58. package/dist/sabs/editor-client-methods.js +45 -4
  59. package/dist/sabs/editor-client-methods.js.map +1 -1
  60. package/dist/sabs/editor-socket.d.ts +85 -0
  61. package/dist/sabs/editor-socket.js +67 -0
  62. package/dist/sabs/editor-socket.js.map +1 -0
  63. package/dist/sabs/session-peer.d.ts +119 -82
  64. package/dist/sabs/session-peer.js +10 -1
  65. package/dist/sabs/session-peer.js.map +1 -1
  66. package/dist/sabs/streamed-reply.d.ts +45 -0
  67. package/dist/sabs/streamed-reply.js +125 -0
  68. package/dist/sabs/streamed-reply.js.map +1 -0
  69. package/dist/sabs/turn-collector.d.ts +50 -35
  70. package/dist/sabs/turn-collector.js +110 -176
  71. package/dist/sabs/turn-collector.js.map +1 -1
  72. package/dist/sabs/websocket-session-peer.d.ts +104 -69
  73. package/dist/sabs/websocket-session-peer.js +1333 -477
  74. package/dist/sabs/websocket-session-peer.js.map +1 -1
  75. package/dist/server/client.d.ts +41 -9
  76. package/dist/server/client.js +126 -21
  77. package/dist/server/client.js.map +1 -1
  78. package/dist/start.d.ts +1 -1
  79. package/dist/start.js +30 -8
  80. package/dist/start.js.map +1 -1
  81. package/dist/stores/memory.d.ts +46 -0
  82. package/dist/stores/memory.js +163 -0
  83. package/dist/stores/memory.js.map +1 -0
  84. package/dist/stores/types.d.ts +92 -0
  85. package/dist/stores/types.js +11 -0
  86. package/dist/stores/types.js.map +1 -0
  87. package/dist/telemetry/mcp-client.d.ts +6 -1
  88. package/dist/telemetry/mcp-client.js +100 -4
  89. package/dist/telemetry/mcp-client.js.map +1 -1
  90. package/dist/telemetry/metrics.d.ts +12 -3
  91. package/dist/telemetry/metrics.js +60 -14
  92. package/dist/telemetry/metrics.js.map +1 -1
  93. package/dist/telemetry/runtime.js +4 -6
  94. package/dist/telemetry/runtime.js.map +1 -1
  95. package/dist/transports/mcp/admin-tools.d.ts +8 -0
  96. package/dist/transports/mcp/admin-tools.js +115 -4
  97. package/dist/transports/mcp/admin-tools.js.map +1 -1
  98. package/dist/transports/mcp/app-status-html.d.ts +4 -8
  99. package/dist/transports/mcp/app-status-html.js +336 -128
  100. package/dist/transports/mcp/app-status-html.js.map +1 -1
  101. package/dist/transports/mcp/client-presentation.d.ts +16 -0
  102. package/dist/transports/mcp/client-presentation.js +13 -0
  103. package/dist/transports/mcp/client-presentation.js.map +1 -0
  104. package/dist/transports/mcp/cowork-editor-url.d.ts +6 -0
  105. package/dist/transports/mcp/cowork-editor-url.js +10 -0
  106. package/dist/transports/mcp/cowork-editor-url.js.map +1 -0
  107. package/dist/transports/mcp/decision-card-html.d.ts +26 -0
  108. package/dist/transports/mcp/decision-card-html.js +876 -0
  109. package/dist/transports/mcp/decision-card-html.js.map +1 -0
  110. package/dist/transports/mcp/decision-elicitation.d.ts +42 -0
  111. package/dist/transports/mcp/decision-elicitation.js +59 -0
  112. package/dist/transports/mcp/decision-elicitation.js.map +1 -1
  113. package/dist/transports/mcp/editor-document-probe.d.ts +4 -0
  114. package/dist/transports/mcp/editor-document-probe.js +35 -0
  115. package/dist/transports/mcp/editor-document-probe.js.map +1 -0
  116. package/dist/transports/mcp/editor-integration-setup-url.d.ts +14 -0
  117. package/dist/transports/mcp/editor-integration-setup-url.js +29 -0
  118. package/dist/transports/mcp/editor-integration-setup-url.js.map +1 -0
  119. package/dist/transports/mcp/format-tool-content.d.ts +13 -18
  120. package/dist/transports/mcp/format-tool-content.js +172 -13
  121. package/dist/transports/mcp/format-tool-content.js.map +1 -1
  122. package/dist/transports/mcp/instructions/index.d.ts +23 -0
  123. package/dist/transports/mcp/instructions/index.js +81 -0
  124. package/dist/transports/mcp/instructions/index.js.map +1 -0
  125. package/dist/transports/mcp/instructions/result.d.ts +18 -0
  126. package/dist/transports/mcp/instructions/result.js +58 -0
  127. package/dist/transports/mcp/instructions/result.js.map +1 -0
  128. package/dist/transports/mcp/instructions/tools/ask-user.d.ts +2 -0
  129. package/dist/transports/mcp/instructions/tools/ask-user.js +20 -0
  130. package/dist/transports/mcp/instructions/tools/ask-user.js.map +1 -0
  131. package/dist/transports/mcp/instructions/tools/build-app.d.ts +4 -0
  132. package/dist/transports/mcp/instructions/tools/build-app.js +54 -0
  133. package/dist/transports/mcp/instructions/tools/build-app.js.map +1 -0
  134. package/dist/transports/mcp/instructions/tools/check-app-progress.d.ts +3 -0
  135. package/dist/transports/mcp/instructions/tools/check-app-progress.js +79 -0
  136. package/dist/transports/mcp/instructions/tools/check-app-progress.js.map +1 -0
  137. package/dist/transports/mcp/instructions/tools/check-publish-progress.d.ts +3 -0
  138. package/dist/transports/mcp/instructions/tools/check-publish-progress.js +23 -0
  139. package/dist/transports/mcp/instructions/tools/check-publish-progress.js.map +1 -0
  140. package/dist/transports/mcp/instructions/tools/copy.d.ts +18 -0
  141. package/dist/transports/mcp/instructions/tools/copy.js +49 -0
  142. package/dist/transports/mcp/instructions/tools/copy.js.map +1 -0
  143. package/dist/transports/mcp/instructions/tools/create-integration.d.ts +4 -0
  144. package/dist/transports/mcp/instructions/tools/create-integration.js +41 -0
  145. package/dist/transports/mcp/instructions/tools/create-integration.js.map +1 -0
  146. package/dist/transports/mcp/instructions/tools/edit-app.d.ts +3 -0
  147. package/dist/transports/mcp/instructions/tools/edit-app.js +18 -0
  148. package/dist/transports/mcp/instructions/tools/edit-app.js.map +1 -0
  149. package/dist/transports/mcp/instructions/tools/get-app.d.ts +3 -0
  150. package/dist/transports/mcp/instructions/tools/get-app.js +49 -0
  151. package/dist/transports/mcp/instructions/tools/get-app.js.map +1 -0
  152. package/dist/transports/mcp/instructions/tools/get-integration-metadata.d.ts +2 -0
  153. package/dist/transports/mcp/instructions/tools/get-integration-metadata.js +13 -0
  154. package/dist/transports/mcp/instructions/tools/get-integration-metadata.js.map +1 -0
  155. package/dist/transports/mcp/instructions/tools/index.d.ts +7 -0
  156. package/dist/transports/mcp/instructions/tools/index.js +31 -0
  157. package/dist/transports/mcp/instructions/tools/index.js.map +1 -0
  158. package/dist/transports/mcp/instructions/tools/publish-app.d.ts +3 -0
  159. package/dist/transports/mcp/instructions/tools/publish-app.js +23 -0
  160. package/dist/transports/mcp/instructions/tools/publish-app.js.map +1 -0
  161. package/dist/transports/mcp/instructions/tools/start-app.d.ts +3 -0
  162. package/dist/transports/mcp/instructions/tools/start-app.js +22 -0
  163. package/dist/transports/mcp/instructions/tools/start-app.js.map +1 -0
  164. package/dist/transports/mcp/instructions/tools/upload-artifact.d.ts +2 -0
  165. package/dist/transports/mcp/instructions/tools/upload-artifact.js +13 -0
  166. package/dist/transports/mcp/instructions/tools/upload-artifact.js.map +1 -0
  167. package/dist/transports/mcp/mcp-app-brand-css.d.ts +1 -0
  168. package/dist/transports/mcp/mcp-app-brand-css.js +180 -0
  169. package/dist/transports/mcp/mcp-app-brand-css.js.map +1 -0
  170. package/dist/transports/mcp/mount.d.ts +14 -1
  171. package/dist/transports/mcp/mount.js +729 -172
  172. package/dist/transports/mcp/mount.js.map +1 -1
  173. package/dist/transports/mcp/native-browser-presence.d.ts +45 -0
  174. package/dist/transports/mcp/native-browser-presence.js +158 -0
  175. package/dist/transports/mcp/native-browser-presence.js.map +1 -0
  176. package/dist/transports/mcp/plan-approval.d.ts +44 -0
  177. package/dist/transports/mcp/plan-approval.js +179 -0
  178. package/dist/transports/mcp/plan-approval.js.map +1 -0
  179. package/dist/transports/mcp/session-directory.d.ts +7 -0
  180. package/dist/transports/mcp/session-directory.js +18 -0
  181. package/dist/transports/mcp/session-directory.js.map +1 -0
  182. package/dist/transports/mcp/tool-names.d.ts +2 -0
  183. package/dist/transports/mcp/tool-names.js +2 -0
  184. package/dist/transports/mcp/tool-names.js.map +1 -0
  185. package/package.json +16 -7
  186. package/skills/superblocks-build/SKILL.md +59 -0
  187. package/skills/superblocks-import/SKILL.md +125 -0
  188. package/dist/capabilities/import-prompt.d.ts +0 -11
  189. package/dist/capabilities/import-prompt.js +0 -96
  190. package/dist/capabilities/import-prompt.js.map +0 -1
  191. package/dist/capabilities/persisted-progress.d.ts +0 -46
  192. package/dist/capabilities/persisted-progress.js +0 -246
  193. package/dist/capabilities/persisted-progress.js.map +0 -1
  194. package/dist/events/cursor.d.ts +0 -43
  195. package/dist/events/cursor.js +0 -78
  196. package/dist/events/cursor.js.map +0 -1
  197. package/dist/events/memory-event-store.d.ts +0 -34
  198. package/dist/events/memory-event-store.js +0 -110
  199. package/dist/events/memory-event-store.js.map +0 -1
  200. package/dist/events/merge.d.ts +0 -23
  201. package/dist/events/merge.js +0 -97
  202. package/dist/events/merge.js.map +0 -1
  203. package/dist/events/normalized-collector.d.ts +0 -62
  204. package/dist/events/normalized-collector.js +0 -156
  205. package/dist/events/normalized-collector.js.map +0 -1
  206. package/dist/events/schema.d.ts +0 -9
  207. package/dist/events/schema.js +0 -93
  208. package/dist/events/schema.js.map +0 -1
  209. package/dist/events/snapshot.d.ts +0 -32
  210. package/dist/events/snapshot.js +0 -57
  211. package/dist/events/snapshot.js.map +0 -1
  212. package/dist/events/stream-key.d.ts +0 -2
  213. package/dist/events/stream-key.js +0 -31
  214. package/dist/events/stream-key.js.map +0 -1
  215. package/dist/events/types.d.ts +0 -179
  216. package/dist/events/types.js +0 -66
  217. package/dist/events/types.js.map +0 -1
  218. package/dist/resume/memory-progress-store.d.ts +0 -39
  219. package/dist/resume/memory-progress-store.js +0 -82
  220. package/dist/resume/memory-progress-store.js.map +0 -1
  221. package/dist/resume/memory-recent-app-store.d.ts +0 -14
  222. package/dist/resume/memory-recent-app-store.js +0 -27
  223. package/dist/resume/memory-recent-app-store.js.map +0 -1
  224. package/dist/resume/memory-turn-store.d.ts +0 -18
  225. package/dist/resume/memory-turn-store.js +0 -73
  226. package/dist/resume/memory-turn-store.js.map +0 -1
  227. package/dist/resume/progress-key.d.ts +0 -21
  228. package/dist/resume/progress-key.js +0 -58
  229. package/dist/resume/progress-key.js.map +0 -1
  230. package/dist/resume/stores.d.ts +0 -14
  231. package/dist/resume/stores.js +0 -18
  232. package/dist/resume/stores.js.map +0 -1
  233. package/dist/resume/types.d.ts +0 -124
  234. package/dist/resume/types.js +0 -13
  235. package/dist/resume/types.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-recent-app-store.js","sourceRoot":"","sources":["../../src/resume/memory-recent-app-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAOpB,SAAS,YAAY,CAAC,cAAsB,EAAE,MAAc;IAC1D,OAAO,GAAG,cAAc,IAAI,MAAM,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,OAAO,oBAAoB;IACd,WAAW,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEvE,KAAK,CAAC,GAAG,CAAC,KAGT;QACC,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAKT;QACC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,yBAAyB,CAAC;QACvD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;YACrE,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAChC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,18 +0,0 @@
1
- import { type SuspendedTurn, type TurnStore } from "./types.js";
2
- export declare class MemoryTurnStore implements TurnStore {
3
- private readonly byId;
4
- private readonly byIdempotency;
5
- create(input: {
6
- authUrl: string;
7
- callbackToken?: string;
8
- idempotencyKey: string;
9
- reason: SuspendedTurn["reason"];
10
- ttlMs?: number;
11
- turnId?: string;
12
- }): Promise<SuspendedTurn>;
13
- get(turnId: string): Promise<SuspendedTurn | undefined>;
14
- getByIdempotencyKey(idempotencyKey: string): Promise<SuspendedTurn | undefined>;
15
- complete(turnId: string, callbackToken: string): Promise<SuspendedTurn | undefined>;
16
- }
17
- /** Stable Redis-safe segment for caller-controlled idempotency keys. */
18
- export declare function hashIdempotencyKey(idempotencyKey: string): string;
@@ -1,73 +0,0 @@
1
- import { createHash, randomUUID } from "node:crypto";
2
- import { constantTimeEquals } from "../security/constant-time.js";
3
- import { DEFAULT_TURN_TTL_MS, } from "./types.js";
4
- export class MemoryTurnStore {
5
- byId = new Map();
6
- byIdempotency = new Map();
7
- async create(input) {
8
- const existingId = this.byIdempotency.get(input.idempotencyKey);
9
- if (existingId) {
10
- const existing = await this.get(existingId);
11
- if (existing && existing.status !== "expired") {
12
- return existing;
13
- }
14
- }
15
- const ttlMs = input.ttlMs ?? DEFAULT_TURN_TTL_MS;
16
- const now = Date.now();
17
- const turn = {
18
- authUrl: input.authUrl,
19
- callbackToken: input.callbackToken ?? randomUUID(),
20
- createdAtMs: now,
21
- idempotencyKey: input.idempotencyKey,
22
- reason: input.reason,
23
- status: "pending",
24
- turnId: input.turnId ?? randomUUID(),
25
- };
26
- this.byId.set(turn.turnId, { expiresAtMs: now + ttlMs, turn });
27
- this.byIdempotency.set(input.idempotencyKey, turn.turnId);
28
- return turn;
29
- }
30
- async get(turnId) {
31
- const entry = this.byId.get(turnId);
32
- if (!entry) {
33
- return undefined;
34
- }
35
- if (Date.now() >= entry.expiresAtMs) {
36
- this.byId.delete(turnId);
37
- this.byIdempotency.delete(entry.turn.idempotencyKey);
38
- return { ...entry.turn, status: "expired" };
39
- }
40
- return entry.turn;
41
- }
42
- async getByIdempotencyKey(idempotencyKey) {
43
- const turnId = this.byIdempotency.get(idempotencyKey);
44
- if (!turnId) {
45
- return undefined;
46
- }
47
- return this.get(turnId);
48
- }
49
- async complete(turnId, callbackToken) {
50
- const entry = this.byId.get(turnId);
51
- if (!entry) {
52
- return undefined;
53
- }
54
- if (Date.now() >= entry.expiresAtMs) {
55
- this.byId.delete(turnId);
56
- this.byIdempotency.delete(entry.turn.idempotencyKey);
57
- return { ...entry.turn, status: "expired" };
58
- }
59
- if (!constantTimeEquals(entry.turn.callbackToken, callbackToken)) {
60
- return undefined;
61
- }
62
- if (entry.turn.status === "expired") {
63
- return entry.turn;
64
- }
65
- entry.turn = { ...entry.turn, status: "ready" };
66
- return entry.turn;
67
- }
68
- }
69
- /** Stable Redis-safe segment for caller-controlled idempotency keys. */
70
- export function hashIdempotencyKey(idempotencyKey) {
71
- return createHash("sha256").update(idempotencyKey).digest("hex");
72
- }
73
- //# sourceMappingURL=memory-turn-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-turn-store.js","sourceRoot":"","sources":["../../src/resume/memory-turn-store.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import type { AppScopeKey, ProgressCursorKey } from "./types.js";
2
- export declare const CURSOR_KEY_PREFIX = "gateway:progress:cursor:";
3
- export declare const LAST_ACTIVITY_KEY_PREFIX = "gateway:progress:last-activity:";
4
- export declare const LIVE_EDIT_KEY_PREFIX = "gateway:progress:live-edit:";
5
- /**
6
- * One caller's cursor for one application.
7
- *
8
- * The channel stays in the clear: it is one of three constant strings, it
9
- * cannot identify anybody, and being able to tell an MCP cursor from a Slack
10
- * one by looking at a key is worth more than the nothing it discloses.
11
- */
12
- export declare function cursorKey(key: ProgressCursorKey): string;
13
- /**
14
- * When an application's build last said anything.
15
- *
16
- * App-scoped rather than per-caller: whether a build has gone quiet is a fact
17
- * about the build, and keying it by reader would let two callers disagree
18
- * about the same turn at the same instant.
19
- */
20
- export declare function lastActivityKey(key: AppScopeKey): string;
21
- export declare function liveEditKey(key: AppScopeKey): string;
@@ -1,58 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- export const CURSOR_KEY_PREFIX = "gateway:progress:cursor:";
3
- export const LAST_ACTIVITY_KEY_PREFIX = "gateway:progress:last-activity:";
4
- export const LIVE_EDIT_KEY_PREFIX = "gateway:progress:live-edit:";
5
- /**
6
- * Collapses the identifying parts of a key to a fixed-width digest.
7
- *
8
- * Two things at once. It bounds the key: organization, application and caller
9
- * identifiers are all caller-influenced and none has a length limit here, so
10
- * a raw key would be as long as whatever was sent. And it keeps the caller's
11
- * identity out of storage — a Slack user id or an OAuth subject in a Redis
12
- * key is a record of who used the product, readable by anyone who can list
13
- * keys, for a value that only ever needs to be compared for equality.
14
- */
15
- function digest(parts) {
16
- const hash = createHash("sha256");
17
- for (const part of parts) {
18
- // Length-prefixed for the same reason the event stream keys are: the
19
- // parts come from claims and command bodies, so no separator is safe to
20
- // assume absent, and `a|b` + `c` must not address `a` + `b|c`.
21
- hash.update(`${part.length}:${part}`);
22
- }
23
- return hash.digest("hex");
24
- }
25
- /**
26
- * One caller's cursor for one application.
27
- *
28
- * The channel stays in the clear: it is one of three constant strings, it
29
- * cannot identify anybody, and being able to tell an MCP cursor from a Slack
30
- * one by looking at a key is worth more than the nothing it discloses.
31
- */
32
- export function cursorKey(key) {
33
- return `${CURSOR_KEY_PREFIX}${key.caller.channel}:${digest([
34
- key.organizationId,
35
- key.applicationId,
36
- key.caller.id,
37
- ])}`;
38
- }
39
- /**
40
- * When an application's build last said anything.
41
- *
42
- * App-scoped rather than per-caller: whether a build has gone quiet is a fact
43
- * about the build, and keying it by reader would let two callers disagree
44
- * about the same turn at the same instant.
45
- */
46
- export function lastActivityKey(key) {
47
- return `${LAST_ACTIVITY_KEY_PREFIX}${digest([
48
- key.organizationId,
49
- key.applicationId,
50
- ])}`;
51
- }
52
- export function liveEditKey(key) {
53
- return `${LIVE_EDIT_KEY_PREFIX}${digest([
54
- key.organizationId,
55
- key.applicationId,
56
- ])}`;
57
- }
58
- //# sourceMappingURL=progress-key.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress-key.js","sourceRoot":"","sources":["../../src/resume/progress-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAC5D,MAAM,CAAC,MAAM,wBAAwB,GAAG,iCAAiC,CAAC;AAC1E,MAAM,CAAC,MAAM,oBAAoB,GAAG,6BAA6B,CAAC;AAElE;;;;;;;;;GASG;AACH,SAAS,MAAM,CAAC,KAAwB;IACtC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,qEAAqE;QACrE,wEAAwE;QACxE,+DAA+D;QAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,GAAsB;IAC9C,OAAO,GAAG,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;QACzD,GAAG,CAAC,cAAc;QAClB,GAAG,CAAC,aAAa;QACjB,GAAG,CAAC,MAAM,CAAC,EAAE;KACd,CAAC,EAAE,CAAC;AACP,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,GAAgB;IAC9C,OAAO,GAAG,wBAAwB,GAAG,MAAM,CAAC;QAC1C,GAAG,CAAC,cAAc;QAClB,GAAG,CAAC,aAAa;KAClB,CAAC,EAAE,CAAC;AACP,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAgB;IAC1C,OAAO,GAAG,oBAAoB,GAAG,MAAM,CAAC;QACtC,GAAG,CAAC,cAAc;QAClB,GAAG,CAAC,aAAa;KAClB,CAAC,EAAE,CAAC;AACP,CAAC"}
@@ -1,14 +0,0 @@
1
- import type { EventStore } from "../events/types.js";
2
- import type { ProgressStore, RecentAppStore, TurnStore } from "./types.js";
3
- export type Stores = {
4
- close: () => Promise<void>;
5
- events: EventStore;
6
- progressCursors: ProgressStore;
7
- recentApps: RecentAppStore;
8
- turns: TurnStore;
9
- };
10
- /**
11
- * In-process stores for the local-agent gateway. Suspended turns and progress
12
- * cursors do not survive a restart.
13
- */
14
- export declare function createStores(): Promise<Stores>;
@@ -1,18 +0,0 @@
1
- import { MemoryEventStore } from "../events/memory-event-store.js";
2
- import { MemoryProgressStore } from "./memory-progress-store.js";
3
- import { MemoryRecentAppStore } from "./memory-recent-app-store.js";
4
- import { MemoryTurnStore } from "./memory-turn-store.js";
5
- /**
6
- * In-process stores for the local-agent gateway. Suspended turns and progress
7
- * cursors do not survive a restart.
8
- */
9
- export async function createStores() {
10
- return {
11
- close: async () => undefined,
12
- events: new MemoryEventStore(),
13
- progressCursors: new MemoryProgressStore(),
14
- recentApps: new MemoryRecentAppStore(),
15
- turns: new MemoryTurnStore(),
16
- };
17
- }
18
- //# sourceMappingURL=stores.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stores.js","sourceRoot":"","sources":["../../src/resume/stores.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAWzD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,OAAO;QACL,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;QAC5B,MAAM,EAAE,IAAI,gBAAgB,EAAE;QAC9B,eAAe,EAAE,IAAI,mBAAmB,EAAE;QAC1C,UAAU,EAAE,IAAI,oBAAoB,EAAE;QACtC,KAAK,EAAE,IAAI,eAAe,EAAE;KAC7B,CAAC;AACJ,CAAC"}
@@ -1,124 +0,0 @@
1
- import type { EventCursor } from "../events/cursor.js";
2
- export type TurnStatus = "pending" | "ready" | "expired";
3
- export type SuspendedTurn = {
4
- authUrl: string;
5
- callbackToken: string;
6
- createdAtMs: number;
7
- idempotencyKey: string;
8
- reason: "idp_step_up";
9
- status: TurnStatus;
10
- turnId: string;
11
- };
12
- export type TurnStore = {
13
- complete(turnId: string, callbackToken: string): Promise<SuspendedTurn | undefined>;
14
- create(input: {
15
- authUrl: string;
16
- callbackToken?: string;
17
- idempotencyKey: string;
18
- reason: SuspendedTurn["reason"];
19
- ttlMs?: number;
20
- turnId?: string;
21
- }): Promise<SuspendedTurn>;
22
- get(turnId: string): Promise<SuspendedTurn | undefined>;
23
- getByIdempotencyKey(idempotencyKey: string): Promise<SuspendedTurn | undefined>;
24
- };
25
- export type RecentApp = {
26
- applicationId: string;
27
- };
28
- export type RecentAppStore = {
29
- get(input: {
30
- organizationId: string;
31
- userId: string;
32
- }): Promise<RecentApp | undefined>;
33
- set(input: {
34
- applicationId: string;
35
- organizationId: string;
36
- ttlMs?: number;
37
- userId: string;
38
- }): Promise<void>;
39
- };
40
- /**
41
- * Which channel a caller reached the gateway through. Part of a cursor's
42
- * identity: two hosts polling the same build are two readers, and neither may
43
- * consume the other's position.
44
- */
45
- export type CallerChannel = "http" | "mcp";
46
- /**
47
- * A caller, as far as resume is concerned.
48
- *
49
- * `id` is whatever the transport can name the caller by that stays the same
50
- * across its reconnects: a CLI user id or MCP session id. It is hashed
51
- * before it reaches storage and never appears in a log line or a metric
52
- * label, so nothing here needs to be, or may be, a name or an address.
53
- */
54
- export type CallerRef = {
55
- channel: CallerChannel;
56
- id: string;
57
- };
58
- export type ProgressCursorKey = {
59
- applicationId: string;
60
- caller: CallerRef;
61
- organizationId: string;
62
- };
63
- export type AppScopeKey = {
64
- applicationId: string;
65
- organizationId: string;
66
- };
67
- /**
68
- * One caller's place in a live edit's history.
69
- *
70
- * The cursor itself is the public part, handed back to the caller. The stall
71
- * bookkeeping is not: it exists so a long-quiet hint fires once per quiet
72
- * spell rather than on every poll, and a caller that edited it could only
73
- * silence or spam its own hint.
74
- */
75
- export type ProgressCursorRecord = {
76
- cursor: EventCursor;
77
- /**
78
- * When this caller was last told the build had gone quiet, cleared as soon
79
- * as it hears anything new.
80
- */
81
- stallHintedAtMs?: number;
82
- };
83
- /**
84
- * Where a resumed reader picks up.
85
- *
86
- * Facts about the application — which live edit is serving it, when its build
87
- * last said anything — are app-scoped, because any caller may ask them and
88
- * every caller must get the same answer. How far a reader has got is the one
89
- * per-caller thing here.
90
- *
91
- * Reads never consume. Two callers resuming the same build advance only their
92
- * own cursor, so neither can take events away from the other.
93
- */
94
- export type ProgressStore = {
95
- getCursor(key: ProgressCursorKey): Promise<ProgressCursorRecord | undefined>;
96
- /** When this application's build last emitted activity, if it has. */
97
- getLastActivityAtMs(key: AppScopeKey): Promise<number | undefined>;
98
- /** The live edit currently serving an application, if one is known. */
99
- getLiveEditId(key: AppScopeKey): Promise<string | undefined>;
100
- setCursor(input: ProgressCursorKey & {
101
- record: ProgressCursorRecord;
102
- ttlMs?: number;
103
- }): Promise<void>;
104
- setLastActivityAtMs(input: AppScopeKey & {
105
- atMs: number;
106
- ttlMs?: number;
107
- }): Promise<void>;
108
- setLiveEditId(input: AppScopeKey & {
109
- liveEditId: string;
110
- ttlMs?: number;
111
- }): Promise<void>;
112
- };
113
- export declare const DEFAULT_TURN_TTL_MS = 180000;
114
- export declare const DEFAULT_RECENT_APP_TTL_MS = 86400000;
115
- /**
116
- * How long a caller's cursor outlives its last read.
117
- *
118
- * Matched to the event stream's own retention rather than to a session: a
119
- * cursor into a stream the gateway has already reclaimed can only produce a
120
- * stale read, and keeping it costs a key per caller per app for nothing.
121
- */
122
- export declare const DEFAULT_PROGRESS_CURSOR_TTL_MS = 3600000;
123
- /** How long an application's live-edit pointer survives without a write. */
124
- export declare const DEFAULT_LIVE_EDIT_POINTER_TTL_MS = 86400000;
@@ -1,13 +0,0 @@
1
- export const DEFAULT_TURN_TTL_MS = 180_000;
2
- export const DEFAULT_RECENT_APP_TTL_MS = 86_400_000;
3
- /**
4
- * How long a caller's cursor outlives its last read.
5
- *
6
- * Matched to the event stream's own retention rather than to a session: a
7
- * cursor into a stream the gateway has already reclaimed can only produce a
8
- * stale read, and keeping it costs a key per caller per app for nothing.
9
- */
10
- export const DEFAULT_PROGRESS_CURSOR_TTL_MS = 3_600_000;
11
- /** How long an application's live-edit pointer survives without a write. */
12
- export const DEFAULT_LIVE_EDIT_POINTER_TTL_MS = 86_400_000;
13
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/resume/types.ts"],"names":[],"mappings":"AA8HA,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAC3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,UAAU,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,SAAS,CAAC;AAExD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gCAAgC,GAAG,UAAU,CAAC"}