@alexkroman1/aai 0.8.2 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +48 -106
- package/dist/sdk/_render_check.d.ts.map +1 -1
- package/dist/sdk/_render_check.js +3 -0
- package/dist/sdk/_render_check.js.map +1 -1
- package/dist/sdk/server.d.ts.map +1 -1
- package/dist/sdk/server.js +30 -87
- package/dist/sdk/server.js.map +1 -1
- package/dist/sdk/winterc_server.d.ts +1 -0
- package/dist/sdk/winterc_server.d.ts.map +1 -1
- package/dist/sdk/winterc_server.js +11 -15
- package/dist/sdk/winterc_server.js.map +1 -1
- package/dist/sdk/ws_handler.d.ts +2 -0
- package/dist/sdk/ws_handler.d.ts.map +1 -1
- package/dist/sdk/ws_handler.js +3 -1
- package/dist/sdk/ws_handler.js.map +1 -1
- package/dist/ui/session.d.ts.map +1 -1
- package/dist/ui/session.js +12 -0
- package/dist/ui/session.js.map +1 -1
- package/package.json +4 -1
- package/templates/_shared/CLAUDE.md +52 -29
- package/templates/_shared/global.d.ts +1 -0
- package/templates/_shared/package.json +2 -1
- package/templates/solo-rpg/agent.ts +1240 -0
- package/templates/solo-rpg/client.tsx +698 -0
package/dist/cli.js
CHANGED
|
@@ -388,6 +388,10 @@ async function bundleAgent(agent, opts) {
|
|
|
388
388
|
devAlias["@alexkroman1/aai/ui/styles.css"] = path2.join(monorepoRoot, "ui/styles.css");
|
|
389
389
|
devAlias["@alexkroman1/aai/ui"] = path2.join(monorepoRoot, "ui/mod.ts");
|
|
390
390
|
devAlias["@alexkroman1/aai"] = path2.join(monorepoRoot, "sdk/mod.ts");
|
|
391
|
+
const userPreact = path2.join(agent.dir, "node_modules/preact");
|
|
392
|
+
const userSignals = path2.join(agent.dir, "node_modules/@preact/signals");
|
|
393
|
+
devAlias.preact = userPreact;
|
|
394
|
+
devAlias["@preact/signals"] = userSignals;
|
|
391
395
|
}
|
|
392
396
|
try {
|
|
393
397
|
await build({
|
|
@@ -568,7 +572,7 @@ var init_ink = __esm({
|
|
|
568
572
|
|
|
569
573
|
// cli/_build.ts
|
|
570
574
|
import React2 from "react";
|
|
571
|
-
async function buildAgentBundle(cwd, log) {
|
|
575
|
+
async function buildAgentBundle(cwd, log, opts) {
|
|
572
576
|
const agent = await loadAgent(cwd);
|
|
573
577
|
if (!agent) {
|
|
574
578
|
throw new Error("No agent found \u2014 run `aai init` first");
|
|
@@ -586,7 +590,7 @@ async function buildAgentBundle(cwd, log) {
|
|
|
586
590
|
const kb = (bundle.workerBytes / 1024).toFixed(1);
|
|
587
591
|
const clientCount = Object.keys(bundle.clientFiles).length;
|
|
588
592
|
log(React2.createElement(Info, { msg: `worker: ${kb} KB, client: ${clientCount} file(s)` }));
|
|
589
|
-
if (agent.clientEntry) {
|
|
593
|
+
if (agent.clientEntry && !opts?.skipRenderCheck) {
|
|
590
594
|
try {
|
|
591
595
|
const renderCheckPath = "../sdk/_render_check.ts";
|
|
592
596
|
const { renderCheck } = await import(
|
|
@@ -2421,7 +2425,7 @@ function handleTextMessage(data, session, log, ctx, sid) {
|
|
|
2421
2425
|
}
|
|
2422
2426
|
function wireSessionSocket(ws, opts) {
|
|
2423
2427
|
const { sessions, logger: log = consoleLogger } = opts;
|
|
2424
|
-
const sessionId = crypto.randomUUID();
|
|
2428
|
+
const sessionId = opts.uid ?? crypto.randomUUID();
|
|
2425
2429
|
const sid = sessionId.slice(0, 8);
|
|
2426
2430
|
const ctx = opts.logContext ?? {};
|
|
2427
2431
|
let session = null;
|
|
@@ -2471,6 +2475,7 @@ var init_ws_handler = __esm({
|
|
|
2471
2475
|
});
|
|
2472
2476
|
|
|
2473
2477
|
// sdk/winterc_server.ts
|
|
2478
|
+
import { Hono } from "hono";
|
|
2474
2479
|
function createWintercServer(options) {
|
|
2475
2480
|
const {
|
|
2476
2481
|
agent,
|
|
@@ -2500,26 +2505,19 @@ function createWintercServer(options) {
|
|
|
2500
2505
|
sampleRate: s2sConfig.inputSampleRate,
|
|
2501
2506
|
ttsSampleRate: s2sConfig.outputSampleRate
|
|
2502
2507
|
};
|
|
2508
|
+
const app = new Hono();
|
|
2509
|
+
app.get("/health", (c) => c.json({ status: "ok", name: agent.name }));
|
|
2510
|
+
app.get("/", (c) => {
|
|
2511
|
+
if (clientHtml) {
|
|
2512
|
+
return c.html(clientHtml);
|
|
2513
|
+
}
|
|
2514
|
+
return c.html(
|
|
2515
|
+
`<!DOCTYPE html><html><body><h1>${agent.name}</h1><p>Agent server running.</p></body></html>`
|
|
2516
|
+
);
|
|
2517
|
+
});
|
|
2503
2518
|
return {
|
|
2504
2519
|
async fetch(request) {
|
|
2505
|
-
|
|
2506
|
-
if (url.pathname === "/health") {
|
|
2507
|
-
return new Response(JSON.stringify({ status: "ok", name: agent.name }), {
|
|
2508
|
-
headers: { "Content-Type": "application/json" }
|
|
2509
|
-
});
|
|
2510
|
-
}
|
|
2511
|
-
if (url.pathname === "/" && clientHtml) {
|
|
2512
|
-
return new Response(clientHtml, {
|
|
2513
|
-
headers: { "Content-Type": "text/html" }
|
|
2514
|
-
});
|
|
2515
|
-
}
|
|
2516
|
-
if (url.pathname === "/") {
|
|
2517
|
-
return new Response(
|
|
2518
|
-
`<!DOCTYPE html><html><body><h1>${agent.name}</h1><p>Agent server running.</p></body></html>`,
|
|
2519
|
-
{ headers: { "Content-Type": "text/html" } }
|
|
2520
|
-
);
|
|
2521
|
-
}
|
|
2522
|
-
return new Response("Not Found", { status: 404 });
|
|
2520
|
+
return app.fetch(request);
|
|
2523
2521
|
},
|
|
2524
2522
|
handleWebSocket(ws, wsOpts) {
|
|
2525
2523
|
wireSessionSocket(ws, {
|
|
@@ -2531,7 +2529,8 @@ function createWintercServer(options) {
|
|
|
2531
2529
|
skipGreeting: wsOpts?.skipGreeting ?? false
|
|
2532
2530
|
}),
|
|
2533
2531
|
readyConfig,
|
|
2534
|
-
logger
|
|
2532
|
+
logger,
|
|
2533
|
+
uid: wsOpts?.uid
|
|
2535
2534
|
});
|
|
2536
2535
|
},
|
|
2537
2536
|
async close() {
|
|
@@ -2559,6 +2558,9 @@ var server_exports = {};
|
|
|
2559
2558
|
__export(server_exports, {
|
|
2560
2559
|
createServer: () => createServer
|
|
2561
2560
|
});
|
|
2561
|
+
import { serve } from "@hono/node-server";
|
|
2562
|
+
import { serveStatic } from "@hono/node-server/serve-static";
|
|
2563
|
+
import { Hono as Hono2 } from "hono";
|
|
2562
2564
|
async function loadWsFactory() {
|
|
2563
2565
|
try {
|
|
2564
2566
|
const mod = await import("ws");
|
|
@@ -2620,18 +2622,31 @@ function createServer(options) {
|
|
|
2620
2622
|
},
|
|
2621
2623
|
async listen(port = 3e3) {
|
|
2622
2624
|
await getWsFactory();
|
|
2623
|
-
const
|
|
2624
|
-
const
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
});
|
|
2631
|
-
attachWsUpgrade(nodeServer, port, getWinterc, logger);
|
|
2625
|
+
const wintercServer = getWinterc();
|
|
2626
|
+
const app = new Hono2();
|
|
2627
|
+
if (clientDir) {
|
|
2628
|
+
app.use("/*", serveStatic({ root: clientDir }));
|
|
2629
|
+
}
|
|
2630
|
+
app.all("/*", (c) => wintercServer.fetch(c.req.raw));
|
|
2631
|
+
const nodeServer = serve({ fetch: app.fetch, port });
|
|
2632
2632
|
await new Promise((resolve) => {
|
|
2633
|
-
nodeServer.
|
|
2633
|
+
nodeServer.on("listening", resolve);
|
|
2634
2634
|
});
|
|
2635
|
+
try {
|
|
2636
|
+
const wsMod = await import("ws");
|
|
2637
|
+
const wss = new wsMod.WebSocketServer({ noServer: true });
|
|
2638
|
+
nodeServer.on("upgrade", (req, socket, head) => {
|
|
2639
|
+
wss.handleUpgrade(req, socket, head, (ws) => {
|
|
2640
|
+
const reqUrl = new URL(req.url ?? "/", `http://localhost:${port}`);
|
|
2641
|
+
wintercServer.handleWebSocket(ws, {
|
|
2642
|
+
skipGreeting: reqUrl.searchParams.has("resume"),
|
|
2643
|
+
uid: reqUrl.searchParams.get("uid") ?? void 0
|
|
2644
|
+
});
|
|
2645
|
+
});
|
|
2646
|
+
});
|
|
2647
|
+
} catch {
|
|
2648
|
+
logger.warn("ws package not available for Node.js WebSocket upgrade");
|
|
2649
|
+
}
|
|
2635
2650
|
serverHandle = {
|
|
2636
2651
|
async shutdown() {
|
|
2637
2652
|
await new Promise((resolve, reject) => {
|
|
@@ -2646,84 +2661,11 @@ function createServer(options) {
|
|
|
2646
2661
|
}
|
|
2647
2662
|
};
|
|
2648
2663
|
}
|
|
2649
|
-
async function serveStaticFile(reqUrl, clientDir, res) {
|
|
2650
|
-
const { readFile } = await import("node:fs/promises");
|
|
2651
|
-
const { join, extname, normalize } = await import("node:path");
|
|
2652
|
-
const urlPath = new URL(reqUrl, "http://localhost").pathname;
|
|
2653
|
-
const relPath = urlPath === "/" ? "index.html" : urlPath.slice(1);
|
|
2654
|
-
const filePath = normalize(join(clientDir, relPath));
|
|
2655
|
-
if (!filePath.startsWith(clientDir)) return false;
|
|
2656
|
-
try {
|
|
2657
|
-
const content = await readFile(filePath);
|
|
2658
|
-
const ext = extname(filePath);
|
|
2659
|
-
const contentType = MIME_TYPES[ext] ?? "application/octet-stream";
|
|
2660
|
-
res.writeHead(200, { "Content-Type": contentType });
|
|
2661
|
-
res.end(content);
|
|
2662
|
-
return true;
|
|
2663
|
-
} catch {
|
|
2664
|
-
return false;
|
|
2665
|
-
}
|
|
2666
|
-
}
|
|
2667
|
-
async function nodeHttpHandler(req, res, port, getWinterc) {
|
|
2668
|
-
try {
|
|
2669
|
-
const protocol = req.socket.encrypted ? "https" : "http";
|
|
2670
|
-
const host = req.headers.host ?? `localhost:${port}`;
|
|
2671
|
-
const url = new URL(req.url ?? "/", `${protocol}://${host}`);
|
|
2672
|
-
const headers = new Headers();
|
|
2673
|
-
for (const [key, val] of Object.entries(req.headers)) {
|
|
2674
|
-
if (val) headers.set(key, Array.isArray(val) ? val[0] ?? "" : val);
|
|
2675
|
-
}
|
|
2676
|
-
const request = new Request(url, { method: req.method ?? "GET", headers });
|
|
2677
|
-
const response = await getWinterc().fetch(request);
|
|
2678
|
-
res.writeHead(response.status, Object.fromEntries(response.headers));
|
|
2679
|
-
res.end(await response.text());
|
|
2680
|
-
} catch (err) {
|
|
2681
|
-
res.writeHead(500);
|
|
2682
|
-
res.end(err instanceof Error ? err.message : "Internal Server Error");
|
|
2683
|
-
}
|
|
2684
|
-
}
|
|
2685
|
-
function attachWsUpgrade(nodeServer, port, getWinterc, logger) {
|
|
2686
|
-
import("ws").then((wsMod) => {
|
|
2687
|
-
const WSServer = wsMod.WebSocketServer;
|
|
2688
|
-
if (!WSServer) return;
|
|
2689
|
-
const wss = new WSServer({ noServer: true });
|
|
2690
|
-
nodeServer.on("upgrade", (req, socket, head) => {
|
|
2691
|
-
wss.handleUpgrade(
|
|
2692
|
-
req,
|
|
2693
|
-
socket,
|
|
2694
|
-
head,
|
|
2695
|
-
(ws) => {
|
|
2696
|
-
const reqUrl = new URL(
|
|
2697
|
-
req.url ?? "/",
|
|
2698
|
-
`http://localhost:${port}`
|
|
2699
|
-
);
|
|
2700
|
-
getWinterc().handleWebSocket(ws, {
|
|
2701
|
-
skipGreeting: reqUrl.searchParams.has("resume")
|
|
2702
|
-
});
|
|
2703
|
-
}
|
|
2704
|
-
);
|
|
2705
|
-
});
|
|
2706
|
-
}).catch(() => {
|
|
2707
|
-
logger.warn("ws package not available for Node.js WebSocket upgrade");
|
|
2708
|
-
});
|
|
2709
|
-
}
|
|
2710
|
-
var MIME_TYPES;
|
|
2711
2664
|
var init_server = __esm({
|
|
2712
2665
|
"sdk/server.ts"() {
|
|
2713
2666
|
"use strict";
|
|
2714
2667
|
init_runtime();
|
|
2715
2668
|
init_winterc_server();
|
|
2716
|
-
MIME_TYPES = {
|
|
2717
|
-
".html": "text/html",
|
|
2718
|
-
".js": "application/javascript",
|
|
2719
|
-
".css": "text/css",
|
|
2720
|
-
".json": "application/json",
|
|
2721
|
-
".svg": "image/svg+xml",
|
|
2722
|
-
".png": "image/png",
|
|
2723
|
-
".ico": "image/x-icon",
|
|
2724
|
-
".woff": "font/woff",
|
|
2725
|
-
".woff2": "font/woff2"
|
|
2726
|
-
};
|
|
2727
2669
|
}
|
|
2728
2670
|
});
|
|
2729
2671
|
|
|
@@ -2829,7 +2771,7 @@ async function bootServer(agentDef, clientDir, env, port) {
|
|
|
2829
2771
|
|
|
2830
2772
|
// cli/_dev.ts
|
|
2831
2773
|
async function _startDevServer(cwd, port, log) {
|
|
2832
|
-
const bundle = await buildAgentBundle(cwd, log);
|
|
2774
|
+
const bundle = await buildAgentBundle(cwd, log, { skipRenderCheck: true });
|
|
2833
2775
|
const agentDef = await loadAgentDef(cwd);
|
|
2834
2776
|
const env = await resolveServerEnv();
|
|
2835
2777
|
await bootServer(agentDef, bundle.clientDir, env, port);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_render_check.d.ts","sourceRoot":"","sources":["../../sdk/_render_check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"_render_check.d.ts","sourceRoot":"","sources":["../../sdk/_render_check.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCjF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// Copyright 2025 the AAI authors. MIT license.
|
|
2
|
+
import preact from "@preact/preset-vite";
|
|
2
3
|
import { createServer as createViteServer } from "vite";
|
|
3
4
|
/**
|
|
4
5
|
* Smoke-test a client.tsx by loading it via Vite SSR in a DOM-shimmed
|
|
@@ -23,6 +24,8 @@ export async function renderCheck(clientEntry, cwd) {
|
|
|
23
24
|
const vite = await createViteServer({
|
|
24
25
|
root: cwd,
|
|
25
26
|
logLevel: "silent",
|
|
27
|
+
plugins: [preact()],
|
|
28
|
+
resolve: { dedupe: ["preact", "@preact/signals"] },
|
|
26
29
|
server: { middlewareMode: true },
|
|
27
30
|
});
|
|
28
31
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_render_check.js","sourceRoot":"","sources":["../../sdk/_render_check.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,GAAW;IAChE,wEAAwE;IACxE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACzE,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAE/D,cAAc,EAAE,CAAC;IAEjB,MAAM,CAAC,GAAG,UAAgD,CAAC;IAC3D,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CACzC,8EAA8E,EAC9E,WAAW,CACZ,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC3B,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC;IAChC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC;IACjB,CAAC,CAAC,QAAQ,GAAG,EAAE,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;IAEhG,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC;QAClC,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE;KACjC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,GAAG,GAAI,GAA2B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC;QACrB,CAAC,CAAC,QAAQ,GAAG,YAAY,CAAC;IAC5B,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"_render_check.js","sourceRoot":"","sources":["../../sdk/_render_check.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,GAAW;IAChE,wEAAwE;IACxE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACzE,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAE/D,cAAc,EAAE,CAAC;IAEjB,MAAM,CAAC,GAAG,UAAgD,CAAC;IAC3D,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CACzC,8EAA8E,EAC9E,WAAW,CACZ,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC3B,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC;IAChC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC;IACjB,CAAC,CAAC,QAAQ,GAAG,EAAE,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;IAEhG,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC;QAClC,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE;QAClD,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE;KACjC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,GAAG,GAAI,GAA2B,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC;QACrB,CAAC,CAAC,QAAQ,GAAG,YAAY,CAAC;IAC5B,CAAC;AACH,CAAC"}
|
package/dist/sdk/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../sdk/server.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../sdk/server.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,UAAU,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,MAAM,MAAM,aAAa,GAAG;IAC1B,wDAAwD;IACxD,KAAK,EAAE,QAAQ,CAAC;IAChB,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,uCAAuC;IACvC,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,mEAAmE;IACnE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,yCAAyC;IACzC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,uBAAuB;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AA0BF;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW,CAuGhE"}
|
package/dist/sdk/server.js
CHANGED
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @module
|
|
9
9
|
*/
|
|
10
|
+
import { serve } from "@hono/node-server";
|
|
11
|
+
import { serveStatic } from "@hono/node-server/serve-static";
|
|
12
|
+
import { Hono } from "hono";
|
|
10
13
|
import { consoleLogger, DEFAULT_S2S_CONFIG } from "./runtime.js";
|
|
11
14
|
import { createWintercServer } from "./winterc_server.js";
|
|
12
15
|
/** Try to load the `ws` package for WebSocket connections. */
|
|
@@ -78,22 +81,36 @@ export function createServer(options) {
|
|
|
78
81
|
return getWinterc().fetch(request);
|
|
79
82
|
},
|
|
80
83
|
async listen(port = 3000) {
|
|
81
|
-
// Ensure WS factory is loaded before starting
|
|
82
84
|
await getWsFactory();
|
|
83
|
-
const
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
});
|
|
93
|
-
attachWsUpgrade(nodeServer, port, getWinterc, logger);
|
|
85
|
+
const wintercServer = getWinterc();
|
|
86
|
+
const app = new Hono();
|
|
87
|
+
if (clientDir) {
|
|
88
|
+
app.use("/*", serveStatic({ root: clientDir }));
|
|
89
|
+
}
|
|
90
|
+
// Delegate all remaining requests to the winterc server
|
|
91
|
+
app.all("/*", (c) => wintercServer.fetch(c.req.raw));
|
|
92
|
+
const nodeServer = serve({ fetch: app.fetch, port });
|
|
93
|
+
// Wait for server to be ready
|
|
94
94
|
await new Promise((resolve) => {
|
|
95
|
-
nodeServer.
|
|
95
|
+
nodeServer.on("listening", resolve);
|
|
96
96
|
});
|
|
97
|
+
// Attach WebSocket upgrade
|
|
98
|
+
try {
|
|
99
|
+
const wsMod = await import("ws");
|
|
100
|
+
const wss = new wsMod.WebSocketServer({ noServer: true });
|
|
101
|
+
nodeServer.on("upgrade", (req, socket, head) => {
|
|
102
|
+
wss.handleUpgrade(req, socket, head, (ws) => {
|
|
103
|
+
const reqUrl = new URL(req.url ?? "/", `http://localhost:${port}`);
|
|
104
|
+
wintercServer.handleWebSocket(ws, {
|
|
105
|
+
skipGreeting: reqUrl.searchParams.has("resume"),
|
|
106
|
+
uid: reqUrl.searchParams.get("uid") ?? undefined,
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
logger.warn("ws package not available for Node.js WebSocket upgrade");
|
|
113
|
+
}
|
|
97
114
|
serverHandle = {
|
|
98
115
|
async shutdown() {
|
|
99
116
|
await new Promise((resolve, reject) => {
|
|
@@ -108,78 +125,4 @@ export function createServer(options) {
|
|
|
108
125
|
},
|
|
109
126
|
};
|
|
110
127
|
}
|
|
111
|
-
// ─── Static file serving ────────────────────────────────────────────────────
|
|
112
|
-
const MIME_TYPES = {
|
|
113
|
-
".html": "text/html",
|
|
114
|
-
".js": "application/javascript",
|
|
115
|
-
".css": "text/css",
|
|
116
|
-
".json": "application/json",
|
|
117
|
-
".svg": "image/svg+xml",
|
|
118
|
-
".png": "image/png",
|
|
119
|
-
".ico": "image/x-icon",
|
|
120
|
-
".woff": "font/woff",
|
|
121
|
-
".woff2": "font/woff2",
|
|
122
|
-
};
|
|
123
|
-
async function serveStaticFile(reqUrl, clientDir, res) {
|
|
124
|
-
const { readFile } = await import("node:fs/promises");
|
|
125
|
-
const { join, extname, normalize } = await import("node:path");
|
|
126
|
-
const urlPath = new URL(reqUrl, "http://localhost").pathname;
|
|
127
|
-
const relPath = urlPath === "/" ? "index.html" : urlPath.slice(1);
|
|
128
|
-
const filePath = normalize(join(clientDir, relPath));
|
|
129
|
-
// Prevent directory traversal
|
|
130
|
-
if (!filePath.startsWith(clientDir))
|
|
131
|
-
return false;
|
|
132
|
-
try {
|
|
133
|
-
const content = await readFile(filePath);
|
|
134
|
-
const ext = extname(filePath);
|
|
135
|
-
const contentType = MIME_TYPES[ext] ?? "application/octet-stream";
|
|
136
|
-
res.writeHead(200, { "Content-Type": contentType });
|
|
137
|
-
res.end(content);
|
|
138
|
-
return true;
|
|
139
|
-
}
|
|
140
|
-
catch {
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// ─── Node.js HTTP/WS helpers ─────────────────────────────────────────────────
|
|
145
|
-
async function nodeHttpHandler(req, res, port, getWinterc) {
|
|
146
|
-
try {
|
|
147
|
-
const protocol = req.socket.encrypted ? "https" : "http";
|
|
148
|
-
const host = req.headers.host ?? `localhost:${port}`;
|
|
149
|
-
const url = new URL(req.url ?? "/", `${protocol}://${host}`);
|
|
150
|
-
const headers = new Headers();
|
|
151
|
-
for (const [key, val] of Object.entries(req.headers)) {
|
|
152
|
-
if (val)
|
|
153
|
-
headers.set(key, Array.isArray(val) ? (val[0] ?? "") : val);
|
|
154
|
-
}
|
|
155
|
-
const request = new Request(url, { method: req.method ?? "GET", headers });
|
|
156
|
-
const response = await getWinterc().fetch(request);
|
|
157
|
-
res.writeHead(response.status, Object.fromEntries(response.headers));
|
|
158
|
-
res.end(await response.text());
|
|
159
|
-
}
|
|
160
|
-
catch (err) {
|
|
161
|
-
res.writeHead(500);
|
|
162
|
-
res.end(err instanceof Error ? err.message : "Internal Server Error");
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
function attachWsUpgrade(nodeServer, port, getWinterc, logger) {
|
|
166
|
-
import("ws")
|
|
167
|
-
.then((wsMod) => {
|
|
168
|
-
const WSServer = wsMod.WebSocketServer;
|
|
169
|
-
if (!WSServer)
|
|
170
|
-
return;
|
|
171
|
-
const wss = new WSServer({ noServer: true });
|
|
172
|
-
nodeServer.on("upgrade", (req, socket, head) => {
|
|
173
|
-
wss.handleUpgrade(req, socket, head, (ws) => {
|
|
174
|
-
const reqUrl = new URL(req.url ?? "/", `http://localhost:${port}`);
|
|
175
|
-
getWinterc().handleWebSocket(ws, {
|
|
176
|
-
skipGreeting: reqUrl.searchParams.has("resume"),
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
})
|
|
181
|
-
.catch(() => {
|
|
182
|
-
logger.warn("ws package not available for Node.js WebSocket upgrade");
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
128
|
//# sourceMappingURL=server.js.map
|
package/dist/sdk/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../sdk/server.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../sdk/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"winterc_server.d.ts","sourceRoot":"","sources":["../../sdk/winterc_server.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"winterc_server.d.ts","sourceRoot":"","sources":["../../sdk/winterc_server.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAGlC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,KAAK,gBAAgB,EAAqB,MAAM,iBAAiB,CAAC;AAE3E,MAAM,MAAM,oBAAoB,GAAG;IACjC,wDAAwD;IACxD,KAAK,EAAE,QAAQ,CAAC;IAChB,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,uCAAuC;IACvC,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,2CAA2C;IAC3C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAC9E,6CAA6C;IAC7C,eAAe,EAAE,kBAAkB,CAAC;IACpC,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,8CAA8C;IAC9C,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,2CAA2C;IAC3C,eAAe,CACb,EAAE,EAAE,gBAAgB,EACpB,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAC1D,IAAI,CAAC;IACR,gCAAgC;IAChC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA0EhF"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
|
+
import { Hono } from "hono";
|
|
11
12
|
import { createDirectExecutor } from "./direct_executor.js";
|
|
12
13
|
import { createMemoryKv } from "./kv.js";
|
|
13
14
|
import { AUDIO_FORMAT } from "./protocol.js";
|
|
@@ -40,23 +41,17 @@ export function createWintercServer(options) {
|
|
|
40
41
|
sampleRate: s2sConfig.inputSampleRate,
|
|
41
42
|
ttsSampleRate: s2sConfig.outputSampleRate,
|
|
42
43
|
};
|
|
44
|
+
const app = new Hono();
|
|
45
|
+
app.get("/health", (c) => c.json({ status: "ok", name: agent.name }));
|
|
46
|
+
app.get("/", (c) => {
|
|
47
|
+
if (clientHtml) {
|
|
48
|
+
return c.html(clientHtml);
|
|
49
|
+
}
|
|
50
|
+
return c.html(`<!DOCTYPE html><html><body><h1>${agent.name}</h1><p>Agent server running.</p></body></html>`);
|
|
51
|
+
});
|
|
43
52
|
return {
|
|
44
53
|
async fetch(request) {
|
|
45
|
-
|
|
46
|
-
if (url.pathname === "/health") {
|
|
47
|
-
return new Response(JSON.stringify({ status: "ok", name: agent.name }), {
|
|
48
|
-
headers: { "Content-Type": "application/json" },
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
if (url.pathname === "/" && clientHtml) {
|
|
52
|
-
return new Response(clientHtml, {
|
|
53
|
-
headers: { "Content-Type": "text/html" },
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
if (url.pathname === "/") {
|
|
57
|
-
return new Response(`<!DOCTYPE html><html><body><h1>${agent.name}</h1><p>Agent server running.</p></body></html>`, { headers: { "Content-Type": "text/html" } });
|
|
58
|
-
}
|
|
59
|
-
return new Response("Not Found", { status: 404 });
|
|
54
|
+
return app.fetch(request);
|
|
60
55
|
},
|
|
61
56
|
handleWebSocket(ws, wsOpts) {
|
|
62
57
|
wireSessionSocket(ws, {
|
|
@@ -69,6 +64,7 @@ export function createWintercServer(options) {
|
|
|
69
64
|
}),
|
|
70
65
|
readyConfig,
|
|
71
66
|
logger,
|
|
67
|
+
uid: wsOpts?.uid,
|
|
72
68
|
});
|
|
73
69
|
},
|
|
74
70
|
async close() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"winterc_server.js","sourceRoot":"","sources":["../../sdk/winterc_server.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;;;;;GAQG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAK9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAyB,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"winterc_server.js","sourceRoot":"","sources":["../../sdk/winterc_server.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/ws_handler.d.ts
CHANGED
|
@@ -36,6 +36,8 @@ export type WsSessionOptions = {
|
|
|
36
36
|
onClose?: () => void;
|
|
37
37
|
/** Logger instance. Defaults to console. */
|
|
38
38
|
logger?: Logger;
|
|
39
|
+
/** Persistent user ID from the client (used as sessionId for cross-reconnect identity). */
|
|
40
|
+
uid?: string | undefined;
|
|
39
41
|
};
|
|
40
42
|
/**
|
|
41
43
|
* Attaches session lifecycle handlers to a native WebSocket using
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws_handler.d.ts","sourceRoot":"","sources":["../../sdk/ws_handler.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAiB,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC;IACpD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kCAAkC,GAAG,IAAI,CAAC;CACpF,CAAC;AAYF,mDAAmD;AACnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2EAA2E;IAC3E,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,2EAA2E;IAC3E,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;IAClE,iEAAiE;IACjE,WAAW,EAAE,WAAW,CAAC;IACzB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ws_handler.d.ts","sourceRoot":"","sources":["../../sdk/ws_handler.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAiB,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC;IACpD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kCAAkC,GAAG,IAAI,CAAC;CACpF,CAAC;AAYF,mDAAmD;AACnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2EAA2E;IAC3E,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,2EAA2E;IAC3E,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;IAClE,iEAAiE;IACjE,WAAW,EAAE,WAAW,CAAC;IACzB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2FAA2F;IAC3F,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B,CAAC;AAiHF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAsDpF"}
|
package/dist/sdk/ws_handler.js
CHANGED
|
@@ -120,7 +120,9 @@ function handleTextMessage(data, session, log, ctx, sid) {
|
|
|
120
120
|
*/
|
|
121
121
|
export function wireSessionSocket(ws, opts) {
|
|
122
122
|
const { sessions, logger: log = consoleLogger } = opts;
|
|
123
|
-
|
|
123
|
+
// Use the client-provided uid for persistent identity across reconnects,
|
|
124
|
+
// falling back to a random UUID for clients that don't send one.
|
|
125
|
+
const sessionId = opts.uid ?? crypto.randomUUID();
|
|
124
126
|
const sid = sessionId.slice(0, 8);
|
|
125
127
|
const ctx = opts.logContext ?? {};
|
|
126
128
|
let session = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws_handler.js","sourceRoot":"","sources":["../../sdk/ws_handler.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;;;;GAOG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAe7C,iEAAiE;AACjE,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAExC,qFAAqF;AACrF,SAAS,iBAAiB,CAAC,IAAgB;IACzC,OAAO,CACL,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,qBAAqB,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,CAC7F,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"ws_handler.js","sourceRoot":"","sources":["../../sdk/ws_handler.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../ui/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,KAAK,MAAM,EAAU,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAiB,WAAW,EAAiB,MAAM,oBAAoB,CAAC;AACjG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAElG;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACnC,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC5C,kDAAkD;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAAE,WAAW,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC/D;;;;;OAKG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI,CAAC;IAClD,qEAAqE;IACrE,MAAM,IAAI,IAAI,CAAC;IACf,yEAAyE;IACzE,UAAU,IAAI,IAAI,CAAC;IACnB,oDAAoD;IACpD,KAAK,IAAI,IAAI,CAAC;IACd,2DAA2D;IAC3D,UAAU,IAAI,IAAI,CAAC;IACnB,6DAA6D;IAC7D,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,2CAA2C;AAC3C,qBAAa,aAAa;;gBAUZ,IAAI,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5B,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAClC,aAAa,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACrC,cAAc,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACtC,KAAK,EAAE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;QACnC,OAAO,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;KAC/B;IAUD,+DAA+D;IAC/D,uEAAuE;IACvE,MAAM,CAAC,QAAQ,CAAC,YAAY,QAAU;IAEtC,KAAK,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IA6F3B,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQvC,aAAa,IAAI,IAAI;IAarB;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,IAAI;CA6B9D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../ui/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,KAAK,MAAM,EAAU,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAiB,WAAW,EAAiB,MAAM,oBAAoB,CAAC;AACjG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAElG;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACnC,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC5C,kDAAkD;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAAE,WAAW,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC/D;;;;;OAKG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI,CAAC;IAClD,qEAAqE;IACrE,MAAM,IAAI,IAAI,CAAC;IACf,yEAAyE;IACzE,UAAU,IAAI,IAAI,CAAC;IACnB,oDAAoD;IACpD,KAAK,IAAI,IAAI,CAAC;IACd,2DAA2D;IAC3D,UAAU,IAAI,IAAI,CAAC;IACnB,6DAA6D;IAC7D,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,2CAA2C;AAC3C,qBAAa,aAAa;;gBAUZ,IAAI,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5B,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAClC,aAAa,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACrC,cAAc,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACtC,KAAK,EAAE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;QACnC,OAAO,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;KAC/B;IAUD,+DAA+D;IAC/D,uEAAuE;IACvE,MAAM,CAAC,QAAQ,CAAC,YAAY,QAAU;IAEtC,KAAK,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IA6F3B,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQvC,aAAa,IAAI,IAAI;IAarB;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,IAAI;CA6B9D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,YAAY,CAiOxE"}
|
package/dist/ui/session.js
CHANGED
|
@@ -288,6 +288,18 @@ export function createVoiceSession(options) {
|
|
|
288
288
|
wsUrl.protocol = wsUrl.protocol === "https:" ? "wss:" : "ws:";
|
|
289
289
|
if (hasConnected)
|
|
290
290
|
wsUrl.searchParams.set("resume", "1");
|
|
291
|
+
// Send a persistent user ID so the server can maintain state across reconnects.
|
|
292
|
+
try {
|
|
293
|
+
let uid = globalThis.localStorage?.getItem("aai-uid");
|
|
294
|
+
if (!uid) {
|
|
295
|
+
uid = crypto.randomUUID();
|
|
296
|
+
globalThis.localStorage?.setItem("aai-uid", uid);
|
|
297
|
+
}
|
|
298
|
+
wsUrl.searchParams.set("uid", uid);
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
// localStorage unavailable (Node tests, SSR) — skip
|
|
302
|
+
}
|
|
291
303
|
const socket = new WebSocket(wsUrl.toString());
|
|
292
304
|
socket.binaryType = "arraybuffer";
|
|
293
305
|
ws = socket;
|