@moltzap/client 2026.511.1 → 2026.519.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/auth.d.ts +12 -6
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +67 -29
- package/dist/auth.js.map +1 -1
- package/dist/auth.test.js +113 -76
- package/dist/auth.test.js.map +1 -1
- package/dist/channel-base/format-cross-conv.d.ts +43 -0
- package/dist/channel-base/format-cross-conv.d.ts.map +1 -0
- package/dist/channel-base/format-cross-conv.js +69 -0
- package/dist/channel-base/format-cross-conv.js.map +1 -0
- package/dist/channel-base/format-group-block.d.ts +43 -0
- package/dist/channel-base/format-group-block.d.ts.map +1 -0
- package/dist/channel-base/format-group-block.js +59 -0
- package/dist/channel-base/format-group-block.js.map +1 -0
- package/dist/channel-base/index.d.ts +21 -0
- package/dist/channel-base/index.d.ts.map +1 -0
- package/dist/channel-base/index.js +24 -0
- package/dist/channel-base/index.js.map +1 -0
- package/dist/channel-base/lease-guard.d.ts +30 -0
- package/dist/channel-base/lease-guard.d.ts.map +1 -0
- package/dist/channel-base/lease-guard.js +40 -0
- package/dist/channel-base/lease-guard.js.map +1 -0
- package/dist/channel-base/lease-store.d.ts +30 -0
- package/dist/channel-base/lease-store.d.ts.map +1 -0
- package/dist/channel-base/lease-store.js +58 -0
- package/dist/channel-base/lease-store.js.map +1 -0
- package/dist/channel-base/lease.d.ts +94 -0
- package/dist/channel-base/lease.d.ts.map +1 -0
- package/dist/channel-base/lease.js +110 -0
- package/dist/channel-base/lease.js.map +1 -0
- package/dist/channel-core-context.test.d.ts +2 -0
- package/dist/channel-core-context.test.d.ts.map +1 -0
- package/dist/channel-core-context.test.js +334 -0
- package/dist/channel-core-context.test.js.map +1 -0
- package/dist/channel-core-dispatch.test.d.ts +2 -0
- package/dist/channel-core-dispatch.test.d.ts.map +1 -0
- package/dist/channel-core-dispatch.test.js +550 -0
- package/dist/channel-core-dispatch.test.js.map +1 -0
- package/dist/channel-core-enrichment.d.ts +8 -0
- package/dist/channel-core-enrichment.d.ts.map +1 -0
- package/dist/channel-core-enrichment.js +134 -0
- package/dist/channel-core-enrichment.js.map +1 -0
- package/dist/channel-core-errors.d.ts +20 -0
- package/dist/channel-core-errors.d.ts.map +1 -0
- package/dist/channel-core-errors.js +12 -0
- package/dist/channel-core-errors.js.map +1 -0
- package/dist/channel-core-test-support.d.ts +48 -0
- package/dist/channel-core-test-support.d.ts.map +1 -0
- package/dist/channel-core-test-support.js +111 -0
- package/dist/channel-core-test-support.js.map +1 -0
- package/dist/channel-core.d.ts +30 -7
- package/dist/channel-core.d.ts.map +1 -1
- package/dist/channel-core.js +214 -237
- package/dist/channel-core.js.map +1 -1
- package/dist/channel-core.test.js +216 -1082
- package/dist/channel-core.test.js.map +1 -1
- package/dist/cli/__tests__/cli-multi-agent.int.test.js +129 -23
- package/dist/cli/__tests__/cli-multi-agent.int.test.js.map +1 -1
- package/dist/cli/commands/conversations-v2.test.js +64 -54
- package/dist/cli/commands/conversations-v2.test.js.map +1 -1
- package/dist/cli/commands/conversations.d.ts +5 -5
- package/dist/cli/commands/conversations.d.ts.map +1 -1
- package/dist/cli/commands/conversations.js +43 -36
- package/dist/cli/commands/conversations.js.map +1 -1
- package/dist/cli/commands/messages.d.ts +4 -4
- package/dist/cli/commands/messages.d.ts.map +1 -1
- package/dist/cli/commands/messages.js +4 -4
- package/dist/cli/commands/messages.js.map +1 -1
- package/dist/cli/commands/messages.test.js +61 -49
- package/dist/cli/commands/messages.test.js.map +1 -1
- package/dist/cli/commands/ping.d.ts +0 -9
- package/dist/cli/commands/ping.d.ts.map +1 -1
- package/dist/cli/commands/ping.js +1 -1
- package/dist/cli/commands/ping.js.map +1 -1
- package/dist/cli/commands/presence.d.ts +1 -1
- package/dist/cli/commands/presence.js +1 -1
- package/dist/cli/commands/register.d.ts +2 -2
- package/dist/cli/commands/register.d.ts.map +1 -1
- package/dist/cli/commands/register.js +98 -77
- package/dist/cli/commands/register.js.map +1 -1
- package/dist/cli/commands/register.test.js +63 -39
- package/dist/cli/commands/register.test.js.map +1 -1
- package/dist/cli/commands/send.d.ts +6 -6
- package/dist/cli/commands/send.js +6 -6
- package/dist/cli/commands/send.test.js +32 -28
- package/dist/cli/commands/send.test.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +3 -4
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/config.d.ts +0 -2
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +86 -76
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/config.test.js +80 -42
- package/dist/cli/config.test.js.map +1 -1
- package/dist/cli/index.d.ts +1 -16
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +50 -113
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/process-argv.d.ts +2 -0
- package/dist/cli/process-argv.d.ts.map +1 -0
- package/dist/cli/process-argv.js +2 -0
- package/dist/cli/process-argv.js.map +1 -0
- package/dist/cli/profile.d.ts +3 -10
- package/dist/cli/profile.d.ts.map +1 -1
- package/dist/cli/profile.js +105 -104
- package/dist/cli/profile.js.map +1 -1
- package/dist/cli/profile.test.js +338 -232
- package/dist/cli/profile.test.js.map +1 -1
- package/dist/cli/runtime.d.ts +5 -17
- package/dist/cli/runtime.d.ts.map +1 -1
- package/dist/cli/runtime.js +6 -59
- package/dist/cli/runtime.js.map +1 -1
- package/dist/cli/socket-client.d.ts +10 -15
- package/dist/cli/socket-client.d.ts.map +1 -1
- package/dist/cli/socket-client.js +74 -89
- package/dist/cli/socket-client.js.map +1 -1
- package/dist/cli/transport.d.ts +9 -5
- package/dist/cli/transport.d.ts.map +1 -1
- package/dist/cli/transport.js +45 -42
- package/dist/cli/transport.js.map +1 -1
- package/dist/cli/transport.test.js +227 -133
- package/dist/cli/transport.test.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/local-daemon-rpc.d.ts +13 -0
- package/dist/local-daemon-rpc.d.ts.map +1 -0
- package/dist/local-daemon-rpc.js +17 -0
- package/dist/local-daemon-rpc.js.map +1 -0
- package/dist/local-paths.d.ts +7 -0
- package/dist/local-paths.d.ts.map +1 -0
- package/dist/local-paths.js +20 -0
- package/dist/local-paths.js.map +1 -0
- package/dist/runtime/close-info.d.ts +3 -12
- package/dist/runtime/close-info.d.ts.map +1 -1
- package/dist/runtime/close-info.js +28 -39
- package/dist/runtime/close-info.js.map +1 -1
- package/dist/runtime/close-info.test.js +77 -70
- package/dist/runtime/close-info.test.js.map +1 -1
- package/dist/runtime/errors.test.js +42 -28
- package/dist/runtime/errors.test.js.map +1 -1
- package/dist/runtime/frame.d.ts +4 -31
- package/dist/runtime/frame.d.ts.map +1 -1
- package/dist/runtime/frame.js +7 -116
- package/dist/runtime/frame.js.map +1 -1
- package/dist/runtime/frame.test.js +41 -54
- package/dist/runtime/frame.test.js.map +1 -1
- package/dist/runtime/index.d.ts +7 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +7 -11
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/local-history.d.ts +67 -0
- package/dist/runtime/local-history.d.ts.map +1 -0
- package/dist/runtime/local-history.js +77 -0
- package/dist/runtime/local-history.js.map +1 -0
- package/dist/runtime/local-service-commands.d.ts +19 -0
- package/dist/runtime/local-service-commands.d.ts.map +1 -1
- package/dist/runtime/local-service-commands.js +23 -0
- package/dist/runtime/local-service-commands.js.map +1 -1
- package/dist/runtime/local-socket-server.d.ts +20 -0
- package/dist/runtime/local-socket-server.d.ts.map +1 -0
- package/dist/runtime/local-socket-server.js +94 -0
- package/dist/runtime/local-socket-server.js.map +1 -0
- package/dist/runtime/refs.d.ts +1 -1
- package/dist/runtime/refs.js +1 -1
- package/dist/runtime/runtime.test.js +29 -21
- package/dist/runtime/runtime.test.js.map +1 -1
- package/dist/runtime/service-helpers.d.ts +32 -0
- package/dist/runtime/service-helpers.d.ts.map +1 -0
- package/dist/runtime/service-helpers.js +85 -0
- package/dist/runtime/service-helpers.js.map +1 -0
- package/dist/runtime/subscribers.d.ts +13 -17
- package/dist/runtime/subscribers.d.ts.map +1 -1
- package/dist/runtime/subscribers.js +37 -32
- package/dist/runtime/subscribers.js.map +1 -1
- package/dist/runtime/subscribers.test.js +139 -131
- package/dist/runtime/subscribers.test.js.map +1 -1
- package/dist/service-socket-path.test.d.ts +2 -0
- package/dist/service-socket-path.test.d.ts.map +1 -0
- package/dist/service-socket-path.test.js +87 -0
- package/dist/service-socket-path.test.js.map +1 -0
- package/dist/service.d.ts +23 -20
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +192 -340
- package/dist/service.js.map +1 -1
- package/dist/service.test.js +652 -653
- package/dist/service.test.js.map +1 -1
- package/dist/test/index.d.ts +30 -14
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +25 -21
- package/dist/test/index.js.map +1 -1
- package/dist/test-utils/channel-service-fixture.d.ts +1 -0
- package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
- package/dist/test-utils/channel-service-fixture.js +139 -98
- package/dist/test-utils/channel-service-fixture.js.map +1 -1
- package/dist/test-utils/conformance-adapter.d.ts.map +1 -1
- package/dist/test-utils/conformance-adapter.js +145 -124
- package/dist/test-utils/conformance-adapter.js.map +1 -1
- package/dist/test-utils/fake-service.d.ts.map +1 -1
- package/dist/test-utils/fake-service.js +3 -3
- package/dist/test-utils/fake-service.js.map +1 -1
- package/dist/test-utils/index.d.ts +25 -0
- package/dist/test-utils/index.d.ts.map +1 -1
- package/dist/test-utils/index.js +25 -8
- package/dist/test-utils/index.js.map +1 -1
- package/dist/ws-client-test-support.d.ts +180 -0
- package/dist/ws-client-test-support.d.ts.map +1 -0
- package/dist/ws-client-test-support.js +399 -0
- package/dist/ws-client-test-support.js.map +1 -0
- package/dist/ws-client.d.ts +59 -32
- package/dist/ws-client.d.ts.map +1 -1
- package/dist/ws-client.js +272 -321
- package/dist/ws-client.js.map +1 -1
- package/dist/ws-client.test.js +388 -800
- package/dist/ws-client.test.js.map +1 -1
- package/package.json +18 -10
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
function isMessageList(messageOrMessages) {
|
|
3
|
+
return Array.isArray(messageOrMessages);
|
|
4
|
+
}
|
|
5
|
+
function asMessageArray(messageOrMessages) {
|
|
6
|
+
return isMessageList(messageOrMessages)
|
|
7
|
+
? [...messageOrMessages]
|
|
8
|
+
: [messageOrMessages];
|
|
9
|
+
}
|
|
10
|
+
function formatCoalescedText(coalesced) {
|
|
11
|
+
if (coalesced.length === 1)
|
|
12
|
+
return coalesced[0].text;
|
|
13
|
+
return coalesced
|
|
14
|
+
.map((message, index) => index === 0
|
|
15
|
+
? message.text
|
|
16
|
+
: `[queued message from ${message.sender.name} at ${message.createdAt}]\n${message.text}`)
|
|
17
|
+
.join("\n\n");
|
|
18
|
+
}
|
|
19
|
+
function conversationMetaFrom(convMeta) {
|
|
20
|
+
if (!convMeta)
|
|
21
|
+
return undefined;
|
|
22
|
+
return {
|
|
23
|
+
type: convMeta.type === "group" ? "group" : "dm",
|
|
24
|
+
name: convMeta.name,
|
|
25
|
+
participants: convMeta.participants,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function extractTextContent(parts) {
|
|
29
|
+
return parts
|
|
30
|
+
.filter((part) => part.type === "text")
|
|
31
|
+
.map((part) => part.text)
|
|
32
|
+
.join("\n");
|
|
33
|
+
}
|
|
34
|
+
function resolveSenderName(service, agentId) {
|
|
35
|
+
const cachedName = service.getAgentName(agentId);
|
|
36
|
+
return cachedName !== undefined
|
|
37
|
+
? Effect.succeed(cachedName)
|
|
38
|
+
: service.resolveAgentName(agentId);
|
|
39
|
+
}
|
|
40
|
+
function coalescedMessageFrom(message, senderName) {
|
|
41
|
+
return {
|
|
42
|
+
id: message.id,
|
|
43
|
+
sender: {
|
|
44
|
+
id: message.senderId,
|
|
45
|
+
name: senderName,
|
|
46
|
+
},
|
|
47
|
+
text: extractTextContent(message.parts),
|
|
48
|
+
createdAt: message.createdAt,
|
|
49
|
+
...(message.replyToId ? { replyToId: message.replyToId } : {}),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function buildCoalescedMessages(service, messages, primarySenderName) {
|
|
53
|
+
return Effect.gen(function* () {
|
|
54
|
+
const primaryMessage = messages[0];
|
|
55
|
+
const coalesced = [coalescedMessageFrom(primaryMessage, primarySenderName)];
|
|
56
|
+
for (const message of messages.slice(1)) {
|
|
57
|
+
const senderName = yield* resolveSenderName(service, message.senderId);
|
|
58
|
+
coalesced.push(coalescedMessageFrom(message, senderName));
|
|
59
|
+
}
|
|
60
|
+
return coalesced;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function isFromOwnAgent(service, message) {
|
|
64
|
+
return (service.ownAgentId !== undefined && message.senderId === service.ownAgentId);
|
|
65
|
+
}
|
|
66
|
+
function collectContextBlocks(service, conversationId, conversationMeta) {
|
|
67
|
+
const contextBlocks = {};
|
|
68
|
+
if (conversationMeta?.type === "group") {
|
|
69
|
+
contextBlocks.groupMetadata = conversationMeta;
|
|
70
|
+
}
|
|
71
|
+
const { entries, commit: commitLegacy } = service.peekContextEntries(conversationId);
|
|
72
|
+
if (entries.length > 0) {
|
|
73
|
+
contextBlocks.crossConversation = entries;
|
|
74
|
+
}
|
|
75
|
+
const { messages: fullMessages, commit: commitFull } = service.peekFullMessages(conversationId);
|
|
76
|
+
if (fullMessages.length > 0) {
|
|
77
|
+
contextBlocks.crossConversationMessages = fullMessages;
|
|
78
|
+
}
|
|
79
|
+
const hasContext = entries.length > 0 || fullMessages.length > 0;
|
|
80
|
+
return {
|
|
81
|
+
conversationMeta,
|
|
82
|
+
contextBlocks,
|
|
83
|
+
...(hasContext
|
|
84
|
+
? {
|
|
85
|
+
commitContext: () => {
|
|
86
|
+
commitLegacy();
|
|
87
|
+
commitFull();
|
|
88
|
+
},
|
|
89
|
+
}
|
|
90
|
+
: {}),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function buildEnrichedInboundMessage({ service, message, senderName, coalesced, context, }) {
|
|
94
|
+
return {
|
|
95
|
+
id: message.id,
|
|
96
|
+
conversationId: message.conversationId,
|
|
97
|
+
sender: {
|
|
98
|
+
id: message.senderId,
|
|
99
|
+
name: senderName,
|
|
100
|
+
},
|
|
101
|
+
text: formatCoalescedText(coalesced),
|
|
102
|
+
isFromMe: isFromOwnAgent(service, message),
|
|
103
|
+
createdAt: message.createdAt,
|
|
104
|
+
contextBlocks: context.contextBlocks,
|
|
105
|
+
...(message.replyToId ? { replyToId: message.replyToId } : {}),
|
|
106
|
+
...(context.conversationMeta
|
|
107
|
+
? { conversationMeta: context.conversationMeta }
|
|
108
|
+
: {}),
|
|
109
|
+
...(coalesced.length > 1 ? { coalescedMessages: coalesced } : {}),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export function enrichChannelMessage(service, messageOrMessages) {
|
|
113
|
+
return Effect.gen(function* () {
|
|
114
|
+
const messages = asMessageArray(messageOrMessages);
|
|
115
|
+
const message = messages[0];
|
|
116
|
+
const senderName = yield* resolveSenderName(service, message.senderId);
|
|
117
|
+
const coalesced = yield* buildCoalescedMessages(service, messages, senderName);
|
|
118
|
+
const conversationMeta = conversationMetaFrom(service.getConversation(message.conversationId));
|
|
119
|
+
const context = collectContextBlocks(service, message.conversationId, conversationMeta);
|
|
120
|
+
return {
|
|
121
|
+
enriched: buildEnrichedInboundMessage({
|
|
122
|
+
service,
|
|
123
|
+
message,
|
|
124
|
+
senderName,
|
|
125
|
+
coalesced,
|
|
126
|
+
context,
|
|
127
|
+
}),
|
|
128
|
+
...(context.commitContext
|
|
129
|
+
? { commitContext: context.commitContext }
|
|
130
|
+
: {}),
|
|
131
|
+
};
|
|
132
|
+
}).pipe(Effect.withSpan("enrichChannelMessage"));
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=channel-core-enrichment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-core-enrichment.js","sourceRoot":"","sources":["../src/channel-core-enrichment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
declare const DispatchAdmissionTimedOut_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 & {
|
|
2
|
+
readonly _tag: "DispatchAdmissionTimedOut";
|
|
3
|
+
} & Readonly<A>;
|
|
4
|
+
export declare class DispatchAdmissionTimedOut extends DispatchAdmissionTimedOut_base<{
|
|
5
|
+
readonly timeoutMs: number;
|
|
6
|
+
}> {
|
|
7
|
+
get message(): string;
|
|
8
|
+
}
|
|
9
|
+
declare const DispatchLeaseExpired_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: "DispatchLeaseExpired";
|
|
11
|
+
} & Readonly<A>;
|
|
12
|
+
export declare class DispatchLeaseExpired extends DispatchLeaseExpired_base<{
|
|
13
|
+
readonly messageId: string;
|
|
14
|
+
readonly conversationId: string;
|
|
15
|
+
readonly timeoutMs: number;
|
|
16
|
+
}> {
|
|
17
|
+
get message(): string;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=channel-core-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-core-errors.d.ts","sourceRoot":"","sources":["../src/channel-core-errors.ts"],"names":[],"mappings":";;;AAEA,qBAAa,yBAA0B,SAAQ,+BAE7C;IACA,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED,qBAAa,oBAAqB,SAAQ,0BAExC;IACA,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Data } from "effect";
|
|
2
|
+
export class DispatchAdmissionTimedOut extends Data.TaggedError("DispatchAdmissionTimedOut") {
|
|
3
|
+
get message() {
|
|
4
|
+
return `dispatch request timed out after ${this.timeoutMs}ms`;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class DispatchLeaseExpired extends Data.TaggedError("DispatchLeaseExpired") {
|
|
8
|
+
get message() {
|
|
9
|
+
return `dispatch lease expired after ${this.timeoutMs}ms`;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=channel-core-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-core-errors.js","sourceRoot":"","sources":["../src/channel-core-errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,MAAM,OAAO,yBAA0B,SAAQ,IAAI,CAAC,WAAW,CAC7D,2BAA2B,CAG3B;IACA,IAAa,OAAO;QAClB,OAAO,oCAAoC,IAAI,CAAC,SAAS,IAAI,CAAC;IAChE,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,IAAI,CAAC,WAAW,CACxD,sBAAsB,CAKtB;IACA,IAAa,OAAO;QAClB,OAAO,gCAAgC,IAAI,CAAC,SAAS,IAAI,CAAC;IAC5D,CAAC;CACF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { RpcServerError, type Message } from "@moltzap/protocol";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import { MoltZapChannelCore, type ChannelService, type CrossConversationEntry, type DispatchAdmissionDecision, type DispatchAdmissionRequest, type EnrichedInboundMessage, type ServiceRpcError } from "./index.js";
|
|
4
|
+
import { buildMessage, createFakeChannelService, flushDispatchChainEffect, type FakeChannelService } from "./test-utils/index.js";
|
|
5
|
+
export { MoltZapChannelCore, RpcServerError, buildMessage, createFakeChannelService, flushDispatchChainEffect, };
|
|
6
|
+
export type { ChannelService, CrossConversationEntry, EnrichedInboundMessage, FakeChannelService, Message, };
|
|
7
|
+
export declare const STUCK_MESSAGE_LEASE_TIMEOUT_MS = 50;
|
|
8
|
+
export declare const effectTest: import("@effect/vitest").Vitest.Tester<import("effect/TestServices").TestServices>;
|
|
9
|
+
export declare const ALICE_CACHED_NAME = "Alice (cached)";
|
|
10
|
+
export declare const ALICE_RESOLVED_NAME = "Alice (via resolve)";
|
|
11
|
+
export declare const MULTILINE_TEXT = "line one\nline two";
|
|
12
|
+
export declare const CAPTION_TEXT = "caption";
|
|
13
|
+
export declare const FIRST_TEXT = "first";
|
|
14
|
+
export declare const SECOND_TEXT = "second";
|
|
15
|
+
export declare const DENIED_LEASE_ID = "lease-den";
|
|
16
|
+
export declare const TIME_TO_VOTE_TEXT = "Time to vote";
|
|
17
|
+
export declare const AFTER_MARKER_TEXT = "after marker";
|
|
18
|
+
export declare const OLD_DISCUSSION_TEXT = "old discussion";
|
|
19
|
+
export declare const MARKER_LEASE_ID = "lease-marker";
|
|
20
|
+
export declare const DEVS_GROUP_NAME = "devs";
|
|
21
|
+
export declare const FIRST_VISIT_TEXT = "first visit";
|
|
22
|
+
declare const TestInboundHandlerError_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 & {
|
|
23
|
+
readonly _tag: "TestInboundHandlerError";
|
|
24
|
+
} & Readonly<A>;
|
|
25
|
+
export declare class TestInboundHandlerError extends TestInboundHandlerError_base<{
|
|
26
|
+
readonly message: string;
|
|
27
|
+
}> {
|
|
28
|
+
}
|
|
29
|
+
type LegacyAdmissionRequest = DispatchAdmissionRequest;
|
|
30
|
+
export declare function installAdmission(fake: FakeChannelService, decide: (request: LegacyAdmissionRequest) => Effect.Effect<DispatchAdmissionDecision, ServiceRpcError>): void;
|
|
31
|
+
export declare const agent: (label: string) => import("@moltzap/protocol").AgentId;
|
|
32
|
+
export declare const conversation: (label: string) => import("@moltzap/protocol").ConversationId;
|
|
33
|
+
export declare const message: (label: string) => import("@moltzap/protocol").MessageId;
|
|
34
|
+
export declare const participant: (agentLabel: string) => string;
|
|
35
|
+
export interface ChannelCoreFixture {
|
|
36
|
+
readonly fake: FakeChannelService;
|
|
37
|
+
readonly service: ChannelService;
|
|
38
|
+
readonly core: MoltZapChannelCore;
|
|
39
|
+
readonly inbound: EnrichedInboundMessage[];
|
|
40
|
+
}
|
|
41
|
+
export declare function createChannelCoreFixture(): ChannelCoreFixture;
|
|
42
|
+
export declare function customSetup(): {
|
|
43
|
+
fake: FakeChannelService;
|
|
44
|
+
core: MoltZapChannelCore;
|
|
45
|
+
received: EnrichedInboundMessage[];
|
|
46
|
+
};
|
|
47
|
+
export declare function forceResolveAgentNamePath(fake: FakeChannelService): void;
|
|
48
|
+
//# sourceMappingURL=channel-core-test-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-core-test-support.d.ts","sourceRoot":"","sources":["../src/channel-core-test-support.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAE7B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,wBAAwB,EAIxB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,wBAAwB,EACxB,wBAAwB,GACzB,CAAC;AACF,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,OAAO,GACR,CAAC;AAEF,eAAO,MAAM,8BAA8B,KAAK,CAAC;AACjD,eAAO,MAAM,UAAU,oFAAkB,CAAC;AAC1C,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAClD,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,eAAO,MAAM,cAAc,uBAAuB,CAAC;AACnD,eAAO,MAAM,YAAY,YAAY,CAAC;AACtC,eAAO,MAAM,UAAU,UAAU,CAAC;AAClC,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAC9C,eAAO,MAAM,eAAe,SAAS,CAAC;AACtC,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;;;;AAE9C,qBAAa,uBAAwB,SAAQ,6BAE3C;IACA,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG;AAEL,KAAK,sBAAsB,GAAG,wBAAwB,CAAC;AAmFvD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,CACN,OAAO,EAAE,sBAAsB,KAC5B,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,eAAe,CAAC,GAC7D,IAAI,CAgBN;AAED,eAAO,MAAM,KAAK,wDAAc,CAAC;AACjC,eAAO,MAAM,YAAY,+DAAqB,CAAC;AAC/C,eAAO,MAAM,OAAO,0DAAgB,CAAC;AACrC,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,KAAG,MACnB,CAAC;AAE/B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC;CAC5C;AAED,wBAAgB,wBAAwB,IAAI,kBAAkB,CAU7D;AAED,wBAAgB,WAAW,IAAI;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC,CAUA;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAIxE"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { it as effectIt } from "@effect/vitest";
|
|
2
|
+
import { RpcServerError } from "@moltzap/protocol";
|
|
3
|
+
import { Data, Effect } from "effect";
|
|
4
|
+
import { MoltZapChannelCore, } from "./index.js";
|
|
5
|
+
import { buildMessage, createFakeChannelService, flushDispatchChainEffect, testAgentId, testConversationId, testMessageId, } from "./test-utils/index.js";
|
|
6
|
+
export { MoltZapChannelCore, RpcServerError, buildMessage, createFakeChannelService, flushDispatchChainEffect, };
|
|
7
|
+
export const STUCK_MESSAGE_LEASE_TIMEOUT_MS = 50;
|
|
8
|
+
export const effectTest = effectIt.effect;
|
|
9
|
+
export const ALICE_CACHED_NAME = "Alice (cached)";
|
|
10
|
+
export const ALICE_RESOLVED_NAME = "Alice (via resolve)";
|
|
11
|
+
export const MULTILINE_TEXT = "line one\nline two";
|
|
12
|
+
export const CAPTION_TEXT = "caption";
|
|
13
|
+
export const FIRST_TEXT = "first";
|
|
14
|
+
export const SECOND_TEXT = "second";
|
|
15
|
+
export const DENIED_LEASE_ID = "lease-den";
|
|
16
|
+
export const TIME_TO_VOTE_TEXT = "Time to vote";
|
|
17
|
+
export const AFTER_MARKER_TEXT = "after marker";
|
|
18
|
+
export const OLD_DISCUSSION_TEXT = "old discussion";
|
|
19
|
+
export const MARKER_LEASE_ID = "lease-marker";
|
|
20
|
+
export const DEVS_GROUP_NAME = "devs";
|
|
21
|
+
export const FIRST_VISIT_TEXT = "first visit";
|
|
22
|
+
export class TestInboundHandlerError extends Data.TaggedError("TestInboundHandlerError") {
|
|
23
|
+
}
|
|
24
|
+
const FALLBACK_RECEIVED_AT = "1970-01-01T00:00:00.000Z";
|
|
25
|
+
const LEASE_MOCK_PREFIX = "lease-mock";
|
|
26
|
+
const DISPATCH_MOCK_PREFIX = "dispatch-mock";
|
|
27
|
+
const legacyAdmissionRequest = (params) => ({
|
|
28
|
+
message: {
|
|
29
|
+
id: params.messageId,
|
|
30
|
+
conversationId: params.conversationId,
|
|
31
|
+
senderId: params.senderAgentId,
|
|
32
|
+
parts: params.parts ?? [],
|
|
33
|
+
createdAt: params.receivedAt ?? FALLBACK_RECEIVED_AT,
|
|
34
|
+
},
|
|
35
|
+
conversationId: params.conversationId,
|
|
36
|
+
senderAgentId: params.senderAgentId,
|
|
37
|
+
attempt: params.attempt ?? 0,
|
|
38
|
+
receivedAt: params.receivedAt ?? FALLBACK_RECEIVED_AT,
|
|
39
|
+
clock: params.clock,
|
|
40
|
+
pending: (params.pending ?? []),
|
|
41
|
+
});
|
|
42
|
+
const grantVerdict = (decision) => ({
|
|
43
|
+
decision: "grant",
|
|
44
|
+
...(decision.leaseId !== undefined ? { leaseId: decision.leaseId } : {}),
|
|
45
|
+
...(decision.leaseTimeoutMs !== undefined
|
|
46
|
+
? { leaseTimeoutMs: decision.leaseTimeoutMs }
|
|
47
|
+
: {}),
|
|
48
|
+
...(decision.dispatchMessageId !== undefined
|
|
49
|
+
? { dispatchMessageId: decision.dispatchMessageId }
|
|
50
|
+
: {}),
|
|
51
|
+
});
|
|
52
|
+
const holdOrDenyVerdict = (decision) => ({
|
|
53
|
+
decision: decision._tag,
|
|
54
|
+
...(decision.reason !== undefined ? { reason: decision.reason } : {}),
|
|
55
|
+
});
|
|
56
|
+
const releaseVerdict = (decision) => {
|
|
57
|
+
if (decision._tag === "grant") {
|
|
58
|
+
return grantVerdict(decision);
|
|
59
|
+
}
|
|
60
|
+
return holdOrDenyVerdict(decision);
|
|
61
|
+
};
|
|
62
|
+
const releaseFrame = (decision, leaseId, dispatchId) => ({
|
|
63
|
+
dispatchId,
|
|
64
|
+
leaseId,
|
|
65
|
+
verdict: releaseVerdict(decision),
|
|
66
|
+
...(decision._tag === "grant" && decision.leaseTimeoutMs !== undefined
|
|
67
|
+
? { leaseTimeoutMs: decision.leaseTimeoutMs }
|
|
68
|
+
: {}),
|
|
69
|
+
});
|
|
70
|
+
const leaseIdForDecision = (decision, counter) => decision._tag === "grant" && decision.leaseId !== undefined
|
|
71
|
+
? decision.leaseId
|
|
72
|
+
: LEASE_MOCK_PREFIX + "-" + counter.toString();
|
|
73
|
+
const dispatchIdForCounter = (counter) => DISPATCH_MOCK_PREFIX + "-" + counter.toString();
|
|
74
|
+
export function installAdmission(fake, decide) {
|
|
75
|
+
let counter = 0;
|
|
76
|
+
fake.service.requestDispatch = (params) => decide(legacyAdmissionRequest(params)).pipe(Effect.map((decision) => {
|
|
77
|
+
counter += 1;
|
|
78
|
+
const leaseId = leaseIdForDecision(decision, counter);
|
|
79
|
+
const dispatchId = dispatchIdForCounter(counter);
|
|
80
|
+
queueMicrotask(() => {
|
|
81
|
+
fake.emit.dispatchRelease(releaseFrame(decision, leaseId, dispatchId));
|
|
82
|
+
});
|
|
83
|
+
return { leaseId, dispatchId };
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
export const agent = testAgentId;
|
|
87
|
+
export const conversation = testConversationId;
|
|
88
|
+
export const message = testMessageId;
|
|
89
|
+
export const participant = (agentLabel) => "agent:" + agent(agentLabel);
|
|
90
|
+
export function createChannelCoreFixture() {
|
|
91
|
+
const fake = createFakeChannelService({ ownAgentId: "agent-self" });
|
|
92
|
+
const inbound = [];
|
|
93
|
+
const core = new MoltZapChannelCore({ service: fake.service });
|
|
94
|
+
core.onInbound((msg) => Effect.sync(() => {
|
|
95
|
+
inbound.push(msg);
|
|
96
|
+
}));
|
|
97
|
+
return { fake, service: fake.service, core, inbound };
|
|
98
|
+
}
|
|
99
|
+
export function customSetup() {
|
|
100
|
+
const fake = createFakeChannelService({ ownAgentId: "agent-self" });
|
|
101
|
+
const received = [];
|
|
102
|
+
const core = new MoltZapChannelCore({ service: fake.service });
|
|
103
|
+
core.onInbound((m) => Effect.sync(() => {
|
|
104
|
+
received.push(m);
|
|
105
|
+
}));
|
|
106
|
+
return { fake, core, received };
|
|
107
|
+
}
|
|
108
|
+
export function forceResolveAgentNamePath(fake) {
|
|
109
|
+
fake.service.getAgentName = () => undefined;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=channel-core-test-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-core-test-support.js","sourceRoot":"","sources":["../src/channel-core-test-support.ts"],"names":[],"mappings":"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"}
|
package/dist/channel-core.d.ts
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
import { Effect } from "effect";
|
|
5
5
|
import type { LogicalClock, Message } from "@moltzap/protocol";
|
|
6
6
|
import type { CrossConversationEntry, CrossConvMessage, ServiceRpcError } from "./service.js";
|
|
7
|
-
import type { WsClientLogger } from "./ws-client.js";
|
|
8
7
|
export interface EnrichedSender {
|
|
9
8
|
id: string;
|
|
10
9
|
name: string;
|
|
@@ -77,7 +76,7 @@ export type DispatchAdmissionDecision = {
|
|
|
77
76
|
};
|
|
78
77
|
/**
|
|
79
78
|
* Server → recipient `dispatch/release` notification payload (the
|
|
80
|
-
* verdict). Mirrors `NotificationParamsOf
|
|
79
|
+
* verdict). Mirrors `NotificationParamsOf<typeof DispatchRelease>` from
|
|
81
80
|
* the protocol, kept structurally typed here so this module does not
|
|
82
81
|
* need a direct protocol descriptor import (the channel core stays
|
|
83
82
|
* descriptor-free; the wire shape is asserted by the service module).
|
|
@@ -115,6 +114,7 @@ export interface ChannelService {
|
|
|
115
114
|
connect(): Effect.Effect<unknown, ServiceRpcError>;
|
|
116
115
|
close(): void;
|
|
117
116
|
send(conversationId: string, text: string, opts?: {
|
|
117
|
+
replyTo?: string;
|
|
118
118
|
dispatchLeaseId?: string;
|
|
119
119
|
}): Effect.Effect<void, ServiceRpcError>;
|
|
120
120
|
isConversationArchived?(conversationId: string): boolean;
|
|
@@ -141,7 +141,7 @@ export interface ChannelService {
|
|
|
141
141
|
* `{leaseId, dispatchId}` ack. The verdict arrives asynchronously
|
|
142
142
|
* via the `dispatchRelease` event.
|
|
143
143
|
*
|
|
144
|
-
* The argument shape mirrors `ParamsOf
|
|
144
|
+
* The argument shape mirrors `ParamsOf<DispatchRequest>` from the
|
|
145
145
|
* protocol (the channel core does not depend on the protocol
|
|
146
146
|
* descriptor, hence the structural shape duplicated here).
|
|
147
147
|
*
|
|
@@ -165,7 +165,6 @@ export interface ChannelService {
|
|
|
165
165
|
}
|
|
166
166
|
export interface ChannelCoreOptions {
|
|
167
167
|
service: ChannelService;
|
|
168
|
-
logger?: WsClientLogger;
|
|
169
168
|
dispatchAdmissionTimeoutMs?: number;
|
|
170
169
|
}
|
|
171
170
|
/**
|
|
@@ -185,7 +184,6 @@ export type InboundHandler<E = unknown> = (msg: EnrichedInboundMessage) => Effec
|
|
|
185
184
|
*/
|
|
186
185
|
export declare class MoltZapChannelCore {
|
|
187
186
|
private readonly service;
|
|
188
|
-
private readonly logger;
|
|
189
187
|
private readonly dispatchAdmissionTimeoutMs;
|
|
190
188
|
private connected;
|
|
191
189
|
private inboundHandler;
|
|
@@ -216,13 +214,21 @@ export declare class MoltZapChannelCore {
|
|
|
216
214
|
private readonly closedConversationIds;
|
|
217
215
|
private readonly logicalClocks;
|
|
218
216
|
private readonly parkedByConversation;
|
|
219
|
-
/**
|
|
220
|
-
*
|
|
217
|
+
/**
|
|
218
|
+
* Inbound messages enqueue synchronously; a single forked consumer fiber
|
|
219
|
+
* serialises delivery so handlers execute one-at-a-time in arrival order.
|
|
220
|
+
*/
|
|
221
221
|
private readonly inboundQueue;
|
|
222
222
|
private readonly consumerFiber;
|
|
223
223
|
private disconnectHandlers;
|
|
224
224
|
private reconnectHandlers;
|
|
225
225
|
constructor(opts: ChannelCoreOptions);
|
|
226
|
+
private registerMessageListener;
|
|
227
|
+
private startConsumerFiber;
|
|
228
|
+
private logInboundFailure;
|
|
229
|
+
private registerConnectionListeners;
|
|
230
|
+
private registerConversationLifecycleListeners;
|
|
231
|
+
private registerDispatchReleaseListener;
|
|
226
232
|
/**
|
|
227
233
|
* Record an incoming `dispatchRelease` frame. If a matching
|
|
228
234
|
* parking Deferred is registered, settle it inline; otherwise
|
|
@@ -282,7 +288,24 @@ export declare class MoltZapChannelCore {
|
|
|
282
288
|
*/
|
|
283
289
|
private awaitDispatchRelease;
|
|
284
290
|
private projectVerdict;
|
|
291
|
+
private projectGrantVerdict;
|
|
292
|
+
private static denyDecision;
|
|
293
|
+
private static holdDecision;
|
|
285
294
|
private dispatchInboundWork;
|
|
295
|
+
private handleDispatchDecision;
|
|
296
|
+
private dispatchGrantedWork;
|
|
297
|
+
private messagesForGrantedDispatch;
|
|
298
|
+
private runGrantedDispatch;
|
|
299
|
+
private dispatchWithLease;
|
|
300
|
+
private static leaseTimeoutMs;
|
|
301
|
+
private handleDispatchFailure;
|
|
302
|
+
private holdDispatchWork;
|
|
303
|
+
private logClosedDispatchDrop;
|
|
304
|
+
private logDispatchTargetUnavailable;
|
|
305
|
+
private logDispatchStart;
|
|
306
|
+
private logDispatchLeaseExpired;
|
|
307
|
+
private logDispatchCompleted;
|
|
308
|
+
private logDeniedDispatch;
|
|
286
309
|
private pendingDispatchSnapshot;
|
|
287
310
|
private takeCoalescedConversationMessages;
|
|
288
311
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-core.d.ts","sourceRoot":"","sources":["../src/channel-core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoC,MAAM,EAAgB,MAAM,QAAQ,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EAChB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"channel-core.d.ts","sourceRoot":"","sources":["../src/channel-core.ts"],"names":[],"mappings":"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"}
|