thursday-agent 0.6.0 → 0.7.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/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/artifact/route.js +3 -3
- package/.next/server/app/api/artifact/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/files/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/memory/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/thread/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/bot/thread/route.js.nft.json +1 -1
- package/.next/server/app/api/file/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/memory/edit/route.js +1 -1
- package/.next/server/app/api/memory/edit/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[source]/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/call/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/thursday/tool-call/route.js +1 -1
- package/.next/server/app/api/thursday/tool-call/route.js.nft.json +1 -1
- package/.next/server/app/api/workspace/missing/route.js +2 -2
- package/.next/server/app/api/workspace/missing/route.js.nft.json +1 -1
- package/.next/server/app/api/workspace/route.js.nft.json +1 -1
- package/.next/server/app/artifact/[...path]/page/server-reference-manifest.json +1 -1
- package/.next/server/app/artifact/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/artifact/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page/server-reference-manifest.json +42 -42
- package/.next/server/app/page.js +5 -4
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0-06t3f._.js +8 -0
- package/.next/server/chunks/{[root-of-the-server]__049f521._.js → [root-of-the-server]__06l05n_._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0_ue8oe._.js +1 -1
- package/.next/server/chunks/{[root-of-the-server]__0ye3da2._.js → [root-of-the-server]__0btqrct._.js} +1 -1
- package/.next/server/chunks/[root-of-the-server]__0c9fgca._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0zp35ul._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__1kv8p3e._.js +1 -1
- package/.next/server/chunks/_02szwk8._.js +1 -1
- package/.next/server/chunks/_06c9kie._.js +24 -24
- package/.next/server/chunks/_0i55en5._.js +6 -6
- package/.next/server/chunks/_0p56fn0._.js +1 -1
- package/.next/server/chunks/_11ujpya._.js +1 -1
- package/.next/server/chunks/_1dbixxz._.js +1 -1
- package/.next/server/chunks/_1dc_d1q._.js +16 -16
- package/.next/server/chunks/_1gnjfli._.js +3 -0
- package/.next/server/chunks/_1klbcft._.js +1 -1
- package/.next/server/chunks/features_0-cnt0l._.js +1 -1
- package/.next/server/chunks/features_0hdaci0._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0-e011f._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0pd8yr7._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__1nygfik._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__1sdphb0._.js +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__1fll8dc._.js → [root-of-the-server]__1vdmfbe._.js} +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__1waa3rc._.js +34 -49
- package/.next/server/chunks/ssr/{_1anqots._.js → _0-2qsxo._.js} +2 -2
- package/.next/server/chunks/ssr/_02oc_h5._.js +9 -9
- package/.next/server/chunks/ssr/_05yghx6._.js +1 -1
- package/.next/server/chunks/ssr/_07nbwap._.js +3 -0
- package/.next/server/chunks/ssr/_08c4z-9._.js +1 -1
- package/.next/server/chunks/ssr/_0_qfdlw._.js +1 -1
- package/.next/server/chunks/ssr/_0b6_jv-._.js +3 -0
- package/.next/server/chunks/ssr/_0hxt2ul._.js +1 -1
- package/.next/server/chunks/ssr/_0i_6q1w._.js +1 -1
- package/.next/server/chunks/ssr/{_18xqmny._.js → _0no7i1o._.js} +2 -2
- package/.next/server/chunks/ssr/_0tzg--b._.js +3 -0
- package/.next/server/chunks/ssr/{_1ztk7p6._.js → _114ylv7._.js} +3 -3
- package/.next/server/chunks/ssr/{_1k0spz7._.js → _12c-iwh._.js} +2 -2
- package/.next/server/chunks/ssr/_12w42gi._.js +1 -1
- package/.next/server/chunks/ssr/{_0eaog6_._.js → _167hchk._.js} +2 -2
- package/.next/server/chunks/ssr/{_1x9pskj._.js → _1_x5spz._.js} +3 -3
- package/.next/server/chunks/ssr/{_0dr-ddg._.js → _1a61fc9._.js} +2 -2
- package/.next/server/chunks/ssr/_1jmz33w._.js +1 -1
- package/.next/server/chunks/ssr/{_1y6b5mr._.js → _1w_t7h7._.js} +2 -2
- package/.next/server/chunks/ssr/{_0dh2e1j._.js → _1wyfaq_._.js} +7 -7
- package/.next/server/chunks/ssr/{[root-of-the-server]__0bxsfyn._.js → _200gt-m._.js} +4 -3
- package/.next/server/chunks/ssr/features_config_components_config-setting_tsx_0xfwqdg._.js +1 -1
- package/.next/server/chunks/ssr/features_connectors_components_mcp-setting_tsx_0jmbgvp._.js +1 -1
- package/.next/server/chunks/ssr/{_0c9e5w6._.js → features_workspace_00jz2hu._.js} +3 -4
- package/.next/server/chunks/ssr/{node_modules_0746rzi._.js → node_modules_02ai7br._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0vsxbzp._.js → node_modules_02deexj._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1g1eihe._.js → node_modules_07za262._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0332gw4._.js → node_modules_0_s9get._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1gpednh._.js → node_modules_0n3c7h0._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0t-9nup._.js → node_modules_0od6jwr._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0mxvg8h._.js → node_modules_0rdt7pk._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0vv0-fg._.js → node_modules_0w1z7kz._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1d53yiq._.js → node_modules_0wdupfz._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1u6w1pb._.js → node_modules_1720w0a._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1gu1pph._.js → node_modules_18lsg7d._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1he1w8_._.js → node_modules_1b94fxf._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0qbfyjh._.js → node_modules_1ecdo1s._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0qapgjr._.js → node_modules_1fa9ag7._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0d5uzof._.js → node_modules_1fv-_si._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1lnjapm._.js → node_modules_1hf461g._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1-urho9._.js → node_modules_1m71ta-._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1lynj9m._.js → node_modules_1n93n-g._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0fr-ml8._.js → node_modules_1n9lqu9._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_04vxchl._.js → node_modules_1npnsvd._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0exkwcm._.js → node_modules_1rn2r0n._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_022sipm._.js → node_modules_1vq-mfk._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_00_51_v._.js → node_modules_1vzyw1t._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_0wsvp00._.js → node_modules_1w359w4._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_1xn6saw._.js → node_modules_1yajbl6._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_16pi_dd._.js → node_modules_20eqhy8._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_067_exa._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_019sbis._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0nrrdaq._.js → node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0s6piq3._.js} +1 -1
- package/.next/server/chunks/ssr/{node_modules_@vercel_oidc_dist_21a5haa._.js → node_modules_@vercel_oidc_dist_05itbb1._.js} +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +43 -43
- package/.next/static/chunks/{0dr16v67vj4n7.js → 07vqbk_9t4em4.js} +2 -2
- package/.next/static/chunks/{2nvepds1fu2ux.js → 08krja1zx7nqg.js} +1 -1
- package/.next/static/chunks/{42wcg3wfg_m_p.js → 0qcuwdk132jjt.js} +1 -1
- package/.next/static/chunks/{2_pnccjp6j1ca.js → 0z69gvysmave7.js} +1 -1
- package/.next/static/chunks/12fvz1w5ows75.js +1 -0
- package/.next/static/chunks/14t03ned286iu.js +1 -0
- package/.next/static/chunks/{2jlz8zp4jax_m.js → 156xxbkrz5lzu.js} +1 -1
- package/.next/static/chunks/1fz14reod4lft.js +1 -0
- package/.next/static/chunks/{0joan-69kbspd.js → 1g23dbabl-vkr.js} +1 -1
- package/.next/static/chunks/{18mkhstgiqcbt.js → 1qy_rc3oxfxok.js} +1 -1
- package/.next/static/chunks/1zea7qdl-7365.js +1 -0
- package/.next/static/chunks/1zvqumkg7kmo0.css +1 -0
- package/.next/static/chunks/26hpqt3y6bogl.js +12 -0
- package/.next/static/chunks/{3zk6q3-3f9swq.js → 2_j5mqm6d-z18.js} +1 -1
- package/.next/static/chunks/{1vj_5bnbxx84e.js → 2dt6tu7a22svs.js} +1 -1
- package/.next/static/chunks/2h5ls3d86kya6.js +1 -0
- package/.next/static/chunks/2wc6y1ht6dfuy.js +1 -0
- package/.next/static/chunks/{1i-u2wzub_to1.js → 2xr0zpll7thyi.js} +6 -6
- package/.next/static/chunks/{26ql4y-43xwhp.js → 31jztc-yq30m7.js} +1 -1
- package/.next/static/chunks/391af0i8eljzk.js +1 -0
- package/.next/static/chunks/{1kp5nfp06nj9h.js → 3p2s2cjokx1aa.js} +2 -2
- package/.next/static/chunks/{1wlo979mx-y3w.js → 41s3fml5oivsa.js} +1 -1
- package/README.md +60 -19
- package/docs/how-it-works.md +2 -0
- package/docs/live-calls.md +38 -33
- package/features/ai/load-tools.ts +4 -2
- package/features/ai/prompts/bot.prompt.ts +5 -5
- package/features/ai/prompts/live.prompt.ts +36 -132
- package/features/ai/prompts/prompt-helper.ts +5 -4
- package/features/ai/prompts/thursday.prompt.ts +75 -54
- package/features/ai/tools/call.tool.ts +32 -4
- package/features/ai/tools/tool-name.ts +1 -0
- package/features/bot/bot.runner.ts +5 -5
- package/features/thursday/ascii.const.ts +74 -0
- package/features/thursday/components/ascii-orb.tsx +173 -30
- package/features/thursday/components/face.tsx +6 -1
- package/features/thursday/components/side-captions.tsx +273 -0
- package/features/thursday/components/tab-state.tsx +11 -3
- package/features/thursday/components/thursday-setting.tsx +6 -5
- package/features/thursday/components/thursday.tsx +227 -251
- package/features/thursday/face.store.ts +5 -0
- package/features/thursday/thursday.action.ts +4 -6
- package/features/thursday/thursday.schema.ts +10 -5
- package/features/thursday/thursday.store.ts +3 -0
- package/features/thursday/use-thursday.ts +461 -392
- package/features/workspace/file-kind.ts +9 -0
- package/hooks/use-hotkey.ts +3 -2
- package/lib/live/live.schema.ts +0 -21
- package/lib/live/live.server.ts +1 -3
- package/package.json +1 -1
- package/scripts/artifact-paths.test.mts +13 -0
- package/scripts/live-session.test.mts +56 -66
- package/.next/server/chunks/[root-of-the-server]__0g-ueei._.js +0 -8
- package/.next/server/chunks/node_modules_consola_dist_chunks_prompt_mjs_1kipdeo._.js +0 -3
- package/.next/server/chunks/ssr/[root-of-the-server]__172cq4x._.js +0 -3
- package/.next/server/chunks/ssr/_03_928f._.js +0 -3
- package/.next/server/chunks/ssr/_0g_rlog._.js +0 -3
- package/.next/server/chunks/ssr/_123ttsf._.js +0 -3
- package/.next/static/chunks/10k2xvap03z20.css +0 -1
- package/.next/static/chunks/1t9qms5pwwa3n.js +0 -1
- package/.next/static/chunks/2a51-ywz9b2a3.js +0 -1
- package/.next/static/chunks/2fvdgxih7x7hr.js +0 -1
- package/.next/static/chunks/3addj3i4-izma.js +0 -1
- package/.next/static/chunks/3gfh7nxwusbt0.js +0 -1
- package/.next/static/chunks/3gwa44cvz4qoi.js +0 -1
- package/.next/static/chunks/3zkg5iup3v4a2.js +0 -12
- package/.next/static/chunks/405m0bqtoihev.js +0 -1
- /package/.next/static/{0qzGoKn2wTERVZtblX1tp → yyRVBc0xxYQsh3GpbQX9b}/_buildManifest.js +0 -0
- /package/.next/static/{0qzGoKn2wTERVZtblX1tp → yyRVBc0xxYQsh3GpbQX9b}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{0qzGoKn2wTERVZtblX1tp → yyRVBc0xxYQsh3GpbQX9b}/_ssgManifest.js +0 -0
|
@@ -116,3 +116,12 @@ export function pathsIn(text: string): string[] {
|
|
|
116
116
|
}
|
|
117
117
|
return [...seen].slice(0, 6);
|
|
118
118
|
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* What a finished job puts on the user's screen by itself: a page to read among their finished
|
|
122
|
+
* work. Anything else a report names — a data file, a bot's own memory, a sign-in state — opens
|
|
123
|
+
* only from its chip.
|
|
124
|
+
*/
|
|
125
|
+
export const opensOnFinish = (path: string): boolean =>
|
|
126
|
+
path.startsWith(`${PATHS.artifacts}/`) &&
|
|
127
|
+
["md", "markdown", "html", "htm"].includes(extensionOf(path));
|
package/hooks/use-hotkey.ts
CHANGED
|
@@ -10,7 +10,8 @@ const EDITABLE = /^(input|textarea|select)$/i;
|
|
|
10
10
|
|
|
11
11
|
export const HOTKEY_CAPTURE = { "data-hotkey-capture": "" } as const;
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
/** A key pressed here is being typed or recorded, not meant for a shortcut. */
|
|
14
|
+
export const capturesKeys = (target: EventTarget | null) => {
|
|
14
15
|
const node = target as HTMLElement | null;
|
|
15
16
|
if (!node) return false;
|
|
16
17
|
return Boolean(
|
|
@@ -92,7 +93,7 @@ export function useHotkey({
|
|
|
92
93
|
if (!enabled || !combo) return;
|
|
93
94
|
|
|
94
95
|
const onKeyDown = (event: KeyboardEvent) => {
|
|
95
|
-
if (event.repeat ||
|
|
96
|
+
if (event.repeat || capturesKeys(event.target)) return;
|
|
96
97
|
if (comboOf(event) !== combo) return;
|
|
97
98
|
|
|
98
99
|
event.preventDefault();
|
package/lib/live/live.schema.ts
CHANGED
|
@@ -3,9 +3,6 @@ import { z } from "zod";
|
|
|
3
3
|
export const LIVE_MODEL = "gpt-live-1";
|
|
4
4
|
export const LIVE_BACKEND_MODEL = "gpt-5.6-luna";
|
|
5
5
|
|
|
6
|
-
/** Provider maxima for the startup `input`: how many messages, and their combined tokens. */
|
|
7
|
-
export const LIVE_INPUT = { messages: 128, tokens: 8_192 };
|
|
8
|
-
|
|
9
6
|
/** Flat function declaration accepted by Responses delegation. */
|
|
10
7
|
export type ToolManifest = {
|
|
11
8
|
name: string;
|
|
@@ -21,24 +18,6 @@ export const LiveFragmentSchema = z.object({
|
|
|
21
18
|
});
|
|
22
19
|
export type LiveFragment = z.infer<typeof LiveFragmentSchema>;
|
|
23
20
|
|
|
24
|
-
/** Earlier conversation seeded at startup. Live has no system role here; a trusted note is a developer message. */
|
|
25
|
-
export type LiveInput =
|
|
26
|
-
| {
|
|
27
|
-
type: "message";
|
|
28
|
-
role: "developer";
|
|
29
|
-
content: [{ type: "input_text"; text: string }];
|
|
30
|
-
}
|
|
31
|
-
| {
|
|
32
|
-
type: "message";
|
|
33
|
-
role: "user";
|
|
34
|
-
content: [{ type: "input_text"; text: string }];
|
|
35
|
-
}
|
|
36
|
-
| {
|
|
37
|
-
type: "message";
|
|
38
|
-
role: "assistant";
|
|
39
|
-
content: [{ type: "output_text"; text: string }];
|
|
40
|
-
};
|
|
41
|
-
|
|
42
21
|
/** What `session.closed` confirmed: the provider's reason and the active seconds billed. */
|
|
43
22
|
export const LiveCloseSchema = z.object({
|
|
44
23
|
reason: z.string().max(128),
|
package/lib/live/live.server.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
import { LIVE_CALL } from "@/config";
|
|
3
3
|
import { logger } from "@/lib/logger";
|
|
4
4
|
import { publicError } from "@/lib/public-error";
|
|
5
|
-
import { LIVE_MODEL, type
|
|
5
|
+
import { LIVE_MODEL, type ToolManifest } from "./live.schema";
|
|
6
6
|
|
|
7
7
|
const LiveConnectionSchema = z.object({
|
|
8
8
|
session: z.object({ id: z.string().min(1) }),
|
|
@@ -79,7 +79,6 @@ export async function createLiveCall(options: {
|
|
|
79
79
|
sdp: string;
|
|
80
80
|
voice: string;
|
|
81
81
|
instructions: string;
|
|
82
|
-
input: LiveInput[];
|
|
83
82
|
backend: {
|
|
84
83
|
model: string;
|
|
85
84
|
instructions: string;
|
|
@@ -100,7 +99,6 @@ export async function createLiveCall(options: {
|
|
|
100
99
|
session: {
|
|
101
100
|
model: LIVE_MODEL,
|
|
102
101
|
instructions: options.instructions,
|
|
103
|
-
input: options.input,
|
|
104
102
|
audio: { output: { voice: options.voice } },
|
|
105
103
|
store: false,
|
|
106
104
|
delegation: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
2
|
import { test } from "node:test";
|
|
3
3
|
import { decodePagePath, decodePath, queryKey } from "../app/api/query-key.ts";
|
|
4
|
+
import { opensOnFinish, pathsIn } from "../features/workspace/file-kind.ts";
|
|
5
|
+
|
|
6
|
+
test("a finished job opens only a page among the finished work, never a data file or a bot's own", () => {
|
|
7
|
+
const report =
|
|
8
|
+
"Signed in and saved to bots/Mail/.auth/gmail.json. Notes in bots/Mail/memory/inbox.md, raw rows in artifacts/Mail/rows.json, slides in artifacts/Insta/slide_1.png, and the summary is artifacts/Mail/summary.md.";
|
|
9
|
+
assert.equal(
|
|
10
|
+
pathsIn(report).find(opensOnFinish),
|
|
11
|
+
"artifacts/Mail/summary.md",
|
|
12
|
+
);
|
|
13
|
+
assert.equal(opensOnFinish("artifacts/Analyst/report.html"), true);
|
|
14
|
+
assert.equal(opensOnFinish("artifacts/Analyst/data.csv"), false);
|
|
15
|
+
assert.equal(opensOnFinish("scratch/job/draft.md"), false);
|
|
16
|
+
});
|
|
4
17
|
|
|
5
18
|
test("viewer URLs round-trip Unicode, spaces and reserved filename characters", () => {
|
|
6
19
|
const paths = [
|
|
@@ -547,29 +547,20 @@ function captureFetch() {
|
|
|
547
547
|
return requests;
|
|
548
548
|
}
|
|
549
549
|
|
|
550
|
-
test("startup sends voice and backend apart, seeds history, and keeps the key on the server", async () => {
|
|
550
|
+
test("startup sends voice and backend apart, seeds no history, and keeps the key on the server", async () => {
|
|
551
551
|
const requests = captureFetch();
|
|
552
|
-
const input = [
|
|
553
|
-
{
|
|
554
|
-
type: "message" as const,
|
|
555
|
-
role: "user" as const,
|
|
556
|
-
content: [{ type: "input_text" as const, text: "Book the dentist." }] as [
|
|
557
|
-
{ type: "input_text"; text: string },
|
|
558
|
-
],
|
|
559
|
-
},
|
|
560
|
-
];
|
|
561
552
|
const connection = await createLiveCall({
|
|
562
553
|
apiKey: "test-key",
|
|
563
554
|
sdp: "offer",
|
|
564
555
|
voice: "marin",
|
|
565
556
|
instructions: "Conversation only",
|
|
566
|
-
input,
|
|
567
557
|
backend: backend(),
|
|
568
558
|
});
|
|
569
559
|
const [request] = requests;
|
|
570
560
|
assert.equal(request.session.model, "gpt-live-1");
|
|
571
561
|
assert.equal(request.session.instructions, "Conversation only");
|
|
572
|
-
|
|
562
|
+
// Earlier calls are the backend's to read; the voice opens on nothing but its instructions
|
|
563
|
+
assert.equal("input" in request.session, false);
|
|
573
564
|
assert.equal(request.session.audio.output.voice, "marin");
|
|
574
565
|
assert.equal(request.session.store, false);
|
|
575
566
|
assert.equal(request.session.delegation.type, "responses");
|
|
@@ -595,7 +586,6 @@ test("reasoning and web search are sent only when given", async () => {
|
|
|
595
586
|
sdp: "offer",
|
|
596
587
|
voice: "cedar",
|
|
597
588
|
instructions: "Talk",
|
|
598
|
-
input: [],
|
|
599
589
|
backend: backend({
|
|
600
590
|
model: "gpt-4.1",
|
|
601
591
|
reasoning: { effort: "low", summary: "auto" },
|
|
@@ -621,7 +611,6 @@ test("a provider refusal reaches the caller unchanged", async () => {
|
|
|
621
611
|
sdp: "offer",
|
|
622
612
|
voice: "marin",
|
|
623
613
|
instructions: "Talk",
|
|
624
|
-
input: [],
|
|
625
614
|
backend: backend(),
|
|
626
615
|
}),
|
|
627
616
|
/This project cannot access gpt-live-1/,
|
|
@@ -748,13 +737,15 @@ test("stored settings keep OpenAI choices and the shared instruction, drop a Gro
|
|
|
748
737
|
assert.deepEqual(migrateLiveSettings(null), LIVE_DEFAULTS);
|
|
749
738
|
});
|
|
750
739
|
|
|
751
|
-
test("both call prompts open as one Thursday: the voice gets
|
|
740
|
+
test("both call prompts open as one Thursday: the voice gets a two-line delegation policy and memory and no earlier calls, the backend asks before handing work over, and every call has an opening", async () => {
|
|
752
741
|
let profileFacts = 200;
|
|
742
|
+
let samFacts = 2;
|
|
753
743
|
const botMock = mock.module("../features/bot/bot.query.ts", {
|
|
754
744
|
namedExports: {
|
|
755
745
|
listJobBots: async () => [
|
|
756
746
|
{ name: "Scout", description: "Finds things out on the web" },
|
|
757
747
|
],
|
|
748
|
+
readBotMemoryOn: async () => true,
|
|
758
749
|
},
|
|
759
750
|
});
|
|
760
751
|
const skillsMock = mock.module("../features/skills/skills.discover.ts", {
|
|
@@ -796,7 +787,7 @@ test("both call prompts open as one Thursday: the voice gets the delegation poli
|
|
|
796
787
|
path: "people/sam",
|
|
797
788
|
description: "Their brother",
|
|
798
789
|
aliases: ["Sam"],
|
|
799
|
-
factCount:
|
|
790
|
+
factCount: samFacts,
|
|
800
791
|
lastSeenAt: new Date(),
|
|
801
792
|
},
|
|
802
793
|
],
|
|
@@ -812,9 +803,6 @@ test("both call prompts open as one Thursday: the voice gets the delegation poli
|
|
|
812
803
|
{ role: "user", tool: null, text: "Book the dentist.", seq: 1 },
|
|
813
804
|
{ role: "tool", tool: "delegate", text: '{"bot":"Scout"}', seq: 2 },
|
|
814
805
|
{ role: "assistant", tool: null, text: "Scout has it.", seq: 3 },
|
|
815
|
-
// The call ended on the user's words: they must not reach the next call as a waiting turn
|
|
816
|
-
{ role: "user", tool: null, text: "Hang up.", seq: 4 },
|
|
817
|
-
{ role: "tool", tool: "end_call", text: "{}", seq: 5 },
|
|
818
806
|
],
|
|
819
807
|
},
|
|
820
808
|
],
|
|
@@ -833,60 +821,67 @@ test("both call prompts open as one Thursday: the voice gets the delegation poli
|
|
|
833
821
|
);
|
|
834
822
|
const on = await loadLivePrompt({
|
|
835
823
|
voicePrompt: "Use a calm voice.",
|
|
836
|
-
webSearch: false,
|
|
837
824
|
locale: "ko-KR",
|
|
838
825
|
});
|
|
839
826
|
assert.match(on.text, /modeled on Friday, the AI in \*Iron Man\*/);
|
|
840
827
|
assert.match(on.text, /Prefer brief replies/);
|
|
841
828
|
assert.match(
|
|
842
829
|
on.text,
|
|
843
|
-
/\n\nBackchannel policy: Use moderate backchannels\. .*\n\nInterruption policy: Stop speaking when the user interrupts\. Listen to what they say\.\n\nDelegation policy:\
|
|
830
|
+
/\n\n## Always\n\nIMPORTANT — always follow this: [^\n]+\n\nBackchannel policy: Use moderate backchannels\. .*\n\nInterruption policy: Stop speaking when the user interrupts\. Listen to what they say\.\n\nDelegation policy:\nDelegate to the backend everything [^\n]+\nWhatever they tell you about themselves[^\n]+unless it is already written below\.\nAnswer from what the backend returns[^\n]+\n\n## What you know about them\n/,
|
|
844
831
|
);
|
|
832
|
+
// Only the ending rule carries the stamp
|
|
833
|
+
assert.equal(on.text.split("IMPORTANT").length, 2);
|
|
845
834
|
assert.match(
|
|
846
835
|
on.text,
|
|
847
836
|
/When the user speaks at length, acknowledge now and then/,
|
|
848
837
|
);
|
|
849
|
-
|
|
850
|
-
assert.
|
|
851
|
-
|
|
838
|
+
// What the backend can do, and when to hand over, are no longer the voice's to read
|
|
839
|
+
assert.equal(
|
|
840
|
+
/Backend tools|Delegate to the backend when|What bots can reach for|- Web:/.test(
|
|
841
|
+
on.text,
|
|
842
|
+
),
|
|
843
|
+
false,
|
|
844
|
+
);
|
|
852
845
|
assert.match(on.text, /- people\/sam — Their brother \(2\) "Sam"/);
|
|
846
|
+
assert.match(on.text, /What is in these notes, the backend recalls\./);
|
|
853
847
|
// The roster, threads and earlier calls are the backend's to read
|
|
854
848
|
assert.equal(on.text.includes("Scout"), false);
|
|
855
849
|
assert.equal(
|
|
856
|
-
/thread|\bseen\b|## Earlier calls|works beside you/.test(on.text),
|
|
850
|
+
/thread|\bseen\b|## Earlier calls|dentist|works beside you/.test(on.text),
|
|
857
851
|
false,
|
|
858
852
|
);
|
|
853
|
+
assert.equal("input" in on, false);
|
|
859
854
|
assert.equal(
|
|
860
855
|
/ko-KR|browser's setting|language they use/.test(on.text),
|
|
861
856
|
false,
|
|
862
857
|
);
|
|
863
|
-
assert.equal(on.text
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
false,
|
|
867
|
-
);
|
|
868
|
-
assert.equal(on.text.endsWith("Use a calm voice."), true);
|
|
869
|
-
const [boundary, ...spoken] = on.input;
|
|
870
|
-
assert.equal(boundary?.role, "developer");
|
|
858
|
+
assert.equal(/memory_|generate_|load_skill|`/.test(on.text), false);
|
|
859
|
+
// The one tool name the voice holds: the ending rule, where it makes ending a thing to do
|
|
860
|
+
assert.equal(on.text.split("end_call").length, 2);
|
|
871
861
|
assert.match(
|
|
872
|
-
|
|
873
|
-
/
|
|
862
|
+
on.text,
|
|
863
|
+
/immediately, without thinking, use the end_call tool\./,
|
|
874
864
|
);
|
|
865
|
+
assert.equal(on.text.endsWith("Use a calm voice."), true);
|
|
866
|
+
assert.match(on.opening, /The call has just started/);
|
|
875
867
|
|
|
876
868
|
// One Thursday: the backend opens with the voice's own words and is never told it is a part
|
|
877
869
|
const backend = await loadThursdayPrompt(null);
|
|
878
870
|
const withoutClock = (text: string) =>
|
|
879
871
|
text.replace(/\*\*Now\*\*: [^\n]+/, "");
|
|
880
|
-
const identity = on.text.slice(
|
|
881
|
-
|
|
882
|
-
on.text.indexOf("\n\nBackchannel policy:"),
|
|
883
|
-
);
|
|
872
|
+
const identity = on.text.slice(0, on.text.indexOf("\n\n## Always"));
|
|
873
|
+
const ending = /IMPORTANT — always follow this: [^\n]+/.exec(on.text)?.[0];
|
|
884
874
|
assert.equal(
|
|
885
|
-
withoutClock(backend).startsWith(
|
|
875
|
+
withoutClock(backend).startsWith(
|
|
876
|
+
`${withoutClock(identity)}\n\n${ending}\n\n`,
|
|
877
|
+
),
|
|
886
878
|
true,
|
|
887
879
|
);
|
|
880
|
+
assert.match(
|
|
881
|
+
backend,
|
|
882
|
+
/\*\*Keep memory clean as you write\.\*\* A fact that repeats, narrows or changes one already in the note replaces it/,
|
|
883
|
+
);
|
|
888
884
|
for (const heading of [
|
|
889
|
-
"## Voice conversation context",
|
|
890
885
|
"## Memory",
|
|
891
886
|
"## Background work",
|
|
892
887
|
"## This computer",
|
|
@@ -894,33 +889,29 @@ test("both call prompts open as one Thursday: the voice gets the delegation poli
|
|
|
894
889
|
"## Earlier calls",
|
|
895
890
|
])
|
|
896
891
|
assert.equal(backend.includes(`\n${heading}\n`), true, heading);
|
|
892
|
+
assert.equal(backend.includes("## Voice conversation context"), false);
|
|
897
893
|
assert.equal(/backend of Thursday|voice model/.test(backend), false);
|
|
898
|
-
|
|
899
|
-
assert.
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
assert.match(
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
locale: null,
|
|
917
|
-
});
|
|
918
|
-
assert.equal(searching.input.length, 3);
|
|
919
|
-
assert.match(searching.text, /- Web: look things up\./);
|
|
920
|
-
assert.match(searching.opening, /The call has just started/);
|
|
894
|
+
// The end_call name sits in the ending rule only
|
|
895
|
+
assert.equal(backend.split("end_call").length, 2);
|
|
896
|
+
assert.match(backend, /\*\*Ask once before handing work over\.\*\*/);
|
|
897
|
+
assert.match(backend, /Each bot keeps its own memory from job to job/);
|
|
898
|
+
assert.match(backend, /they come from bots, not the user/);
|
|
899
|
+
assert.match(backend, /Book the dentist\./);
|
|
900
|
+
assert.equal(backend.includes("grown past what it holds well"), false);
|
|
901
|
+
|
|
902
|
+
// Tidying memory is the backend's: the voice neither reads it nor opens with it
|
|
903
|
+
samFacts = 60;
|
|
904
|
+
const heavy = await loadLivePrompt({ locale: null });
|
|
905
|
+
assert.equal(/tidying|grown past/.test(heavy.text), false);
|
|
906
|
+
assert.match(heavy.opening, /The call has just started/);
|
|
907
|
+
assert.match(
|
|
908
|
+
await loadThursdayPrompt(null),
|
|
909
|
+
/grown past what it holds well \(people\/sam\): say so once in what you return/,
|
|
910
|
+
);
|
|
911
|
+
samFacts = 2;
|
|
921
912
|
|
|
922
913
|
profileFacts = 0;
|
|
923
|
-
const first = await loadLivePrompt({
|
|
914
|
+
const first = await loadLivePrompt({ locale: "ko-KR" });
|
|
924
915
|
assert.match(first.text, /## First call/);
|
|
925
916
|
// The one call that opens with nothing: she says who she is, then learns who they are
|
|
926
917
|
assert.match(first.opening ?? "", /say who you are/);
|
|
@@ -930,7 +921,6 @@ test("both call prompts open as one Thursday: the voice gets the delegation poli
|
|
|
930
921
|
|
|
931
922
|
// A call the page placed says so, ahead of even the first-call opening
|
|
932
923
|
const rung = await loadLivePrompt({
|
|
933
|
-
webSearch: false,
|
|
934
924
|
locale: "ko-KR",
|
|
935
925
|
calledBack: true,
|
|
936
926
|
});
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
module.exports=[874533,(e,t,i)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},666680,(e,t,i)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},912714,(e,t,i)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},265143,e=>e.a(async(t,i)=>{try{var a=e.i(875225),o=e.i(518899),n=e.i(528790),r=e.i(613240),l=e.i(340698);e.i(786025);var s=e.i(944971),c=t([n,l]);[n,l]=c.then?(await c)():c;let T=e=>({name:e.name,description:e.description,systemPrompt:e.systemPrompt,icon:e.icon,provider:e.provider,model:e.model,disabled:e.disabled,compactAt:e.compactAt});async function m(){let e=await n.database.select().from(r.botTable).orderBy(r.botTable.createdAt);return e.length?e.filter(e=>!e.disabled).map(T):[s.DEFAULT_BOT]}async function d(e){let t=await f(e);if(t)return T(t);let i=e.trim().toLowerCase(),[l]=await n.database.select().from(r.botTable).where((0,a.eq)(o.sql`lower(${r.botTable.name})`,i));return l?T(l):s.DEFAULT_BOT.name.toLowerCase()===i?s.DEFAULT_BOT:null}async function u(){let[e,t,i]=await Promise.all([n.database.select().from(r.botTable).orderBy(r.botTable.createdAt),n.database.select({botName:r.botMcpToolTable.botName,id:r.mcpToolTable.id,name:r.mcpToolTable.name,serverName:r.mcpToolTable.serverName}).from(r.botMcpToolTable).innerJoin(r.mcpToolTable,(0,a.eq)(r.botMcpToolTable.toolId,r.mcpToolTable.id)),n.database.select({bot:r.threadTable.bot,input:o.sql`coalesce(sum(${r.threadTable.inputTokens}), 0)`,output:o.sql`coalesce(sum(${r.threadTable.outputTokens}), 0)`,lastJobAt:o.sql`max(${r.threadTable.updatedAt})`}).from(r.threadTable).groupBy(r.threadTable.bot)]),l=new Map;for(let{botName:e,...i}of t){let t=l.get(e)??[];t.push(i),l.set(e,t)}let s=new Map(i.map(e=>[e.bot,{input:Number(e.input),output:Number(e.output)}])),c=new Map(i.flatMap(e=>null==e.lastJobAt?[]:[[e.bot,new Date(1e3*Number(e.lastJobAt))]]));return e.map(e=>({...e,tools:l.get(e.name)??[],tokens:s.get(e.name)??{input:0,output:0},lastJobAt:c.get(e.name)??null}))}async function p(){return(0,s.isBotMemoryOn)(await (0,l.readConfig)(s.BOT_MEMORY_KEY))}async function f(e){let[t]=await n.database.select().from(r.botTable).where((0,a.eq)(r.botTable.name,e));return t??null}async function w(){let e=await n.database.select({name:r.botTable.name}).from(r.botTable);return[...new Set([...e.map(e=>e.name),s.DEFAULT_BOT.name])]}e.s(["findAllBots",0,u,"findJobBot",0,d,"listBotNames",0,w,"listJobBots",0,m,"readBotMemoryOn",0,p]),i()}catch(e){i(e)}},!1),629668,e=>{"use strict";var t=e.i(687388);let i=e=>`text/${e}; charset=utf-8`,a={md:{kind:"markdown",mime:i("markdown")},markdown:{kind:"markdown",mime:i("markdown")},csv:{kind:"csv",mime:i("csv")},json:{kind:"json",mime:"application/json; charset=utf-8"},txt:{kind:"text",mime:i("plain")},log:{kind:"text",mime:i("plain")},html:{kind:"frame",mime:i("html")},htm:{kind:"frame",mime:i("html")},pdf:{kind:"frame",mime:"application/pdf"},png:{kind:"image",mime:"image/png"},jpg:{kind:"image",mime:"image/jpeg"},jpeg:{kind:"image",mime:"image/jpeg"},gif:{kind:"image",mime:"image/gif"},webp:{kind:"image",mime:"image/webp"},svg:{kind:"image",mime:"image/svg+xml"},mp3:{kind:"audio",mime:"audio/mpeg"},wav:{kind:"audio",mime:"audio/wav"},mp4:{kind:"video",mime:"video/mp4"},webm:{kind:"video",mime:"video/webm"},css:{kind:"none",mime:i("css")},js:{kind:"none",mime:i("javascript")},woff2:{kind:"none",mime:"font/woff2"}},o=e=>e.split(".").pop()?.toLowerCase()??"",n=new Set(["node_modules","__pycache__"]),r=Object.entries(a).filter(([,e])=>"none"!==e.kind).map(([e])=>e),l=RegExp(String.raw`(?<![\p{L}\p{N}_/:@%-])(?:[\p{L}\p{N}_.@%-]+/)*[\p{L}\p{N}_@%-]+(?:\.[\p{L}\p{N}_-]+)*\.(?:${r.join("|")})\b`,"giu"),s=`${t.PATHS.workspace}/`;e.s(["isListedFolder",0,e=>!e.startsWith(".")&&!n.has(e),"mimeOf",0,e=>a[o(e)]?.mime??"application/octet-stream","pathsIn",0,function(e){let t=e.replace(/\b[a-z][\w+.-]*:\/\/\S+/gi," "),i=new Set;for(let e of t.match(l)??[]){let t=function(e){let t,i,a=(i=(t=e.trim()).indexOf(s))>=0?t.slice(i+s.length)||null:t.startsWith("/")||/^[A-Za-z]:/.test(t)||t.split("/").includes("..")?null:t||null;if(!a)return null;let[o,...n]=a.split("/");return n.length&&o.includes(".")?null:a}(e);t&&i.add(t)}return[...i].slice(0,6)},"viewKindOf",0,e=>a[o(e)]?.kind??"none"])},786025,e=>{"use strict";var t=e.i(666680),i=e.i(902157),a=e.i(912714),o=e.i(750227),n=e.i(687388);e.i(640911);var r=e.i(874533),l=n;let s=new Set(["node_modules",".git",".next","dist","build",".venv","__pycache__",".turbo","coverage"]);async function*c(e){let t;try{t=await (0,a.readdir)(e,{withFileTypes:!0})}catch{return}for(let i of t){if(s.has(i.name)||i.name.startsWith("."))continue;let t=(0,o.join)(e,i.name);i.isDirectory()?yield*c(t):i.isFile()&&(yield t)}}async function m(e,t,i,n){if(e.length<=n.max)return e;let r=(0,o.join)(i,n.dir),l=(0,o.join)(r,`${new Date().toISOString().replace(/[:.]/g,"-")}-${t.replace(/[^a-zA-Z0-9_-]+/g,"_")}.txt`),s=l;try{await (0,a.mkdir)(r,{recursive:!0}),await (0,a.writeFile)(l,e),s=(0,o.relative)(i,l)||l}catch{s="(could not be written to a file)"}let c=(e.match(/\n/g)?.length??0)+1;return`${e.slice(0,n.head).trimEnd()}
|
|
2
|
-
|
|
3
|
-
[${t} cut at ${n.max.toLocaleString("en")} chars — the whole thing (${c} lines) is at ${s}. Read the part you need with \`sed -n\`.]
|
|
4
|
-
|
|
5
|
-
${e.slice(-n.tail).trimStart()}`}let d=n.APP_DIR,u=(0,o.join)(n.DATA_DIR,n.PATHS.workspace),p=(process.env.THURSDAY_TOOL_PATH?.split(":")??[(0,o.join)(d,"node_modules",".bin")]).filter(Boolean),f=(0,o.join)(u,n.PATHS.artifacts),w=[n.PATHS.artifacts,n.PATHS.projects,n.PATHS.scratch,n.PATHS.bots],T=new Set([...w,".agents"]),b=(e,t)=>t===e||t.startsWith(e+o.sep),h=e=>(0,a.realpath)(e).catch(()=>null);async function g(e){let t=await h(u)??u,i=(0,o.resolve)(u,e);if(!b(u,i))return null;let a=i,n=await h(a);for(;null===n&&(0,o.dirname)(a)!==a;)a=(0,o.dirname)(a),n=await h(a);if(null===n)return null;let r=(0,o.relative)(a,i),l=r?(0,o.join)(n,r):n;return b(t,l)?l:null}let S=e=>e.replace(/[^\p{L}\p{N}_-]+/gu,"-"),A=e=>`${n.PATHS.bots}/${S(e)}`,y=e=>`${n.PATHS.artifacts}/${S(e)}`;async function k(e){let t=A(e),i=y(e);return await Promise.all([t,i].map(e=>(0,a.mkdir)((0,o.join)(u,e),{recursive:!0}))),{own:t,artifacts:i}}async function v(e,t){let i,r=(i=t.trim().toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"").slice(0,40)||"job",`${n.PATHS.scratch}/${i}-${e.slice(0,6)}`);return await (0,a.mkdir)((0,o.join)(u,r),{recursive:!0}),r}let _=e=>e?{PLAYWRIGHT_CLI_SESSION:`thread-${e}`,PLAYWRIGHT_MCP_VIEWPORT_SIZE:n.BROWSER_VIEWPORT}:{},$={runtimes:["node","python3","uv","bun","deno"],managers:["pnpm","npm","yarn"]};async function P(e){let t=Object.values($).flat(),{stdout:i}=await e.exec(t.map(e=>`command -v ${e} >/dev/null 2>&1 && printf '%s ' ${e}`).join("; "),{timeoutMs:1e4}),a=new Set(i.trim().split(/\s+/).filter(Boolean)),o=e=>({found:e.filter(e=>a.has(e)),missing:e.filter(e=>!a.has(e))});return{runtimes:o($.runtimes),managers:o($.managers),browser:null}}async function E(){await x(),await O()}async function j(e){await L(e,!0)}async function L(e,t){let i=await H(),a=_(e),o=await i.exec("playwright-cli list --json",{env:a,timeoutMs:15e3}).catch(()=>null),n=[];try{let{browsers:e}=JSON.parse(o?.stdout??"");n=e?.filter(e=>e.name===a.PLAYWRIGHT_CLI_SESSION||e.name.startsWith(`${a.PLAYWRIGHT_CLI_SESSION}-`))??[]}catch{}for(let e of n)!e.attached&&(t||!1===e.headed)&&await i.exec("playwright-cli close",{env:{...a,PLAYWRIGHT_CLI_SESSION:e.name},timeoutMs:15e3}).catch(()=>{});await E()}let O=()=>I(n.PATHS.output),x=()=>I(".playwright-cli");async function I(e){let t=(0,o.join)(u,e),i=await (0,a.readdir)(t,{withFileTypes:!0}).catch(()=>[]),r=Date.now()-n.WORKSPACE_KEEP.forMs;for(let e of i){if(!e.isFile())continue;let i=(0,o.join)(t,e.name),n=await (0,a.stat)(i).catch(()=>null);n&&n.mtimeMs<r&&await (0,a.unlink)(i).catch(()=>{})}}let R={"pnpm-workspace.yaml":"packages:\n - '**'\n",".npmrc":"recursive-install=false\n"};async function H(){for(let e of w)await (0,a.mkdir)((0,o.join)(u,e),{recursive:!0});for(let[e,t]of Object.entries(R))await (0,a.writeFile)((0,o.join)(u,e),t,{flag:"wx"}).catch(()=>{});return(({workingDirectory:e,spill:t,toolPath:i})=>{let n=(0,o.resolve)(e),s=(i??[]).filter(Boolean).join(":"),d=e=>e.startsWith("/")||/^[A-Za-z]:/.test(e)?e:(0,o.resolve)(n,e);return{cwd:n,resolve:d,readFile:(e,t)=>(0,a.readFile)(d(e),t),async writeFile(e,t){let i=d(e);await (0,a.mkdir)((0,o.join)(i,".."),{recursive:!0}),await (0,a.writeFile)(i,t)},readdir:(e,t)=>(0,a.readdir)(d(e),t),fold:(e,i="output")=>m(e,i,n,t),async glob(e,{path:t=".",limit:i=200}={}){let a=d(t),n=RegExp("^"+e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*\//g,"(?:.*/)?").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]")+"$"),r=[];for await(let e of c(a)){let t=(0,o.relative)(a,e).split(o.sep).join("/");if((n.test(t)||n.test(e))&&r.push(e),r.length>=i)break}return r},exec:(e,{cwd:i,timeoutMs:a=l.EXEC_TIMEOUT_MS,signal:o,env:c}={})=>new Promise(u=>{let p,f,w=function(){let e={...process.env};for(let t of Object.keys(e))/KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|_AUTH/i.test(t)&&delete e[t];return e.TERM="dumb",e.PAGER="cat",e.GIT_PAGER="cat",e}();s&&(w.PATH=`${w.PATH??""}:${s}`);let T=(0,r.spawn)(e,{shell:!0,cwd:i?d(i):n,env:{...w,...c},detached:!0}),b="",h="";T.stdout?.on("data",e=>b+=e),T.stderr?.on("data",e=>h+=e);let g=e=>{try{T.pid&&process.kill(-T.pid,e)}catch{T.kill(e)}},S=!1,A=async e=>{S||(S=!0,clearTimeout(k),clearTimeout(p),clearTimeout(f),o?.removeEventListener("abort",v),u({...e,stdout:await m(e.stdout,"stdout",n,t),stderr:await m(e.stderr,"stderr",n,t)}))},y=e=>{p||S||(h+=`
|
|
6
|
-
[${e}]`,g("SIGTERM"),p=setTimeout(()=>{h+="\n[Killed: it did not exit on SIGTERM]",g("SIGKILL"),f=setTimeout(()=>{T.stdout?.destroy(),T.stderr?.destroy(),A({stdout:b,stderr:h,exitCode:-1})},1e3)},l.EXEC_KILL_GRACE_MS))},k=setTimeout(()=>y(`Timed out after ${a}ms`),a),v=()=>y("Aborted");o?.aborted?v():o?.addEventListener("abort",v,{once:!0}),T.on("close",e=>A({stdout:b,stderr:h,exitCode:e??-1})),T.on("error",e=>A({stdout:b,stderr:h+String(e),exitCode:-1}))})}})({workingDirectory:u,spill:{dir:n.PATHS.output,...n.TOOL_OUTPUT},toolPath:p})}async function M(e,t){let i=e.map(e=>(0,o.resolve)(u,e));if(t){let e=0;for await(let a of c((0,o.join)(u,t)))if(i.push(a),(e+=1)>=500)break}let n=new Map;for(let e of i){let t=await (0,a.stat)(e).catch(()=>null);if(!t?.isFile())continue;let i=(0,o.relative)(u,e);n.set(i&&!i.startsWith("..")?i:e,t.mtimeMs)}return[...n].sort((e,t)=>e[1]-t[1]).map(([e])=>e)}e.s(["ARTIFACTS",0,f,"WORKSPACE",0,u,"botArtifacts",0,y,"botBrowserSession",0,(e,i)=>`${e}-bot-${(0,t.createHash)("sha256").update(i.trim().toLowerCase()).digest("hex").slice(0,20)}`,"botFolder",0,A,"botFolderName",0,S,"botShellEnv",0,e=>({THURSDAY_ARTIFACTS:y(e)}),"closeJobShell",0,j,"filesOnDisk",0,M,"insideWorkspace",0,g,"jobShellEnv",0,_,"openBotFolders",0,k,"openJobScratch",0,v,"openWorkspace",0,H,"readMachineTools",0,P,"writeRefusal",0,function(e,t){if(b(u,e)){let a=(0,o.relative)(u,e),[r,l]=a.split(o.sep);return r&&T.has(r)?t&&r===n.PATHS.artifacts&&l&&l.toLowerCase()!==S(t).toLowerCase()&&!(0,i.existsSync)((0,o.join)(f,l))?`Not written: ${a} would sit loose at the top of ${n.PATHS.artifacts}/. Your finished work goes in ${y(t)}/.`:null:`Not written: ${a||"the workspace root"} is outside the workspace's folders. Finished work goes under ${t?y(t):n.PATHS.artifacts}/, code under ${n.PATHS.projects}/, your own kit under ${n.PATHS.bots}/, and this job's working material under ${n.PATHS.scratch}/.`}return b(d,e)?`Not written: ${e} is inside the app that is running you, not the user's files. Work in ${u}; outside it, write only where the user pointed you.`:null}],786025)}];
|
|
7
|
-
|
|
8
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__0g-ueei._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[329280,e=>{e.v(s=>Promise.all(["server/chunks/[externals]_node_readline_1u65a-m._.js","server/chunks/node_modules_consola_dist_chunks_prompt_mjs_02axwqv._.js"].map(s=>e.l(s))).then(()=>s(781937)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=node_modules_consola_dist_chunks_prompt_mjs_1kipdeo._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[750227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},59639,(a,b,c)=>{b.exports=a.x("node:process",()=>require("node:process"))},287702,a=>{"use strict";process.env.THURSDAY_APP_DIR?.trim()||process.cwd(),process.env.THURSDAY_HOME?.trim()||process.cwd(),process.env.THURSDAY_URL?.trim()||process.env.PORT?.trim();let b=".ai-workspace",c={workspace:b,artifacts:"artifacts",projects:"projects",scratch:"scratch",bots:"bots",output:".output",skills:{default:"skills",custom:`${b}/.agents/skills`}};a.s(["APP_NAME",0,"Thursday","ARTIFACT_VIEW",0,{rows:200,setFiles:120},"ASCII_FACE",0,{charset:"emojiOnly",fontSize:{default:8,min:4,max:16},density:{default:1.4,min:.6,max:2}},"BOT_RUN",0,{steps:100,compactAt:5e5,compactHeadroom:.8,summaryWords:{min:600,max:3e3,perTokens:200},participants:12,concurrent:4,turns:120,queuedMessages:200,silenceMs:3e5,overflowShrink:.6,retryMs:1e4,compactFiles:40},"BROWSER_SKILL",0,"browser","CALL_END",0,{quietMs:600,unsaidMs:2e3,maxMs:8e3},"CALL_HISTORY_PAGE",0,10,"CALL_IDLE",0,{hangUpMs:3e4,graceMs:15e3,warnMs:1e4,agentSilentMs:3e4},"CALL_RELAY",0,{quietMs:7e3,perTurn:3,readMs:15e3},"IS_DEV",0,!1,"LIVE_CALL",0,{startupMs:3e4,closeMs:15e3,transcriptGapMs:1500,transcriptSaveMs:500,appendMs:15e3,backendOutputTokens:4096,reasoningCheckMs:5e3},"PAGE_SIZE",0,50,"PATHS",0,c,"PROMPT_CROWDED",0,{bots:10,skills:20},"ROOM_KEEP_READ_MS",0,6e5,"STUDIO_SERVER",0,"studio","WORKSPACE_VIEW",0,{rows:200,textMax:524288,elementMax:0x3200000}])},992025,a=>{a.v(a=>Promise.resolve().then(()=>a(948986)))},929490,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0exkwcm._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-SVP7TREG_mjs_03r5m21._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0lct0v1._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js"].map(b=>a.l(b))).then(()=>b(161868)))},969267,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_1g1eihe._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_1feyqvf._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js","server/chunks/ssr/node_modules_cytoscape_dist_cytoscape_esm_mjs_0arohj6._.js","server/chunks/ssr/node_modules_11trqmi._.js"].map(b=>a.l(b))).then(()=>b(626047)))},784520,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0qwth-_._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_blockDiagram-I7D4REHJ_mjs_0qg1lr5._.js"].map(b=>a.l(b))).then(()=>b(155638)))},613707,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-F27PBJKO_mjs_0ms0zmb._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_c4Diagram-7LVT6UL2_mjs_06bhe3-._.js"].map(b=>a.l(b))).then(()=>b(557384)))},53467,a=>{"use strict";var b=a.i(261234),c=a.i(539110);a.i(975930);var d=a.i(671731),e=(0,c.__name)(a=>{let{securityLevel:c}=(0,b.getConfig2)(),e=(0,d.select)("body");if("sandbox"===c){let b=(0,d.select)(`#i${a}`),c=b.node()?.contentDocument??document;e=(0,d.select)(c.body)}return e.select(`#${a}`)},"selectSvgElement");a.s(["selectSvgElement",0,e])},882458,a=>{"use strict";var b=a.i(416635),c=a.i(43429),d=a.i(428212),e=a.i(916573),f=a.i(887370),g=a.i(261234),h=a.i(875117),i=a.i(539110),j={common:g.common_default,getConfig:g.getConfig,insertCluster:b.insertCluster,insertEdge:c.insertEdge,insertEdgeLabel:c.insertEdgeLabel,insertMarkers:c.markers_default,insertNode:d.insertNode,interpolateToCurve:f.interpolateToCurve,labelHelper:e.labelHelper,log:h.log,positionEdgeLabel:c.positionEdgeLabel},k={},l=(0,i.__name)(a=>{for(let b of a)k[b.name]=b},"registerLayoutLoaders");(0,i.__name)(()=>{l([{name:"dagre",loader:(0,i.__name)(async()=>await a.A(390118),"loader")},{name:"swimlane",loader:(0,i.__name)(async()=>await a.A(860094),"loader")},{name:"cose-bilkent",loader:(0,i.__name)(async()=>await a.A(989520),"loader")}])},"registerDefaultLayoutLoaders")();var m=(0,i.__name)(async(a,b)=>{if(!(a.layoutAlgorithm in k))throw Error(`Unknown layout algorithm: ${a.layoutAlgorithm}`);if(a.diagramId)for(let b of a.nodes){let c=b.domId||b.id;b.domId=`${a.diagramId}-${c}`}let c=k[a.layoutAlgorithm],d=await c.loader(),{theme:e,themeVariables:f}=a.config,{useGradient:g,gradientStart:h,gradientStop:i}=f,l=b.attr("id");if(b.append("defs").append("filter").attr("id",`${l}-drop-shadow`).attr("height","130%").attr("width","130%").append("feDropShadow").attr("dx","4").attr("dy","4").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",`${e?.includes("dark")?"#FFFFFF":"#000000"}`),b.append("defs").append("filter").attr("id",`${l}-drop-shadow-small`).attr("height","150%").attr("width","150%").append("feDropShadow").attr("dx","2").attr("dy","2").attr("stdDeviation",0).attr("flood-opacity","0.06").attr("flood-color",`${e?.includes("dark")?"#FFFFFF":"#000000"}`),g){let a=b.append("linearGradient").attr("id",b.attr("id")+"-gradient").attr("gradientUnits","objectBoundingBox").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");a.append("svg:stop").attr("offset","0%").attr("stop-color",h).attr("stop-opacity",1),a.append("svg:stop").attr("offset","100%").attr("stop-color",i).attr("stop-opacity",1)}return d.render(a,b,j,{algorithm:c.algorithm})},"render"),n=(0,i.__name)((a="",{fallback:b="dagre"}={})=>{if(a in k)return a;if(b in k)return h.log.warn(`Layout algorithm ${a} is not registered. Using ${b} as fallback.`),b;throw Error(`Both layout algorithms ${a} and ${b} are not registered.`)},"getRegisteredLayoutAlgorithm");a.s(["getRegisteredLayoutAlgorithm",0,n,"registerLayoutLoaders",0,l,"render",0,m])},854712,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_1v463pe._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-TICWLB2K_mjs_1t97mh7._.js"].map(b=>a.l(b))).then(()=>b(336243)))},892569,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_0thh8pk._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-TICWLB2K_mjs_1t97mh7._.js"].map(b=>a.l(b))).then(()=>b(538994)))},989520,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_1nl12mt._.js","server/chunks/ssr/node_modules_cytoscape_dist_cytoscape_esm_mjs_0arohj6._.js"].map(b=>a.l(b))).then(()=>b(127273)))},388833,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0qbfyjh._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_18pinup._.js"].map(b=>a.l(b))).then(()=>b(517237)))},390118,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_dagre-GXQ25YYZ_mjs_0k_lz8d._.js","server/chunks/ssr/node_modules_dagre-d3-es_src_dagre_index_0g66msq.js"].map(b=>a.l(b))).then(()=>b(920028)))},831868,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_1gu1pph._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0eji647._.js"].map(b=>a.l(b))).then(()=>b(767190)))},840309,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_04vxchl._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_18pinup._.js"].map(b=>a.l(b))).then(()=>b(464445)))},835410,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0746rzi._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_18pinup._.js"].map(b=>a.l(b))).then(()=>b(617803)))},728413,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_1gpednh._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_diagram-VX7I27RA_mjs_0dl8gzm._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_13hksv_._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js"].map(b=>a.l(b))).then(()=>b(217755)))},992149,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_1d53yiq._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_18pinup._.js"].map(b=>a.l(b))).then(()=>b(752425)))},70220,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_1xn6saw._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-SVP7TREG_mjs_03r5m21._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0lct0v1._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js"].map(b=>a.l(b))).then(()=>b(137554)))},595386,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0il0v7d._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_erDiagram-RLTQ6QDP_mjs_18g60i7._.js"].map(b=>a.l(b))).then(()=>b(239909)))},707604,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0ql0igl._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-SHT3W25Y_mjs_00p5j42._.js"].map(b=>a.l(b))).then(()=>b(1258)))},598518,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_1831lye._.js","server/chunks/ssr/node_modules_1_d0q_7._.js"].map(b=>a.l(b))).then(()=>b(722966)))},126571,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0vv0-fg._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0dlpxwr._.js","server/chunks/ssr/1q96_modules_mermaid_dist_chunks_mermaid_core_gitGraphDiagram-WWUBYQGX_mjs_0g15hiw._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js"].map(b=>a.l(b))).then(()=>b(349834)))},814636,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_00_51_v._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_1ok0411._.js"].map(b=>a.l(b))).then(()=>b(525902)))},147136,a=>{a.v(b=>Promise.all(["server/chunks/ssr/1q96_modules_mermaid_dist_chunks_mermaid_core_ishikawaDiagram-5VMMS53U_mjs_05o2e4d._.js"].map(b=>a.l(b))).then(()=>b(206340)))},719552,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_201yvda._.js","server/chunks/ssr/1q96_modules_mermaid_dist_chunks_mermaid_core_journeyDiagram-3NMN7TZE_mjs_16ehrbl._.js"].map(b=>a.l(b))).then(()=>b(450754)))},653408,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-5VM5RSS4_mjs_0tg6kya._.js","server/chunks/ssr/1q96_modules_mermaid_dist_chunks_mermaid_core_kanban-definition-UXKFOSKX_mjs_1uiqd5g._.js"].map(b=>a.l(b))).then(()=>b(301315)))},165250,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_1turj0n._.js","server/chunks/ssr/1daa_mermaid_dist_chunks_mermaid_core_mindmap-definition-YA3MSWOX_mjs_19k8byt._.js"].map(b=>a.l(b))).then(()=>b(790158)))},325455,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0qapgjr._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-SVP7TREG_mjs_03r5m21._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0lct0v1._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js"].map(b=>a.l(b))).then(()=>b(595628)))},934650,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_@mermaid-js_parser_dist_chunks_mermaid-parser_core_0nrrdaq._.js","server/chunks/ssr/node_modules_1rg7lj4._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_1sgfrma._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js"].map(b=>a.l(b))).then(()=>b(748116)))},389088,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_111pp7w._.js","server/chunks/ssr/1q96_modules_mermaid_dist_chunks_mermaid_core_quadrantDiagram-AXDQQJYC_mjs_0h4a9wq._.js"].map(b=>a.l(b))).then(()=>b(888630)))},523431,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0fr-ml8._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-SVP7TREG_mjs_03r5m21._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_0lct0v1._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js"].map(b=>a.l(b))).then(()=>b(846881)))},458290,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_1turj0n._.js","server/chunks/ssr/1daa_mermaid_dist_chunks_mermaid_core_requirementDiagram-BXWQKSXE_mjs_0kwiv6n._.js"].map(b=>a.l(b))).then(()=>b(443250)))},215730,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_d3-scale_src_1tr1qwb._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_sankeyDiagram-P5KCCOFB_mjs_187yyta._.js"].map(b=>a.l(b))).then(()=>b(656950)))},295724,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_1o1kg4c._.js","server/chunks/ssr/1q96_modules_mermaid_dist_chunks_mermaid_core_sequenceDiagram-WJ2MYXX4_mjs_1n01m3a._.js"].map(b=>a.l(b))).then(()=>b(571979)))},482052,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_sizeCapture-INFHLROL_mjs_179zv_p._.js"].map(b=>a.l(b))).then(()=>b(865684)))},438231,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_1rxlz7e._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_stateDiagram-D77RDMKH_mjs_1mer5fv._.js","server/chunks/ssr/node_modules_dagre-d3-es_src_dagre_index_0g66msq.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-IMKFNOWR_mjs_0vdq1-l._.js"].map(b=>a.l(b))).then(()=>b(168538)))},991687,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_0jkhu0x._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-IMKFNOWR_mjs_0vdq1-l._.js"].map(b=>a.l(b))).then(()=>b(472309)))},860094,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_swimlanes-42K2YHIH_mjs_0scuk32._.js"].map(b=>a.l(b))).then(()=>b(827033)))},819980,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_04f6p6a._.js","server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_chunk-SHT3W25Y_mjs_00p5j42._.js"].map(b=>a.l(b))).then(()=>b(1471)))},623969,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_d3-shape_src_arc_1-w13bo.js","server/chunks/ssr/1daa_mermaid_dist_chunks_mermaid_core_timeline-definition-24CTP7MA_mjs_10dmaxt._.js"].map(b=>a.l(b))).then(()=>b(301394)))},788557,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_mermaid_dist_chunks_mermaid_core_vennDiagram-4TSXK5OY_mjs_0anqu7y._.js"].map(b=>a.l(b))).then(()=>b(509170)))},925161,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_1g1eihe._.js","server/chunks/ssr/1q96_modules_mermaid_dist_chunks_mermaid_core_wardleyDiagram-VM6X3IG4_mjs_0kh3fjb._.js","server/chunks/ssr/node_modules_@mermaid-js_parser_dist_17wxxyr._.js","server/chunks/ssr/1daa_@mermaid-js_parser_dist_chunks_mermaid-parser_core_chunk-FOHPRMQF_mjs_0ybwfeq._.js"].map(b=>a.l(b))).then(()=>b(914844)))},506751,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_0xht9wg._.js","server/chunks/ssr/1q96_modules_mermaid_dist_chunks_mermaid_core_xychartDiagram-S5SC5T6Z_mjs_08t5e44._.js"].map(b=>a.l(b))).then(()=>b(176947)))},236914,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_streamdown_dist_highlighted-body-KPVGNVTW_1fnf894.js"].map(b=>a.l(b))).then(()=>b(391282)))},172487,a=>{a.v(b=>Promise.all(["server/chunks/ssr/node_modules_streamdown_dist_mermaid-HWGCJPDP_093xi20.js"].map(b=>a.l(b))).then(()=>b(853409)))}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__172cq4x._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[897020,a=>{"use strict";var b=a.i(187924);a.s([],804434),a.i(804434);var c=a.i(572131),d=a.i(801811),e=a.i(357738),f=a.i(462824),g=a.i(524715),h=a.i(394552),i=a.i(307436),j=a.i(407393),k=a.i(827576);let l={checked:a=>a?{"data-checked":""}:{"data-unchecked":""},...j.transitionStatusMapping,...k.fieldValidityMapping};var m=a.i(85933),n=a.i(300557),o=a.i(926184),p=a.i(221436),q=a.i(579587),r=a.i(796511),s=a.i(1230),t=a.i(832362),u=a.i(77260),v=a.i(346919),w=a.i(769476);let x=c.createContext(void 0);var y=a.i(376224),z=a.i(854662);let A=c.createContext(void 0),B=c.forwardRef(function(a,j){let{render:k,className:z,disabled:B=!1,readOnly:C=!1,required:D=!1,"aria-labelledby":E,value:F,inputRef:G,nativeButton:H=!1,id:I,style:J,...K}=a,L=c.useContext(x),{disabled:M,readOnly:N,required:O,form:P,checkedValue:Q,touched:R=!1,validation:S,name:T,setCheckedValue:U=g.NOOP,setTouched:V=g.NOOP,registerInputRef:W=g.NOOP}=L??{},{setTouched:X,setFilled:Y,state:Z,disabled:$}=(0,s.useFieldRootContext)(),_=(0,t.useFieldItemContext)(),{labelId:aa,getDescriptionProps:ab}=(0,u.useLabelableContext)(),ac=$||_.disabled||M||B,ad=N||C,ae=O||D,af=L?Q===F:""===F,ag=c.useRef(null),ah=c.useRef(null),ai=S?.registerInput,aj=c.useCallback(a=>ai?.(a,{controlRef:ag,value:void 0}),[ai]),ak=(0,d.useMergedRefs)(G,ah,W,aj);(0,e.useIsoLayoutEffect)(()=>{ah.current?.checked&&Y(!0)},[Y]),(0,e.useIsoLayoutEffect)(()=>{if(ah.current){if(ac&&af)return void W(null);W(ah.current)}},[af,ac,W]);let al=(0,n.useBaseUiId)(),am=(0,w.useLabelableId)({id:I}),an=H?void 0:am,ao={role:"radio","aria-checked":af,"aria-labelledby":(0,v.useAriaLabelledBy)(E,aa,ah,!H,an),[q.ACTIVE_COMPOSITE_ITEM]:af?"":void 0,id:H?am:al,onKeyDown(a){"Enter"===a.key&&a.preventDefault()},onClick(a){if(a.defaultPrevented||ac||ad)return;a.preventDefault();let b=ah.current;b&&(0,m.dispatchClickWithModifiers)(b,a)},onFocus(a){a.defaultPrevented||ac||ad||!R||(ah.current?.click(),V(!1))}},{getButtonProps:ap,buttonRef:aq}=(0,p.useButton)({disabled:ac,native:H,composite:!1}),ar={type:"radio",ref:ak,form:P,id:an,name:T,tabIndex:-1,style:T?f.visuallyHiddenInput:f.visuallyHidden,"aria-hidden":!0,...void 0!==F?{value:(0,y.serializeValue)(F)}:g.EMPTY_OBJECT,disabled:ac,checked:af,required:ae,readOnly:ad,onChange(a){if(a.nativeEvent.defaultPrevented||ac||ad||void 0===F)return;let b=(0,h.createChangeEventDetails)(i.REASONS.none,a.nativeEvent);U(F,b),b.isCanceled||X(!0)},onClick(a){a.stopPropagation()},onFocus(){ag.current?.focus()}},as=c.useMemo(()=>({...Z,required:ae,disabled:ac,readOnly:ad,checked:af}),[Z,ac,ad,af,ae]),at=void 0!==L,au=[j,ag,aq],av=[ao,K,ap,ab,S?a=>S.getValidationProps(ac,a):g.EMPTY_OBJECT],aw=(0,o.useRenderElement)("span",a,{enabled:!at,state:as,ref:au,props:av,stateAttributesMapping:l});return(0,b.jsxs)(A.Provider,{value:as,children:[at?(0,b.jsx)(r.CompositeItem,{tag:"span",render:k,className:z,style:J,state:as,refs:au,props:av,stateAttributesMapping:l}):aw,(0,b.jsx)("input",{...ar,suppressHydrationWarning:!0})]})});var C=a.i(305687),D=a.i(348250);let E=c.forwardRef(function(a,b){let{render:d,className:e,style:f,keepMounted:g=!1,...h}=a,i=function(){let a=c.useContext(A);if(void 0===a)throw Error((0,z.default)(52));return a}(),j=i.checked,{mounted:k,transitionStatus:m,setMounted:n}=(0,D.useTransitionStatus)(j),p={...i,transitionStatus:m},q=c.useRef(null),r=(0,o.useRenderElement)("span",a,{ref:[b,q],state:p,props:h,stateAttributesMapping:l});return((0,C.useOpenChangeComplete)({batch:!0,enabled:!j,open:j,ref:q,onComplete(){j||n(!1)}}),g||k)?r:null});a.s(["Indicator",0,E,"Root",0,B],642851);var F=a.i(642851),F=F,G=a.i(950381),H=a.i(854401),I=a.i(30116),J=a.i(669649),K=a.i(801548),L=a.i(958589),M=a.i(717326),N=a.i(971154),O=a.i(541302),P=a.i(964072);let Q=[J.SHIFT],R=c.forwardRef(function(a,d){let{render:e,className:f,disabled:g,readOnly:h,required:i,onValueChange:j,value:l,defaultValue:m,form:o,name:p,inputRef:q,id:r,style:t,...v}=a,{setTouched:w,setFocused:y,validationMode:z,name:A,disabled:B,state:C,validation:D,setDirty:E,setFilled:F,validityData:J}=(0,s.useFieldRootContext)(),{labelId:R}=(0,u.useLabelableContext)(),{clearErrors:S,elementRef:T}=(0,O.useFormContext)(),U=(0,N.useFieldsetRootContext)(!0),V=B||g,W=A??p,X=(0,n.useBaseUiId)(r),[Y,Z]=(0,G.useControlled)({controlled:l,default:m,name:"RadioGroup",state:"value"}),[$,_]=c.useState(!1),aa=(0,H.useStableCallback)((a,b)=>{j?.(a,b),b.isCanceled||Z(a)}),ab=D.getInputControl,ac=c.useMemo(()=>({get current(){return ab()}}),[ab]),ad=c.useRef(null),ae=c.useRef(null);function af(a){let b;return q&&("function"==typeof q?b=q(a):q.current=a),ad.current=a,b}let ag=(0,H.useStableCallback)(a=>{if(!a||a.disabled)return;ae.current||(ae.current=a);let b=ad.current,c=a.checked||null==b||b.disabled?af(a):void 0;return()=>{ae.current===a&&(ae.current=null),ad.current===a?c?(c(),ad.current=null):af(null):c?.()}}),ah=(0,H.useStableCallback)(()=>{let a=T.current;if(!a)return Y??null;for(let b of D.registeredInputs.keys())if(b.checked&&(0,M.isEligibleInput)(b,a))return Y??null;return null});(0,L.useRegisterFieldControl)(ac,X,Y??null,ah,!V,p),(0,P.useValueChanged)(Y,()=>{S(W),E(Y!==J.initialValue),F(null!=Y),D.change(Y);let a=ae.current;null==Y&&a&&!a.disabled&&af(a)});let ai=R??U?.legendId,aj={...C,disabled:V??!1,required:i??!1,readOnly:h??!1},ak=c.useMemo(()=>({checkedValue:Y,disabled:V,form:o,validation:D,name:W,readOnly:h,registerInputRef:ag,required:i,setCheckedValue:aa,setTouched:_,touched:$}),[Y,V,o,D,W,h,ag,i,aa,_,$]);return(0,b.jsx)(x.Provider,{value:ak,children:(0,b.jsx)(K.CompositeRoot,{render:e,className:f,style:t,state:aj,props:[{id:r,role:"radiogroup","aria-required":i||void 0,"aria-disabled":V||void 0,"aria-readonly":h||void 0,"aria-labelledby":ai,onFocus(){y(!0)},onBlur(a){(0,I.contains)(a.currentTarget,a.relatedTarget)||(w(!0),y(!1),"onBlur"===z&&D.commit(Y))},onKeyDownCapture(a){a.key.startsWith("Arrow")&&(_(!0),y(!0))}},v,a=>D.getValidationProps(V??!1,a)],refs:[d],stateAttributesMapping:k.fieldValidityMapping,enableHomeAndEndKeys:!1,modifierKeys:Q})})});var S=a.i(497895);a.s(["RadioGroup",0,function({className:a,...c}){return(0,b.jsx)(R,{"data-slot":"radio-group",className:(0,S.cn)("grid w-full gap-2",a),...c})},"RadioGroupItem",0,function({className:a,...c}){return(0,b.jsx)(F.Root,{"data-slot":"radio-group-item",className:(0,S.cn)("group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary",a),...c,children:(0,b.jsx)(F.Indicator,{"data-slot":"radio-group-indicator",className:"flex size-4 items-center justify-center",children:(0,b.jsx)("span",{className:"absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground"})})})}],897020)},102306,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(141146),f=a.i(866491),g=a.i(951675),h=a.i(572131),i=a.i(767561),j=a.i(340695),k=a.i(446181),l=a.i(545097),m=a.i(950463),n=a.i(287702),o=a.i(8468),p=a.i(619477),q=a.i(199169),r=a.i(313237),s=a.i(862966),t=a.i(497895),u=a.i(351287),v=a.i(103837),w=a.i(27418),x=a.i(346075),y=b([o]);[o]=y.then?(await y)():y;let F={running:"working",waiting:"waiting on you",done:"done",cancelled:"stopped"},G={running:"text-muted-foreground",waiting:t.WAITING_INK,done:"text-muted-foreground",cancelled:"text-muted-foreground"},H="h-[min(34rem,58vh)] min-h-64 px-1";function z(){let{items:a,isLoading:b,isLoadingMore:c,error:e,hasMore:f,sentinelRef:l,refresh:m}=(0,s.useServerPages)({key:(a,b)=>{if(0===a)return i.queryKey.callHistory(null);let c=b?.at(-1);return c?i.queryKey.callHistory((0,q.toDate)(c.startedAt).toISOString()):null},size:n.CALL_HISTORY_PAGE,swr:{revalidateOnFocus:!1}}),o=(0,h.useMemo)(()=>[...a].reverse(),[a]),[u,w]=(0,r.useServerAction)(v.deleteEndedCallsAction,{okMessage:a=>1===a?"1 call deleted":`${a} calls deleted`,onOk:m}),x=async()=>{await k.notify.confirm({title:"Delete every call?",description:"Every turn of every call goes — and she stops reading any of it back into the next call. A call still on the line stays.",okText:"Delete all",destructive:!0})&&u()},y=(0,h.useRef)(null),z=(0,h.useRef)(!1),C=(0,h.useRef)(0);return((0,h.useLayoutEffect)(()=>{let a=y.current;a&&0!==o.length&&(z.current?a.scrollTop=a.scrollHeight-C.current:(z.current=!0,a.scrollTop=a.scrollHeight),C.current=a.scrollHeight-a.scrollTop)},[o]),b)?(0,d.jsx)("div",{className:(0,t.cn)(H,"overflow-hidden"),children:(0,d.jsx)(A,{})}):e?(0,d.jsx)(p.SettingError,{message:e.message}):(0,d.jsx)(d.Fragment,{children:0===o.length?(0,d.jsx)("p",{className:"px-1 text-sm leading-relaxed text-muted-foreground",children:"No calls yet. Everything said on the line is kept here — hers and yours, in the order it was said."}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{ref:y,onScroll:a=>{let b=a.currentTarget;C.current=b.scrollHeight-b.scrollTop},className:(0,t.cn)(H,"overflow-y-auto overscroll-contain pb-6"),children:[(0,d.jsx)(p.SettingMore,{hasMore:f,loading:c,sentinelRef:l,count:1,ghost:(0,d.jsx)(A,{})}),o.map((a,b)=>(0,d.jsx)(B,{call:a,first:0===b,onDropped:m},a.id))]}),(0,d.jsx)("div",{className:"flex justify-end",children:(0,d.jsxs)(j.Button,{variant:"ghost",loading:w,onClick:x,className:"text-muted-foreground hover:text-destructive",children:[(0,d.jsx)(g.Trash2,{}),"Delete all"]})})]})})}function A(){return(0,d.jsxs)("div",{className:"pb-3",children:[(0,d.jsxs)("div",{className:"flex h-7 items-center gap-2.5",children:[(0,d.jsx)(m.Skeleton,{className:"h-3 w-24"}),(0,d.jsx)(m.Skeleton,{className:"h-3 w-10"})]}),(0,d.jsx)("div",{className:"mt-2 mb-[18px] h-px bg-border/60"}),(0,d.jsx)("div",{className:"flex justify-end",children:(0,d.jsx)(m.Skeleton,{className:"h-9 w-3/5 rounded-2xl rounded-br-sm"})}),(0,d.jsxs)("div",{className:"mt-3 flex items-start gap-2",children:[(0,d.jsx)(m.Skeleton,{className:"mt-0.5 size-[18px] shrink-0 rounded-full"}),(0,d.jsx)(m.Skeleton,{className:"mt-1 h-3.5 w-2/3"})]})]})}let I=a=>"user"===a.role?"user":"her";function B({call:a,first:b,onDropped:c}){let[e,f]=(0,r.useServerAction)(u.deleteCallAction,{okMessage:"Call deleted",onOk:c}),h=(0,q.toDate)(a.startedAt),i=a.turns.at(-1),l=a.endedAt&&i?function(a,b){let c=Math.max(0,Math.round((b.getTime()-a.getTime())/1e3));if(c<60)return`${c}s`;let d=Math.floor(c/60);return d<60?`${d}m ${String(c%60).padStart(2,"0")}s`:`${Math.floor(d/60)}h ${String(d%60).padStart(2,"0")}m`}(h,(0,q.toDate)(i.at)):"on the line",m=async()=>{await k.notify.confirm({title:`Delete the call from ${(0,q.whenOf)(h)}?`,description:"Every turn of it goes — and she stops reading it back into the next call.",okText:"Delete",destructive:!0})&&e(a.id)};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:(0,t.cn)("group flex items-center gap-2.5",b?"mt-1":"mt-11"),children:[(0,d.jsx)("span",{title:[a.provider,a.model,a.backendModel,null===a.seconds?null:`${a.seconds}s active`,a.endedReason].filter(Boolean).join(" · "),className:"font-mono text-[10px] tracking-[0.14em] uppercase",children:(0,q.whenOf)(h)}),(0,d.jsx)("span",{className:"font-mono text-[10px] text-muted-foreground",children:l}),(0,d.jsx)("span",{className:"ml-auto flex size-7 shrink-0 items-center justify-center",children:a.endedAt&&(0,d.jsx)(j.Button,{size:"icon-sm",variant:"ghost",loading:f,"aria-label":"Delete this call",onClick:m,className:"text-muted-foreground/60 opacity-0 transition-opacity group-hover:opacity-100 hover:text-destructive focus-visible:opacity-100",children:(0,d.jsx)(g.Trash2,{})})})]}),(0,d.jsx)("div",{className:"mt-2 mb-[18px] h-px bg-border/60"}),(function(a){let b=[];for(let c of a){let a=b.at(-1);if(a&&"tool"===c.role&&"tool"===a.turn.role&&a.turn.tool===c.tool&&a.turn.text===c.text){a.repeats+=1;continue}b.push({turn:c,repeats:1})}return b})(a.turns).map(({turn:b,repeats:c},e,f)=>{var g,h;let i,j=f[e-1]?.turn,k=f[e+1]?.turn;return(0,d.jsx)(C,{turn:b,job:(g=a,h=b,(i=(0,w.delegatedLabel)(h.tool,h.text))?g.jobs.find(a=>a.label===i):void 0),repeats:c,opensRun:!j||I(j)!==I(b),closesRun:!k||I(k)!==I(b)},b.id)})]})}function C({turn:a,job:b,opensRun:c,closesRun:e,repeats:f=1}){return"tool"===a.role?(0,d.jsx)(E,{turn:a,job:b,repeats:f,opensRun:c}):"user"===a.role?(0,d.jsx)("div",{className:(0,t.cn)("flex justify-end",c?"mt-3":"mt-1"),children:(0,d.jsx)("p",{className:(0,t.cn)("max-w-[min(34rem,78%)] rounded-2xl bg-muted px-3.5 py-2 text-[13.5px] leading-relaxed break-keep whitespace-pre-wrap",e&&"rounded-br-sm"),children:a.text})}):(0,d.jsxs)("div",{className:(0,t.cn)("flex items-start gap-2",c?"mt-3":"mt-1"),children:[(0,d.jsx)(D,{face:c,className:"mt-0.5"}),(0,d.jsx)("p",{className:"max-w-[min(34rem,78%)] text-[13.5px] leading-relaxed break-keep whitespace-pre-wrap",children:a.text})]})}function D({face:a,className:b}){return(0,d.jsx)("span",{className:(0,t.cn)("grid size-[18px] shrink-0 place-items-center",b),children:a&&(0,d.jsx)(x.ThursdayMark,{size:18})})}function E({turn:a,job:b,repeats:c,opensRun:e}){let f=a.tool??"",g=(0,o.toolIcon)(f),h=(0,w.toolLine)(f,a.text);return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)("div",{className:(0,t.cn)("flex items-center gap-2",e?"mt-3":"mt-1.5"),children:[(0,d.jsx)(D,{face:e}),(0,d.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5 text-muted-foreground",children:[(0,d.jsx)(g,{className:"size-3 shrink-0"}),h&&(0,d.jsx)("span",{className:"truncate text-[11px] break-keep",children:h}),(0,d.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted-foreground/60",children:f}),c>1&&(0,d.jsxs)("span",{className:"shrink-0 font-mono text-[10px] text-muted-foreground/70",children:["×",c]})]})]}),b&&(0,d.jsxs)("p",{className:"mt-0.5 ml-[26px] flex min-w-0 items-baseline gap-1.5 text-[11px]",children:["running"===b.status?(0,d.jsx)(l.ShinyText,{text:F.running,className:"shrink-0 font-mono text-[10px]"}):(0,d.jsx)("span",{className:(0,t.cn)("shrink-0 font-mono text-[10px]",G[b.status]),children:F[b.status]}),b.outcome&&"running"!==b.status&&(0,d.jsx)("span",{className:"truncate text-muted-foreground",children:(0,t.plainText)(b.outcome)})]})]})}a.s(["CallHistoryRow",0,function(){return(0,d.jsxs)("button",{type:"button",onClick:()=>k.notify.component({className:"sm:max-w-3xl",renderer:()=>(0,d.jsx)(p.SettingDialogContent,{title:"Call history",description:"Everything said on the line, oldest at the top. Scroll up for older calls.",children:(0,d.jsx)(z,{})})}),className:"flex w-full min-w-0 items-center gap-3 p-4 text-left outline-none transition-colors hover:bg-muted/50 focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-inset",children:[(0,d.jsx)("span",{className:"grid size-10 shrink-0 place-items-center rounded-lg bg-muted text-muted-foreground",children:(0,d.jsx)(f.Phone,{className:"size-4"})}),(0,d.jsxs)("span",{className:"min-w-0 flex-1 space-y-0.5",children:[(0,d.jsx)("span",{className:"block text-sm font-medium",children:"Call history"}),(0,d.jsx)("span",{className:"block text-xs text-muted-foreground",children:"Every call, word for word — hers and yours"})]}),(0,d.jsx)(e.ChevronRight,{className:"size-4 shrink-0 text-muted-foreground"})]})}]),c()}catch(a){c(a)}},!1),922056,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(752562),f=a.i(26268),g=a.i(572131),h=a.i(767561),i=a.i(340695),j=a.i(825715),k=a.i(205522),l=a.i(446181),m=a.i(897020),n=a.i(777794),o=a.i(280281),p=a.i(546893),q=a.i(287702),r=a.i(96340),s=a.i(626280),t=a.i(324835),u=a.i(249049),v=a.i(760374),w=a.i(619477),x=a.i(102306),y=a.i(445432),z=a.i(346075),A=a.i(203282),B=a.i(334392),C=a.i(759399),D=a.i(969730),E=a.i(486832),F=a.i(461512),G=a.i(359006),H=a.i(888396),I=a.i(332033),J=a.i(616682),K=a.i(249890),L=a.i(313237),M=a.i(759497),N=a.i(497895),O=b([x]);function P({columns:a,children:b}){return(0,d.jsx)("div",{className:"@container",children:(0,d.jsx)("div",{className:(0,N.cn)("grid divide-y divide-border/60 overflow-hidden rounded-xl border border-border/60",3===a?"@3xl:grid-cols-3 @3xl:divide-x @3xl:divide-y-0":"@xl:grid-cols-2 @xl:divide-x @xl:divide-y-0"),children:b})})}function Q({label:a,children:b}){return(0,d.jsxs)("div",{className:"flex min-h-5 items-center gap-3",children:[(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate text-sm font-medium",children:a}),b]})}function R({value:a,face:b,hasKey:c,onChange:e}){return(0,d.jsx)(w.SettingGroup,{label:"Models",note:"Both run on your OpenAI key. Instructions are saved when you leave the field.",children:(0,d.jsxs)("div",{className:"@container divide-y divide-border/60 rounded-xl border border-border/60",children:[!c&&(0,d.jsx)(U,{}),(0,d.jsxs)(S,{name:"Voice",fact:"billed by the minute",children:[(0,d.jsx)("div",{className:"grid gap-4 @xl:grid-cols-2",children:(0,d.jsx)(T,{label:"model",children:(0,d.jsx)(j.Combobox,{value:K.LIVE_MODEL,onChange:()=>void 0,options:[{value:K.LIVE_MODEL,label:"GPT-Live 1"}],"aria-label":"Voice model",disabled:!0})})}),(0,d.jsx)(T,{label:"voice",children:(0,d.jsx)(A.VoicePicker,{voice:a.voice,face:b,onChange:a=>e({voice:a.trim()||r.LIVE_DEFAULTS.voice})})}),(0,d.jsx)(T,{label:"instructions",children:(0,d.jsx)(Z,{value:a.voicePrompt,onCommit:a=>e({voicePrompt:a}),placeholder:"How to address you, how much to say, what to skip.","aria-label":"Voice instructions"})})]}),(0,d.jsxs)(S,{name:"Backend",fact:"billed per token",children:[(0,d.jsx)(T,{label:"model",children:(0,d.jsx)(V,{value:a.backendModel,onChange:a=>e({backendModel:a})})}),(0,d.jsx)(T,{label:"reasoning",children:(0,d.jsx)(n.Segmented,{"aria-label":"Reasoning effort",className:"w-full flex-wrap *:flex-1",options:ah,value:a.reasoningEffort??"auto",onChange:a=>e({reasoningEffort:"auto"===a?null:a})})}),(0,d.jsx)(T,{label:"tools",children:(0,d.jsx)(W,{webSearch:a.webSearch,onWebSearch:a=>e({webSearch:a})})}),(0,d.jsx)(T,{label:"instructions",children:(0,d.jsx)(Z,{value:a.backendPrompt,onCommit:a=>e({backendPrompt:a}),placeholder:"How work should be handed over, what to check first.","aria-label":"Backend instructions"})})]})]})})}function S({name:a,fact:b,children:c}){return(0,d.jsxs)("div",{className:"grid gap-4 p-5 @2xl:grid-cols-[8.5rem_minmax(0,1fr)] @2xl:gap-6",children:[(0,d.jsxs)("span",{className:"space-y-0.5",children:[(0,d.jsx)("span",{className:"block text-sm font-medium",children:a}),(0,d.jsx)("span",{className:"block font-mono text-[11px] text-muted-foreground",children:b})]}),(0,d.jsx)("div",{className:"min-w-0 space-y-4",children:c})]})}function T({label:a,children:b}){return(0,d.jsxs)("div",{className:"min-w-0 space-y-2",children:[(0,d.jsx)("span",{className:"block font-mono text-[11px] text-muted-foreground",children:a}),b]})}function U(){let[a,b]=(0,g.useState)(""),[c,e]=(0,L.useServerAction)(v.setConfigAction,{onOk:()=>{(0,M.revalidate)(h.queryKey.llmModel),(0,M.revalidate)(h.queryKey.config),b("")}}),f=a.trim().length>=u.KEY_MIN;return(0,d.jsxs)("div",{className:"space-y-3 p-5",children:[(0,d.jsxs)("span",{className:"block space-y-0.5",children:[(0,d.jsx)("span",{className:(0,N.cn)("block text-sm font-medium",N.WAITING_INK),children:"No OpenAI key"}),(0,d.jsx)("span",{className:"block text-xs text-muted-foreground",children:"Her voice and the backend both run on it"})]}),(0,d.jsx)(u.KeyInput,{dense:!0,provider:r.LIVE_PROVIDER,saved:!1,value:a,ready:f,saving:e,onValue:b,onSubmit:()=>f&&c(r.LIVE_PROVIDER.apiKeyName,a)})]})}function V({value:a,onChange:b}){let c=r.LIVE_BACKEND_MODELS.some(b=>b.id===a),f=(0,H.useDraft)(c?"":a,a=>b(a||r.LIVE_DEFAULTS.backendModel),{min:0});return(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsx)("div",{role:"radiogroup","aria-label":"Backend model",className:"grid grid-cols-2 gap-2 @3xl:grid-cols-4",children:r.LIVE_BACKEND_MODELS.map(c=>{let f=c.id===a;return(0,d.jsxs)("button",{type:"button",role:"radio","aria-checked":f,onClick:()=>b(c.id),className:(0,N.cn)("min-w-0 space-y-0.5 rounded-lg border px-3 py-2.5 text-left outline-none transition-colors focus-visible:ring-3 focus-visible:ring-ring/50",f?"border-foreground bg-muted/40":"border-border/60 hover:bg-muted/50"),children:[(0,d.jsxs)("span",{className:"flex items-center gap-2",children:[(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate text-sm font-medium",children:c.label}),f&&(0,d.jsx)(e.Check,{className:"size-3.5 shrink-0"})]}),(0,d.jsxs)("span",{className:"block truncate font-mono text-[11px] text-muted-foreground",children:[c.id," · ",c.tier]})]},c.id)})}),(0,d.jsx)(k.Input,{value:f.value,onChange:a=>f.set(a.target.value),onBlur:f.commit,onKeyDown:f.onKeyDown,placeholder:"Other model id","aria-label":"Other backend model id",spellCheck:!1,className:"font-mono text-sm"})]})}[x]=O.then?(await O)():O;let ah=[{value:"auto",label:"auto",title:"The model's own default"},...r.LIVE_REASONING.map(a=>({value:a,label:a,title:`Reasoning effort ${a}`}))];function W({webSearch:a,onWebSearch:b}){let{data:c}=(0,M.useServerRoute)(h.queryKey.callSkills),[e]=(0,L.useServerAction)(E.setCallSkillsAction,{onOk:()=>(0,M.revalidate)(h.queryKey.callSkills)});return(0,d.jsxs)("div",{className:"space-y-2",children:[(0,d.jsxs)("div",{className:"flex flex-wrap gap-x-7 gap-y-3",children:[(0,d.jsx)(X,{label:"Search the web",checked:a,onChange:b}),(0,d.jsx)(X,{label:"Read skills herself",checked:c??!1,disabled:void 0===c,onChange:a=>e(a)})]}),a&&(0,d.jsx)(w.SettingNote,{children:"Each search adds to the backend's OpenAI usage."}),c&&(0,d.jsx)(Y,{})]})}function X({label:a,checked:b,disabled:c,onChange:e}){return(0,d.jsxs)("label",{className:"flex items-center gap-2.5 text-sm",children:[(0,d.jsx)(o.Switch,{checked:b,disabled:c,onCheckedChange:e}),a]})}function Y(){let{data:a}=(0,M.useServerRoute)(h.queryKey.skills);return a?(0,d.jsx)(w.SettingNote,{className:(0,N.cn)(!a.length&&N.WAITING_INK),children:a.length?`The same ${a.length} a bot reads. Each one she opens spends a page of the call on it.`:"Nothing installed yet — there is nothing for her to read."}):null}function Z({value:a,onCommit:b,placeholder:c,"aria-label":e}){let f=(0,H.useDraft)(a,b,{min:0});return(0,d.jsx)(p.Textarea,{value:f.value,maxLength:J.COMMON_VALIDATE.prompt.max,onChange:a=>f.set(a.target.value),onBlur:f.commit,placeholder:c,"aria-label":e})}function $(){let[a,b]=(0,L.useServerAction)(D.resetHistoryAction,{okMessage:({calls:a,threads:b,notes:c})=>`Wiped ${a} calls, ${b} jobs, ${c} notes`,onOk:()=>{(0,M.revalidate)(h.queryKey.memory),(0,M.revalidate)(h.queryKey.threads),(0,M.revalidate)(h.queryKey.callHistory(null))}}),c=async()=>{await l.notify.confirm({title:"Reset history?",description:"Every call, every job and everything she remembers is deleted for good. Keys, bots and connectors stay.",okText:"Reset",destructive:!0})&&a()};return(0,d.jsxs)("div",{className:"flex min-w-0 items-center gap-3 p-4",children:[(0,d.jsx)("span",{className:"grid size-10 shrink-0 place-items-center rounded-lg bg-muted text-muted-foreground",children:(0,d.jsx)(f.TriangleAlert,{className:"size-4"})}),(0,d.jsxs)("span",{className:"min-w-0 flex-1 space-y-0.5",children:[(0,d.jsx)("span",{className:"block truncate text-sm font-medium",children:"Reset history"}),(0,d.jsx)("span",{className:"block truncate text-xs text-muted-foreground",children:"Calls, jobs and memory. Keys and bots stay."})]}),(0,d.jsx)(i.Button,{variant:"outline",size:"sm",loading:b,onClick:c,className:"shrink-0 text-destructive hover:text-destructive",children:"Reset"})]})}function _({value:a,onChange:b}){let c=c=>b({...a,...c});return(0,d.jsx)(w.SettingGroup,{label:"Face",children:(0,d.jsxs)("div",{className:"space-y-5 py-2",children:[(0,d.jsxs)("div",{className:"flex flex-col items-center gap-4 pt-2",children:[(0,d.jsx)(y.Face,{look:a,size:176,className:"w-44"}),(0,d.jsx)(n.Segmented,{"aria-label":"Face",options:B.FACE_KINDS.map(a=>({value:a,label:y.FACES[a].label})),value:a.kind,onChange:a=>c({kind:a})}),(0,d.jsx)("p",{className:"max-w-sm text-center text-xs text-muted-foreground",children:y.FACES[a.kind].hint})]}),"mark"===a.kind&&(0,d.jsx)(s.MarkPalette,{color:a.paint?void 0:a.color,themePicked:!a.paint&&!a.color,onTheme:()=>c({color:void 0,paint:void 0}),onPick:a=>c({color:a,paint:void 0}),paint:a.paint,onPaint:b=>c({paint:a.paint===b?void 0:b})}),"mark"===a.kind&&(0,d.jsx)(aa,{label:"Shape",children:(0,d.jsx)(n.Segmented,{"aria-label":"Shape",options:t.MARK_SHAPES.map(a=>({value:a,label:(0,d.jsx)("span",{className:"capitalize",children:a})})),value:a.shape??"blob",onChange:a=>c({shape:a})})}),"mark"===a.kind&&(0,d.jsx)(aa,{label:"Style",children:(0,d.jsx)(n.Segmented,{"aria-label":"Style",options:[{value:"solid",label:"Solid"},{value:"outline",label:"Outline"}],value:a.outline?"outline":"solid",onChange:a=>c({outline:"outline"===a||void 0})})}),"ascii"===a.kind&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(aa,{label:"Glyphs",children:(0,d.jsx)(n.Segmented,{"aria-label":"Glyphs",options:B.ASCII_CHARSETS.map(a=>({value:a,label:ai[a]})),value:a.charset,onChange:a=>c({charset:a})})}),(0,d.jsx)(aa,{label:"Size",children:(0,d.jsx)(ab,{min:q.ASCII_FACE.fontSize.min,max:q.ASCII_FACE.fontSize.max,step:1,value:a.fontSize,format:a=>`${a}px`,onChange:a=>c({fontSize:a})})}),(0,d.jsx)(aa,{label:"Density",children:(0,d.jsx)(ab,{min:q.ASCII_FACE.density.min,max:q.ASCII_FACE.density.max,step:.1,value:a.density,format:a=>`${a.toFixed(1)}x`,onChange:a=>c({density:a})})})]})]})})}let ai={ascii:"Characters",emoji:"Sprinkled",emojiOnly:"All emoji"};function aa({label:a,children:b}){return(0,d.jsxs)("div",{className:"flex items-center gap-3",children:[(0,d.jsx)("span",{className:"w-16 shrink-0 font-mono text-[11px] text-muted-foreground",children:a}),b]})}function ab({value:a,onChange:b,format:c,...e}){return(0,d.jsxs)("span",{className:"flex min-w-0 flex-1 items-center gap-3",children:[(0,d.jsx)("input",{type:"range",...e,value:a,onChange:a=>b(Number(a.target.value)),className:"min-w-0 flex-1 accent-foreground"}),(0,d.jsx)("span",{className:"w-10 shrink-0 text-right font-mono text-[11px] text-muted-foreground tabular-nums",children:c(a)})]})}let aj={center:{label:"Her last line",hint:"One caption under the mark — only what she said."},sides:{label:"Last three turns",hint:"Hers on the left, yours on the right, beside the mark."}};function ac({value:a,onChange:b}){return(0,d.jsx)(w.SettingGroup,{label:"Captions",children:(0,d.jsx)("div",{className:"@container",children:(0,d.jsx)("div",{role:"radiogroup","aria-label":"Captions",className:"grid gap-3 @xl:grid-cols-2",children:F.CAPTION_VIEWS.map(c=>{let f=c===a;return(0,d.jsxs)("button",{type:"button",role:"radio","aria-checked":f,onClick:()=>b(c),className:(0,N.cn)("min-w-0 space-y-3 rounded-xl border p-3 text-left outline-none transition-colors focus-visible:ring-3 focus-visible:ring-ring/50",f?"border-foreground":"border-border/60 hover:bg-muted/50"),children:[(0,d.jsx)(ad,{view:c}),(0,d.jsxs)("span",{className:"flex items-center gap-3 px-1 pb-0.5",children:[(0,d.jsxs)("span",{className:"min-w-0 flex-1 space-y-0.5",children:[(0,d.jsx)("span",{className:"block truncate text-sm font-medium",children:aj[c].label}),(0,d.jsx)("span",{className:"block truncate text-xs text-muted-foreground",children:aj[c].hint})]}),f&&(0,d.jsx)(e.Check,{className:"size-4 shrink-0"})]})]},c)})})})})}function ad({view:a}){let b="block h-1 max-w-full rounded-full bg-foreground/20";return(0,d.jsx)("span",{className:"flex h-24 items-center justify-center rounded-lg bg-muted",children:"center"===a?(0,d.jsxs)("span",{className:"flex flex-col items-center gap-2.5",children:[(0,d.jsx)(z.ThursdayMark,{size:32}),(0,d.jsx)("span",{className:(0,N.cn)(b,"w-28")})]}):(0,d.jsxs)("span",{className:"grid w-full grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-4 px-6",children:[(0,d.jsxs)("span",{className:"space-y-1.5",children:[(0,d.jsx)("span",{className:(0,N.cn)(b,"w-24")}),(0,d.jsx)("span",{className:(0,N.cn)(b,"w-16")})]}),(0,d.jsx)(z.ThursdayMark,{size:32}),(0,d.jsx)("span",{children:(0,d.jsx)("span",{className:(0,N.cn)(b,"ml-auto w-20")})})]})})}function ae({value:a,onChange:b}){return(0,d.jsxs)("div",{className:"min-w-0 space-y-3 p-4",children:[(0,d.jsx)(Q,{label:"She calls you"}),(0,d.jsx)(m.RadioGroup,{"aria-label":"She calls you",value:a,onValueChange:a=>b(F.CallBackSchema.parse(a)),className:"gap-2.5",children:F.CALL_BACK_MODES.map(a=>(0,d.jsxs)("label",{className:"flex min-w-0 items-center gap-2.5 text-sm",children:[(0,d.jsx)(m.RadioGroupItem,{value:a}),(0,d.jsx)("span",{className:"truncate",children:F.CALL_BACK_LABEL[a]})]},a))}),(0,d.jsx)(w.SettingNote,{children:ak[a]}),"off"!==a&&(0,d.jsx)(w.SettingNote,{children:"Needs this tab open. A tab that has been silent since it loaded may not be allowed to make a sound — the desktop notification covers that."})]})}let ak={off:"Nothing opens a call but you.",waiting:"A job that stopped to ask gets her to ring you.",any:"Anything a bot finishes, she opens a line to tell you."};function af({value:a,onChange:b}){let c=(0,H.useDraft)(a.phrase,c=>b({...a,phrase:c}),{min:F.WAKE_PHRASE.min}),e=c.value.trim().split(/\s+/).length<2;return(0,d.jsxs)("div",{className:"min-w-0 space-y-3 p-4",children:[(0,d.jsx)(Q,{label:"Wake phrase",children:(0,d.jsx)(o.Switch,{"aria-label":"Answer to her name",checked:a.enabled,onCheckedChange:c=>b({...a,enabled:c})})}),(0,d.jsx)(k.Input,{value:c.value,maxLength:F.WAKE_PHRASE.max,spellCheck:!1,disabled:!a.enabled,onChange:a=>c.set(a.target.value),onBlur:c.commit,onKeyDown:c.onKeyDown,"aria-label":"Wake phrase",className:"font-mono text-sm"}),(0,d.jsx)(w.SettingNote,{children:a.enabled?e?"One word will wake her by accident — say hello first.":"Heard loosely, in English. Near misses count.":"Between calls, the browser listens for it and picks up."})]})}function ag({value:a,onChange:b}){let[c,e]=(0,g.useState)(!1),[f,h]=(0,g.useState)(!1),i=(0,I.useHotkeyLabel)((0,I.isCombo)(a.combo)?a.combo:null);return(0,d.jsxs)("div",{className:"min-w-0 space-y-3 p-4",children:[(0,d.jsx)(Q,{label:"Shortcut",children:(0,d.jsx)(o.Switch,{"aria-label":"Answer to a key",checked:a.enabled,onCheckedChange:c=>b({...a,enabled:c})})}),(0,d.jsx)("button",{type:"button",...I.HOTKEY_CAPTURE,disabled:!a.enabled,onClick:()=>{h(!1),e(!0)},onBlur:()=>e(!1),onKeyDown:c?c=>{if("Tab"===c.key)return;if(c.preventDefault(),c.stopPropagation(),"Escape"===c.key)return e(!1);let d=(0,I.comboOf)(c.nativeEvent);if(!d)return h(!0);h(!1),e(!1),b({...a,combo:d})}:void 0,className:(0,N.cn)("flex h-8 w-full items-center justify-center rounded-lg border px-3 font-mono text-sm outline-none transition-colors focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50",c?"border-foreground/40 text-muted-foreground":"border-border/60 hover:bg-muted/50"),children:c?"Press the keys…":i??"Set a shortcut"}),(0,d.jsx)(w.SettingNote,{children:f?"Hold Ctrl, Alt or Cmd — a plain key is typing.":c?"Esc to keep the one you have.":a.enabled?"Only while this tab has focus. Not while you are typing.":"Starts a call, and ends the one that is running."})]})}a.s(["ThursdaySetting",0,function(){let a=(0,G.useThursdayStore)(),b=(0,G.useThursdayStore)(a=>a.patch),{data:c=[],isLoading:e,error:f}=(0,M.useServerRoute)(h.queryKey.llmModel),g=(0,C.useThursdayFace)();if(e)return(0,d.jsx)(w.SettingSkeleton,{rows:4});if(f)return(0,d.jsx)(w.SettingError,{message:f.message});let i=c.some(a=>a.apiKeyName===r.LIVE_PROVIDER.apiKeyName&&a.hasKey);return(0,d.jsxs)(w.SettingScreen,{footer:(0,d.jsx)(w.SettingRailNote,{children:"Both of her prompts are assembled fresh on every call — memory, the roster and your skills go in. Changes here apply from the next call."}),children:[(0,d.jsx)(_,{value:g,onChange:C.setThursdayFace}),(0,d.jsx)(ac,{value:a.captionView,onChange:a=>b({captionView:a})}),(0,d.jsx)(R,{value:a,face:g,hasKey:i,onChange:b}),(0,d.jsx)(w.SettingGroup,{label:"Starting a call",children:(0,d.jsxs)(P,{columns:3,children:[(0,d.jsx)(af,{value:a.wake,onChange:a=>b({wake:a})}),(0,d.jsx)(ag,{value:a.hotkey,onChange:a=>b({hotkey:a})}),(0,d.jsx)(ae,{value:a.callBack,onChange:a=>b({callBack:a})})]})}),(0,d.jsx)(w.SettingGroup,{label:"History",children:(0,d.jsxs)(P,{columns:2,children:[(0,d.jsx)(x.CallHistoryRow,{}),(0,d.jsx)($,{})]})})]})}]),c()}catch(a){c(a)}},!1),203282,a=>{"use strict";var b=a.i(187924),c=a.i(752562),d=a.i(589027),e=a.i(474215),f=a.i(572131),g=a.i(340695),h=a.i(205522),i=a.i(545097),j=a.i(864037),k=a.i(96340),l=a.i(445432),m=a.i(483253),n=a.i(497895);let o=Array(m.SPECTRUM_BANDS).fill(0);a.s(["VoicePicker",0,function({voice:a,face:p,onChange:q}){let[r,s]=(0,f.useState)(!1),[t,u]=(0,f.useState)(a),[v,w]=(0,f.useState)(!1),[x,y]=(0,f.useState)(""),z=(0,f.useRef)(null),A=(0,f.useRef)(null),B=(0,f.useRef)(0),C=(0,f.useRef)(!1),D=(0,f.useCallback)(()=>A.current&&C.current?A.current.clip.read():o,[]),E=a=>{C.current=a,w(a)};(0,f.useEffect)(()=>{if(r)return()=>{let a=A.current;A.current=null,a&&(a.element.pause(),a.clip.close())}},[r]);let F=(a,b)=>{a===B.current&&(B.current++,E(!1),j.toast.add({type:"error",title:"Voice sample did not play",description:(0,n.errorToString)(b)}))},G=()=>{B.current++;let a=z.current;a&&(a.pause(),a.currentTime=0),E(!1)};return r?(0,b.jsxs)("div",{className:"@container space-y-2",children:[(0,b.jsx)("audio",{ref:z,onEnded:()=>E(!1),onError:a=>{C.current&&F(B.current,a.currentTarget.error?.message||"The clip could not be read.")},children:(0,b.jsx)("track",{kind:"captions"})}),(0,b.jsxs)("div",{className:"rounded-xl border border-border/60 p-3",children:[(0,b.jsxs)("div",{className:"mb-2 flex items-center gap-2",children:[(0,b.jsx)("span",{className:"font-mono text-[11px] text-muted-foreground",children:"click a name to hear it"}),(0,b.jsx)(g.Button,{variant:"ghost",size:"icon-xs",className:"ml-auto","aria-label":"Close",onClick:()=>{G(),s(!1),y(""),u(a)},children:(0,b.jsx)(e.X,{})})]}),(0,b.jsxs)("div",{className:"grid gap-4 @md:grid-cols-[11rem_minmax(0,1fr)]",children:[(0,b.jsxs)("div",{className:"flex flex-col items-center gap-2",children:[(0,b.jsx)(l.Face,{look:p,status:v?"speaking":"idle",getSpectrum:D,size:176,className:"w-44"}),(0,b.jsx)("span",{className:"text-sm font-medium",children:v?(0,b.jsx)(i.ShinyText,{text:t}):t}),(0,b.jsx)("span",{className:"h-4 font-mono text-[11px] text-muted-foreground",children:k.LIVE_VOICE_NOTE[t]})]}),(0,b.jsx)("div",{className:"max-h-56 min-w-0 overflow-y-auto",children:k.LIVE_VOICES.map(d=>(0,b.jsxs)("button",{type:"button",onClick:()=>(a=>{let b=z.current;if(!b)return;if(v&&a===t)return void G();u(a),y(""),A.current?.element!==b&&(A.current?.clip.close(),A.current={element:b,clip:(0,m.createClipTap)(b)}),A.current.clip.resume();let c=++B.current;b.src=(0,k.voiceSamplePath)(a),E(!0),b.play().catch(a=>{a instanceof DOMException&&"AbortError"===a.name||F(c,a)})})(d),className:(0,n.cn)("flex w-full items-center gap-2 rounded-md px-1.5 py-1.5 text-sm outline-none hover:bg-accent focus-visible:bg-accent",d===t&&"bg-accent text-accent-foreground"),children:[(0,b.jsx)("span",{className:"flex-1 text-left",children:v&&d===t?(0,b.jsx)(i.ShinyText,{text:d}):d}),(0,b.jsx)("span",{className:"shrink truncate font-mono text-[11px] text-muted-foreground",children:k.LIVE_VOICE_NOTE[d]}),(0,b.jsx)(c.Check,{className:(0,n.cn)("size-3.5 shrink-0",d===a?"opacity-100":"opacity-0")})]},d))})]})]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(h.Input,{value:x,onChange:a=>y(a.target.value),placeholder:"another voice id","aria-label":"Another voice id",spellCheck:!1,className:"font-mono text-sm"}),(0,b.jsx)(g.Button,{className:"shrink-0",onClick:()=>{let b=x.trim()||t;G(),s(!1),y(""),u(b),b!==a&&q(b)},children:"Save"})]})]}):(0,b.jsxs)("button",{type:"button",onClick:()=>s(!0),"aria-label":"Voice",className:(0,n.cn)(h.inputClassName,"flex items-center gap-2 text-left font-mono text-sm hover:border-ring"),children:[(0,b.jsx)("span",{className:"shrink-0",children:a}),(0,b.jsx)("span",{className:"min-w-0 truncate text-[11px] text-muted-foreground",children:k.LIVE_VOICE_NOTE[a]}),(0,b.jsx)(d.ChevronDown,{className:"ml-auto size-3.5 shrink-0 text-muted-foreground"})]})}])},969730,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f1531e9bfa2fb6a3893c63ba15bfa30d5265bac61",b.callServer,void 0,b.findSourceMapURL,"resetHistoryAction");a.s(["resetHistoryAction",0,c])},486832,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f2235ee325843a055425949538d38ef0c6b44c62c",b.callServer,void 0,b.findSourceMapURL,"setCallSkillsAction");a.s(["setCallSkillsAction",0,c])},351287,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f16c32567d23cea9e7ab3cdd3b239ca935ab9596d",b.callServer,void 0,b.findSourceMapURL,"deleteCallAction");a.s(["deleteCallAction",0,c])},103837,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f7a8dec2724ded35f3720cca3da5ae468b639a9f6",b.callServer,void 0,b.findSourceMapURL,"deleteEndedCallsAction");a.s(["deleteEndedCallsAction",0,c])},866491,a=>{"use strict";var b=a.i(164831);let c={name:"phone",size:24,node:[["path",{d:"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",key:"9njp5v"}]]};c.node;let d=(0,b.default)(c);a.s(["Phone",0,d],866491)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=_03_928f._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[703228,a=>a.a(async(b,c)=>{try{var d=a.i(187924),e=a.i(263359),f=a.i(689594),g=a.i(707963),h=a.i(141146),i=a.i(998697),j=a.i(483138),k=a.i(69095),l=a.i(696732),m=a.i(567826),n=a.i(403512),o=a.i(233540),p=a.i(917256),q=a.i(951675),r=a.i(201661),s=a.i(572131),t=a.i(767561),u=a.i(340695),v=a.i(316474),w=a.i(205522),x=a.i(846991),y=a.i(446181),z=a.i(950463),A=a.i(280281),B=a.i(621958),C=a.i(546893),D=a.i(287702),E=a.i(619477),F=a.i(968990),G=a.i(897112),H=a.i(62995),I=a.i(752728),J=a.i(313237),K=a.i(759497),L=a.i(497895),M=b([x]);[x]=M.then?(await M)():M;let W={browser:l.Globe,computer:e.AppWindow,"find-skills":o.Search,"interactive-page":m.MousePointer2,"skill-creator":p.SquarePen};function N({skill:a}){let[b,c]=(0,J.useServerAction)(G.deleteSkillAction,{onOk:()=>(0,K.revalidate)(t.queryKey.skills)}),[e]=(0,J.useServerAction)(H.setSkillDisabledAction,{onOk:()=>(0,K.revalidate)(t.queryKey.skills)}),g=async()=>{await y.notify.confirm({title:`Delete ${a.name}?`,description:"Every file in this skill is deleted for good.",okText:"Delete",destructive:!0})&&b(a.dir)},i="default"===a.source&&W[a.dir]||f.BookMarked;return(0,d.jsxs)("div",{className:"group flex items-center transition-colors hover:bg-muted/50",children:[(0,d.jsxs)("button",{type:"button",onClick:()=>{var b;return b=a,y.notify.component({className:"sm:max-w-4xl",renderer:()=>(0,d.jsx)(O,{skill:b})})},className:"flex min-w-0 flex-1 items-center gap-3 py-4 pl-4 text-left outline-none focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-inset",children:[(0,d.jsx)("span",{className:(0,L.cn)("grid size-10 shrink-0 place-items-center rounded-lg bg-muted text-muted-foreground",a.disabled&&"opacity-45"),children:(0,d.jsx)(i,{className:"size-4"})}),(0,d.jsxs)("span",{className:(0,L.cn)("min-w-0 flex-1 space-y-0.5",a.disabled&&"opacity-45"),children:[(0,d.jsx)("span",{className:"block truncate text-sm font-medium",children:a.name}),(0,d.jsx)("span",{className:"line-clamp-2 text-xs leading-relaxed text-muted-foreground",children:a.description})]}),(0,d.jsx)(h.ChevronRight,{className:"size-4 shrink-0 text-muted-foreground/60 group-hover:text-foreground"})]}),(0,d.jsxs)("div",{className:"mr-4 ml-5 flex w-18 shrink-0 items-center justify-end gap-3",children:[(0,d.jsx)(A.Switch,{checked:!a.disabled,onCheckedChange:b=>e(a.source,a.dir,!b),"aria-label":`${a.name} on or off`,className:"shrink-0"}),"custom"===a.source?(0,d.jsx)(u.Button,{size:"icon-sm",variant:"ghost",loading:c,onClick:g,className:"shrink-0 text-muted-foreground",children:(0,d.jsx)(q.Trash2,{})}):(0,d.jsx)("span",{className:"size-7 shrink-0"})]})]})}function O({skill:a}){let[b,c]=(0,s.useState)(""),[e,f]=(0,s.useState)("SKILL.md");return(0,d.jsx)(E.SettingDialogContent,{title:a.name,description:(0,d.jsx)(P,{skill:a,path:e??b}),children:(0,d.jsxs)("div",{className:"flex h-[36rem] divide-x divide-border/60 overflow-hidden rounded-xl border border-border/60 bg-background",children:[(0,d.jsxs)("div",{className:"flex w-44 shrink-0 flex-col overflow-y-auto bg-muted/20 py-1",children:[b&&(0,d.jsxs)("button",{type:"button",onClick:()=>c(b.split("/").slice(0,-1).join("/")),className:"mx-1 mb-1 flex items-center gap-1 rounded-md px-2 py-1 text-left font-mono text-[11px] text-muted-foreground outline-none hover:bg-muted/50 hover:text-foreground focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-inset",children:[(0,d.jsx)(g.ChevronLeft,{className:"size-3 shrink-0"}),(0,d.jsx)("span",{className:"truncate",children:b.split("/").pop()})]}),(0,d.jsx)(R,{source:a.source,dir:a.dir,path:b,current:e,onPick:a=>{let d=b?`${b}/${a.name}`:a.name;"dir"===a.kind?c(d):f(d)}})]}),(0,d.jsx)("div",{className:"min-w-0 flex-1 overflow-y-auto",children:e?(0,d.jsx)(T,{source:a.source,dir:a.dir,path:e}):(0,d.jsx)("p",{className:"p-6 text-sm text-muted-foreground/60",children:"Pick a file"})})]})})}function P({skill:a,path:b}){if(!a)return(0,d.jsx)("span",{className:"truncate font-mono text-[11px] text-muted-foreground/60",children:"Pick a skill"});let c=[a.name,...b.split("/").filter(Boolean)];return(0,d.jsx)("span",{className:"flex min-w-0 items-center gap-1 font-mono text-[11px] text-muted-foreground",children:c.map((a,b)=>(0,d.jsxs)("span",{className:"flex min-w-0 items-center gap-1",children:[b>0&&(0,d.jsx)(h.ChevronRight,{className:"size-3 shrink-0 opacity-50"}),(0,d.jsx)("span",{className:(0,L.cn)("truncate",b===c.length-1&&"text-foreground"),children:a})]},`${b}-${a}`))})}function Q({icon:a,label:b,active:c,hasChildren:e,onClick:f}){return(0,d.jsxs)("button",{type:"button",onClick:f,className:(0,L.cn)("mx-1 flex items-center gap-1.5 rounded-md px-2 py-1 text-left text-xs outline-none focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:ring-inset",c?"bg-secondary text-foreground":"text-muted-foreground hover:bg-muted/50 hover:text-foreground"),children:[(0,d.jsx)("span",{className:"shrink-0 text-muted-foreground/70 [&>svg]:size-3",children:a}),(0,d.jsx)("span",{className:"min-w-0 flex-1 truncate",children:b}),e&&(0,d.jsx)(h.ChevronRight,{className:"size-3 shrink-0 text-muted-foreground/50"})]})}function R({source:a,dir:b,path:c,current:e,onPick:f}){let{data:g,isLoading:h,error:l}=(0,K.useServerRoute)(t.queryKey.skillNode(a,b,c));return l?(0,d.jsx)("p",{className:"p-3 font-mono text-xs text-destructive",children:l.message}):h||!g?(0,d.jsxs)("div",{className:"space-y-2 p-2",children:[(0,d.jsx)(z.Skeleton,{className:"h-5 w-full"}),(0,d.jsx)(z.Skeleton,{className:"h-5 w-4/5"})]}):"dir"!==g.kind?null:(0,d.jsxs)(d.Fragment,{children:[g.entries.map(a=>(0,d.jsx)(Q,{icon:"dir"===a.kind?(0,d.jsx)(k.Folder,{}):a.name.endsWith(".md")?(0,d.jsx)(j.FileText,{}):(0,d.jsx)(i.File,{}),label:a.name,hasChildren:"dir"===a.kind,active:(c?`${c}/${a.name}`:a.name)===e,onClick:()=>f(a)},a.name)),0===g.entries.length&&(0,d.jsx)("p",{className:"p-3 text-xs text-muted-foreground/60",children:"Empty folder"})]})}function S({content:a}){let b=/^---\r?\n([\s\S]*?)\r?\n---[ \t]*\r?\n?/.exec(a),c=b?.[1].trim(),e=b?a.slice(b[0].length):a;return(0,d.jsxs)("div",{className:"min-w-0",children:[c&&(0,d.jsx)("pre",{className:"border-b border-border/60 bg-muted/20 px-5 py-3 font-mono text-[11px] leading-relaxed whitespace-pre-wrap text-muted-foreground",children:c}),(0,d.jsx)("div",{className:"px-5 py-4 text-sm leading-relaxed",children:(0,d.jsx)(x.Markdown,{children:e})})]})}function T({source:a,dir:b,path:c}){let{data:e,isLoading:f,error:g}=(0,K.useServerRoute)(t.queryKey.skillNode(a,b,c));if(g)return(0,d.jsx)("p",{className:"p-4 font-mono text-xs text-destructive",children:g.message});if(f||!e)return(0,d.jsxs)("div",{className:"space-y-3 p-5",children:[(0,d.jsx)(z.Skeleton,{className:"h-5 w-2/3"}),(0,d.jsx)(z.Skeleton,{className:"h-4 w-full"}),(0,d.jsx)(z.Skeleton,{className:"h-4 w-5/6"})]});if("file"!==e.kind)return null;let h=c.split("/").pop()??"";return(0,d.jsxs)("div",{children:[(0,d.jsxs)("div",{className:"sticky top-0 z-20 flex items-center justify-between gap-2 border-b border-border/60 bg-background/90 px-5 py-2 font-mono text-[11px] text-muted-foreground backdrop-blur",children:[(0,d.jsx)("span",{className:"truncate",children:h}),(0,d.jsx)("span",{className:"shrink-0",children:(0,L.formatBytes)(e.size)})]}),null===e.content?(0,d.jsx)("p",{className:"px-5 py-4 text-sm text-muted-foreground/60",children:"Not a text file — the agent can still read it from disk."}):h.toLowerCase().endsWith(".md")?(0,d.jsx)(S,{content:e.content}):(0,d.jsx)("pre",{className:"overflow-x-auto px-5 py-4 font-mono text-[13px] leading-relaxed whitespace-pre text-foreground/90",children:e.content})]})}function U(){return y.notify.component({className:"sm:max-w-lg",renderer:({close:a})=>(0,d.jsx)(V,{onDone:a})})}function V({onDone:a}){let[b,c]=(0,s.useState)("write"),[e,f]=(0,s.useState)(""),[g,h]=(0,s.useState)(""),[i,j]=(0,s.useState)(""),[k,l]=(0,s.useState)(null),[m,o]=(0,s.useState)(!1),p=(0,s.useRef)(null),q={errorMessage:!1,onOk:()=>{(0,K.revalidate)(t.queryKey.skills),a()}},[x,y,,z]=(0,J.useServerAction)(F.createSkillAction,q),[A,G,,H]=(0,J.useServerAction)(I.uploadSkillAction,q),M=y||G,N="write"===b?z:H,O=!M&&("write"===b?e.trim()&&g.trim()&&i.trim():null!==k),P=async()=>{var a;!O||("write"===b?x({name:e.trim(),description:g.trim(),content:i}):k&&A({fileName:k.name,base64:await (a=k,new Promise((b,c)=>{let d=new FileReader;d.onload=()=>{let a=d.result;b(a.slice(a.indexOf(",")+1))},d.onerror=()=>c(d.error),d.readAsDataURL(a)}))}))},Q=a=>{let b=a?.[0]??null;b&&l(b)};return(0,d.jsxs)(E.SettingDialogContent,{title:"New skill",description:"Instructions the agent loads by name when a task calls for them.",footer:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(u.Button,{variant:"ghost",onClick:a,children:"Cancel"}),(0,d.jsxs)(u.Button,{disabled:!O,loading:M,onClick:P,children:[!M&&("write"===b?(0,d.jsx)(n.Plus,{}):(0,d.jsx)(r.Upload,{})),"write"===b?"Create":"Upload"]})]}),children:[(0,d.jsxs)(B.Tabs,{value:b,onValueChange:a=>c(a),children:[(0,d.jsxs)(B.TabsList,{className:"w-full",children:[(0,d.jsx)(B.TabsTrigger,{value:"write",children:"Write"}),(0,d.jsx)(B.TabsTrigger,{value:"upload",children:"Upload"})]}),(0,d.jsxs)(B.TabsContent,{value:"write",className:"space-y-5 pt-4",children:[(0,d.jsxs)(v.Field,{children:[(0,d.jsx)(v.FieldLabel,{htmlFor:"skill-name",children:"Name"}),(0,d.jsxs)(v.FieldContent,{children:[(0,d.jsx)(w.Input,{id:"skill-name",value:e,onChange:a=>f(a.target.value),placeholder:"deploy-checklist",spellCheck:!1,autoFocus:!0}),(0,d.jsxs)("p",{className:"font-mono text-[11px] text-muted-foreground",children:[D.PATHS.skills.custom,"/",e.trim()||"…","/SKILL.md"]})]})]}),(0,d.jsxs)(v.Field,{children:[(0,d.jsx)(v.FieldLabel,{htmlFor:"skill-description",children:"Description"}),(0,d.jsx)(v.FieldContent,{children:(0,d.jsx)(w.Input,{id:"skill-description",value:g,onChange:a=>h(a.target.value),placeholder:"When to use it — this is how the agent decides to load it"})})]}),(0,d.jsxs)(v.Field,{children:[(0,d.jsx)(v.FieldLabel,{htmlFor:"skill-content",children:"Content"}),(0,d.jsx)(C.Textarea,{id:"skill-content",value:i,onChange:a=>j(a.target.value),placeholder:"Markdown. The steps, the rules, the examples.",className:"min-h-40 resize-none font-mono text-xs"})]})]}),(0,d.jsxs)(B.TabsContent,{value:"upload",className:"space-y-4 pt-4",children:[(0,d.jsxs)("button",{type:"button",onClick:()=>p.current?.click(),onDragOver:a=>{a.preventDefault(),o(!0)},onDragLeave:()=>o(!1),onDrop:a=>{a.preventDefault(),o(!1),Q(a.dataTransfer.files)},className:(0,L.cn)("flex w-full flex-col items-center gap-2 rounded-xl border border-dashed px-6 py-10 text-center outline-none transition-colors focus-visible:ring-3 focus-visible:ring-ring/50",m?"border-foreground/60 bg-muted/60":"border-border hover:bg-muted/40"),children:[(0,d.jsx)(r.Upload,{className:"size-5 text-muted-foreground"}),k?(0,d.jsxs)("span",{className:"text-sm",children:[k.name,(0,d.jsx)("span",{className:"ml-2 font-mono text-[11px] text-muted-foreground",children:(0,L.formatBytes)(k.size)})]}):(0,d.jsx)("span",{className:"text-sm text-muted-foreground",children:"Drop a file here, or click to choose"})]}),(0,d.jsx)("input",{ref:p,type:"file",accept:".md,.zip,.skill",className:"hidden",onChange:a=>Q(a.target.files)}),(0,d.jsxs)("div",{className:"space-y-1 text-xs text-muted-foreground",children:[(0,d.jsx)("p",{className:"font-medium text-foreground/80",children:"File requirements"}),(0,d.jsxs)("p",{children:["A ",(0,d.jsx)("span",{className:"font-mono",children:".md"})," file needs a YAML block with the skill's name and description."]}),(0,d.jsxs)("p",{children:["A ",(0,d.jsx)("span",{className:"font-mono",children:".zip"})," or"," ",(0,d.jsx)("span",{className:"font-mono",children:".skill"})," archive needs a SKILL.md inside — the rest of its folder comes along."]})]})]})]}),N&&(0,d.jsx)("p",{className:"font-mono text-xs text-destructive",children:N})]})}a.s(["SkillsSetting",0,function(){let[a,b]=(0,s.useState)(""),{data:c,isLoading:e,error:f}=(0,K.useServerRoute)(t.queryKey.skills),g=c??[];if(e)return(0,d.jsx)(E.SettingSkeleton,{rows:4});if(f)return(0,d.jsx)(E.SettingError,{message:f.message});let h=a.trim().toLowerCase(),i=g.filter(a=>!h||`${a.name} ${a.description}`.toLowerCase().includes(h)),j=g.filter(a=>!a.disabled).length;return(0,d.jsxs)(E.SettingScreen,{footer:(0,d.jsxs)(E.SettingRailNote,{children:[g.filter(a=>"default"===a.source).length," shipped · ",g.filter(a=>"custom"===a.source).length," ","installed"]}),children:[(0,d.jsx)(E.SettingToolbar,{count:`${j} on \xb7 ${g.length-j} off`,children:(0,d.jsx)(E.SettingFilter,{value:a,onChange:b,placeholder:"Filter skills"})}),(0,d.jsx)(E.SettingGroup,{label:"Custom",hint:"yours — added here · wins a name clash",children:(0,d.jsx)(E.SettingItems,{addRow:{label:"Add skill",onClick:U},children:i.filter(a=>"custom"===a.source).map(a=>(0,d.jsx)(N,{skill:a},`custom/${a.dir}`))})}),(0,d.jsx)(E.SettingGroup,{label:"Default",hint:"ships with the app · switch off, can't edit or delete",children:(0,d.jsx)(E.SettingItems,{children:i.filter(a=>"default"===a.source).map(a=>(0,d.jsx)(N,{skill:a},`default/${a.dir}`))})}),j>D.PROMPT_CROWDED.skills&&(0,d.jsxs)(E.SettingNote,{children:[j," skills are on. Each is a line in every prompt a bot reads, and one more to look past when it picks."]})]})},"openSkillCreate",0,U]),c()}catch(a){c(a)}},!1),968990,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f98b9d85dd58ad1d3e9b53a3a1799b27bffc75e94",b.callServer,void 0,b.findSourceMapURL,"createSkillAction");a.s(["createSkillAction",0,c])},897112,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7ffe58353e8a289deea66dd070a79a480a2ef64a81",b.callServer,void 0,b.findSourceMapURL,"deleteSkillAction");a.s(["deleteSkillAction",0,c])},62995,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7f52bfec15b438c9480ce2a68692632c2afb3f006a",b.callServer,void 0,b.findSourceMapURL,"setSkillDisabledAction");a.s(["setSkillDisabledAction",0,c])},752728,a=>{"use strict";var b=a.i(405050);let c=(0,b.createServerReference)("7fd39b524aaead025e24a9b83ba354398abecf491b",b.callServer,void 0,b.findSourceMapURL,"uploadSkillAction");a.s(["uploadSkillAction",0,c])},263359,a=>{"use strict";var b=a.i(164831);let c={name:"app-window",size:24,node:[["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}],["path",{d:"M10 4v4",key:"pp8u80"}],["path",{d:"M2 8h20",key:"d11cs7"}],["path",{d:"M6 4v4",key:"1svtjw"}]]};c.node;let d=(0,b.default)(c);a.s(["AppWindow",0,d],263359)},696732,a=>{"use strict";var b=a.i(164831);let c={name:"globe",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]};c.node;let d=(0,b.default)(c);a.s(["Globe",0,d],696732)},567826,a=>{"use strict";var b=a.i(164831);let c={name:"mouse-pointer-2",size:24,node:[["path",{d:"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z",key:"edeuup"}]]};c.node;let d=(0,b.default)(c);a.s(["MousePointer2",0,d],567826)},917256,a=>{"use strict";var b=a.i(164831);let c={name:"square-pen",size:24,node:[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]],aliases:["pen-box","edit","pen-square"]};c.node;let d=(0,b.default)(c);a.s(["SquarePen",0,d],917256)},201661,a=>{"use strict";var b=a.i(164831);let c={name:"upload",size:24,node:[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]};c.node;let d=(0,b.default)(c);a.s(["Upload",0,d],201661)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=_0g_rlog._.js.map
|