stitchkit 0.110.0 → 0.110.2

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 (142) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/agent-runtime/archive-spill.d.ts +61 -0
  3. package/dist/agent-runtime/archive-spill.d.ts.map +1 -0
  4. package/dist/agent-runtime/branch-contract.d.ts +102 -0
  5. package/dist/agent-runtime/branch-contract.d.ts.map +1 -0
  6. package/dist/agent-runtime/branch-events.d.ts +18 -0
  7. package/dist/agent-runtime/branch-events.d.ts.map +1 -0
  8. package/dist/agent-runtime/branch-identities.d.ts +20 -0
  9. package/dist/agent-runtime/branch-identities.d.ts.map +1 -0
  10. package/dist/agent-runtime/branch-messages.d.ts +32 -0
  11. package/dist/agent-runtime/branch-messages.d.ts.map +1 -0
  12. package/dist/agent-runtime/branch-observations.d.ts +104 -0
  13. package/dist/agent-runtime/branch-observations.d.ts.map +1 -0
  14. package/dist/agent-runtime/branch-provider.d.ts +130 -0
  15. package/dist/agent-runtime/branch-provider.d.ts.map +1 -0
  16. package/dist/agent-runtime/branch-replay.d.ts +426 -0
  17. package/dist/agent-runtime/branch-replay.d.ts.map +1 -0
  18. package/dist/agent-runtime/branch-source.d.ts +16 -0
  19. package/dist/agent-runtime/branch-source.d.ts.map +1 -0
  20. package/dist/agent-runtime/branch-transitions.d.ts +6 -0
  21. package/dist/agent-runtime/branch-transitions.d.ts.map +1 -0
  22. package/dist/agent-runtime/sqlite-history.d.ts.map +1 -1
  23. package/dist/agent-runtime/sqlite-purge.d.ts.map +1 -1
  24. package/dist/agent-runtime/store-archive.d.ts +1 -0
  25. package/dist/agent-runtime/store-archive.d.ts.map +1 -1
  26. package/dist/agent-runtime/store-branch.d.ts +5 -0
  27. package/dist/agent-runtime/store-branch.d.ts.map +1 -0
  28. package/dist/agent-runtime/store-conformance-branch.d.ts +4 -0
  29. package/dist/agent-runtime/store-conformance-branch.d.ts.map +1 -0
  30. package/dist/agent-runtime/store-conformance-lifecycle.d.ts +10 -10
  31. package/dist/agent-runtime/store-conformance.d.ts.map +1 -1
  32. package/dist/agent-runtime/store-create.d.ts +1 -1
  33. package/dist/agent-runtime/store-create.d.ts.map +1 -1
  34. package/dist/agent-runtime/store-driver-contract.d.ts +6 -0
  35. package/dist/agent-runtime/store-driver-contract.d.ts.map +1 -1
  36. package/dist/agent-runtime/store-events.d.ts +90 -0
  37. package/dist/agent-runtime/store-events.d.ts.map +1 -1
  38. package/dist/agent-runtime/store-memory-archive.d.ts +8 -0
  39. package/dist/agent-runtime/store-memory-archive.d.ts.map +1 -0
  40. package/dist/agent-runtime/store-memory-events.d.ts +7 -0
  41. package/dist/agent-runtime/store-memory-events.d.ts.map +1 -0
  42. package/dist/agent-runtime/store-memory.d.ts +1 -1
  43. package/dist/agent-runtime/store-memory.d.ts.map +1 -1
  44. package/dist/agent-runtime/store-purge.d.ts +2 -0
  45. package/dist/agent-runtime/store-purge.d.ts.map +1 -1
  46. package/dist/agent-runtime/store-reduce-run.d.ts +2 -2
  47. package/dist/agent-runtime/store-reduce-run.d.ts.map +1 -1
  48. package/dist/agent-runtime/store-reduce-shared.d.ts +1 -0
  49. package/dist/agent-runtime/store-reduce-shared.d.ts.map +1 -1
  50. package/dist/agent-runtime/store-reducer.d.ts +2 -2
  51. package/dist/agent-runtime/store-reducer.d.ts.map +1 -1
  52. package/dist/agent-runtime/store.d.ts +3 -0
  53. package/dist/agent-runtime/store.d.ts.map +1 -1
  54. package/dist/browser/socket-io-client.d.ts +6 -0
  55. package/dist/browser/socket-io-client.d.ts.map +1 -0
  56. package/dist/browser/socket-io-contract.d.ts +183 -0
  57. package/dist/browser/socket-io-contract.d.ts.map +1 -0
  58. package/dist/browser/socket-io-default-peer.d.ts +3 -0
  59. package/dist/browser/socket-io-default-peer.d.ts.map +1 -0
  60. package/dist/browser/socket-io-explicit-peer.d.ts +12 -0
  61. package/dist/browser/socket-io-explicit-peer.d.ts.map +1 -0
  62. package/dist/browser/socket-io-peer.d.ts +2 -11
  63. package/dist/browser/socket-io-peer.d.ts.map +1 -1
  64. package/dist/browser/socket-io.d.ts +5 -224
  65. package/dist/browser/socket-io.d.ts.map +1 -1
  66. package/dist/durability/events.d.ts +4 -0
  67. package/dist/durability/events.d.ts.map +1 -1
  68. package/dist/entrypoints/agent-runtime/coding-tools.js +2 -3
  69. package/dist/entrypoints/agent-runtime/harness.js +5 -4
  70. package/dist/entrypoints/agent-runtime/realtime.js +3 -3
  71. package/dist/entrypoints/agent-runtime/sandbox.js +4 -6
  72. package/dist/entrypoints/agent-runtime/sqlite/bun.js +13 -3
  73. package/dist/entrypoints/agent-runtime/sqlite/node.js +13 -3
  74. package/dist/entrypoints/agent-runtime/testing.js +89 -5
  75. package/dist/entrypoints/agent-runtime.d.ts +1 -0
  76. package/dist/entrypoints/agent-runtime.d.ts.map +1 -1
  77. package/dist/entrypoints/agent-runtime.js +28 -18
  78. package/dist/entrypoints/application/directory-inbox.js +6 -6
  79. package/dist/entrypoints/application.js +1 -1
  80. package/dist/entrypoints/cli/publish.js +2 -2
  81. package/dist/entrypoints/cli.js +8 -8
  82. package/dist/entrypoints/contract.js +1 -1
  83. package/dist/entrypoints/files.js +1 -1
  84. package/dist/entrypoints/http.d.ts +1 -0
  85. package/dist/entrypoints/http.d.ts.map +1 -1
  86. package/dist/entrypoints/http.js +6 -2
  87. package/dist/entrypoints/index.js +20 -411
  88. package/dist/entrypoints/node.js +3 -3
  89. package/dist/entrypoints/observability.js +1 -1
  90. package/dist/entrypoints/process.js +1 -1
  91. package/dist/entrypoints/realtime.d.ts +6 -0
  92. package/dist/entrypoints/realtime.d.ts.map +1 -0
  93. package/dist/entrypoints/realtime.js +25 -0
  94. package/dist/entrypoints/remote.js +1 -1
  95. package/dist/entrypoints/server.js +11 -11
  96. package/dist/entrypoints/telegram/screens.js +9 -9
  97. package/dist/entrypoints/telegram.js +3 -3
  98. package/dist/entrypoints/testing.js +2 -2
  99. package/dist/entrypoints/tools/connections.js +3 -3
  100. package/dist/entrypoints/tools/invoker.js +3 -3
  101. package/dist/entrypoints/tools/mcp.js +4 -4
  102. package/dist/entrypoints/tools.js +26 -24
  103. package/dist/{index-61m15a18.js → index-0d8m0kee.js} +1 -1
  104. package/dist/{index-dmfr2cg5.js → index-2tazbwhv.js} +6 -6
  105. package/dist/{index-c17xcx4k.js → index-56yx8dxp.js} +19 -96
  106. package/dist/{index-0gs4ymfj.js → index-6qeqdz0z.js} +7 -1
  107. package/dist/{index-064zxbwj.js → index-79zxnh52.js} +3 -3
  108. package/dist/{index-2pevnh0x.js → index-7c046kxr.js} +4 -4
  109. package/dist/index-86sxnvpr.js +336 -0
  110. package/dist/{index-jyw90rps.js → index-bm180f2d.js} +204 -84
  111. package/dist/{index-mnhtbqrb.js → index-dd1z5kxb.js} +2 -2
  112. package/dist/{index-7a1xhhdx.js → index-e1sjcjfy.js} +31 -11
  113. package/dist/{index-5p55xreg.js → index-e9rbhw1s.js} +67 -29
  114. package/dist/{index-p6mvqcbq.js → index-ghwntn9n.js} +1 -1
  115. package/dist/index-hqsbtvta.js +92 -0
  116. package/dist/{index-73cz22ds.js → index-mha6b4vk.js} +6 -6
  117. package/dist/index-s2bgwsyr.js +2280 -0
  118. package/dist/{index-fnra8n1j.js → index-s2eybn7b.js} +9 -9
  119. package/dist/{index-njs9gvrh.js → index-s6d8zsha.js} +6 -6
  120. package/dist/index-snef22zr.js +94 -0
  121. package/dist/{index-c0hffcmj.js → index-zbssway3.js} +19 -2
  122. package/dist/process/group-presence.d.ts +3 -0
  123. package/dist/process/group-presence.d.ts.map +1 -0
  124. package/dist/process/group-settlement.d.ts.map +1 -1
  125. package/dist/process/group.d.ts.map +1 -1
  126. package/llms/agent-runtime.3.txt +3 -0
  127. package/llms/agent-runtime.txt +60 -0
  128. package/llms/realtime.txt +31 -0
  129. package/llms/stitchkit.txt +1 -0
  130. package/llms-full.txt +85 -0
  131. package/llms.txt +3 -2
  132. package/package.json +5 -1
  133. package/dist/index-8ks9b85e.js +0 -129
  134. package/dist/index-d2h99n7d.js +0 -1071
  135. package/dist/{index-9j2atjte.js → index-2f9r0jgr.js} +3 -3
  136. package/dist/{index-y70v24cw.js → index-8asb62xn.js} +0 -0
  137. package/dist/{index-k7qdkh3n.js → index-h1spd9kv.js} +3 -3
  138. package/dist/{index-zgwkwr1g.js → index-jk44mbqb.js} +0 -0
  139. package/dist/{index-qd8x73e8.js → index-k8fbzggr.js} +0 -0
  140. package/dist/{index-85qve8mq.js → index-pzw0fpek.js} +0 -0
  141. package/dist/{index-y3nemndz.js → index-r6v4mc67.js} +3 -3
  142. package/dist/{index-ktjmgq9p.js → index-s0xbnpfh.js} +3 -3
@@ -0,0 +1,336 @@
1
+ import {
2
+ RealtimeRequestTimeoutError2,
3
+ RealtimeRequestDisconnectedError2
4
+ } from "./index-4s0fep5q.js";
5
+ import {
6
+ isModuleNotFound
7
+ } from "./index-srs8hj9c.js";
8
+ import {
9
+ realtimeRequestTraces,
10
+ createRequestTracer,
11
+ bindRealtimeClient2
12
+ } from "./index-pvh3z03x.js";
13
+
14
+ // src/browser/retained.ts
15
+ function createRetainedTopics2() {
16
+ const last = {};
17
+ return {
18
+ record(topic, payload) {
19
+ last[topic] = payload;
20
+ },
21
+ replay(topic, handler) {
22
+ const value = last[topic];
23
+ if (value !== undefined)
24
+ handler(value);
25
+ },
26
+ get(topic) {
27
+ return last[topic];
28
+ },
29
+ clear(topic) {
30
+ if (topic !== undefined) {
31
+ delete last[topic];
32
+ return;
33
+ }
34
+ for (const key of Object.keys(last))
35
+ Reflect.deleteProperty(last, key);
36
+ }
37
+ };
38
+ }
39
+
40
+ // src/browser/socket-io-connection.ts
41
+ function toIoAuth(auth) {
42
+ if (typeof auth !== "function")
43
+ return auth;
44
+ return (cb) => {
45
+ Promise.resolve().then(auth).then(cb, () => cb({}));
46
+ };
47
+ }
48
+ function ioOptions(config) {
49
+ return {
50
+ path: config.path ?? "/socket.io/",
51
+ withCredentials: config.withCredentials ?? true,
52
+ auth: toIoAuth(config.auth),
53
+ ...config.query && { query: config.query },
54
+ ...config.extraHeaders && { extraHeaders: config.extraHeaders },
55
+ transports: config.transports ?? ["websocket", "polling"],
56
+ autoConnect: false,
57
+ reconnection: true,
58
+ reconnectionAttempts: config.reconnectionAttempts ?? Infinity,
59
+ reconnectionDelay: config.reconnectionDelay ?? 1000,
60
+ reconnectionDelayMax: config.reconnectionDelayMax ?? 5000,
61
+ timeout: config.timeout ?? 20000
62
+ };
63
+ }
64
+ function reportPeerFailure(config, error) {
65
+ if (!config.onConnectError)
66
+ throw error;
67
+ config.onConnectError({
68
+ message: error instanceof Error ? error.message : String(error),
69
+ data: error,
70
+ terminal: true
71
+ });
72
+ }
73
+ function awaitAcknowledgement(input) {
74
+ const { active, event } = input;
75
+ return new Promise((resolve, reject) => {
76
+ let settled = false;
77
+ const finish = (result) => {
78
+ if (settled)
79
+ return;
80
+ settled = true;
81
+ input.pendingRequestDisconnects.delete(onDisconnect);
82
+ active.off("disconnect", onDisconnect);
83
+ result();
84
+ };
85
+ const onDisconnect = () => {
86
+ finish(() => {
87
+ input.closeTrace("disconnected");
88
+ reject(new RealtimeRequestDisconnectedError2(event));
89
+ });
90
+ };
91
+ input.pendingRequestDisconnects.add(onDisconnect);
92
+ active.on("disconnect", onDisconnect);
93
+ const acknowledgement = input.emit();
94
+ acknowledgement.then((value) => finish(() => resolve(value)), () => {
95
+ finish(() => {
96
+ const connected = active.connected;
97
+ input.closeTrace(connected ? "timeout" : "disconnected");
98
+ reject(connected ? new RealtimeRequestTimeoutError2(event, input.timeoutMs) : new RealtimeRequestDisconnectedError2(event));
99
+ });
100
+ });
101
+ });
102
+ }
103
+ function createStickyEvents(retain) {
104
+ const names = retain ? retain.map(String) : [];
105
+ const known = new Set(names);
106
+ const retained = names.length > 0 ? createRetainedTopics2() : null;
107
+ return {
108
+ record(socket) {
109
+ if (!retained)
110
+ return;
111
+ for (const name of names) {
112
+ socket.on(name, (payload) => retained.record(name, payload));
113
+ }
114
+ },
115
+ replay(name, handler) {
116
+ if (retained && known.has(name))
117
+ retained.replay(name, (payload) => handler(payload));
118
+ }
119
+ };
120
+ }
121
+ function createRecycle(delay) {
122
+ let timer = null;
123
+ const clear = () => {
124
+ if (timer === null)
125
+ return;
126
+ clearTimeout(timer);
127
+ timer = null;
128
+ };
129
+ return {
130
+ clear,
131
+ schedule(run) {
132
+ if (delay === false)
133
+ return;
134
+ clear();
135
+ timer = setTimeout(() => {
136
+ timer = null;
137
+ run();
138
+ }, delay);
139
+ }
140
+ };
141
+ }
142
+ function connectErrorReport(error, socket) {
143
+ return {
144
+ message: error.message,
145
+ data: Reflect.get(error, "data"),
146
+ terminal: socket !== null && !socket.active
147
+ };
148
+ }
149
+
150
+ // src/browser/socket-io-peer.ts
151
+ function isIoModule(module) {
152
+ if (typeof module !== "object" || module === null)
153
+ return false;
154
+ return typeof Reflect.get(module, "io") === "function";
155
+ }
156
+ function createIoResolver(injected, defaultIo) {
157
+ if (!injected)
158
+ return defaultIo;
159
+ let pending = null;
160
+ return () => {
161
+ if (!pending) {
162
+ pending = Promise.resolve().then(injected).then((module) => {
163
+ const io = isIoModule(module) ? module.io : null;
164
+ if (!io) {
165
+ pending = null;
166
+ throw new Error("stitchkit: the loader passed in `peers.client` did not return the \"socket.io-client\" module — it must resolve to the module itself, as `() => import('socket.io-client')`.");
167
+ }
168
+ return io;
169
+ }, (cause) => {
170
+ pending = null;
171
+ if (!isModuleNotFound(cause))
172
+ throw cause;
173
+ throw new Error('stitchkit: createSocketIOClient could not load "socket.io-client" through the loader passed in `peers` — the artifact does not contain it. Check that the loader is a literal `import(\'socket.io-client\')` your bundler can follow, and that "socket.io-client" is a dependency of the package being bundled.', { cause });
174
+ });
175
+ }
176
+ return pending;
177
+ };
178
+ }
179
+
180
+ // src/browser/socket-io-client.ts
181
+ function createRealtimeClientWithPeer(contract, { onRejected, logger, onRequestPhase, ...config }, defaultIo) {
182
+ const transport = createSocketIOClientInternal(config, defaultIo, onRequestPhase);
183
+ const bound = bindRealtimeClient2(contract, transport, { onRejected, logger });
184
+ return {
185
+ ...bound,
186
+ get connected() {
187
+ return bound.connected;
188
+ },
189
+ connect: transport.connect,
190
+ disconnect: transport.disconnect
191
+ };
192
+ }
193
+ function createSocketIOClientWithPeer(config, defaultIo) {
194
+ return createSocketIOClientInternal(config, defaultIo);
195
+ }
196
+ function createSocketIOClientInternal(config, defaultIo, onRequestPhase) {
197
+ let socket = null;
198
+ const resolveIo = createIoResolver(config.peers?.client, defaultIo);
199
+ let desiredConnected = false;
200
+ let loadingPeer = false;
201
+ const recycle = createRecycle(config.reconnectOnServerDisconnect ?? 1000);
202
+ const pendingRequestDisconnects = new Set;
203
+ const tracer = createRequestTracer(onRequestPhase);
204
+ const connectionListeners = new Set;
205
+ const subscriptions = new Set;
206
+ const sticky = createStickyEvents(config.retain);
207
+ function notifyConnection(connected, reason) {
208
+ for (const listener of connectionListeners)
209
+ listener(connected, reason);
210
+ }
211
+ function openSocket(io) {
212
+ if (!desiredConnected || socket)
213
+ return;
214
+ socket = io(config.url, ioOptions(config));
215
+ tracer.observeEachOpen(socket, () => socket);
216
+ socket.on("connect", () => notifyConnection(true));
217
+ socket.on("disconnect", (reason) => {
218
+ notifyConnection(false, reason);
219
+ if (reason === "io server disconnect") {
220
+ const current = socket;
221
+ recycle.schedule(() => {
222
+ if (socket === current && current && !current.connected)
223
+ current.connect();
224
+ });
225
+ }
226
+ });
227
+ socket.io.on("reconnect_failed", () => {
228
+ desiredConnected = false;
229
+ });
230
+ socket.on("connect_error", (error) => {
231
+ const report = connectErrorReport(error, socket);
232
+ if (report.terminal)
233
+ desiredConnected = false;
234
+ config.onConnectError?.(report);
235
+ });
236
+ sticky.record(socket);
237
+ for (const attach of subscriptions)
238
+ attach(socket);
239
+ socket.connect();
240
+ }
241
+ return {
242
+ get connected() {
243
+ return socket?.connected ?? false;
244
+ },
245
+ connect() {
246
+ if (socket?.connected || desiredConnected)
247
+ return;
248
+ desiredConnected = true;
249
+ if (socket) {
250
+ socket.connect();
251
+ return;
252
+ }
253
+ if (loadingPeer)
254
+ return;
255
+ loadingPeer = true;
256
+ resolveIo().then((io) => {
257
+ loadingPeer = false;
258
+ openSocket(io);
259
+ }, (error) => {
260
+ loadingPeer = false;
261
+ desiredConnected = false;
262
+ reportPeerFailure(config, error);
263
+ });
264
+ },
265
+ disconnect() {
266
+ desiredConnected = false;
267
+ recycle.clear();
268
+ for (const reject of [...pendingRequestDisconnects])
269
+ reject();
270
+ if (!socket)
271
+ return;
272
+ const wasConnected = socket.connected;
273
+ socket.removeAllListeners();
274
+ socket.disconnect();
275
+ socket = null;
276
+ if (wasConnected)
277
+ notifyConnection(false);
278
+ },
279
+ on(event, handler) {
280
+ const name = event;
281
+ const attach = (s) => {
282
+ s.on(name, handler);
283
+ };
284
+ subscriptions.add(attach);
285
+ if (socket)
286
+ attach(socket);
287
+ const fn = handler;
288
+ sticky.replay(name, fn);
289
+ return () => {
290
+ subscriptions.delete(attach);
291
+ socket?.off(name, handler);
292
+ };
293
+ },
294
+ emit(event, ...args) {
295
+ const name = event;
296
+ if (!socket?.connected) {
297
+ config.onDroppedEmit?.({ event: name, args });
298
+ return false;
299
+ }
300
+ socket.emit(name, ...args);
301
+ return true;
302
+ },
303
+ emitWithAck(event, args, options) {
304
+ const trace = tracer.start(event, options.onPhase);
305
+ const closeTrace = (phase) => tracer.close(trace, phase);
306
+ const active = socket;
307
+ if (!active?.connected) {
308
+ const pending = Promise.reject(new RealtimeRequestDisconnectedError2(event));
309
+ closeTrace("disconnected");
310
+ if (trace)
311
+ realtimeRequestTraces.set(pending, trace);
312
+ return pending;
313
+ }
314
+ if (trace)
315
+ tracer.observe(active);
316
+ const pending = awaitAcknowledgement({
317
+ active,
318
+ event,
319
+ args,
320
+ timeoutMs: options.timeoutMs,
321
+ pendingRequestDisconnects,
322
+ closeTrace,
323
+ emit: () => tracer.starting(trace, () => active.timeout(options.timeoutMs).emitWithAck(event, ...args))
324
+ });
325
+ if (trace)
326
+ realtimeRequestTraces.set(pending, trace);
327
+ return pending;
328
+ },
329
+ onConnectionChange(listener) {
330
+ connectionListeners.add(listener);
331
+ return () => connectionListeners.delete(listener);
332
+ }
333
+ };
334
+ }
335
+
336
+ export { createRetainedTopics2, createRealtimeClientWithPeer, createSocketIOClientWithPeer };