holon-sh 0.0.1-dev.16 → 0.0.1-dev.17
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/context.d.ts +2 -5
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js.map +1 -1
- package/dist/ext/events.client.d.ts +4 -0
- package/dist/ext/events.client.d.ts.map +1 -0
- package/dist/ext/events.client.js +180 -0
- package/dist/ext/events.client.js.map +1 -0
- package/dist/ext/events.d.ts +6 -12
- package/dist/ext/events.d.ts.map +1 -1
- package/dist/ext/events.js +30 -51
- package/dist/ext/events.js.map +1 -1
- package/dist/ext/files.client.d.ts +2 -3
- package/dist/ext/files.client.d.ts.map +1 -1
- package/dist/ext/files.client.js +20 -22
- package/dist/ext/files.client.js.map +1 -1
- package/dist/ext/files.d.ts +1 -1
- package/dist/ext/files.d.ts.map +1 -1
- package/dist/link.d.ts +35 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +118 -0
- package/dist/link.js.map +1 -0
- package/dist/protocol.d.ts +6 -7
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +0 -1
- package/dist/protocol.js.map +1 -1
- package/dist/runtime.d.ts +0 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +129 -409
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
- package/src/context.ts +3 -1
- package/src/ext/events.client.ts +157 -0
- package/src/ext/events.ts +41 -83
- package/src/ext/files.client.ts +21 -20
- package/src/ext/files.ts +1 -1
- package/src/link.ts +136 -0
- package/src/protocol.ts +6 -9
- package/src/runtime.ts +120 -379
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/context.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { AuthInfo } from "@modelcontextprotocol/client";
|
|
2
|
+
|
|
1
3
|
/** Standard OpenID Connect address claims. */
|
|
2
4
|
export interface AddressClaims {
|
|
3
5
|
formatted?: string; street_address?: string; locality?: string; region?: string; postal_code?: string; country?: string;
|
|
@@ -21,7 +23,7 @@ export interface RequestContext { principal: Principal | null; origin: string |
|
|
|
21
23
|
interface Admitted { iss?: unknown; sub?: unknown; claims?: IdentityClaims; act?: Record<string, unknown> }
|
|
22
24
|
|
|
23
25
|
/** Read the caller and the app's origin from the context an MCP server receives: a tool callback's ctx.http, or the McpRequestContext of a createMcpHandler factory. */
|
|
24
|
-
export function getContext(context: { authInfo?:
|
|
26
|
+
export function getContext(context: { authInfo?: Pick<AuthInfo, "clientId" | "scopes" | "extra">; req?: Request; requestInfo?: Request } = {}): RequestContext {
|
|
25
27
|
const { authInfo, req = context.requestInfo } = context;
|
|
26
28
|
const { iss, sub, claims, act } = (authInfo?.extra ?? {}) as Admitted;
|
|
27
29
|
const principal = !authInfo || typeof iss !== "string" || typeof sub !== "string" ? null
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// The client side of MCP Events, the draft extension of the Triggers & Events Working Group:
|
|
2
|
+
// https://github.com/modelcontextprotocol/experimental-ext-triggers-events/blob/main/docs/design-sketch-proposal.md
|
|
3
|
+
import type { Client } from "@modelcontextprotocol/client";
|
|
4
|
+
import { patient, sleep, unchecked, untilAborted, type Link } from "../link.js";
|
|
5
|
+
import type { CallOptions, EventOccurrence, EventType, SubscribeOptions, Subscription } from "../protocol.js";
|
|
6
|
+
import type { Contract, RuntimeClient } from "../runtime.js";
|
|
7
|
+
|
|
8
|
+
// A stream that has said nothing for twice the longest heartbeat interval is dead: https://github.com/modelcontextprotocol/experimental-ext-triggers-events/blob/main/docs/design-sketch-proposal.md#lifecycle
|
|
9
|
+
const QUIET = 60_000;
|
|
10
|
+
type Sent = EventOccurrence & { cursor?: string | null; _meta?: unknown };
|
|
11
|
+
type Listed = { events?: EventType[]; nextCursor?: string };
|
|
12
|
+
type Polled = { events?: Sent[]; cursor?: string | null; truncated?: boolean; hasMore?: boolean; nextPollMs?: number };
|
|
13
|
+
// A server's refusal ends a subscription: a client error, or an answer that the event type is gone, that access was
|
|
14
|
+
// lost, or that the request is no longer valid. Anything else is tried again from the cursor.
|
|
15
|
+
const refused = (error: any): boolean => error?.status >= 400 && error.status < 500 || error?.data?.status >= 400 && error.data.status < 500 || [-32602, -32023, -32024, -32026].includes(error?.code);
|
|
16
|
+
|
|
17
|
+
export function events(link: Link, contract: Contract | null, expect: (schema: object, label: string) => (value: unknown) => void): RuntimeClient["ext"]["events"] {
|
|
18
|
+
const { name } = link;
|
|
19
|
+
const connected = <T>(options: CallOptions | undefined, run: (client: Client) => Promise<T>) => link.session(options, (_, connection) => {
|
|
20
|
+
if (!connection) throw new Error(`MCP Events of ${name} require an endpoint binding.`);
|
|
21
|
+
return run(connection.client);
|
|
22
|
+
});
|
|
23
|
+
const list = (options?: CallOptions) => connected(options, async client => {
|
|
24
|
+
const events: EventType[] = [];
|
|
25
|
+
for (let cursor: string | undefined; ;) {
|
|
26
|
+
const page = await client.request({ method: "events/list", params: { ...(cursor && { cursor }) } }, unchecked<Listed>(), patient(options));
|
|
27
|
+
events.push(...page.events ?? []);
|
|
28
|
+
if (!(cursor = page.nextCursor)) return events;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
const subscribe = async (event: string, args: unknown = {}, { signal, onGap, maxAgeMs, ...options }: SubscribeOptions = {}): Promise<Subscription> => {
|
|
32
|
+
const resolved = link.endpoint(`Subscribing to ${name} ${event}`);
|
|
33
|
+
const offered = (await list(signal && { signal })).find(type => type.name === event)?.delivery;
|
|
34
|
+
if (!offered) throw new Error(`${name} has no event ${event}.`);
|
|
35
|
+
const delivery = options.delivery ?? (["push", "poll"] as const).find(mode => offered.includes(mode));
|
|
36
|
+
// The sketch's NoCompatibleDeliveryMode: none of the modes the server offers is one this client uses.
|
|
37
|
+
if (!delivery || !offered.includes(delivery)) throw Object.assign(new Error(`${name} does not deliver ${event} by ${delivery ?? "poll or push"}.`), { name: "NoCompatibleDeliveryMode" });
|
|
38
|
+
const cancelled = new AbortController();
|
|
39
|
+
const ended = signal ? AbortSignal.any([signal, cancelled.signal]) : cancelled.signal;
|
|
40
|
+
let cursor = options.cursor ?? null;
|
|
41
|
+
const queue: EventOccurrence[] = [];
|
|
42
|
+
const seen = new Set<string>();
|
|
43
|
+
let wake = () => {};
|
|
44
|
+
let done = false;
|
|
45
|
+
let failure: unknown;
|
|
46
|
+
const reach = (next: string | null | undefined, truncated?: boolean) => {
|
|
47
|
+
cursor = next ?? null;
|
|
48
|
+
if (truncated) onGap?.();
|
|
49
|
+
};
|
|
50
|
+
const expected = contract?.events?.find(type => type.name === event)?.payloadSchema;
|
|
51
|
+
const check = expected && expect(expected, `data of ${name} ${event}`);
|
|
52
|
+
const deliver = ({ cursor: _, _meta, ...occurrence }: Sent) => {
|
|
53
|
+
if (seen.has(occurrence.eventId)) return;
|
|
54
|
+
seen.add(occurrence.eventId);
|
|
55
|
+
if (seen.size > 1024) seen.delete(seen.values().next().value!);
|
|
56
|
+
check?.(occurrence.data);
|
|
57
|
+
queue.push(occurrence);
|
|
58
|
+
wake();
|
|
59
|
+
};
|
|
60
|
+
const request = { name: event, arguments: args, ...(maxAgeMs !== undefined && { maxAgeMs }) };
|
|
61
|
+
let confirmed = false;
|
|
62
|
+
const established = Promise.withResolvers<void>();
|
|
63
|
+
const confirm = () => { confirmed = true; established.resolve(); };
|
|
64
|
+
const poll = async () => {
|
|
65
|
+
while (!ended.aborted) {
|
|
66
|
+
let wait = 1000;
|
|
67
|
+
try {
|
|
68
|
+
const result = await connected({ signal: ended }, client => client.request({ method: "events/poll", params: { ...request, cursor } }, unchecked<Polled>(), patient({ signal: ended })));
|
|
69
|
+
try { for (const occurrence of result.events ?? []) deliver(occurrence); } catch (error) { failure = error; return cancelled.abort(); }
|
|
70
|
+
reach(result.cursor, result.truncated);
|
|
71
|
+
confirm();
|
|
72
|
+
// A server that asks for a tight loop is not obeyed.
|
|
73
|
+
wait = result.hasMore ? 0 : Math.max(1000, result.nextPollMs ?? 0);
|
|
74
|
+
} catch (error) {
|
|
75
|
+
if (ended.aborted) return;
|
|
76
|
+
if (!confirmed || refused(error)) throw error;
|
|
77
|
+
}
|
|
78
|
+
await sleep(wait, ended);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const stream = async () => {
|
|
82
|
+
while (!ended.aborted) {
|
|
83
|
+
let wait = 1000;
|
|
84
|
+
const quiet = new AbortController();
|
|
85
|
+
// The MCP client keeps waiting for the answer of a request whose stream has ended, so the end is watched for here.
|
|
86
|
+
// Only the stream's own response is watched: a 2025 server answers its initialization as a stream too.
|
|
87
|
+
const watched: typeof fetch = async (input, init) => {
|
|
88
|
+
const response = await (resolved.fetch ?? fetch)(input, init);
|
|
89
|
+
const streaming = typeof init?.body === "string" && init.body.includes('"method":"events/stream"');
|
|
90
|
+
if (!streaming || !response.body || !response.headers.get("content-type")?.startsWith("text/event-stream")) return response;
|
|
91
|
+
const reader = response.body.getReader();
|
|
92
|
+
const body = new ReadableStream({
|
|
93
|
+
pull: controller => reader.read().then(({ done, value }) => {
|
|
94
|
+
if (!done) return controller.enqueue(value);
|
|
95
|
+
controller.close();
|
|
96
|
+
// The answer, when the stream ended with one, is handled first.
|
|
97
|
+
setTimeout(() => quiet.abort());
|
|
98
|
+
}, error => { controller.error(error); quiet.abort(); }),
|
|
99
|
+
cancel: reason => reader.cancel(reason),
|
|
100
|
+
});
|
|
101
|
+
return new Response(body, response);
|
|
102
|
+
};
|
|
103
|
+
// Each stream has its own connection, so every event notification on it is this subscription's.
|
|
104
|
+
const connection = link.connect({ ...resolved, fetch: watched });
|
|
105
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
106
|
+
const heard = () => {
|
|
107
|
+
clearTimeout(timer);
|
|
108
|
+
timer = setTimeout(() => quiet.abort(), QUIET);
|
|
109
|
+
};
|
|
110
|
+
let terminated: { code?: number; message?: string; data?: unknown } | undefined;
|
|
111
|
+
try {
|
|
112
|
+
await untilAborted(connection.ready, ended);
|
|
113
|
+
const on = <P>(method: string, handle: (params: P) => void) => connection.client.setNotificationHandler(`notifications/events/${method}`, { params: unchecked<P>() }, params => { heard(); handle(params); });
|
|
114
|
+
on<Pick<Polled, "cursor" | "truncated">>("active", ({ cursor: next, truncated }) => { reach(next, truncated); confirm(); });
|
|
115
|
+
on<Sent>("event", occurrence => {
|
|
116
|
+
wait = 0;
|
|
117
|
+
try { deliver(occurrence); } catch (error) { failure = error; return cancelled.abort(); }
|
|
118
|
+
reach(occurrence.cursor);
|
|
119
|
+
});
|
|
120
|
+
on<Pick<Polled, "cursor">>("heartbeat", ({ cursor: next }) => reach(next));
|
|
121
|
+
// The server recovers from an error by itself, and the stream stays open.
|
|
122
|
+
on("error", () => {});
|
|
123
|
+
on<{ error?: typeof terminated }>("terminated", ({ error }) => { terminated = error; quiet.abort(); });
|
|
124
|
+
heard();
|
|
125
|
+
await connection.client.request({ method: "events/stream", params: { ...request, cursor } }, unchecked<unknown>(), { signal: AbortSignal.any([ended, quiet.signal]), timeout: 2 ** 31 - 1 });
|
|
126
|
+
} catch (error) {
|
|
127
|
+
if (!terminated && !ended.aborted && (!confirmed || refused(error))) throw error;
|
|
128
|
+
} finally {
|
|
129
|
+
clearTimeout(timer);
|
|
130
|
+
await connection.close();
|
|
131
|
+
}
|
|
132
|
+
if (terminated) throw Object.assign(new Error(`${name} ended the subscription to ${event}: ${terminated.message}`), { code: terminated.code, data: terminated.data });
|
|
133
|
+
await sleep(wait, ended);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
void (delivery === "push" ? stream() : poll())
|
|
137
|
+
.catch(error => { failure ??= error; })
|
|
138
|
+
.finally(() => { done = true; wake(); established.reject(failure ?? ended.reason); });
|
|
139
|
+
await established.promise;
|
|
140
|
+
return {
|
|
141
|
+
delivery,
|
|
142
|
+
get cursor() { return cursor; },
|
|
143
|
+
cancel: () => cancelled.abort(),
|
|
144
|
+
[Symbol.asyncIterator]: () => ({
|
|
145
|
+
next: async (): Promise<IteratorResult<EventOccurrence>> => {
|
|
146
|
+
while (!queue.length && !done) await new Promise<void>(resolve => { wake = resolve; });
|
|
147
|
+
const value = queue.shift();
|
|
148
|
+
if (value) return { value, done: false };
|
|
149
|
+
if (failure) throw failure;
|
|
150
|
+
return { value: undefined, done: true };
|
|
151
|
+
},
|
|
152
|
+
return: async (): Promise<IteratorResult<EventOccurrence>> => { cancelled.abort(); return { value: undefined, done: true }; },
|
|
153
|
+
}),
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
return Object.freeze({ list, subscribe: subscribe as RuntimeClient["ext"]["events"]["subscribe"] });
|
|
157
|
+
}
|
package/src/ext/events.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// The server side of MCP Events, as the Triggers & Events Working Group's design sketch defines it:
|
|
2
2
|
// https://github.com/modelcontextprotocol/experimental-ext-triggers-events/blob/main/docs/design-sketch-proposal.md
|
|
3
|
-
// The draft is experimental, so this lives under ext and may change with it. It serves the poll and push delivery
|
|
4
|
-
// modes. Names follow the sketch, and types are the MCP SDK's own wherever it has them.
|
|
5
3
|
import { ProtocolError, ProtocolErrorCode, SUBSCRIPTION_ID_META_KEY } from "@modelcontextprotocol/server";
|
|
6
|
-
import type {
|
|
4
|
+
import type { JSONRPCErrorResponse, McpServer, Server, ServerCapabilities, ServerContext, StandardSchemaV1, StandardSchemaWithJSON } from "@modelcontextprotocol/server";
|
|
5
|
+
import { getContext } from "../context.js";
|
|
6
|
+
import type { EventOccurrence as Occurrence } from "../protocol.js";
|
|
7
7
|
|
|
8
8
|
/** The request a subscription came in, as Holon admitted it: read its caller with getContext. */
|
|
9
|
-
export type SubscriptionContext =
|
|
9
|
+
export type SubscriptionContext = ServerContext["http"];
|
|
10
10
|
/** How a subscription receives its events. */
|
|
11
11
|
export type DeliveryModeName = "poll" | "push";
|
|
12
12
|
/** A JSON-RPC error, as a subscription that is terminated or fails is told it. */
|
|
@@ -28,14 +28,7 @@ export interface Subscription<A> {
|
|
|
28
28
|
readonly context: SubscriptionContext;
|
|
29
29
|
}
|
|
30
30
|
/** An occurrence as subscriptions receive it: the sketch's EventOccurrence. `cursor` is the position after it. */
|
|
31
|
-
export
|
|
32
|
-
eventId: string;
|
|
33
|
-
name: string;
|
|
34
|
-
/** When it happened, in ISO 8601. */
|
|
35
|
-
timestamp: string;
|
|
36
|
-
data: D;
|
|
37
|
-
cursor?: string;
|
|
38
|
-
}
|
|
31
|
+
export type EventOccurrence<D = unknown> = Occurrence<D> & { cursor?: string };
|
|
39
32
|
/** An event type: the arguments a subscription gives, and the data each occurrence carries. */
|
|
40
33
|
export interface EventDefinition<A, D> {
|
|
41
34
|
description?: string;
|
|
@@ -55,7 +48,7 @@ export interface EventDefinition<A, D> {
|
|
|
55
48
|
/** The data a subscription with these arguments receives of an emitted event. Without it, the data as emitted. */
|
|
56
49
|
transform?: (data: D, args: A, context: SubscriptionContext) => unknown;
|
|
57
50
|
/** The delivery modes this event type offers: poll and push unless given. */
|
|
58
|
-
delivery?: DeliveryModeName[];
|
|
51
|
+
delivery?: [DeliveryModeName, ...DeliveryModeName[]];
|
|
59
52
|
/**
|
|
60
53
|
* Whether the caller may subscribe with these arguments. A subscription is refused with Forbidden when it may not,
|
|
61
54
|
* and one already open is ended when it no longer may: each poll asks, and a stream asks at each heartbeat. A
|
|
@@ -138,15 +131,6 @@ export interface Events {
|
|
|
138
131
|
/** The identifier a server declares the Events extension under, in capabilities.extensions. */
|
|
139
132
|
export const EVENTS_EXTENSION = "io.modelcontextprotocol/events";
|
|
140
133
|
|
|
141
|
-
// The parts of an MCP server and of a request's context this module uses.
|
|
142
|
-
interface Served {
|
|
143
|
-
registerCapabilities(capabilities: object): void;
|
|
144
|
-
setRequestHandler(method: string, schemas: object, handler: (request: any, ctx: Context) => unknown): void;
|
|
145
|
-
}
|
|
146
|
-
interface Context {
|
|
147
|
-
mcpReq: { id: string | number; signal: AbortSignal; notify(notification: { method: string; params: object }): Promise<void> };
|
|
148
|
-
http?: SubscriptionContext & object;
|
|
149
|
-
}
|
|
150
134
|
/** An emitted event, kept at its sequence for polls and reconnecting streams. */
|
|
151
135
|
interface Kept { sequence: number; at: number; target: string | undefined; occurrence: EventOccurrence }
|
|
152
136
|
/** A subscription held by a push stream or a poll lease. */
|
|
@@ -165,19 +149,10 @@ interface Held {
|
|
|
165
149
|
type Reader = Pick<Held, "id" | "arguments" | "context" | "untargetable">;
|
|
166
150
|
/** The subscription a request asks for, checked. */
|
|
167
151
|
interface Requested { id: string; lease: string; arguments: unknown; context: SubscriptionContext }
|
|
168
|
-
interface Type<A = any, D = any> {
|
|
152
|
+
interface Type<A = any, D = any> extends Readonly<EventDefinition<A, D>> {
|
|
169
153
|
readonly name: string;
|
|
170
154
|
readonly order: number;
|
|
171
|
-
readonly
|
|
172
|
-
readonly inputSchema: StandardSchemaWithJSON<unknown, A>;
|
|
173
|
-
readonly payloadSchema: StandardSchemaWithJSON;
|
|
174
|
-
readonly _meta?: Record<string, unknown> | undefined;
|
|
175
|
-
readonly delivery: DeliveryModeName[];
|
|
176
|
-
readonly match?: EventDefinition<A, D>["match"];
|
|
177
|
-
readonly transform?: EventDefinition<A, D>["transform"];
|
|
178
|
-
readonly authorize?: EventDefinition<A, D>["authorize"];
|
|
179
|
-
readonly onSubscribe?: EventDefinition<A, D>["onSubscribe"];
|
|
180
|
-
readonly onUnsubscribe?: EventDefinition<A, D>["onUnsubscribe"];
|
|
155
|
+
readonly delivery: NonNullable<EventDefinition<A, D>["delivery"]>;
|
|
181
156
|
sequence: number;
|
|
182
157
|
dropped: number;
|
|
183
158
|
kept: Kept[];
|
|
@@ -192,22 +167,18 @@ interface Type<A = any, D = any> {
|
|
|
192
167
|
}
|
|
193
168
|
interface Lease { type: Type; opening: Promise<Held>; ended?: EventError; release?: () => void; timer?: ReturnType<typeof setTimeout> }
|
|
194
169
|
|
|
195
|
-
const INVALID_PARAMS = ProtocolErrorCode.InvalidParams;
|
|
196
|
-
const INTERNAL_ERROR = ProtocolErrorCode.InternalError;
|
|
197
170
|
// The sketch's general-purpose codes, provisional until the specification allocates them.
|
|
198
171
|
const NOT_FOUND = -32023;
|
|
199
172
|
const FORBIDDEN = -32024;
|
|
200
173
|
const RESOURCE_EXHAUSTED = -32025;
|
|
201
174
|
const UNSUPPORTED = -32026;
|
|
202
|
-
|
|
203
|
-
const params = { "~standard": { version: 1, vendor: "holon-sh", validate: (value: unknown) => ({ value: value ?? {} }) } };
|
|
175
|
+
const params: StandardSchemaV1<unknown, Record<string, unknown>> = { "~standard": { version: 1, vendor: "holon-sh", validate: value => ({ value: (value ?? {}) as Record<string, unknown> }) } };
|
|
204
176
|
|
|
205
177
|
const refusal = ({ code, message, data }: EventError) => new ProtocolError(code, message, data);
|
|
206
178
|
const removed: EventError = { code: NOT_FOUND, message: "NotFound", data: { kind: "event" } };
|
|
207
179
|
const forbidden: EventError = { code: FORBIDDEN, message: "Forbidden" };
|
|
208
|
-
// What a client is told of a failure: its code when it is a JSON-RPC one, and its message.
|
|
209
180
|
const described = (error: any): EventError => ({
|
|
210
|
-
code: Number.isInteger(error?.code) ? error.code :
|
|
181
|
+
code: Number.isInteger(error?.code) ? error.code : ProtocolErrorCode.InternalError,
|
|
211
182
|
message: error?.message || "InternalError",
|
|
212
183
|
...(error?.data !== undefined && { data: error.data }),
|
|
213
184
|
});
|
|
@@ -215,13 +186,9 @@ const described = (error: any): EventError => ({
|
|
|
215
186
|
const canonical = (value: unknown): unknown => Array.isArray(value) ? value.map(canonical)
|
|
216
187
|
: value && typeof value === "object" ? Object.fromEntries(Object.keys(value).sort().map(key => [key, canonical((value as Record<string, unknown>)[key])]))
|
|
217
188
|
: value;
|
|
218
|
-
// Who asked, as Holon admitted them: the user, the client acting for them, the agent when one acts for the user, and
|
|
219
|
-
// what the token allows. A caller without a subject has no identity: nobody can tell it from another such caller.
|
|
220
189
|
const caller = (context: SubscriptionContext): string | null => {
|
|
221
|
-
const
|
|
222
|
-
|
|
223
|
-
if (!authInfo || typeof sub !== "string") return null;
|
|
224
|
-
return JSON.stringify(canonical([iss, sub, authInfo.clientId ?? null, act, [...authInfo.scopes ?? []].sort()]));
|
|
190
|
+
const { principal } = getContext(context);
|
|
191
|
+
return principal && JSON.stringify(canonical([principal.issuer, principal.subject, principal.clientId, principal.actor ?? null, [...principal.scopes].sort()]));
|
|
225
192
|
};
|
|
226
193
|
const hex = (bytes: Uint8Array) => [...bytes].map(byte => byte.toString(16).padStart(2, "0")).join("");
|
|
227
194
|
// A subscription's id is the same for the same caller, event type and arguments, so it survives reconnects and poll
|
|
@@ -230,21 +197,16 @@ const identify = async (who: string | null, name: string, args: unknown) => {
|
|
|
230
197
|
const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(JSON.stringify([who, name, canonical(args)])));
|
|
231
198
|
return `sub_${hex(new Uint8Array(digest, 0, 16))}`;
|
|
232
199
|
};
|
|
233
|
-
// A caller without an identity gets an id of its own for each stream.
|
|
234
200
|
const unique = () => `sub_${hex(crypto.getRandomValues(new Uint8Array(16)))}`;
|
|
235
|
-
// The subscriber a subscription's arguments name, whoever the caller.
|
|
236
201
|
const named = (args: unknown) => JSON.stringify(canonical(args));
|
|
237
|
-
// Counts up or down under a key, and forgets a key that reaches none.
|
|
238
202
|
const count = (counts: Map<string, number>, key: string, by: number) => {
|
|
239
203
|
const total = (counts.get(key) ?? 0) + by;
|
|
240
204
|
if (total) counts.set(key, total);
|
|
241
205
|
else counts.delete(key);
|
|
242
206
|
};
|
|
243
|
-
|
|
244
|
-
const settle = (run: () => unknown) => { Promise.resolve().then(run).catch(() => {}); };
|
|
245
|
-
const integer = (value: unknown, minimum: number) => value === undefined || Number.isInteger(value) && (value as number) >= minimum;
|
|
207
|
+
const integer = (value: unknown, minimum: number): value is number | undefined => value === undefined || Number.isInteger(value) && (value as number) >= minimum;
|
|
246
208
|
|
|
247
|
-
const OFFERED: DeliveryModeName[] = ["poll", "push"];
|
|
209
|
+
const OFFERED: [DeliveryModeName, ...DeliveryModeName[]] = ["poll", "push"];
|
|
248
210
|
// What each type keeps of what it emits, for polls and reconnecting streams: the sketch's emit buffer.
|
|
249
211
|
const KEPT_EVENTS = 10_000;
|
|
250
212
|
const KEPT_AGE = 10 * 60_000;
|
|
@@ -258,7 +220,6 @@ const POLL_SUBSCRIPTION_TTL = 60_000;
|
|
|
258
220
|
// cannot be told apart, so they count together as one caller.
|
|
259
221
|
const MAX_SUBSCRIPTIONS = 10_000;
|
|
260
222
|
const MAX_SUBSCRIPTIONS_PER_CALLER = 1000;
|
|
261
|
-
// How many event types events/list returns at a time.
|
|
262
223
|
const PAGE_SIZE = 100;
|
|
263
224
|
/**
|
|
264
225
|
* What a stream sends before it ends and its client resumes from its cursor. The draft leaves flow control to the
|
|
@@ -283,7 +244,7 @@ export function createEvents(): Events {
|
|
|
283
244
|
let subscribed = 0;
|
|
284
245
|
const callers = new Map<string, number>();
|
|
285
246
|
|
|
286
|
-
const position = (
|
|
247
|
+
const position = (sequence: number) => `${epoch}.${sequence}`;
|
|
287
248
|
|
|
288
249
|
// What a subscription is owed after a cursor, up to `until`: the events for it, in order, where delivery starts,
|
|
289
250
|
// and where it now stands. A null cursor starts where the subscription was opened, and so does one from another
|
|
@@ -300,14 +261,14 @@ export function createEvents(): Events {
|
|
|
300
261
|
const events: EventOccurrence[] = [];
|
|
301
262
|
const failures: EventError[] = [];
|
|
302
263
|
let reached = recent.length ? recent[0]!.sequence - 1 : until;
|
|
303
|
-
const start = position(
|
|
264
|
+
const start = position(reached);
|
|
304
265
|
for (const kept of recent) {
|
|
305
|
-
if (events.length === limit) return { events, failures, start, cursor: position(
|
|
266
|
+
if (events.length === limit) return { events, failures, start, cursor: position(reached), truncated, hasMore: true };
|
|
306
267
|
reached = kept.sequence;
|
|
307
268
|
const event = shape(type, kept, subscription, error => failures.push(error));
|
|
308
269
|
if (event) events.push(event);
|
|
309
270
|
}
|
|
310
|
-
return { events, failures, start, cursor: position(
|
|
271
|
+
return { events, failures, start, cursor: position(until), truncated, hasMore: false };
|
|
311
272
|
};
|
|
312
273
|
|
|
313
274
|
// The occurrence a subscription receives, or nothing when it is not for it. An event emitted to one subscription
|
|
@@ -324,24 +285,24 @@ export function createEvents(): Events {
|
|
|
324
285
|
} catch (error: any) {
|
|
325
286
|
const { eventId } = occurrence;
|
|
326
287
|
console.error(`holon-sh/ext/events: event ${eventId} of ${type.name} was skipped for a subscription:`, error);
|
|
327
|
-
failed({ code:
|
|
288
|
+
failed({ code: ProtocolErrorCode.InternalError, message: `Event ${eventId} could not be delivered and was skipped`, data: { eventId, reason: String(error?.message ?? error) } });
|
|
328
289
|
return undefined;
|
|
329
290
|
}
|
|
330
|
-
return { ...occurrence, data, cursor: position(
|
|
291
|
+
return { ...occurrence, data, cursor: position(sequence) };
|
|
331
292
|
};
|
|
332
293
|
|
|
333
294
|
// The event type and arguments a request names, checked as the sketch's errors require, in its order: the type,
|
|
334
295
|
// the delivery mode, the request's own fields, the arguments, and then whether the caller may subscribe. A caller
|
|
335
296
|
// refused loses what it holds of that subscription at once.
|
|
336
|
-
const subscription = async ({ name, arguments: args = {}, cursor, maxAgeMs, maxEvents }: Record<string, unknown>, context: SubscriptionContext, delivery: DeliveryModeName)
|
|
297
|
+
const subscription = async ({ name, arguments: args = {}, cursor, maxAgeMs, maxEvents }: Record<string, unknown>, context: SubscriptionContext, delivery: DeliveryModeName) => {
|
|
337
298
|
const type = types.get(name as string);
|
|
338
299
|
if (!type) throw refusal(removed);
|
|
339
300
|
if (!type.delivery.includes(delivery)) throw refusal({ code: UNSUPPORTED, message: "Unsupported", data: { feature: "deliveryMode", value: delivery } });
|
|
340
|
-
if (cursor != null && typeof cursor !== "string") throw new ProtocolError(
|
|
341
|
-
if (!integer(maxAgeMs, 0)) throw new ProtocolError(
|
|
342
|
-
if (!integer(maxEvents, 1)) throw new ProtocolError(
|
|
301
|
+
if (cursor != null && typeof cursor !== "string") throw new ProtocolError(ProtocolErrorCode.InvalidParams, "cursor must be a string or null");
|
|
302
|
+
if (!integer(maxAgeMs, 0)) throw new ProtocolError(ProtocolErrorCode.InvalidParams, "maxAgeMs must be a non-negative integer");
|
|
303
|
+
if (!integer(maxEvents, 1)) throw new ProtocolError(ProtocolErrorCode.InvalidParams, "maxEvents must be a positive integer");
|
|
343
304
|
const checked = await type.inputSchema["~standard"].validate(args);
|
|
344
|
-
if (checked.issues) throw new ProtocolError(
|
|
305
|
+
if (checked.issues) throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Invalid arguments for ${name}: ${checked.issues.map(issue => issue.message).join("; ")}`);
|
|
345
306
|
const who = caller(context);
|
|
346
307
|
// Polls share a lease per caller and arguments, and callers without an identity share one per arguments.
|
|
347
308
|
const lease = await identify(who, type.name, checked.value);
|
|
@@ -351,7 +312,8 @@ export function createEvents(): Events {
|
|
|
351
312
|
leases.delete(lease);
|
|
352
313
|
throw refusal(forbidden);
|
|
353
314
|
}
|
|
354
|
-
|
|
315
|
+
const subscription: Requested = { id: who === null ? unique() : lease, lease, arguments: checked.value, context };
|
|
316
|
+
return { type, subscription, cursor: cursor ?? null, maxAgeMs, maxEvents };
|
|
355
317
|
};
|
|
356
318
|
|
|
357
319
|
const endSubscription = (type: Type, id: string, error: EventError) => {
|
|
@@ -364,13 +326,11 @@ export function createEvents(): Events {
|
|
|
364
326
|
// terminated it; `close` is how the holder says its hold is over.
|
|
365
327
|
const open = async (type: Type, { id, delivery, arguments: args, context }: { id: string; delivery: DeliveryModeName; arguments: unknown; context: SubscriptionContext }, end: (error: EventError) => void): Promise<Held> => {
|
|
366
328
|
if (types.get(type.name) !== type) throw refusal(removed);
|
|
367
|
-
// Callers without an identity cannot be told apart, so they count together as one.
|
|
368
329
|
const who = caller(context) ?? "anonymous";
|
|
369
330
|
if (subscribed >= MAX_SUBSCRIPTIONS) throw refusal({ code: RESOURCE_EXHAUSTED, message: "ResourceExhausted", data: { limit: "subscriptions", max: MAX_SUBSCRIPTIONS } });
|
|
370
331
|
if ((callers.get(who) ?? 0) >= MAX_SUBSCRIPTIONS_PER_CALLER) throw refusal({ code: RESOURCE_EXHAUSTED, message: "ResourceExhausted", data: { limit: "subscriptionsPerCaller", max: MAX_SUBSCRIPTIONS_PER_CALLER } });
|
|
371
332
|
subscribed++;
|
|
372
333
|
count(callers, who, 1);
|
|
373
|
-
// A presence keeps a subscriber's value while any of its streams or leases is open.
|
|
374
334
|
const subscriber = named(args);
|
|
375
335
|
const hold = (by: number) => {
|
|
376
336
|
count(type.holds, subscriber, by);
|
|
@@ -396,8 +356,9 @@ export function createEvents(): Events {
|
|
|
396
356
|
current.held.delete(held);
|
|
397
357
|
if (current.held.size) return;
|
|
398
358
|
if (type.subscriptions.get(id) === current) type.subscriptions.delete(id);
|
|
399
|
-
// Only a subscription that was set up is told it ended.
|
|
400
|
-
|
|
359
|
+
// Only a subscription that was set up is told it ended. A teardown that fails has nobody to tell, and must not
|
|
360
|
+
// take the process down.
|
|
361
|
+
current.ready.then(subscription => type.onUnsubscribe?.(subscription)).catch(() => {});
|
|
401
362
|
} };
|
|
402
363
|
current.held.add(held);
|
|
403
364
|
try {
|
|
@@ -463,12 +424,10 @@ export function createEvents(): Events {
|
|
|
463
424
|
* Declares an event type and returns the function that emits it. `match` decides which subscriptions receive an
|
|
464
425
|
* event from their arguments, and `transform` shapes its data for each.
|
|
465
426
|
*/
|
|
466
|
-
event<A, D>(name: string,
|
|
427
|
+
event<A, D>(name: string, definition: EventDefinition<A, D>): Emitter<D, A> {
|
|
467
428
|
if (types.has(name)) throw new Error(`Event ${name} is already declared.`);
|
|
468
|
-
const unknown = delivery.filter(mode => !OFFERED.includes(mode));
|
|
469
|
-
if (unknown.length || !delivery.length) throw new Error(`Event ${name} is delivered by ${delivery.join(", ") || "nothing"}, but only ${OFFERED.join(", ")} are served.`);
|
|
470
429
|
const type: Type<A, D> = {
|
|
471
|
-
name, order: ++declared,
|
|
430
|
+
...definition, name, order: ++declared, delivery: definition.delivery ?? OFFERED,
|
|
472
431
|
sequence: 0, dropped: 0, kept: [], sinks: new Set(), subscriptions: new Map(), holds: new Map(), present: new Set(),
|
|
473
432
|
};
|
|
474
433
|
types.set(name, type);
|
|
@@ -484,7 +443,7 @@ export function createEvents(): Events {
|
|
|
484
443
|
for (const sink of type.sinks) sink();
|
|
485
444
|
},
|
|
486
445
|
cursor() {
|
|
487
|
-
return position(type);
|
|
446
|
+
return position(type.sequence);
|
|
488
447
|
},
|
|
489
448
|
terminate(id, error = forbidden) {
|
|
490
449
|
if (id !== undefined) return endSubscription(type, id, error);
|
|
@@ -530,19 +489,18 @@ export function createEvents(): Events {
|
|
|
530
489
|
|
|
531
490
|
/** Serves the declared event types on an MCP server: events/list, events/poll and events/stream. */
|
|
532
491
|
serve(mcp) {
|
|
533
|
-
|
|
534
|
-
const server = ("server" in mcp ? mcp.server : mcp) as unknown as Served;
|
|
492
|
+
const server = "server" in mcp ? mcp.server : mcp;
|
|
535
493
|
// The sketch declares capabilities.events. The MCP SDK's client drops top-level capabilities it does not know,
|
|
536
494
|
// so the extension is declared under capabilities.extensions too, where SDK clients read it.
|
|
537
495
|
// Clients are never told the event types changed: over Holon's stateless HTTP, the notification reaches none.
|
|
538
|
-
server.registerCapabilities({ events: { listChanged: false }, extensions: { [EVENTS_EXTENSION]: { listChanged: false } } });
|
|
496
|
+
server.registerCapabilities({ events: { listChanged: false }, extensions: { [EVENTS_EXTENSION]: { listChanged: false } } } as ServerCapabilities);
|
|
539
497
|
const json = (schema: StandardSchemaWithJSON) => schema["~standard"].jsonSchema.input({ target: "draft-2020-12" });
|
|
540
498
|
server.setRequestHandler("events/list", { params }, request => {
|
|
541
499
|
const all = [...types.values()];
|
|
542
500
|
let start = 0;
|
|
543
501
|
if (request.cursor != null) {
|
|
544
502
|
const after = Number(request.cursor);
|
|
545
|
-
if (typeof request.cursor !== "string" || !Number.isInteger(after)) throw new ProtocolError(
|
|
503
|
+
if (typeof request.cursor !== "string" || !Number.isInteger(after)) throw new ProtocolError(ProtocolErrorCode.InvalidParams, "Invalid cursor for events/list");
|
|
546
504
|
start = all.findIndex(type => type.order > after);
|
|
547
505
|
if (start < 0) start = all.length;
|
|
548
506
|
}
|
|
@@ -561,19 +519,19 @@ export function createEvents(): Events {
|
|
|
561
519
|
});
|
|
562
520
|
|
|
563
521
|
server.setRequestHandler("events/poll", { params }, async (request, ctx) => {
|
|
564
|
-
const { type, subscription: subscribed } = await subscription(request, ctx.http, "poll");
|
|
522
|
+
const { type, subscription: subscribed, cursor, maxAgeMs, maxEvents } = await subscription(request, ctx.http, "poll");
|
|
565
523
|
// Taken before the lease, which waits for onSubscribe. The sketch's poll from null returns no events and a
|
|
566
524
|
// fresh cursor: this one is where the subscription opened, so the next poll has what onSubscribe emitted.
|
|
567
525
|
const opened = type.sequence;
|
|
568
526
|
const held = await lease(type, subscribed);
|
|
569
527
|
// Each poll is answered for its own caller, with the lease's id.
|
|
570
|
-
const { events, start, failures, ...rest } = since(type, { ...subscribed, id: held.id, untargetable: held.untargetable },
|
|
528
|
+
const { events, start, failures, ...rest } = since(type, { ...subscribed, id: held.id, untargetable: held.untargetable }, cursor, { maxAgeMs, maxEvents, opened, ...(cursor === null && { until: opened }) });
|
|
571
529
|
// A poll carries its cursor once, for the whole response.
|
|
572
530
|
return { events: events.map(({ cursor, ...event }) => event), ...rest, nextPollMs: INTERVAL };
|
|
573
531
|
});
|
|
574
532
|
|
|
575
533
|
server.setRequestHandler("events/stream", { params }, async (request, ctx) => {
|
|
576
|
-
const { type, subscription: subscribed } = await subscription(request, ctx.http, "push");
|
|
534
|
+
const { type, subscription: subscribed, cursor: from, maxAgeMs } = await subscription(request, ctx.http, "push");
|
|
577
535
|
const { signal } = ctx.mcpReq;
|
|
578
536
|
const meta = { [SUBSCRIPTION_ID_META_KEY]: ctx.mcpReq.id };
|
|
579
537
|
let done = false;
|
|
@@ -623,7 +581,7 @@ export function createEvents(): Events {
|
|
|
623
581
|
// The stream follows its cursor, and emitted events wake it. What it is owed waits in the buffer, not here, so
|
|
624
582
|
// a slow client is not owed more memory than one batch; when what it is owed is no longer kept, it is told of
|
|
625
583
|
// the gap.
|
|
626
|
-
let cursor
|
|
584
|
+
let cursor = from;
|
|
627
585
|
let behind = true;
|
|
628
586
|
const sink = () => {
|
|
629
587
|
// Nothing emitted after the app terminated the stream is for it.
|
|
@@ -652,7 +610,7 @@ export function createEvents(): Events {
|
|
|
652
610
|
while (!done) {
|
|
653
611
|
if (behind) {
|
|
654
612
|
behind = false;
|
|
655
|
-
const result = since(type, held, cursor, { ...(first &&
|
|
613
|
+
const result = since(type, held, cursor, { ...(first && { maxAgeMs }), opened, until });
|
|
656
614
|
// The stream is confirmed before anything else is said on it.
|
|
657
615
|
if (first || result.truncated) await notify("active", { cursor: result.start, truncated: result.truncated });
|
|
658
616
|
if (first) beat = heartbeats();
|