@moltzap/client 2026.414.0 → 2026.425.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 +28 -15
- package/dist/channel-core.d.ts.map +1 -1
- package/dist/channel-core.js +113 -74
- package/dist/channel-core.js.map +1 -1
- package/dist/channel-core.test.js +126 -34
- package/dist/channel-core.test.js.map +1 -1
- package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts +2 -0
- package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts.map +1 -0
- package/dist/cli/__tests__/cli-multi-agent.int.test.js +26 -0
- package/dist/cli/__tests__/cli-multi-agent.int.test.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +13 -2
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +30 -18
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/apps.d.ts +96 -0
- package/dist/cli/commands/apps.d.ts.map +1 -0
- package/dist/cli/commands/apps.js +193 -0
- package/dist/cli/commands/apps.js.map +1 -0
- package/dist/cli/commands/apps.test.d.ts +2 -0
- package/dist/cli/commands/apps.test.d.ts.map +1 -0
- package/dist/cli/commands/apps.test.js +220 -0
- package/dist/cli/commands/apps.test.js.map +1 -0
- package/dist/cli/commands/contacts.d.ts +18 -2
- package/dist/cli/commands/contacts.d.ts.map +1 -1
- package/dist/cli/commands/contacts.js +44 -52
- package/dist/cli/commands/contacts.js.map +1 -1
- package/dist/cli/commands/conversations-v2.test.d.ts +2 -0
- package/dist/cli/commands/conversations-v2.test.d.ts.map +1 -0
- package/dist/cli/commands/conversations-v2.test.js +92 -0
- package/dist/cli/commands/conversations-v2.test.js.map +1 -0
- package/dist/cli/commands/conversations.d.ts +73 -3
- package/dist/cli/commands/conversations.d.ts.map +1 -1
- package/dist/cli/commands/conversations.js +157 -108
- package/dist/cli/commands/conversations.js.map +1 -1
- package/dist/cli/commands/invite.d.ts +6 -2
- package/dist/cli/commands/invite.d.ts.map +1 -1
- package/dist/cli/commands/invite.js +8 -6
- package/dist/cli/commands/invite.js.map +1 -1
- package/dist/cli/commands/messages.d.ts +48 -0
- package/dist/cli/commands/messages.d.ts.map +1 -0
- package/dist/cli/commands/messages.js +68 -0
- package/dist/cli/commands/messages.js.map +1 -0
- package/dist/cli/commands/messages.test.d.ts +2 -0
- package/dist/cli/commands/messages.test.d.ts.map +1 -0
- package/dist/cli/commands/messages.test.js +73 -0
- package/dist/cli/commands/messages.test.js.map +1 -0
- package/dist/cli/commands/permissions.d.ts +66 -0
- package/dist/cli/commands/permissions.d.ts.map +1 -0
- package/dist/cli/commands/permissions.js +101 -0
- package/dist/cli/commands/permissions.js.map +1 -0
- package/dist/cli/commands/permissions.test.d.ts +2 -0
- package/dist/cli/commands/permissions.test.d.ts.map +1 -0
- package/dist/cli/commands/permissions.test.js +126 -0
- package/dist/cli/commands/permissions.test.js.map +1 -0
- package/dist/cli/commands/ping.d.ts +6 -2
- package/dist/cli/commands/ping.d.ts.map +1 -1
- package/dist/cli/commands/ping.js +21 -20
- package/dist/cli/commands/ping.js.map +1 -1
- package/dist/cli/commands/presence.d.ts +10 -2
- package/dist/cli/commands/presence.d.ts.map +1 -1
- package/dist/cli/commands/presence.js +27 -15
- package/dist/cli/commands/presence.js.map +1 -1
- package/dist/cli/commands/register.d.ts +24 -2
- package/dist/cli/commands/register.d.ts.map +1 -1
- package/dist/cli/commands/register.js +123 -47
- package/dist/cli/commands/register.js.map +1 -1
- package/dist/cli/commands/register.test.js +45 -27
- package/dist/cli/commands/register.test.js.map +1 -1
- package/dist/cli/commands/send.d.ts +43 -2
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +55 -13
- package/dist/cli/commands/send.js.map +1 -1
- package/dist/cli/commands/send.test.js +20 -19
- package/dist/cli/commands/send.test.js.map +1 -1
- package/dist/cli/commands/status.d.ts +6 -2
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +16 -10
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/whoami.d.ts +7 -2
- package/dist/cli/commands/whoami.d.ts.map +1 -1
- package/dist/cli/commands/whoami.js +13 -7
- package/dist/cli/commands/whoami.js.map +1 -1
- package/dist/cli/config.d.ts +24 -8
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +65 -39
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/config.test.js +12 -10
- package/dist/cli/config.test.js.map +1 -1
- package/dist/cli/http-client.d.ts +6 -2
- package/dist/cli/http-client.d.ts.map +1 -1
- package/dist/cli/http-client.js +25 -24
- package/dist/cli/http-client.js.map +1 -1
- package/dist/cli/index.d.ts +16 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +160 -27
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/profile.d.ts +134 -0
- package/dist/cli/profile.d.ts.map +1 -0
- package/dist/cli/profile.js +217 -0
- package/dist/cli/profile.js.map +1 -0
- package/dist/cli/profile.test.d.ts +2 -0
- package/dist/cli/profile.test.d.ts.map +1 -0
- package/dist/cli/profile.test.js +263 -0
- package/dist/cli/profile.test.js.map +1 -0
- package/dist/cli/runtime.d.ts +34 -0
- package/dist/cli/runtime.d.ts.map +1 -0
- package/dist/cli/runtime.js +94 -0
- package/dist/cli/runtime.js.map +1 -0
- package/dist/cli/socket-client.d.ts +15 -12
- package/dist/cli/socket-client.d.ts.map +1 -1
- package/dist/cli/socket-client.js +72 -75
- package/dist/cli/socket-client.js.map +1 -1
- package/dist/cli/transport.d.ts +181 -0
- package/dist/cli/transport.d.ts.map +1 -0
- package/dist/cli/transport.js +324 -0
- package/dist/cli/transport.js.map +1 -0
- package/dist/cli/transport.test.d.ts +2 -0
- package/dist/cli/transport.test.d.ts.map +1 -0
- package/dist/cli/transport.test.js +197 -0
- package/dist/cli/transport.test.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/close-info.d.ts +94 -0
- package/dist/runtime/close-info.d.ts.map +1 -0
- package/dist/runtime/close-info.js +109 -0
- package/dist/runtime/close-info.js.map +1 -0
- package/dist/runtime/close-info.test.d.ts +2 -0
- package/dist/runtime/close-info.test.d.ts.map +1 -0
- package/dist/runtime/close-info.test.js +102 -0
- package/dist/runtime/close-info.test.js.map +1 -0
- package/dist/runtime/errors.d.ts +47 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/errors.js +20 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/errors.test.d.ts +2 -0
- package/dist/runtime/errors.test.d.ts.map +1 -0
- package/dist/runtime/errors.test.js +66 -0
- package/dist/runtime/errors.test.js.map +1 -0
- package/dist/runtime/frame.d.ts +25 -0
- package/dist/runtime/frame.d.ts.map +1 -0
- package/dist/runtime/frame.js +106 -0
- package/dist/runtime/frame.js.map +1 -0
- package/dist/runtime/frame.test.d.ts +2 -0
- package/dist/runtime/frame.test.d.ts.map +1 -0
- package/dist/runtime/frame.test.js +32 -0
- package/dist/runtime/frame.test.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +3 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/refs.d.ts +10 -0
- package/dist/runtime/refs.d.ts.map +1 -0
- package/dist/runtime/refs.js +10 -0
- package/dist/runtime/refs.js.map +1 -0
- package/dist/runtime/runtime.test.d.ts +2 -0
- package/dist/runtime/runtime.test.d.ts.map +1 -0
- package/dist/runtime/runtime.test.js +29 -0
- package/dist/runtime/runtime.test.js.map +1 -0
- package/dist/runtime/subscribers.d.ts +157 -0
- package/dist/runtime/subscribers.d.ts.map +1 -0
- package/dist/runtime/subscribers.js +131 -0
- package/dist/runtime/subscribers.js.map +1 -0
- package/dist/runtime/subscribers.test.d.ts +2 -0
- package/dist/runtime/subscribers.test.d.ts.map +1 -0
- package/dist/runtime/subscribers.test.js +155 -0
- package/dist/runtime/subscribers.test.js.map +1 -0
- package/dist/service.d.ts +68 -17
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +461 -307
- package/dist/service.js.map +1 -1
- package/dist/service.test.js +266 -77
- package/dist/service.test.js.map +1 -1
- package/dist/test/index.d.ts +33 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +44 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test-utils/channel-service-fixture.d.ts +2 -1
- package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
- package/dist/test-utils/channel-service-fixture.js +31 -11
- package/dist/test-utils/channel-service-fixture.js.map +1 -1
- package/dist/test-utils/conformance-adapter.d.ts +50 -0
- package/dist/test-utils/conformance-adapter.d.ts.map +1 -0
- package/dist/test-utils/conformance-adapter.js +206 -0
- package/dist/test-utils/conformance-adapter.js.map +1 -0
- package/dist/test-utils/fake-service.d.ts +85 -0
- package/dist/test-utils/fake-service.d.ts.map +1 -0
- package/dist/test-utils/fake-service.js +103 -0
- package/dist/test-utils/fake-service.js.map +1 -0
- package/dist/test-utils/index.d.ts +2 -0
- package/dist/test-utils/index.d.ts.map +1 -1
- package/dist/test-utils/index.js +3 -2
- package/dist/test-utils/index.js.map +1 -1
- package/dist/ws-client.d.ts +157 -18
- package/dist/ws-client.d.ts.map +1 -1
- package/dist/ws-client.js +432 -94
- package/dist/ws-client.js.map +1 -1
- package/dist/ws-client.test.d.ts +2 -0
- package/dist/ws-client.test.d.ts.map +1 -0
- package/dist/ws-client.test.js +672 -0
- package/dist/ws-client.test.js.map +1 -0
- package/package.json +23 -14
- package/LICENSE +0 -21
- package/dist/__tests__/service.integration.test.d.ts +0 -2
- package/dist/__tests__/service.integration.test.d.ts.map +0 -1
- package/dist/__tests__/service.integration.test.js +0 -1087
- package/dist/__tests__/service.integration.test.js.map +0 -1
- package/dist/cli/commands/delete.d.ts +0 -3
- package/dist/cli/commands/delete.d.ts.map +0 -1
- package/dist/cli/commands/delete.js +0 -10
- package/dist/cli/commands/delete.js.map +0 -1
- package/dist/cli/commands/react.d.ts +0 -3
- package/dist/cli/commands/react.d.ts.map +0 -1
- package/dist/cli/commands/react.js +0 -18
- package/dist/cli/commands/react.js.map +0 -1
package/dist/channel-core.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared message-enrichment helper for MoltZap channel adapters.
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
5
|
-
import type {
|
|
4
|
+
import { Effect } from "effect";
|
|
5
|
+
import type { Message, PermissionsRequiredEvent } from "@moltzap/protocol";
|
|
6
|
+
import type { CrossConversationEntry, CrossConvMessage, ServiceRpcError } from "./service.js";
|
|
6
7
|
import type { WsClientLogger } from "./ws-client.js";
|
|
7
8
|
export interface EnrichedSender {
|
|
8
|
-
type: "agent" | "user";
|
|
9
9
|
id: string;
|
|
10
10
|
name: string;
|
|
11
11
|
}
|
|
@@ -38,16 +38,17 @@ export interface ChannelService {
|
|
|
38
38
|
on(event: "message", handler: (msg: Message) => void): void;
|
|
39
39
|
on(event: "disconnect", handler: () => void): void;
|
|
40
40
|
on(event: "reconnect", handler: () => void): void;
|
|
41
|
-
|
|
41
|
+
on(event: "permissionRequired", handler: (data: PermissionsRequiredEvent) => void): void;
|
|
42
|
+
connect(): Effect.Effect<unknown, ServiceRpcError>;
|
|
42
43
|
close(): void;
|
|
43
|
-
send(conversationId: string, text: string):
|
|
44
|
+
send(conversationId: string, text: string): Effect.Effect<void, ServiceRpcError>;
|
|
44
45
|
getConversation(convId: string): {
|
|
45
46
|
type: string;
|
|
46
47
|
name?: string;
|
|
47
48
|
participants: string[];
|
|
48
49
|
} | undefined;
|
|
49
50
|
getAgentName(agentId: string): string | undefined;
|
|
50
|
-
resolveAgentName(agentId: string):
|
|
51
|
+
resolveAgentName(agentId: string): Effect.Effect<string, never>;
|
|
51
52
|
peekContextEntries(currentConvId: string, opts?: {
|
|
52
53
|
maxConversations?: number;
|
|
53
54
|
maxMessagesPerConv?: number;
|
|
@@ -64,7 +65,13 @@ export interface ChannelCoreOptions {
|
|
|
64
65
|
service: ChannelService;
|
|
65
66
|
logger?: WsClientLogger;
|
|
66
67
|
}
|
|
67
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Handler invoked for every enriched inbound message. Returns an Effect so the
|
|
70
|
+
* error channel is part of the type — callers fail with a tagged error and the
|
|
71
|
+
* consumer fiber logs it instead of dropping it on the floor like a Promise
|
|
72
|
+
* rejection would.
|
|
73
|
+
*/
|
|
74
|
+
export type InboundHandler<E = unknown> = (msg: EnrichedInboundMessage) => Effect.Effect<void, E>;
|
|
68
75
|
/**
|
|
69
76
|
* Wraps a MoltZapService with message enrichment, dispatch-chain ordering,
|
|
70
77
|
* and a send helper.
|
|
@@ -78,26 +85,32 @@ export declare class MoltZapChannelCore {
|
|
|
78
85
|
private readonly logger;
|
|
79
86
|
private connected;
|
|
80
87
|
private inboundHandler;
|
|
81
|
-
|
|
88
|
+
/** Inbound messages enqueue synchronously; a single forked consumer fiber
|
|
89
|
+
* serialises delivery so handlers execute one-at-a-time in arrival order. */
|
|
90
|
+
private readonly inboundQueue;
|
|
91
|
+
private readonly consumerFiber;
|
|
82
92
|
private disconnectHandlers;
|
|
83
93
|
private reconnectHandlers;
|
|
94
|
+
private permissionRequiredHandler;
|
|
84
95
|
constructor(opts: ChannelCoreOptions);
|
|
85
96
|
/** Replaces any previous handler. */
|
|
86
|
-
onInbound(handler: InboundHandler): void;
|
|
97
|
+
onInbound<E>(handler: InboundHandler<E>): void;
|
|
87
98
|
onDisconnect(handler: () => void): void;
|
|
88
99
|
onReconnect(handler: () => void): void;
|
|
89
|
-
|
|
90
|
-
|
|
100
|
+
onPermissionRequired(handler: (data: PermissionsRequiredEvent) => void): void;
|
|
101
|
+
private fanout;
|
|
102
|
+
connect(): Effect.Effect<void, ServiceRpcError>;
|
|
103
|
+
disconnect(): Effect.Effect<void, never>;
|
|
91
104
|
isConnected(): boolean;
|
|
92
|
-
sendReply(conversationId: string, text: string):
|
|
105
|
+
sendReply(conversationId: string, text: string): Effect.Effect<void, ServiceRpcError>;
|
|
93
106
|
/**
|
|
94
107
|
* Stateless enrichment helper. Falls back to `sender.id` if
|
|
95
108
|
* `resolveAgentName` throws (e.g. service not yet connected).
|
|
96
109
|
*/
|
|
97
|
-
static enrichMessage(service: ChannelService, message: Message):
|
|
110
|
+
static enrichMessage(service: ChannelService, message: Message): Effect.Effect<{
|
|
98
111
|
enriched: EnrichedInboundMessage;
|
|
99
112
|
commitContext?: () => void;
|
|
100
|
-
}>;
|
|
101
|
-
private
|
|
113
|
+
}, never>;
|
|
114
|
+
private dispatchInboundEffect;
|
|
102
115
|
}
|
|
103
116
|
//# sourceMappingURL=channel-core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-core.d.ts","sourceRoot":"","sources":["../src/channel-core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"channel-core.d.ts","sourceRoot":"","sources":["../src/channel-core.ts"],"names":[],"mappings":"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"}
|
package/dist/channel-core.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared message-enrichment helper for MoltZap channel adapters.
|
|
3
3
|
*/
|
|
4
|
+
import { Cause, Effect, Fiber, Queue } from "effect";
|
|
4
5
|
const noopLogger = {
|
|
5
6
|
info: () => { },
|
|
6
7
|
warn: () => { },
|
|
@@ -25,28 +26,37 @@ export class MoltZapChannelCore {
|
|
|
25
26
|
logger;
|
|
26
27
|
connected = false;
|
|
27
28
|
inboundHandler = null;
|
|
28
|
-
|
|
29
|
+
/** Inbound messages enqueue synchronously; a single forked consumer fiber
|
|
30
|
+
* serialises delivery so handlers execute one-at-a-time in arrival order. */
|
|
31
|
+
inboundQueue = Effect.runSync(Queue.unbounded());
|
|
32
|
+
consumerFiber;
|
|
29
33
|
disconnectHandlers = [];
|
|
30
34
|
reconnectHandlers = [];
|
|
35
|
+
permissionRequiredHandler = null;
|
|
31
36
|
constructor(opts) {
|
|
32
37
|
this.service = opts.service;
|
|
33
38
|
this.logger = opts.logger ?? noopLogger;
|
|
34
39
|
this.service.on("message", (message) => {
|
|
35
|
-
this.
|
|
36
|
-
.then(() => this.handleInbound(message))
|
|
37
|
-
.catch((err) => {
|
|
38
|
-
this.logger.error({ messageId: message.id, err }, "MoltZapChannelCore: inbound handler threw");
|
|
39
|
-
});
|
|
40
|
+
Queue.unsafeOffer(this.inboundQueue, message);
|
|
40
41
|
});
|
|
42
|
+
// Both typed failures (Effect.fail) and defects (sync throws inside the
|
|
43
|
+
// handler's Effect) are caught — Cause.squash collapses either into a
|
|
44
|
+
// single value for the logger so the consumer fiber survives a misbehaving
|
|
45
|
+
// handler in either mode.
|
|
46
|
+
const consumer = Effect.forever(Queue.take(this.inboundQueue).pipe(Effect.flatMap((message) => this.dispatchInboundEffect(message).pipe(Effect.catchAllCause((cause) => Effect.sync(() => this.logger.error({ messageId: message.id, err: Cause.squash(cause) }, "MoltZapChannelCore: inbound handler failed")))))));
|
|
47
|
+
this.consumerFiber = Effect.runFork(consumer);
|
|
41
48
|
this.service.on("disconnect", () => {
|
|
42
49
|
this.connected = false;
|
|
43
|
-
|
|
44
|
-
h();
|
|
50
|
+
this.fanout(this.disconnectHandlers, "disconnect");
|
|
45
51
|
});
|
|
46
52
|
this.service.on("reconnect", () => {
|
|
47
53
|
this.connected = true;
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
this.fanout(this.reconnectHandlers, "reconnect");
|
|
55
|
+
});
|
|
56
|
+
this.service.on("permissionRequired", (data) => {
|
|
57
|
+
if (this.permissionRequiredHandler) {
|
|
58
|
+
this.permissionRequiredHandler(data);
|
|
59
|
+
}
|
|
50
60
|
});
|
|
51
61
|
}
|
|
52
62
|
/** Replaces any previous handler. */
|
|
@@ -59,83 +69,112 @@ export class MoltZapChannelCore {
|
|
|
59
69
|
onReconnect(handler) {
|
|
60
70
|
this.reconnectHandlers.push(handler);
|
|
61
71
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
72
|
+
onPermissionRequired(handler) {
|
|
73
|
+
this.permissionRequiredHandler = handler;
|
|
74
|
+
}
|
|
75
|
+
fanout(handlers, label) {
|
|
76
|
+
for (const h of handlers) {
|
|
77
|
+
try {
|
|
78
|
+
h();
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
this.logger.error({ err, label }, `MoltZapChannelCore: ${label} handler threw`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
connect() {
|
|
86
|
+
return this.service.connect().pipe(Effect.tap(() => Effect.sync(() => {
|
|
87
|
+
this.connected = true;
|
|
88
|
+
})), Effect.asVoid);
|
|
65
89
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
90
|
+
disconnect() {
|
|
91
|
+
return Effect.gen(this, function* () {
|
|
92
|
+
this.service.close();
|
|
93
|
+
this.connected = false;
|
|
94
|
+
// Interrupt the consumer fiber so any queued inbound messages are
|
|
95
|
+
// dropped rather than delivered after the channel is torn down.
|
|
96
|
+
yield* Fiber.interrupt(this.consumerFiber);
|
|
97
|
+
});
|
|
69
98
|
}
|
|
70
99
|
isConnected() {
|
|
71
100
|
return this.connected;
|
|
72
101
|
}
|
|
73
|
-
|
|
74
|
-
|
|
102
|
+
sendReply(conversationId, text) {
|
|
103
|
+
return this.service.send(conversationId, text);
|
|
75
104
|
}
|
|
76
105
|
/**
|
|
77
106
|
* Stateless enrichment helper. Falls back to `sender.id` if
|
|
78
107
|
* `resolveAgentName` throws (e.g. service not yet connected).
|
|
79
108
|
*/
|
|
80
|
-
static
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
109
|
+
static enrichMessage(service, message) {
|
|
110
|
+
return Effect.gen(function* () {
|
|
111
|
+
const convMeta = service.getConversation(message.conversationId);
|
|
112
|
+
const cachedName = service.getAgentName(message.senderId);
|
|
113
|
+
// `resolveAgentName` has `never` in the error channel — it catches its
|
|
114
|
+
// own transport failures and falls back to `senderId` internally, so
|
|
115
|
+
// no explicit `catchAll` is needed here.
|
|
116
|
+
const senderName = cachedName !== undefined
|
|
117
|
+
? cachedName
|
|
118
|
+
: yield* service.resolveAgentName(message.senderId);
|
|
119
|
+
const text = extractTextContent(message.parts);
|
|
120
|
+
const isFromMe = service.ownAgentId !== undefined &&
|
|
121
|
+
message.senderId === service.ownAgentId;
|
|
122
|
+
const conversationMeta = convMeta
|
|
123
|
+
? {
|
|
124
|
+
type: convMeta.type === "group" ? "group" : "dm",
|
|
125
|
+
name: convMeta.name,
|
|
126
|
+
participants: convMeta.participants,
|
|
127
|
+
}
|
|
128
|
+
: undefined;
|
|
129
|
+
const contextBlocks = {};
|
|
130
|
+
if (conversationMeta?.type === "group") {
|
|
131
|
+
contextBlocks.groupMetadata = conversationMeta;
|
|
94
132
|
}
|
|
95
|
-
:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
133
|
+
const { entries, commit: commitLegacy } = service.peekContextEntries(message.conversationId);
|
|
134
|
+
if (entries.length > 0) {
|
|
135
|
+
contextBlocks.crossConversation = entries;
|
|
136
|
+
}
|
|
137
|
+
const { messages: fullMessages, commit: commitFull } = service.peekFullMessages(message.conversationId);
|
|
138
|
+
if (fullMessages.length > 0) {
|
|
139
|
+
contextBlocks.crossConversationMessages = fullMessages;
|
|
140
|
+
}
|
|
141
|
+
const hasContext = entries.length > 0 || fullMessages.length > 0;
|
|
142
|
+
return {
|
|
143
|
+
enriched: {
|
|
144
|
+
id: message.id,
|
|
145
|
+
conversationId: message.conversationId,
|
|
146
|
+
sender: {
|
|
147
|
+
id: message.senderId,
|
|
148
|
+
name: senderName,
|
|
149
|
+
},
|
|
150
|
+
text,
|
|
151
|
+
isFromMe,
|
|
152
|
+
createdAt: message.createdAt,
|
|
153
|
+
replyToId: message.replyToId,
|
|
154
|
+
conversationMeta,
|
|
155
|
+
contextBlocks,
|
|
117
156
|
},
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
? () => {
|
|
127
|
-
commitLegacy();
|
|
128
|
-
commitFull();
|
|
129
|
-
}
|
|
130
|
-
: undefined,
|
|
131
|
-
};
|
|
157
|
+
commitContext: hasContext
|
|
158
|
+
? () => {
|
|
159
|
+
commitLegacy();
|
|
160
|
+
commitFull();
|
|
161
|
+
}
|
|
162
|
+
: undefined,
|
|
163
|
+
};
|
|
164
|
+
});
|
|
132
165
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
166
|
+
dispatchInboundEffect(message) {
|
|
167
|
+
return Effect.gen(this, function* () {
|
|
168
|
+
if (!this.inboundHandler)
|
|
169
|
+
return;
|
|
170
|
+
const { enriched, commitContext } = yield* MoltZapChannelCore.enrichMessage(this.service, message);
|
|
171
|
+
// The handler is user code returning an Effect — yield it directly so
|
|
172
|
+
// its typed error channel propagates to the consumer fiber, which logs
|
|
173
|
+
// and continues. We await it inline to preserve arrival-order delivery.
|
|
174
|
+
yield* this.inboundHandler(enriched);
|
|
175
|
+
if (commitContext)
|
|
176
|
+
commitContext();
|
|
177
|
+
});
|
|
139
178
|
}
|
|
140
179
|
}
|
|
141
180
|
//# sourceMappingURL=channel-core.js.map
|
package/dist/channel-core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-core.js","sourceRoot":"","sources":["../src/channel-core.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"channel-core.js","sourceRoot":"","sources":["../src/channel-core.ts"],"names":[],"mappings":"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"}
|