@moltzap/client 2026.503.4 → 2026.504.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.
- package/dist/channel-core.d.ts +1 -4
- package/dist/channel-core.d.ts.map +1 -1
- package/dist/channel-core.js +0 -9
- package/dist/channel-core.js.map +1 -1
- package/dist/channel-core.test.js +90 -71
- package/dist/channel-core.test.js.map +1 -1
- package/dist/cli/commands/agents.js +2 -2
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/apps.d.ts +2 -24
- package/dist/cli/commands/apps.d.ts.map +1 -1
- package/dist/cli/commands/apps.js +22 -47
- package/dist/cli/commands/apps.js.map +1 -1
- package/dist/cli/commands/apps.test.js +59 -72
- package/dist/cli/commands/apps.test.js.map +1 -1
- package/dist/cli/commands/contacts.d.ts +1 -5
- package/dist/cli/commands/contacts.d.ts.map +1 -1
- package/dist/cli/commands/contacts.js +11 -26
- package/dist/cli/commands/contacts.js.map +1 -1
- package/dist/cli/commands/conversations-v2.test.js +30 -26
- package/dist/cli/commands/conversations-v2.test.js.map +1 -1
- package/dist/cli/commands/conversations.d.ts.map +1 -1
- package/dist/cli/commands/conversations.js +48 -33
- package/dist/cli/commands/conversations.js.map +1 -1
- package/dist/cli/commands/messages.d.ts.map +1 -1
- package/dist/cli/commands/messages.js +11 -8
- package/dist/cli/commands/messages.js.map +1 -1
- package/dist/cli/commands/messages.test.js +28 -30
- package/dist/cli/commands/messages.test.js.map +1 -1
- package/dist/cli/commands/presence.d.ts.map +1 -1
- package/dist/cli/commands/presence.js +5 -4
- package/dist/cli/commands/presence.js.map +1 -1
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +20 -11
- package/dist/cli/commands/send.js.map +1 -1
- package/dist/cli/commands/send.test.js +11 -9
- package/dist/cli/commands/send.test.js.map +1 -1
- package/dist/cli/commands/status.js +2 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/test-transport.d.ts +10 -0
- package/dist/cli/commands/test-transport.d.ts.map +1 -0
- package/dist/cli/commands/test-transport.js +29 -0
- package/dist/cli/commands/test-transport.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +0 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/socket-client.d.ts +9 -4
- package/dist/cli/socket-client.d.ts.map +1 -1
- package/dist/cli/socket-client.js +27 -12
- package/dist/cli/socket-client.js.map +1 -1
- package/dist/cli/transport.d.ts +3 -2
- package/dist/cli/transport.d.ts.map +1 -1
- package/dist/cli/transport.js +6 -6
- package/dist/cli/transport.js.map +1 -1
- package/dist/cli/transport.test.js +4 -4
- package/dist/cli/transport.test.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/__tests__/app-callback-partition-key.test.d.ts +2 -0
- package/dist/internal/__tests__/app-callback-partition-key.test.d.ts.map +1 -0
- package/dist/internal/__tests__/app-callback-partition-key.test.js +33 -0
- package/dist/internal/__tests__/app-callback-partition-key.test.js.map +1 -0
- package/dist/internal/__tests__/app-callback-partition-worker.test.d.ts +2 -0
- package/dist/internal/__tests__/app-callback-partition-worker.test.d.ts.map +1 -0
- package/dist/internal/__tests__/{s2c-partition-worker.test.js → app-callback-partition-worker.test.js} +6 -9
- package/dist/internal/__tests__/app-callback-partition-worker.test.js.map +1 -0
- package/dist/internal/__tests__/app-callback-partitioned-dispatcher-real-ws.test.d.ts +2 -0
- package/dist/internal/__tests__/app-callback-partitioned-dispatcher-real-ws.test.d.ts.map +1 -0
- package/dist/internal/__tests__/{s2c-partitioned-dispatcher-real-ws.test.js → app-callback-partitioned-dispatcher-real-ws.test.js} +69 -94
- package/dist/internal/__tests__/app-callback-partitioned-dispatcher-real-ws.test.js.map +1 -0
- package/dist/internal/__tests__/app-callback-partitioned-dispatcher.test.d.ts +2 -0
- package/dist/internal/__tests__/app-callback-partitioned-dispatcher.test.d.ts.map +1 -0
- package/dist/internal/__tests__/{s2c-partitioned-dispatcher.test.js → app-callback-partitioned-dispatcher.test.js} +35 -69
- package/dist/internal/__tests__/app-callback-partitioned-dispatcher.test.js.map +1 -0
- package/dist/internal/__tests__/app-callback-test-requests.d.ts +58 -0
- package/dist/internal/__tests__/app-callback-test-requests.d.ts.map +1 -0
- package/dist/internal/__tests__/app-callback-test-requests.js +124 -0
- package/dist/internal/__tests__/app-callback-test-requests.js.map +1 -0
- package/dist/internal/{s2c-dispatcher-errors.d.ts → app-callback-dispatcher-errors.d.ts} +5 -21
- package/dist/internal/app-callback-dispatcher-errors.d.ts.map +1 -0
- package/dist/internal/{s2c-dispatcher-errors.js → app-callback-dispatcher-errors.js} +3 -13
- package/dist/internal/app-callback-dispatcher-errors.js.map +1 -0
- package/dist/internal/app-callback-partition-key.d.ts +68 -0
- package/dist/internal/app-callback-partition-key.d.ts.map +1 -0
- package/dist/internal/app-callback-partition-key.js +90 -0
- package/dist/internal/app-callback-partition-key.js.map +1 -0
- package/dist/internal/{s2c-partition-worker.d.ts → app-callback-partition-worker.d.ts} +5 -5
- package/dist/internal/app-callback-partition-worker.d.ts.map +1 -0
- package/dist/internal/{s2c-partition-worker.js → app-callback-partition-worker.js} +5 -5
- package/dist/internal/app-callback-partition-worker.js.map +1 -0
- package/dist/internal/{s2c-partitioned-dispatcher.d.ts → app-callback-partitioned-dispatcher.d.ts} +9 -10
- package/dist/internal/app-callback-partitioned-dispatcher.d.ts.map +1 -0
- package/dist/internal/{s2c-partitioned-dispatcher.js → app-callback-partitioned-dispatcher.js} +12 -19
- package/dist/internal/app-callback-partitioned-dispatcher.js.map +1 -0
- package/dist/runtime/errors.d.ts +2 -28
- package/dist/runtime/errors.d.ts.map +1 -1
- package/dist/runtime/errors.js +0 -9
- package/dist/runtime/errors.js.map +1 -1
- package/dist/runtime/errors.test.js +2 -2
- package/dist/runtime/errors.test.js.map +1 -1
- package/dist/runtime/frame.d.ts +17 -18
- package/dist/runtime/frame.d.ts.map +1 -1
- package/dist/runtime/frame.js +86 -31
- package/dist/runtime/frame.js.map +1 -1
- package/dist/runtime/frame.test.js +15 -11
- package/dist/runtime/frame.test.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/local-service-commands.d.ts +7 -0
- package/dist/runtime/local-service-commands.d.ts.map +1 -0
- package/dist/runtime/local-service-commands.js +6 -0
- package/dist/runtime/local-service-commands.js.map +1 -0
- package/dist/runtime/runtime.test.js +1 -2
- package/dist/runtime/runtime.test.js.map +1 -1
- package/dist/runtime/subscribers.d.ts +34 -29
- package/dist/runtime/subscribers.d.ts.map +1 -1
- package/dist/runtime/subscribers.js +19 -19
- package/dist/runtime/subscribers.js.map +1 -1
- package/dist/runtime/subscribers.test.js +50 -31
- package/dist/runtime/subscribers.test.js.map +1 -1
- package/dist/service.d.ts +24 -39
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +165 -161
- package/dist/service.js.map +1 -1
- package/dist/service.test.js +111 -170
- package/dist/service.test.js.map +1 -1
- package/dist/test-utils/channel-service-fixture.d.ts +1 -2
- package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
- package/dist/test-utils/channel-service-fixture.js +28 -20
- package/dist/test-utils/channel-service-fixture.js.map +1 -1
- package/dist/test-utils/conformance-adapter.d.ts +2 -2
- package/dist/test-utils/conformance-adapter.d.ts.map +1 -1
- package/dist/test-utils/conformance-adapter.js +33 -26
- package/dist/test-utils/conformance-adapter.js.map +1 -1
- package/dist/test-utils/fake-service.d.ts +14 -39
- package/dist/test-utils/fake-service.d.ts.map +1 -1
- package/dist/test-utils/fake-service.js +33 -39
- package/dist/test-utils/fake-service.js.map +1 -1
- package/dist/test-utils/ids.d.ts +9 -0
- package/dist/test-utils/ids.d.ts.map +1 -0
- package/dist/test-utils/ids.js +52 -0
- package/dist/test-utils/ids.js.map +1 -0
- package/dist/test-utils/index.d.ts +10 -2
- package/dist/test-utils/index.d.ts.map +1 -1
- package/dist/test-utils/index.js +12 -5
- package/dist/test-utils/index.js.map +1 -1
- package/dist/ws-client.d.ts +58 -64
- package/dist/ws-client.d.ts.map +1 -1
- package/dist/ws-client.js +151 -133
- package/dist/ws-client.js.map +1 -1
- package/dist/ws-client.test.js +157 -167
- package/dist/ws-client.test.js.map +1 -1
- package/package.json +3 -3
- package/dist/cli/commands/permissions.d.ts +0 -70
- package/dist/cli/commands/permissions.d.ts.map +0 -1
- package/dist/cli/commands/permissions.js +0 -100
- package/dist/cli/commands/permissions.js.map +0 -1
- package/dist/cli/commands/permissions.test.d.ts +0 -2
- package/dist/cli/commands/permissions.test.d.ts.map +0 -1
- package/dist/cli/commands/permissions.test.js +0 -127
- package/dist/cli/commands/permissions.test.js.map +0 -1
- package/dist/internal/__tests__/s2c-partition-key.test.d.ts +0 -2
- package/dist/internal/__tests__/s2c-partition-key.test.d.ts.map +0 -1
- package/dist/internal/__tests__/s2c-partition-key.test.js +0 -231
- package/dist/internal/__tests__/s2c-partition-key.test.js.map +0 -1
- package/dist/internal/__tests__/s2c-partition-worker.test.d.ts +0 -2
- package/dist/internal/__tests__/s2c-partition-worker.test.d.ts.map +0 -1
- package/dist/internal/__tests__/s2c-partition-worker.test.js.map +0 -1
- package/dist/internal/__tests__/s2c-partitioned-dispatcher-real-ws.test.d.ts +0 -2
- package/dist/internal/__tests__/s2c-partitioned-dispatcher-real-ws.test.d.ts.map +0 -1
- package/dist/internal/__tests__/s2c-partitioned-dispatcher-real-ws.test.js.map +0 -1
- package/dist/internal/__tests__/s2c-partitioned-dispatcher.test.d.ts +0 -2
- package/dist/internal/__tests__/s2c-partitioned-dispatcher.test.d.ts.map +0 -1
- package/dist/internal/__tests__/s2c-partitioned-dispatcher.test.js.map +0 -1
- package/dist/internal/s2c-dispatcher-errors.d.ts.map +0 -1
- package/dist/internal/s2c-dispatcher-errors.js.map +0 -1
- package/dist/internal/s2c-partition-key.d.ts +0 -79
- package/dist/internal/s2c-partition-key.d.ts.map +0 -1
- package/dist/internal/s2c-partition-key.js +0 -146
- package/dist/internal/s2c-partition-key.js.map +0 -1
- package/dist/internal/s2c-partition-worker.d.ts.map +0 -1
- package/dist/internal/s2c-partition-worker.js.map +0 -1
- package/dist/internal/s2c-partitioned-dispatcher.d.ts.map +0 -1
- package/dist/internal/s2c-partitioned-dispatcher.js.map +0 -1
package/dist/internal/{s2c-partitioned-dispatcher.js → app-callback-partitioned-dispatcher.js}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Partitioned
|
|
2
|
+
* Partitioned appCallback dispatcher.
|
|
3
3
|
*
|
|
4
4
|
* Spec: moltzap#356.
|
|
5
5
|
*
|
|
6
|
-
* Replaces the single `Stream.runForEach(handler)` over `
|
|
6
|
+
* Replaces the single `Stream.runForEach(handler)` over `appCallbackInboundQueue`
|
|
7
7
|
* (`packages/client/src/ws-client.ts:658-687@f0df363`) with a
|
|
8
8
|
* partition-router that owns a `Ref<HashMap<PartitionKey,
|
|
9
9
|
* PartitionWorker>>`. For each inbound request:
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
* The dispatcher Scope is held in `ConnState`; teardown from
|
|
38
38
|
* `close()` / `disconnectSync()` is
|
|
39
39
|
* `runtime.runFork(Scope.close(dispatcherScope, Exit.void))`, mirroring
|
|
40
|
-
* today's `runFork(Queue.shutdown(
|
|
41
|
-
* `runFork(Fiber.interrupt(
|
|
40
|
+
* today's `runFork(Queue.shutdown(appCallbackInboundQueue))` +
|
|
41
|
+
* `runFork(Fiber.interrupt(appCallbackDispatcherFiber))` pair.
|
|
42
42
|
*
|
|
43
43
|
* Why off-Scope from the socket: `close()` is invoked via `runSync` at
|
|
44
44
|
* `packages/openclaw-channel/src/__tests__/reconnection.integration.test.ts:14`;
|
|
@@ -56,10 +56,10 @@
|
|
|
56
56
|
* every worker; closing one worker's child scope retires only that
|
|
57
57
|
* worker without leaking finalizers onto the dispatcher scope.
|
|
58
58
|
*/
|
|
59
|
-
import { Cause, Duration, Effect,
|
|
60
|
-
import { PartitionLimitError, } from "./
|
|
61
|
-
import { extractPartitionKey, } from "./
|
|
62
|
-
import { makePartitionWorker, } from "./
|
|
59
|
+
import { Cause, Duration, Effect, ExecutionStrategy, Exit, HashMap, MutableRef, Option, Ref, Schedule, Scope, } from "effect";
|
|
60
|
+
import { PartitionLimitError, } from "./app-callback-dispatcher-errors.js";
|
|
61
|
+
import { extractPartitionKey, } from "./app-callback-partition-key.js";
|
|
62
|
+
import { makePartitionWorker, } from "./app-callback-partition-worker.js";
|
|
63
63
|
/** Defaults. Documented as the named knob values for the implementation. */
|
|
64
64
|
export const DEFAULT_PARTITIONED_DISPATCHER_CONFIG = {
|
|
65
65
|
maxPartitions: 256,
|
|
@@ -87,7 +87,6 @@ export function makePartitionedDispatcher(params) {
|
|
|
87
87
|
const partitionsRef = yield* Ref.make(HashMap.empty());
|
|
88
88
|
const counters = {
|
|
89
89
|
totalOffered: yield* Ref.make(0),
|
|
90
|
-
malformed: yield* Ref.make(0),
|
|
91
90
|
partitionLimit: yield* Ref.make(0),
|
|
92
91
|
partitionQueueFull: yield* Ref.make(0),
|
|
93
92
|
};
|
|
@@ -104,15 +103,11 @@ export function makePartitionedDispatcher(params) {
|
|
|
104
103
|
// Idle-reaper fiber. One fiber per dispatcher (NOT per partition);
|
|
105
104
|
// walks the map every `idleReaperIntervalMs` and finalizes
|
|
106
105
|
// partitions whose `idleSince._tag === "Idle"` exceeds the TTL.
|
|
107
|
-
const reaperEffect = reapIdlePartitions(internal).pipe(Effect.repeat(Schedule.spaced(Duration.millis(config.idleReaperIntervalMs))), Effect.asVoid, Effect.catchAllCause((cause) => Effect.sync(() => params.logger?.warn("
|
|
106
|
+
const reaperEffect = reapIdlePartitions(internal).pipe(Effect.repeat(Schedule.spaced(Duration.millis(config.idleReaperIntervalMs))), Effect.asVoid, Effect.catchAllCause((cause) => Effect.sync(() => params.logger?.warn("appCallback idle reaper exited", Cause.pretty(cause)))));
|
|
108
107
|
yield* Scope.extend(Effect.forkScoped(reaperEffect), dispatcherScope);
|
|
109
108
|
const offer = (request) => Effect.gen(function* () {
|
|
110
109
|
yield* Ref.update(counters.totalOffered, (n) => n + 1);
|
|
111
|
-
const
|
|
112
|
-
const key = yield* Either.match(keyResult, {
|
|
113
|
-
onLeft: (err) => Ref.update(counters.malformed, (n) => n + 1).pipe(Effect.zipRight(Effect.fail(err))),
|
|
114
|
-
onRight: (value) => Effect.succeed(value),
|
|
115
|
-
});
|
|
110
|
+
const key = extractPartitionKey(request);
|
|
116
111
|
const worker = yield* getOrCreatePartitionWorker({
|
|
117
112
|
key,
|
|
118
113
|
requestId: request.id,
|
|
@@ -133,14 +128,12 @@ export function makePartitionedDispatcher(params) {
|
|
|
133
128
|
partitions.push({ key, queueSize, idle });
|
|
134
129
|
}
|
|
135
130
|
const totalOffered = yield* Ref.get(counters.totalOffered);
|
|
136
|
-
const malformed = yield* Ref.get(counters.malformed);
|
|
137
131
|
const partitionLimit = yield* Ref.get(counters.partitionLimit);
|
|
138
132
|
const partitionQueueFull = yield* Ref.get(counters.partitionQueueFull);
|
|
139
133
|
return {
|
|
140
134
|
activePartitions: HashMap.size(map),
|
|
141
135
|
totalOffered,
|
|
142
136
|
totalRejected: {
|
|
143
|
-
malformed,
|
|
144
137
|
partitionLimit,
|
|
145
138
|
partitionQueueFull,
|
|
146
139
|
},
|
|
@@ -217,7 +210,7 @@ function getOrCreatePartitionWorker(params) {
|
|
|
217
210
|
// Discard the redundant worker. Closing its scope cascades to
|
|
218
211
|
// queue.shutdown + the drain fiber's interrupt, releasing every
|
|
219
212
|
// resource we just allocated.
|
|
220
|
-
state.logger?.warn(`
|
|
213
|
+
state.logger?.warn(`appCallback partition allocation lost race (key=${key}); discarding redundant worker`);
|
|
221
214
|
yield* Scope.close(workerScope, Exit.void).pipe(Effect.catchAllCause(() => Effect.void));
|
|
222
215
|
}
|
|
223
216
|
return inserted.winner;
|
|
@@ -286,4 +279,4 @@ function reapIdlePartitions(state) {
|
|
|
286
279
|
}
|
|
287
280
|
});
|
|
288
281
|
}
|
|
289
|
-
//# sourceMappingURL=
|
|
282
|
+
//# sourceMappingURL=app-callback-partitioned-dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-callback-partitioned-dispatcher.js","sourceRoot":"","sources":["../../src/internal/app-callback-partitioned-dispatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/errors.d.ts
CHANGED
|
@@ -1,30 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
readonly _tag: "NotConnectedError";
|
|
3
|
-
} & Readonly<A>;
|
|
4
|
-
/** The socket is not in the OPEN state when an RPC was attempted. */
|
|
5
|
-
export declare class NotConnectedError extends NotConnectedError_base<{
|
|
6
|
-
readonly message: string;
|
|
7
|
-
}> {
|
|
8
|
-
}
|
|
9
|
-
declare const RpcTimeoutError_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 & {
|
|
10
|
-
readonly _tag: "RpcTimeoutError";
|
|
11
|
-
} & Readonly<A>;
|
|
12
|
-
/** The RPC exceeded the per-call timeout without a response frame. */
|
|
13
|
-
export declare class RpcTimeoutError extends RpcTimeoutError_base<{
|
|
14
|
-
readonly method: string;
|
|
15
|
-
readonly timeoutMs: number;
|
|
16
|
-
}> {
|
|
17
|
-
}
|
|
18
|
-
declare const RpcServerError_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 & {
|
|
19
|
-
readonly _tag: "RpcServerError";
|
|
20
|
-
} & Readonly<A>;
|
|
21
|
-
/** The server returned an `error` response frame. */
|
|
22
|
-
export declare class RpcServerError extends RpcServerError_base<{
|
|
23
|
-
readonly code: number;
|
|
24
|
-
readonly message: string;
|
|
25
|
-
readonly data?: unknown;
|
|
26
|
-
}> {
|
|
27
|
-
}
|
|
1
|
+
import type { AppCallbackRpcMethodName } from "@moltzap/protocol";
|
|
28
2
|
declare const MalformedFrameError_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 & {
|
|
29
3
|
readonly _tag: "MalformedFrameError";
|
|
30
4
|
} & Readonly<A>;
|
|
@@ -52,7 +26,7 @@ declare const DuplicateServerRpcHandlerError_base: new <A extends Record<string,
|
|
|
52
26
|
* forces the duplicate registration to surface at the call site.
|
|
53
27
|
*/
|
|
54
28
|
export declare class DuplicateServerRpcHandlerError extends DuplicateServerRpcHandlerError_base<{
|
|
55
|
-
readonly method:
|
|
29
|
+
readonly method: AppCallbackRpcMethodName;
|
|
56
30
|
}> {
|
|
57
31
|
get message(): string;
|
|
58
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;;;;AAElE,iFAAiF;AACjF,qBAAa,mBAAoB,SAAQ,yBAEvC;IACA,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;CAAG;;;;AAEL,+CAA+C;AAC/C,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC7E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED;;;;GAIG;AACH,qBAAa,8BAA+B,SAAQ,oCAElD;IACA,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;CAC3C,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF"}
|
package/dist/runtime/errors.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
import { Data } from "effect";
|
|
2
|
-
/** The socket is not in the OPEN state when an RPC was attempted. */
|
|
3
|
-
export class NotConnectedError extends Data.TaggedError("NotConnectedError") {
|
|
4
|
-
}
|
|
5
|
-
/** The RPC exceeded the per-call timeout without a response frame. */
|
|
6
|
-
export class RpcTimeoutError extends Data.TaggedError("RpcTimeoutError") {
|
|
7
|
-
}
|
|
8
|
-
/** The server returned an `error` response frame. */
|
|
9
|
-
export class RpcServerError extends Data.TaggedError("RpcServerError") {
|
|
10
|
-
}
|
|
11
2
|
/** Inbound frame failed to parse as JSON or did not match the expected shape. */
|
|
12
3
|
export class MalformedFrameError extends Data.TaggedError("MalformedFrameError") {
|
|
13
4
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,iFAAiF;AACjF,MAAM,OAAO,mBAAoB,SAAQ,IAAI,CAAC,WAAW,CACvD,qBAAqB,CAIrB;CAAG;AAEL,+CAA+C;AAC/C,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAE3E;IACA,IAAa,OAAO;QAClB,OAAO,oBAAoB,IAAI,CAAC,SAAS,EAAE,CAAC;IAC9C,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,8BAA+B,SAAQ,IAAI,CAAC,WAAW,CAClE,gCAAgC,CAGhC;IACA,IAAa,OAAO;QAClB,OAAO,qDAAqD,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5E,CAAC;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { AgentNotFoundError, MalformedFrameError
|
|
3
|
-
import { MessagesSend } from "@moltzap/protocol";
|
|
2
|
+
import { AgentNotFoundError, MalformedFrameError } from "./errors.js";
|
|
3
|
+
import { MessagesSend, NotConnectedError, RpcServerError, RpcTimeoutError, } from "@moltzap/protocol";
|
|
4
4
|
describe("AgentNotFoundError", () => {
|
|
5
5
|
it("carries agentName and derives a `_tag` + `message`", () => {
|
|
6
6
|
const err = new AgentNotFoundError({ agentName: "foo" });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/runtime/errors.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/runtime/errors.test.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/frame.d.ts
CHANGED
|
@@ -1,31 +1,30 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
import { type
|
|
2
|
+
import { type AnyAppCallbackRpcDefinition, type AnyNotificationDefinition, type DecodedNotification as ProtocolDecodedNotification, type DecodedRpcRequest, type JsonRpcStringId, type ResponseFrame } from "@moltzap/protocol";
|
|
3
3
|
import { MalformedFrameError } from "./errors.js";
|
|
4
|
-
|
|
4
|
+
import { type AppCallbackPartitionRoute } from "../internal/app-callback-partition-key.js";
|
|
5
|
+
/** Decoded response frame — narrowed from the protocol's `ResponseFrame`. */
|
|
5
6
|
export interface DecodedResponse {
|
|
6
7
|
readonly _tag: "Response";
|
|
7
|
-
readonly id:
|
|
8
|
+
readonly id: JsonRpcStringId;
|
|
8
9
|
readonly result?: unknown;
|
|
9
|
-
readonly error?: ResponseFrame
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export interface DecodedEvent {
|
|
13
|
-
readonly _tag: "Event";
|
|
14
|
-
readonly frame: EventFrame;
|
|
10
|
+
readonly error?: Extract<ResponseFrame, {
|
|
11
|
+
error: unknown;
|
|
12
|
+
}>["error"];
|
|
15
13
|
}
|
|
14
|
+
/** Decoded notification frame. */
|
|
15
|
+
export type DecodedNotification<D extends AnyNotificationDefinition = AnyNotificationDefinition> = ProtocolDecodedNotification<D> & {
|
|
16
|
+
readonly _tag: "Notification";
|
|
17
|
+
};
|
|
16
18
|
/**
|
|
17
|
-
* Decoded server-initiated (
|
|
19
|
+
* Decoded server-initiated (appCallback) request frame. The client routes these to
|
|
18
20
|
* its per-method handler registry; the server is the originator and awaits
|
|
19
|
-
* a matching
|
|
21
|
+
* a matching JSON-RPC response with the same id.
|
|
20
22
|
*/
|
|
21
|
-
export
|
|
23
|
+
export type DecodedServerRequest<D extends AnyAppCallbackRpcDefinition = AnyAppCallbackRpcDefinition> = DecodedRpcRequest<D> & {
|
|
22
24
|
readonly _tag: "ServerRequest";
|
|
23
|
-
readonly
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
readonly traceparent?: string;
|
|
27
|
-
}
|
|
28
|
-
export type DecodedFrame = DecodedResponse | DecodedEvent | DecodedServerRequest;
|
|
25
|
+
readonly partition: AppCallbackPartitionRoute;
|
|
26
|
+
};
|
|
27
|
+
export type DecodedFrame = DecodedResponse | DecodedNotification | DecodedServerRequest;
|
|
29
28
|
export declare const splitRawFrames: (raw: string) => Effect.Effect<ReadonlyArray<string>, MalformedFrameError>;
|
|
30
29
|
/**
|
|
31
30
|
* Central typed inbound frame decoder. JSON.parse + shape validation via the
|
|
@@ -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,EAEL,KAAK,
|
|
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,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAW9B,KAAK,mBAAmB,IAAI,2BAA2B,EACvD,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAEpB,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,2CAA2C,CAAC;AAEnD,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,OAAO,CAAC,CAAC;CACtE;AAED,kCAAkC;AAClC,MAAM,MAAM,mBAAmB,CAC7B,CAAC,SAAS,yBAAyB,GAAG,yBAAyB,IAC7D,2BAA2B,CAAC,CAAC,CAAC,GAAG;IACnC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;CAC/B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS,2BAA2B,GAAG,2BAA2B,IACjE,iBAAiB,CAAC,CAAC,CAAC,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,mBAAmB,GACnB,oBAAoB,CAAC;AA6HzB,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,CAwB7D,CAAC"}
|
package/dist/runtime/frame.js
CHANGED
|
@@ -1,42 +1,100 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
import { validators, } from "@moltzap/protocol";
|
|
2
|
+
import { validators, AppsOnBeforeDispatch, AppsOnBeforeMessageDelivery, AppsOnClose, AppsOnJoin, AppsOnSessionActive, appCallbackRpcGroup, decodeRpcRequest, isDecodedRpcRequest, isJsonRpcStringId, notificationGroup, } from "@moltzap/protocol";
|
|
3
3
|
import { MalformedFrameError } from "./errors.js";
|
|
4
|
+
import { LIFECYCLE_CONVERSATION_SENTINEL, } from "../internal/app-callback-partition-key.js";
|
|
4
5
|
const isFramePadding = (char) => char === "\u0000" || char === "\ufeff" || /\s/u.test(char);
|
|
5
6
|
const toDecodedFrame = (parsed) => {
|
|
7
|
+
const raw = JSON.stringify(parsed);
|
|
6
8
|
if (validators.responseFrame(parsed)) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
// client would correspond to a client-originated server reply — but
|
|
10
|
-
// the client never originates s2c requests, so route as malformed.
|
|
11
|
-
if (frame.direction !== "c2s") {
|
|
12
|
-
return new MalformedFrameError({ raw: JSON.stringify(parsed) });
|
|
9
|
+
if (!isJsonRpcStringId(parsed.id)) {
|
|
10
|
+
return Effect.fail(new MalformedFrameError({ raw }));
|
|
13
11
|
}
|
|
14
|
-
return {
|
|
12
|
+
return Effect.succeed({
|
|
15
13
|
_tag: "Response",
|
|
16
|
-
id:
|
|
17
|
-
result:
|
|
18
|
-
error:
|
|
19
|
-
};
|
|
14
|
+
id: parsed.id,
|
|
15
|
+
result: "result" in parsed ? parsed.result : undefined,
|
|
16
|
+
error: "error" in parsed ? parsed.error : undefined,
|
|
17
|
+
});
|
|
20
18
|
}
|
|
21
19
|
if (validators.requestFrame(parsed)) {
|
|
22
|
-
|
|
23
|
-
// Symmetric defense: a `direction: "c2s"` request inbound on the
|
|
24
|
-
// client would mean the server is acting as a client — never legal.
|
|
25
|
-
if (frame.direction !== "s2c") {
|
|
26
|
-
return new MalformedFrameError({ raw: JSON.stringify(parsed) });
|
|
27
|
-
}
|
|
28
|
-
return {
|
|
20
|
+
return decodeRpcRequest(appCallbackRpcGroup, parsed).pipe(Effect.mapError((cause) => new MalformedFrameError({ raw, cause })), Effect.flatMap((request) => appCallbackPartitionRoute(request).pipe(Effect.map((partition) => ({
|
|
29
21
|
_tag: "ServerRequest",
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
22
|
+
...request,
|
|
23
|
+
partition,
|
|
24
|
+
})))));
|
|
25
|
+
}
|
|
26
|
+
if (validators.notificationFrame(parsed)) {
|
|
27
|
+
return Effect.succeed(toDecodedNotification(parsed));
|
|
28
|
+
}
|
|
29
|
+
return Effect.fail(new MalformedFrameError({ raw }));
|
|
30
|
+
};
|
|
31
|
+
const PASSTHROUGH_PARAMS_SCHEMA = Object.freeze({});
|
|
32
|
+
function makePassthroughNotificationDefinition(method) {
|
|
33
|
+
const validate = (data) => data === data;
|
|
34
|
+
const def = {
|
|
35
|
+
name: method,
|
|
36
|
+
paramsSchema: PASSTHROUGH_PARAMS_SCHEMA,
|
|
37
|
+
validateParams: validate,
|
|
38
|
+
Params: undefined,
|
|
39
|
+
};
|
|
40
|
+
return passthroughCast(def);
|
|
41
|
+
}
|
|
42
|
+
// Single chokepoint for the runtime-only widening cast on a passthrough
|
|
43
|
+
// notification definition. ACG's `as-unknown-as` rule and the
|
|
44
|
+
// `sloppy-code-guard.sh` pragma check both opt out here; everywhere else
|
|
45
|
+
// in the package keeps the strict ban.
|
|
46
|
+
function passthroughCast(def) {
|
|
47
|
+
// eslint-disable-next-line agent-code-guard/as-unknown-as -- passthrough definition for unknown-method notifications; structurally compatible with NotificationDefinition but TypeScript can't narrow the literal `Name` union
|
|
48
|
+
return def; // #ignore-sloppy-code[as-unknown-as]: passthrough for unknown-method notifications
|
|
49
|
+
}
|
|
50
|
+
const toDecodedNotification = (parsed) => {
|
|
51
|
+
const known = notificationGroup.byName.get(parsed.method);
|
|
52
|
+
const definition = known ?? makePassthroughNotificationDefinition(parsed.method);
|
|
53
|
+
const decoded = {
|
|
54
|
+
jsonrpc: parsed.jsonrpc,
|
|
55
|
+
method: definition.name,
|
|
56
|
+
};
|
|
57
|
+
if (parsed.params !== undefined)
|
|
58
|
+
decoded["params"] = parsed.params;
|
|
59
|
+
Object.defineProperty(decoded, "_tag", {
|
|
60
|
+
value: "Notification",
|
|
61
|
+
enumerable: false,
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(decoded, "definition", {
|
|
64
|
+
value: definition,
|
|
65
|
+
enumerable: false,
|
|
66
|
+
});
|
|
67
|
+
return decoded;
|
|
68
|
+
};
|
|
69
|
+
const lifecycleRoute = (sessionId) => ({
|
|
70
|
+
sessionId,
|
|
71
|
+
conversationId: LIFECYCLE_CONVERSATION_SENTINEL,
|
|
72
|
+
});
|
|
73
|
+
const appCallbackPartitionRoute = (request) => {
|
|
74
|
+
if (isDecodedRpcRequest(AppsOnBeforeDispatch, request)) {
|
|
75
|
+
return Effect.succeed({
|
|
76
|
+
sessionId: request.params.sessionId,
|
|
77
|
+
conversationId: request.params.conversationId,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (isDecodedRpcRequest(AppsOnBeforeMessageDelivery, request)) {
|
|
81
|
+
return Effect.succeed({
|
|
82
|
+
sessionId: request.params.sessionId,
|
|
83
|
+
conversationId: request.params.conversationId,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
if (isDecodedRpcRequest(AppsOnSessionActive, request)) {
|
|
87
|
+
return Effect.succeed(lifecycleRoute(request.params.sessionId));
|
|
35
88
|
}
|
|
36
|
-
if (
|
|
37
|
-
return
|
|
89
|
+
if (isDecodedRpcRequest(AppsOnJoin, request)) {
|
|
90
|
+
return Effect.succeed(lifecycleRoute(request.params.sessionId));
|
|
38
91
|
}
|
|
39
|
-
|
|
92
|
+
if (isDecodedRpcRequest(AppsOnClose, request)) {
|
|
93
|
+
return Effect.succeed(lifecycleRoute(request.params.sessionId));
|
|
94
|
+
}
|
|
95
|
+
return Effect.fail(new MalformedFrameError({
|
|
96
|
+
raw: "unroutable app-callback request descriptor",
|
|
97
|
+
}));
|
|
40
98
|
};
|
|
41
99
|
export const splitRawFrames = (raw) => Effect.try({
|
|
42
100
|
try: () => {
|
|
@@ -116,10 +174,7 @@ export const decodeFrames = (raw) => Effect.gen(function* () {
|
|
|
116
174
|
catch (err) {
|
|
117
175
|
return yield* Effect.fail(new MalformedFrameError({ raw: frameText, cause: err }));
|
|
118
176
|
}
|
|
119
|
-
const decoded = toDecodedFrame(parsed);
|
|
120
|
-
if (decoded instanceof MalformedFrameError) {
|
|
121
|
-
return yield* Effect.fail(new MalformedFrameError({ raw: frameText }));
|
|
122
|
-
}
|
|
177
|
+
const decoded = yield* toDecodedFrame(parsed).pipe(Effect.mapError((cause) => new MalformedFrameError({ raw: frameText, cause })));
|
|
123
178
|
decodedFrames.push(decoded);
|
|
124
179
|
}
|
|
125
180
|
return decodedFrames;
|
|
@@ -1 +1 @@
|
|
|
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,UAAU,
|
|
1
|
+
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/runtime/frame.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,31 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { MessageReceivedNotificationDefinition, agentId, conversationId, messageId, notificationFrame, } from "@moltzap/protocol";
|
|
3
4
|
import { decodeFrames } from "./frame.js";
|
|
5
|
+
const TEST_MESSAGE = {
|
|
6
|
+
id: messageId("11111111-1111-4111-8111-111111111111"),
|
|
7
|
+
conversationId: conversationId("22222222-2222-4222-8222-222222222222"),
|
|
8
|
+
senderId: agentId("33333333-3333-4333-8333-333333333333"),
|
|
9
|
+
parts: [{ type: "text", text: "hello" }],
|
|
10
|
+
createdAt: "2026-05-03T00:00:00.000Z",
|
|
11
|
+
};
|
|
4
12
|
describe("decodeFrames", () => {
|
|
5
|
-
it("decodes padded chunks that contain both
|
|
6
|
-
const raw = JSON.stringify({
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
event: "messages/received",
|
|
10
|
-
data: { message: { id: "m-1", conversationId: "c-1" } },
|
|
11
|
-
}) +
|
|
13
|
+
it("decodes padded chunks that contain both a notification and a response", async () => {
|
|
14
|
+
const raw = JSON.stringify(notificationFrame(MessageReceivedNotificationDefinition, {
|
|
15
|
+
message: TEST_MESSAGE,
|
|
16
|
+
})) +
|
|
12
17
|
"\u0000\n" +
|
|
13
18
|
JSON.stringify({
|
|
14
19
|
jsonrpc: "2.0",
|
|
15
|
-
type: "response",
|
|
16
|
-
direction: "c2s",
|
|
17
20
|
id: "rpc-7",
|
|
18
21
|
result: { ok: true },
|
|
19
22
|
});
|
|
20
23
|
const decoded = await Effect.runPromise(decodeFrames(raw));
|
|
21
24
|
expect(decoded).toHaveLength(2);
|
|
22
25
|
expect(decoded[0]).toMatchObject({
|
|
23
|
-
_tag: "
|
|
24
|
-
|
|
26
|
+
_tag: "Notification",
|
|
27
|
+
method: MessageReceivedNotificationDefinition.name,
|
|
28
|
+
params: { message: TEST_MESSAGE },
|
|
25
29
|
});
|
|
26
30
|
expect(decoded[1]).toMatchObject({
|
|
27
31
|
_tag: "Response",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.test.js","sourceRoot":"","sources":["../../src/runtime/frame.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"frame.test.js","sourceRoot":"","sources":["../../src/runtime/frame.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,qCAAqC,EACrC,OAAO,EACP,cAAc,EACd,SAAS,EACT,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,YAAY,GAAG;IACnB,EAAE,EAAE,SAAS,CAAC,sCAAsC,CAAC;IACrD,cAAc,EAAE,cAAc,CAAC,sCAAsC,CAAC;IACtE,QAAQ,EAAE,OAAO,CAAC,sCAAsC,CAAC;IACzD,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACjD,SAAS,EAAE,0BAA0B;CACtC,CAAC;AAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,GAAG,GACP,IAAI,CAAC,SAAS,CACZ,iBAAiB,CAAC,qCAAqC,EAAE;YACvD,OAAO,EAAE,YAAY;SACtB,CAAC,CACH;YACD,UAAU;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO;gBACX,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;aACrB,CAAC,CAAC;QAEL,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QAE3D,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC/B,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,qCAAqC,CAAC,IAAI;YAClD,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE;SAClC,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC/B,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,OAAO;YACX,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;SACrB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { AgentNotFoundError,
|
|
1
|
+
export { AgentNotFoundError, MalformedFrameError } from "./errors.js";
|
|
2
2
|
export { snapshot, getOr } from "./refs.js";
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/runtime/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { AgentNotFoundError,
|
|
1
|
+
export { AgentNotFoundError, MalformedFrameError } from "./errors.js";
|
|
2
2
|
export { snapshot, getOr } from "./refs.js";
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const LocalServiceCommands: {
|
|
2
|
+
readonly Ping: "ping";
|
|
3
|
+
readonly Status: "status";
|
|
4
|
+
readonly History: "history";
|
|
5
|
+
};
|
|
6
|
+
export type LocalServiceCommand = (typeof LocalServiceCommands)[keyof typeof LocalServiceCommands];
|
|
7
|
+
//# sourceMappingURL=local-service-commands.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +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,8 +1,7 @@
|
|
|
1
1
|
import { it } from "@effect/vitest";
|
|
2
2
|
import { Effect, Exit } from "effect";
|
|
3
3
|
import { expect, it as itSync } from "vitest";
|
|
4
|
-
import { NotConnectedError, RpcServerError, RpcTimeoutError, } from "
|
|
5
|
-
import { MessagesSend } from "@moltzap/protocol";
|
|
4
|
+
import { MessagesSend, NotConnectedError, RpcServerError, RpcTimeoutError, } from "@moltzap/protocol";
|
|
6
5
|
it.effect("tagged errors discriminate by _tag", () => Effect.gen(function* () {
|
|
7
6
|
const exit = yield* Effect.exit(Effect.fail(new RpcTimeoutError({ method: MessagesSend.name, timeoutMs: 30_000 })));
|
|
8
7
|
if (Exit.isFailure(exit) && exit.cause._tag === "Fail") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.test.js","sourceRoot":"","sources":["../../src/runtime/runtime.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,
|
|
1
|
+
{"version":3,"file":"runtime.test.js","sourceRoot":"","sources":["../../src/runtime/runtime.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,EAAE,CAAC,MAAM,CAAC,oCAAoC,EAAE,GAAG,EAAE,CACnD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAC7B,MAAM,CAAC,IAAI,CACT,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CACtE,CACF,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,sCAAsC,EAAE,GAAG,EAAE;IAClD,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC;QAC7B,IAAI,EAAE,CAAC,KAAK;QACZ,OAAO,EAAE,WAAW;KACrB,CAAC,CAAC;IACH,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC5D,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC"}
|