dsh-interconnect 0.6.1 → 0.6.3

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/README.md CHANGED
@@ -48,9 +48,24 @@ session-b07326da-… [running]
48
48
  | `unreachable` | 没拿到可用答复(传输失败,或鉴权被拒) | 目标 session 可能完好,重试可能成功 |
49
49
  | `resume-refused` | 请求了唤醒,但对端不允许(`allowResume: false`) | 再带 `resume` 也没用 |
50
50
  | `resume-failed` | 允许唤醒且尝试了,但没得到 live agent(无此持久化 session,或被别的 owner 持有) | 换目标 |
51
+ | `session-owned-by-subagent` | 该 session 属于 subagent 路由,投递权在它的父 agent | 通过父 agent 触达,别直接投 |
51
52
 
52
53
  `reason` 恰好在 `delivered` 为 false 时出现。
53
54
 
55
+ 只有真的「尝试唤醒但失败」才是 `resume-failed`。没装 api-proxy 的部署里,`agent` lookup
56
+ 退化成一次 registry 查询、根本没有唤醒能力,这时报 `session-not-live`——否则会让调用方去重试
57
+ 一个永远不可能成功的操作。
58
+
59
+ ### subagent 会话不可直投
60
+
61
+ `interconnect_send` 不会往 subagent 拥有的 session 里投递,`interconnect_list` 也不会把它们
62
+ 列出来。那类 session 的投递权属于它的父 agent,从这里 splice 进 inbox 会和父 agent 抢。判定
63
+ 直接复用 Host 的 `hasApiRemoteSubagentOwner`(`@deepseek-ai/dsh-api-remotes`),而不是自己
64
+ 实现一份——这是安全规则,本地副本一定会和上游漂移。
65
+
66
+ 已实测:起一个真实 subagent 后,`interconnect_list` 不包含它;直接 `send` 到它的 id 返回
67
+ `session-owned-by-subagent`,消息**没有**进入 inbox。
68
+
54
69
  ### 唤醒离线 session(`resume`,默认关)
55
70
 
56
71
  `SendPayload.resume: true` 让对端唤醒一个已持久化但没有运行 agent 的 session。
package/lib/index.js CHANGED
@@ -1012,7 +1012,9 @@ var InterconnectService = class extends Service {
1012
1012
  fanout(notification) {
1013
1013
  const payload = { sender: this.instanceId, notification };
1014
1014
  for (const peer of this.peers) {
1015
- void this.post(peer, "event", payload);
1015
+ void this.post(peer, "event", payload).catch((error) => {
1016
+ this.ctx.logger.warn(`interconnect: event fan-out to ${peer} failed: ${error instanceof Error ? error.message : String(error)}`);
1017
+ });
1016
1018
  }
1017
1019
  this.broadcast(notification);
1018
1020
  }
@@ -1287,7 +1289,14 @@ var InterconnectService = class extends Service {
1287
1289
  }
1288
1290
  /** Inbound WebSocket upgrade: authenticate the bearer header, then accept. */
1289
1291
  async handleUpgrade(req, socket, head) {
1290
- const token = await this.resolveToken();
1292
+ let token;
1293
+ try {
1294
+ token = await this.resolveToken();
1295
+ } catch (error) {
1296
+ this.ctx.logger.warn(`interconnect: upgrade token read failed: ${error instanceof Error ? error.message : String(error)}`);
1297
+ socket.end("HTTP/1.1 403 Forbidden\r\nConnection: close\r\nContent-Length: 9\r\n\r\nforbidden");
1298
+ return;
1299
+ }
1291
1300
  if (token === void 0) {
1292
1301
  socket.end("HTTP/1.1 403 Forbidden\r\nConnection: close\r\nContent-Length: 9\r\n\r\nforbidden");
1293
1302
  return;
@@ -1342,7 +1351,11 @@ var InterconnectService = class extends Service {
1342
1351
  return;
1343
1352
  }
1344
1353
  const sender = this.peerOf.get(socket) ?? "unknown-peer";
1345
- this.receiveEvent({ sender, notification: frame.notification });
1354
+ try {
1355
+ this.receiveEvent({ sender, notification: frame.notification });
1356
+ } catch (error) {
1357
+ this.ctx.logger.warn(`interconnect: listener for a ${frame.notification.kind} event from ${sender} threw: ${error instanceof Error ? error.message : String(error)}`);
1358
+ }
1346
1359
  }
1347
1360
  };
1348
1361
  var UnknownEndpointError = class extends Error {
@@ -1388,6 +1401,9 @@ var LinkState = class {
1388
1401
  });
1389
1402
  socket.on("error", () => {
1390
1403
  });
1404
+ }).catch(() => {
1405
+ if (this.closed) return;
1406
+ this.scheduleReconnect();
1391
1407
  });
1392
1408
  }
1393
1409
  close() {
@@ -1012,7 +1012,9 @@ var InterconnectService = class extends Service {
1012
1012
  fanout(notification) {
1013
1013
  const payload = { sender: this.instanceId, notification };
1014
1014
  for (const peer of this.peers) {
1015
- void this.post(peer, "event", payload);
1015
+ void this.post(peer, "event", payload).catch((error) => {
1016
+ this.ctx.logger.warn(`interconnect: event fan-out to ${peer} failed: ${error instanceof Error ? error.message : String(error)}`);
1017
+ });
1016
1018
  }
1017
1019
  this.broadcast(notification);
1018
1020
  }
@@ -1287,7 +1289,14 @@ var InterconnectService = class extends Service {
1287
1289
  }
1288
1290
  /** Inbound WebSocket upgrade: authenticate the bearer header, then accept. */
1289
1291
  async handleUpgrade(req, socket, head) {
1290
- const token = await this.resolveToken();
1292
+ let token;
1293
+ try {
1294
+ token = await this.resolveToken();
1295
+ } catch (error) {
1296
+ this.ctx.logger.warn(`interconnect: upgrade token read failed: ${error instanceof Error ? error.message : String(error)}`);
1297
+ socket.end("HTTP/1.1 403 Forbidden\r\nConnection: close\r\nContent-Length: 9\r\n\r\nforbidden");
1298
+ return;
1299
+ }
1291
1300
  if (token === void 0) {
1292
1301
  socket.end("HTTP/1.1 403 Forbidden\r\nConnection: close\r\nContent-Length: 9\r\n\r\nforbidden");
1293
1302
  return;
@@ -1342,7 +1351,11 @@ var InterconnectService = class extends Service {
1342
1351
  return;
1343
1352
  }
1344
1353
  const sender = this.peerOf.get(socket) ?? "unknown-peer";
1345
- this.receiveEvent({ sender, notification: frame.notification });
1354
+ try {
1355
+ this.receiveEvent({ sender, notification: frame.notification });
1356
+ } catch (error) {
1357
+ this.ctx.logger.warn(`interconnect: listener for a ${frame.notification.kind} event from ${sender} threw: ${error instanceof Error ? error.message : String(error)}`);
1358
+ }
1346
1359
  }
1347
1360
  };
1348
1361
  var UnknownEndpointError = class extends Error {
@@ -1388,6 +1401,9 @@ var LinkState = class {
1388
1401
  });
1389
1402
  socket.on("error", () => {
1390
1403
  });
1404
+ }).catch(() => {
1405
+ if (this.closed) return;
1406
+ this.scheduleReconnect();
1391
1407
  });
1392
1408
  }
1393
1409
  close() {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/interconnect/index.ts", "../../../.dsh/source/staging-20260807T143236Z/vendor/cosmokit/src/misc.ts", "../../../.dsh/source/staging-20260807T143236Z/vendor/cosmokit/src/types.ts", "../../../.dsh/source/staging-20260807T143236Z/vendor/cosmokit/src/time.ts", "../../../.dsh/source/staging-20260807T143236Z/vendor/schemastery/lib/index.mjs", "../../src/interconnect/types.ts"],
4
- "sourcesContent": ["/**\n * Cross-instance message handoff service: inbound half owns one HTTP route on\n * the host webserver and delivers authenticated messages into live sessions;\n * outbound half POSTs the same wire shape to a peer instance.\n *\n * Transport is deliberately NOT the Connection RPC channel: that registry's\n * handler sees only `(endpoint, payload, signal)` and the trust fence is the\n * DNS-rebinding `trustedHosts` check, neither of which carries the shared-key\n * `Authorization` header this service authenticates on. Owning a plain HTTP\n * route keeps bearer-token auth at the boundary where the header is readable\n * and fails closed when the token is unconfigured.\n * @module @deepseek-ai/dsh-interconnect\n */\n\nimport { Context, Service } from '@deepseek-ai/cordis'\nimport type { IncomingMessage, ServerResponse } from 'node:http'\nimport type { Duplex } from 'node:stream'\nimport type { WebRoute, WebUpgradeRoute } from '@deepseek-ai/dsh-host-webserver'\nimport {\n clientRequestSchema,\n serverResponseSchema,\n RpcId,\n type RpcError,\n} from '@deepseek-ai/dsh-host-apiproxy/api'\nimport { credentialRef } from '@deepseek-ai/dsh-credentials'\nimport { boundContextSummary, createUserMessage } from '@deepseek-ai/dsh-llm'\nimport type { Agent } from '@deepseek-ai/dsh-agent'\n// The Host's own subagent-ownership predicate, reused rather than reimplemented:\n// this is a safety rule, and a local copy of it would drift from the Host's.\nimport { hasApiRemoteSubagentOwner } from '@deepseek-ai/dsh-api-remotes'\nimport type { Session } from '@deepseek-ai/dsh-session'\nimport type { SubagentRunEndInfo } from '@deepseek-ai/dsh-subagent'\nimport z from '@deepseek-ai/schemastery'\nimport WebSocket, { WebSocketServer } from 'ws'\nimport type { RawData } from 'ws'\nimport {\n INTERCONNECT_CHANNEL,\n INTERCONNECT_TOKEN_REF,\n type Config,\n type DeliveryMode,\n type EventNotification,\n type EventPayload,\n type LinkFrame,\n type ListResult,\n type PingResult,\n type SendPayload,\n type SendResult,\n type SendRequest,\n type SendFailure,\n type SessionSummary,\n type WebSocketLinkHandle,\n} from './types.ts'\n\nexport type * from './types.ts'\nexport { INTERCONNECT_CHANNEL, INTERCONNECT_TOKEN_REF } from './types.ts'\n\ndeclare module '@deepseek-ai/cordis' {\n interface Context {\n interconnect: InterconnectService\n }\n interface Events {\n /**\n * A remote peer instance pushed one authenticated lifecycle notification\n * into this instance. Payload is the exact {@link EventNotification} that\n * crossed the wire; listeners may react but must not block the HTTP ack.\n */\n 'interconnect/event'(notification: EventNotification, peer: string): void\n }\n}\n\nconst INVALID_REQUEST_RPC_ID = RpcId('invalid-request')\n/** Headroom for the request body so a malicious sender cannot pin the process. */\nconst MAX_REQUEST_BODY_BYTES = 1024 * 1024\n\n/** `source.plugin` for messages this service splices into a local inbox. */\nconst PLUGIN_SOURCE = 'dsh-interconnect'\n\n/** WebSocket upgrade pathname owning the persistent peer link. */\nconst LINK_CHANNEL = '/interconnect/link'\n\n/** Wire union for the discriminated EventNotification fact (shared by HTTP and WS). */\nconst notificationSchema = z.union([\n z.object({ kind: z.const('agent/created'), sessionId: z.string() }),\n z.object({ kind: z.const('agent/disposed'), sessionId: z.string() }),\n z.object({ kind: z.const('agent/status'), sessionId: z.string(), status: z.union([z.const('idle'), z.const('running')]) }),\n z.object({ kind: z.const('session/created'), sessionId: z.string(), parentSessionId: z.string() }),\n z.object({ kind: z.const('session/disposed'), sessionId: z.string() }),\n z.object({ kind: z.const('subagent/end'), provider: z.string(), childSessionId: z.string(), stopReason: z.string() }),\n])\n\n/** Wire union for one WebSocket link text frame. */\nconst linkFrameSchema = z.union([\n z.object({ type: z.const('hello'), sender: z.string() }),\n z.object({ type: z.const('event'), notification: notificationSchema }),\n])\n\n/**\n * Wire union the send endpoint expects inside the ClientRequest payload slot.\n * `delivery` is optional and constrained to the same three names the config\n * accepts, so an unknown mode fails the envelope instead of reaching a method\n * lookup on `Agent`.\n */\nconst sendPayloadSchema = z.object({\n sessionId: z.string(),\n text: z.string(),\n delivery: z.union([z.const('followup'), z.const('steer'), z.const('inject')]),\n resume: z.boolean(),\n})\n\n/** Wire union the event endpoint expects \u2014 sender identity wrapping a discriminated fact. */\nconst eventPayloadSchema = z.object({\n sender: z.string(),\n notification: notificationSchema,\n})\n\n/**\n * Live cross-instance handoff service, registered as `ctx.interconnect`.\n * Requires the host webserver, the live agent registry, and the credential\n * store; activation is availability-driven like every other host service.\n */\nexport class InterconnectService extends Service {\n static inject = ['webServer', 'agents', 'credentials']\n static Config: z<Config> = z.object({\n instanceId: z.string().default('dsh'),\n requestTimeoutMs: z.natural().max(60000).default(10000),\n peers: z.array(z.string()).default([]),\n delivery: z.union([z.const('followup'), z.const('steer'), z.const('inject')]).default('followup'),\n allowResume: z.boolean().default(true),\n })\n\n private readonly instanceId: string\n private readonly requestTimeoutMs: number\n private readonly delivery: DeliveryMode\n private readonly allowResume: boolean\n private readonly peers = new Set<string>()\n private readonly subscriptions: (() => void)[] = []\n private readonly server = new WebSocketServer({ noServer: true })\n private readonly sockets = new Set<WebSocket>()\n private readonly linkStates = new Map<string, LinkState>()\n private heartbeatTimer: NodeJS.Timeout | undefined\n /** Peer identity each live socket announced via its `hello` frame, if any. */\n private readonly peerOf = new WeakMap<WebSocket, string>()\n\n constructor(ctx: Context, config: Config) {\n super(ctx, 'interconnect')\n this.instanceId = config.instanceId\n this.requestTimeoutMs = config.requestTimeoutMs\n this.delivery = config.delivery ?? 'followup'\n this.allowResume = config.allowResume ?? true\n for (const peer of config.peers ?? []) this.peers.add(trimBase(peer))\n\n const route: WebRoute = {\n kind: 'prefix',\n path: INTERCONNECT_CHANNEL,\n handler: (req, res) => this.handle(req, res),\n }\n ctx.effect(() => ctx.webServer.register(route), 'interconnect: /interconnect route')\n\n const upgrade: WebUpgradeRoute = {\n path: LINK_CHANNEL,\n handler: (req, socket, head) => { void this.handleUpgrade(req, socket, head) },\n }\n ctx.effect(() => ctx.webServer.registerUpgrade(upgrade), 'interconnect: /interconnect/link websocket')\n\n // Liveness sweep: terminate sockets that stopped answering protocol pings.\n this.heartbeatTimer = setInterval(() => {\n for (const socket of this.sockets) {\n if ((socket as WebSocket & { isAlive?: boolean }).isAlive === false) {\n socket.terminate()\n this.sockets.delete(socket)\n continue\n }\n ;(socket as WebSocket & { isAlive?: boolean }).isAlive = false\n socket.ping()\n }\n }, 30000)\n\n this.subscriptions.push(ctx.on('agent/status', ({ agent, status }) => {\n this.fanout({ kind: 'agent/status', sessionId: String(agent.session.id), status })\n }))\n this.subscriptions.push(ctx.on('agent/created', ({ agent }) => {\n this.fanout({ kind: 'agent/created', sessionId: String(agent.session.id) })\n }))\n this.subscriptions.push(ctx.on('agent/disposed', ({ agent }) => {\n this.fanout({ kind: 'agent/disposed', sessionId: String(agent.session.id) })\n }))\n this.subscriptions.push(ctx.on('session/created', (session: Session) => {\n const parentSessionId = session.header.parentSession === undefined\n ? undefined\n : String(session.header.parentSession)\n this.fanout({\n kind: 'session/created',\n sessionId: String(session.id),\n ...(parentSessionId === undefined ? {} : { parentSessionId }),\n })\n }))\n this.subscriptions.push(ctx.on('session/disposed', (session: Session) => {\n this.fanout({ kind: 'session/disposed', sessionId: String(session.id) })\n }))\n this.subscriptions.push(ctx.on('subagent/end', (info: SubagentRunEndInfo) => {\n // Only in-process children are this instance's own work; remote provider\n // runs settle through a different, non-local path.\n if (!info.local) return\n this.fanout({\n kind: 'subagent/end',\n provider: info.provider,\n childSessionId: String(info.id),\n stopReason: info.stopReason,\n })\n }))\n\n // Clean up the event listeners with the service fiber.\n ctx.effect(() => () => {\n for (const dispose of this.subscriptions.splice(0)) dispose()\n }, 'interconnect: event subscriptions')\n\n // Terminate every live socket, outbound dial loop, and the no-server\n // acceptor when the service fiber unwinds.\n ctx.effect(() => () => {\n if (this.heartbeatTimer !== undefined) clearInterval(this.heartbeatTimer)\n for (const state of this.linkStates.values()) state.close()\n this.linkStates.clear()\n for (const socket of this.sockets) socket.terminate()\n this.sockets.clear()\n this.server.close()\n }, 'interconnect: websocket teardown')\n }\n\n async send(request: SendRequest): Promise<SendResult> {\n // Spread the override only when present: JSON.stringify would otherwise\n // drop an explicit `delivery: undefined` anyway, but building the key\n // conditionally keeps the wire shape identical to a caller that omitted it.\n const payload: SendPayload = {\n sessionId: request.sessionId,\n text: request.text,\n ...(request.delivery === undefined ? {} : { delivery: request.delivery }),\n ...(request.resume === undefined ? {} : { resume: request.resume }),\n }\n const result = await this.post<SendResult>(request.baseUrl, 'send', payload)\n // No usable answer means the receiver never spoke, so the instance id here\n // is this sender's own \u2014 hence `unreachable` rather than any claim about\n // the target session, which may be perfectly fine.\n return result ?? { delivered: false, instance: this.instanceId, reason: 'unreachable' }\n }\n\n async ping(baseUrl: string): Promise<PingResult | undefined> {\n return this.post<PingResult>(baseUrl, 'ping', {})\n }\n\n /**\n * List the peer's live sessions so a caller can discover a valid `send`\n * target. `undefined` on transport or auth failure, matching `ping`.\n */\n async list(baseUrl: string): Promise<ListResult | undefined> {\n return this.post<ListResult>(baseUrl, 'list', {})\n }\n\n /**\n * Add a peer origin to the event fan-out set at runtime. Returns a disposer\n * that removes it. Duplicate origins are idempotent.\n * @param peer - receiver origin, e.g. `http://127.0.0.1:3080`.\n * @returns disposer removing the peer from the fan-out set.\n */\n subscribe(peer: string): () => void {\n const trimmed = trimBase(peer)\n this.peers.add(trimmed)\n return () => { this.peers.delete(trimmed) }\n }\n\n /** Remove a peer origin from the event fan-out set. */\n unsubscribe(peer: string): void {\n this.peers.delete(trimBase(peer))\n }\n\n /**\n * Open (and, on drop, re-open) a persistent WebSocket link to a peer. Local\n * events stream over the link in real time, and events the peer pushes are\n * surfaced as `interconnect/event`. Repeating for the same peer returns the\n * existing handle.\n * @param peer - receiver origin, e.g. `http://127.0.0.1:3080` (dialed as `ws:`).\n * @returns a handle closing the link and cancelling reconnection.\n */\n link(peer: string): WebSocketLinkHandle {\n const trimmed = trimBase(peer)\n const existing = this.linkStates.get(trimmed)\n if (existing !== undefined) return existing\n const state = new LinkState(this, trimmed)\n this.linkStates.set(trimmed, state)\n state.dial()\n return state\n }\n\n /** Remove a closed outbound link's state so a later `link` re-dials fresh. */\n forgetLink(peer: string): void {\n this.linkStates.delete(peer)\n }\n\n /** Fan one serialized lifecycle fact out to every registered peer, fire-and-forget. */\n private fanout(notification: EventNotification): void {\n const payload: EventPayload = { sender: this.instanceId, notification }\n for (const peer of this.peers) {\n void this.post(peer, 'event', payload)\n }\n this.broadcast(notification)\n }\n\n /** Push one fact over every live WebSocket link, dropping closed sockets. */\n private broadcast(notification: EventNotification): void {\n if (this.sockets.size === 0) return\n const frame: LinkFrame = { type: 'event', notification }\n const encoded = JSON.stringify(frame)\n for (const socket of this.sockets) {\n if (socket.readyState !== WebSocket.OPEN) {\n this.sockets.delete(socket)\n continue\n }\n socket.send(encoded)\n }\n }\n\n /** Inbound route handler: bearer auth first, then envelope dispatch. */\n private async handle(req: IncomingMessage, res: ServerResponse): Promise<void> {\n const token = await this.resolveToken()\n if (token === undefined) {\n res.writeHead(403)\n res.end('forbidden')\n return\n }\n const expected = `Bearer ${token}`\n const header = req.headers.authorization\n // Timing-safe compare so an attacker cannot siphon the token by timing.\n if (header === undefined || !timingSafeEqual(header, expected)) {\n res.writeHead(401)\n res.end('unauthorized')\n return\n }\n await this.dispatch(req, res)\n }\n\n /** Parse the ClientRequest envelope and route to the named endpoint. */\n private async dispatch(req: IncomingMessage, res: ServerResponse): Promise<void> {\n const pathname = new URL(req.url ?? '/', 'http://dsh.internal').pathname\n const endpoint = endpointFromPath(INTERCONNECT_CHANNEL, pathname)\n if (req.method !== 'POST' || endpoint === undefined) {\n res.writeHead(404)\n res.end('not found')\n return\n }\n\n const mediaType = (req.headers['content-type'] ?? '').split(';', 1)[0]?.trim().toLowerCase()\n if (mediaType !== 'application/json') {\n res.writeHead(415)\n res.end('content type must be application/json')\n return\n }\n\n const body = await readBody(req)\n if (body === undefined) {\n res.writeHead(413)\n res.end('body too large')\n return\n }\n\n let envelope: { rpcId: unknown; method: unknown; payload: unknown }\n try {\n envelope = JSON.parse(body) as { rpcId: unknown; method: unknown; payload: unknown }\n } catch {\n res.writeHead(400)\n res.end('body is not JSON')\n return\n }\n\n const parsed = clientRequestSchema.safeParse(envelope)\n const rpcId = typeof envelope.rpcId === 'string' ? RpcId(envelope.rpcId) : INVALID_REQUEST_RPC_ID\n if (!parsed.success) {\n writeError(res, rpcId, {\n code: 'bad-request',\n message: 'invalid client-request message',\n details: { issues: parsed.error.issues },\n })\n return\n }\n if (parsed.data.method !== endpoint) {\n writeError(res, rpcId, {\n code: 'bad-request',\n message: `method ${JSON.stringify(parsed.data.method)} does not match endpoint ${JSON.stringify(endpoint)}`,\n details: { issues: [] },\n })\n return\n }\n\n try {\n // Awaited: `send` may resume a persisted session, which is asynchronous.\n // Without the await a Promise would serialize as `{}` and every async\n // rejection would escape this catch as an unhandled rejection.\n const value = await this.runEndpoint(endpoint, parsed.data.payload)\n writeFull(res, rpcId, { ok: true, value })\n } catch (error) {\n if (error instanceof UnknownEndpointError) {\n res.writeHead(404)\n res.end('not found')\n return\n }\n // A payload the endpoint schema rejects is the caller's error, so it gets\n // `bad-request` and no warning: logging it would let a peer fill this\n // instance's log by sending malformed payloads.\n if (error instanceof InvalidPayloadError) {\n writeError(res, rpcId, {\n code: 'bad-request',\n message: error.message,\n details: { issues: [] },\n })\n return\n }\n this.ctx.logger.warn(error instanceof Error ? error : new Error(String(error)))\n writeError(res, rpcId, {\n code: 'internal',\n message: error instanceof Error ? error.message : String(error),\n details: {},\n })\n }\n }\n\n /** Dispatch one authenticated business call. */\n private async runEndpoint(endpoint: string, payload: unknown): Promise<unknown> {\n if (endpoint === 'ping') {\n return { pong: true, instance: this.instanceId }\n }\n if (endpoint === 'send') {\n let parsed: SendPayload\n try {\n parsed = z.resolve(payload, sendPayloadSchema, {})[0] as SendPayload\n } catch (error) {\n throw new InvalidPayloadError(`send payload invalid: ${error instanceof Error ? error.message : String(error)}`)\n }\n return this.deliver(parsed)\n }\n if (endpoint === 'list') {\n return this.listSessions()\n }\n if (endpoint === 'event') {\n let eventPayload: EventPayload\n try {\n eventPayload = z.resolve(payload, eventPayloadSchema, {})[0] as EventPayload\n } catch (error) {\n throw new InvalidPayloadError(`event payload invalid: ${error instanceof Error ? error.message : String(error)}`)\n }\n this.receiveEvent(eventPayload)\n return { accepted: true }\n }\n throw new UnknownEndpointError(endpoint)\n }\n\n /** Surface one remote notification to local listeners and the log. */\n private receiveEvent(eventPayload: EventPayload): void {\n this.ctx.logger.info(`interconnect: remote event ${eventPayload.notification.kind} from ${eventPayload.sender}`)\n this.ctx.emit('interconnect/event', eventPayload.notification, eventPayload.sender)\n }\n\n /**\n * Summarize every live local session so a sender can discover valid targets\n * instead of having to know a session id already. Only live agents are listed\n * because `send` can reach exactly those.\n *\n * Title and status are best-effort: the title projection is an optional\n * service, and a receiver without it still returns the ids. A projection that\n * throws degrades that one row rather than failing the whole listing, which\n * matches how the Host's own session listing treats its projection column.\n */\n private listSessions(): ListResult {\n // `agents.list()` includes subagent children; a row this instance would\n // refuse to deliver to must not be advertised as a target, or the listing\n // contradicts `send`.\n const reachable = this.ctx.agents.list()\n .filter(agent => !hasApiRemoteSubagentOwner(this.ctx, agent.session, agent))\n const sessions = reachable.map((agent): SessionSummary => {\n let title: string | undefined\n try {\n const snapshot = this.ctx.get('sessionProjections')?.snapshot(agent.session)\n const value = snapshot?.values.title\n if (typeof value === 'string' && value !== '') title = value\n } catch {\n // A failing projection must not hide a reachable session.\n title = undefined\n }\n return {\n sessionId: agent.id,\n ...(title === undefined ? {} : { title }),\n ...(typeof agent.status === 'string' ? { status: agent.status } : {}),\n }\n })\n return { sessions, instance: this.instanceId }\n }\n\n /**\n * Resolve a session that is not currently live, when the sender asked to wake\n * it. Returns the agent, or the reason it stays undelivered.\n *\n * The resume is delegated to the Host's configured `agent` lookup rather than\n * calling `ctx.agents.resume()` here, and that is the whole point: a handle\n * from `resume()` is owned by the CALLING context, so resuming on this\n * plugin's fiber would tear the session down again the moment the plugin\n * unloads (measured: the same call through the root context leaves it alive).\n * The Host's resolver owns it instead, and it also composes the preset the\n * session recorded \u2014 so a woken agent comes back with the toolset its history\n * was produced under, not an empty one.\n */\n private async wake(payload: SendPayload): Promise<{ agent: Agent } | { reason: SendFailure }> {\n if (payload.resume !== true) return { reason: 'session-not-live' }\n if (!this.allowResume) return { reason: 'resume-refused' }\n // Optional by design: a deployment without the Host's lookup (headless, or\n // a profile with no api-proxy) degrades to the plain not-live answer rather\n // than failing the call.\n const lookup = this.ctx.get('typert')?.lookups.get('agent')\n if (lookup === undefined) return { reason: 'session-not-live' }\n try {\n const resolved = await lookup.resolve(payload.sessionId as never)\n // `undefined` is not a failed wake: the base `agent` provider is a plain\n // registry read, so a deployment without the Host's resuming resolver\n // answers undefined for every id that is not already live. Reporting\n // `resume-failed` there would send the caller chasing a wake that was\n // never possible, when the honest answer is that nothing is live here.\n if (resolved === undefined || resolved === null) return { reason: 'session-not-live' }\n return { agent: resolved as Agent }\n } catch (error) {\n // A refusing resolver is an expected outcome, not a fault of this\n // instance: the id may not exist, or a subagent owner may hold it.\n this.ctx.logger.info(`interconnect: resume refused for ${payload.sessionId}: ${error instanceof Error ? error.message : String(error)}`)\n return { reason: 'resume-failed' }\n }\n }\n\n /**\n * Deliver one message to a live local session, waking a persisted one only\n * when the sender asked and this receiver allows it.\n */\n private async deliver(payload: SendPayload): Promise<SendResult> {\n let agent = this.ctx.agents.get(payload.sessionId as Agent['id'])\n if (agent === undefined) {\n const woken = await this.wake(payload)\n if ('reason' in woken) {\n return { delivered: false, instance: this.instanceId, reason: woken.reason }\n }\n agent = woken.agent\n }\n // Fence the live-hit path too, exactly as the Host does before handing out a\n // live agent: a session reserved to subagent routing is delivered to by its\n // parent, and splicing into its inbox from here would race that parent. The\n // wake path needs no separate check because the Host's resolver applies the\n // same fence internally.\n if (hasApiRemoteSubagentOwner(this.ctx, agent.session, agent)) {\n return { delivered: false, instance: this.instanceId, reason: 'session-owned-by-subagent' }\n }\n // Attribute the message to this plugin, not to the human operator: the\n // receiving agent must be able to tell a cross-instance handoff from text\n // its own user typed. `SendPayload` carries no sender field (the wire shape\n // is unauthenticated beyond the shared token), so the notice names the\n // receiving instance the handoff landed on.\n const message = createUserMessage({\n source: {\n kind: 'plugin',\n plugin: PLUGIN_SOURCE,\n form: 'notice',\n summary: boundContextSummary(`interconnect handoff delivered on instance ${this.instanceId}`),\n },\n content: [{ type: 'text', text: payload.text }],\n })\n // The sender may override the mode per message, because urgency belongs to\n // one message rather than to the link; an absent override leaves the\n // receiver's configured default in force. The switch is exhaustive over\n // DeliveryMode so adding a mode fails the type check here instead of\n // silently falling through to `followup`.\n const mode: DeliveryMode = payload.delivery ?? this.delivery\n switch (mode) {\n case 'steer':\n agent.steer(message)\n break\n case 'inject':\n agent.inject(message)\n break\n case 'followup':\n agent.followup(message)\n break\n }\n return { delivered: true, instance: this.instanceId, delivery: mode }\n }\n\n /** POST one business call to a peer instance; undefined on transport/auth failure. */\n private async post<T>(baseUrl: string, endpoint: string, payload: unknown): Promise<T | undefined> {\n const token = await this.resolveToken()\n if (token === undefined) return undefined\n const url = `${trimBase(baseUrl)}${INTERCONNECT_CHANNEL}/${endpoint}`\n const envelope = {\n type: 'client-request',\n rpcId: crypto.randomUUID(),\n method: endpoint,\n payload,\n }\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(envelope),\n signal: AbortSignal.timeout(this.requestTimeoutMs),\n })\n if (!response.ok) return undefined\n const body = (await response.json()) as { result?: { ok?: boolean; value?: unknown } }\n if (body.result?.ok !== true) return undefined\n return body.result.value as T\n } catch (error) {\n this.ctx.logger.warn(`interconnect: ${endpoint} to ${baseUrl} failed: ${error instanceof Error ? error.message : String(error)}`)\n return undefined\n }\n }\n\n private async resolveToken(): Promise<string | undefined> {\n const credential = await this.ctx.credentials.resolve(credentialRef(INTERCONNECT_TOKEN_REF))\n return credential === undefined || credential.value.length === 0 ? undefined : credential.value\n }\n\n /** Resolve the shared token for an outbound dial (same source as inbound). */\n resolveTokenForDial(): Promise<string | undefined> {\n return this.resolveToken()\n }\n\n /** Inbound WebSocket upgrade: authenticate the bearer header, then accept. */\n private async handleUpgrade(req: IncomingMessage, socket: Duplex, head: Buffer): Promise<void> {\n const token = await this.resolveToken()\n if (token === undefined) {\n socket.end('HTTP/1.1 403 Forbidden\\r\\nConnection: close\\r\\nContent-Length: 9\\r\\n\\r\\nforbidden')\n return\n }\n const expected = `Bearer ${token}`\n const header = req.headers.authorization\n if (header === undefined || !timingSafeEqual(header, expected)) {\n socket.end('HTTP/1.1 401 Unauthorized\\r\\nConnection: close\\r\\nContent-Length: 12\\r\\n\\r\\nunauthorized')\n return\n }\n this.server.handleUpgrade(req, socket, head, (websocket) => {\n this.attachSocket(websocket)\n })\n }\n\n /**\n * Install frame + liveness handling on one socket and add it to the live\n * pool. Used by both the server half (accepted upgrade) and the client half\n * (outbound dial), so a single socket carries events both directions.\n */\n attachSocket(websocket: WebSocket): void {\n this.sockets.add(websocket)\n ;(websocket as WebSocket & { isAlive: boolean }).isAlive = true\n websocket.on('pong', () => {\n ;(websocket as WebSocket & { isAlive: boolean }).isAlive = true\n })\n websocket.on('message', (data: RawData) => {\n this.handleFrame(websocket, data)\n })\n websocket.on('close', () => {\n this.sockets.delete(websocket)\n this.peerOf.delete(websocket)\n })\n websocket.on('error', () => {\n this.sockets.delete(websocket)\n })\n // Announce this instance's identity so the dialer can attribute pushes.\n websocket.send(JSON.stringify({ type: 'hello', sender: this.instanceId } satisfies LinkFrame))\n }\n\n /** Parse and route one inbound link frame, attributing events to the socket's announced peer. */\n private handleFrame(socket: WebSocket, data: RawData): void {\n if (Array.isArray(data)) return // binary frames are a protocol violation; ignore\n const text = Buffer.isBuffer(data) ? data.toString('utf8') : Buffer.from(data).toString('utf8')\n let frame: LinkFrame\n try {\n frame = z.resolve(JSON.parse(text), linkFrameSchema, {})[0] as LinkFrame\n } catch {\n this.ctx.logger.warn('interconnect: dropping malformed link frame')\n return\n }\n if (frame.type === 'hello') {\n this.peerOf.set(socket, frame.sender)\n return\n }\n const sender = this.peerOf.get(socket) ?? 'unknown-peer'\n this.receiveEvent({ sender, notification: frame.notification })\n }\n}\n\n/** Thrown for an endpoint this channel does not own; mapped to HTTP 404. */\nclass UnknownEndpointError extends Error {\n constructor(endpoint: string) {\n super(`unknown interconnect endpoint ${JSON.stringify(endpoint)}`)\n this.name = 'UnknownEndpointError'\n }\n}\n\n/**\n * Thrown when an authenticated envelope carries a business payload its endpoint\n * schema rejects. Typed so the request catch can answer `bad-request` instead of\n * `internal`: the caller sent an unusable payload, so retrying it unchanged can\n * never succeed, and the receiver is not faulty.\n */\nclass InvalidPayloadError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'InvalidPayloadError'\n }\n}\n\n/**\n * One outbound WebSocket peer link: dials, re-dials with backoff after an\n * unexpected drop, and pushes local events over the live socket. The owning\n * service streams events via {@link InterconnectService.broadcast} only to\n * sockets it accepted; this dialer keeps its own socket OUT of that set and\n * instead subscribes to local events through the service's fan-out via a\n * dedicated route below.\n */\nclass LinkState implements WebSocketLinkHandle {\n private socket: WebSocket | undefined\n private closed = false\n private retry = 0\n private reconnectTimer: ReturnType<typeof setTimeout> | undefined\n\n readonly peer: string\n\n constructor(\n private readonly owner: InterconnectService,\n peer: string,\n ) {\n this.peer = peer\n }\n\n /** Open the socket; reconnect is scheduled by the close handler. */\n dial(): void {\n if (this.closed) return\n const url = new URL('/interconnect/link', this.peer)\n url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:'\n void this.owner.resolveTokenForDial().then((token) => {\n if (token === undefined || this.closed) return\n const socket = new WebSocket(url, {\n headers: { authorization: `Bearer ${token}` },\n })\n this.socket = socket\n socket.once('open', () => {\n this.retry = 0\n // Same handler as the server half: adds to the live pool and announces\n // this instance's identity over the now-open link.\n this.owner.attachSocket(socket)\n })\n socket.once('close', () => {\n if (this.closed) return\n this.scheduleReconnect()\n })\n socket.on('error', () => {\n // close follows; reconnect is scheduled there.\n })\n })\n }\n\n close(): void {\n this.closed = true\n this.owner.forgetLink(this.peer)\n if (this.reconnectTimer !== undefined) clearTimeout(this.reconnectTimer)\n const socket = this.socket\n if (socket !== undefined) {\n socket.removeAllListeners()\n socket.terminate()\n }\n }\n\n private scheduleReconnect(): void {\n const delay = Math.min(30000, 1000 * 2 ** this.retry)\n this.retry += 1\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = undefined\n this.dial()\n }, delay)\n }\n}\n\nfunction endpointFromPath(channel: string, pathname: string): string | undefined {\n if (!pathname.startsWith(`${channel}/`)) return undefined\n return pathname.slice(channel.length + 1)\n}\n\n/** Read a request body up to the cap; undefined when it exceeds the cap. */\nasync function readBody(req: IncomingMessage): Promise<string | undefined> {\n let size = 0\n const chunks: Buffer[] = []\n for await (const chunk of req) {\n const buffer = chunk as Buffer\n size += buffer.byteLength\n if (size > MAX_REQUEST_BODY_BYTES) return undefined\n chunks.push(buffer)\n }\n return Buffer.concat(chunks).toString()\n}\n\n/** Constant-time string comparison over the ASCII-encoded lengths. */\nfunction timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false\n let diff = 0\n for (let i = 0; i < a.length; i += 1) {\n diff |= a.charCodeAt(i) ^ b.charCodeAt(i)\n }\n return diff === 0\n}\n\nfunction trimBase(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '')\n}\n\nfunction writeFull(\n res: ServerResponse,\n rpcId: unknown,\n result: { ok: true; value?: unknown } | { ok: false; error: RpcError },\n): void {\n const body = serverResponseSchema.parse({\n type: 'server-response',\n rpcId,\n result,\n })\n res.writeHead(200, { 'content-type': 'application/json' })\n res.end(JSON.stringify(body))\n}\n\nfunction writeError(res: ServerResponse, rpcId: unknown, error: RpcError): void {\n writeFull(res, rpcId, { ok: false, error })\n}\n\nexport default InterconnectService\n", "/** String/symbol keyed dictionary type. */\nexport type Dict<T = any, K extends string | symbol = string> = { [key in K]: T }\n/** Safely read `T[K]`, returning `never` when `K` is not a key of `T`. */\nexport type Get<T extends {}, K> = K extends keyof T ? T[K] : never\n/** Conditional extraction helper with a configurable return type. */\nexport type Extract<S, T, U = S> = S extends T ? U : never\n/** Accept a value or an array, unless the value is already an array type. */\nexport type MaybeArray<T> = [T] extends [unknown[]] ? T : T | T[]\n/** Wrap a value in `Promise`, preserving the resolved type of existing promises. */\nexport type Promisify<T> = Promise<T extends Promise<infer S> ? S : T>\n/** Accept a value or promise unless the value type is already promise-like. */\nexport type Awaitable<T> = [T] extends [Promise<unknown>] ? T : T | Promise<T>\n/** Convert a union type to an intersection type. */\nexport type Intersect<U> = (U extends any ? (arg: U) => void : never) extends ((arg: infer I) => void) ? I : never\n\n/** No-op callback returning `undefined` at runtime and `any` at type level. */\nexport function noop(): any {}\n\n/** Return true when a value is `null` or `undefined`. */\nexport function isNullable(value: any): value is null | undefined | void {\n return value === null || value === undefined\n}\n\n/** Return true when a value is neither `null` nor `undefined`. */\nexport function isNonNullable<T>(value: T): value is NonNullable<T> {\n return !isNullable(value)\n}\n\n/** Return true for non-array object values. */\nexport function isPlainObject(data: any) {\n return data && typeof data === 'object' && !Array.isArray(data)\n}\n\n/** Filter object entries with a key type guard. */\nexport function filterKeys<T, K extends string, U extends K>(object: Dict<T, K>, filter: (key: K, value: T) => key is U): Dict<T, U>\n/** Filter object entries with a boolean predicate. */\nexport function filterKeys<T, K extends string>(object: Dict<T, K>, filter: (key: K, value: T) => boolean): Dict<T, K>\n/** Filter object entries and return a new object. */\nexport function filterKeys(object: {}, filter: (key: string, value: any) => boolean) {\n return Object.fromEntries(Object.entries(object).filter(([key, value]) => filter(key, value)))\n}\n\n/** Map object values while preserving the original key set. */\nexport function mapValues<U, T, K extends string>(object: Dict<T, K>, transform: (value: T, key: K) => U) {\n return Object.fromEntries(Object.entries(object).map(([key, value]) => [key, (transform as any)(value, key)])) as Dict<U, K>\n}\n\n/** Alias for `mapValues`. */\nexport { mapValues as valueMap }\n\n/** Pick selected keys from an object, optionally including `undefined` values. */\nexport function pick<T extends object, K extends keyof T>(source: T, keys?: Iterable<K>, forced?: boolean) {\n if (!keys) return { ...source }\n const result = {} as Pick<T, K>\n for (const key of keys) {\n if (forced || source[key] !== undefined) result[key] = source[key]\n }\n return result\n}\n\n/** Omit selected keys from a shallow object copy. */\nexport function omit<T, K extends keyof T>(source: T, keys?: Iterable<K>) {\n if (!keys) return { ...source }\n const result = { ...source } as Omit<T, K>\n for (const key of keys) {\n Reflect.deleteProperty(result, key)\n }\n return result\n}\n\n/** Define a non-enumerable writable property with a typed key. */\nexport function defineProperty<T, K extends keyof T>(object: T, key: K, value: T[K]): T\n/** Define a non-enumerable writable property with an arbitrary key. */\nexport function defineProperty<T, K extends keyof any>(object: T, key: K, value: any): T\n/** Define a non-enumerable writable property and return the object. */\nexport function defineProperty<T, K extends keyof any>(object: T, key: K, value: any) {\n return Object.defineProperty(object, key, { writable: true, value, enumerable: false })\n}\n", "import { isNullable } from './misc.ts'\n\ntype GlobalConstructorNames = keyof {\n [K in keyof typeof globalThis as typeof globalThis[K] extends abstract new (...args: any) => any ? K : never]: K\n}\n\n/** Create a predicate for a global constructor name. */\nexport function is<K extends GlobalConstructorNames>(type: K): (value: any) => value is InstanceType<typeof globalThis[K]>\n/** Test whether a value matches a global constructor name. */\nexport function is<K extends GlobalConstructorNames>(type: K, value: any): value is InstanceType<typeof globalThis[K]>\n/** Test values using `instanceof` with a `toStringTag` fallback. */\nexport function is<K extends GlobalConstructorNames>(type: K, value?: any): any {\n if (arguments.length === 1) return (value: any) => is(type, value)\n return type in globalThis && value instanceof (globalThis[type] as any)\n || Object.prototype.toString.call(value).slice(8, -1) === type\n}\n\nfunction isArrayBufferLike(value: any): value is ArrayBufferLike {\n return is('ArrayBuffer', value) || is('SharedArrayBuffer', value)\n}\n\nfunction isArrayBufferSource(value: any): value is Binary.Source {\n return isArrayBufferLike(value) || ArrayBuffer.isView(value)\n}\n\n/** Binary source detection and base64/hex conversion helpers. */\nexport namespace Binary {\n export type Source<T extends ArrayBufferLike = ArrayBufferLike> = T | ArrayBufferView<T>\n\n export const is = isArrayBufferLike\n export const isSource = isArrayBufferSource\n\n export function fromSource<T extends ArrayBufferLike>(source: Source<T>): T {\n if (ArrayBuffer.isView(source)) {\n // https://stackoverflow.com/questions/8609289/convert-a-binary-nodejs-buffer-to-javascript-arraybuffer#answer-31394257\n return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength) as T\n } else {\n return source\n }\n }\n\n export function toBase64(source: Source) {\n source = fromSource(source)\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(source).toString('base64')\n }\n let binary = ''\n const bytes = new Uint8Array(source)\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n return btoa(binary)\n }\n\n export function fromBase64(source: string) {\n if (typeof Buffer !== 'undefined') return fromSource(Buffer.from(source, 'base64'))\n return Uint8Array.from(atob(source), c => c.charCodeAt(0))\n }\n\n export function toHex(source: Source) {\n source = fromSource(source)\n if (typeof Buffer !== 'undefined') return Buffer.from(source).toString('hex')\n return Array.from(new Uint8Array(source), byte => byte.toString(16).padStart(2, '0')).join('')\n }\n\n export function fromHex(source: string) {\n if (typeof Buffer !== 'undefined') return fromSource(Buffer.from(source, 'hex'))\n const hex = source.length % 2 === 0 ? source : source.slice(0, source.length - 1)\n const buffer: number[] = []\n for (let i = 0; i < hex.length; i += 2) {\n buffer.push(parseInt(`${hex[i]}${hex[i + 1]}`, 16))\n }\n return Uint8Array.from(buffer).buffer\n }\n}\n\n/** Decode a base64 string into binary data. */\nexport const base64ToArrayBuffer = Binary.fromBase64\n/** Encode binary data as base64. */\nexport const arrayBufferToBase64 = Binary.toBase64\n/** Decode a hex string into binary data. */\nexport const hexToArrayBuffer = Binary.fromHex\n/** Encode binary data as hex. */\nexport const arrayBufferToHex = Binary.toHex\n\n/** Deep-clone common JavaScript values while preserving prototypes. */\nexport function clone<T>(source: T): T\n/** Deep-clone common JavaScript values while preserving prototypes and cycles. */\nexport function clone(source: any, refs = new Map<any, any>()) {\n if (!source || typeof source !== 'object') return source\n if (is('Date', source)) return new Date(source.valueOf())\n if (is('RegExp', source)) return new RegExp(source.source, source.flags)\n if (isArrayBufferLike(source)) return source.slice(0)\n if (ArrayBuffer.isView(source)) return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength)\n const cached = refs.get(source)\n if (cached) return cached\n if (Array.isArray(source)) {\n const result: any[] = []\n refs.set(source, result)\n source.forEach((value, index) => {\n result[index] = Reflect.apply(clone, null, [value, refs])\n })\n return result\n }\n const result = Object.create(Object.getPrototypeOf(source))\n refs.set(source, result)\n for (const key of Reflect.ownKeys(source)) {\n const descriptor = { ...Reflect.getOwnPropertyDescriptor(source, key) }\n if ('value' in descriptor) {\n descriptor.value = Reflect.apply(clone, null, [descriptor.value, refs])\n }\n Reflect.defineProperty(result, key, descriptor)\n }\n return result\n}\n\n/** Deeply compare arrays, dates, regexps, buffers, and plain object fields. */\nexport function deepEqual(a: any, b: any, strict?: boolean): boolean {\n if (a === b) return true\n if (!strict && isNullable(a) && isNullable(b)) return true\n if (typeof a !== typeof b) return false\n if (typeof a !== 'object') return false\n if (!a || !b) return false\n\n function check<T>(test: (x: any) => x is T, then: (a: T, b: T) => boolean) {\n return test(a) ? test(b) ? then(a, b) : false : test(b) ? false : undefined\n }\n\n return check(Array.isArray, (a, b) => a.length === b.length && a.every((item, index) => deepEqual(item, b[index])))\n ?? check(is('Date'), (a, b) => a.valueOf() === b.valueOf())\n ?? check(is('RegExp'), (a, b) => a.source === b.source && a.flags === b.flags)\n ?? check(isArrayBufferLike, (a, b) => {\n if (a.byteLength !== b.byteLength) return false\n const viewA = new Uint8Array(a)\n const viewB = new Uint8Array(b)\n for (let i = 0; i < viewA.length; i++) {\n if (viewA[i] !== viewB[i]) return false\n }\n return true\n })\n ?? Object.keys({ ...a, ...b }).every(key => deepEqual(a[key], b[key], strict))\n}\n", "/** Time constants plus parsing and formatting helpers. */\nexport namespace Time {\n export const millisecond = 1\n export const second = 1000\n export const minute = second * 60\n export const hour = minute * 60\n export const day = hour * 24\n export const week = day * 7\n\n let timezoneOffset = new Date().getTimezoneOffset()\n\n export function setTimezoneOffset(offset: number) {\n timezoneOffset = offset\n }\n\n export function getTimezoneOffset() {\n return timezoneOffset\n }\n\n export function getDateNumber(date: number | Date = new Date(), offset?: number) {\n if (typeof date === 'number') date = new Date(date)\n if (offset === undefined) offset = timezoneOffset\n return Math.floor((date.valueOf() / minute - offset) / 1440)\n }\n\n export function fromDateNumber(value: number, offset?: number) {\n const date = new Date(value * day)\n if (offset === undefined) offset = timezoneOffset\n return new Date(+date + offset * minute)\n }\n\n const numeric = /\\d+(?:\\.\\d+)?/.source\n const timeRegExp = new RegExp(`^${[\n 'w(?:eek(?:s)?)?',\n 'd(?:ay(?:s)?)?',\n 'h(?:our(?:s)?)?',\n 'm(?:in(?:ute)?(?:s)?)?',\n 's(?:ec(?:ond)?(?:s)?)?',\n ].map(unit => `(${numeric}${unit})?`).join('')}$`)\n\n export function parseTime(source: string) {\n const capture = timeRegExp.exec(source)\n if (!capture) return 0\n return (parseFloat(capture[1]) * week || 0)\n + (parseFloat(capture[2]) * day || 0)\n + (parseFloat(capture[3]) * hour || 0)\n + (parseFloat(capture[4]) * minute || 0)\n + (parseFloat(capture[5]) * second || 0)\n }\n\n export function parseDate(date: string) {\n const parsed = parseTime(date)\n if (parsed) {\n date = Date.now() + parsed as any\n } else if (/^\\d{1,2}(:\\d{1,2}){1,2}$/.test(date)) {\n date = `${new Date().toLocaleDateString()}-${date}`\n } else if (/^\\d{1,2}-\\d{1,2}-\\d{1,2}(:\\d{1,2}){1,2}$/.test(date)) {\n date = `${new Date().getFullYear()}-${date}`\n }\n return date ? new Date(date) : new Date()\n }\n\n export function format(ms: number) {\n const abs = Math.abs(ms)\n if (abs >= day - hour / 2) {\n return Math.round(ms / day) + 'd'\n } else if (abs >= hour - minute / 2) {\n return Math.round(ms / hour) + 'h'\n } else if (abs >= minute - second / 2) {\n return Math.round(ms / minute) + 'm'\n } else if (abs >= second) {\n return Math.round(ms / second) + 's'\n }\n return ms + 'ms'\n }\n\n export function toDigits(source: number, length = 2) {\n return source.toString().padStart(length, '0')\n }\n\n export function template(template: string, time = new Date()) {\n return template\n .replace('yyyy', time.getFullYear().toString())\n .replace('yy', time.getFullYear().toString().slice(2))\n .replace('MM', toDigits(time.getMonth() + 1))\n .replace('dd', toDigits(time.getDate()))\n .replace('hh', toDigits(time.getHours()))\n .replace('mm', toDigits(time.getMinutes()))\n .replace('ss', toDigits(time.getSeconds()))\n .replace('SSS', toDigits(time.getMilliseconds(), 3))\n }\n}\n", "import { Binary, clone, deepEqual, filterKeys, isNullable, isPlainObject, pick, valueMap } from \"@deepseek-ai/cosmokit\";\n//#region lib/types/index.js\nconst kSchema = Symbol.for(\"schemastery\");\nconst kValidationError = Symbol.for(\"ValidationError\");\nglobalThis.__schemastery_index__ ??= 0;\nglobalThis.__schemastery_refs__ = void 0;\nvar ValidationError = class extends TypeError {\n\toptions;\n\tname = \"ValidationError\";\n\tconstructor(message, options) {\n\t\tlet prefix = \"$\";\n\t\tfor (const segment of options.path || []) if (typeof segment === \"string\") prefix += \".\" + segment;\n\t\telse if (typeof segment === \"number\") prefix += \"[\" + segment + \"]\";\n\t\telse if (typeof segment === \"symbol\") prefix += `[Symbol(${segment.toString()})]`;\n\t\tif (prefix.startsWith(\".\")) prefix = prefix.slice(1);\n\t\tsuper((prefix === \"$\" ? \"\" : `${prefix} `) + message);\n\t\tthis.options = options;\n\t}\n\tstatic is(error) {\n\t\treturn !!error?.[kValidationError];\n\t}\n};\nObject.defineProperty(ValidationError.prototype, kValidationError, { value: true });\nconst Schema = function(options) {\n\tconst schema = function(data, options = {}) {\n\t\treturn Schema.resolve(data, schema, options)[0];\n\t};\n\tif (options.refs) {\n\t\tconst refs = valueMap(options.refs, (options) => new Schema(options));\n\t\tconst getRef = (uid) => refs[uid];\n\t\tfor (const key in refs) {\n\t\t\tconst options = refs[key];\n\t\t\toptions.sKey = getRef(options.sKey);\n\t\t\toptions.inner = getRef(options.inner);\n\t\t\toptions.list = options.list && options.list.map(getRef);\n\t\t\toptions.dict = options.dict && valueMap(options.dict, getRef);\n\t\t}\n\t\treturn refs[options.uid];\n\t}\n\tObject.assign(schema, options);\n\tif (typeof schema.callback === \"string\") try {\n\t\tschema.callback = new Function(\"return \" + schema.callback)();\n\t} catch {}\n\tObject.defineProperty(schema, \"uid\", { value: globalThis.__schemastery_index__++ });\n\tObject.setPrototypeOf(schema, Schema.prototype);\n\tschema.meta ||= {};\n\tschema.toString = schema.toString.bind(schema);\n\treturn schema;\n};\nSchema.prototype = Object.create(Function.prototype);\nSchema.prototype[kSchema] = true;\nObject.defineProperty(Schema.prototype, \"~standard\", { get() {\n\treturn {\n\t\tversion: 1,\n\t\tvendor: \"schemastery\",\n\t\tvalidate: (value) => {\n\t\t\ttry {\n\t\t\t\treturn { value: Schema.resolve(value, this, {})[0] };\n\t\t\t} catch (error) {\n\t\t\t\tif (ValidationError.is(error)) return { issues: [{\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\tpath: error.options.path\n\t\t\t\t}] };\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t};\n} });\nSchema.ValidationError = ValidationError;\nSchema.prototype.toJSON = function toJSON() {\n\tif (globalThis.__schemastery_refs__) {\n\t\tglobalThis.__schemastery_refs__[this.uid] ??= JSON.parse(JSON.stringify({ ...this }));\n\t\treturn this.uid;\n\t}\n\tglobalThis.__schemastery_refs__ = { [this.uid]: { ...this } };\n\tglobalThis.__schemastery_refs__[this.uid] = JSON.parse(JSON.stringify({ ...this }));\n\tconst result = {\n\t\tuid: this.uid,\n\t\trefs: globalThis.__schemastery_refs__\n\t};\n\tglobalThis.__schemastery_refs__ = void 0;\n\treturn result;\n};\nSchema.prototype.set = function set(key, value) {\n\tthis.dict[key] = value;\n\treturn this;\n};\nSchema.prototype.push = function push(value) {\n\tthis.list.push(value);\n\treturn this;\n};\nfunction mergeDesc(original, messages) {\n\tconst result = typeof original === \"string\" ? { \"\": original } : { ...original };\n\tfor (const locale in messages) {\n\t\tconst value = messages[locale];\n\t\tif (value?.$description || value?.$desc) result[locale] = value.$description || value.$desc;\n\t\telse if (typeof value === \"string\") result[locale] = value;\n\t}\n\treturn result;\n}\nfunction getInner(value) {\n\treturn value?.$value ?? value?.$inner;\n}\nfunction extractKeys(data) {\n\treturn filterKeys(data ?? {}, (key) => !key.startsWith(\"$\"));\n}\nSchema.prototype.i18n = function i18n(messages) {\n\tconst schema = Schema(this);\n\tconst desc = mergeDesc(schema.meta.description, messages);\n\tif (Object.keys(desc).length) schema.meta.description = desc;\n\tif (schema.dict) schema.dict = valueMap(schema.dict, (inner, key) => {\n\t\treturn inner.i18n(valueMap(messages, (data) => getInner(data)?.[key] ?? data?.[key]));\n\t});\n\tif (schema.list) schema.list = schema.list.map((inner, index) => {\n\t\treturn inner.i18n(valueMap(messages, (data = {}) => {\n\t\t\tif (Array.isArray(getInner(data))) return getInner(data)[index];\n\t\t\tif (Array.isArray(data)) return data[index];\n\t\t\treturn extractKeys(data);\n\t\t}));\n\t});\n\tif (schema.inner) schema.inner = schema.inner.i18n(valueMap(messages, (data) => {\n\t\tif (getInner(data)) return getInner(data);\n\t\treturn extractKeys(data);\n\t}));\n\tif (schema.sKey) schema.sKey = schema.sKey.i18n(valueMap(messages, (data) => data?.$key));\n\treturn schema;\n};\nSchema.prototype.extra = function extra(key, value) {\n\tconst schema = Schema(this);\n\tschema.meta = {\n\t\t...schema.meta,\n\t\t[key]: value\n\t};\n\treturn schema;\n};\nfor (const key of [\n\t\"required\",\n\t\"disabled\",\n\t\"collapse\",\n\t\"hidden\",\n\t\"loose\"\n]) Object.assign(Schema.prototype, { [key](value = true) {\n\tconst schema = Schema(this);\n\tschema.meta = {\n\t\t...schema.meta,\n\t\t[key]: value\n\t};\n\treturn schema;\n} });\nSchema.prototype.deprecated = function deprecated() {\n\tconst schema = Schema(this);\n\tschema.meta.badges ||= [];\n\tschema.meta.badges.push({\n\t\ttext: \"deprecated\",\n\t\ttype: \"danger\"\n\t});\n\treturn schema;\n};\nSchema.prototype.experimental = function experimental() {\n\tconst schema = Schema(this);\n\tschema.meta.badges ||= [];\n\tschema.meta.badges.push({\n\t\ttext: \"experimental\",\n\t\ttype: \"warning\"\n\t});\n\treturn schema;\n};\nSchema.prototype.pattern = function pattern(regexp) {\n\tconst schema = Schema(this);\n\tconst pattern = pick(regexp, [\"source\", \"flags\"]);\n\tschema.meta = {\n\t\t...schema.meta,\n\t\tpattern\n\t};\n\treturn schema;\n};\nSchema.prototype.simplify = function simplify(value) {\n\tif (deepEqual(value, this.meta.default, this.type === \"dict\")) return null;\n\tif (isNullable(value)) return value;\n\tif (this.type === \"object\" || this.type === \"dict\") {\n\t\tconst result = {};\n\t\tfor (const key in value) {\n\t\t\tconst item = (this.type === \"object\" ? this.dict[key] : this.inner)?.simplify(value[key]);\n\t\t\tif (this.type === \"dict\" || !isNullable(item)) result[key] = item;\n\t\t}\n\t\tif (deepEqual(result, this.meta.default, this.type === \"dict\")) return null;\n\t\treturn result;\n\t} else if (this.type === \"array\" || this.type === \"tuple\") {\n\t\tconst result = [];\n\t\tvalue.forEach((value, index) => {\n\t\t\tconst schema = this.type === \"array\" ? this.inner : this.list[index];\n\t\t\tconst item = schema ? schema.simplify(value) : value;\n\t\t\tresult.push(item);\n\t\t});\n\t\treturn result;\n\t} else if (this.type === \"intersect\") {\n\t\tconst result = {};\n\t\tfor (const item of this.list) Object.assign(result, item.simplify(value));\n\t\treturn result;\n\t} else if (this.type === \"union\") for (const schema of this.list) try {\n\t\tSchema.resolve(value, schema, {});\n\t\treturn schema.simplify(value);\n\t} catch {}\n\treturn value;\n};\nSchema.prototype.toString = function toString(inline) {\n\treturn formatters[this.type]?.(this, inline) ?? `Schema<${this.type}>`;\n};\nSchema.prototype.role = function role(role, extra) {\n\tconst schema = Schema(this);\n\tschema.meta = {\n\t\t...schema.meta,\n\t\trole,\n\t\textra\n\t};\n\treturn schema;\n};\nfor (const key of [\n\t\"default\",\n\t\"link\",\n\t\"comment\",\n\t\"description\",\n\t\"max\",\n\t\"min\",\n\t\"step\"\n]) Object.assign(Schema.prototype, { [key](value) {\n\tconst schema = Schema(this);\n\tschema.meta = {\n\t\t...schema.meta,\n\t\t[key]: value\n\t};\n\treturn schema;\n} });\nconst resolvers = {};\nSchema.extend = function extend(type, resolve) {\n\tresolvers[type] = resolve;\n};\nSchema.resolve = function resolve(data, schema, options = {}, strict = false) {\n\tif (!schema) return [data];\n\tif (options.ignore?.(data, schema)) return [data];\n\tif (isNullable(data) && schema.type !== \"lazy\") {\n\t\tif (schema.meta.required) throw new ValidationError(`missing required value`, options);\n\t\tlet current = schema;\n\t\tlet fallback = schema.meta.default;\n\t\twhile (current?.type === \"intersect\" && isNullable(fallback)) {\n\t\t\tcurrent = current.list[0];\n\t\t\tfallback = current?.meta.default;\n\t\t}\n\t\tif (isNullable(fallback)) return [data];\n\t\tdata = clone(fallback);\n\t}\n\tconst callback = resolvers[schema.type];\n\tif (!callback) throw new ValidationError(`unsupported type \"${schema.type}\"`, options);\n\ttry {\n\t\treturn callback(data, schema, options, strict);\n\t} catch (error) {\n\t\tif (!schema.meta.loose) throw error;\n\t\treturn [schema.meta.default];\n\t}\n};\nSchema.from = function from(source) {\n\tif (isNullable(source)) return Schema.any();\n\telse if ([\n\t\t\"string\",\n\t\t\"number\",\n\t\t\"boolean\"\n\t].includes(typeof source)) return Schema.const(source).required();\n\telse if (source[kSchema]) return source;\n\telse if (typeof source === \"function\") switch (source) {\n\t\tcase String: return Schema.string().required();\n\t\tcase Number: return Schema.number().required();\n\t\tcase Boolean: return Schema.boolean().required();\n\t\tcase Function: return Schema.function().required();\n\t\tdefault: return Schema.is(source).required();\n\t}\n\telse throw new TypeError(`cannot infer schema from ${source}`);\n};\nSchema.lazy = function lazy(builder) {\n\tconst toJSON = () => {\n\t\tif (!schema.inner[kSchema]) {\n\t\t\tschema.inner = schema.builder();\n\t\t\tschema.inner.meta = {\n\t\t\t\t...schema.meta,\n\t\t\t\t...schema.inner.meta\n\t\t\t};\n\t\t}\n\t\treturn schema.inner.toJSON();\n\t};\n\tconst schema = new Schema({\n\t\ttype: \"lazy\",\n\t\tbuilder,\n\t\tinner: { toJSON }\n\t});\n\treturn schema;\n};\nSchema.natural = function natural() {\n\treturn Schema.number().step(1).min(0);\n};\nSchema.percent = function percent() {\n\treturn Schema.number().step(.01).min(0).max(1).role(\"slider\");\n};\nSchema.date = function date() {\n\treturn Schema.union([Schema.is(Date), Schema.transform(Schema.string().role(\"datetime\"), (value, options) => {\n\t\tconst date = new Date(value);\n\t\tif (isNaN(+date)) throw new ValidationError(`invalid date \"${value}\"`, options);\n\t\treturn date;\n\t}, true)]);\n};\nSchema.regExp = function regExp(flag = \"\") {\n\treturn Schema.union([Schema.is(RegExp), Schema.transform(Schema.string().role(\"regexp\", { flag }), (value, options) => {\n\t\ttry {\n\t\t\treturn new RegExp(value, flag);\n\t\t} catch (e) {\n\t\t\tthrow new ValidationError(e.message, options);\n\t\t}\n\t}, true)]);\n};\nSchema.arrayBuffer = function arrayBuffer(encoding) {\n\treturn Schema.union([\n\t\tSchema.is(ArrayBuffer),\n\t\tSchema.is(SharedArrayBuffer),\n\t\tSchema.transform(Schema.any(), (value, options) => {\n\t\t\tif (Binary.isSource(value)) return Binary.fromSource(value);\n\t\t\tthrow new ValidationError(`expected ArrayBufferSource but got ${value}`, options);\n\t\t}, true),\n\t\t...encoding ? [Schema.transform(Schema.string(), (value, options) => {\n\t\t\ttry {\n\t\t\t\treturn encoding === \"base64\" ? Binary.fromBase64(value) : Binary.fromHex(value);\n\t\t\t} catch (e) {\n\t\t\t\tthrow new ValidationError(e.message, options);\n\t\t\t}\n\t\t}, true)] : []\n\t]);\n};\nSchema.extend(\"lazy\", (data, schema, options, strict) => {\n\tif (!schema.inner[kSchema]) {\n\t\tschema.inner = schema.builder();\n\t\tschema.inner.meta = {\n\t\t\t...schema.meta,\n\t\t\t...schema.inner.meta\n\t\t};\n\t}\n\treturn Schema.resolve(data, schema.inner, options, strict);\n});\nSchema.extend(\"any\", (data) => {\n\treturn [data];\n});\nSchema.extend(\"never\", (data, _, options) => {\n\tthrow new ValidationError(`expected nullable but got ${data}`, options);\n});\nSchema.extend(\"const\", (data, { value }, options) => {\n\tif (deepEqual(data, value)) return [value];\n\tthrow new ValidationError(`expected ${value} but got ${data}`, options);\n});\nfunction checkWithinRange(data, meta, description, options, skipMin = false) {\n\tconst { max = Infinity, min = -Infinity } = meta;\n\tif (data > max) throw new ValidationError(`expected ${description} <= ${max} but got ${data}`, options);\n\tif (data < min && !skipMin) throw new ValidationError(`expected ${description} >= ${min} but got ${data}`, options);\n}\nSchema.extend(\"string\", (data, { meta }, options) => {\n\tif (typeof data !== \"string\") throw new ValidationError(`expected string but got ${data}`, options);\n\tif (meta.pattern) {\n\t\tconst regexp = new RegExp(meta.pattern.source, meta.pattern.flags);\n\t\tif (!regexp.test(data)) throw new ValidationError(`expect string to match regexp ${regexp}`, options);\n\t}\n\tcheckWithinRange(data.length, meta, \"string length\", options);\n\treturn [data];\n});\nfunction decimalShift(data, digits) {\n\tconst str = data.toString();\n\tif (str.includes(\"e\")) return data * Math.pow(10, digits);\n\tconst index = str.indexOf(\".\");\n\tif (index === -1) return data * Math.pow(10, digits);\n\tconst frac = str.slice(index + 1);\n\tconst integer = str.slice(0, index);\n\tif (frac.length <= digits) return +(integer + frac.padEnd(digits, \"0\"));\n\treturn +(integer + frac.slice(0, digits) + \".\" + frac.slice(digits));\n}\nfunction isMultipleOf(data, min, step) {\n\tstep = Math.abs(step);\n\tif (!/^\\d+\\.\\d+$/.test(step.toString())) return (data - min) % step === 0;\n\tconst index = step.toString().indexOf(\".\");\n\tconst digits = step.toString().slice(index + 1).length;\n\treturn Math.abs(decimalShift(data, digits) - decimalShift(min, digits)) % decimalShift(step, digits) === 0;\n}\nSchema.extend(\"number\", (data, { meta }, options) => {\n\tif (typeof data !== \"number\") throw new ValidationError(`expected number but got ${data}`, options);\n\tcheckWithinRange(data, meta, \"number\", options);\n\tconst { step } = meta;\n\tif (step && !isMultipleOf(data, meta.min ?? 0, step)) throw new ValidationError(`expected number multiple of ${step} but got ${data}`, options);\n\treturn [data];\n});\nSchema.extend(\"boolean\", (data, _, options) => {\n\tif (typeof data === \"boolean\") return [data];\n\tthrow new ValidationError(`expected boolean but got ${data}`, options);\n});\nSchema.extend(\"bitset\", (data, { bits, meta }, options) => {\n\tlet value = 0, keys = [];\n\tif (typeof data === \"number\") {\n\t\tvalue = data;\n\t\tfor (const key in bits) if (data & bits[key]) keys.push(key);\n\t} else if (Array.isArray(data)) {\n\t\tkeys = data;\n\t\tfor (const key of keys) {\n\t\t\tif (typeof key !== \"string\") throw new ValidationError(`expected string but got ${key}`, options);\n\t\t\tif (key in bits) value |= bits[key];\n\t\t}\n\t} else throw new ValidationError(`expected number or array but got ${data}`, options);\n\tif (value === meta.default) return [value];\n\treturn [value, keys];\n});\nSchema.extend(\"function\", (data, _, options) => {\n\tif (typeof data === \"function\") return [data];\n\tthrow new ValidationError(`expected function but got ${data}`, options);\n});\nSchema.extend(\"is\", (data, { constructor }, options) => {\n\tif (typeof constructor === \"function\") {\n\t\tif (data instanceof constructor) return [data];\n\t\tthrow new ValidationError(`expected ${constructor.name} but got ${data}`, options);\n\t} else {\n\t\tif (isNullable(data)) throw new ValidationError(`expected ${constructor} but got ${data}`, options);\n\t\tlet prototype = Object.getPrototypeOf(data);\n\t\twhile (prototype) {\n\t\t\tif (prototype.constructor?.name === constructor) return [data];\n\t\t\tprototype = Object.getPrototypeOf(prototype);\n\t\t}\n\t\tthrow new ValidationError(`expected ${constructor} but got ${data}`, options);\n\t}\n});\nfunction property(data, key, schema, options) {\n\ttry {\n\t\tconst [value, adapted] = Schema.resolve(data[key], schema, {\n\t\t\t...options,\n\t\t\tpath: [...options.path || [], key]\n\t\t});\n\t\tif (adapted !== void 0) data[key] = adapted;\n\t\treturn value;\n\t} catch (e) {\n\t\tif (!options?.autofix) throw e;\n\t\tdelete data[key];\n\t\treturn schema.meta.default;\n\t}\n}\nSchema.extend(\"array\", (data, { inner, meta }, options) => {\n\tif (!Array.isArray(data)) throw new ValidationError(`expected array but got ${data}`, options);\n\tcheckWithinRange(data.length, meta, \"array length\", options, !isNullable(inner.meta.default));\n\treturn [data.map((_, index) => property(data, index, inner, options))];\n});\nSchema.extend(\"dict\", (data, { inner, sKey }, options, strict) => {\n\tif (!isPlainObject(data)) throw new ValidationError(`expected object but got ${data}`, options);\n\tconst result = {};\n\tfor (const key in data) {\n\t\tlet rKey;\n\t\ttry {\n\t\t\trKey = Schema.resolve(key, sKey, options)[0];\n\t\t} catch (error) {\n\t\t\tif (strict) continue;\n\t\t\tthrow error;\n\t\t}\n\t\tresult[rKey] = property(data, key, inner, options);\n\t\tdata[rKey] = data[key];\n\t\tif (key !== rKey) delete data[key];\n\t}\n\treturn [result];\n});\nSchema.extend(\"tuple\", (data, { list }, options, strict) => {\n\tif (!Array.isArray(data)) throw new ValidationError(`expected array but got ${data}`, options);\n\tconst result = list.map((inner, index) => property(data, index, inner, options));\n\tif (strict) return [result];\n\tresult.push(...data.slice(list.length));\n\treturn [result];\n});\nfunction merge(result, data) {\n\tfor (const key in data) {\n\t\tif (key in result) continue;\n\t\tresult[key] = data[key];\n\t}\n}\nSchema.extend(\"object\", (data, { dict }, options, strict) => {\n\tif (!isPlainObject(data)) throw new ValidationError(`expected object but got ${data}`, options);\n\tconst result = {};\n\tfor (const key in dict) {\n\t\tconst value = property(data, key, dict[key], options);\n\t\tif (!isNullable(value) || key in data) result[key] = value;\n\t}\n\tif (!strict) merge(result, data);\n\treturn [result];\n});\nSchema.extend(\"union\", (data, { list, toString }, options, strict) => {\n\tconst messages = [];\n\tfor (const inner of list) try {\n\t\treturn Schema.resolve(data, inner, options, strict);\n\t} catch (error) {\n\t\tmessages.push(error);\n\t}\n\tthrow new ValidationError(`expected ${toString()} but got ${JSON.stringify(data)}`, options);\n});\nSchema.extend(\"intersect\", (data, { list, toString }, options, strict) => {\n\tif (!list.length) return [data];\n\tlet result;\n\tfor (const inner of list) {\n\t\tconst value = Schema.resolve(data, inner, options, true)[0];\n\t\tif (isNullable(value)) continue;\n\t\tif (isNullable(result)) result = value;\n\t\telse if (typeof result !== typeof value) throw new ValidationError(`expected ${toString()} but got ${JSON.stringify(data)}`, options);\n\t\telse if (typeof value === \"object\") merge(result ??= {}, value);\n\t\telse if (result !== value) throw new ValidationError(`expected ${toString()} but got ${JSON.stringify(data)}`, options);\n\t}\n\tif (!strict && isPlainObject(data)) merge(result, data);\n\treturn [result];\n});\nSchema.extend(\"transform\", (data, { inner, callback, preserve }, options) => {\n\tconst [result, adapted = data] = Schema.resolve(data, inner, options, true);\n\tif (preserve) return [callback(result)];\n\telse return [callback(result), callback(adapted)];\n});\nconst formatters = {};\nfunction defineMethod(name, keys, format) {\n\tformatters[name] = format;\n\tObject.assign(Schema, { [name](...args) {\n\t\tconst schema = new Schema({ type: name });\n\t\tkeys.forEach((key, index) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase \"sKey\":\n\t\t\t\t\tschema.sKey = args[index] ?? Schema.string();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inner\":\n\t\t\t\t\tschema.inner = Schema.from(args[index]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"list\":\n\t\t\t\t\tschema.list = args[index].map(Schema.from);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dict\":\n\t\t\t\t\tschema.dict = valueMap(args[index], Schema.from);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bits\":\n\t\t\t\t\tschema.bits = {};\n\t\t\t\t\tfor (const key in args[index]) {\n\t\t\t\t\t\tif (typeof args[index][key] !== \"number\") continue;\n\t\t\t\t\t\tschema.bits[key] = args[index][key];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"callback\": {\n\t\t\t\t\tconst callback = schema.callback = args[index];\n\t\t\t\t\tcallback[\"toJSON\"] ||= () => callback.toString();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"constructor\": {\n\t\t\t\t\tconst constructor = schema.constructor = args[index];\n\t\t\t\t\tif (typeof constructor === \"function\") constructor[\"toJSON\"] ||= () => constructor[\"name\"];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: schema[key] = args[index];\n\t\t\t}\n\t\t});\n\t\tif (name === \"object\" || name === \"dict\") schema.meta.default = {};\n\t\telse if (name === \"array\" || name === \"tuple\") schema.meta.default = [];\n\t\telse if (name === \"bitset\") schema.meta.default = 0;\n\t\treturn schema;\n\t} });\n}\ndefineMethod(\"is\", [\"constructor\"], ({ constructor }) => {\n\tif (typeof constructor === \"function\") return constructor.name;\n\telse return constructor;\n});\ndefineMethod(\"any\", [], () => \"any\");\ndefineMethod(\"never\", [], () => \"never\");\ndefineMethod(\"const\", [\"value\"], ({ value }) => typeof value === \"string\" ? JSON.stringify(value) : value);\ndefineMethod(\"string\", [], () => \"string\");\ndefineMethod(\"number\", [], () => \"number\");\ndefineMethod(\"boolean\", [], () => \"boolean\");\ndefineMethod(\"bitset\", [\"bits\"], () => \"bitset\");\ndefineMethod(\"function\", [], () => \"function\");\ndefineMethod(\"array\", [\"inner\"], ({ inner }) => `${inner.toString(true)}[]`);\ndefineMethod(\"dict\", [\"inner\", \"sKey\"], ({ inner, sKey }) => `{ [key: ${sKey.toString()}]: ${inner.toString()} }`);\ndefineMethod(\"tuple\", [\"list\"], ({ list }) => `[${list.map((inner) => inner.toString()).join(\", \")}]`);\ndefineMethod(\"object\", [\"dict\"], ({ dict }) => {\n\tif (Object.keys(dict).length === 0) return \"{}\";\n\treturn `{ ${Object.entries(dict).map(([key, inner]) => {\n\t\treturn `${key}${inner.meta.required ? \"\" : \"?\"}: ${inner.toString()}`;\n\t}).join(\", \")} }`;\n});\ndefineMethod(\"union\", [\"list\"], ({ list }, inline) => {\n\tconst result = list.map(({ toString: format }) => format()).join(\" | \");\n\treturn inline ? `(${result})` : result;\n});\ndefineMethod(\"intersect\", [\"list\"], ({ list }) => {\n\treturn `${list.map((inner) => inner.toString(true)).join(\" & \")}`;\n});\ndefineMethod(\"transform\", [\n\t\"inner\",\n\t\"callback\",\n\t\"preserve\"\n], ({ inner }, isInner) => inner.toString(isInner));\n//#endregion\nexport { Schema as default };\n", "/**\n * Wire contracts for `@deepseek-ai/dsh-interconnect`.\n * The transport reuses the Connection RPC envelope (`ClientRequest` /\n * `ServerResponse` from `@deepseek-ai/dsh-host-apiproxy/api`); this module\n * defines only the business payloads that ride inside that envelope.\n * @module @deepseek-ai/dsh-interconnect\n */\n\n/**\n * Logical HTTP route prefix this service owns. Requests reach endpoints as\n * `<baseURL>/interconnect/<endpoint>`.\n */\nexport const INTERCONNECT_CHANNEL = '/interconnect'\n\n/**\n * Credential reference holding the shared auth token. Both halves of a link\n * must resolve the same value: inbound requests are rejected unless their\n * `Authorization: Bearer <token>` matches this secret, and outbound requests\n * send it. An unconfigured token fails closed on the inbound side.\n */\nexport const INTERCONNECT_TOKEN_REF = 'DSH_INTERCONNECT_TOKEN'\n\n/**\n * How one inbound message reaches the target agent's inbox. Each value names an\n * existing `Agent` method, which is exactly the pair `(inbox target, wakeup)`:\n * - `followup` \u2014 `next-turn` + wake: the message becomes its own turn, queued\n * behind whatever the agent is currently doing.\n * - `steer` \u2014 `next-step` + wake: the message cuts into the nearest step\n * boundary of a running turn instead of waiting for that turn to finish; an\n * idle agent starts a turn.\n * - `inject` \u2014 `next-step`, no wake: seeds model-facing context without waking\n * an idle agent, so it can sit unread until something else wakes it.\n */\nexport type DeliveryMode = 'followup' | 'steer' | 'inject'\n\n/**\n * Business payload for the `send` endpoint: deliver one text message to one\n * live session of the receiving instance.\n */\nexport interface SendPayload {\n /** Target session id on the receiving instance. */\n readonly sessionId: string\n /** Message text delivered to the peer session's inbox. */\n readonly text: string\n /**\n * Per-message override of the receiver's configured delivery mode. Urgency is\n * a property of one message, not of the link, so a sender may ask to cut into\n * a running turn. Absent leaves the receiver's configured default in force.\n */\n readonly delivery?: DeliveryMode\n /**\n * Ask the receiver to wake a persisted session that has no running agent.\n *\n * Opt-in, and deliberately not the default: delivery to a woken session runs\n * a real agent turn \u2014 a billed model call whose assembly carries that\n * session's full toolset \u2014 inside a conversation its owner is not watching\n * and cannot interrupt. That is categorically more than nudging an already\n * open session, so the sender must ask for it explicitly. The receiver can\n * still refuse via `Config.allowResume`, because the cost lands on its\n * machine.\n */\n readonly resume?: boolean\n}\n\n/**\n * Why a `send` did not deliver. `delivered: false` alone cannot be acted on,\n * because the causes need different responses:\n * - `session-not-live` \u2014 the receiver answered; that session has no running\n * agent. Retrying the same id is futile until it is opened, so the caller\n * should list live sessions and pick another target.\n * - `unreachable` \u2014 no usable answer from the receiver (transport failure, or\n * auth rejected). The target may well be fine, so retrying can succeed.\n * - `resume-refused` \u2014 the sender asked to wake a persisted session and this\n * receiver does not allow it. Retrying with `resume` set changes nothing.\n * - `resume-failed` \u2014 waking was allowed and attempted but did not yield a live\n * agent (no persisted session under that id, or another owner holds it).\n * - `session-owned-by-subagent` \u2014 the session is reserved to subagent routing,\n * so its parent agent owns delivery. Injecting here would race that parent;\n * the sender must reach the child through its parent instead.\n */\nexport type SendFailure = 'session-not-live' | 'unreachable' | 'resume-refused' | 'resume-failed' | 'session-owned-by-subagent'\n\n/** Business result of a `send` endpoint call. */\nexport interface SendResult {\n /** True when the target session is live on the receiving instance and the message was delivered. */\n readonly delivered: boolean\n /** Echoed receiver instance id (diagnostic; never trusted for routing). */\n readonly instance: string\n /**\n * The mode actually used, so a sender can tell whether its requested override\n * took effect. Absent when nothing was delivered.\n */\n readonly delivery?: DeliveryMode\n /**\n * Why delivery failed. Present exactly when `delivered` is false, so a caller\n * can distinguish \"wrong target\" from \"receiver unreachable\" instead of\n * guessing from a bare boolean.\n */\n readonly reason?: SendFailure\n}\n\n/** Business result of a `ping` endpoint call. */\nexport interface PingResult {\n /** Always true for an authenticated, live receiver. */\n readonly pong: true\n /** The receiving instance's self-reported id. */\n readonly instance: string\n}\n\n/**\n * One live session on the receiving instance. Only live agents appear: `send`\n * can reach exactly these, so the listing is the set of valid `sessionId`\n * values rather than a directory of everything ever persisted.\n */\nexport interface SessionSummary {\n /** The session id to pass back as `SendPayload.sessionId`. */\n readonly sessionId: string\n /**\n * The session's title when a title projection is available. Absent rather\n * than empty when the projection is missing or the session has no title yet,\n * so a caller can tell \"untitled\" from \"titles unavailable on this receiver\".\n */\n readonly title?: string\n /** The agent's current status, so a sender can prefer an idle target. */\n readonly status?: string\n}\n\n/** Business result of a `list` endpoint call. */\nexport interface ListResult {\n /** Live sessions in registration order. */\n readonly sessions: readonly SessionSummary[]\n /** Echoed receiver instance id (diagnostic; never trusted for routing). */\n readonly instance: string\n}\n\n/** Outbound listing request: just the receiver origin. */\nexport interface ListRequest {\n /** Receiver origin, e.g. `http://127.0.0.1:3080`. */\n readonly baseUrl: string\n}\n\n/** Outbound delivery request: receiver origin plus a `send` business payload. */\nexport interface SendRequest {\n /** Receiver origin, e.g. `http://127.0.0.1:3080`. */\n readonly baseUrl: string\n readonly sessionId: string\n readonly text: string\n /** Per-message delivery override forwarded to the receiver. */\n readonly delivery?: DeliveryMode\n /** Ask the receiver to wake a persisted session; see {@link SendPayload.resume}. */\n readonly resume?: boolean\n}\n\n/**\n * One serializable lifecycle fact pushed from an emitting instance to its\n * peers. `kind` discriminates the union; the remaining fields are the compact\n * facts extractable from the source event without serializing live objects.\n */\nexport type EventNotification =\n | { readonly kind: 'agent/created'; readonly sessionId: string }\n | { readonly kind: 'agent/disposed'; readonly sessionId: string }\n | { readonly kind: 'agent/status'; readonly sessionId: string; readonly status: 'idle' | 'running' }\n | { readonly kind: 'session/created'; readonly sessionId: string; readonly parentSessionId?: string }\n | { readonly kind: 'session/disposed'; readonly sessionId: string }\n | { readonly kind: 'subagent/end'; readonly provider: string; readonly childSessionId: string; readonly stopReason: string }\n\n/**\n * Wire payload for the `event` endpoint: the pushed fact plus the emitting\n * instance's self-reported id, so a many-upstream receiver can attribute it.\n */\nexport interface EventPayload {\n /** Emitting instance's self-reported id. */\n readonly sender: string\n /** The serialized lifecycle fact. */\n readonly notification: EventNotification\n}\n\n/**\n * One text frame exchanged over a persistent WebSocket peer link. `hello`\n * opens a link with the dialing side's identity; `event` pushes one\n * notification in either direction. Native ws ping/pong carries the heartbeat,\n * so no application-level keepalive frame exists.\n */\nexport type LinkFrame =\n | { readonly type: 'hello'; readonly sender: string }\n | { readonly type: 'event'; readonly notification: EventNotification }\n\n/**\n * Handle to one established outbound WebSocket peer link. `close` tears the\n * socket down and cancels reconnection; `peer` records the dialed receiver.\n */\nexport interface WebSocketLinkHandle {\n /** The dialed peer origin. */\n readonly peer: string\n /** Terminate the socket and stop reconnect attempts. */\n close(): void\n}\n\n/** Service config bound by the Composition loader. */\nexport interface Config {\n /** Self-reported id of this instance, echoed in ping/send results for diagnostics. */\n readonly instanceId: string\n /** Request timeout for outbound deliveries, in milliseconds. */\n readonly requestTimeoutMs: number\n /**\n * Peer instance origins to fan local events out to at startup. A runtime\n * `subscribe` can extend the set without restart; an unset list fans nothing\n * out until a peer subscribes.\n */\n readonly peers?: string[]\n /**\n * Default mode for inbound `send` messages that carry no per-message\n * override. See {@link DeliveryMode} for what each mode does.\n */\n readonly delivery?: DeliveryMode\n /**\n * Whether this instance honours a sender's `resume` request. Defaults to\n * true: the sender must opt in per message anyway, and this switch exists so\n * the side that pays \u2014 waking a session runs a billed model turn with that\n * session's tools on THIS machine \u2014 can refuse outright.\n */\n readonly allowResume?: boolean\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Cross-instance message handoff service: inbound half owns one HTTP route on\n * the host webserver and delivers authenticated messages into live sessions;\n * outbound half POSTs the same wire shape to a peer instance.\n *\n * Transport is deliberately NOT the Connection RPC channel: that registry's\n * handler sees only `(endpoint, payload, signal)` and the trust fence is the\n * DNS-rebinding `trustedHosts` check, neither of which carries the shared-key\n * `Authorization` header this service authenticates on. Owning a plain HTTP\n * route keeps bearer-token auth at the boundary where the header is readable\n * and fails closed when the token is unconfigured.\n * @module @deepseek-ai/dsh-interconnect\n */\n\nimport { Context, Service } from '@deepseek-ai/cordis'\nimport type { IncomingMessage, ServerResponse } from 'node:http'\nimport type { Duplex } from 'node:stream'\nimport type { WebRoute, WebUpgradeRoute } from '@deepseek-ai/dsh-host-webserver'\nimport {\n clientRequestSchema,\n serverResponseSchema,\n RpcId,\n type RpcError,\n} from '@deepseek-ai/dsh-host-apiproxy/api'\nimport { credentialRef } from '@deepseek-ai/dsh-credentials'\nimport { boundContextSummary, createUserMessage } from '@deepseek-ai/dsh-llm'\nimport type { Agent } from '@deepseek-ai/dsh-agent'\n// The Host's own subagent-ownership predicate, reused rather than reimplemented:\n// this is a safety rule, and a local copy of it would drift from the Host's.\nimport { hasApiRemoteSubagentOwner } from '@deepseek-ai/dsh-api-remotes'\nimport type { Session } from '@deepseek-ai/dsh-session'\nimport type { SubagentRunEndInfo } from '@deepseek-ai/dsh-subagent'\nimport z from '@deepseek-ai/schemastery'\nimport WebSocket, { WebSocketServer } from 'ws'\nimport type { RawData } from 'ws'\nimport {\n INTERCONNECT_CHANNEL,\n INTERCONNECT_TOKEN_REF,\n type Config,\n type DeliveryMode,\n type EventNotification,\n type EventPayload,\n type LinkFrame,\n type ListResult,\n type PingResult,\n type SendPayload,\n type SendResult,\n type SendRequest,\n type SendFailure,\n type SessionSummary,\n type WebSocketLinkHandle,\n} from './types.ts'\n\nexport type * from './types.ts'\nexport { INTERCONNECT_CHANNEL, INTERCONNECT_TOKEN_REF } from './types.ts'\n\ndeclare module '@deepseek-ai/cordis' {\n interface Context {\n interconnect: InterconnectService\n }\n interface Events {\n /**\n * A remote peer instance pushed one authenticated lifecycle notification\n * into this instance. Payload is the exact {@link EventNotification} that\n * crossed the wire; listeners may react but must not block the HTTP ack.\n */\n 'interconnect/event'(notification: EventNotification, peer: string): void\n }\n}\n\nconst INVALID_REQUEST_RPC_ID = RpcId('invalid-request')\n/** Headroom for the request body so a malicious sender cannot pin the process. */\nconst MAX_REQUEST_BODY_BYTES = 1024 * 1024\n\n/** `source.plugin` for messages this service splices into a local inbox. */\nconst PLUGIN_SOURCE = 'dsh-interconnect'\n\n/** WebSocket upgrade pathname owning the persistent peer link. */\nconst LINK_CHANNEL = '/interconnect/link'\n\n/** Wire union for the discriminated EventNotification fact (shared by HTTP and WS). */\nconst notificationSchema = z.union([\n z.object({ kind: z.const('agent/created'), sessionId: z.string() }),\n z.object({ kind: z.const('agent/disposed'), sessionId: z.string() }),\n z.object({ kind: z.const('agent/status'), sessionId: z.string(), status: z.union([z.const('idle'), z.const('running')]) }),\n z.object({ kind: z.const('session/created'), sessionId: z.string(), parentSessionId: z.string() }),\n z.object({ kind: z.const('session/disposed'), sessionId: z.string() }),\n z.object({ kind: z.const('subagent/end'), provider: z.string(), childSessionId: z.string(), stopReason: z.string() }),\n])\n\n/** Wire union for one WebSocket link text frame. */\nconst linkFrameSchema = z.union([\n z.object({ type: z.const('hello'), sender: z.string() }),\n z.object({ type: z.const('event'), notification: notificationSchema }),\n])\n\n/**\n * Wire union the send endpoint expects inside the ClientRequest payload slot.\n * `delivery` is optional and constrained to the same three names the config\n * accepts, so an unknown mode fails the envelope instead of reaching a method\n * lookup on `Agent`.\n */\nconst sendPayloadSchema = z.object({\n sessionId: z.string(),\n text: z.string(),\n delivery: z.union([z.const('followup'), z.const('steer'), z.const('inject')]),\n resume: z.boolean(),\n})\n\n/** Wire union the event endpoint expects \u2014 sender identity wrapping a discriminated fact. */\nconst eventPayloadSchema = z.object({\n sender: z.string(),\n notification: notificationSchema,\n})\n\n/**\n * Live cross-instance handoff service, registered as `ctx.interconnect`.\n * Requires the host webserver, the live agent registry, and the credential\n * store; activation is availability-driven like every other host service.\n */\nexport class InterconnectService extends Service {\n static inject = ['webServer', 'agents', 'credentials']\n static Config: z<Config> = z.object({\n instanceId: z.string().default('dsh'),\n requestTimeoutMs: z.natural().max(60000).default(10000),\n peers: z.array(z.string()).default([]),\n delivery: z.union([z.const('followup'), z.const('steer'), z.const('inject')]).default('followup'),\n allowResume: z.boolean().default(true),\n })\n\n private readonly instanceId: string\n private readonly requestTimeoutMs: number\n private readonly delivery: DeliveryMode\n private readonly allowResume: boolean\n private readonly peers = new Set<string>()\n private readonly subscriptions: (() => void)[] = []\n private readonly server = new WebSocketServer({ noServer: true })\n private readonly sockets = new Set<WebSocket>()\n private readonly linkStates = new Map<string, LinkState>()\n private heartbeatTimer: NodeJS.Timeout | undefined\n /** Peer identity each live socket announced via its `hello` frame, if any. */\n private readonly peerOf = new WeakMap<WebSocket, string>()\n\n constructor(ctx: Context, config: Config) {\n super(ctx, 'interconnect')\n this.instanceId = config.instanceId\n this.requestTimeoutMs = config.requestTimeoutMs\n this.delivery = config.delivery ?? 'followup'\n this.allowResume = config.allowResume ?? true\n for (const peer of config.peers ?? []) this.peers.add(trimBase(peer))\n\n const route: WebRoute = {\n kind: 'prefix',\n path: INTERCONNECT_CHANNEL,\n handler: (req, res) => this.handle(req, res),\n }\n ctx.effect(() => ctx.webServer.register(route), 'interconnect: /interconnect route')\n\n const upgrade: WebUpgradeRoute = {\n path: LINK_CHANNEL,\n handler: (req, socket, head) => { void this.handleUpgrade(req, socket, head) },\n }\n ctx.effect(() => ctx.webServer.registerUpgrade(upgrade), 'interconnect: /interconnect/link websocket')\n\n // Liveness sweep: terminate sockets that stopped answering protocol pings.\n this.heartbeatTimer = setInterval(() => {\n for (const socket of this.sockets) {\n if ((socket as WebSocket & { isAlive?: boolean }).isAlive === false) {\n socket.terminate()\n this.sockets.delete(socket)\n continue\n }\n ;(socket as WebSocket & { isAlive?: boolean }).isAlive = false\n socket.ping()\n }\n }, 30000)\n\n this.subscriptions.push(ctx.on('agent/status', ({ agent, status }) => {\n this.fanout({ kind: 'agent/status', sessionId: String(agent.session.id), status })\n }))\n this.subscriptions.push(ctx.on('agent/created', ({ agent }) => {\n this.fanout({ kind: 'agent/created', sessionId: String(agent.session.id) })\n }))\n this.subscriptions.push(ctx.on('agent/disposed', ({ agent }) => {\n this.fanout({ kind: 'agent/disposed', sessionId: String(agent.session.id) })\n }))\n this.subscriptions.push(ctx.on('session/created', (session: Session) => {\n const parentSessionId = session.header.parentSession === undefined\n ? undefined\n : String(session.header.parentSession)\n this.fanout({\n kind: 'session/created',\n sessionId: String(session.id),\n ...(parentSessionId === undefined ? {} : { parentSessionId }),\n })\n }))\n this.subscriptions.push(ctx.on('session/disposed', (session: Session) => {\n this.fanout({ kind: 'session/disposed', sessionId: String(session.id) })\n }))\n this.subscriptions.push(ctx.on('subagent/end', (info: SubagentRunEndInfo) => {\n // Only in-process children are this instance's own work; remote provider\n // runs settle through a different, non-local path.\n if (!info.local) return\n this.fanout({\n kind: 'subagent/end',\n provider: info.provider,\n childSessionId: String(info.id),\n stopReason: info.stopReason,\n })\n }))\n\n // Clean up the event listeners with the service fiber.\n ctx.effect(() => () => {\n for (const dispose of this.subscriptions.splice(0)) dispose()\n }, 'interconnect: event subscriptions')\n\n // Terminate every live socket, outbound dial loop, and the no-server\n // acceptor when the service fiber unwinds.\n ctx.effect(() => () => {\n if (this.heartbeatTimer !== undefined) clearInterval(this.heartbeatTimer)\n for (const state of this.linkStates.values()) state.close()\n this.linkStates.clear()\n for (const socket of this.sockets) socket.terminate()\n this.sockets.clear()\n this.server.close()\n }, 'interconnect: websocket teardown')\n }\n\n async send(request: SendRequest): Promise<SendResult> {\n // Spread the override only when present: JSON.stringify would otherwise\n // drop an explicit `delivery: undefined` anyway, but building the key\n // conditionally keeps the wire shape identical to a caller that omitted it.\n const payload: SendPayload = {\n sessionId: request.sessionId,\n text: request.text,\n ...(request.delivery === undefined ? {} : { delivery: request.delivery }),\n ...(request.resume === undefined ? {} : { resume: request.resume }),\n }\n const result = await this.post<SendResult>(request.baseUrl, 'send', payload)\n // No usable answer means the receiver never spoke, so the instance id here\n // is this sender's own \u2014 hence `unreachable` rather than any claim about\n // the target session, which may be perfectly fine.\n return result ?? { delivered: false, instance: this.instanceId, reason: 'unreachable' }\n }\n\n async ping(baseUrl: string): Promise<PingResult | undefined> {\n return this.post<PingResult>(baseUrl, 'ping', {})\n }\n\n /**\n * List the peer's live sessions so a caller can discover a valid `send`\n * target. `undefined` on transport or auth failure, matching `ping`.\n */\n async list(baseUrl: string): Promise<ListResult | undefined> {\n return this.post<ListResult>(baseUrl, 'list', {})\n }\n\n /**\n * Add a peer origin to the event fan-out set at runtime. Returns a disposer\n * that removes it. Duplicate origins are idempotent.\n * @param peer - receiver origin, e.g. `http://127.0.0.1:3080`.\n * @returns disposer removing the peer from the fan-out set.\n */\n subscribe(peer: string): () => void {\n const trimmed = trimBase(peer)\n this.peers.add(trimmed)\n return () => { this.peers.delete(trimmed) }\n }\n\n /** Remove a peer origin from the event fan-out set. */\n unsubscribe(peer: string): void {\n this.peers.delete(trimBase(peer))\n }\n\n /**\n * Open (and, on drop, re-open) a persistent WebSocket link to a peer. Local\n * events stream over the link in real time, and events the peer pushes are\n * surfaced as `interconnect/event`. Repeating for the same peer returns the\n * existing handle.\n * @param peer - receiver origin, e.g. `http://127.0.0.1:3080` (dialed as `ws:`).\n * @returns a handle closing the link and cancelling reconnection.\n */\n link(peer: string): WebSocketLinkHandle {\n const trimmed = trimBase(peer)\n const existing = this.linkStates.get(trimmed)\n if (existing !== undefined) return existing\n const state = new LinkState(this, trimmed)\n this.linkStates.set(trimmed, state)\n state.dial()\n return state\n }\n\n /** Remove a closed outbound link's state so a later `link` re-dials fresh. */\n forgetLink(peer: string): void {\n this.linkStates.delete(peer)\n }\n\n /** Fan one serialized lifecycle fact out to every registered peer, fire-and-forget. */\n private fanout(notification: EventNotification): void {\n const payload: EventPayload = { sender: this.instanceId, notification }\n for (const peer of this.peers) {\n // Fire-and-forget, but never unhandled: `post` guards its own fetch, yet\n // the token read ahead of it is a provider call that may reject. This runs\n // from a lifecycle-event listener, so an unhandled rejection would take the\n // process down over a notification nobody awaited.\n void this.post(peer, 'event', payload).catch((error: unknown) => {\n this.ctx.logger.warn(`interconnect: event fan-out to ${peer} failed: ${error instanceof Error ? error.message : String(error)}`)\n })\n }\n this.broadcast(notification)\n }\n\n /** Push one fact over every live WebSocket link, dropping closed sockets. */\n private broadcast(notification: EventNotification): void {\n if (this.sockets.size === 0) return\n const frame: LinkFrame = { type: 'event', notification }\n const encoded = JSON.stringify(frame)\n for (const socket of this.sockets) {\n if (socket.readyState !== WebSocket.OPEN) {\n this.sockets.delete(socket)\n continue\n }\n socket.send(encoded)\n }\n }\n\n /** Inbound route handler: bearer auth first, then envelope dispatch. */\n private async handle(req: IncomingMessage, res: ServerResponse): Promise<void> {\n const token = await this.resolveToken()\n if (token === undefined) {\n res.writeHead(403)\n res.end('forbidden')\n return\n }\n const expected = `Bearer ${token}`\n const header = req.headers.authorization\n // Timing-safe compare so an attacker cannot siphon the token by timing.\n if (header === undefined || !timingSafeEqual(header, expected)) {\n res.writeHead(401)\n res.end('unauthorized')\n return\n }\n await this.dispatch(req, res)\n }\n\n /** Parse the ClientRequest envelope and route to the named endpoint. */\n private async dispatch(req: IncomingMessage, res: ServerResponse): Promise<void> {\n const pathname = new URL(req.url ?? '/', 'http://dsh.internal').pathname\n const endpoint = endpointFromPath(INTERCONNECT_CHANNEL, pathname)\n if (req.method !== 'POST' || endpoint === undefined) {\n res.writeHead(404)\n res.end('not found')\n return\n }\n\n const mediaType = (req.headers['content-type'] ?? '').split(';', 1)[0]?.trim().toLowerCase()\n if (mediaType !== 'application/json') {\n res.writeHead(415)\n res.end('content type must be application/json')\n return\n }\n\n const body = await readBody(req)\n if (body === undefined) {\n res.writeHead(413)\n res.end('body too large')\n return\n }\n\n let envelope: { rpcId: unknown; method: unknown; payload: unknown }\n try {\n envelope = JSON.parse(body) as { rpcId: unknown; method: unknown; payload: unknown }\n } catch {\n res.writeHead(400)\n res.end('body is not JSON')\n return\n }\n\n const parsed = clientRequestSchema.safeParse(envelope)\n const rpcId = typeof envelope.rpcId === 'string' ? RpcId(envelope.rpcId) : INVALID_REQUEST_RPC_ID\n if (!parsed.success) {\n writeError(res, rpcId, {\n code: 'bad-request',\n message: 'invalid client-request message',\n details: { issues: parsed.error.issues },\n })\n return\n }\n if (parsed.data.method !== endpoint) {\n writeError(res, rpcId, {\n code: 'bad-request',\n message: `method ${JSON.stringify(parsed.data.method)} does not match endpoint ${JSON.stringify(endpoint)}`,\n details: { issues: [] },\n })\n return\n }\n\n try {\n // Awaited: `send` may resume a persisted session, which is asynchronous.\n // Without the await a Promise would serialize as `{}` and every async\n // rejection would escape this catch as an unhandled rejection.\n const value = await this.runEndpoint(endpoint, parsed.data.payload)\n writeFull(res, rpcId, { ok: true, value })\n } catch (error) {\n if (error instanceof UnknownEndpointError) {\n res.writeHead(404)\n res.end('not found')\n return\n }\n // A payload the endpoint schema rejects is the caller's error, so it gets\n // `bad-request` and no warning: logging it would let a peer fill this\n // instance's log by sending malformed payloads.\n if (error instanceof InvalidPayloadError) {\n writeError(res, rpcId, {\n code: 'bad-request',\n message: error.message,\n details: { issues: [] },\n })\n return\n }\n this.ctx.logger.warn(error instanceof Error ? error : new Error(String(error)))\n writeError(res, rpcId, {\n code: 'internal',\n message: error instanceof Error ? error.message : String(error),\n details: {},\n })\n }\n }\n\n /** Dispatch one authenticated business call. */\n private async runEndpoint(endpoint: string, payload: unknown): Promise<unknown> {\n if (endpoint === 'ping') {\n return { pong: true, instance: this.instanceId }\n }\n if (endpoint === 'send') {\n let parsed: SendPayload\n try {\n parsed = z.resolve(payload, sendPayloadSchema, {})[0] as SendPayload\n } catch (error) {\n throw new InvalidPayloadError(`send payload invalid: ${error instanceof Error ? error.message : String(error)}`)\n }\n return this.deliver(parsed)\n }\n if (endpoint === 'list') {\n return this.listSessions()\n }\n if (endpoint === 'event') {\n let eventPayload: EventPayload\n try {\n eventPayload = z.resolve(payload, eventPayloadSchema, {})[0] as EventPayload\n } catch (error) {\n throw new InvalidPayloadError(`event payload invalid: ${error instanceof Error ? error.message : String(error)}`)\n }\n this.receiveEvent(eventPayload)\n return { accepted: true }\n }\n throw new UnknownEndpointError(endpoint)\n }\n\n /** Surface one remote notification to local listeners and the log. */\n private receiveEvent(eventPayload: EventPayload): void {\n this.ctx.logger.info(`interconnect: remote event ${eventPayload.notification.kind} from ${eventPayload.sender}`)\n this.ctx.emit('interconnect/event', eventPayload.notification, eventPayload.sender)\n }\n\n /**\n * Summarize every live local session so a sender can discover valid targets\n * instead of having to know a session id already. Only live agents are listed\n * because `send` can reach exactly those.\n *\n * Title and status are best-effort: the title projection is an optional\n * service, and a receiver without it still returns the ids. A projection that\n * throws degrades that one row rather than failing the whole listing, which\n * matches how the Host's own session listing treats its projection column.\n */\n private listSessions(): ListResult {\n // `agents.list()` includes subagent children; a row this instance would\n // refuse to deliver to must not be advertised as a target, or the listing\n // contradicts `send`.\n const reachable = this.ctx.agents.list()\n .filter(agent => !hasApiRemoteSubagentOwner(this.ctx, agent.session, agent))\n const sessions = reachable.map((agent): SessionSummary => {\n let title: string | undefined\n try {\n const snapshot = this.ctx.get('sessionProjections')?.snapshot(agent.session)\n const value = snapshot?.values.title\n if (typeof value === 'string' && value !== '') title = value\n } catch {\n // A failing projection must not hide a reachable session.\n title = undefined\n }\n return {\n sessionId: agent.id,\n ...(title === undefined ? {} : { title }),\n ...(typeof agent.status === 'string' ? { status: agent.status } : {}),\n }\n })\n return { sessions, instance: this.instanceId }\n }\n\n /**\n * Resolve a session that is not currently live, when the sender asked to wake\n * it. Returns the agent, or the reason it stays undelivered.\n *\n * The resume is delegated to the Host's configured `agent` lookup rather than\n * calling `ctx.agents.resume()` here, and that is the whole point: a handle\n * from `resume()` is owned by the CALLING context, so resuming on this\n * plugin's fiber would tear the session down again the moment the plugin\n * unloads (measured: the same call through the root context leaves it alive).\n * The Host's resolver owns it instead, and it also composes the preset the\n * session recorded \u2014 so a woken agent comes back with the toolset its history\n * was produced under, not an empty one.\n */\n private async wake(payload: SendPayload): Promise<{ agent: Agent } | { reason: SendFailure }> {\n if (payload.resume !== true) return { reason: 'session-not-live' }\n if (!this.allowResume) return { reason: 'resume-refused' }\n // Optional by design: a deployment without the Host's lookup (headless, or\n // a profile with no api-proxy) degrades to the plain not-live answer rather\n // than failing the call.\n const lookup = this.ctx.get('typert')?.lookups.get('agent')\n if (lookup === undefined) return { reason: 'session-not-live' }\n try {\n const resolved = await lookup.resolve(payload.sessionId as never)\n // `undefined` is not a failed wake: the base `agent` provider is a plain\n // registry read, so a deployment without the Host's resuming resolver\n // answers undefined for every id that is not already live. Reporting\n // `resume-failed` there would send the caller chasing a wake that was\n // never possible, when the honest answer is that nothing is live here.\n if (resolved === undefined || resolved === null) return { reason: 'session-not-live' }\n return { agent: resolved as Agent }\n } catch (error) {\n // A refusing resolver is an expected outcome, not a fault of this\n // instance: the id may not exist, or a subagent owner may hold it.\n this.ctx.logger.info(`interconnect: resume refused for ${payload.sessionId}: ${error instanceof Error ? error.message : String(error)}`)\n return { reason: 'resume-failed' }\n }\n }\n\n /**\n * Deliver one message to a live local session, waking a persisted one only\n * when the sender asked and this receiver allows it.\n */\n private async deliver(payload: SendPayload): Promise<SendResult> {\n let agent = this.ctx.agents.get(payload.sessionId as Agent['id'])\n if (agent === undefined) {\n const woken = await this.wake(payload)\n if ('reason' in woken) {\n return { delivered: false, instance: this.instanceId, reason: woken.reason }\n }\n agent = woken.agent\n }\n // Fence the live-hit path too, exactly as the Host does before handing out a\n // live agent: a session reserved to subagent routing is delivered to by its\n // parent, and splicing into its inbox from here would race that parent. The\n // wake path needs no separate check because the Host's resolver applies the\n // same fence internally.\n if (hasApiRemoteSubagentOwner(this.ctx, agent.session, agent)) {\n return { delivered: false, instance: this.instanceId, reason: 'session-owned-by-subagent' }\n }\n // Attribute the message to this plugin, not to the human operator: the\n // receiving agent must be able to tell a cross-instance handoff from text\n // its own user typed. `SendPayload` carries no sender field (the wire shape\n // is unauthenticated beyond the shared token), so the notice names the\n // receiving instance the handoff landed on.\n const message = createUserMessage({\n source: {\n kind: 'plugin',\n plugin: PLUGIN_SOURCE,\n form: 'notice',\n summary: boundContextSummary(`interconnect handoff delivered on instance ${this.instanceId}`),\n },\n content: [{ type: 'text', text: payload.text }],\n })\n // The sender may override the mode per message, because urgency belongs to\n // one message rather than to the link; an absent override leaves the\n // receiver's configured default in force. The switch is exhaustive over\n // DeliveryMode so adding a mode fails the type check here instead of\n // silently falling through to `followup`.\n const mode: DeliveryMode = payload.delivery ?? this.delivery\n switch (mode) {\n case 'steer':\n agent.steer(message)\n break\n case 'inject':\n agent.inject(message)\n break\n case 'followup':\n agent.followup(message)\n break\n }\n return { delivered: true, instance: this.instanceId, delivery: mode }\n }\n\n /** POST one business call to a peer instance; undefined on transport/auth failure. */\n private async post<T>(baseUrl: string, endpoint: string, payload: unknown): Promise<T | undefined> {\n const token = await this.resolveToken()\n if (token === undefined) return undefined\n const url = `${trimBase(baseUrl)}${INTERCONNECT_CHANNEL}/${endpoint}`\n const envelope = {\n type: 'client-request',\n rpcId: crypto.randomUUID(),\n method: endpoint,\n payload,\n }\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(envelope),\n signal: AbortSignal.timeout(this.requestTimeoutMs),\n })\n if (!response.ok) return undefined\n const body = (await response.json()) as { result?: { ok?: boolean; value?: unknown } }\n if (body.result?.ok !== true) return undefined\n return body.result.value as T\n } catch (error) {\n this.ctx.logger.warn(`interconnect: ${endpoint} to ${baseUrl} failed: ${error instanceof Error ? error.message : String(error)}`)\n return undefined\n }\n }\n\n private async resolveToken(): Promise<string | undefined> {\n const credential = await this.ctx.credentials.resolve(credentialRef(INTERCONNECT_TOKEN_REF))\n return credential === undefined || credential.value.length === 0 ? undefined : credential.value\n }\n\n /** Resolve the shared token for an outbound dial (same source as inbound). */\n resolveTokenForDial(): Promise<string | undefined> {\n return this.resolveToken()\n }\n\n /** Inbound WebSocket upgrade: authenticate the bearer header, then accept. */\n private async handleUpgrade(req: IncomingMessage, socket: Duplex, head: Buffer): Promise<void> {\n let token: string | undefined\n try {\n token = await this.resolveToken()\n } catch (error) {\n // Fail closed and end the socket: the caller invokes this as\n // `void handleUpgrade(...)`, so letting the rejection escape would both\n // leave this client hanging on an open socket and surface as an unhandled\n // rejection.\n this.ctx.logger.warn(`interconnect: upgrade token read failed: ${error instanceof Error ? error.message : String(error)}`)\n socket.end('HTTP/1.1 403 Forbidden\\r\\nConnection: close\\r\\nContent-Length: 9\\r\\n\\r\\nforbidden')\n return\n }\n if (token === undefined) {\n socket.end('HTTP/1.1 403 Forbidden\\r\\nConnection: close\\r\\nContent-Length: 9\\r\\n\\r\\nforbidden')\n return\n }\n const expected = `Bearer ${token}`\n const header = req.headers.authorization\n if (header === undefined || !timingSafeEqual(header, expected)) {\n socket.end('HTTP/1.1 401 Unauthorized\\r\\nConnection: close\\r\\nContent-Length: 12\\r\\n\\r\\nunauthorized')\n return\n }\n this.server.handleUpgrade(req, socket, head, (websocket) => {\n this.attachSocket(websocket)\n })\n }\n\n /**\n * Install frame + liveness handling on one socket and add it to the live\n * pool. Used by both the server half (accepted upgrade) and the client half\n * (outbound dial), so a single socket carries events both directions.\n */\n attachSocket(websocket: WebSocket): void {\n this.sockets.add(websocket)\n ;(websocket as WebSocket & { isAlive: boolean }).isAlive = true\n websocket.on('pong', () => {\n ;(websocket as WebSocket & { isAlive: boolean }).isAlive = true\n })\n websocket.on('message', (data: RawData) => {\n this.handleFrame(websocket, data)\n })\n websocket.on('close', () => {\n this.sockets.delete(websocket)\n this.peerOf.delete(websocket)\n })\n websocket.on('error', () => {\n this.sockets.delete(websocket)\n })\n // Announce this instance's identity so the dialer can attribute pushes.\n websocket.send(JSON.stringify({ type: 'hello', sender: this.instanceId } satisfies LinkFrame))\n }\n\n /** Parse and route one inbound link frame, attributing events to the socket's announced peer. */\n private handleFrame(socket: WebSocket, data: RawData): void {\n if (Array.isArray(data)) return // binary frames are a protocol violation; ignore\n const text = Buffer.isBuffer(data) ? data.toString('utf8') : Buffer.from(data).toString('utf8')\n let frame: LinkFrame\n try {\n frame = z.resolve(JSON.parse(text), linkFrameSchema, {})[0] as LinkFrame\n } catch {\n this.ctx.logger.warn('interconnect: dropping malformed link frame')\n return\n }\n if (frame.type === 'hello') {\n this.peerOf.set(socket, frame.sender)\n return\n }\n const sender = this.peerOf.get(socket) ?? 'unknown-peer'\n try {\n this.receiveEvent({ sender, notification: frame.notification })\n } catch (error) {\n // `receiveEvent` emits `interconnect/event`, and Cordis propagates a\n // listener throw back to the emitter. This runs inside the socket's\n // synchronous `message` handler, so an escaping throw becomes an\n // uncaughtException \u2014 letting any remote peer kill this process by sending\n // an event a local listener happens to mishandle.\n this.ctx.logger.warn(`interconnect: listener for a ${frame.notification.kind} event from ${sender} threw: ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n}\n\n/** Thrown for an endpoint this channel does not own; mapped to HTTP 404. */\nclass UnknownEndpointError extends Error {\n constructor(endpoint: string) {\n super(`unknown interconnect endpoint ${JSON.stringify(endpoint)}`)\n this.name = 'UnknownEndpointError'\n }\n}\n\n/**\n * Thrown when an authenticated envelope carries a business payload its endpoint\n * schema rejects. Typed so the request catch can answer `bad-request` instead of\n * `internal`: the caller sent an unusable payload, so retrying it unchanged can\n * never succeed, and the receiver is not faulty.\n */\nclass InvalidPayloadError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'InvalidPayloadError'\n }\n}\n\n/**\n * One outbound WebSocket peer link: dials, re-dials with backoff after an\n * unexpected drop, and pushes local events over the live socket. The owning\n * service streams events via {@link InterconnectService.broadcast} only to\n * sockets it accepted; this dialer keeps its own socket OUT of that set and\n * instead subscribes to local events through the service's fan-out via a\n * dedicated route below.\n */\nclass LinkState implements WebSocketLinkHandle {\n private socket: WebSocket | undefined\n private closed = false\n private retry = 0\n private reconnectTimer: ReturnType<typeof setTimeout> | undefined\n\n readonly peer: string\n\n constructor(\n private readonly owner: InterconnectService,\n peer: string,\n ) {\n this.peer = peer\n }\n\n /** Open the socket; reconnect is scheduled by the close handler. */\n dial(): void {\n if (this.closed) return\n const url = new URL('/interconnect/link', this.peer)\n url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:'\n void this.owner.resolveTokenForDial().then((token) => {\n if (token === undefined || this.closed) return\n const socket = new WebSocket(url, {\n headers: { authorization: `Bearer ${token}` },\n })\n this.socket = socket\n socket.once('open', () => {\n this.retry = 0\n // Same handler as the server half: adds to the live pool and announces\n // this instance's identity over the now-open link.\n this.owner.attachSocket(socket)\n })\n socket.once('close', () => {\n if (this.closed) return\n this.scheduleReconnect()\n })\n socket.on('error', () => {\n // close follows; reconnect is scheduled there.\n })\n }).catch(() => {\n // A rejecting token read must not become an unhandled rejection, and must\n // not silently end the dial loop either: without this the link would stay\n // down until the process restarted, since no socket was ever created and\n // so no `close` will arrive to schedule the retry.\n if (this.closed) return\n this.scheduleReconnect()\n })\n }\n\n close(): void {\n this.closed = true\n this.owner.forgetLink(this.peer)\n if (this.reconnectTimer !== undefined) clearTimeout(this.reconnectTimer)\n const socket = this.socket\n if (socket !== undefined) {\n socket.removeAllListeners()\n socket.terminate()\n }\n }\n\n private scheduleReconnect(): void {\n const delay = Math.min(30000, 1000 * 2 ** this.retry)\n this.retry += 1\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = undefined\n this.dial()\n }, delay)\n }\n}\n\nfunction endpointFromPath(channel: string, pathname: string): string | undefined {\n if (!pathname.startsWith(`${channel}/`)) return undefined\n return pathname.slice(channel.length + 1)\n}\n\n/** Read a request body up to the cap; undefined when it exceeds the cap. */\nasync function readBody(req: IncomingMessage): Promise<string | undefined> {\n let size = 0\n const chunks: Buffer[] = []\n for await (const chunk of req) {\n const buffer = chunk as Buffer\n size += buffer.byteLength\n if (size > MAX_REQUEST_BODY_BYTES) return undefined\n chunks.push(buffer)\n }\n return Buffer.concat(chunks).toString()\n}\n\n/** Constant-time string comparison over the ASCII-encoded lengths. */\nfunction timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false\n let diff = 0\n for (let i = 0; i < a.length; i += 1) {\n diff |= a.charCodeAt(i) ^ b.charCodeAt(i)\n }\n return diff === 0\n}\n\nfunction trimBase(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '')\n}\n\nfunction writeFull(\n res: ServerResponse,\n rpcId: unknown,\n result: { ok: true; value?: unknown } | { ok: false; error: RpcError },\n): void {\n const body = serverResponseSchema.parse({\n type: 'server-response',\n rpcId,\n result,\n })\n res.writeHead(200, { 'content-type': 'application/json' })\n res.end(JSON.stringify(body))\n}\n\nfunction writeError(res: ServerResponse, rpcId: unknown, error: RpcError): void {\n writeFull(res, rpcId, { ok: false, error })\n}\n\nexport default InterconnectService\n", "/** String/symbol keyed dictionary type. */\nexport type Dict<T = any, K extends string | symbol = string> = { [key in K]: T }\n/** Safely read `T[K]`, returning `never` when `K` is not a key of `T`. */\nexport type Get<T extends {}, K> = K extends keyof T ? T[K] : never\n/** Conditional extraction helper with a configurable return type. */\nexport type Extract<S, T, U = S> = S extends T ? U : never\n/** Accept a value or an array, unless the value is already an array type. */\nexport type MaybeArray<T> = [T] extends [unknown[]] ? T : T | T[]\n/** Wrap a value in `Promise`, preserving the resolved type of existing promises. */\nexport type Promisify<T> = Promise<T extends Promise<infer S> ? S : T>\n/** Accept a value or promise unless the value type is already promise-like. */\nexport type Awaitable<T> = [T] extends [Promise<unknown>] ? T : T | Promise<T>\n/** Convert a union type to an intersection type. */\nexport type Intersect<U> = (U extends any ? (arg: U) => void : never) extends ((arg: infer I) => void) ? I : never\n\n/** No-op callback returning `undefined` at runtime and `any` at type level. */\nexport function noop(): any {}\n\n/** Return true when a value is `null` or `undefined`. */\nexport function isNullable(value: any): value is null | undefined | void {\n return value === null || value === undefined\n}\n\n/** Return true when a value is neither `null` nor `undefined`. */\nexport function isNonNullable<T>(value: T): value is NonNullable<T> {\n return !isNullable(value)\n}\n\n/** Return true for non-array object values. */\nexport function isPlainObject(data: any) {\n return data && typeof data === 'object' && !Array.isArray(data)\n}\n\n/** Filter object entries with a key type guard. */\nexport function filterKeys<T, K extends string, U extends K>(object: Dict<T, K>, filter: (key: K, value: T) => key is U): Dict<T, U>\n/** Filter object entries with a boolean predicate. */\nexport function filterKeys<T, K extends string>(object: Dict<T, K>, filter: (key: K, value: T) => boolean): Dict<T, K>\n/** Filter object entries and return a new object. */\nexport function filterKeys(object: {}, filter: (key: string, value: any) => boolean) {\n return Object.fromEntries(Object.entries(object).filter(([key, value]) => filter(key, value)))\n}\n\n/** Map object values while preserving the original key set. */\nexport function mapValues<U, T, K extends string>(object: Dict<T, K>, transform: (value: T, key: K) => U) {\n return Object.fromEntries(Object.entries(object).map(([key, value]) => [key, (transform as any)(value, key)])) as Dict<U, K>\n}\n\n/** Alias for `mapValues`. */\nexport { mapValues as valueMap }\n\n/** Pick selected keys from an object, optionally including `undefined` values. */\nexport function pick<T extends object, K extends keyof T>(source: T, keys?: Iterable<K>, forced?: boolean) {\n if (!keys) return { ...source }\n const result = {} as Pick<T, K>\n for (const key of keys) {\n if (forced || source[key] !== undefined) result[key] = source[key]\n }\n return result\n}\n\n/** Omit selected keys from a shallow object copy. */\nexport function omit<T, K extends keyof T>(source: T, keys?: Iterable<K>) {\n if (!keys) return { ...source }\n const result = { ...source } as Omit<T, K>\n for (const key of keys) {\n Reflect.deleteProperty(result, key)\n }\n return result\n}\n\n/** Define a non-enumerable writable property with a typed key. */\nexport function defineProperty<T, K extends keyof T>(object: T, key: K, value: T[K]): T\n/** Define a non-enumerable writable property with an arbitrary key. */\nexport function defineProperty<T, K extends keyof any>(object: T, key: K, value: any): T\n/** Define a non-enumerable writable property and return the object. */\nexport function defineProperty<T, K extends keyof any>(object: T, key: K, value: any) {\n return Object.defineProperty(object, key, { writable: true, value, enumerable: false })\n}\n", "import { isNullable } from './misc.ts'\n\ntype GlobalConstructorNames = keyof {\n [K in keyof typeof globalThis as typeof globalThis[K] extends abstract new (...args: any) => any ? K : never]: K\n}\n\n/** Create a predicate for a global constructor name. */\nexport function is<K extends GlobalConstructorNames>(type: K): (value: any) => value is InstanceType<typeof globalThis[K]>\n/** Test whether a value matches a global constructor name. */\nexport function is<K extends GlobalConstructorNames>(type: K, value: any): value is InstanceType<typeof globalThis[K]>\n/** Test values using `instanceof` with a `toStringTag` fallback. */\nexport function is<K extends GlobalConstructorNames>(type: K, value?: any): any {\n if (arguments.length === 1) return (value: any) => is(type, value)\n return type in globalThis && value instanceof (globalThis[type] as any)\n || Object.prototype.toString.call(value).slice(8, -1) === type\n}\n\nfunction isArrayBufferLike(value: any): value is ArrayBufferLike {\n return is('ArrayBuffer', value) || is('SharedArrayBuffer', value)\n}\n\nfunction isArrayBufferSource(value: any): value is Binary.Source {\n return isArrayBufferLike(value) || ArrayBuffer.isView(value)\n}\n\n/** Binary source detection and base64/hex conversion helpers. */\nexport namespace Binary {\n export type Source<T extends ArrayBufferLike = ArrayBufferLike> = T | ArrayBufferView<T>\n\n export const is = isArrayBufferLike\n export const isSource = isArrayBufferSource\n\n export function fromSource<T extends ArrayBufferLike>(source: Source<T>): T {\n if (ArrayBuffer.isView(source)) {\n // https://stackoverflow.com/questions/8609289/convert-a-binary-nodejs-buffer-to-javascript-arraybuffer#answer-31394257\n return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength) as T\n } else {\n return source\n }\n }\n\n export function toBase64(source: Source) {\n source = fromSource(source)\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(source).toString('base64')\n }\n let binary = ''\n const bytes = new Uint8Array(source)\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n return btoa(binary)\n }\n\n export function fromBase64(source: string) {\n if (typeof Buffer !== 'undefined') return fromSource(Buffer.from(source, 'base64'))\n return Uint8Array.from(atob(source), c => c.charCodeAt(0))\n }\n\n export function toHex(source: Source) {\n source = fromSource(source)\n if (typeof Buffer !== 'undefined') return Buffer.from(source).toString('hex')\n return Array.from(new Uint8Array(source), byte => byte.toString(16).padStart(2, '0')).join('')\n }\n\n export function fromHex(source: string) {\n if (typeof Buffer !== 'undefined') return fromSource(Buffer.from(source, 'hex'))\n const hex = source.length % 2 === 0 ? source : source.slice(0, source.length - 1)\n const buffer: number[] = []\n for (let i = 0; i < hex.length; i += 2) {\n buffer.push(parseInt(`${hex[i]}${hex[i + 1]}`, 16))\n }\n return Uint8Array.from(buffer).buffer\n }\n}\n\n/** Decode a base64 string into binary data. */\nexport const base64ToArrayBuffer = Binary.fromBase64\n/** Encode binary data as base64. */\nexport const arrayBufferToBase64 = Binary.toBase64\n/** Decode a hex string into binary data. */\nexport const hexToArrayBuffer = Binary.fromHex\n/** Encode binary data as hex. */\nexport const arrayBufferToHex = Binary.toHex\n\n/** Deep-clone common JavaScript values while preserving prototypes. */\nexport function clone<T>(source: T): T\n/** Deep-clone common JavaScript values while preserving prototypes and cycles. */\nexport function clone(source: any, refs = new Map<any, any>()) {\n if (!source || typeof source !== 'object') return source\n if (is('Date', source)) return new Date(source.valueOf())\n if (is('RegExp', source)) return new RegExp(source.source, source.flags)\n if (isArrayBufferLike(source)) return source.slice(0)\n if (ArrayBuffer.isView(source)) return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength)\n const cached = refs.get(source)\n if (cached) return cached\n if (Array.isArray(source)) {\n const result: any[] = []\n refs.set(source, result)\n source.forEach((value, index) => {\n result[index] = Reflect.apply(clone, null, [value, refs])\n })\n return result\n }\n const result = Object.create(Object.getPrototypeOf(source))\n refs.set(source, result)\n for (const key of Reflect.ownKeys(source)) {\n const descriptor = { ...Reflect.getOwnPropertyDescriptor(source, key) }\n if ('value' in descriptor) {\n descriptor.value = Reflect.apply(clone, null, [descriptor.value, refs])\n }\n Reflect.defineProperty(result, key, descriptor)\n }\n return result\n}\n\n/** Deeply compare arrays, dates, regexps, buffers, and plain object fields. */\nexport function deepEqual(a: any, b: any, strict?: boolean): boolean {\n if (a === b) return true\n if (!strict && isNullable(a) && isNullable(b)) return true\n if (typeof a !== typeof b) return false\n if (typeof a !== 'object') return false\n if (!a || !b) return false\n\n function check<T>(test: (x: any) => x is T, then: (a: T, b: T) => boolean) {\n return test(a) ? test(b) ? then(a, b) : false : test(b) ? false : undefined\n }\n\n return check(Array.isArray, (a, b) => a.length === b.length && a.every((item, index) => deepEqual(item, b[index])))\n ?? check(is('Date'), (a, b) => a.valueOf() === b.valueOf())\n ?? check(is('RegExp'), (a, b) => a.source === b.source && a.flags === b.flags)\n ?? check(isArrayBufferLike, (a, b) => {\n if (a.byteLength !== b.byteLength) return false\n const viewA = new Uint8Array(a)\n const viewB = new Uint8Array(b)\n for (let i = 0; i < viewA.length; i++) {\n if (viewA[i] !== viewB[i]) return false\n }\n return true\n })\n ?? Object.keys({ ...a, ...b }).every(key => deepEqual(a[key], b[key], strict))\n}\n", "/** Time constants plus parsing and formatting helpers. */\nexport namespace Time {\n export const millisecond = 1\n export const second = 1000\n export const minute = second * 60\n export const hour = minute * 60\n export const day = hour * 24\n export const week = day * 7\n\n let timezoneOffset = new Date().getTimezoneOffset()\n\n export function setTimezoneOffset(offset: number) {\n timezoneOffset = offset\n }\n\n export function getTimezoneOffset() {\n return timezoneOffset\n }\n\n export function getDateNumber(date: number | Date = new Date(), offset?: number) {\n if (typeof date === 'number') date = new Date(date)\n if (offset === undefined) offset = timezoneOffset\n return Math.floor((date.valueOf() / minute - offset) / 1440)\n }\n\n export function fromDateNumber(value: number, offset?: number) {\n const date = new Date(value * day)\n if (offset === undefined) offset = timezoneOffset\n return new Date(+date + offset * minute)\n }\n\n const numeric = /\\d+(?:\\.\\d+)?/.source\n const timeRegExp = new RegExp(`^${[\n 'w(?:eek(?:s)?)?',\n 'd(?:ay(?:s)?)?',\n 'h(?:our(?:s)?)?',\n 'm(?:in(?:ute)?(?:s)?)?',\n 's(?:ec(?:ond)?(?:s)?)?',\n ].map(unit => `(${numeric}${unit})?`).join('')}$`)\n\n export function parseTime(source: string) {\n const capture = timeRegExp.exec(source)\n if (!capture) return 0\n return (parseFloat(capture[1]) * week || 0)\n + (parseFloat(capture[2]) * day || 0)\n + (parseFloat(capture[3]) * hour || 0)\n + (parseFloat(capture[4]) * minute || 0)\n + (parseFloat(capture[5]) * second || 0)\n }\n\n export function parseDate(date: string) {\n const parsed = parseTime(date)\n if (parsed) {\n date = Date.now() + parsed as any\n } else if (/^\\d{1,2}(:\\d{1,2}){1,2}$/.test(date)) {\n date = `${new Date().toLocaleDateString()}-${date}`\n } else if (/^\\d{1,2}-\\d{1,2}-\\d{1,2}(:\\d{1,2}){1,2}$/.test(date)) {\n date = `${new Date().getFullYear()}-${date}`\n }\n return date ? new Date(date) : new Date()\n }\n\n export function format(ms: number) {\n const abs = Math.abs(ms)\n if (abs >= day - hour / 2) {\n return Math.round(ms / day) + 'd'\n } else if (abs >= hour - minute / 2) {\n return Math.round(ms / hour) + 'h'\n } else if (abs >= minute - second / 2) {\n return Math.round(ms / minute) + 'm'\n } else if (abs >= second) {\n return Math.round(ms / second) + 's'\n }\n return ms + 'ms'\n }\n\n export function toDigits(source: number, length = 2) {\n return source.toString().padStart(length, '0')\n }\n\n export function template(template: string, time = new Date()) {\n return template\n .replace('yyyy', time.getFullYear().toString())\n .replace('yy', time.getFullYear().toString().slice(2))\n .replace('MM', toDigits(time.getMonth() + 1))\n .replace('dd', toDigits(time.getDate()))\n .replace('hh', toDigits(time.getHours()))\n .replace('mm', toDigits(time.getMinutes()))\n .replace('ss', toDigits(time.getSeconds()))\n .replace('SSS', toDigits(time.getMilliseconds(), 3))\n }\n}\n", "import { Binary, clone, deepEqual, filterKeys, isNullable, isPlainObject, pick, valueMap } from \"@deepseek-ai/cosmokit\";\n//#region lib/types/index.js\nconst kSchema = Symbol.for(\"schemastery\");\nconst kValidationError = Symbol.for(\"ValidationError\");\nglobalThis.__schemastery_index__ ??= 0;\nglobalThis.__schemastery_refs__ = void 0;\nvar ValidationError = class extends TypeError {\n\toptions;\n\tname = \"ValidationError\";\n\tconstructor(message, options) {\n\t\tlet prefix = \"$\";\n\t\tfor (const segment of options.path || []) if (typeof segment === \"string\") prefix += \".\" + segment;\n\t\telse if (typeof segment === \"number\") prefix += \"[\" + segment + \"]\";\n\t\telse if (typeof segment === \"symbol\") prefix += `[Symbol(${segment.toString()})]`;\n\t\tif (prefix.startsWith(\".\")) prefix = prefix.slice(1);\n\t\tsuper((prefix === \"$\" ? \"\" : `${prefix} `) + message);\n\t\tthis.options = options;\n\t}\n\tstatic is(error) {\n\t\treturn !!error?.[kValidationError];\n\t}\n};\nObject.defineProperty(ValidationError.prototype, kValidationError, { value: true });\nconst Schema = function(options) {\n\tconst schema = function(data, options = {}) {\n\t\treturn Schema.resolve(data, schema, options)[0];\n\t};\n\tif (options.refs) {\n\t\tconst refs = valueMap(options.refs, (options) => new Schema(options));\n\t\tconst getRef = (uid) => refs[uid];\n\t\tfor (const key in refs) {\n\t\t\tconst options = refs[key];\n\t\t\toptions.sKey = getRef(options.sKey);\n\t\t\toptions.inner = getRef(options.inner);\n\t\t\toptions.list = options.list && options.list.map(getRef);\n\t\t\toptions.dict = options.dict && valueMap(options.dict, getRef);\n\t\t}\n\t\treturn refs[options.uid];\n\t}\n\tObject.assign(schema, options);\n\tif (typeof schema.callback === \"string\") try {\n\t\tschema.callback = new Function(\"return \" + schema.callback)();\n\t} catch {}\n\tObject.defineProperty(schema, \"uid\", { value: globalThis.__schemastery_index__++ });\n\tObject.setPrototypeOf(schema, Schema.prototype);\n\tschema.meta ||= {};\n\tschema.toString = schema.toString.bind(schema);\n\treturn schema;\n};\nSchema.prototype = Object.create(Function.prototype);\nSchema.prototype[kSchema] = true;\nObject.defineProperty(Schema.prototype, \"~standard\", { get() {\n\treturn {\n\t\tversion: 1,\n\t\tvendor: \"schemastery\",\n\t\tvalidate: (value) => {\n\t\t\ttry {\n\t\t\t\treturn { value: Schema.resolve(value, this, {})[0] };\n\t\t\t} catch (error) {\n\t\t\t\tif (ValidationError.is(error)) return { issues: [{\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\tpath: error.options.path\n\t\t\t\t}] };\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t};\n} });\nSchema.ValidationError = ValidationError;\nSchema.prototype.toJSON = function toJSON() {\n\tif (globalThis.__schemastery_refs__) {\n\t\tglobalThis.__schemastery_refs__[this.uid] ??= JSON.parse(JSON.stringify({ ...this }));\n\t\treturn this.uid;\n\t}\n\tglobalThis.__schemastery_refs__ = { [this.uid]: { ...this } };\n\tglobalThis.__schemastery_refs__[this.uid] = JSON.parse(JSON.stringify({ ...this }));\n\tconst result = {\n\t\tuid: this.uid,\n\t\trefs: globalThis.__schemastery_refs__\n\t};\n\tglobalThis.__schemastery_refs__ = void 0;\n\treturn result;\n};\nSchema.prototype.set = function set(key, value) {\n\tthis.dict[key] = value;\n\treturn this;\n};\nSchema.prototype.push = function push(value) {\n\tthis.list.push(value);\n\treturn this;\n};\nfunction mergeDesc(original, messages) {\n\tconst result = typeof original === \"string\" ? { \"\": original } : { ...original };\n\tfor (const locale in messages) {\n\t\tconst value = messages[locale];\n\t\tif (value?.$description || value?.$desc) result[locale] = value.$description || value.$desc;\n\t\telse if (typeof value === \"string\") result[locale] = value;\n\t}\n\treturn result;\n}\nfunction getInner(value) {\n\treturn value?.$value ?? value?.$inner;\n}\nfunction extractKeys(data) {\n\treturn filterKeys(data ?? {}, (key) => !key.startsWith(\"$\"));\n}\nSchema.prototype.i18n = function i18n(messages) {\n\tconst schema = Schema(this);\n\tconst desc = mergeDesc(schema.meta.description, messages);\n\tif (Object.keys(desc).length) schema.meta.description = desc;\n\tif (schema.dict) schema.dict = valueMap(schema.dict, (inner, key) => {\n\t\treturn inner.i18n(valueMap(messages, (data) => getInner(data)?.[key] ?? data?.[key]));\n\t});\n\tif (schema.list) schema.list = schema.list.map((inner, index) => {\n\t\treturn inner.i18n(valueMap(messages, (data = {}) => {\n\t\t\tif (Array.isArray(getInner(data))) return getInner(data)[index];\n\t\t\tif (Array.isArray(data)) return data[index];\n\t\t\treturn extractKeys(data);\n\t\t}));\n\t});\n\tif (schema.inner) schema.inner = schema.inner.i18n(valueMap(messages, (data) => {\n\t\tif (getInner(data)) return getInner(data);\n\t\treturn extractKeys(data);\n\t}));\n\tif (schema.sKey) schema.sKey = schema.sKey.i18n(valueMap(messages, (data) => data?.$key));\n\treturn schema;\n};\nSchema.prototype.extra = function extra(key, value) {\n\tconst schema = Schema(this);\n\tschema.meta = {\n\t\t...schema.meta,\n\t\t[key]: value\n\t};\n\treturn schema;\n};\nfor (const key of [\n\t\"required\",\n\t\"disabled\",\n\t\"collapse\",\n\t\"hidden\",\n\t\"loose\"\n]) Object.assign(Schema.prototype, { [key](value = true) {\n\tconst schema = Schema(this);\n\tschema.meta = {\n\t\t...schema.meta,\n\t\t[key]: value\n\t};\n\treturn schema;\n} });\nSchema.prototype.deprecated = function deprecated() {\n\tconst schema = Schema(this);\n\tschema.meta.badges ||= [];\n\tschema.meta.badges.push({\n\t\ttext: \"deprecated\",\n\t\ttype: \"danger\"\n\t});\n\treturn schema;\n};\nSchema.prototype.experimental = function experimental() {\n\tconst schema = Schema(this);\n\tschema.meta.badges ||= [];\n\tschema.meta.badges.push({\n\t\ttext: \"experimental\",\n\t\ttype: \"warning\"\n\t});\n\treturn schema;\n};\nSchema.prototype.pattern = function pattern(regexp) {\n\tconst schema = Schema(this);\n\tconst pattern = pick(regexp, [\"source\", \"flags\"]);\n\tschema.meta = {\n\t\t...schema.meta,\n\t\tpattern\n\t};\n\treturn schema;\n};\nSchema.prototype.simplify = function simplify(value) {\n\tif (deepEqual(value, this.meta.default, this.type === \"dict\")) return null;\n\tif (isNullable(value)) return value;\n\tif (this.type === \"object\" || this.type === \"dict\") {\n\t\tconst result = {};\n\t\tfor (const key in value) {\n\t\t\tconst item = (this.type === \"object\" ? this.dict[key] : this.inner)?.simplify(value[key]);\n\t\t\tif (this.type === \"dict\" || !isNullable(item)) result[key] = item;\n\t\t}\n\t\tif (deepEqual(result, this.meta.default, this.type === \"dict\")) return null;\n\t\treturn result;\n\t} else if (this.type === \"array\" || this.type === \"tuple\") {\n\t\tconst result = [];\n\t\tvalue.forEach((value, index) => {\n\t\t\tconst schema = this.type === \"array\" ? this.inner : this.list[index];\n\t\t\tconst item = schema ? schema.simplify(value) : value;\n\t\t\tresult.push(item);\n\t\t});\n\t\treturn result;\n\t} else if (this.type === \"intersect\") {\n\t\tconst result = {};\n\t\tfor (const item of this.list) Object.assign(result, item.simplify(value));\n\t\treturn result;\n\t} else if (this.type === \"union\") for (const schema of this.list) try {\n\t\tSchema.resolve(value, schema, {});\n\t\treturn schema.simplify(value);\n\t} catch {}\n\treturn value;\n};\nSchema.prototype.toString = function toString(inline) {\n\treturn formatters[this.type]?.(this, inline) ?? `Schema<${this.type}>`;\n};\nSchema.prototype.role = function role(role, extra) {\n\tconst schema = Schema(this);\n\tschema.meta = {\n\t\t...schema.meta,\n\t\trole,\n\t\textra\n\t};\n\treturn schema;\n};\nfor (const key of [\n\t\"default\",\n\t\"link\",\n\t\"comment\",\n\t\"description\",\n\t\"max\",\n\t\"min\",\n\t\"step\"\n]) Object.assign(Schema.prototype, { [key](value) {\n\tconst schema = Schema(this);\n\tschema.meta = {\n\t\t...schema.meta,\n\t\t[key]: value\n\t};\n\treturn schema;\n} });\nconst resolvers = {};\nSchema.extend = function extend(type, resolve) {\n\tresolvers[type] = resolve;\n};\nSchema.resolve = function resolve(data, schema, options = {}, strict = false) {\n\tif (!schema) return [data];\n\tif (options.ignore?.(data, schema)) return [data];\n\tif (isNullable(data) && schema.type !== \"lazy\") {\n\t\tif (schema.meta.required) throw new ValidationError(`missing required value`, options);\n\t\tlet current = schema;\n\t\tlet fallback = schema.meta.default;\n\t\twhile (current?.type === \"intersect\" && isNullable(fallback)) {\n\t\t\tcurrent = current.list[0];\n\t\t\tfallback = current?.meta.default;\n\t\t}\n\t\tif (isNullable(fallback)) return [data];\n\t\tdata = clone(fallback);\n\t}\n\tconst callback = resolvers[schema.type];\n\tif (!callback) throw new ValidationError(`unsupported type \"${schema.type}\"`, options);\n\ttry {\n\t\treturn callback(data, schema, options, strict);\n\t} catch (error) {\n\t\tif (!schema.meta.loose) throw error;\n\t\treturn [schema.meta.default];\n\t}\n};\nSchema.from = function from(source) {\n\tif (isNullable(source)) return Schema.any();\n\telse if ([\n\t\t\"string\",\n\t\t\"number\",\n\t\t\"boolean\"\n\t].includes(typeof source)) return Schema.const(source).required();\n\telse if (source[kSchema]) return source;\n\telse if (typeof source === \"function\") switch (source) {\n\t\tcase String: return Schema.string().required();\n\t\tcase Number: return Schema.number().required();\n\t\tcase Boolean: return Schema.boolean().required();\n\t\tcase Function: return Schema.function().required();\n\t\tdefault: return Schema.is(source).required();\n\t}\n\telse throw new TypeError(`cannot infer schema from ${source}`);\n};\nSchema.lazy = function lazy(builder) {\n\tconst toJSON = () => {\n\t\tif (!schema.inner[kSchema]) {\n\t\t\tschema.inner = schema.builder();\n\t\t\tschema.inner.meta = {\n\t\t\t\t...schema.meta,\n\t\t\t\t...schema.inner.meta\n\t\t\t};\n\t\t}\n\t\treturn schema.inner.toJSON();\n\t};\n\tconst schema = new Schema({\n\t\ttype: \"lazy\",\n\t\tbuilder,\n\t\tinner: { toJSON }\n\t});\n\treturn schema;\n};\nSchema.natural = function natural() {\n\treturn Schema.number().step(1).min(0);\n};\nSchema.percent = function percent() {\n\treturn Schema.number().step(.01).min(0).max(1).role(\"slider\");\n};\nSchema.date = function date() {\n\treturn Schema.union([Schema.is(Date), Schema.transform(Schema.string().role(\"datetime\"), (value, options) => {\n\t\tconst date = new Date(value);\n\t\tif (isNaN(+date)) throw new ValidationError(`invalid date \"${value}\"`, options);\n\t\treturn date;\n\t}, true)]);\n};\nSchema.regExp = function regExp(flag = \"\") {\n\treturn Schema.union([Schema.is(RegExp), Schema.transform(Schema.string().role(\"regexp\", { flag }), (value, options) => {\n\t\ttry {\n\t\t\treturn new RegExp(value, flag);\n\t\t} catch (e) {\n\t\t\tthrow new ValidationError(e.message, options);\n\t\t}\n\t}, true)]);\n};\nSchema.arrayBuffer = function arrayBuffer(encoding) {\n\treturn Schema.union([\n\t\tSchema.is(ArrayBuffer),\n\t\tSchema.is(SharedArrayBuffer),\n\t\tSchema.transform(Schema.any(), (value, options) => {\n\t\t\tif (Binary.isSource(value)) return Binary.fromSource(value);\n\t\t\tthrow new ValidationError(`expected ArrayBufferSource but got ${value}`, options);\n\t\t}, true),\n\t\t...encoding ? [Schema.transform(Schema.string(), (value, options) => {\n\t\t\ttry {\n\t\t\t\treturn encoding === \"base64\" ? Binary.fromBase64(value) : Binary.fromHex(value);\n\t\t\t} catch (e) {\n\t\t\t\tthrow new ValidationError(e.message, options);\n\t\t\t}\n\t\t}, true)] : []\n\t]);\n};\nSchema.extend(\"lazy\", (data, schema, options, strict) => {\n\tif (!schema.inner[kSchema]) {\n\t\tschema.inner = schema.builder();\n\t\tschema.inner.meta = {\n\t\t\t...schema.meta,\n\t\t\t...schema.inner.meta\n\t\t};\n\t}\n\treturn Schema.resolve(data, schema.inner, options, strict);\n});\nSchema.extend(\"any\", (data) => {\n\treturn [data];\n});\nSchema.extend(\"never\", (data, _, options) => {\n\tthrow new ValidationError(`expected nullable but got ${data}`, options);\n});\nSchema.extend(\"const\", (data, { value }, options) => {\n\tif (deepEqual(data, value)) return [value];\n\tthrow new ValidationError(`expected ${value} but got ${data}`, options);\n});\nfunction checkWithinRange(data, meta, description, options, skipMin = false) {\n\tconst { max = Infinity, min = -Infinity } = meta;\n\tif (data > max) throw new ValidationError(`expected ${description} <= ${max} but got ${data}`, options);\n\tif (data < min && !skipMin) throw new ValidationError(`expected ${description} >= ${min} but got ${data}`, options);\n}\nSchema.extend(\"string\", (data, { meta }, options) => {\n\tif (typeof data !== \"string\") throw new ValidationError(`expected string but got ${data}`, options);\n\tif (meta.pattern) {\n\t\tconst regexp = new RegExp(meta.pattern.source, meta.pattern.flags);\n\t\tif (!regexp.test(data)) throw new ValidationError(`expect string to match regexp ${regexp}`, options);\n\t}\n\tcheckWithinRange(data.length, meta, \"string length\", options);\n\treturn [data];\n});\nfunction decimalShift(data, digits) {\n\tconst str = data.toString();\n\tif (str.includes(\"e\")) return data * Math.pow(10, digits);\n\tconst index = str.indexOf(\".\");\n\tif (index === -1) return data * Math.pow(10, digits);\n\tconst frac = str.slice(index + 1);\n\tconst integer = str.slice(0, index);\n\tif (frac.length <= digits) return +(integer + frac.padEnd(digits, \"0\"));\n\treturn +(integer + frac.slice(0, digits) + \".\" + frac.slice(digits));\n}\nfunction isMultipleOf(data, min, step) {\n\tstep = Math.abs(step);\n\tif (!/^\\d+\\.\\d+$/.test(step.toString())) return (data - min) % step === 0;\n\tconst index = step.toString().indexOf(\".\");\n\tconst digits = step.toString().slice(index + 1).length;\n\treturn Math.abs(decimalShift(data, digits) - decimalShift(min, digits)) % decimalShift(step, digits) === 0;\n}\nSchema.extend(\"number\", (data, { meta }, options) => {\n\tif (typeof data !== \"number\") throw new ValidationError(`expected number but got ${data}`, options);\n\tcheckWithinRange(data, meta, \"number\", options);\n\tconst { step } = meta;\n\tif (step && !isMultipleOf(data, meta.min ?? 0, step)) throw new ValidationError(`expected number multiple of ${step} but got ${data}`, options);\n\treturn [data];\n});\nSchema.extend(\"boolean\", (data, _, options) => {\n\tif (typeof data === \"boolean\") return [data];\n\tthrow new ValidationError(`expected boolean but got ${data}`, options);\n});\nSchema.extend(\"bitset\", (data, { bits, meta }, options) => {\n\tlet value = 0, keys = [];\n\tif (typeof data === \"number\") {\n\t\tvalue = data;\n\t\tfor (const key in bits) if (data & bits[key]) keys.push(key);\n\t} else if (Array.isArray(data)) {\n\t\tkeys = data;\n\t\tfor (const key of keys) {\n\t\t\tif (typeof key !== \"string\") throw new ValidationError(`expected string but got ${key}`, options);\n\t\t\tif (key in bits) value |= bits[key];\n\t\t}\n\t} else throw new ValidationError(`expected number or array but got ${data}`, options);\n\tif (value === meta.default) return [value];\n\treturn [value, keys];\n});\nSchema.extend(\"function\", (data, _, options) => {\n\tif (typeof data === \"function\") return [data];\n\tthrow new ValidationError(`expected function but got ${data}`, options);\n});\nSchema.extend(\"is\", (data, { constructor }, options) => {\n\tif (typeof constructor === \"function\") {\n\t\tif (data instanceof constructor) return [data];\n\t\tthrow new ValidationError(`expected ${constructor.name} but got ${data}`, options);\n\t} else {\n\t\tif (isNullable(data)) throw new ValidationError(`expected ${constructor} but got ${data}`, options);\n\t\tlet prototype = Object.getPrototypeOf(data);\n\t\twhile (prototype) {\n\t\t\tif (prototype.constructor?.name === constructor) return [data];\n\t\t\tprototype = Object.getPrototypeOf(prototype);\n\t\t}\n\t\tthrow new ValidationError(`expected ${constructor} but got ${data}`, options);\n\t}\n});\nfunction property(data, key, schema, options) {\n\ttry {\n\t\tconst [value, adapted] = Schema.resolve(data[key], schema, {\n\t\t\t...options,\n\t\t\tpath: [...options.path || [], key]\n\t\t});\n\t\tif (adapted !== void 0) data[key] = adapted;\n\t\treturn value;\n\t} catch (e) {\n\t\tif (!options?.autofix) throw e;\n\t\tdelete data[key];\n\t\treturn schema.meta.default;\n\t}\n}\nSchema.extend(\"array\", (data, { inner, meta }, options) => {\n\tif (!Array.isArray(data)) throw new ValidationError(`expected array but got ${data}`, options);\n\tcheckWithinRange(data.length, meta, \"array length\", options, !isNullable(inner.meta.default));\n\treturn [data.map((_, index) => property(data, index, inner, options))];\n});\nSchema.extend(\"dict\", (data, { inner, sKey }, options, strict) => {\n\tif (!isPlainObject(data)) throw new ValidationError(`expected object but got ${data}`, options);\n\tconst result = {};\n\tfor (const key in data) {\n\t\tlet rKey;\n\t\ttry {\n\t\t\trKey = Schema.resolve(key, sKey, options)[0];\n\t\t} catch (error) {\n\t\t\tif (strict) continue;\n\t\t\tthrow error;\n\t\t}\n\t\tresult[rKey] = property(data, key, inner, options);\n\t\tdata[rKey] = data[key];\n\t\tif (key !== rKey) delete data[key];\n\t}\n\treturn [result];\n});\nSchema.extend(\"tuple\", (data, { list }, options, strict) => {\n\tif (!Array.isArray(data)) throw new ValidationError(`expected array but got ${data}`, options);\n\tconst result = list.map((inner, index) => property(data, index, inner, options));\n\tif (strict) return [result];\n\tresult.push(...data.slice(list.length));\n\treturn [result];\n});\nfunction merge(result, data) {\n\tfor (const key in data) {\n\t\tif (key in result) continue;\n\t\tresult[key] = data[key];\n\t}\n}\nSchema.extend(\"object\", (data, { dict }, options, strict) => {\n\tif (!isPlainObject(data)) throw new ValidationError(`expected object but got ${data}`, options);\n\tconst result = {};\n\tfor (const key in dict) {\n\t\tconst value = property(data, key, dict[key], options);\n\t\tif (!isNullable(value) || key in data) result[key] = value;\n\t}\n\tif (!strict) merge(result, data);\n\treturn [result];\n});\nSchema.extend(\"union\", (data, { list, toString }, options, strict) => {\n\tconst messages = [];\n\tfor (const inner of list) try {\n\t\treturn Schema.resolve(data, inner, options, strict);\n\t} catch (error) {\n\t\tmessages.push(error);\n\t}\n\tthrow new ValidationError(`expected ${toString()} but got ${JSON.stringify(data)}`, options);\n});\nSchema.extend(\"intersect\", (data, { list, toString }, options, strict) => {\n\tif (!list.length) return [data];\n\tlet result;\n\tfor (const inner of list) {\n\t\tconst value = Schema.resolve(data, inner, options, true)[0];\n\t\tif (isNullable(value)) continue;\n\t\tif (isNullable(result)) result = value;\n\t\telse if (typeof result !== typeof value) throw new ValidationError(`expected ${toString()} but got ${JSON.stringify(data)}`, options);\n\t\telse if (typeof value === \"object\") merge(result ??= {}, value);\n\t\telse if (result !== value) throw new ValidationError(`expected ${toString()} but got ${JSON.stringify(data)}`, options);\n\t}\n\tif (!strict && isPlainObject(data)) merge(result, data);\n\treturn [result];\n});\nSchema.extend(\"transform\", (data, { inner, callback, preserve }, options) => {\n\tconst [result, adapted = data] = Schema.resolve(data, inner, options, true);\n\tif (preserve) return [callback(result)];\n\telse return [callback(result), callback(adapted)];\n});\nconst formatters = {};\nfunction defineMethod(name, keys, format) {\n\tformatters[name] = format;\n\tObject.assign(Schema, { [name](...args) {\n\t\tconst schema = new Schema({ type: name });\n\t\tkeys.forEach((key, index) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase \"sKey\":\n\t\t\t\t\tschema.sKey = args[index] ?? Schema.string();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inner\":\n\t\t\t\t\tschema.inner = Schema.from(args[index]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"list\":\n\t\t\t\t\tschema.list = args[index].map(Schema.from);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dict\":\n\t\t\t\t\tschema.dict = valueMap(args[index], Schema.from);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"bits\":\n\t\t\t\t\tschema.bits = {};\n\t\t\t\t\tfor (const key in args[index]) {\n\t\t\t\t\t\tif (typeof args[index][key] !== \"number\") continue;\n\t\t\t\t\t\tschema.bits[key] = args[index][key];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"callback\": {\n\t\t\t\t\tconst callback = schema.callback = args[index];\n\t\t\t\t\tcallback[\"toJSON\"] ||= () => callback.toString();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"constructor\": {\n\t\t\t\t\tconst constructor = schema.constructor = args[index];\n\t\t\t\t\tif (typeof constructor === \"function\") constructor[\"toJSON\"] ||= () => constructor[\"name\"];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: schema[key] = args[index];\n\t\t\t}\n\t\t});\n\t\tif (name === \"object\" || name === \"dict\") schema.meta.default = {};\n\t\telse if (name === \"array\" || name === \"tuple\") schema.meta.default = [];\n\t\telse if (name === \"bitset\") schema.meta.default = 0;\n\t\treturn schema;\n\t} });\n}\ndefineMethod(\"is\", [\"constructor\"], ({ constructor }) => {\n\tif (typeof constructor === \"function\") return constructor.name;\n\telse return constructor;\n});\ndefineMethod(\"any\", [], () => \"any\");\ndefineMethod(\"never\", [], () => \"never\");\ndefineMethod(\"const\", [\"value\"], ({ value }) => typeof value === \"string\" ? JSON.stringify(value) : value);\ndefineMethod(\"string\", [], () => \"string\");\ndefineMethod(\"number\", [], () => \"number\");\ndefineMethod(\"boolean\", [], () => \"boolean\");\ndefineMethod(\"bitset\", [\"bits\"], () => \"bitset\");\ndefineMethod(\"function\", [], () => \"function\");\ndefineMethod(\"array\", [\"inner\"], ({ inner }) => `${inner.toString(true)}[]`);\ndefineMethod(\"dict\", [\"inner\", \"sKey\"], ({ inner, sKey }) => `{ [key: ${sKey.toString()}]: ${inner.toString()} }`);\ndefineMethod(\"tuple\", [\"list\"], ({ list }) => `[${list.map((inner) => inner.toString()).join(\", \")}]`);\ndefineMethod(\"object\", [\"dict\"], ({ dict }) => {\n\tif (Object.keys(dict).length === 0) return \"{}\";\n\treturn `{ ${Object.entries(dict).map(([key, inner]) => {\n\t\treturn `${key}${inner.meta.required ? \"\" : \"?\"}: ${inner.toString()}`;\n\t}).join(\", \")} }`;\n});\ndefineMethod(\"union\", [\"list\"], ({ list }, inline) => {\n\tconst result = list.map(({ toString: format }) => format()).join(\" | \");\n\treturn inline ? `(${result})` : result;\n});\ndefineMethod(\"intersect\", [\"list\"], ({ list }) => {\n\treturn `${list.map((inner) => inner.toString(true)).join(\" & \")}`;\n});\ndefineMethod(\"transform\", [\n\t\"inner\",\n\t\"callback\",\n\t\"preserve\"\n], ({ inner }, isInner) => inner.toString(isInner));\n//#endregion\nexport { Schema as default };\n", "/**\n * Wire contracts for `@deepseek-ai/dsh-interconnect`.\n * The transport reuses the Connection RPC envelope (`ClientRequest` /\n * `ServerResponse` from `@deepseek-ai/dsh-host-apiproxy/api`); this module\n * defines only the business payloads that ride inside that envelope.\n * @module @deepseek-ai/dsh-interconnect\n */\n\n/**\n * Logical HTTP route prefix this service owns. Requests reach endpoints as\n * `<baseURL>/interconnect/<endpoint>`.\n */\nexport const INTERCONNECT_CHANNEL = '/interconnect'\n\n/**\n * Credential reference holding the shared auth token. Both halves of a link\n * must resolve the same value: inbound requests are rejected unless their\n * `Authorization: Bearer <token>` matches this secret, and outbound requests\n * send it. An unconfigured token fails closed on the inbound side.\n */\nexport const INTERCONNECT_TOKEN_REF = 'DSH_INTERCONNECT_TOKEN'\n\n/**\n * How one inbound message reaches the target agent's inbox. Each value names an\n * existing `Agent` method, which is exactly the pair `(inbox target, wakeup)`:\n * - `followup` \u2014 `next-turn` + wake: the message becomes its own turn, queued\n * behind whatever the agent is currently doing.\n * - `steer` \u2014 `next-step` + wake: the message cuts into the nearest step\n * boundary of a running turn instead of waiting for that turn to finish; an\n * idle agent starts a turn.\n * - `inject` \u2014 `next-step`, no wake: seeds model-facing context without waking\n * an idle agent, so it can sit unread until something else wakes it.\n */\nexport type DeliveryMode = 'followup' | 'steer' | 'inject'\n\n/**\n * Business payload for the `send` endpoint: deliver one text message to one\n * live session of the receiving instance.\n */\nexport interface SendPayload {\n /** Target session id on the receiving instance. */\n readonly sessionId: string\n /** Message text delivered to the peer session's inbox. */\n readonly text: string\n /**\n * Per-message override of the receiver's configured delivery mode. Urgency is\n * a property of one message, not of the link, so a sender may ask to cut into\n * a running turn. Absent leaves the receiver's configured default in force.\n */\n readonly delivery?: DeliveryMode\n /**\n * Ask the receiver to wake a persisted session that has no running agent.\n *\n * Opt-in, and deliberately not the default: delivery to a woken session runs\n * a real agent turn \u2014 a billed model call whose assembly carries that\n * session's full toolset \u2014 inside a conversation its owner is not watching\n * and cannot interrupt. That is categorically more than nudging an already\n * open session, so the sender must ask for it explicitly. The receiver can\n * still refuse via `Config.allowResume`, because the cost lands on its\n * machine.\n */\n readonly resume?: boolean\n}\n\n/**\n * Why a `send` did not deliver. `delivered: false` alone cannot be acted on,\n * because the causes need different responses:\n * - `session-not-live` \u2014 the receiver answered; that session has no running\n * agent. Retrying the same id is futile until it is opened, so the caller\n * should list live sessions and pick another target.\n * - `unreachable` \u2014 no usable answer from the receiver (transport failure, or\n * auth rejected). The target may well be fine, so retrying can succeed.\n * - `resume-refused` \u2014 the sender asked to wake a persisted session and this\n * receiver does not allow it. Retrying with `resume` set changes nothing.\n * - `resume-failed` \u2014 waking was allowed and attempted but did not yield a live\n * agent (no persisted session under that id, or another owner holds it).\n * - `session-owned-by-subagent` \u2014 the session is reserved to subagent routing,\n * so its parent agent owns delivery. Injecting here would race that parent;\n * the sender must reach the child through its parent instead.\n */\nexport type SendFailure = 'session-not-live' | 'unreachable' | 'resume-refused' | 'resume-failed' | 'session-owned-by-subagent'\n\n/** Business result of a `send` endpoint call. */\nexport interface SendResult {\n /** True when the target session is live on the receiving instance and the message was delivered. */\n readonly delivered: boolean\n /** Echoed receiver instance id (diagnostic; never trusted for routing). */\n readonly instance: string\n /**\n * The mode actually used, so a sender can tell whether its requested override\n * took effect. Absent when nothing was delivered.\n */\n readonly delivery?: DeliveryMode\n /**\n * Why delivery failed. Present exactly when `delivered` is false, so a caller\n * can distinguish \"wrong target\" from \"receiver unreachable\" instead of\n * guessing from a bare boolean.\n */\n readonly reason?: SendFailure\n}\n\n/** Business result of a `ping` endpoint call. */\nexport interface PingResult {\n /** Always true for an authenticated, live receiver. */\n readonly pong: true\n /** The receiving instance's self-reported id. */\n readonly instance: string\n}\n\n/**\n * One live session on the receiving instance. Only live agents appear: `send`\n * can reach exactly these, so the listing is the set of valid `sessionId`\n * values rather than a directory of everything ever persisted.\n */\nexport interface SessionSummary {\n /** The session id to pass back as `SendPayload.sessionId`. */\n readonly sessionId: string\n /**\n * The session's title when a title projection is available. Absent rather\n * than empty when the projection is missing or the session has no title yet,\n * so a caller can tell \"untitled\" from \"titles unavailable on this receiver\".\n */\n readonly title?: string\n /** The agent's current status, so a sender can prefer an idle target. */\n readonly status?: string\n}\n\n/** Business result of a `list` endpoint call. */\nexport interface ListResult {\n /** Live sessions in registration order. */\n readonly sessions: readonly SessionSummary[]\n /** Echoed receiver instance id (diagnostic; never trusted for routing). */\n readonly instance: string\n}\n\n/** Outbound listing request: just the receiver origin. */\nexport interface ListRequest {\n /** Receiver origin, e.g. `http://127.0.0.1:3080`. */\n readonly baseUrl: string\n}\n\n/** Outbound delivery request: receiver origin plus a `send` business payload. */\nexport interface SendRequest {\n /** Receiver origin, e.g. `http://127.0.0.1:3080`. */\n readonly baseUrl: string\n readonly sessionId: string\n readonly text: string\n /** Per-message delivery override forwarded to the receiver. */\n readonly delivery?: DeliveryMode\n /** Ask the receiver to wake a persisted session; see {@link SendPayload.resume}. */\n readonly resume?: boolean\n}\n\n/**\n * One serializable lifecycle fact pushed from an emitting instance to its\n * peers. `kind` discriminates the union; the remaining fields are the compact\n * facts extractable from the source event without serializing live objects.\n */\nexport type EventNotification =\n | { readonly kind: 'agent/created'; readonly sessionId: string }\n | { readonly kind: 'agent/disposed'; readonly sessionId: string }\n | { readonly kind: 'agent/status'; readonly sessionId: string; readonly status: 'idle' | 'running' }\n | { readonly kind: 'session/created'; readonly sessionId: string; readonly parentSessionId?: string }\n | { readonly kind: 'session/disposed'; readonly sessionId: string }\n | { readonly kind: 'subagent/end'; readonly provider: string; readonly childSessionId: string; readonly stopReason: string }\n\n/**\n * Wire payload for the `event` endpoint: the pushed fact plus the emitting\n * instance's self-reported id, so a many-upstream receiver can attribute it.\n */\nexport interface EventPayload {\n /** Emitting instance's self-reported id. */\n readonly sender: string\n /** The serialized lifecycle fact. */\n readonly notification: EventNotification\n}\n\n/**\n * One text frame exchanged over a persistent WebSocket peer link. `hello`\n * opens a link with the dialing side's identity; `event` pushes one\n * notification in either direction. Native ws ping/pong carries the heartbeat,\n * so no application-level keepalive frame exists.\n */\nexport type LinkFrame =\n | { readonly type: 'hello'; readonly sender: string }\n | { readonly type: 'event'; readonly notification: EventNotification }\n\n/**\n * Handle to one established outbound WebSocket peer link. `close` tears the\n * socket down and cancels reconnection; `peer` records the dialed receiver.\n */\nexport interface WebSocketLinkHandle {\n /** The dialed peer origin. */\n readonly peer: string\n /** Terminate the socket and stop reconnect attempts. */\n close(): void\n}\n\n/** Service config bound by the Composition loader. */\nexport interface Config {\n /** Self-reported id of this instance, echoed in ping/send results for diagnostics. */\n readonly instanceId: string\n /** Request timeout for outbound deliveries, in milliseconds. */\n readonly requestTimeoutMs: number\n /**\n * Peer instance origins to fan local events out to at startup. A runtime\n * `subscribe` can extend the set without restart; an unset list fans nothing\n * out until a peer subscribes.\n */\n readonly peers?: string[]\n /**\n * Default mode for inbound `send` messages that carry no per-message\n * override. See {@link DeliveryMode} for what each mode does.\n */\n readonly delivery?: DeliveryMode\n /**\n * Whether this instance honours a sender's `resume` request. Defaults to\n * true: the sender must opt in per message anyway, and this switch exists so\n * the side that pays \u2014 waking a session runs a billed model turn with that\n * session's tools on THIS machine \u2014 can refuse outright.\n */\n readonly allowResume?: boolean\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["value", "Binary", "result", "a", "b", "Time", "date", "template", "options", "pattern", "value", "extra", "resolve", "toJSON", "date", "toString", "key"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/interconnect/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/interconnect/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-interconnect",
3
3
  "description": "Cross-instance message/event handoff plugins for DeepSeek Harness (DSH): interconnect service + model-facing tools",
4
- "version": "0.6.1",
4
+ "version": "0.6.3",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "main": "lib/index.js",