@moltzap/client 2026.803.0 → 2026.805.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/channel-base/index.d.ts +0 -2
  2. package/dist/channel-base/index.d.ts.map +1 -1
  3. package/dist/channel-base/index.js +0 -2
  4. package/dist/channel-base/index.js.map +1 -1
  5. package/dist/channel-core.d.ts +45 -19
  6. package/dist/channel-core.d.ts.map +1 -1
  7. package/dist/channel-core.js +45 -18
  8. package/dist/channel-core.js.map +1 -1
  9. package/dist/harness/client-runtime.d.ts +24 -0
  10. package/dist/harness/client-runtime.d.ts.map +1 -0
  11. package/dist/harness/client-runtime.js +107 -0
  12. package/dist/harness/client-runtime.js.map +1 -0
  13. package/dist/harness/index.d.ts +5 -0
  14. package/dist/harness/index.d.ts.map +1 -0
  15. package/dist/harness/index.js +5 -0
  16. package/dist/harness/index.js.map +1 -0
  17. package/dist/harness/runtime.d.ts +149 -0
  18. package/dist/harness/runtime.d.ts.map +1 -0
  19. package/dist/harness/runtime.js +68 -0
  20. package/dist/harness/runtime.js.map +1 -0
  21. package/dist/harness-client.d.ts +43 -0
  22. package/dist/harness-client.d.ts.map +1 -0
  23. package/dist/harness-client.js +21 -0
  24. package/dist/harness-client.js.map +1 -0
  25. package/dist/harness-mcp-server.d.ts.map +1 -1
  26. package/dist/harness-mcp-server.js +107 -17
  27. package/dist/harness-mcp-server.js.map +1 -1
  28. package/dist/harness-mcp-subscription.d.ts +21 -0
  29. package/dist/harness-mcp-subscription.d.ts.map +1 -0
  30. package/dist/harness-mcp-subscription.js +324 -0
  31. package/dist/harness-mcp-subscription.js.map +1 -0
  32. package/dist/harness-mcp-wire.d.ts +9 -2
  33. package/dist/harness-mcp-wire.d.ts.map +1 -1
  34. package/dist/harness-mcp-wire.js +41 -10
  35. package/dist/harness-mcp-wire.js.map +1 -1
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +2 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/moltzapd.d.ts +2 -1
  41. package/dist/moltzapd.d.ts.map +1 -1
  42. package/dist/moltzapd.js +19 -5
  43. package/dist/moltzapd.js.map +1 -1
  44. package/dist/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +8 -4
  46. package/dist/channel-base/reply-guard.d.ts +0 -52
  47. package/dist/channel-base/reply-guard.d.ts.map +0 -1
  48. package/dist/channel-base/reply-guard.js +0 -78
  49. package/dist/channel-base/reply-guard.js.map +0 -1
@@ -0,0 +1,324 @@
1
+ /* eslint-disable agent-code-guard/async-keyword, agent-code-guard/promise-type, @typescript-eslint/no-invalid-void-type -- The official MCP handler and retained POST response stream expose Promise-native lifecycle contracts. */
2
+ import { CLIENT_CAPABILITIES_META_KEY, MissingRequiredClientCapabilityError, SERVER_INFO_META_KEY, SUBSCRIPTION_ID_META_KEY, classifyInboundRequest, isJsonContentType, } from "@modelcontextprotocol/server";
3
+ import { HARNESS_EVENTS_EXTENSION, HARNESS_TURN_READY_FILTER, HARNESS_TURN_READY_NOTIFICATION, } from "./harness/index.js";
4
+ // The SDK remains authoritative for the MCP server. Its public event publisher
5
+ // has a closed event union, so this adapter owns only MoltZap's exact
6
+ // turn-ready listen filter and notification. Every other request is delegated
7
+ // unchanged.
8
+ const SUBSCRIPTIONS_LISTEN_METHOD = "subscriptions/listen";
9
+ const SUBSCRIPTIONS_ACKNOWLEDGED_NOTIFICATION = "notifications/subscriptions/acknowledged";
10
+ const JSON_RPC_VERSION = "2.0";
11
+ const MODERN_PROTOCOL_VERSION = "2026-07-28";
12
+ const INTERNAL_ERROR = -32603;
13
+ const SUBSCRIPTION_IN_USE = -32000;
14
+ const BAD_REQUEST_STATUS = 400;
15
+ const CONFLICT_STATUS = 409;
16
+ const INTERNAL_ERROR_STATUS = 500;
17
+ const OK_STATUS = 200;
18
+ const isJsonObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
19
+ const jsonRpcError = ({ status, id, code, message, data, }) => Response.json({
20
+ jsonrpc: JSON_RPC_VERSION,
21
+ error: {
22
+ code,
23
+ message,
24
+ ...(data === undefined ? {} : { data }),
25
+ },
26
+ id,
27
+ }, { status });
28
+ // #ignore-sloppy-code-next-line[async-keyword]: The official handler consumes a Promise-returning Fetch boundary.
29
+ const readRequestBody = async (request, options) => {
30
+ if (options?.parsedBody !== undefined) {
31
+ return options.parsedBody;
32
+ }
33
+ return await request
34
+ .clone()
35
+ .json()
36
+ .catch(() => undefined);
37
+ };
38
+ const modernListenMessage = (request, body) => {
39
+ const outcome = classifyInboundRequest({
40
+ httpMethod: request.method.toUpperCase(),
41
+ protocolVersionHeader: request.headers.get("mcp-protocol-version") ?? undefined,
42
+ mcpMethodHeader: request.headers.get("mcp-method") ?? undefined,
43
+ mcpNameHeader: request.headers.get("mcp-name") ?? undefined,
44
+ body,
45
+ });
46
+ if (outcome.kind !== "modern" || outcome.messageKind !== "request") {
47
+ return undefined;
48
+ }
49
+ if (outcome.classification.revision !== MODERN_PROTOCOL_VERSION ||
50
+ outcome.message.method !== SUBSCRIPTIONS_LISTEN_METHOD) {
51
+ return undefined;
52
+ }
53
+ return outcome.message;
54
+ };
55
+ const requiredCapabilityDeclared = (params) => {
56
+ const meta = params._meta;
57
+ if (!isJsonObject(meta)) {
58
+ return false;
59
+ }
60
+ const capabilities = meta[CLIENT_CAPABILITIES_META_KEY];
61
+ if (!isJsonObject(capabilities) || !isJsonObject(capabilities.extensions)) {
62
+ return false;
63
+ }
64
+ return Object.hasOwn(capabilities.extensions, HARNESS_EVENTS_EXTENSION);
65
+ };
66
+ const customListenRequest = (request, body) => {
67
+ const message = modernListenMessage(request, body);
68
+ if (message === undefined || !isJsonObject(message.params)) {
69
+ return undefined;
70
+ }
71
+ const notifications = message.params.notifications;
72
+ const notificationKeys = isJsonObject(notifications)
73
+ ? Object.keys(notifications)
74
+ : [];
75
+ if (!isJsonObject(notifications) ||
76
+ notificationKeys.length !== 1 ||
77
+ notificationKeys[0] !== HARNESS_TURN_READY_FILTER ||
78
+ notifications[HARNESS_TURN_READY_FILTER] !== true) {
79
+ return undefined;
80
+ }
81
+ return {
82
+ id: message.id,
83
+ hasRequiredCapability: requiredCapabilityDeclared(message.params),
84
+ };
85
+ };
86
+ const shouldInspect = (request) => request.method.toUpperCase() === "POST" &&
87
+ isJsonContentType(request.headers.get("content-type")) &&
88
+ request.headers.get("mcp-method") === SUBSCRIPTIONS_LISTEN_METHOD;
89
+ class HarnessMcpSubscriptionState {
90
+ delegate;
91
+ implementation;
92
+ onerror;
93
+ encoder = new TextEncoder();
94
+ active;
95
+ closed = false;
96
+ closePromise; // #ignore-sloppy-code[promise-type]: McpHttpHandler.close is Promise-native.
97
+ constructor(options) {
98
+ this.delegate = options.delegate;
99
+ this.implementation = options.implementation;
100
+ this.onerror = options.onerror;
101
+ }
102
+ // #ignore-sloppy-code-next-line[async-keyword]: McpHttpHandler.fetch is Promise-native.
103
+ fetch = async (request, options) => {
104
+ if (this.closed || !shouldInspect(request)) {
105
+ return options === undefined
106
+ ? await this.delegate.fetch(request)
107
+ : await this.delegate.fetch(request, options);
108
+ }
109
+ const body = options === undefined
110
+ ? await readRequestBody(request)
111
+ : await readRequestBody(request, options);
112
+ const listenRequest = customListenRequest(request, body);
113
+ if (this.closed || listenRequest === undefined) {
114
+ return options === undefined
115
+ ? await this.delegate.fetch(request)
116
+ : await this.delegate.fetch(request, options);
117
+ }
118
+ return this.serve(request, listenRequest);
119
+ };
120
+ publish = (payload) => {
121
+ const subscription = this.active;
122
+ if (subscription === undefined || subscription.closed) {
123
+ return false;
124
+ }
125
+ const published = this.enqueueMessage(subscription, {
126
+ jsonrpc: JSON_RPC_VERSION,
127
+ method: HARNESS_TURN_READY_NOTIFICATION,
128
+ params: {
129
+ ...payload,
130
+ _meta: { [SUBSCRIPTION_ID_META_KEY]: subscription.id },
131
+ },
132
+ });
133
+ if (!published) {
134
+ this.teardown(subscription, false);
135
+ }
136
+ return published;
137
+ };
138
+ // #ignore-sloppy-code-next-line[promise-type]: McpHttpHandler.close is Promise-native.
139
+ close = () => {
140
+ if (this.closePromise !== undefined) {
141
+ return this.closePromise;
142
+ }
143
+ this.closed = true;
144
+ if (this.active !== undefined) {
145
+ this.teardown(this.active, true);
146
+ }
147
+ this.closePromise = this.delegate.close();
148
+ return this.closePromise;
149
+ };
150
+ asHandler() {
151
+ return {
152
+ fetch: this.fetch,
153
+ close: this.close,
154
+ publish: this.publish,
155
+ notify: this.delegate.notify,
156
+ bus: this.delegate.bus,
157
+ };
158
+ }
159
+ reportError(error) {
160
+ if (this.onerror === undefined) {
161
+ return;
162
+ }
163
+ try {
164
+ this.onerror(error instanceof Error ? error : new Error(String(error)));
165
+ }
166
+ catch (reportingError) {
167
+ console.error("Harness MCP subscription error reporter failed", reportingError);
168
+ }
169
+ }
170
+ enqueueMessage(subscription, message) {
171
+ if (subscription.closed || subscription.controller === undefined) {
172
+ return false;
173
+ }
174
+ try {
175
+ const frame = `data: ${JSON.stringify(message)}\n\n`;
176
+ subscription.controller.enqueue(this.encoder.encode(frame));
177
+ return true;
178
+ }
179
+ catch (error) {
180
+ this.reportError(error);
181
+ return false;
182
+ }
183
+ }
184
+ teardown(subscription, graceful) {
185
+ if (subscription.closed) {
186
+ return;
187
+ }
188
+ if (graceful) {
189
+ this.enqueueMessage(subscription, this.completeMessage(subscription.id));
190
+ }
191
+ subscription.closed = true;
192
+ subscription.abortCleanup?.();
193
+ if (this.active === subscription) {
194
+ this.active = undefined;
195
+ }
196
+ try {
197
+ subscription.controller?.close();
198
+ }
199
+ catch (error) {
200
+ this.reportError(error);
201
+ }
202
+ }
203
+ completeMessage(id) {
204
+ return {
205
+ jsonrpc: JSON_RPC_VERSION,
206
+ id,
207
+ result: {
208
+ resultType: "complete",
209
+ _meta: {
210
+ [SUBSCRIPTION_ID_META_KEY]: id,
211
+ [SERVER_INFO_META_KEY]: this.implementation,
212
+ },
213
+ },
214
+ };
215
+ }
216
+ serve(request, listenRequest) {
217
+ const refusal = this.admissionRefusal(listenRequest);
218
+ if (refusal !== undefined) {
219
+ return refusal;
220
+ }
221
+ const subscription = {
222
+ id: listenRequest.id,
223
+ closed: false,
224
+ };
225
+ this.active = subscription;
226
+ const readable = this.makeReadable(request, subscription);
227
+ if (readable === undefined) {
228
+ return jsonRpcError({
229
+ status: INTERNAL_ERROR_STATUS,
230
+ id: listenRequest.id,
231
+ code: INTERNAL_ERROR,
232
+ message: "Internal server error",
233
+ });
234
+ }
235
+ return new Response(readable, {
236
+ status: OK_STATUS,
237
+ headers: {
238
+ "cache-control": "no-cache",
239
+ connection: "keep-alive",
240
+ "content-type": "text/event-stream",
241
+ "x-accel-buffering": "no",
242
+ },
243
+ });
244
+ }
245
+ admissionRefusal(listenRequest) {
246
+ if (!listenRequest.hasRequiredCapability) {
247
+ const error = new MissingRequiredClientCapabilityError({
248
+ requiredCapabilities: {
249
+ extensions: { [HARNESS_EVENTS_EXTENSION]: {} },
250
+ },
251
+ });
252
+ return jsonRpcError({
253
+ status: BAD_REQUEST_STATUS,
254
+ id: listenRequest.id,
255
+ code: error.code,
256
+ message: error.message,
257
+ data: error.data,
258
+ });
259
+ }
260
+ return this.active === undefined
261
+ ? undefined
262
+ : jsonRpcError({
263
+ status: CONFLICT_STATUS,
264
+ id: listenRequest.id,
265
+ code: SUBSCRIPTION_IN_USE,
266
+ message: "Turn-ready subscription already in use",
267
+ data: { kind: "subscription_in_use" },
268
+ });
269
+ }
270
+ makeReadable(request, subscription) {
271
+ try {
272
+ return new ReadableStream({
273
+ start: (controller) => {
274
+ this.start(request, subscription, controller);
275
+ },
276
+ cancel: () => {
277
+ this.teardown(subscription, false);
278
+ },
279
+ });
280
+ }
281
+ catch (error) {
282
+ this.teardown(subscription, false);
283
+ this.reportError(error);
284
+ return undefined;
285
+ }
286
+ }
287
+ start(request, subscription, controller) {
288
+ subscription.controller = controller;
289
+ if (request.signal.aborted) {
290
+ this.teardown(subscription, false);
291
+ return;
292
+ }
293
+ const onAbort = () => {
294
+ this.teardown(subscription, false);
295
+ };
296
+ request.signal.addEventListener("abort", onAbort, { once: true });
297
+ subscription.abortCleanup = () => {
298
+ request.signal.removeEventListener("abort", onAbort);
299
+ };
300
+ if (!this.enqueueMessage(subscription, this.ackMessage(subscription.id))) {
301
+ this.teardown(subscription, false);
302
+ }
303
+ }
304
+ ackMessage(id) {
305
+ return {
306
+ jsonrpc: JSON_RPC_VERSION,
307
+ method: SUBSCRIPTIONS_ACKNOWLEDGED_NOTIFICATION,
308
+ params: {
309
+ notifications: { [HARNESS_TURN_READY_FILTER]: true },
310
+ _meta: { [SUBSCRIPTION_ID_META_KEY]: id },
311
+ },
312
+ };
313
+ }
314
+ }
315
+ /**
316
+ * Adds the MoltZap turn-ready subscription extension to an official MCP HTTP
317
+ * handler. Every non-extension request remains owned by the SDK delegate.
318
+ *
319
+ * @param options Official handler, server identity, and optional error sink.
320
+ * @returns The official handler surface plus a typed custom publisher.
321
+ */
322
+ export const makeHarnessMcpSubscriptionHandler = (options) => new HarnessMcpSubscriptionState(options).asHandler();
323
+ /* eslint-enable agent-code-guard/async-keyword, agent-code-guard/promise-type, @typescript-eslint/no-invalid-void-type -- Restore repository defaults after the Promise-native MCP boundary. */
324
+ //# sourceMappingURL=harness-mcp-subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness-mcp-subscription.js","sourceRoot":"","sources":["../src/harness-mcp-subscription.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,14 @@
1
1
  import { type Implementation, type McpHttpHandler } from "@modelcontextprotocol/server";
2
+ import { Effect } from "effect";
3
+ import type { ConversationId } from "@moltzap/protocol/conversation";
4
+ import { type HarnessTurnEvent } from "./harness/index.js";
5
+ import { type HarnessMcpSubscriptionHandler } from "./harness-mcp-subscription.js";
2
6
  import { type localDaemonCommands, type LocalDaemonHandlers } from "./local-daemon-rpc.js";
3
7
  type StatusHandler = LocalDaemonHandlers[typeof localDaemonCommands.status];
8
+ type ReplyHandler = (conversationId: ConversationId, payload: string) => Effect.Effect<void, unknown>;
4
9
  interface HarnessMcpHandlerOptions {
5
10
  readonly implementation: Implementation;
11
+ readonly reply: ReplyHandler;
6
12
  readonly status: StatusHandler;
7
13
  }
8
14
  /**
@@ -10,12 +16,13 @@ interface HarnessMcpHandlerOptions {
10
16
  *
11
17
  * @param options Existing daemon capabilities exposed through MCP.
12
18
  * @param options.implementation Existing MCP server identity.
19
+ * @param options.reply Conversation-bound raw reply handler.
13
20
  * @param options.status Existing local daemon status handler.
14
21
  * @returns The registration and active-agent HTTP handlers.
15
22
  */
16
- export declare const makeHarnessMcpHttpHandlers: ({ implementation, status, }: HarnessMcpHandlerOptions) => {
23
+ export declare const makeHarnessMcpHttpHandlers: ({ implementation, reply, status, }: HarnessMcpHandlerOptions) => {
17
24
  readonly registration: McpHttpHandler;
18
- readonly active: McpHttpHandler;
25
+ readonly active: HarnessMcpSubscriptionHandler<HarnessTurnEvent>;
19
26
  };
20
27
  export {};
21
28
  //# sourceMappingURL=harness-mcp-wire.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-mcp-wire.d.ts","sourceRoot":"","sources":["../src/harness-mcp-wire.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,8BAA8B,CAAC;AAItC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAM/B,KAAK,aAAa,GAAG,mBAAmB,CAAC,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAE5E,UAAU,wBAAwB;IAChC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC;AAmDD;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,gCAGpC,wBAAwB,KAAG;IAC5B,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;CAQhC,CAAC"}
1
+ {"version":3,"file":"harness-mcp-wire.d.ts","sourceRoot":"","sources":["../src/harness-mcp-wire.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,MAAM,EAA2B,MAAM,QAAQ,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAQL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAM/B,KAAK,aAAa,GAAG,mBAAmB,CAAC,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5E,KAAK,YAAY,GAAG,CAClB,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,MAAM,KACZ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAElC,UAAU,wBAAwB;IAChC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC;AA2FD;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,uCAIpC,wBAAwB,KAAG;IAC5B,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;CAgBlE,CAAC"}
@@ -2,15 +2,20 @@ import { createMcpHandler, fromJsonSchema, McpServer, } from "@modelcontextproto
2
2
  import { Headers } from "@effect/platform";
3
3
  import { Rpc } from "@effect/rpc";
4
4
  import { Effect, JSONSchema } from "effect";
5
+ import { decodeHarnessReplyRoute, HARNESS_EVENTS_EXTENSION, HARNESS_REPLY_TOOL, harnessReplyInputJsonSchema, harnessReplyResultJsonSchema, } from "./harness/index.js";
6
+ import { makeHarnessMcpSubscriptionHandler, } from "./harness-mcp-subscription.js";
5
7
  import { statusCommandRpc, } from "./local-daemon-rpc.js";
6
8
  const STATUS_TOOL_NAME = "status";
7
9
  const statusInputSchema = fromJsonSchema(
8
10
  /* Safe because Effect and MCP expose the same JSON Schema wire shape with different array mutability declarations. */ JSONSchema.make(statusCommandRpc.payloadSchema, { target: "jsonSchema2020-12" }));
9
11
  const statusOutputSchema = fromJsonSchema(
10
12
  /* Safe because Effect and MCP expose the same JSON Schema wire shape with different array mutability declarations. */ JSONSchema.make(statusCommandRpc.successSchema, { target: "jsonSchema2020-12" }));
13
+ const replyInputSchema = fromJsonSchema(
14
+ /* Safe because Effect and MCP expose the same JSON Schema wire shape with different array mutability declarations. */ harnessReplyInputJsonSchema);
15
+ const replyOutputSchema = fromJsonSchema(
16
+ /* Safe because Effect and MCP expose the same JSON Schema wire shape with different array mutability declarations. */ harnessReplyResultJsonSchema);
11
17
  const makeRegistrationServer = (implementation) => new McpServer(implementation);
12
- const makeActiveServer = (implementation, status) => {
13
- const server = new McpServer(implementation);
18
+ const registerStatusTool = (server, status) => {
14
19
  server.registerTool(STATUS_TOOL_NAME, {
15
20
  inputSchema: statusInputSchema,
16
21
  outputSchema: statusOutputSchema,
@@ -27,6 +32,29 @@ const makeActiveServer = (implementation, status) => {
27
32
  structuredContent: result,
28
33
  })));
29
34
  });
35
+ };
36
+ const registerReplyTool = (server, reply) => {
37
+ server.registerTool(HARNESS_REPLY_TOOL, {
38
+ inputSchema: replyInputSchema,
39
+ outputSchema: replyOutputSchema,
40
+ }, (input, context) => Effect.runPromise(Effect.gen(function* () {
41
+ const route = yield* decodeHarnessReplyRoute(context.mcpReq._meta);
42
+ yield* reply(route.conversationId, input.payload);
43
+ const result = {};
44
+ return {
45
+ content: [{ type: "text", text: JSON.stringify(result) }],
46
+ structuredContent: result,
47
+ };
48
+ }), { signal: context.mcpReq.signal }));
49
+ };
50
+ const makeActiveServer = (implementation, status, reply) => {
51
+ const server = new McpServer(implementation, {
52
+ capabilities: {
53
+ extensions: { [HARNESS_EVENTS_EXTENSION]: {} },
54
+ },
55
+ });
56
+ registerStatusTool(server, status);
57
+ registerReplyTool(server, reply);
30
58
  return server;
31
59
  };
32
60
  /**
@@ -34,15 +62,18 @@ const makeActiveServer = (implementation, status) => {
34
62
  *
35
63
  * @param options Existing daemon capabilities exposed through MCP.
36
64
  * @param options.implementation Existing MCP server identity.
65
+ * @param options.reply Conversation-bound raw reply handler.
37
66
  * @param options.status Existing local daemon status handler.
38
67
  * @returns The registration and active-agent HTTP handlers.
39
68
  */
40
- export const makeHarnessMcpHttpHandlers = ({ implementation, status, }) => ({
41
- registration: createMcpHandler(() => makeRegistrationServer(implementation), {
42
- legacy: "reject",
43
- }),
44
- active: createMcpHandler(() => makeActiveServer(implementation, status), {
45
- legacy: "reject",
46
- }),
47
- });
69
+ export const makeHarnessMcpHttpHandlers = ({ implementation, reply, status, }) => {
70
+ const activeDelegate = createMcpHandler(() => makeActiveServer(implementation, status, reply), { legacy: "reject" });
71
+ return {
72
+ registration: createMcpHandler(() => makeRegistrationServer(implementation), { legacy: "reject" }),
73
+ active: makeHarnessMcpSubscriptionHandler({
74
+ delegate: activeDelegate,
75
+ implementation,
76
+ }),
77
+ };
78
+ };
48
79
  //# sourceMappingURL=harness-mcp-wire.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-mcp-wire.js","sourceRoot":"","sources":["../src/harness-mcp-wire.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,SAAS,GAIV,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAe,MAAM,QAAQ,CAAC;AACzD,OAAO,EACL,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAWlC,MAAM,iBAAiB,GAAG,cAAc;AACtC,sHAAsH,CAAC,UAAU,CAAC,IAAI,CACpI,gBAAgB,CAAC,aAAa,EAC9B,EAAE,MAAM,EAAE,mBAAmB,EAAE,CACd,CACpB,CAAC;AACF,MAAM,kBAAkB,GAAG,cAAc;AACvC,sHAAsH,CAAC,UAAU,CAAC,IAAI,CACpI,gBAAgB,CAAC,aAAa,EAC9B,EAAE,MAAM,EAAE,mBAAmB,EAAE,CACd,CACpB,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,cAA8B,EAAa,EAAE,CAC3E,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC;AAEhC,MAAM,gBAAgB,GAAG,CACvB,cAA8B,EAC9B,MAAqB,EACV,EAAE;IACb,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,iBAAiB;QAC9B,YAAY,EAAE,kBAAkB;KACjC,EACD,CAAC,OAAO,EAAE,EAAE;QACV,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE;YAC/B,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,CAAC,KAAK;SACvB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;QACnE,MAAM,cAAc;QAClB,qIAAqI,CAAC,MAGrI,CAAC;QACJ,OAAO,MAAM,CAAC,UAAU,CACtB,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACtC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,iBAAiB,EAAE,MAAM;SAC1B,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC,CACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,EACzC,cAAc,EACd,MAAM,GACmB,EAGzB,EAAE,CAAC,CAAC;IACJ,YAAY,EAAE,gBAAgB,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAAE;QAC3E,MAAM,EAAE,QAAQ;KACjB,CAAC;IACF,MAAM,EAAE,gBAAgB,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE;QACvE,MAAM,EAAE,QAAQ;KACjB,CAAC;CACH,CAAC,CAAC"}
1
+ {"version":3,"file":"harness-mcp-wire.js","sourceRoot":"","sources":["../src/harness-mcp-wire.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,4 +4,6 @@
4
4
  export { MoltZapService, type ConversationMeta, type ContextOptions, type ServiceRpcError, } from "./service.js";
5
5
  /** Re-exports the public API from `./agent-client.js`. */
6
6
  export { MoltZapAgentClient, type AgentClientOptions, type RpcCallOptions, } from "./agent-client.js";
7
+ /** Re-exports the adapter-facing daemon client capability. */
8
+ export { acquireHarnessClient, HarnessClient, makeHarnessClientLayer, type HarnessClientOptions, type HarnessClientService, type HarnessTurn, } from "./harness-client.js";
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AACtB,0DAA0D;AAC1D,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AACtB,0DAA0D;AAC1D,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAC3B,8DAA8D;AAC9D,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -4,4 +4,6 @@
4
4
  export { MoltZapService, } from "./service.js";
5
5
  /** Re-exports the public API from `./agent-client.js`. */
6
6
  export { MoltZapAgentClient, } from "./agent-client.js";
7
+ /** Re-exports the adapter-facing daemon client capability. */
8
+ export { acquireHarnessClient, HarnessClient, makeHarnessClientLayer, } from "./harness-client.js";
7
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,cAAc,GAIf,MAAM,cAAc,CAAC;AACtB,0DAA0D;AAC1D,OAAO,EACL,kBAAkB,GAGnB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,cAAc,GAIf,MAAM,cAAc,CAAC;AACtB,0DAA0D;AAC1D,OAAO,EACL,kBAAkB,GAGnB,MAAM,mBAAmB,CAAC;AAC3B,8DAA8D;AAC9D,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,sBAAsB,GAIvB,MAAM,qBAAqB,CAAC"}
@@ -20,8 +20,9 @@ type MoltzapdServer = Effect.Effect.Success<ReturnType<typeof acquireHarnessMcpH
20
20
  *
21
21
  * process->>service: make(profileName)
22
22
  * process->>core: construct(service)
23
- * process->>core: connect()
23
+ * process->>core: install raw turn publisher
24
24
  * process->>mcp: listen(port)
25
+ * process->>core: connect()
25
26
  * Note over core,mcp: Scope release closes MCP before disconnecting the core
26
27
  * ```
27
28
  *
@@ -1 +1 @@
1
- {"version":3,"file":"moltzapd.d.ts","sourceRoot":"","sources":["../src/moltzapd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA2B,KAAK,EAAE,MAAM,QAAQ,CAAC;AAGhE,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAMtE,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,UAAU,eAAe;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAQD,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CACzC,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAC/C,CAAC;AAsBF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,eAAe,YACjB,eAAe,KACvB,MAAM,CAAC,MAAM,CACd,cAAc,EACd,KAAK,GAAG,kBAAkB,GAAG,eAAe,EAC5C,KAAK,CAAC,KAAK,CA0BgC,CAAC"}
1
+ {"version":3,"file":"moltzapd.d.ts","sourceRoot":"","sources":["../src/moltzapd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA2B,KAAK,EAAE,MAAM,QAAQ,CAAC;AAIhE,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAMtE,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,UAAU,eAAe;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAQD,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CACzC,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAC/C,CAAC;AAqCF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,eAAe,YACjB,eAAe,KACvB,MAAM,CAAC,MAAM,CACd,cAAc,EACd,KAAK,GAAG,kBAAkB,GAAG,eAAe,EAC5C,KAAK,CAAC,KAAK,CA8BgC,CAAC"}
package/dist/moltzapd.js CHANGED
@@ -15,9 +15,18 @@ const makeStatusHandler = (service, core) => () => Effect.succeed({
15
15
  connected: core.isConnected(),
16
16
  conversations: service.getConversations().length,
17
17
  });
18
- const acquireConnectedCore = (service) =>
18
+ const acquireCore = (service) =>
19
19
  // eslint-disable-next-line agent-code-guard/acquire-release-requires-scope -- the process scope owns the sole core and its network connection
20
- Effect.acquireRelease(Effect.sync(() => new MoltZapChannelCore({ service })), (core) => core.disconnect()).pipe(Effect.tap((core) => core.connect()));
20
+ Effect.acquireRelease(Effect.sync(() => new MoltZapChannelCore({ service })), (core) => core.disconnect());
21
+ const installTurnPublisher = (core, publish) => {
22
+ core.onRawInbound((messages) => Effect.sync(() => {
23
+ const first = messages[0];
24
+ if (first === undefined) {
25
+ return;
26
+ }
27
+ publish({ messages: [first, ...messages.slice(1)] });
28
+ }));
29
+ };
21
30
  /**
22
31
  * Owns one registered agent's service, channel core, network connection, and
23
32
  * guarded loopback MCP listener for the lifetime of the caller's scope.
@@ -31,8 +40,9 @@ Effect.acquireRelease(Effect.sync(() => new MoltZapChannelCore({ service })), (c
31
40
  *
32
41
  * process->>service: make(profileName)
33
42
  * process->>core: construct(service)
34
- * process->>core: connect()
43
+ * process->>core: install raw turn publisher
35
44
  * process->>mcp: listen(port)
45
+ * process->>core: connect()
36
46
  * Note over core,mcp: Scope release closes MCP before disconnecting the core
37
47
  * ```
38
48
  *
@@ -48,16 +58,20 @@ export const acquireMoltzapd = (options) => Effect.gen(function* () {
48
58
  const daemonScope = yield* Scope.fork(parentScope, ExecutionStrategy.sequential);
49
59
  const acquire = Effect.gen(function* () {
50
60
  const service = yield* MoltZapService.make(options.profileName);
51
- const core = yield* acquireConnectedCore(service);
61
+ const core = yield* acquireCore(service);
52
62
  const handlers = makeHarnessMcpHttpHandlers({
53
63
  implementation: MCP_IMPLEMENTATION,
64
+ reply: core.sendReply.bind(core),
54
65
  status: makeStatusHandler(service, core),
55
66
  });
56
- return yield* acquireHarnessMcpHttpServer({
67
+ installTurnPublisher(core, handlers.active.publish);
68
+ const server = yield* acquireHarnessMcpHttpServer({
57
69
  port: options.port,
58
70
  registrationHandler: handlers.registration,
59
71
  harnessHandler: handlers.active,
60
72
  });
73
+ yield* core.connect();
74
+ return server;
61
75
  }).pipe(Scope.extend(daemonScope));
62
76
  return yield* acquire.pipe(Effect.onExit((exit) => Exit.isSuccess(exit) ? Effect.void : Scope.close(daemonScope, exit)));
63
77
  }).pipe(Effect.withSpan("acquireMoltzapd"));
@@ -1 +1 @@
1
- {"version":3,"file":"moltzapd.js","sourceRoot":"","sources":["../src/moltzapd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"moltzapd.js","sourceRoot":"","sources":["../src/moltzapd.ts"],"names":[],"mappings":"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"}