@alexkroman1/aai 0.8.3 → 0.8.5
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/tsconfig.tsbuildinfo +1 -0
- package/dist/cli.js +1215 -1706
- package/dist/sdk/_mock_ws.js +2 -2
- package/dist/sdk/_mock_ws.js.map +1 -1
- package/dist/sdk/_render_check.d.ts.map +1 -1
- package/dist/sdk/_render_check.js +29 -2
- package/dist/sdk/_render_check.js.map +1 -1
- package/dist/sdk/_utils.d.ts +4 -0
- package/dist/sdk/_utils.d.ts.map +1 -0
- package/dist/sdk/_utils.js +7 -0
- package/dist/sdk/_utils.js.map +1 -0
- package/dist/sdk/builtin_tools.d.ts +35 -11
- package/dist/sdk/builtin_tools.d.ts.map +1 -1
- package/dist/sdk/builtin_tools.js +118 -76
- package/dist/sdk/builtin_tools.js.map +1 -1
- package/dist/sdk/capnweb.d.ts +76 -47
- package/dist/sdk/capnweb.d.ts.map +1 -1
- package/dist/sdk/capnweb.js +99 -242
- package/dist/sdk/capnweb.js.map +1 -1
- package/dist/sdk/direct_executor.d.ts.map +1 -1
- package/dist/sdk/direct_executor.js +0 -2
- package/dist/sdk/direct_executor.js.map +1 -1
- package/dist/sdk/host.d.ts +59 -0
- package/dist/sdk/host.d.ts.map +1 -0
- package/dist/sdk/host.js +131 -0
- package/dist/sdk/host.js.map +1 -0
- package/dist/sdk/mod.d.ts +2 -4
- package/dist/sdk/mod.d.ts.map +1 -1
- package/dist/sdk/mod.js +2 -3
- package/dist/sdk/mod.js.map +1 -1
- package/dist/sdk/protocol.d.ts +33 -135
- package/dist/sdk/protocol.d.ts.map +1 -1
- package/dist/sdk/protocol.js +49 -51
- package/dist/sdk/protocol.js.map +1 -1
- package/dist/sdk/runtime.d.ts +0 -1
- package/dist/sdk/runtime.d.ts.map +1 -1
- package/dist/sdk/runtime.js +5 -24
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/s2s.d.ts +14 -3
- package/dist/sdk/s2s.d.ts.map +1 -1
- package/dist/sdk/s2s.js +72 -113
- package/dist/sdk/s2s.js.map +1 -1
- package/dist/sdk/server.d.ts +1 -1
- package/dist/sdk/server.d.ts.map +1 -1
- package/dist/sdk/server.js +26 -10
- package/dist/sdk/server.js.map +1 -1
- package/dist/sdk/session.d.ts +5 -1
- package/dist/sdk/session.d.ts.map +1 -1
- package/dist/sdk/session.js +131 -137
- package/dist/sdk/session.js.map +1 -1
- package/dist/sdk/tsconfig.tsbuildinfo +1 -0
- package/dist/sdk/types.d.ts +30 -3
- package/dist/sdk/types.d.ts.map +1 -1
- package/dist/sdk/types.js +37 -0
- package/dist/sdk/types.js.map +1 -1
- package/dist/sdk/winterc_server.d.ts +0 -1
- package/dist/sdk/winterc_server.d.ts.map +1 -1
- package/dist/sdk/winterc_server.js +0 -1
- package/dist/sdk/winterc_server.js.map +1 -1
- package/dist/sdk/worker_entry.d.ts +3 -11
- package/dist/sdk/worker_entry.d.ts.map +1 -1
- package/dist/sdk/worker_entry.js +8 -18
- package/dist/sdk/worker_entry.js.map +1 -1
- package/dist/sdk/worker_shim.d.ts +5 -6
- package/dist/sdk/worker_shim.d.ts.map +1 -1
- package/dist/sdk/worker_shim.js +93 -136
- package/dist/sdk/worker_shim.js.map +1 -1
- package/dist/sdk/ws_handler.d.ts +1 -3
- package/dist/sdk/ws_handler.d.ts.map +1 -1
- package/dist/sdk/ws_handler.js +14 -25
- package/dist/sdk/ws_handler.js.map +1 -1
- package/dist/ui/_cn.d.ts +5 -0
- package/dist/ui/_cn.d.ts.map +1 -0
- package/dist/ui/_cn.js +22 -0
- package/dist/ui/_cn.js.map +1 -0
- package/dist/ui/_components/app.d.ts +3 -1
- package/dist/ui/_components/app.d.ts.map +1 -1
- package/dist/ui/_components/app.js +2 -2
- package/dist/ui/_components/app.js.map +1 -1
- package/dist/ui/_components/button.d.ts +11 -0
- package/dist/ui/_components/button.d.ts.map +1 -0
- package/dist/ui/_components/button.js +17 -0
- package/dist/ui/_components/button.js.map +1 -0
- package/dist/ui/_components/chat_view.d.ts +3 -1
- package/dist/ui/_components/chat_view.d.ts.map +1 -1
- package/dist/ui/_components/chat_view.js +4 -2
- package/dist/ui/_components/chat_view.js.map +1 -1
- package/dist/ui/_components/controls.d.ts +3 -1
- package/dist/ui/_components/controls.d.ts.map +1 -1
- package/dist/ui/_components/controls.js +4 -5
- package/dist/ui/_components/controls.js.map +1 -1
- package/dist/ui/_components/error_banner.d.ts +2 -1
- package/dist/ui/_components/error_banner.d.ts.map +1 -1
- package/dist/ui/_components/error_banner.js +3 -2
- package/dist/ui/_components/error_banner.js.map +1 -1
- package/dist/ui/_components/message_bubble.d.ts +2 -1
- package/dist/ui/_components/message_bubble.d.ts.map +1 -1
- package/dist/ui/_components/message_bubble.js +5 -3
- package/dist/ui/_components/message_bubble.js.map +1 -1
- package/dist/ui/_components/message_list.d.ts +3 -1
- package/dist/ui/_components/message_list.d.ts.map +1 -1
- package/dist/ui/_components/message_list.js +7 -15
- package/dist/ui/_components/message_list.js.map +1 -1
- package/dist/ui/_components/sidebar_layout.d.ts +2 -1
- package/dist/ui/_components/sidebar_layout.d.ts.map +1 -1
- package/dist/ui/_components/sidebar_layout.js +5 -7
- package/dist/ui/_components/sidebar_layout.js.map +1 -1
- package/dist/ui/_components/start_screen.d.ts +2 -1
- package/dist/ui/_components/start_screen.d.ts.map +1 -1
- package/dist/ui/_components/start_screen.js +5 -2
- package/dist/ui/_components/start_screen.js.map +1 -1
- package/dist/ui/_components/state_indicator.d.ts +2 -1
- package/dist/ui/_components/state_indicator.d.ts.map +1 -1
- package/dist/ui/_components/state_indicator.js +3 -2
- package/dist/ui/_components/state_indicator.js.map +1 -1
- package/dist/ui/_components/thinking_indicator.d.ts +3 -1
- package/dist/ui/_components/thinking_indicator.d.ts.map +1 -1
- package/dist/ui/_components/thinking_indicator.js +4 -2
- package/dist/ui/_components/thinking_indicator.js.map +1 -1
- package/dist/ui/_components/tool_call_block.d.ts +2 -1
- package/dist/ui/_components/tool_call_block.d.ts.map +1 -1
- package/dist/ui/_components/tool_call_block.js +13 -25
- package/dist/ui/_components/tool_call_block.js.map +1 -1
- package/dist/ui/_components/transcript.d.ts +2 -1
- package/dist/ui/_components/transcript.d.ts.map +1 -1
- package/dist/ui/_components/transcript.js +3 -2
- package/dist/ui/_components/transcript.js.map +1 -1
- package/dist/ui/_jsdom_setup.d.ts +1 -0
- package/dist/ui/_jsdom_setup.d.ts.map +1 -0
- package/dist/ui/_jsdom_setup.js +6 -0
- package/dist/ui/_jsdom_setup.js.map +1 -0
- package/dist/ui/audio.d.ts.map +1 -1
- package/dist/ui/audio.js +4 -4
- package/dist/ui/audio.js.map +1 -1
- package/dist/ui/components.d.ts +13 -55
- package/dist/ui/components.d.ts.map +1 -1
- package/dist/ui/components.js +13 -42
- package/dist/ui/components.js.map +1 -1
- package/dist/ui/components_mod.d.ts +14 -3
- package/dist/ui/components_mod.d.ts.map +1 -1
- package/dist/ui/components_mod.js +14 -3
- package/dist/ui/components_mod.js.map +1 -1
- package/dist/ui/mod.d.ts +1 -8
- package/dist/ui/mod.d.ts.map +1 -1
- package/dist/ui/mod.js +1 -5
- package/dist/ui/mod.js.map +1 -1
- package/dist/ui/mount.d.ts +1 -1
- package/dist/ui/mount.d.ts.map +1 -1
- package/dist/ui/mount.js +1 -0
- package/dist/ui/mount.js.map +1 -1
- package/dist/ui/session.d.ts +0 -2
- package/dist/ui/session.d.ts.map +1 -1
- package/dist/ui/session.js +9 -18
- package/dist/ui/session.js.map +1 -1
- package/dist/ui/signals.d.ts +8 -3
- package/dist/ui/signals.d.ts.map +1 -1
- package/dist/ui/signals.js +22 -11
- package/dist/ui/signals.js.map +1 -1
- package/dist/ui/tsconfig.tsbuildinfo +1 -0
- package/dist/ui/worklets/playback-processor.js +3 -3
- package/package.json +37 -17
- package/templates/_shared/CLAUDE.md +4 -7
- package/templates/dispatch-center/agent.ts +85 -397
- package/templates/solo-rpg/agent.ts +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker_entry.d.ts","sourceRoot":"","sources":["../../sdk/worker_entry.ts"],"names":[],"mappings":"AACA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"worker_entry.d.ts","sourceRoot":"","sources":["../../sdk/worker_entry.ts"],"names":[],"mappings":"AACA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,KAAK,EAAE,OAAO,EAAe,OAAO,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,KAC1B,OAAO,CAAC,MAAM,CAAC,CAAC;AAoBrB,+CAA+C;AAC/C,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,EAAE,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
|
package/dist/sdk/worker_entry.js
CHANGED
|
@@ -5,21 +5,15 @@
|
|
|
5
5
|
* @module
|
|
6
6
|
*/
|
|
7
7
|
import { EMPTY_PARAMS } from "./_internal_types.js";
|
|
8
|
+
import { errorMessage } from "./_utils.js";
|
|
9
|
+
import { TOOL_EXECUTION_TIMEOUT_MS } from "./protocol.js";
|
|
8
10
|
/** Yield to the event loop so pending I/O (e.g. WebSocket frames) can be processed. */
|
|
9
11
|
const yieldTick = () => new Promise((r) => setTimeout(r, 0));
|
|
10
|
-
/**
|
|
11
|
-
* Maximum time in milliseconds a tool handler may run before being aborted.
|
|
12
|
-
*
|
|
13
|
-
* If a tool's `execute` function exceeds this duration, it is cancelled via
|
|
14
|
-
* `AbortSignal.timeout` and an error message is returned to the LLM.
|
|
15
|
-
*/
|
|
16
|
-
export const TOOL_HANDLER_TIMEOUT = 30_000;
|
|
17
12
|
function buildToolContext(opts) {
|
|
18
|
-
const { env,
|
|
13
|
+
const { env, state, kv, vector, messages } = opts;
|
|
19
14
|
return {
|
|
20
|
-
sessionId: sessionId ?? "",
|
|
21
15
|
env: { ...env },
|
|
22
|
-
abortSignal: AbortSignal.timeout(
|
|
16
|
+
abortSignal: AbortSignal.timeout(TOOL_EXECUTION_TIMEOUT_MS),
|
|
23
17
|
state: state ?? {},
|
|
24
18
|
get kv() {
|
|
25
19
|
if (!kv)
|
|
@@ -35,12 +29,12 @@ function buildToolContext(opts) {
|
|
|
35
29
|
};
|
|
36
30
|
}
|
|
37
31
|
/**
|
|
38
|
-
* Execute a tool call with argument validation
|
|
32
|
+
* Execute a tool call with argument validation and error handling.
|
|
39
33
|
*
|
|
40
34
|
* Validates the provided arguments against the tool's Zod parameter schema,
|
|
41
35
|
* constructs a {@linkcode ToolContext}, invokes the tool's `execute` function,
|
|
42
|
-
* and serializes the result to a string. Errors
|
|
43
|
-
*
|
|
36
|
+
* and serializes the result to a string. Errors are caught and returned as
|
|
37
|
+
* `"Error: ..."` strings rather than thrown.
|
|
44
38
|
*
|
|
45
39
|
* @param name - The name of the tool being invoked.
|
|
46
40
|
* @param args - Raw arguments from the LLM to validate and pass to the tool.
|
|
@@ -67,12 +61,8 @@ export async function executeToolCall(name, args, options) {
|
|
|
67
61
|
return typeof result === "string" ? result : JSON.stringify(result);
|
|
68
62
|
}
|
|
69
63
|
catch (err) {
|
|
70
|
-
if (err instanceof DOMException && err.name === "TimeoutError") {
|
|
71
|
-
console.warn(`[tool-executor] Tool execution timed out: ${name}`);
|
|
72
|
-
return `Error: Tool "${name}" timed out after ${TOOL_HANDLER_TIMEOUT}ms`;
|
|
73
|
-
}
|
|
74
64
|
console.warn(`[tool-executor] Tool execution failed: ${name}`, err);
|
|
75
|
-
return `Error: ${
|
|
65
|
+
return `Error: ${errorMessage(err)}`;
|
|
76
66
|
}
|
|
77
67
|
}
|
|
78
68
|
//# sourceMappingURL=worker_entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker_entry.js","sourceRoot":"","sources":["../../sdk/worker_entry.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker_entry.js","sourceRoot":"","sources":["../../sdk/worker_entry.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAI1D,uFAAuF;AACvF,MAAM,SAAS,GAAG,GAAkB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAkB5E,SAAS,gBAAgB,CAAC,IAA4B;IACpD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAClD,OAAO;QACL,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE;QACf,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,yBAAyB,CAAC;QAC3D,KAAK,EAAE,KAAK,IAAI,EAAE;QAClB,IAAI,EAAE;YACJ,IAAI,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,MAAM;YACR,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC3D,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,QAAQ,EAAE,QAAQ,IAAI,EAAE;KACzB,CAAC;AACJ,CAAC;AAYD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,IAAuC,EACvC,OAA+B;IAE/B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;aACxC,GAAG,CAAC,CAAC,CAAa,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACvE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,sCAAsC,IAAI,MAAM,MAAM,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,SAAS,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACrE,MAAM,SAAS,EAAE,CAAC;QAClB,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,MAAM,CAAC;QAClC,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,0CAA0C,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QACpE,OAAO,UAAU,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IACvC,CAAC;AACH,CAAC"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Sandboxed worker entry point for platform mode.
|
|
3
3
|
*
|
|
4
4
|
* Called from the bundled `worker.js` inside a Deno Worker with all
|
|
5
|
-
* permissions false.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* permissions false. Sets up capnweb RPC to proxy capabilities through
|
|
6
|
+
* the host, and delegates to a {@linkcode WintercServer} for session
|
|
7
|
+
* management.
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
@@ -12,9 +12,8 @@ import type { AgentDef } from "./types.ts";
|
|
|
12
12
|
/**
|
|
13
13
|
* Initialize a sandboxed worker with the given agent definition.
|
|
14
14
|
*
|
|
15
|
-
* Sets up capnweb RPC,
|
|
16
|
-
* and waits for
|
|
17
|
-
* the WinterTC server.
|
|
15
|
+
* Sets up capnweb RPC, creates capability stubs backed by the host,
|
|
16
|
+
* and waits for initialization before creating the WinterTC server.
|
|
18
17
|
*/
|
|
19
18
|
export declare function initWorker(agent: AgentDef): void;
|
|
20
19
|
//# sourceMappingURL=worker_shim.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker_shim.d.ts","sourceRoot":"","sources":["../../sdk/worker_shim.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"worker_shim.d.ts","sourceRoot":"","sources":["../../sdk/worker_shim.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAYH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAuE3C;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAsFhD"}
|
package/dist/sdk/worker_shim.js
CHANGED
|
@@ -3,125 +3,100 @@
|
|
|
3
3
|
* Sandboxed worker entry point for platform mode.
|
|
4
4
|
*
|
|
5
5
|
* Called from the bundled `worker.js` inside a Deno Worker with all
|
|
6
|
-
* permissions false.
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* permissions false. Sets up capnweb RPC to proxy capabilities through
|
|
7
|
+
* the host, and delegates to a {@linkcode WintercServer} for session
|
|
8
|
+
* management.
|
|
9
9
|
*
|
|
10
10
|
* @module
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
13
|
-
import { BridgedWebSocket, CapnwebEndpoint, createBridgedS2sWebSocket, } from "./capnweb.js";
|
|
12
|
+
import { BridgedWebSocket, createRpcSession, isTransferMessage, RpcTarget, sendTransfer, } from "./capnweb.js";
|
|
14
13
|
import { createWintercServer } from "./winterc_server.js";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
14
|
+
/**
|
|
15
|
+
* RPC service exposed by the worker to the host.
|
|
16
|
+
* Methods are callable via capnweb RPC stubs.
|
|
17
|
+
*/
|
|
18
|
+
class WorkerService extends RpcTarget {
|
|
19
|
+
#agent;
|
|
20
|
+
#kv;
|
|
21
|
+
#vector;
|
|
22
|
+
#vectorSearch;
|
|
23
|
+
#createWebSocket;
|
|
24
|
+
#wintercServer = null;
|
|
25
|
+
constructor(agent, kv, vector, vectorSearch, createWebSocket) {
|
|
26
|
+
super();
|
|
27
|
+
this.#agent = agent;
|
|
28
|
+
this.#kv = kv;
|
|
29
|
+
this.#vector = vector;
|
|
30
|
+
this.#vectorSearch = vectorSearch;
|
|
31
|
+
this.#createWebSocket = createWebSocket;
|
|
32
|
+
}
|
|
33
|
+
/** Initialize the worker with environment variables. Creates the WinterTC server. */
|
|
34
|
+
init(env) {
|
|
35
|
+
this.#wintercServer = createWintercServer({
|
|
36
|
+
agent: this.#agent,
|
|
37
|
+
env,
|
|
38
|
+
kv: this.#kv,
|
|
39
|
+
vector: this.#vector,
|
|
40
|
+
vectorSearch: this.#vectorSearch,
|
|
41
|
+
createWebSocket: this.#createWebSocket,
|
|
42
|
+
});
|
|
43
|
+
return "ok";
|
|
44
|
+
}
|
|
45
|
+
/** Handle an HTTP request forwarded from the host. */
|
|
46
|
+
async workerFetch(url, method, headers, body) {
|
|
47
|
+
if (!this.#wintercServer)
|
|
48
|
+
throw new Error("Worker not initialized");
|
|
49
|
+
const request = new Request(url, { method, headers, ...(body ? { body } : {}) });
|
|
50
|
+
const response = await this.#wintercServer.fetch(request);
|
|
51
|
+
return {
|
|
52
|
+
status: response.status,
|
|
53
|
+
headers: Object.fromEntries(response.headers),
|
|
54
|
+
body: await response.text(),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** Handle a new WebSocket client connection (called via port transfer, not RPC). */
|
|
58
|
+
handleWebSocket(port, skipGreeting) {
|
|
59
|
+
if (!this.#wintercServer)
|
|
60
|
+
throw new Error("Worker not initialized");
|
|
61
|
+
const ws = new BridgedWebSocket(port);
|
|
62
|
+
this.#wintercServer.handleWebSocket(ws, { skipGreeting });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
39
65
|
/**
|
|
40
66
|
* Initialize a sandboxed worker with the given agent definition.
|
|
41
67
|
*
|
|
42
|
-
* Sets up capnweb RPC,
|
|
43
|
-
* and waits for
|
|
44
|
-
* the WinterTC server.
|
|
68
|
+
* Sets up capnweb RPC, creates capability stubs backed by the host,
|
|
69
|
+
* and waits for initialization before creating the WinterTC server.
|
|
45
70
|
*/
|
|
46
71
|
export function initWorker(agent) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
globalThis.fetch = async (input, init) => {
|
|
50
|
-
let url;
|
|
51
|
-
let method = "GET";
|
|
52
|
-
let headers = {};
|
|
53
|
-
let body;
|
|
54
|
-
if (typeof input === "string") {
|
|
55
|
-
url = input;
|
|
56
|
-
}
|
|
57
|
-
else if (input instanceof URL) {
|
|
58
|
-
url = input.toString();
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
url = input.url;
|
|
62
|
-
method = input.method;
|
|
63
|
-
headers = Object.fromEntries(input.headers);
|
|
64
|
-
if (input.body) {
|
|
65
|
-
body = await new Response(input.body).text();
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
if (init?.method)
|
|
69
|
-
method = init.method;
|
|
70
|
-
if (init?.headers) {
|
|
71
|
-
headers = Object.fromEntries(new Headers(init.headers));
|
|
72
|
-
}
|
|
73
|
-
if (init?.body !== undefined) {
|
|
74
|
-
body = typeof init.body === "string" ? init.body : String(init.body);
|
|
75
|
-
}
|
|
76
|
-
const raw = await endpoint.call("host.fetch", [url, method, headers, body]);
|
|
77
|
-
const result = FetchResultSchema.parse(raw);
|
|
78
|
-
return new Response(result.body, {
|
|
79
|
-
status: result.status,
|
|
80
|
-
headers: result.headers,
|
|
81
|
-
});
|
|
82
|
-
};
|
|
72
|
+
// biome-ignore lint/suspicious/noExplicitAny: capnweb stubs are dynamically typed proxies
|
|
73
|
+
let hostStub;
|
|
83
74
|
// ─── Capnweb-backed KV ─────────────────────────────────────────────────
|
|
84
75
|
const kv = {
|
|
85
76
|
async get(key) {
|
|
86
|
-
const raw = await
|
|
87
|
-
|
|
88
|
-
return null;
|
|
89
|
-
return raw;
|
|
77
|
+
const raw = await hostStub.kvGet(key);
|
|
78
|
+
return raw == null ? null : raw;
|
|
90
79
|
},
|
|
91
80
|
async set(key, value, options) {
|
|
92
|
-
await
|
|
81
|
+
await hostStub.kvSet(key, value, options);
|
|
93
82
|
},
|
|
94
83
|
async delete(key) {
|
|
95
|
-
await
|
|
84
|
+
await hostStub.kvDel(key);
|
|
96
85
|
},
|
|
97
86
|
async list(prefix, options) {
|
|
98
|
-
|
|
99
|
-
"list",
|
|
100
|
-
prefix,
|
|
101
|
-
options?.limit,
|
|
102
|
-
options?.reverse,
|
|
103
|
-
]);
|
|
104
|
-
const entries = z.array(KvEntrySchema).parse(raw);
|
|
105
|
-
return entries;
|
|
87
|
+
return (await hostStub.kvList(prefix, options));
|
|
106
88
|
},
|
|
107
89
|
};
|
|
108
90
|
// ─── Capnweb-backed vector store ───────────────────────────────────────
|
|
109
91
|
const vector = {
|
|
110
92
|
async upsert(id, data, metadata) {
|
|
111
|
-
await
|
|
93
|
+
await hostStub.vecUpsert(id, data, metadata);
|
|
112
94
|
},
|
|
113
95
|
async query(text, options) {
|
|
114
|
-
|
|
115
|
-
"query",
|
|
116
|
-
text,
|
|
117
|
-
options?.topK,
|
|
118
|
-
options?.filter,
|
|
119
|
-
]);
|
|
120
|
-
return z.array(VectorEntrySchema).parse(raw);
|
|
96
|
+
return (await hostStub.vecQuery(text, options));
|
|
121
97
|
},
|
|
122
98
|
async remove(ids) {
|
|
123
|
-
|
|
124
|
-
await endpoint.call("host.vector", ["remove", idArray]);
|
|
99
|
+
await hostStub.vecRemove(Array.isArray(ids) ? ids : [ids]);
|
|
125
100
|
},
|
|
126
101
|
};
|
|
127
102
|
const vectorSearch = async (query, topK) => {
|
|
@@ -133,52 +108,34 @@ export function initWorker(agent) {
|
|
|
133
108
|
// ─── Capnweb-backed S2S WebSocket factory ──────────────────────────────
|
|
134
109
|
const createWebSocket = (url, opts) => {
|
|
135
110
|
const { port1, port2 } = new MessageChannel();
|
|
136
|
-
|
|
137
|
-
return
|
|
111
|
+
sendTransfer(self, { _t: "createWs", url, headers: JSON.stringify(opts.headers) }, [port2]);
|
|
112
|
+
return new BridgedWebSocket(port1);
|
|
138
113
|
};
|
|
139
|
-
// ───
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
kv,
|
|
148
|
-
vector,
|
|
149
|
-
vectorSearch,
|
|
150
|
-
createWebSocket,
|
|
151
|
-
});
|
|
152
|
-
return "ok";
|
|
153
|
-
});
|
|
154
|
-
// Handle HTTP request forwarding
|
|
155
|
-
endpoint.handle("worker.fetch", async (args) => {
|
|
156
|
-
if (!wintercServer)
|
|
157
|
-
throw new Error("Worker not initialized");
|
|
158
|
-
const [url, method, headers, body] = WorkerFetchArgsSchema.parse(args);
|
|
159
|
-
const request = new Request(url, {
|
|
160
|
-
method,
|
|
161
|
-
headers,
|
|
162
|
-
...(body ? { body } : {}),
|
|
114
|
+
// ─── Monkeypatch fetch to proxy through host ──────────────────────────
|
|
115
|
+
globalThis.fetch = async (input, init) => {
|
|
116
|
+
const request = new Request(input, init);
|
|
117
|
+
const body = request.body ? await request.text() : undefined;
|
|
118
|
+
const result = await hostStub.hostFetch(request.url, request.method, Object.fromEntries(request.headers), body);
|
|
119
|
+
return new Response(result.body, {
|
|
120
|
+
status: result.status,
|
|
121
|
+
headers: result.headers,
|
|
163
122
|
});
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
wintercServer.handleWebSocket(ws, { skipGreeting: skipGreeting ?? false });
|
|
181
|
-
return "ok";
|
|
123
|
+
};
|
|
124
|
+
// ─── Create worker service and RPC session ────────────────────────────
|
|
125
|
+
const workerService = new WorkerService(agent, kv, vector, vectorSearch, createWebSocket);
|
|
126
|
+
hostStub = createRpcSession({
|
|
127
|
+
port: self,
|
|
128
|
+
localMain: workerService,
|
|
129
|
+
onTransfer(data, ports) {
|
|
130
|
+
if (!isTransferMessage(data))
|
|
131
|
+
return;
|
|
132
|
+
if (data._t === "handleWs") {
|
|
133
|
+
const transferPort = ports[0];
|
|
134
|
+
if (!transferPort)
|
|
135
|
+
throw new Error("No port transferred for WebSocket");
|
|
136
|
+
workerService.handleWebSocket(transferPort, data.skipGreeting);
|
|
137
|
+
}
|
|
138
|
+
},
|
|
182
139
|
});
|
|
183
140
|
}
|
|
184
141
|
//# sourceMappingURL=worker_shim.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker_shim.js","sourceRoot":"","sources":["../../sdk/worker_shim.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;;;;;;GASG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"worker_shim.js","sourceRoot":"","sources":["../../sdk/worker_shim.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/ws_handler.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* WebSocket session lifecycle handler.
|
|
3
3
|
*
|
|
4
4
|
* Cross-runtime: accepts a Logger parameter instead of importing `@std/log`.
|
|
5
|
-
* Audio validation is
|
|
5
|
+
* Audio validation is handled at the host transport layer (see host.ts).
|
|
6
6
|
*
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
@@ -36,8 +36,6 @@ 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;
|
|
41
39
|
};
|
|
42
40
|
/**
|
|
43
41
|
* 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;
|
|
1
|
+
{"version":3,"file":"ws_handler.d.ts","sourceRoot":"","sources":["../../sdk/ws_handler.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAGH,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;AAEF,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;CACjB,CAAC;AAiGF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CA0DpF"}
|
package/dist/sdk/ws_handler.js
CHANGED
|
@@ -3,18 +3,13 @@
|
|
|
3
3
|
* WebSocket session lifecycle handler.
|
|
4
4
|
*
|
|
5
5
|
* Cross-runtime: accepts a Logger parameter instead of importing `@std/log`.
|
|
6
|
-
* Audio validation is
|
|
6
|
+
* Audio validation is handled at the host transport layer (see host.ts).
|
|
7
7
|
*
|
|
8
8
|
* @module
|
|
9
9
|
*/
|
|
10
|
+
import { errorMessage } from "./_utils.js";
|
|
10
11
|
import { ClientMessageSchema } from "./protocol.js";
|
|
11
12
|
import { consoleLogger } from "./runtime.js";
|
|
12
|
-
/** Max size for a single audio chunk from the browser (1 MB). */
|
|
13
|
-
const MAX_AUDIO_CHUNK_BYTES = 1_048_576;
|
|
14
|
-
/** Validate a PCM16 audio chunk: non-empty, within size bounds, even byte length. */
|
|
15
|
-
function isValidAudioChunk(data) {
|
|
16
|
-
return (data.byteLength > 0 && data.byteLength <= MAX_AUDIO_CHUNK_BYTES && data.byteLength % 2 === 0);
|
|
17
|
-
}
|
|
18
13
|
/**
|
|
19
14
|
* Creates a {@linkcode ClientSink} backed by a plain WebSocket.
|
|
20
15
|
*
|
|
@@ -61,20 +56,10 @@ function toUint8Array(data) {
|
|
|
61
56
|
const buf = data;
|
|
62
57
|
return new Uint8Array(buf.buffer ?? data, buf.byteOffset ?? 0, buf.byteLength);
|
|
63
58
|
}
|
|
64
|
-
function handleBinaryAudio(data, session
|
|
59
|
+
function handleBinaryAudio(data, session) {
|
|
65
60
|
if (!isBinaryData(data))
|
|
66
61
|
return false;
|
|
67
|
-
|
|
68
|
-
if (!isValidAudioChunk(chunk)) {
|
|
69
|
-
log.warn("Invalid audio chunk, dropping", {
|
|
70
|
-
...ctx,
|
|
71
|
-
sid,
|
|
72
|
-
bytes: chunk.byteLength,
|
|
73
|
-
aligned: chunk.byteLength % 2 === 0,
|
|
74
|
-
});
|
|
75
|
-
return true;
|
|
76
|
-
}
|
|
77
|
-
session.onAudio(chunk);
|
|
62
|
+
session.onAudio(toUint8Array(data));
|
|
78
63
|
return true;
|
|
79
64
|
}
|
|
80
65
|
function handleTextMessage(data, session, log, ctx, sid) {
|
|
@@ -120,9 +105,7 @@ function handleTextMessage(data, session, log, ctx, sid) {
|
|
|
120
105
|
*/
|
|
121
106
|
export function wireSessionSocket(ws, opts) {
|
|
122
107
|
const { sessions, logger: log = consoleLogger } = opts;
|
|
123
|
-
|
|
124
|
-
// falling back to a random UUID for clients that don't send one.
|
|
125
|
-
const sessionId = opts.uid ?? crypto.randomUUID();
|
|
108
|
+
const sessionId = crypto.randomUUID();
|
|
126
109
|
const sid = sessionId.slice(0, 8);
|
|
127
110
|
const ctx = opts.logContext ?? {};
|
|
128
111
|
let session = null;
|
|
@@ -134,8 +117,14 @@ export function wireSessionSocket(ws, opts) {
|
|
|
134
117
|
sessions.set(sessionId, session);
|
|
135
118
|
// Send config immediately — zero RTT
|
|
136
119
|
ws.send(JSON.stringify({ type: "config", ...opts.readyConfig }));
|
|
137
|
-
|
|
138
|
-
|
|
120
|
+
session
|
|
121
|
+
.start()
|
|
122
|
+
.then(() => {
|
|
123
|
+
log.info("Session ready", { ...ctx, sid });
|
|
124
|
+
})
|
|
125
|
+
.catch((err) => {
|
|
126
|
+
log.error("Session start failed", { ...ctx, sid, error: errorMessage(err) });
|
|
127
|
+
});
|
|
139
128
|
}
|
|
140
129
|
// readyState 1 = OPEN — socket already open (e.g. from ws handleUpgrade)
|
|
141
130
|
if (ws.readyState === 1) {
|
|
@@ -148,7 +137,7 @@ export function wireSessionSocket(ws, opts) {
|
|
|
148
137
|
if (!session)
|
|
149
138
|
return;
|
|
150
139
|
const { data } = event;
|
|
151
|
-
if (handleBinaryAudio(data, session
|
|
140
|
+
if (handleBinaryAudio(data, session))
|
|
152
141
|
return;
|
|
153
142
|
handleTextMessage(data, session, log, ctx, sid);
|
|
154
143
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws_handler.js","sourceRoot":"","sources":["../../sdk/ws_handler.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"ws_handler.js","sourceRoot":"","sources":["../../sdk/ws_handler.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/_cn.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_cn.d.ts","sourceRoot":"","sources":["../../ui/_cn.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,GAAG,UAAU,EAAE,CAAC;AAE9E,mEAAmE;AACnE,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAclD"}
|
package/dist/ui/_cn.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Copyright 2025 the AAI authors. MIT license.
|
|
2
|
+
/** Tiny clsx-style class name joiner. Falsy values are ignored. */
|
|
3
|
+
export function cn(...inputs) {
|
|
4
|
+
const classes = [];
|
|
5
|
+
for (const input of inputs) {
|
|
6
|
+
if (!input)
|
|
7
|
+
continue;
|
|
8
|
+
if (typeof input === "string") {
|
|
9
|
+
classes.push(input);
|
|
10
|
+
}
|
|
11
|
+
else if (typeof input === "number") {
|
|
12
|
+
classes.push(String(input));
|
|
13
|
+
}
|
|
14
|
+
else if (Array.isArray(input)) {
|
|
15
|
+
const inner = cn(...input);
|
|
16
|
+
if (inner)
|
|
17
|
+
classes.push(inner);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return classes.join(" ");
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=_cn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_cn.js","sourceRoot":"","sources":["../../ui/_cn.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAI/C,mEAAmE;AACnE,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;YAC3B,IAAI,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../ui/_components/app.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAatC,wBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../ui/_components/app.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAatC,wBAAgB,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAQ7E"}
|
|
@@ -5,8 +5,8 @@ import { StartScreen } from "./start_screen.js";
|
|
|
5
5
|
function AnsiLogo() {
|
|
6
6
|
return (_jsx("pre", { class: "font-aai-mono text-lg leading-[1.1] font-bold text-aai-primary m-0", children: "▄▀█ ▄▀█ █\n█▀█ █▀█ █" }));
|
|
7
7
|
}
|
|
8
|
-
export function App() {
|
|
8
|
+
export function App({ className }) {
|
|
9
9
|
const { title } = useMountConfig();
|
|
10
|
-
return (_jsx(StartScreen, { icon: title ? undefined : _jsx(AnsiLogo, {}), title: title, children: _jsx(ChatView, {}) }));
|
|
10
|
+
return (_jsx(StartScreen, { icon: title ? undefined : _jsx(AnsiLogo, {}), title: title, className: className, children: _jsx(ChatView, {}) }));
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=app.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../ui/_components/app.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAoB,CAAC;AAEjD,SAAS,QAAQ;IACf,OAAO,CACL,cAAK,KAAK,EAAC,oEAAoE,YAC5E,sBAAsB,GACnB,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../ui/_components/app.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAoB,CAAC;AAEjD,SAAS,QAAQ;IACf,OAAO,CACL,cAAK,KAAK,EAAC,oEAAoE,YAC5E,sBAAsB,GACnB,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,EAAE,SAAS,EAA0B;IACvD,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,EAAE,CAAC;IAEnC,OAAO,CACL,KAAC,WAAW,IAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAC,QAAQ,KAAG,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,YACrF,KAAC,QAAQ,KAAG,GACA,CACf,CAAC;AACJ,CAAC"}
|