@moltzap/client 2026.511.1 → 2026.518.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 (194) hide show
  1. package/dist/auth.d.ts +12 -6
  2. package/dist/auth.d.ts.map +1 -1
  3. package/dist/auth.js +67 -29
  4. package/dist/auth.js.map +1 -1
  5. package/dist/auth.test.js +113 -76
  6. package/dist/auth.test.js.map +1 -1
  7. package/dist/channel-core-context.test.d.ts +2 -0
  8. package/dist/channel-core-context.test.d.ts.map +1 -0
  9. package/dist/channel-core-context.test.js +334 -0
  10. package/dist/channel-core-context.test.js.map +1 -0
  11. package/dist/channel-core-dispatch.test.d.ts +2 -0
  12. package/dist/channel-core-dispatch.test.d.ts.map +1 -0
  13. package/dist/channel-core-dispatch.test.js +550 -0
  14. package/dist/channel-core-dispatch.test.js.map +1 -0
  15. package/dist/channel-core-enrichment.d.ts +8 -0
  16. package/dist/channel-core-enrichment.d.ts.map +1 -0
  17. package/dist/channel-core-enrichment.js +134 -0
  18. package/dist/channel-core-enrichment.js.map +1 -0
  19. package/dist/channel-core-errors.d.ts +20 -0
  20. package/dist/channel-core-errors.d.ts.map +1 -0
  21. package/dist/channel-core-errors.js +12 -0
  22. package/dist/channel-core-errors.js.map +1 -0
  23. package/dist/channel-core-test-support.d.ts +48 -0
  24. package/dist/channel-core-test-support.d.ts.map +1 -0
  25. package/dist/channel-core-test-support.js +111 -0
  26. package/dist/channel-core-test-support.js.map +1 -0
  27. package/dist/channel-core.d.ts +30 -7
  28. package/dist/channel-core.d.ts.map +1 -1
  29. package/dist/channel-core.js +214 -237
  30. package/dist/channel-core.js.map +1 -1
  31. package/dist/channel-core.test.js +216 -1082
  32. package/dist/channel-core.test.js.map +1 -1
  33. package/dist/cli/__tests__/cli-multi-agent.int.test.js +129 -23
  34. package/dist/cli/__tests__/cli-multi-agent.int.test.js.map +1 -1
  35. package/dist/cli/commands/conversations-v2.test.js +64 -54
  36. package/dist/cli/commands/conversations-v2.test.js.map +1 -1
  37. package/dist/cli/commands/conversations.d.ts +5 -5
  38. package/dist/cli/commands/conversations.d.ts.map +1 -1
  39. package/dist/cli/commands/conversations.js +43 -36
  40. package/dist/cli/commands/conversations.js.map +1 -1
  41. package/dist/cli/commands/messages.d.ts +4 -4
  42. package/dist/cli/commands/messages.d.ts.map +1 -1
  43. package/dist/cli/commands/messages.js +4 -4
  44. package/dist/cli/commands/messages.js.map +1 -1
  45. package/dist/cli/commands/messages.test.js +61 -49
  46. package/dist/cli/commands/messages.test.js.map +1 -1
  47. package/dist/cli/commands/ping.d.ts +0 -9
  48. package/dist/cli/commands/ping.d.ts.map +1 -1
  49. package/dist/cli/commands/ping.js +1 -1
  50. package/dist/cli/commands/ping.js.map +1 -1
  51. package/dist/cli/commands/presence.d.ts +1 -1
  52. package/dist/cli/commands/presence.js +1 -1
  53. package/dist/cli/commands/register.d.ts +2 -2
  54. package/dist/cli/commands/register.d.ts.map +1 -1
  55. package/dist/cli/commands/register.js +98 -77
  56. package/dist/cli/commands/register.js.map +1 -1
  57. package/dist/cli/commands/register.test.js +63 -39
  58. package/dist/cli/commands/register.test.js.map +1 -1
  59. package/dist/cli/commands/send.d.ts +6 -6
  60. package/dist/cli/commands/send.js +6 -6
  61. package/dist/cli/commands/send.test.js +32 -28
  62. package/dist/cli/commands/send.test.js.map +1 -1
  63. package/dist/cli/commands/status.d.ts.map +1 -1
  64. package/dist/cli/commands/status.js +3 -4
  65. package/dist/cli/commands/status.js.map +1 -1
  66. package/dist/cli/config.d.ts +0 -2
  67. package/dist/cli/config.d.ts.map +1 -1
  68. package/dist/cli/config.js +86 -76
  69. package/dist/cli/config.js.map +1 -1
  70. package/dist/cli/config.test.js +80 -42
  71. package/dist/cli/config.test.js.map +1 -1
  72. package/dist/cli/index.d.ts +1 -16
  73. package/dist/cli/index.d.ts.map +1 -1
  74. package/dist/cli/index.js +50 -113
  75. package/dist/cli/index.js.map +1 -1
  76. package/dist/cli/process-argv.d.ts +2 -0
  77. package/dist/cli/process-argv.d.ts.map +1 -0
  78. package/dist/cli/process-argv.js +2 -0
  79. package/dist/cli/process-argv.js.map +1 -0
  80. package/dist/cli/profile.d.ts +3 -10
  81. package/dist/cli/profile.d.ts.map +1 -1
  82. package/dist/cli/profile.js +105 -104
  83. package/dist/cli/profile.js.map +1 -1
  84. package/dist/cli/profile.test.js +338 -232
  85. package/dist/cli/profile.test.js.map +1 -1
  86. package/dist/cli/runtime.d.ts +5 -17
  87. package/dist/cli/runtime.d.ts.map +1 -1
  88. package/dist/cli/runtime.js +6 -59
  89. package/dist/cli/runtime.js.map +1 -1
  90. package/dist/cli/socket-client.d.ts +10 -15
  91. package/dist/cli/socket-client.d.ts.map +1 -1
  92. package/dist/cli/socket-client.js +74 -89
  93. package/dist/cli/socket-client.js.map +1 -1
  94. package/dist/cli/transport.d.ts +9 -5
  95. package/dist/cli/transport.d.ts.map +1 -1
  96. package/dist/cli/transport.js +45 -42
  97. package/dist/cli/transport.js.map +1 -1
  98. package/dist/cli/transport.test.js +227 -133
  99. package/dist/cli/transport.test.js.map +1 -1
  100. package/dist/index.d.ts +4 -1
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +3 -0
  103. package/dist/index.js.map +1 -1
  104. package/dist/local-daemon-rpc.d.ts +13 -0
  105. package/dist/local-daemon-rpc.d.ts.map +1 -0
  106. package/dist/local-daemon-rpc.js +17 -0
  107. package/dist/local-daemon-rpc.js.map +1 -0
  108. package/dist/local-paths.d.ts +7 -0
  109. package/dist/local-paths.d.ts.map +1 -0
  110. package/dist/local-paths.js +20 -0
  111. package/dist/local-paths.js.map +1 -0
  112. package/dist/runtime/close-info.d.ts +3 -12
  113. package/dist/runtime/close-info.d.ts.map +1 -1
  114. package/dist/runtime/close-info.js +28 -39
  115. package/dist/runtime/close-info.js.map +1 -1
  116. package/dist/runtime/close-info.test.js +77 -70
  117. package/dist/runtime/close-info.test.js.map +1 -1
  118. package/dist/runtime/errors.test.js +42 -28
  119. package/dist/runtime/errors.test.js.map +1 -1
  120. package/dist/runtime/frame.d.ts +4 -31
  121. package/dist/runtime/frame.d.ts.map +1 -1
  122. package/dist/runtime/frame.js +7 -116
  123. package/dist/runtime/frame.js.map +1 -1
  124. package/dist/runtime/frame.test.js +41 -54
  125. package/dist/runtime/frame.test.js.map +1 -1
  126. package/dist/runtime/index.d.ts +7 -0
  127. package/dist/runtime/index.d.ts.map +1 -1
  128. package/dist/runtime/index.js +7 -11
  129. package/dist/runtime/index.js.map +1 -1
  130. package/dist/runtime/local-history.d.ts +67 -0
  131. package/dist/runtime/local-history.d.ts.map +1 -0
  132. package/dist/runtime/local-history.js +77 -0
  133. package/dist/runtime/local-history.js.map +1 -0
  134. package/dist/runtime/local-service-commands.d.ts +19 -0
  135. package/dist/runtime/local-service-commands.d.ts.map +1 -1
  136. package/dist/runtime/local-service-commands.js +23 -0
  137. package/dist/runtime/local-service-commands.js.map +1 -1
  138. package/dist/runtime/local-socket-server.d.ts +20 -0
  139. package/dist/runtime/local-socket-server.d.ts.map +1 -0
  140. package/dist/runtime/local-socket-server.js +94 -0
  141. package/dist/runtime/local-socket-server.js.map +1 -0
  142. package/dist/runtime/refs.d.ts +1 -1
  143. package/dist/runtime/refs.js +1 -1
  144. package/dist/runtime/runtime.test.js +29 -21
  145. package/dist/runtime/runtime.test.js.map +1 -1
  146. package/dist/runtime/service-helpers.d.ts +32 -0
  147. package/dist/runtime/service-helpers.d.ts.map +1 -0
  148. package/dist/runtime/service-helpers.js +85 -0
  149. package/dist/runtime/service-helpers.js.map +1 -0
  150. package/dist/runtime/subscribers.d.ts +13 -17
  151. package/dist/runtime/subscribers.d.ts.map +1 -1
  152. package/dist/runtime/subscribers.js +37 -32
  153. package/dist/runtime/subscribers.js.map +1 -1
  154. package/dist/runtime/subscribers.test.js +139 -131
  155. package/dist/runtime/subscribers.test.js.map +1 -1
  156. package/dist/service-socket-path.test.d.ts +2 -0
  157. package/dist/service-socket-path.test.d.ts.map +1 -0
  158. package/dist/service-socket-path.test.js +87 -0
  159. package/dist/service-socket-path.test.js.map +1 -0
  160. package/dist/service.d.ts +23 -20
  161. package/dist/service.d.ts.map +1 -1
  162. package/dist/service.js +192 -340
  163. package/dist/service.js.map +1 -1
  164. package/dist/service.test.js +652 -653
  165. package/dist/service.test.js.map +1 -1
  166. package/dist/test/index.d.ts +30 -14
  167. package/dist/test/index.d.ts.map +1 -1
  168. package/dist/test/index.js +25 -21
  169. package/dist/test/index.js.map +1 -1
  170. package/dist/test-utils/channel-service-fixture.d.ts +1 -0
  171. package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
  172. package/dist/test-utils/channel-service-fixture.js +139 -98
  173. package/dist/test-utils/channel-service-fixture.js.map +1 -1
  174. package/dist/test-utils/conformance-adapter.d.ts.map +1 -1
  175. package/dist/test-utils/conformance-adapter.js +145 -124
  176. package/dist/test-utils/conformance-adapter.js.map +1 -1
  177. package/dist/test-utils/fake-service.d.ts.map +1 -1
  178. package/dist/test-utils/fake-service.js +3 -3
  179. package/dist/test-utils/fake-service.js.map +1 -1
  180. package/dist/test-utils/index.d.ts +25 -0
  181. package/dist/test-utils/index.d.ts.map +1 -1
  182. package/dist/test-utils/index.js +25 -8
  183. package/dist/test-utils/index.js.map +1 -1
  184. package/dist/ws-client-test-support.d.ts +180 -0
  185. package/dist/ws-client-test-support.d.ts.map +1 -0
  186. package/dist/ws-client-test-support.js +399 -0
  187. package/dist/ws-client-test-support.js.map +1 -0
  188. package/dist/ws-client.d.ts +59 -32
  189. package/dist/ws-client.d.ts.map +1 -1
  190. package/dist/ws-client.js +272 -321
  191. package/dist/ws-client.js.map +1 -1
  192. package/dist/ws-client.test.js +388 -800
  193. package/dist/ws-client.test.js.map +1 -1
  194. package/package.json +14 -10
@@ -1 +1 @@
1
- {"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/runtime/errors.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/runtime/errors.test.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,8 @@
1
1
  import { Effect } from "effect";
2
- import { MalformedFrameError, type AnyTaskCallbackRpcDefinition, type AnyNotificationDefinition, type DecodedNotification, type DecodedResponseSuccess, type DecodedResponseError, type JsonRpcId, type ParamsOf } from "@moltzap/protocol";
3
- export type { DecodedNotification };
4
- /** Decoded response frame — XOR success | error, mirrors the protocol-level
5
- * discriminated arms. */
6
- export type DecodedResponse = DecodedResponseSuccess | DecodedResponseError;
2
+ import { MalformedFrameError, type DecodedServerInbound } from "@moltzap/protocol";
7
3
  /**
8
- * Decoded server-initiated (taskCallback) request frame. The client
9
- * routes these to its per-method handler registry; the server is the
10
- * originator and awaits a matching JSON-RPC response with the same id.
11
- *
12
- * The `D extends AnyTaskCallbackRpcDefinition ? ... : never` distribution
13
- * is load-bearing: when the union widens (e.g. a future task-callback
14
- * descriptor lands alongside `DispatchAuthorize`), the per-arm pairing
15
- * of `{definition, params}` must stay distinct so downstream consumers
16
- * see a discriminated union, not a merged
17
- * `{Definition, params: ParamsA | ParamsB}` shape that conflates
18
- * incompatible param schemas.
4
+ * Decode one WebSocket message. WebSocket message boundaries are the frame
5
+ * boundary here; JSON-RPC shape validation stays in `@moltzap/protocol`.
19
6
  */
20
- export type DecodedServerRequest<D extends AnyTaskCallbackRpcDefinition = AnyTaskCallbackRpcDefinition> = D extends AnyTaskCallbackRpcDefinition ? {
21
- readonly _tag: "ServerRequest";
22
- readonly id: JsonRpcId;
23
- readonly definition: D;
24
- readonly params: ParamsOf<D>;
25
- } : never;
26
- export type DecodedFrame = DecodedResponse | DecodedNotification<AnyNotificationDefinition> | DecodedServerRequest;
27
- export declare const splitRawFrames: (raw: string) => Effect.Effect<ReadonlyArray<string>, MalformedFrameError>;
28
- /**
29
- * Central typed inbound frame decoder. JSON.parse + shape validation via the
30
- * protocol's pre-compiled AJV validators. The raw socket chunk may contain
31
- * padding bytes or more than one JSON object; split and validate each object
32
- * before handing frames to the client runtime.
33
- */
34
- export declare const decodeFrames: (raw: string) => Effect.Effect<ReadonlyArray<DecodedFrame>, MalformedFrameError>;
7
+ export declare const decodeFrames: (raw: string) => Effect.Effect<ReadonlyArray<DecodedServerInbound>, MalformedFrameError>;
35
8
  //# sourceMappingURL=frame.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/runtime/frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAGL,mBAAmB,EACnB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAEzB,KAAK,SAAS,EACd,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC;yBACyB;AACzB,MAAM,MAAM,eAAe,GAAG,sBAAsB,GAAG,oBAAoB,CAAC;AAE5E;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS,4BAA4B,GAAG,4BAA4B,IACnE,CAAC,SAAS,4BAA4B,GACtC;IACE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC9B,GACD,KAAK,CAAC;AAEV,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,mBAAmB,CAAC,yBAAyB,CAAC,GAC9C,oBAAoB,CAAC;AA8CzB,eAAO,MAAM,cAAc,GACzB,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAsEvD,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GACvB,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,mBAAmB,CA2B7D,CAAC"}
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/runtime/frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAEL,mBAAmB,EACnB,KAAK,oBAAoB,EAC1B,MAAM,mBAAmB,CAAC;AAQ3B;;;GAGG;AACH,eAAO,MAAM,YAAY,GACvB,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,mBAAmB,CAKtE,CAAC"}
@@ -1,121 +1,12 @@
1
1
  import { Effect } from "effect";
2
- import { decodeServerInbound, DispatchAuthorize, MalformedFrameError, } from "@moltzap/protocol";
3
- const isFramePadding = (char) => char === "\u0000" || char === "\ufeff" || /\s/u.test(char);
4
- const liftServerInbound = (decoded, raw) => {
5
- if (decoded._tag === "ResponseSuccess")
6
- return Effect.succeed(decoded);
7
- if (decoded._tag === "ResponseError")
8
- return Effect.succeed(decoded);
9
- if (decoded._tag === "Notification")
10
- return Effect.succeed(decoded);
11
- return liftAppCallbackRequest(decoded, raw);
12
- };
13
- /**
14
- * Per-descriptor lift of an app-callback request to a typed
15
- * `DecodedServerRequest`. Each branch is guarded by the descriptor's
16
- * `validateParams` predicate so `decoded.definition` + `decoded.params`
17
- * narrow together, preserving the per-arm pairing required by the
18
- * distributive `DecodedServerRequest<D>` type. Adding a new
19
- * task-callback descriptor adds one branch here.
20
- */
21
- const liftAppCallbackRequest = (decoded, raw) => {
22
- if (decoded.definition === DispatchAuthorize &&
23
- DispatchAuthorize.validateParams(decoded.params)) {
24
- return Effect.succeed({
25
- _tag: "ServerRequest",
26
- id: decoded.id,
27
- definition: DispatchAuthorize,
28
- params: decoded.params,
29
- });
30
- }
31
- return Effect.fail(new MalformedFrameError({
32
- raw,
33
- cause: "unroutable task-callback request descriptor",
34
- }));
35
- };
36
- export const splitRawFrames = (raw) => Effect.try({
37
- try: () => {
38
- const frames = [];
39
- let start = -1;
40
- let depth = 0;
41
- let inString = false;
42
- let escaped = false;
43
- for (let index = 0; index < raw.length; index += 1) {
44
- const char = raw[index];
45
- if (start === -1) {
46
- if (isFramePadding(char)) {
47
- continue;
48
- }
49
- if (char !== "{") {
50
- throw new MalformedFrameError({ raw });
51
- }
52
- start = index;
53
- depth = 1;
54
- continue;
55
- }
56
- if (inString) {
57
- if (escaped) {
58
- escaped = false;
59
- continue;
60
- }
61
- if (char === "\\") {
62
- escaped = true;
63
- continue;
64
- }
65
- if (char === '"') {
66
- inString = false;
67
- }
68
- continue;
69
- }
70
- if (char === '"') {
71
- inString = true;
72
- continue;
73
- }
74
- if (char === "{") {
75
- depth += 1;
76
- continue;
77
- }
78
- if (char !== "}") {
79
- continue;
80
- }
81
- depth -= 1;
82
- if (depth !== 0) {
83
- continue;
84
- }
85
- frames.push(raw.slice(start, index + 1));
86
- start = -1;
87
- }
88
- if (start !== -1 || frames.length === 0) {
89
- throw new MalformedFrameError({ raw });
90
- }
91
- return frames;
92
- },
93
- catch: (cause) => cause instanceof MalformedFrameError
94
- ? cause
95
- : new MalformedFrameError({ raw, cause }),
2
+ import { decodeServerInbound, MalformedFrameError, } from "@moltzap/protocol";
3
+ const parseFrame = (raw) => Effect.try({
4
+ try: () => JSON.parse(raw),
5
+ catch: (cause) => new MalformedFrameError({ raw, cause }),
96
6
  });
97
7
  /**
98
- * Central typed inbound frame decoder. JSON.parse + shape validation via the
99
- * protocol's pre-compiled AJV validators. The raw socket chunk may contain
100
- * padding bytes or more than one JSON object; split and validate each object
101
- * before handing frames to the client runtime.
8
+ * Decode one WebSocket message. WebSocket message boundaries are the frame
9
+ * boundary here; JSON-RPC shape validation stays in `@moltzap/protocol`.
102
10
  */
103
- export const decodeFrames = (raw) => Effect.gen(function* () {
104
- const frameTexts = yield* splitRawFrames(raw);
105
- const decodedFrames = [];
106
- for (const frameText of frameTexts) {
107
- let parsed;
108
- try {
109
- parsed = JSON.parse(frameText);
110
- }
111
- catch (err) {
112
- return yield* Effect.fail(new MalformedFrameError({ raw: frameText, cause: err }));
113
- }
114
- const decoded = yield* decodeServerInbound(parsed).pipe(Effect.flatMap((d) => liftServerInbound(d, frameText)), Effect.mapError((cause) => cause instanceof MalformedFrameError
115
- ? cause
116
- : new MalformedFrameError({ raw: frameText, cause })));
117
- decodedFrames.push(decoded);
118
- }
119
- return decodedFrames;
120
- });
11
+ export const decodeFrames = (raw) => parseFrame(raw).pipe(Effect.flatMap(decodeServerInbound), Effect.map((decoded) => [decoded]), Effect.withSpan("decodeFrames"));
121
12
  //# sourceMappingURL=frame.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/runtime/frame.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/runtime/frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,UAAU,GAAG,CAAC,GAAW,EAA+C,EAAE,CAC9E,MAAM,CAAC,GAAG,CAAC;IACT,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY;IACrC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;CAC1D,CAAC,CAAC;AAEL;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,GAAW,EAC8D,EAAE,CAC3E,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAClB,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EACnC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAClC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAChC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Effect, Exit } from "effect";
2
- import { describe, expect, it } from "vitest";
2
+ import { expect, it } from "vitest";
3
3
  import { MessageReceivedNotificationDefinition } from "@moltzap/protocol";
4
4
  import { agentId, conversationId, messageId } from "@moltzap/protocol/testing";
5
5
  import { decodeFrames } from "./frame.js";
@@ -11,60 +11,47 @@ const TEST_MESSAGE = {
11
11
  parts: [{ type: "text", text: "hello" }],
12
12
  createdAt: "2026-05-03T00:00:00.000Z",
13
13
  };
14
- describe("decodeFrames", () => {
15
- it("decodes padded chunks that contain both a notification and a response", async () => {
16
- const raw = JSON.stringify(MessageReceivedNotificationDefinition.encode({
17
- message: TEST_MESSAGE,
18
- })) +
19
- "\u0000\n" +
20
- JSON.stringify({
21
- jsonrpc: "2.0",
22
- id: "rpc-7",
23
- result: { ok: true },
24
- });
25
- const decoded = await Effect.runPromise(decodeFrames(raw));
26
- expect(decoded).toHaveLength(2);
27
- expect(decoded[0]).toMatchObject({
28
- _tag: "Notification",
29
- method: MessageReceivedNotificationDefinition.name,
30
- params: { message: TEST_MESSAGE },
31
- });
32
- expect(decoded[1]).toMatchObject({
33
- _tag: "ResponseSuccess",
34
- id: "rpc-7",
35
- result: { ok: true },
36
- });
14
+ it("decodes one WebSocket notification message", () => Effect.runPromise(Effect.gen(function* () {
15
+ const raw = JSON.stringify(MessageReceivedNotificationDefinition.encode({
16
+ message: TEST_MESSAGE,
17
+ }));
18
+ const decoded = yield* decodeFrames(raw);
19
+ expect(decoded).toHaveLength(1);
20
+ expect(decoded[0]).toMatchObject({
21
+ _tag: "Notification",
22
+ method: MessageReceivedNotificationDefinition.name,
23
+ params: { message: TEST_MESSAGE },
37
24
  });
38
- // S9 fail-close: stale shapes are rejected at the wire boundary.
39
- // Pre-Phase-7 `task/closed` carrying `sessionId` instead of
40
- // `{taskId, conversations, closedBy: {agentId, ownerId}}` decodes to
41
- // `MalformedFrameError`; subscribers no longer need to defend
42
- // against drift downstream because the decoder fails closed.
43
- it("fail-closes stale `task/closed` payload at the wire boundary", async () => {
44
- const stale = JSON.stringify({
45
- jsonrpc: "2.0",
46
- method: "task/closed",
47
- params: {
48
- sessionId: "11111111-1111-4111-8111-111111111111",
49
- closedBy: "33333333-3333-4333-8333-333333333333",
50
- },
51
- });
52
- const exit = await Effect.runPromiseExit(decodeFrames(stale));
53
- expect(Exit.isFailure(exit)).toBe(true);
54
- if (Exit.isFailure(exit)) {
55
- const error = exit.cause._tag === "Fail" ? exit.cause.error : null;
56
- expect(error).toBeInstanceOf(MalformedFrameError);
57
- }
25
+ })));
26
+ // S9 fail-close: stale shapes are rejected at the wire boundary.
27
+ // Pre-Phase-7 `task/closed` carrying `sessionId` instead of
28
+ // `{taskId, conversations, closedBy: {agentId, ownerId}}` decodes to
29
+ // `MalformedFrameError`; subscribers no longer need to defend
30
+ // against drift downstream because the decoder fails closed.
31
+ it("fail-closes stale `task/closed` payload at the wire boundary", () => Effect.runPromise(Effect.gen(function* () {
32
+ const stale = JSON.stringify({
33
+ jsonrpc: "2.0",
34
+ method: "task/closed",
35
+ params: {
36
+ sessionId: "11111111-1111-4111-8111-111111111111",
37
+ closedBy: "33333333-3333-4333-8333-333333333333",
38
+ },
58
39
  });
59
- // S9 also rejects unknown notification methods at the wire boundary.
60
- it("fail-closes unknown notification method", async () => {
61
- const stranger = JSON.stringify({
62
- jsonrpc: "2.0",
63
- method: "some/unregistered-method",
64
- params: {},
65
- });
66
- const exit = await Effect.runPromiseExit(decodeFrames(stranger));
67
- expect(Exit.isFailure(exit)).toBe(true);
40
+ const exit = yield* Effect.exit(decodeFrames(stale));
41
+ expect(Exit.isFailure(exit)).toBe(true);
42
+ if (Exit.isFailure(exit)) {
43
+ const error = exit.cause._tag === "Fail" ? exit.cause.error : null;
44
+ expect(error).toBeInstanceOf(MalformedFrameError);
45
+ }
46
+ })));
47
+ // S9 also rejects unknown notification methods at the wire boundary.
48
+ it("fail-closes unknown notification method", () => Effect.runPromise(Effect.gen(function* () {
49
+ const stranger = JSON.stringify({
50
+ jsonrpc: "2.0",
51
+ method: "some/unregistered-method",
52
+ params: {},
68
53
  });
69
- });
54
+ const exit = yield* Effect.exit(decodeFrames(stranger));
55
+ expect(Exit.isFailure(exit)).toBe(true);
56
+ })));
70
57
  //# sourceMappingURL=frame.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frame.test.js","sourceRoot":"","sources":["../../src/runtime/frame.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame.test.js","sourceRoot":"","sources":["../../src/runtime/frame.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,10 @@
1
+ /**
2
+ * @file Local-service IPC primitives and runtime helpers for the client CLI.
3
+ *
4
+ * The public surface is intentionally narrow: command definitions for the
5
+ * local daemon socket and the subscription filter type consumed by status and
6
+ * conformance adapters.
7
+ */
1
8
  export { LocalServiceCommands } from "./local-service-commands.js";
2
9
  export type { LocalServiceCommand } from "./local-service-commands.js";
3
10
  export type { SubscriptionFilter } from "./subscribers.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,13 +1,9 @@
1
- // @moltzap/client/runtime — local-service IPC primitives + Service-level
2
- // runtime helpers used by the client's CLI tier and by external consumers
3
- // that need to drive a local moltzap daemon over the SOCK_STREAM RPC.
4
- //
5
- // Public surface is intentionally narrow:
6
- // - LocalServiceCommands / LocalServiceCommand — the SOCK_STREAM command
7
- // palette used by `cli/socket-client.ts` to drive an already-running
8
- // local daemon.
9
- // - SubscriptionFilter — the structural filter type used by callers
10
- // building cross-conversation subscriptions (the cli's status command
11
- // and the conformance adapter both consume it as a type-only import).
1
+ /**
2
+ * @file Local-service IPC primitives and runtime helpers for the client CLI.
3
+ *
4
+ * The public surface is intentionally narrow: command definitions for the
5
+ * local daemon socket and the subscription filter type consumed by status and
6
+ * conformance adapters.
7
+ */
12
8
  export { LocalServiceCommands } from "./local-service-commands.js";
13
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,0EAA0E;AAC1E,sEAAsE;AACtE,EAAE;AACF,0CAA0C;AAC1C,2EAA2E;AAC3E,yEAAyE;AACzE,oBAAoB;AACpB,sEAAsE;AACtE,0EAA0E;AAC1E,0EAA0E;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,67 @@
1
+ import type { Message } from "@moltzap/protocol";
2
+ import { Effect, HashMap, ParseResult, Schema } from "effect";
3
+ declare const HistoryRequestSchema: Schema.Struct<{
4
+ conversationId: Schema.filter<typeof Schema.String>;
5
+ limit: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
6
+ default: () => number;
7
+ }>;
8
+ sessionKey: Schema.optional<typeof Schema.String>;
9
+ }>;
10
+ declare const HistoryMessageSummarySchema: Schema.Struct<{
11
+ id: typeof Schema.String;
12
+ senderId: typeof Schema.String;
13
+ senderName: typeof Schema.String;
14
+ isOwn: typeof Schema.Boolean;
15
+ text: typeof Schema.String;
16
+ createdAt: typeof Schema.String;
17
+ isNew: typeof Schema.Boolean;
18
+ }>;
19
+ declare const HistoryResponseSchema: Schema.Struct<{
20
+ messages: Schema.Array$<Schema.Struct<{
21
+ id: typeof Schema.String;
22
+ senderId: typeof Schema.String;
23
+ senderName: typeof Schema.String;
24
+ isOwn: typeof Schema.Boolean;
25
+ text: typeof Schema.String;
26
+ createdAt: typeof Schema.String;
27
+ isNew: typeof Schema.Boolean;
28
+ }>>;
29
+ hasMore: typeof Schema.Boolean;
30
+ conversationMeta: Schema.optional<Schema.Struct<{
31
+ id: typeof Schema.String;
32
+ type: Schema.Literal<["dm", "group"]>;
33
+ name: Schema.optional<typeof Schema.String>;
34
+ createdBy: typeof Schema.String;
35
+ metadata: Schema.optional<Schema.Struct<{
36
+ tags: Schema.optional<Schema.Array$<Schema.Record$<typeof Schema.String, typeof Schema.String>>>;
37
+ }>>;
38
+ lastMessageTimestamp: Schema.optional<typeof Schema.String>;
39
+ createdAt: typeof Schema.String;
40
+ updatedAt: typeof Schema.String;
41
+ }>>;
42
+ newCount: Schema.filter<Schema.filter<typeof Schema.Number>>;
43
+ }>;
44
+ export type HistoryRequestInput = Schema.Schema.Encoded<typeof HistoryRequestSchema>;
45
+ export type HistoryRequest = Schema.Schema.Type<typeof HistoryRequestSchema>;
46
+ export type HistoryMessageSummary = Schema.Schema.Type<typeof HistoryMessageSummarySchema>;
47
+ export type HistoryResponse = Schema.Schema.Type<typeof HistoryResponseSchema>;
48
+ interface FormatHistoryMessageOptions {
49
+ readonly agentNames: HashMap.HashMap<string, string>;
50
+ readonly ownAgentId: string | undefined;
51
+ readonly lastReadIds: ReadonlySet<string>;
52
+ readonly hasSessionKey: boolean;
53
+ }
54
+ declare const HistoryRequestInputError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
55
+ readonly _tag: "HistoryRequestInputError";
56
+ } & Readonly<A>;
57
+ export declare class HistoryRequestInputError extends HistoryRequestInputError_base<{
58
+ readonly message: string;
59
+ readonly cause: unknown;
60
+ }> {
61
+ }
62
+ export declare const decodeHistoryResponse: (value: unknown) => Effect.Effect<HistoryResponse, ParseResult.ParseError>;
63
+ export declare function decodeHistoryRequest(params: unknown): Effect.Effect<HistoryRequest, HistoryRequestInputError>;
64
+ export declare function formatHistoryMessage(message: Message, options: FormatHistoryMessageOptions): HistoryMessageSummary;
65
+ export declare function lastReadIdsForSession(lastReadMap: HashMap.HashMap<string, HashMap.HashMap<string, ReadonlySet<string>>>, request: HistoryRequest): ReadonlySet<string>;
66
+ export {};
67
+ //# sourceMappingURL=local-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-history.d.ts","sourceRoot":"","sources":["../../src/runtime/local-history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAQ,MAAM,EAAE,OAAO,EAAU,WAAW,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAW5E,QAAA,MAAM,oBAAoB;;;;;;EAMxB,CAAC;AAEH,QAAA,MAAM,2BAA2B;;;;;;;;EAQ/B,CAAC;AAwBH,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;EAKzB,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CACrD,OAAO,oBAAoB,CAC5B,CAAC;AACF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAC7E,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CACpD,OAAO,2BAA2B,CACnC,CAAC;AACF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE/E,UAAU,2BAA2B;IACnC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;;;;AAED,qBAAa,wBAAyB,SAAQ,8BAE5C;IACA,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,CAAC;CAAG;AAUL,eAAO,MAAM,qBAAqB,GAChC,OAAO,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC,UAAU,CACJ,CAAC;AAErD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,GACd,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,wBAAwB,CAAC,CASzD;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,2BAA2B,GACnC,qBAAqB,CAevB;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,OAAO,CAAC,OAAO,CAC1B,MAAM,EACN,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAC7C,EACD,OAAO,EAAE,cAAc,GACtB,WAAW,CAAC,MAAM,CAAC,CAQrB"}
@@ -0,0 +1,77 @@
1
+ import { Data, Effect, HashMap, Option, ParseResult, Schema } from "effect";
2
+ import { renderPart } from "./service-helpers.js";
3
+ const DEFAULT_HISTORY_LIMIT = 10;
4
+ const MAX_HISTORY_LIMIT = 100;
5
+ const HistoryLimit = Schema.Number.pipe(Schema.int(), Schema.between(1, MAX_HISTORY_LIMIT));
6
+ const HistoryRequestSchema = Schema.Struct({
7
+ conversationId: Schema.String.pipe(Schema.minLength(1)),
8
+ limit: Schema.optionalWith(HistoryLimit, {
9
+ default: () => DEFAULT_HISTORY_LIMIT,
10
+ }),
11
+ sessionKey: Schema.optional(Schema.String),
12
+ });
13
+ const HistoryMessageSummarySchema = Schema.Struct({
14
+ id: Schema.String,
15
+ senderId: Schema.String,
16
+ senderName: Schema.String,
17
+ isOwn: Schema.Boolean,
18
+ text: Schema.String,
19
+ createdAt: Schema.String,
20
+ isNew: Schema.Boolean,
21
+ });
22
+ const ConversationMetadataSchema = Schema.Struct({
23
+ tags: Schema.optional(Schema.Array(Schema.Record({
24
+ key: Schema.String,
25
+ value: Schema.String,
26
+ }))),
27
+ });
28
+ const HistoryConversationMetaSchema = Schema.Struct({
29
+ id: Schema.String,
30
+ type: Schema.Literal("dm", "group"),
31
+ name: Schema.optional(Schema.String),
32
+ createdBy: Schema.String,
33
+ metadata: Schema.optional(ConversationMetadataSchema),
34
+ lastMessageTimestamp: Schema.optional(Schema.String),
35
+ createdAt: Schema.String,
36
+ updatedAt: Schema.String,
37
+ });
38
+ const HistoryResponseSchema = Schema.Struct({
39
+ messages: Schema.Array(HistoryMessageSummarySchema),
40
+ hasMore: Schema.Boolean,
41
+ conversationMeta: Schema.optional(HistoryConversationMetaSchema),
42
+ newCount: Schema.Number.pipe(Schema.int(), Schema.nonNegative()),
43
+ });
44
+ export class HistoryRequestInputError extends Data.TaggedError("HistoryRequestInputError") {
45
+ }
46
+ const formatParseError = (error) => ParseResult.TreeFormatter.formatErrorSync(error);
47
+ const formatParseCause = (cause) => ParseResult.isParseError(cause) ? formatParseError(cause) : String(cause);
48
+ const decodeHistoryRequestSync = Schema.decodeUnknownSync(HistoryRequestSchema);
49
+ export const decodeHistoryResponse = (value) => Schema.decodeUnknown(HistoryResponseSchema)(value);
50
+ export function decodeHistoryRequest(params) {
51
+ return Effect.try({
52
+ try: () => decodeHistoryRequestSync(params),
53
+ catch: (cause) => new HistoryRequestInputError({
54
+ message: `invalid history request: ${formatParseCause(cause)}`,
55
+ cause,
56
+ }),
57
+ }).pipe(Effect.withSpan("decodeHistoryRequest"));
58
+ }
59
+ export function formatHistoryMessage(message, options) {
60
+ const senderName = Option.getOrElse(HashMap.get(options.agentNames, message.senderId), () => message.senderId);
61
+ const isOwn = message.senderId === options.ownAgentId;
62
+ return {
63
+ id: message.id,
64
+ senderId: message.senderId,
65
+ senderName: isOwn ? "you" : senderName,
66
+ isOwn,
67
+ text: message.parts.map(renderPart).join(" "),
68
+ createdAt: message.createdAt,
69
+ isNew: options.hasSessionKey ? !options.lastReadIds.has(message.id) : false,
70
+ };
71
+ }
72
+ export function lastReadIdsForSession(lastReadMap, request) {
73
+ if (request.sessionKey === undefined)
74
+ return new Set();
75
+ return Option.getOrElse(Option.flatMap(HashMap.get(lastReadMap, request.sessionKey), (perConv) => HashMap.get(perConv, request.conversationId)), () => new Set());
76
+ }
77
+ //# sourceMappingURL=local-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-history.js","sourceRoot":"","sources":["../../src/runtime/local-history.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,26 @@
1
+ import { Effect, ParseResult } from "effect";
2
+ import { type HistoryRequestInput, type HistoryResponse } from "./local-history.js";
1
3
  export declare const LocalServiceCommands: {
2
4
  readonly Ping: "ping";
3
5
  readonly Status: "status";
4
6
  readonly History: "history";
5
7
  };
6
8
  export type LocalServiceCommand = (typeof LocalServiceCommands)[keyof typeof LocalServiceCommands];
9
+ interface LocalServicePingResult {
10
+ readonly ok: boolean;
11
+ readonly agentId?: string | undefined;
12
+ }
13
+ interface LocalServiceStatusResult {
14
+ readonly agentId?: string | undefined;
15
+ readonly connected: boolean;
16
+ readonly conversations: number;
17
+ }
18
+ export interface LocalServiceResults {
19
+ readonly [LocalServiceCommands.Ping]: LocalServicePingResult;
20
+ readonly [LocalServiceCommands.Status]: LocalServiceStatusResult;
21
+ readonly [LocalServiceCommands.History]: HistoryResponse;
22
+ }
23
+ export type LocalServiceParams<C extends LocalServiceCommand> = C extends typeof LocalServiceCommands.History ? HistoryRequestInput : undefined;
24
+ export declare function decodeLocalServiceResult<C extends LocalServiceCommand>(command: C, result: unknown): Effect.Effect<LocalServiceResults[C], ParseResult.ParseError>;
25
+ export {};
7
26
  //# sourceMappingURL=local-service-commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-service-commands.d.ts","sourceRoot":"","sources":["../../src/runtime/local-service-commands.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB;;;;CAIvB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAC7B,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"local-service-commands.d.ts","sourceRoot":"","sources":["../../src/runtime/local-service-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAU,MAAM,QAAQ,CAAC;AACrD,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,oBAAoB;;;;CAIvB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAC7B,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEnE,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,UAAU,wBAAwB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC7D,QAAQ,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,wBAAwB,CAAC;IACjE,QAAQ,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;CAC1D;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,mBAAmB,IAC1D,CAAC,SAAS,OAAO,oBAAoB,CAAC,OAAO,GACzC,mBAAmB,GACnB,SAAS,CAAC;AAgBhB,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,mBAAmB,EACpE,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,OAAO,GACd,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAkB/D"}
@@ -1,6 +1,29 @@
1
+ import { Effect, ParseResult, Schema } from "effect";
2
+ import { decodeHistoryResponse, } from "./local-history.js";
1
3
  export const LocalServiceCommands = {
2
4
  Ping: "ping",
3
5
  Status: "status",
4
6
  History: "history",
5
7
  };
8
+ const LocalServicePingResultSchema = Schema.Struct({
9
+ ok: Schema.Boolean,
10
+ agentId: Schema.optional(Schema.String),
11
+ });
12
+ const LocalServiceStatusResultSchema = Schema.Struct({
13
+ agentId: Schema.optional(Schema.String),
14
+ connected: Schema.Boolean,
15
+ conversations: Schema.Number.pipe(Schema.int(), Schema.nonNegative()),
16
+ });
17
+ const decodePingResult = Schema.decodeUnknown(LocalServicePingResultSchema);
18
+ const decodeStatusResult = Schema.decodeUnknown(LocalServiceStatusResultSchema);
19
+ export function decodeLocalServiceResult(command, result) {
20
+ switch (command) {
21
+ case LocalServiceCommands.Ping:
22
+ return decodePingResult(result);
23
+ case LocalServiceCommands.Status:
24
+ return decodeStatusResult(result);
25
+ case LocalServiceCommands.History:
26
+ return decodeHistoryResponse(result);
27
+ }
28
+ }
6
29
  //# sourceMappingURL=local-service-commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-service-commands.js","sourceRoot":"","sources":["../../src/runtime/local-service-commands.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACV,CAAC"}
1
+ {"version":3,"file":"local-service-commands.js","sourceRoot":"","sources":["../../src/runtime/local-service-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EACL,qBAAqB,GAGtB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACV,CAAC;AA2BX,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACjD,EAAE,EAAE,MAAM,CAAC,OAAO;IAClB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;CACxC,CAAC,CAAC;AAEH,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC,OAAO;IACzB,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;AAC5E,MAAM,kBAAkB,GAAG,MAAM,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC;AAEhF,MAAM,UAAU,wBAAwB,CACtC,OAAU,EACV,MAAe;IAEf,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,oBAAoB,CAAC,IAAI;YAC5B,OAAO,gBAAgB,CAAC,MAAM,CAG7B,CAAC;QACJ,KAAK,oBAAoB,CAAC,MAAM;YAC9B,OAAO,kBAAkB,CAAC,MAAM,CAG/B,CAAC;QACJ,KAAK,oBAAoB,CAAC,OAAO;YAC/B,OAAO,qBAAqB,CAAC,MAAM,CAGlC,CAAC;IACN,CAAC;AACH,CAAC"}