dsh-interconnect 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -19,13 +19,20 @@
19
19
 
20
20
  ## 安装
21
21
 
22
+ 本包已发布到 npm:[`dsh-interconnect`](https://www.npmjs.com/package/dsh-interconnect)。
22
23
  本仓库是一个 DSH profile bundle(根 `package.json` 声明 `dsh.bundle.patch` 指向
23
24
  根 `cordis.patch.yml`,后者 `insert` 两个插件行)。
24
25
 
25
26
  ```bash
27
+ # 从 npm
28
+ dsh plugin --profile <name> add dsh-interconnect
29
+
30
+ # 或从本地路径(已实测)
26
31
  dsh plugin --profile <name> add file:/path/to/dsh-interconnect
27
32
  ```
28
33
 
34
+ registry 上的 tarball 自带 `lib/*.js` 与 `lib/types/**/*.d.ts`,安装时不跑构建。
35
+
29
36
  `dsh plugin add` 会把仓库识别为 bundle 并追加进 profile 的 `dsh.profile.bundles`。重启
30
37
  web 服务使 host 侧生效。两端实例的 `.credentials.yaml`(或等价凭据源)设置相同的
31
38
  `DSH_INTERCONNECT_TOKEN` 作为共享密钥。
@@ -34,7 +41,7 @@ web 服务使 host 侧生效。两端实例的 `.credentials.yaml`(或等价
34
41
 
35
42
  依赖 [公开的 DeepSeek Harness monorepo](https://github.com/deepseek-ai/deepseek-harness)
36
43
  作为 sibling checkout:`package.json` 的 `devDependencies` 用 `link:../dsh/...` 指向它,
37
- 因为 `@deepseek-ai/dsh-*` 未发布到 npm,peer 依赖须由该 checkout 提供。
44
+ peer 依赖由该 checkout 提供,构建与测试都跑在这份源码上。
38
45
 
39
46
  ```bash
40
47
  ln -s /path/to/deepseek-harness ../dsh
@@ -53,10 +60,16 @@ pnpm run build # esbuild → lib/
53
60
 
54
61
  ## 验证
55
62
 
56
- - 21/21 单测通过(服务 16 + 工具 5);类型检查、构建均干净。
63
+ - 22/22 单测通过(服务 17 + 工具 5);类型检查、构建均干净。
57
64
  - 已在两台机器之间实测双向互通:消息投递、WebSocket 事件推流、以及 agent 经
58
65
  `interconnect_send` 工具反向回发,均验证通过。
59
66
  - CI(GitHub Actions):clone 公开 DSH 仓库作为 sibling,跑 `pnpm run check`。
67
+ - 已发布版本:从 registry 下载的 tarball 与本地构建 shasum 一致;干净消费端
68
+ 解析 `.`、`./tool-interconnect` 两个入口的类型均通过,负例(把 `string` 赋给
69
+ `number`)如期报 `TS2322`。
70
+ - 投递消息的 `source` 为 `{ kind: 'plugin', plugin: 'dsh-interconnect' }`,不是
71
+ `{ kind: 'user' }`——接收方 agent 据此区分跨实例投递与本地用户输入。负例:把
72
+ 该 source 改回 `kind: 'user'`,对应断言转红。
60
73
 
61
74
  ## 许可
62
75
 
package/lib/index.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  RpcId
7
7
  } from "@deepseek-ai/dsh-host-apiproxy/api";
8
8
  import { credentialRef } from "@deepseek-ai/dsh-credentials";
9
- import { createUserMessage } from "@deepseek-ai/dsh-llm";
9
+ import { boundContextSummary, createUserMessage } from "@deepseek-ai/dsh-llm";
10
10
 
11
11
  // ../.dsh/source/staging-20260807T143236Z/vendor/cosmokit/src/misc.ts
12
12
  function isNullable(value) {
@@ -831,6 +831,7 @@ var INTERCONNECT_TOKEN_REF = "DSH_INTERCONNECT_TOKEN";
831
831
  // src/interconnect/index.ts
832
832
  var INVALID_REQUEST_RPC_ID = RpcId("invalid-request");
833
833
  var MAX_REQUEST_BODY_BYTES = 1024 * 1024;
834
+ var PLUGIN_SOURCE = "dsh-interconnect";
834
835
  var LINK_CHANNEL = "/interconnect/link";
835
836
  var notificationSchema = Schema.union([
836
837
  Schema.object({ kind: Schema.const("agent/created"), sessionId: Schema.string() }),
@@ -1129,7 +1130,12 @@ var InterconnectService = class extends Service {
1129
1130
  return { delivered: false, instance: this.instanceId };
1130
1131
  }
1131
1132
  const message = createUserMessage({
1132
- source: { kind: "user" },
1133
+ source: {
1134
+ kind: "plugin",
1135
+ plugin: PLUGIN_SOURCE,
1136
+ form: "notice",
1137
+ summary: boundContextSummary(`interconnect handoff delivered on instance ${this.instanceId}`)
1138
+ },
1133
1139
  content: [{ type: "text", text: payload.text }]
1134
1140
  });
1135
1141
  if (this.delivery === "inject") {
@@ -6,7 +6,7 @@ import {
6
6
  RpcId
7
7
  } from "@deepseek-ai/dsh-host-apiproxy/api";
8
8
  import { credentialRef } from "@deepseek-ai/dsh-credentials";
9
- import { createUserMessage } from "@deepseek-ai/dsh-llm";
9
+ import { boundContextSummary, createUserMessage } from "@deepseek-ai/dsh-llm";
10
10
 
11
11
  // ../.dsh/source/staging-20260807T143236Z/vendor/cosmokit/src/misc.ts
12
12
  function isNullable(value) {
@@ -831,6 +831,7 @@ var INTERCONNECT_TOKEN_REF = "DSH_INTERCONNECT_TOKEN";
831
831
  // src/interconnect/index.ts
832
832
  var INVALID_REQUEST_RPC_ID = RpcId("invalid-request");
833
833
  var MAX_REQUEST_BODY_BYTES = 1024 * 1024;
834
+ var PLUGIN_SOURCE = "dsh-interconnect";
834
835
  var LINK_CHANNEL = "/interconnect/link";
835
836
  var notificationSchema = Schema.union([
836
837
  Schema.object({ kind: Schema.const("agent/created"), sessionId: Schema.string() }),
@@ -1129,7 +1130,12 @@ var InterconnectService = class extends Service {
1129
1130
  return { delivered: false, instance: this.instanceId };
1130
1131
  }
1131
1132
  const message = createUserMessage({
1132
- source: { kind: "user" },
1133
+ source: {
1134
+ kind: "plugin",
1135
+ plugin: PLUGIN_SOURCE,
1136
+ form: "notice",
1137
+ summary: boundContextSummary(`interconnect handoff delivered on instance ${this.instanceId}`)
1138
+ },
1133
1139
  content: [{ type: "text", text: payload.text }]
1134
1140
  });
1135
1141
  if (this.delivery === "inject") {
@@ -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 { createUserMessage } from '@deepseek-ai/dsh-llm'\nimport type { Agent } from '@deepseek-ai/dsh-agent'\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 EventNotification,\n type EventPayload,\n type LinkFrame,\n type PingResult,\n type SendPayload,\n type SendResult,\n type SendRequest,\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/** 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/** Wire union the send endpoint expects inside the ClientRequest payload slot. */\nconst sendPayloadSchema = z.object({\n sessionId: z.string(),\n text: z.string(),\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('inject')]).default('followup'),\n })\n\n private readonly instanceId: string\n private readonly requestTimeoutMs: number\n private readonly delivery: 'followup' | 'inject'\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 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 const payload: SendPayload = { sessionId: request.sessionId, text: request.text }\n const result = await this.post<SendResult>(request.baseUrl, 'send', payload)\n return result ?? { delivered: false, instance: this.instanceId }\n }\n\n async ping(baseUrl: string): Promise<PingResult | undefined> {\n return this.post<PingResult>(baseUrl, 'ping', {})\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 const value = 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 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 runEndpoint(endpoint: string, payload: unknown): 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 Error(`send payload invalid: ${error instanceof Error ? error.message : String(error)}`)\n }\n return this.deliver(parsed)\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 Error(`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 /** Deliver one message to a live local session, if it exists. */\n private deliver(payload: SendPayload): SendResult {\n const agent = this.ctx.agents.get(payload.sessionId as Agent['id'])\n if (agent === undefined) {\n return { delivered: false, instance: this.instanceId }\n }\n const message = createUserMessage({\n source: { kind: 'user' },\n content: [{ type: 'text', text: payload.text }],\n })\n if (this.delivery === 'inject') {\n agent.inject(message)\n } else {\n agent.followup(message)\n }\n return { delivered: true, instance: this.instanceId }\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 * 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 * 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\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\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/** 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}\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 * How an inbound `send` message reaches its target session.\n * - `followup` wakes the target agent into a new turn carrying the message.\n * - `inject` seeds model-facing context without waking the agent (it is\n * claimed at the next step boundary, and may miss a step already claimed).\n */\n readonly delivery?: 'followup' | 'inject'\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'\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 EventNotification,\n type EventPayload,\n type LinkFrame,\n type PingResult,\n type SendPayload,\n type SendResult,\n type SendRequest,\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/** Wire union the send endpoint expects inside the ClientRequest payload slot. */\nconst sendPayloadSchema = z.object({\n sessionId: z.string(),\n text: z.string(),\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('inject')]).default('followup'),\n })\n\n private readonly instanceId: string\n private readonly requestTimeoutMs: number\n private readonly delivery: 'followup' | 'inject'\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 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 const payload: SendPayload = { sessionId: request.sessionId, text: request.text }\n const result = await this.post<SendResult>(request.baseUrl, 'send', payload)\n return result ?? { delivered: false, instance: this.instanceId }\n }\n\n async ping(baseUrl: string): Promise<PingResult | undefined> {\n return this.post<PingResult>(baseUrl, 'ping', {})\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 const value = 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 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 runEndpoint(endpoint: string, payload: unknown): 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 Error(`send payload invalid: ${error instanceof Error ? error.message : String(error)}`)\n }\n return this.deliver(parsed)\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 Error(`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 /** Deliver one message to a live local session, if it exists. */\n private deliver(payload: SendPayload): SendResult {\n const agent = this.ctx.agents.get(payload.sessionId as Agent['id'])\n if (agent === undefined) {\n return { delivered: false, instance: this.instanceId }\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 if (this.delivery === 'inject') {\n agent.inject(message)\n } else {\n agent.followup(message)\n }\n return { delivered: true, instance: this.instanceId }\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 * 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 * 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\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\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/** 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}\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 * How an inbound `send` message reaches its target session.\n * - `followup` wakes the target agent into a new turn carrying the message.\n * - `inject` seeds model-facing context without waking the agent (it is\n * claimed at the next step boundary, and may miss a step already claimed).\n */\n readonly delivery?: 'followup' | 'inject'\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":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAetD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,SAA8B,MAAM,IAAI,CAAA;AAE/C,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,iBAAiB,EAGtB,KAAK,UAAU,EAEf,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAA;AAEnB,mBAAmB,YAAY,CAAA;AAC/B,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAEzE,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,YAAY,EAAE,mBAAmB,CAAA;KAClC;IACD,UAAU,MAAM;QACd;;;;WAIG;QACH,oBAAoB,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAC1E;CACF;AAqCD;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,OAAO;IAC9C,MAAM,CAAC,MAAM,WAAyC;IACtD,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAKtB;IAEF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;IAC1D,OAAO,CAAC,cAAc,CAA4B;IAClD,8EAA8E;IAC9E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;gBAE9C,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAoFlC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAM/C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAI5D;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,IAAI;IAMnC,uDAAuD;IACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B;;;;;;;OAOG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;IAUvC,8EAA8E;IAC9E,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,uFAAuF;IACvF,OAAO,CAAC,MAAM;IAQd,6EAA6E;IAC7E,OAAO,CAAC,SAAS;IAajB,wEAAwE;YAC1D,MAAM;IAkBpB,wEAAwE;YAC1D,QAAQ;IAqEtB,gDAAgD;IAChD,OAAO,CAAC,WAAW;IA0BnB,sEAAsE;IACtE,OAAO,CAAC,YAAY;IAKpB,iEAAiE;IACjE,OAAO,CAAC,OAAO;IAiBf,sFAAsF;YACxE,IAAI;YA8BJ,YAAY;IAK1B,8EAA8E;IAC9E,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIlD,8EAA8E;YAChE,aAAa;IAiB3B;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAoBxC,iGAAiG;IACjG,OAAO,CAAC,WAAW;CAiBpB;AAmID,eAAe,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/interconnect/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAetD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,SAA8B,MAAM,IAAI,CAAA;AAE/C,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,iBAAiB,EAGtB,KAAK,UAAU,EAEf,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAA;AAEnB,mBAAmB,YAAY,CAAA;AAC/B,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAEzE,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,YAAY,EAAE,mBAAmB,CAAA;KAClC;IACD,UAAU,MAAM;QACd;;;;WAIG;QACH,oBAAoB,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAC1E;CACF;AAwCD;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,OAAO;IAC9C,MAAM,CAAC,MAAM,WAAyC;IACtD,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAKtB;IAEF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;IAC1D,OAAO,CAAC,cAAc,CAA4B;IAClD,8EAA8E;IAC9E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;gBAE9C,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAoFlC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAM/C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAI5D;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,IAAI;IAMnC,uDAAuD;IACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B;;;;;;;OAOG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;IAUvC,8EAA8E;IAC9E,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,uFAAuF;IACvF,OAAO,CAAC,MAAM;IAQd,6EAA6E;IAC7E,OAAO,CAAC,SAAS;IAajB,wEAAwE;YAC1D,MAAM;IAkBpB,wEAAwE;YAC1D,QAAQ;IAqEtB,gDAAgD;IAChD,OAAO,CAAC,WAAW;IA0BnB,sEAAsE;IACtE,OAAO,CAAC,YAAY;IAKpB,iEAAiE;IACjE,OAAO,CAAC,OAAO;IA2Bf,sFAAsF;YACxE,IAAI;YA8BJ,YAAY;IAK1B,8EAA8E;IAC9E,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIlD,8EAA8E;YAChE,aAAa;IAiB3B;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAoBxC,iGAAiG;IACjG,OAAO,CAAC,WAAW;CAiBpB;AAmID,eAAe,mBAAmB,CAAA"}
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.1.0",
4
+ "version": "0.2.0",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "main": "lib/index.js",