@stateforge-labs/herdr-sdk 0.0.0-stage → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/LICENSE +18 -0
  2. package/NOTICE.md +51 -0
  3. package/README.md +211 -2
  4. package/bin/herdr-drift.js +14 -0
  5. package/bin/herdr-skill.js +38 -0
  6. package/dist/admin.d.ts +2 -0
  7. package/dist/admin.js +3 -0
  8. package/dist/constants.d.ts +236 -0
  9. package/dist/constants.js +294 -0
  10. package/dist/core/backoff.d.ts +20 -0
  11. package/dist/core/backoff.js +53 -0
  12. package/dist/core/constants.d.ts +143 -0
  13. package/dist/core/constants.js +98 -0
  14. package/dist/core/errors.d.ts +35 -0
  15. package/dist/core/errors.js +16 -0
  16. package/dist/core/events.d.ts +42 -0
  17. package/dist/core/events.js +128 -0
  18. package/dist/core/kernel.d.ts +65 -0
  19. package/dist/core/kernel.js +138 -0
  20. package/dist/core/link.d.ts +47 -0
  21. package/dist/core/link.js +187 -0
  22. package/dist/core/test-kit/constants.d.ts +51 -0
  23. package/dist/core/test-kit/constants.js +43 -0
  24. package/dist/core/test-kit/fake-core.d.ts +61 -0
  25. package/dist/core/test-kit/fake-core.js +228 -0
  26. package/dist/core/test-kit/frames.d.ts +1 -0
  27. package/dist/core/test-kit/frames.js +480 -0
  28. package/dist/core/test-kit/setup-test.d.ts +18 -0
  29. package/dist/core/test-kit/setup-test.js +35 -0
  30. package/dist/core/wire.d.ts +85 -0
  31. package/dist/core/wire.js +199 -0
  32. package/dist/core-test-kit.d.ts +5 -0
  33. package/dist/core-test-kit.js +5 -0
  34. package/dist/core.d.ts +15 -0
  35. package/dist/core.js +12 -0
  36. package/dist/drift/cli.d.ts +22 -0
  37. package/dist/drift/cli.js +146 -0
  38. package/dist/drift/constants.d.ts +83 -0
  39. package/dist/drift/constants.js +73 -0
  40. package/dist/drift/diff.d.ts +7 -0
  41. package/dist/drift/diff.js +91 -0
  42. package/dist/drift/schema.d.ts +19 -0
  43. package/dist/drift/schema.js +190 -0
  44. package/dist/drift/types.d.ts +76 -0
  45. package/dist/drift/types.js +1 -0
  46. package/dist/drift.d.ts +5 -0
  47. package/dist/drift.js +6 -0
  48. package/dist/effect.d.ts +3 -0
  49. package/dist/effect.js +4 -0
  50. package/dist/herdr/client/connect.d.ts +5 -0
  51. package/dist/herdr/client/connect.js +81 -0
  52. package/dist/herdr/client/held.d.ts +54 -0
  53. package/dist/herdr/client/held.js +100 -0
  54. package/dist/herdr/client/long-poll.d.ts +33 -0
  55. package/dist/herdr/client/long-poll.js +66 -0
  56. package/dist/herdr/client/scoped.d.ts +45 -0
  57. package/dist/herdr/client/scoped.js +241 -0
  58. package/dist/herdr/client/streams.d.ts +9 -0
  59. package/dist/herdr/client/streams.js +40 -0
  60. package/dist/herdr/client/subscribe.d.ts +75 -0
  61. package/dist/herdr/client/subscribe.js +208 -0
  62. package/dist/herdr/client/types.d.ts +150 -0
  63. package/dist/herdr/client/types.js +1 -0
  64. package/dist/herdr/client/watch-pane-set.d.ts +34 -0
  65. package/dist/herdr/client/watch-pane-set.js +271 -0
  66. package/dist/herdr/client/watch.d.ts +117 -0
  67. package/dist/herdr/client/watch.js +138 -0
  68. package/dist/herdr/effect/to-tagged-error.d.ts +2 -0
  69. package/dist/herdr/effect/to-tagged-error.js +54 -0
  70. package/dist/herdr/effect/types.d.ts +51 -0
  71. package/dist/herdr/effect/types.js +26 -0
  72. package/dist/herdr/errors.d.ts +53 -0
  73. package/dist/herdr/errors.js +87 -0
  74. package/dist/herdr/generated/entries/admin.d.ts +2 -0
  75. package/dist/herdr/generated/entries/admin.js +5 -0
  76. package/dist/herdr/generated/entries/client.d.ts +2 -0
  77. package/dist/herdr/generated/entries/client.js +5 -0
  78. package/dist/herdr/generated/entries/held.d.ts +2 -0
  79. package/dist/herdr/generated/entries/held.js +5 -0
  80. package/dist/herdr/generated/entries/prompt.d.ts +2 -0
  81. package/dist/herdr/generated/entries/prompt.js +5 -0
  82. package/dist/herdr/generated/entries/read-only-content.d.ts +2 -0
  83. package/dist/herdr/generated/entries/read-only-content.js +5 -0
  84. package/dist/herdr/generated/entries/read-only.d.ts +2 -0
  85. package/dist/herdr/generated/entries/read-only.js +5 -0
  86. package/dist/herdr/generated/entry-methods.d.ts +9 -0
  87. package/dist/herdr/generated/entry-methods.js +17 -0
  88. package/dist/herdr/generated/errors.d.ts +4 -0
  89. package/dist/herdr/generated/errors.js +3 -0
  90. package/dist/herdr/generated/events.d.ts +274 -0
  91. package/dist/herdr/generated/events.js +3 -0
  92. package/dist/herdr/generated/index.d.ts +20 -0
  93. package/dist/herdr/generated/index.js +19 -0
  94. package/dist/herdr/generated/method-table.d.ts +615 -0
  95. package/dist/herdr/generated/method-table.js +106 -0
  96. package/dist/herdr/generated/names/agent-status.d.ts +10 -0
  97. package/dist/herdr/generated/names/agent-status.js +10 -0
  98. package/dist/herdr/generated/names/capability-class.d.ts +14 -0
  99. package/dist/herdr/generated/names/capability-class.js +15 -0
  100. package/dist/herdr/generated/names/event-kind.d.ts +31 -0
  101. package/dist/herdr/generated/names/event-kind.js +31 -0
  102. package/dist/herdr/generated/names/event-match-kind.d.ts +23 -0
  103. package/dist/herdr/generated/names/event-match-kind.js +24 -0
  104. package/dist/herdr/generated/names/index.d.ts +10 -0
  105. package/dist/herdr/generated/names/index.js +12 -0
  106. package/dist/herdr/generated/names/method.d.ts +209 -0
  107. package/dist/herdr/generated/names/method.js +209 -0
  108. package/dist/herdr/generated/names/result-tag.d.ts +68 -0
  109. package/dist/herdr/generated/names/result-tag.js +68 -0
  110. package/dist/herdr/generated/names/server-capability.d.ts +10 -0
  111. package/dist/herdr/generated/names/server-capability.js +11 -0
  112. package/dist/herdr/generated/names/subscription-event-kind.d.ts +8 -0
  113. package/dist/herdr/generated/names/subscription-event-kind.js +8 -0
  114. package/dist/herdr/generated/names/subscription-type.d.ts +31 -0
  115. package/dist/herdr/generated/names/subscription-type.js +32 -0
  116. package/dist/herdr/generated/names/token-name-pattern.d.ts +2 -0
  117. package/dist/herdr/generated/names/token-name-pattern.js +4 -0
  118. package/dist/herdr/generated/namespaces.d.ts +785 -0
  119. package/dist/herdr/generated/namespaces.js +3 -0
  120. package/dist/herdr/generated/overrides.d.ts +33 -0
  121. package/dist/herdr/generated/overrides.js +20 -0
  122. package/dist/herdr/generated/params.d.ts +799 -0
  123. package/dist/herdr/generated/params.js +3 -0
  124. package/dist/herdr/generated/preset-methods.d.ts +4 -0
  125. package/dist/herdr/generated/preset-methods.js +7 -0
  126. package/dist/herdr/generated/presets/sessions-reader.d.ts +2 -0
  127. package/dist/herdr/generated/presets/sessions-reader.js +5 -0
  128. package/dist/herdr/generated/results.d.ts +978 -0
  129. package/dist/herdr/generated/results.js +52 -0
  130. package/dist/herdr/generated/test-data/defaults.d.ts +739 -0
  131. package/dist/herdr/generated/test-data/defaults.js +741 -0
  132. package/dist/herdr/generated/test-data/shapes.d.ts +1325 -0
  133. package/dist/herdr/generated/test-data/shapes.js +2245 -0
  134. package/dist/herdr/test-kit/fake-herdr.d.ts +13 -0
  135. package/dist/herdr/test-kit/fake-herdr.js +216 -0
  136. package/dist/herdr/test-kit/fake-protocol.d.ts +107 -0
  137. package/dist/herdr/test-kit/fake-protocol.js +436 -0
  138. package/dist/herdr/test-kit/types.d.ts +88 -0
  139. package/dist/herdr/test-kit/types.js +1 -0
  140. package/dist/herdr/wire/codec.d.ts +36 -0
  141. package/dist/herdr/wire/codec.js +62 -0
  142. package/dist/herdr/wire/connection.d.ts +13 -0
  143. package/dist/herdr/wire/connection.js +65 -0
  144. package/dist/herdr/wire/dedicated.d.ts +2 -0
  145. package/dist/herdr/wire/dedicated.js +238 -0
  146. package/dist/herdr/wire/push-decoder.d.ts +2 -0
  147. package/dist/herdr/wire/push-decoder.js +40 -0
  148. package/dist/herdr/wire/rpc.d.ts +3 -0
  149. package/dist/herdr/wire/rpc.js +141 -0
  150. package/dist/herdr/wire/socket-path.d.ts +8 -0
  151. package/dist/herdr/wire/socket-path.js +23 -0
  152. package/dist/herdr/wire/types.d.ts +78 -0
  153. package/dist/herdr/wire/types.js +1 -0
  154. package/dist/index.d.ts +11 -0
  155. package/dist/index.js +7 -0
  156. package/dist/read-only.d.ts +5 -0
  157. package/dist/read-only.js +6 -0
  158. package/dist/schema.d.ts +5 -0
  159. package/dist/schema.js +6 -0
  160. package/dist/test-kit.d.ts +2 -0
  161. package/dist/test-kit.js +3 -0
  162. package/docs/api/events.md +43 -0
  163. package/docs/api/methods.md +232 -0
  164. package/package.json +112 -4
  165. package/schema/herdr-api.schema.json +10759 -0
  166. package/schema/herdr-version.json +5 -0
  167. package/skills/herdr-sdk/SKILL.md +75 -0
  168. package/skills/herdr-sdk/references/api-map.md +28 -0
  169. package/skills/herdr-sdk/references/errors.md +19 -0
  170. package/skills/herdr-sdk/references/recipes.md +171 -0
  171. package/skills/herdr-sdk/references/versions.md +7 -0
@@ -0,0 +1,480 @@
1
+ // Role: frames recorded from a real herdr-core (masked), the script of the fake core.
2
+ // Informs HERDR-ADR-0020 (the herdr-core client); ported from the desktop work in herdr-plugins.
3
+ export const RECORDED_FRAMES = {
4
+ "hello": {
5
+ "id": 0,
6
+ "jsonrpc": "2.0",
7
+ "result": {
8
+ "core": {
9
+ "id": "9b649bdf70135b93a5f5a733bd918e4d",
10
+ "name": "host"
11
+ },
12
+ "features": [
13
+ "framed",
14
+ "attach",
15
+ "events",
16
+ "status",
17
+ "shell",
18
+ "resize_notifications",
19
+ "automatic_input"
20
+ ],
21
+ "framed": false,
22
+ "generation": 1,
23
+ "methods": [
24
+ "hello",
25
+ "server.status",
26
+ "server.stop",
27
+ "server.restart",
28
+ "terminal.run",
29
+ "templates.list",
30
+ "terminal.list",
31
+ "terminal.get",
32
+ "terminal.kill",
33
+ "terminal.rm",
34
+ "terminal.keep",
35
+ "terminal.label",
36
+ "terminal.read",
37
+ "terminal.attach",
38
+ "terminal.send",
39
+ "terminal.wait",
40
+ "terminal.keys",
41
+ "terminal.interrupt",
42
+ "terminal.put",
43
+ "machine.exec",
44
+ "file.read",
45
+ "file.write",
46
+ "file.edit",
47
+ "doc.get",
48
+ "doc.set",
49
+ "events.subscribe",
50
+ "machine.add",
51
+ "machine.list",
52
+ "machine.connect",
53
+ "machine.rename",
54
+ "machine.rm",
55
+ "rpc.discover"
56
+ ],
57
+ "version": "0.1.18"
58
+ }
59
+ },
60
+ "event:created": {
61
+ "jsonrpc": "2.0",
62
+ "method": "event",
63
+ "params": {
64
+ "data": {
65
+ "address": "t1y",
66
+ "argv": [
67
+ "sleep",
68
+ "600"
69
+ ],
70
+ "cols": 200,
71
+ "created_ms": 1794151288166,
72
+ "cwd": "~/Work",
73
+ "die_with_parent": true,
74
+ "exit_code": null,
75
+ "finished_ms": null,
76
+ "identity": "ghostty",
77
+ "keep": false,
78
+ "labels": {},
79
+ "name": "t03c",
80
+ "notify": true,
81
+ "parent": "t1w",
82
+ "pid": 1620685,
83
+ "reason": null,
84
+ "reported": false,
85
+ "rm": false,
86
+ "rows": 120,
87
+ "screen": "exact",
88
+ "signal": null,
89
+ "state": "live",
90
+ "status": null,
91
+ "status_ms": null,
92
+ "template": null,
93
+ "title": "",
94
+ "turn": 0
95
+ },
96
+ "seq": 111,
97
+ "terminal": "t1y",
98
+ "type": "created"
99
+ }
100
+ },
101
+ "event:foreground": {
102
+ "jsonrpc": "2.0",
103
+ "method": "event",
104
+ "params": {
105
+ "data": {
106
+ "argv": [
107
+ "sleep",
108
+ "600"
109
+ ],
110
+ "cwd": "~/Work",
111
+ "name": "sleep",
112
+ "pid": 1620669
113
+ },
114
+ "seq": 112,
115
+ "terminal": "t1w",
116
+ "type": "foreground"
117
+ }
118
+ },
119
+ "event:labels": {
120
+ "jsonrpc": "2.0",
121
+ "method": "event",
122
+ "params": {
123
+ "data": {
124
+ "labels": {
125
+ "k": "3"
126
+ }
127
+ },
128
+ "seq": 287,
129
+ "terminal": "t21",
130
+ "type": "labels"
131
+ }
132
+ },
133
+ "event:title": {
134
+ "jsonrpc": "2.0",
135
+ "method": "event",
136
+ "params": {
137
+ "data": {
138
+ "title": "t03 first title"
139
+ },
140
+ "seq": 88,
141
+ "terminal": "t1v",
142
+ "type": "title"
143
+ }
144
+ },
145
+ "event:status": {
146
+ "jsonrpc": "2.0",
147
+ "method": "event",
148
+ "params": {
149
+ "data": {
150
+ "records": {},
151
+ "reported": true,
152
+ "status": null
153
+ },
154
+ "seq": 101,
155
+ "terminal": "t1v",
156
+ "type": "status"
157
+ }
158
+ },
159
+ "heartbeat": {
160
+ "jsonrpc": "2.0",
161
+ "method": "heartbeat",
162
+ "params": {
163
+ "seq": 90
164
+ }
165
+ },
166
+ "event:turn": {
167
+ "jsonrpc": "2.0",
168
+ "method": "event",
169
+ "params": {
170
+ "data": {
171
+ "state": "idle",
172
+ "turn": 2
173
+ },
174
+ "seq": 98,
175
+ "terminal": "t1v",
176
+ "type": "turn"
177
+ }
178
+ },
179
+ "event:keep": {
180
+ "jsonrpc": "2.0",
181
+ "method": "event",
182
+ "params": {
183
+ "data": {
184
+ "keep": true
185
+ },
186
+ "seq": 99,
187
+ "terminal": "t1v",
188
+ "type": "keep"
189
+ }
190
+ },
191
+ "event:lost": {
192
+ "jsonrpc": "2.0",
193
+ "method": "event",
194
+ "params": {
195
+ "data": {
196
+ "exit_code": null,
197
+ "finished_ms": null,
198
+ "reason": "signaled",
199
+ "signal": 9
200
+ },
201
+ "seq": 102,
202
+ "terminal": "t1v",
203
+ "type": "lost"
204
+ }
205
+ },
206
+ "event:restarted": {
207
+ "jsonrpc": "2.0",
208
+ "method": "event",
209
+ "params": {
210
+ "data": {
211
+ "address": "t1v",
212
+ "argv": [
213
+ "/usr/bin/bash"
214
+ ],
215
+ "cols": 200,
216
+ "created_ms": 1794151037489,
217
+ "cwd": "~/work/probe",
218
+ "die_with_parent": false,
219
+ "exit_code": null,
220
+ "finished_ms": null,
221
+ "identity": "ghostty",
222
+ "keep": true,
223
+ "labels": {
224
+ "role": "probe",
225
+ "stage": "two"
226
+ },
227
+ "name": "t03probe",
228
+ "notify": true,
229
+ "parent": null,
230
+ "pid": 1600745,
231
+ "reason": null,
232
+ "reported": false,
233
+ "rm": false,
234
+ "rows": 120,
235
+ "screen": "exact",
236
+ "signal": null,
237
+ "state": "live",
238
+ "status": null,
239
+ "status_ms": 1794151076549,
240
+ "template": null,
241
+ "title": "",
242
+ "turn": 2
243
+ },
244
+ "seq": 103,
245
+ "terminal": "t1v",
246
+ "type": "restarted"
247
+ }
248
+ },
249
+ "event:finished": {
250
+ "jsonrpc": "2.0",
251
+ "method": "event",
252
+ "params": {
253
+ "data": {
254
+ "exit_code": 3,
255
+ "finished_ms": 1794151090774,
256
+ "reason": "exited",
257
+ "signal": null
258
+ },
259
+ "seq": 107,
260
+ "terminal": "t1v",
261
+ "type": "finished"
262
+ }
263
+ },
264
+ "event:removed": {
265
+ "jsonrpc": "2.0",
266
+ "method": "event",
267
+ "params": {
268
+ "data": {},
269
+ "seq": 108,
270
+ "terminal": "t1v",
271
+ "type": "removed"
272
+ }
273
+ },
274
+ "event:doc": {
275
+ "jsonrpc": "2.0",
276
+ "method": "event",
277
+ "params": {
278
+ "data": {
279
+ "name": "t03doc",
280
+ "version": 1
281
+ },
282
+ "seq": 116,
283
+ "type": "doc"
284
+ }
285
+ },
286
+ "event:size": {
287
+ "jsonrpc": "2.0",
288
+ "method": "event",
289
+ "params": {
290
+ "data": {
291
+ "cols": 80,
292
+ "rows": 25
293
+ },
294
+ "seq": 121,
295
+ "terminal": "t1x",
296
+ "type": "size"
297
+ }
298
+ },
299
+ "error:-32000:not_found": {
300
+ "error": {
301
+ "code": -32000,
302
+ "data": {
303
+ "hint": "see `hc ls --all`",
304
+ "kind": "not_found"
305
+ },
306
+ "message": "no terminal \"t03a\""
307
+ },
308
+ "id": 1,
309
+ "jsonrpc": "2.0"
310
+ },
311
+ "missed": {
312
+ "jsonrpc": "2.0",
313
+ "method": "missed",
314
+ "params": {
315
+ "seq": 2797,
316
+ "terminals": [
317
+ {
318
+ "address": "t2",
319
+ "argv": [
320
+ "/usr/bin/bash"
321
+ ],
322
+ "cols": 200,
323
+ "created_ms": 1794098598697,
324
+ "cwd": "~",
325
+ "die_with_parent": false,
326
+ "exit_code": null,
327
+ "finished_ms": null,
328
+ "foreground": {
329
+ "argv": [
330
+ "/usr/bin/bash"
331
+ ],
332
+ "cwd": "~",
333
+ "name": "bash",
334
+ "pid": 1583198
335
+ },
336
+ "identity": "ghostty",
337
+ "keep": true,
338
+ "labels": {
339
+ "herdr.seen": "0",
340
+ "herdr.space": "spc64df6047ff35d2dfc438c51e0e14b95",
341
+ "herdr.tab": "tbc8b1082b3f5229bbf7fbd1b836a15421",
342
+ "where": "spike / 1"
343
+ },
344
+ "name": null,
345
+ "notify": true,
346
+ "parent": null,
347
+ "pid": 1583198,
348
+ "reason": null,
349
+ "reported": false,
350
+ "rm": false,
351
+ "rows": 120,
352
+ "screen": "exact",
353
+ "signal": null,
354
+ "state": "live",
355
+ "status": null,
356
+ "status_ms": null,
357
+ "template": null,
358
+ "title": "user@host:~",
359
+ "turn": 0
360
+ },
361
+ {
362
+ "address": "t3",
363
+ "argv": [
364
+ "/usr/bin/bash"
365
+ ],
366
+ "cols": 200,
367
+ "created_ms": 1794098619918,
368
+ "cwd": "~",
369
+ "die_with_parent": false,
370
+ "exit_code": null,
371
+ "finished_ms": 1794102986098,
372
+ "identity": "ghostty",
373
+ "keep": true,
374
+ "labels": {},
375
+ "name": "tab-recap-d",
376
+ "notify": true,
377
+ "parent": null,
378
+ "pid": 655970,
379
+ "reason": "killed",
380
+ "reported": false,
381
+ "rm": false,
382
+ "rows": 120,
383
+ "screen": "exact",
384
+ "signal": 1,
385
+ "state": "finished",
386
+ "status": null,
387
+ "status_ms": null,
388
+ "template": null,
389
+ "title": "user@host:~",
390
+ "turn": 0
391
+ }
392
+ ]
393
+ }
394
+ },
395
+ "subscribed": {
396
+ "id": 1,
397
+ "jsonrpc": "2.0",
398
+ "result": {
399
+ "channel": null,
400
+ "seq": 84,
401
+ "terminals": [
402
+ {
403
+ "address": "t2",
404
+ "argv": [
405
+ "/usr/bin/bash"
406
+ ],
407
+ "cols": 200,
408
+ "created_ms": 1794098598697,
409
+ "cwd": "~",
410
+ "die_with_parent": false,
411
+ "exit_code": null,
412
+ "finished_ms": null,
413
+ "foreground": {
414
+ "argv": [
415
+ "/usr/bin/bash"
416
+ ],
417
+ "cwd": "~",
418
+ "name": "bash",
419
+ "pid": 1583198
420
+ },
421
+ "identity": "ghostty",
422
+ "keep": true,
423
+ "labels": {
424
+ "herdr.seen": "0",
425
+ "herdr.space": "spc64df6047ff35d2dfc438c51e0e14b95",
426
+ "herdr.tab": "tbc8b1082b3f5229bbf7fbd1b836a15421",
427
+ "where": "spike / 1"
428
+ },
429
+ "name": null,
430
+ "notify": true,
431
+ "parent": null,
432
+ "pid": 1583198,
433
+ "reason": null,
434
+ "reported": false,
435
+ "rm": false,
436
+ "rows": 120,
437
+ "screen": "exact",
438
+ "signal": null,
439
+ "state": "live",
440
+ "status": null,
441
+ "status_ms": null,
442
+ "template": null,
443
+ "title": "user@host:~",
444
+ "turn": 0
445
+ },
446
+ {
447
+ "address": "t3",
448
+ "argv": [
449
+ "/usr/bin/bash"
450
+ ],
451
+ "cols": 200,
452
+ "created_ms": 1794098619918,
453
+ "cwd": "~",
454
+ "die_with_parent": false,
455
+ "exit_code": null,
456
+ "finished_ms": 1794102986098,
457
+ "identity": "ghostty",
458
+ "keep": true,
459
+ "labels": {},
460
+ "name": "tab-recap-d",
461
+ "notify": true,
462
+ "parent": null,
463
+ "pid": 655970,
464
+ "reason": "killed",
465
+ "reported": false,
466
+ "rm": false,
467
+ "rows": 120,
468
+ "screen": "exact",
469
+ "signal": 1,
470
+ "state": "finished",
471
+ "status": null,
472
+ "status_ms": null,
473
+ "template": null,
474
+ "title": "user@host:~",
475
+ "turn": 0
476
+ }
477
+ ]
478
+ }
479
+ }
480
+ };
@@ -0,0 +1,18 @@
1
+ import type { TestContext } from 'node:test';
2
+ import { CoreEvents } from '../events.js';
3
+ import type { CoreEventsTiming } from '../events.js';
4
+ import { CoreLink } from '../link.js';
5
+ import type { CoreLinkTiming } from '../link.js';
6
+ import type { SocketPath } from '../wire.js';
7
+ import { FakeHcCore } from './fake-core.js';
8
+ export declare const FAST_LINK: CoreLinkTiming;
9
+ export declare const FAST_EVENTS: CoreEventsTiming;
10
+ export interface DesktopWorld {
11
+ readonly core: FakeHcCore;
12
+ readonly path: SocketPath;
13
+ link(timing?: CoreLinkTiming): CoreLink;
14
+ events(timing?: CoreEventsTiming): CoreEvents;
15
+ close(): Promise<void>;
16
+ }
17
+ export declare function openWorld(): Promise<DesktopWorld>;
18
+ export declare function setupTest(t: TestContext): Promise<DesktopWorld>;
@@ -0,0 +1,35 @@
1
+ import { duration } from '../kernel.js';
2
+ import { CoreEvents } from '../events.js';
3
+ import { CoreLink } from '../link.js';
4
+ import { FakeHcCore } from './fake-core.js';
5
+ export const FAST_LINK = { helloTimeout: duration(300), backoffBase: duration(40), backoffCap: duration(160) };
6
+ export const FAST_EVENTS = { backoffBase: duration(30), backoffCap: duration(120), silence: duration(5000) };
7
+ export async function openWorld() {
8
+ const core = await FakeHcCore.start();
9
+ const links = new Set();
10
+ const streams = new Set();
11
+ return {
12
+ core,
13
+ path: core.path,
14
+ link: (timing = FAST_LINK) => {
15
+ const made = new CoreLink({ path: core.path, timing });
16
+ links.add(made);
17
+ return made;
18
+ },
19
+ events: (timing = FAST_EVENTS) => {
20
+ const made = new CoreEvents({ path: core.path, timing });
21
+ streams.add(made);
22
+ return made;
23
+ },
24
+ close: async () => {
25
+ await Promise.all([...streams].map((made) => made.close()));
26
+ await Promise.all([...links].map((made) => made.close()));
27
+ await core.stop();
28
+ },
29
+ };
30
+ }
31
+ export async function setupTest(t) {
32
+ const world = await openWorld();
33
+ t.after(() => world.close());
34
+ return world;
35
+ }
@@ -0,0 +1,85 @@
1
+ import { type Result } from './kernel.js';
2
+ import { type Brand } from './kernel.js';
3
+ import { type Count } from './kernel.js';
4
+ import { type Duration } from './kernel.js';
5
+ import { type NonEmptyText, type Text } from './kernel.js';
6
+ import type { ParseFailure } from './errors.js';
7
+ import { HcKind } from './constants.js';
8
+ export type HcCallId = Brand<number, 'HcCallId'>;
9
+ export type RpcCode = Brand<number, 'RpcCode'>;
10
+ export type WireLine = Brand<string, 'WireLine'>;
11
+ export type WireChunk = Brand<Buffer, 'WireChunk'>;
12
+ export type SocketPath = Brand<string, 'SocketPath'>;
13
+ export type HcPayload = Brand<object, 'HcPayload'>;
14
+ export type HcParams = Brand<object, 'HcParams'>;
15
+ export type HcTransport = Brand<string, 'HcTransport'>;
16
+ export interface HcSnapshot {
17
+ readonly seq: Count;
18
+ readonly terminals: readonly HcPayload[];
19
+ }
20
+ export interface HcCoreHello {
21
+ readonly version: Text;
22
+ readonly methods: readonly NonEmptyText[];
23
+ readonly generation: Count;
24
+ }
25
+ export interface HcReply {
26
+ readonly kind: typeof HcKind.Reply;
27
+ readonly id: HcCallId;
28
+ readonly result: HcPayload;
29
+ }
30
+ export interface HcOdd {
31
+ readonly kind: typeof HcKind.Odd;
32
+ readonly id: HcCallId;
33
+ }
34
+ export interface HcFault {
35
+ readonly kind: typeof HcKind.Fault;
36
+ readonly id: HcCallId;
37
+ readonly code: RpcCode;
38
+ readonly reason: Text;
39
+ readonly message: Text;
40
+ }
41
+ export interface HcEvent {
42
+ readonly kind: typeof HcKind.Event;
43
+ readonly seq: Count;
44
+ readonly terminal: NonEmptyText | null;
45
+ readonly type: NonEmptyText;
46
+ readonly data: HcPayload;
47
+ }
48
+ export interface HcHeartbeat {
49
+ readonly kind: typeof HcKind.Heartbeat;
50
+ readonly seq: Count;
51
+ }
52
+ export interface HcMissed {
53
+ readonly kind: typeof HcKind.Missed;
54
+ readonly snapshot: HcSnapshot;
55
+ }
56
+ export type HcNotification = HcEvent | HcHeartbeat | HcMissed;
57
+ export type HcCoreMessage = HcReply | HcOdd | HcFault | HcNotification;
58
+ export declare function parseHcPayload(input: unknown): Result<HcPayload, ParseFailure>;
59
+ export declare function parseHcParams(input: unknown): Result<HcParams, ParseFailure>;
60
+ export declare function parseHcTransport(input: unknown): Result<HcTransport, ParseFailure>;
61
+ export declare function parseWireChunk(input: unknown): Result<WireChunk, ParseFailure>;
62
+ export declare function parseWireLine(input: unknown): Result<WireLine, ParseFailure>;
63
+ export declare function parseSocketPath(input: unknown): Result<SocketPath, ParseFailure>;
64
+ export declare function parseHcCallId(input: unknown): Result<HcCallId, ParseFailure>;
65
+ export declare function parseRpcCode(input: unknown): Result<RpcCode, ParseFailure>;
66
+ export declare function encodeHcCoreRequest(id: HcCallId, method: NonEmptyText, params: HcParams): WireLine;
67
+ export declare class HcCoreLines {
68
+ private readonly decoder;
69
+ private readonly overrun;
70
+ private readonly cap;
71
+ private rest;
72
+ constructor(overrun?: () => void, cap?: Count);
73
+ feed(chunk: WireChunk): readonly HcPayload[];
74
+ }
75
+ export declare function hcCoreSocketPath(): SocketPath;
76
+ export declare function nextBackoff(failures: Count, base: Duration, cap: Duration): Duration;
77
+ export declare function parseHcSnapshot(input: unknown): Result<HcSnapshot, ParseFailure>;
78
+ export declare function parseHcCoreHello(input: unknown): Result<HcCoreHello, ParseFailure>;
79
+ export declare function parseHcFault(id: HcCallId, error: unknown): Result<HcFault, ParseFailure>;
80
+ export declare function parseHcReply(input: unknown): Result<HcReply | HcOdd | HcFault, ParseFailure>;
81
+ export declare function parseHcEvent(input: unknown): Result<HcEvent, ParseFailure>;
82
+ export declare function parseHcHeartbeat(input: unknown): Result<HcHeartbeat, ParseFailure>;
83
+ export declare function parseHcMissed(input: unknown): Result<HcMissed, ParseFailure>;
84
+ export declare function parseHcNotification(method: unknown, params: unknown): Result<HcNotification, ParseFailure>;
85
+ export declare function parseHcCoreMessage(input: unknown): Result<HcCoreMessage, ParseFailure>;