bazilion 0.5.1 → 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.
Files changed (122) hide show
  1. package/README.md +17 -12
  2. package/dist/cli.js +383 -152
  3. package/dist/cli.js.map +1 -1
  4. package/dist/daemon.js +238 -14064
  5. package/dist/daemon.js.map +1 -1
  6. package/dist/web/client/assets/AgentAvatar-JYijLvZ2.js +1 -0
  7. package/dist/web/client/assets/AgentTabs-DioGqUVR.js +1 -0
  8. package/dist/web/client/assets/Button-ByiV6fpd.js +1 -0
  9. package/dist/web/client/assets/ChatPane-DzEgOEqS.js +74 -0
  10. package/dist/web/client/assets/ConfigTabs-pY-V0Rie.js +1 -0
  11. package/dist/web/client/assets/FieldRow-CNKma5LE.js +1 -0
  12. package/dist/web/client/assets/MembersEditor-C6UpqDdV.js +1 -0
  13. package/dist/web/client/assets/SpawnTeamModal-BEkNCKXm.js +1 -0
  14. package/dist/web/client/assets/TemplatesTabs-Da7mg9FI.js +1 -0
  15. package/dist/web/client/assets/_id-BdKmo0gb.js +1 -0
  16. package/dist/web/client/assets/_id-LT6Ejjr0.js +1 -0
  17. package/dist/web/client/assets/_id-MR2XjWh0.js +1 -0
  18. package/dist/web/client/assets/_id-_6jIt0_-.js +1 -0
  19. package/dist/web/client/assets/agents-0arKbVYG.js +1 -0
  20. package/dist/web/client/assets/config-BSAVT-17.js +3 -0
  21. package/dist/web/client/assets/groups-BqTkhHes.js +1 -0
  22. package/dist/web/client/assets/inbox-ozoCXzr5.js +1 -0
  23. package/dist/web/client/assets/index-iayCEuU2.js +12 -0
  24. package/dist/web/client/assets/jsx-runtime-DGeXAQPT.js +1 -0
  25. package/dist/web/client/assets/login-D8lNr2SX.js +1 -0
  26. package/dist/web/client/assets/mcp-BLnngDsj.js +1 -0
  27. package/dist/web/client/assets/memory-D1GQjEvN.js +1 -0
  28. package/dist/web/client/assets/preload-helper-CvnapA2_.js +1 -0
  29. package/dist/web/client/assets/profile-groups-C2yJPTaE.js +1 -0
  30. package/dist/web/client/assets/profiles-BV7AAZjj.js +1 -0
  31. package/dist/web/client/assets/routes-DSHQLA7K.js +1 -0
  32. package/dist/web/client/assets/services-BbCJe1Du.js +1 -0
  33. package/dist/web/client/assets/skills-C6czKR5I.js +1 -0
  34. package/dist/web/client/assets/styles-C06axZZk.css +2 -0
  35. package/dist/web/client/assets/telegram-gE4j8gte.js +1 -0
  36. package/dist/web/client/assets/tokens-D2_O9ARe.js +1 -0
  37. package/dist/web/client/assets/triggers-WljnfEfJ.js +1 -0
  38. package/dist/web/client/assets/welcome-Dn-zvmBE.js +1 -0
  39. package/dist/web/client/assets/wire-constants-BkT5-597.js +1 -0
  40. package/dist/web/client/baziu.svg +8 -0
  41. package/dist/web/server/assets/AgentAvatar-8gTAy_tP.js +37 -0
  42. package/dist/web/server/assets/AgentTabs-BOjTN7QF.js +34 -0
  43. package/dist/web/server/assets/Button-Dsnw22OF.js +17 -0
  44. package/dist/web/server/assets/ChatPane-BvpswYvF.js +1084 -0
  45. package/dist/web/server/assets/ConfigTabs-CyuxzesF.js +41 -0
  46. package/dist/web/server/assets/FieldRow-DwyqycWI.js +94 -0
  47. package/dist/web/server/assets/MembersEditor-BWQztvrX.js +131 -0
  48. package/dist/web/server/assets/Sidebar-DmEiewRN.js +529 -0
  49. package/dist/web/server/assets/SpawnTeamModal-dSN421k_.js +107 -0
  50. package/dist/web/server/assets/TemplatesTabs---7h5GYa.js +30 -0
  51. package/dist/web/server/assets/_id-81NrHA5d.js +16 -0
  52. package/dist/web/server/assets/_id-BKev9H1p.js +12 -0
  53. package/dist/web/server/assets/_id-BNwlbWHP.js +24 -0
  54. package/dist/web/server/assets/_id-BqnDy_Ca.js +16 -0
  55. package/dist/web/server/assets/_id-CRqqi8IE.js +161 -0
  56. package/dist/web/server/assets/_id-CXg-Blec.js +367 -0
  57. package/dist/web/server/assets/_id-CnQflrRv.js +16 -0
  58. package/dist/web/server/assets/_id-D0ytyXGY.js +662 -0
  59. package/dist/web/server/assets/_id-D8duqgd5.js +27 -0
  60. package/dist/web/server/assets/_id-DDixKEud.js +467 -0
  61. package/dist/web/server/assets/_id-D_Ew11ED.js +28 -0
  62. package/dist/web/server/assets/_id-Sjw0zhA6.js +38 -0
  63. package/dist/web/server/assets/_tanstack-start-manifest_v-DBlFH2gg.js +178 -0
  64. package/dist/web/server/assets/agents-C7SBPN0M.js +210 -0
  65. package/dist/web/server/assets/agents-ChcAJUI5.js +14 -0
  66. package/dist/web/server/assets/agents-k5QURC4I.js +26 -0
  67. package/dist/web/server/assets/auth-DzRAMwVt.js +26 -0
  68. package/dist/web/server/assets/config-Bq3o924J.js +12 -0
  69. package/dist/web/server/assets/config-CHaCv89D.js +19 -0
  70. package/dist/web/server/assets/config-CdVjqjin.js +391 -0
  71. package/dist/web/server/assets/createServerRpc-CeKECg65.js +12 -0
  72. package/dist/web/server/assets/createSsrRpc-ZBGxhl8t.js +16 -0
  73. package/dist/web/server/assets/daemon-client-2NRMzlTr.js +96 -0
  74. package/dist/web/server/assets/empty-plugin-adapters-DKUlnwwl.js +5 -0
  75. package/dist/web/server/assets/groups-CbSwND2r.js +12 -0
  76. package/dist/web/server/assets/groups-CeRRlZaZ.js +150 -0
  77. package/dist/web/server/assets/groups-pk4CYSuf.js +21 -0
  78. package/dist/web/server/assets/inbox-Bxb3W04M.js +27 -0
  79. package/dist/web/server/assets/inbox-CkiSvD14.js +42 -0
  80. package/dist/web/server/assets/inbox-DU27iHv_.js +133 -0
  81. package/dist/web/server/assets/login-CNznncgA.js +58 -0
  82. package/dist/web/server/assets/login-CQybKk7Y.js +74 -0
  83. package/dist/web/server/assets/mcp-BU_kKENi.js +268 -0
  84. package/dist/web/server/assets/mcp-BsFKEoXt.js +12 -0
  85. package/dist/web/server/assets/mcp-CKqwG4mt.js +12 -0
  86. package/dist/web/server/assets/memory-BaYnfm7K.js +28 -0
  87. package/dist/web/server/assets/memory-CQaqWnyM.js +284 -0
  88. package/dist/web/server/assets/memory-Ns2-Z31p.js +16 -0
  89. package/dist/web/server/assets/profile-groups-CiU06yN1.js +28 -0
  90. package/dist/web/server/assets/profile-groups-D21MYoLM.js +208 -0
  91. package/dist/web/server/assets/profile-groups-aoJleXHP.js +12 -0
  92. package/dist/web/server/assets/profiles-C6a3RKgu.js +26 -0
  93. package/dist/web/server/assets/profiles-CZ5NkmVw.js +12 -0
  94. package/dist/web/server/assets/profiles-LxcC_L6n.js +453 -0
  95. package/dist/web/server/assets/router-BpBZgRwn.js +460 -0
  96. package/dist/web/server/assets/routes-C61gBiXa.js +57 -0
  97. package/dist/web/server/assets/routes-Ce2VWrU9.js +33 -0
  98. package/dist/web/server/assets/routes-V9URcp1v.js +14 -0
  99. package/dist/web/server/assets/services-B91w2f-X.js +94 -0
  100. package/dist/web/server/assets/services-Ccc5s2bS.js +17 -0
  101. package/dist/web/server/assets/services-DhRiNeq0.js +12 -0
  102. package/dist/web/server/assets/skills-CFIWVg32.js +12 -0
  103. package/dist/web/server/assets/skills-CpsyR_WA.js +12 -0
  104. package/dist/web/server/assets/skills-dLyBZb3B.js +261 -0
  105. package/dist/web/server/assets/start-CYDpZ6cb.js +4 -0
  106. package/dist/web/server/assets/telegram-BdaUIjvs.js +12 -0
  107. package/dist/web/server/assets/telegram-DfAddLdv.js +583 -0
  108. package/dist/web/server/assets/telegram-T3l9KtiE.js +12 -0
  109. package/dist/web/server/assets/tokens-BCz3PSoT.js +12 -0
  110. package/dist/web/server/assets/tokens-CkKqrtk-.js +193 -0
  111. package/dist/web/server/assets/tokens-DdpnfV_Y.js +14 -0
  112. package/dist/web/server/assets/triggers-BcH_6PW1.js +26 -0
  113. package/dist/web/server/assets/triggers-BcTTwMfy.js +16 -0
  114. package/dist/web/server/assets/triggers-BzJG1nN5.js +191 -0
  115. package/dist/web/server/assets/welcome-CP4CZ9B6.js +85 -0
  116. package/dist/web/server/assets/wire-constants-Deb4NxBb.js +16 -0
  117. package/dist/web/server/server.js +5911 -0
  118. package/dist/web-server.js +42 -0
  119. package/dist/web-server.js.map +1 -0
  120. package/dist/worker.js +65 -2
  121. package/dist/worker.js.map +1 -1
  122. package/package.json +18 -12
@@ -0,0 +1,21 @@
1
+ import { t as createServerFn } from "../server.js";
2
+ import { t as createServerRpc } from "./createServerRpc-CeKECg65.js";
3
+ import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
4
+ //#region src/routes/groups/index.tsx?tss-serverfn-split
5
+ var fetchGroupsData_createServerFn_handler = createServerRpc({
6
+ id: "3456e4a7ccfe06623459976ccede09e048e75baf27fcc22c5877059c175eb6f8",
7
+ name: "fetchGroupsData",
8
+ filename: "src/routes/groups/index.tsx"
9
+ }, (opts) => fetchGroupsData.__executeServer(opts));
10
+ var fetchGroupsData = createServerFn({ method: "GET" }).handler(fetchGroupsData_createServerFn_handler, async () => {
11
+ const c = daemonClient();
12
+ const [groups, agents] = await Promise.all([c.get("/api/groups"), c.get("/api/agents?includeArchived=true")]);
13
+ const memberCounts = {};
14
+ for (const a of agents) memberCounts[a.groupId] = (memberCounts[a.groupId] ?? 0) + 1;
15
+ return {
16
+ groups,
17
+ memberCounts
18
+ };
19
+ });
20
+ //#endregion
21
+ export { fetchGroupsData_createServerFn_handler };
@@ -0,0 +1,27 @@
1
+ import { t as createServerFn } from "../server.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
3
+ import { createFileRoute, lazyRouteComponent, redirect } from "@tanstack/react-router";
4
+ //#region src/routes/agents/$id/inbox.tsx
5
+ var $$splitComponentImporter = () => import("./inbox-DU27iHv_.js");
6
+ var fetchInbox = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(createSsrRpc("2cd8c6ec40e2e2d9518b5f127a518ecd83a2222d85665cc61d5144bcf59ed4fb"));
7
+ var Route = createFileRoute("/agents/$id/inbox")({
8
+ validateSearch: (s) => ({
9
+ unread: s.unread === "1" ? "1" : void 0,
10
+ id: typeof s.id === "string" ? s.id : void 0
11
+ }),
12
+ loaderDeps: ({ search }) => ({
13
+ unreadOnly: search.unread === "1",
14
+ selectedId: search.id ?? ""
15
+ }),
16
+ loader: async ({ params, deps }) => {
17
+ const data = await fetchInbox({ data: {
18
+ id: params.id,
19
+ ...deps
20
+ } });
21
+ if (!data) throw redirect({ to: "/agents" });
22
+ return data;
23
+ },
24
+ component: lazyRouteComponent($$splitComponentImporter, "component")
25
+ });
26
+ //#endregion
27
+ export { Route as t };
@@ -0,0 +1,42 @@
1
+ import { t as createServerFn } from "../server.js";
2
+ import { t as createServerRpc } from "./createServerRpc-CeKECg65.js";
3
+ import { n as daemonClient, r as ApiClientError } from "./daemon-client-2NRMzlTr.js";
4
+ //#region src/routes/agents/$id/inbox.tsx?tss-serverfn-split
5
+ var fetchInbox_createServerFn_handler = createServerRpc({
6
+ id: "2cd8c6ec40e2e2d9518b5f127a518ecd83a2222d85665cc61d5144bcf59ed4fb",
7
+ name: "fetchInbox",
8
+ filename: "src/routes/agents/$id/inbox.tsx"
9
+ }, (opts) => fetchInbox.__executeServer(opts));
10
+ var fetchInbox = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(fetchInbox_createServerFn_handler, async ({ data }) => {
11
+ const c = daemonClient();
12
+ let resolved;
13
+ try {
14
+ resolved = await c.get(`/api/agents/${encodeURIComponent(data.id)}`);
15
+ } catch (err) {
16
+ if (err instanceof ApiClientError && err.status === 404) return null;
17
+ throw err;
18
+ }
19
+ const inboxQs = data.unreadOnly ? "?unread=1" : "";
20
+ const [list, unread, allAgents] = await Promise.all([
21
+ c.get(`/api/agents/${encodeURIComponent(resolved.agent.id)}/messages${inboxQs}`),
22
+ c.get(`/api/agents/${encodeURIComponent(resolved.agent.id)}/messages?unread=1`),
23
+ c.get("/api/agents?includeArchived=true")
24
+ ]);
25
+ let selected = null;
26
+ if (data.selectedId) try {
27
+ selected = await c.get(`/api/messages/${encodeURIComponent(data.selectedId)}`);
28
+ } catch (err) {
29
+ if (!(err instanceof ApiClientError) || err.status !== 404) throw err;
30
+ }
31
+ const agentNames = {};
32
+ for (const a of allAgents) agentNames[a.id] = a.name;
33
+ return {
34
+ resolved,
35
+ messages: [...list.messages].reverse(),
36
+ unreadCount: unread.messages.length,
37
+ selected,
38
+ agentNames
39
+ };
40
+ });
41
+ //#endregion
42
+ export { fetchInbox_createServerFn_handler };
@@ -0,0 +1,133 @@
1
+ import { t as Route } from "./inbox-Bxb3W04M.js";
2
+ import { t as AgentTabs } from "./AgentTabs-BOjTN7QF.js";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/routes/agents/$id/inbox.tsx?tsr-split=component
5
+ function decodeText(payload) {
6
+ try {
7
+ const obj = JSON.parse(payload);
8
+ if (typeof obj.text === "string") return obj.text;
9
+ } catch {}
10
+ return payload;
11
+ }
12
+ function InboxPage() {
13
+ const { resolved, messages, unreadCount, selected, agentNames } = Route.useLoaderData();
14
+ const unreadOnly = Route.useSearch().unread === "1";
15
+ const misaddressed = Boolean(selected && selected.toAgentId !== resolved.agent.id);
16
+ function agentLabel(aid) {
17
+ const name = agentNames[aid];
18
+ return name ? `${name} (${aid.slice(0, 8)})` : aid.slice(0, 8);
19
+ }
20
+ return /* @__PURE__ */ jsxs("main", {
21
+ className: "mx-auto max-w-5xl px-6 py-8",
22
+ children: [
23
+ /* @__PURE__ */ jsx("h1", {
24
+ className: "font-serif text-3xl text-foreground mb-1",
25
+ children: resolved.agent.name
26
+ }),
27
+ /* @__PURE__ */ jsxs("p", {
28
+ className: "text-xs text-muted-foreground mb-6",
29
+ children: [
30
+ /* @__PURE__ */ jsxs("code", {
31
+ className: "font-mono",
32
+ children: [resolved.agent.id.slice(0, 8), "…"]
33
+ }),
34
+ " · unread: ",
35
+ unreadCount
36
+ ]
37
+ }),
38
+ /* @__PURE__ */ jsx(AgentTabs, {
39
+ agentId: resolved.agent.id,
40
+ active: "inbox",
41
+ archived: resolved.agent.status === "archived"
42
+ }),
43
+ /* @__PURE__ */ jsxs("div", {
44
+ className: "grid grid-cols-1 md:grid-cols-[360px_1fr] gap-6",
45
+ children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
46
+ className: "flex gap-1 border-b mb-3",
47
+ children: [/* @__PURE__ */ jsx("a", {
48
+ href: `/agents/${resolved.agent.id}/inbox`,
49
+ className: `px-3 py-1.5 text-sm border-b-2 -mb-px ${!unreadOnly ? "border-primary text-primary font-semibold" : "border-transparent text-muted-foreground"}`,
50
+ children: "all"
51
+ }), /* @__PURE__ */ jsx("a", {
52
+ href: `/agents/${resolved.agent.id}/inbox?unread=1`,
53
+ className: `px-3 py-1.5 text-sm border-b-2 -mb-px ${unreadOnly ? "border-primary text-primary font-semibold" : "border-transparent text-muted-foreground"}`,
54
+ children: "unread"
55
+ })]
56
+ }), /* @__PURE__ */ jsx("div", {
57
+ className: "rounded-lg border bg-card max-h-[640px] overflow-y-auto",
58
+ children: messages.length === 0 ? /* @__PURE__ */ jsx("div", {
59
+ className: "p-6 text-center text-muted-foreground italic",
60
+ children: unreadOnly ? "no unread messages" : "inbox empty"
61
+ }) : messages.map((m) => {
62
+ const text = decodeText(m.payload);
63
+ const preview = text.length > 80 ? `${text.slice(0, 80)}…` : text;
64
+ const when = new Date(m.createdAt).toLocaleString();
65
+ const isActive = selected?.id === m.id;
66
+ const isUnread = m.readAt === null;
67
+ const qs = unreadOnly ? `?unread=1&id=${m.id}` : `?id=${m.id}`;
68
+ return /* @__PURE__ */ jsxs("a", {
69
+ href: `/agents/${resolved.agent.id}/inbox${qs}`,
70
+ className: `block border-b last:border-0 px-3 py-2 text-sm hover:bg-accent/30 ${isActive ? "bg-accent/40" : ""} ${isUnread ? "font-medium" : ""}`,
71
+ children: [/* @__PURE__ */ jsxs("div", {
72
+ className: "flex justify-between text-xs text-muted-foreground",
73
+ children: [/* @__PURE__ */ jsxs("span", {
74
+ className: "font-mono",
75
+ children: [
76
+ isUnread && /* @__PURE__ */ jsx("span", { className: "inline-block w-1.5 h-1.5 rounded-full bg-primary mr-1.5 align-middle" }),
77
+ "from ",
78
+ agentLabel(m.fromAgentId)
79
+ ]
80
+ }), /* @__PURE__ */ jsx("span", {
81
+ className: "font-mono",
82
+ children: when
83
+ })]
84
+ }), /* @__PURE__ */ jsx("div", {
85
+ className: "text-foreground mt-0.5 truncate",
86
+ children: preview
87
+ })]
88
+ }, m.id);
89
+ })
90
+ })] }), /* @__PURE__ */ jsxs("div", { children: [
91
+ selected && !misaddressed && /* @__PURE__ */ jsxs("div", {
92
+ className: "rounded-lg border bg-card p-5 mb-4",
93
+ children: [/* @__PURE__ */ jsxs("div", {
94
+ className: "font-mono text-xs text-muted-foreground mb-2 space-y-0.5",
95
+ children: [
96
+ /* @__PURE__ */ jsxs("div", { children: ["id: ", /* @__PURE__ */ jsx("code", { children: selected.id })] }),
97
+ /* @__PURE__ */ jsxs("div", { children: ["from: ", /* @__PURE__ */ jsx("code", { children: agentLabel(selected.fromAgentId) })] }),
98
+ /* @__PURE__ */ jsxs("div", { children: ["received: ", new Date(selected.createdAt).toLocaleString()] }),
99
+ /* @__PURE__ */ jsxs("div", { children: [
100
+ "read:",
101
+ " ",
102
+ selected.readAt ? new Date(selected.readAt).toLocaleString() : "(unread)"
103
+ ] }),
104
+ selected.replyTo && /* @__PURE__ */ jsxs("div", { children: ["reply to: ", /* @__PURE__ */ jsx("code", { children: selected.replyTo })] })
105
+ ]
106
+ }), /* @__PURE__ */ jsx("div", {
107
+ className: "border-t pt-3 font-mono text-sm whitespace-pre-wrap break-words",
108
+ children: decodeText(selected.payload)
109
+ })]
110
+ }),
111
+ misaddressed && /* @__PURE__ */ jsx("div", {
112
+ className: "rounded-lg border bg-card p-5 mb-4 text-muted-foreground",
113
+ children: "message is not addressed to this agent"
114
+ }),
115
+ /* @__PURE__ */ jsxs("p", {
116
+ className: "text-xs text-muted-foreground",
117
+ children: [
118
+ "Agents exchange messages automatically via their",
119
+ " ",
120
+ /* @__PURE__ */ jsx("code", {
121
+ className: "font-mono",
122
+ children: "send_message"
123
+ }),
124
+ " tool. An idle recipient's scheduler tick drains unread mail."
125
+ ]
126
+ })
127
+ ] })]
128
+ })
129
+ ]
130
+ });
131
+ }
132
+ //#endregion
133
+ export { InboxPage as component };
@@ -0,0 +1,58 @@
1
+ import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ //#region src/components/PawIcon.tsx
4
+ function PawIcon({ className }) {
5
+ return /* @__PURE__ */ jsxs("svg", {
6
+ viewBox: "0 0 24 24",
7
+ fill: "currentColor",
8
+ className,
9
+ "aria-hidden": "true",
10
+ children: [
11
+ /* @__PURE__ */ jsx("ellipse", {
12
+ cx: "7",
13
+ cy: "5",
14
+ rx: "2.2",
15
+ ry: "2.8"
16
+ }),
17
+ /* @__PURE__ */ jsx("ellipse", {
18
+ cx: "17",
19
+ cy: "5",
20
+ rx: "2.2",
21
+ ry: "2.8"
22
+ }),
23
+ /* @__PURE__ */ jsx("ellipse", {
24
+ cx: "3.5",
25
+ cy: "11",
26
+ rx: "2",
27
+ ry: "2.5"
28
+ }),
29
+ /* @__PURE__ */ jsx("ellipse", {
30
+ cx: "20.5",
31
+ cy: "11",
32
+ rx: "2",
33
+ ry: "2.5"
34
+ }),
35
+ /* @__PURE__ */ jsx("path", { d: "M12 22c-4.5 0-7.5-3-7.5-6 0-3 2.5-5.5 4.5-7a4 4 0 0 1 6 0c2 1.5 4.5 4 4.5 7 0 3-3 6-7.5 6z" })
36
+ ]
37
+ });
38
+ }
39
+ //#endregion
40
+ //#region src/components/BaziuLogo.tsx
41
+ function BaziuLogo({ className }) {
42
+ return /* @__PURE__ */ jsx("img", {
43
+ src: "/baziu.svg",
44
+ alt: "",
45
+ "aria-hidden": "true",
46
+ draggable: false,
47
+ className
48
+ });
49
+ }
50
+ //#endregion
51
+ //#region src/routes/login.tsx
52
+ var $$splitComponentImporter = () => import("./login-CQybKk7Y.js");
53
+ var Route = createFileRoute("/login")({
54
+ validateSearch: (search) => ({ error: search.error === "1" ? "1" : void 0 }),
55
+ component: lazyRouteComponent($$splitComponentImporter, "component")
56
+ });
57
+ //#endregion
58
+ export { BaziuLogo as n, PawIcon as r, Route as t };
@@ -0,0 +1,74 @@
1
+ import { n as BaziuLogo, r as PawIcon, t as Route } from "./login-CNznncgA.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ //#region src/routes/login.tsx?tsr-split=component
4
+ function LoginPage() {
5
+ const { error } = Route.useSearch();
6
+ return /* @__PURE__ */ jsxs("main", {
7
+ className: "relative flex min-h-dvh items-center justify-center bg-cream",
8
+ children: [
9
+ /* @__PURE__ */ jsx("div", {
10
+ "aria-hidden": "true",
11
+ className: "pointer-events-none absolute inset-0",
12
+ style: { background: "radial-gradient(circle at 20% 15%, rgba(74,124,155,0.12), transparent 55%), radial-gradient(circle at 80% 85%, rgba(196,135,138,0.10), transparent 55%)" }
13
+ }),
14
+ /* @__PURE__ */ jsxs("div", {
15
+ className: "relative w-full max-w-sm rounded-[16px] border border-frost bg-snow p-8 text-center shadow-baziu-md",
16
+ children: [
17
+ /* @__PURE__ */ jsx(BaziuLogo, { className: "mx-auto mb-3 h-16 w-16" }),
18
+ /* @__PURE__ */ jsx("h1", {
19
+ className: "font-display text-[2rem] tracking-tight text-charcoal",
20
+ children: "bazilion"
21
+ }),
22
+ error && /* @__PURE__ */ jsx("div", {
23
+ className: "err mt-4",
24
+ children: "invalid token"
25
+ }),
26
+ /* @__PURE__ */ jsxs("form", {
27
+ method: "POST",
28
+ action: "/api/login",
29
+ className: "mt-6 text-left",
30
+ children: [
31
+ /* @__PURE__ */ jsx("label", {
32
+ htmlFor: "token",
33
+ className: "block text-[0.85em] font-medium text-mocha",
34
+ children: "Token"
35
+ }),
36
+ /* @__PURE__ */ jsx("input", {
37
+ type: "password",
38
+ id: "token",
39
+ name: "token",
40
+ autoFocus: true,
41
+ required: true,
42
+ placeholder: "paste from auth.json",
43
+ className: "mb-5"
44
+ }),
45
+ /* @__PURE__ */ jsx("button", {
46
+ type: "submit",
47
+ className: "w-full",
48
+ children: "log in"
49
+ })
50
+ ]
51
+ }),
52
+ /* @__PURE__ */ jsxs("p", {
53
+ className: "mt-5 text-[0.78em] leading-relaxed text-mocha-light",
54
+ children: [
55
+ "Your token is in ",
56
+ /* @__PURE__ */ jsx("code", { children: "~/.bazilion/auth.json" }),
57
+ /* @__PURE__ */ jsx("br", {}),
58
+ "created on first ",
59
+ /* @__PURE__ */ jsx("code", { children: "bazilion dashboard" }),
60
+ " or ",
61
+ /* @__PURE__ */ jsx("code", { children: "bazilion serve" })
62
+ ]
63
+ })
64
+ ]
65
+ }),
66
+ /* @__PURE__ */ jsxs("footer", {
67
+ className: "absolute bottom-4 left-0 right-0 text-center text-[0.78em] text-fawn",
68
+ children: ["dedicated to Baziu", /* @__PURE__ */ jsx(PawIcon, { className: "ml-1 inline-block h-3 w-3 align-[-1px] opacity-40" })]
69
+ })
70
+ ]
71
+ });
72
+ }
73
+ //#endregion
74
+ export { LoginPage as component };
@@ -0,0 +1,268 @@
1
+ import { t as Route } from "./mcp-CKqwG4mt.js";
2
+ import { t as ConfigTabs } from "./ConfigTabs-CyuxzesF.js";
3
+ import { useState } from "react";
4
+ import { useRouter } from "@tanstack/react-router";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/routes/config/mcp.tsx?tsr-split=component
7
+ var TRANSPORTS = [
8
+ "stdio",
9
+ "http",
10
+ "sse"
11
+ ];
12
+ function McpPage() {
13
+ const { servers } = Route.useLoaderData();
14
+ const router = useRouter();
15
+ const [name, setName] = useState("");
16
+ const [transport, setTransport] = useState("stdio");
17
+ const [command, setCommand] = useState("");
18
+ const [argsStr, setArgsStr] = useState("");
19
+ const [url, setUrl] = useState("");
20
+ const [token, setToken] = useState("");
21
+ const [err, setErr] = useState(null);
22
+ const [busy, setBusy] = useState(false);
23
+ const [testResult, setTestResult] = useState({});
24
+ async function add(e) {
25
+ e.preventDefault();
26
+ setErr(null);
27
+ setBusy(true);
28
+ try {
29
+ const body = {
30
+ name,
31
+ transport,
32
+ command: transport === "stdio" ? command : null,
33
+ args: transport === "stdio" ? argsStr.split(" ").filter(Boolean) : [],
34
+ url: transport === "stdio" ? null : url,
35
+ authToken: token || void 0
36
+ };
37
+ const res = await fetch("/api/mcp-servers", {
38
+ method: "POST",
39
+ headers: { "content-type": "application/json" },
40
+ body: JSON.stringify(body)
41
+ });
42
+ if (!res.ok) {
43
+ const j = await res.json().catch(() => ({}));
44
+ throw new Error(j.error ?? `${res.status} ${res.statusText}`);
45
+ }
46
+ setName("");
47
+ setCommand("");
48
+ setArgsStr("");
49
+ setUrl("");
50
+ setToken("");
51
+ await router.invalidate();
52
+ } catch (e) {
53
+ setErr(e.message);
54
+ } finally {
55
+ setBusy(false);
56
+ }
57
+ }
58
+ async function toggle(s) {
59
+ await fetch(`/api/mcp-servers/${s.id}`, {
60
+ method: "PATCH",
61
+ headers: { "content-type": "application/json" },
62
+ body: JSON.stringify({ enabled: !s.enabled })
63
+ });
64
+ await router.invalidate();
65
+ }
66
+ async function remove(id) {
67
+ await fetch(`/api/mcp-servers/${id}`, { method: "DELETE" });
68
+ await router.invalidate();
69
+ }
70
+ async function test(id) {
71
+ setTestResult((r) => ({
72
+ ...r,
73
+ [id]: "connecting…"
74
+ }));
75
+ const j = await (await fetch(`/api/mcp-servers/${id}/test`, { method: "POST" })).json().catch(() => ({}));
76
+ setTestResult((r) => ({
77
+ ...r,
78
+ [id]: j.ok ? `✓ ${j.tools?.length ?? 0} tools: ${(j.tools ?? []).map((t) => t.name).join(", ")}` : `✗ ${j.error ?? "failed"}`
79
+ }));
80
+ }
81
+ return /* @__PURE__ */ jsxs("main", {
82
+ className: "mx-auto max-w-5xl px-6 py-8",
83
+ children: [
84
+ /* @__PURE__ */ jsx("h1", {
85
+ className: "font-serif text-3xl text-foreground mb-2",
86
+ children: "config"
87
+ }),
88
+ /* @__PURE__ */ jsx(ConfigTabs, { active: "mcp" }),
89
+ /* @__PURE__ */ jsxs("p", {
90
+ className: "text-muted-foreground text-sm mb-6",
91
+ children: [
92
+ "Model Context Protocol servers. Each enabled server's tools are exposed to every agent, namespaced ",
93
+ /* @__PURE__ */ jsx("code", {
94
+ className: "font-mono",
95
+ children: "mcp__<server>__<tool>"
96
+ }),
97
+ ". stdio servers run as local subprocesses and inherit your configured secrets; http/sse servers connect to a remote endpoint with an optional bearer token."
98
+ ]
99
+ }),
100
+ /* @__PURE__ */ jsxs("section", {
101
+ className: "rounded-lg border bg-card p-5 mb-6",
102
+ children: [/* @__PURE__ */ jsx("h3", {
103
+ className: "font-serif text-xl mb-3",
104
+ children: "Add a server"
105
+ }), /* @__PURE__ */ jsxs("form", {
106
+ onSubmit: add,
107
+ className: "space-y-3",
108
+ children: [
109
+ /* @__PURE__ */ jsxs("div", {
110
+ className: "flex gap-3 flex-wrap items-end",
111
+ children: [/* @__PURE__ */ jsxs("label", {
112
+ className: "text-sm",
113
+ children: ["Name", /* @__PURE__ */ jsx("input", {
114
+ type: "text",
115
+ value: name,
116
+ onChange: (e) => setName(e.target.value),
117
+ required: true,
118
+ placeholder: "playwright",
119
+ pattern: "[a-zA-Z0-9_]+",
120
+ className: "block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-48"
121
+ })]
122
+ }), /* @__PURE__ */ jsxs("label", {
123
+ className: "text-sm",
124
+ children: ["Transport", /* @__PURE__ */ jsx("select", {
125
+ value: transport,
126
+ onChange: (e) => setTransport(e.target.value),
127
+ className: "block mt-1 rounded-md border bg-background px-3 py-2 text-sm",
128
+ children: TRANSPORTS.map((t) => /* @__PURE__ */ jsx("option", {
129
+ value: t,
130
+ children: t
131
+ }, t))
132
+ })]
133
+ })]
134
+ }),
135
+ transport === "stdio" ? /* @__PURE__ */ jsxs("div", {
136
+ className: "flex gap-3 flex-wrap items-end",
137
+ children: [/* @__PURE__ */ jsxs("label", {
138
+ className: "text-sm",
139
+ children: ["Command", /* @__PURE__ */ jsx("input", {
140
+ type: "text",
141
+ value: command,
142
+ onChange: (e) => setCommand(e.target.value),
143
+ placeholder: "npx",
144
+ className: "block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-48"
145
+ })]
146
+ }), /* @__PURE__ */ jsxs("label", {
147
+ className: "text-sm flex-1",
148
+ children: ["Args (space-separated)", /* @__PURE__ */ jsx("input", {
149
+ type: "text",
150
+ value: argsStr,
151
+ onChange: (e) => setArgsStr(e.target.value),
152
+ placeholder: "-y @modelcontextprotocol/server-filesystem /tmp",
153
+ className: "block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-full"
154
+ })]
155
+ })]
156
+ }) : /* @__PURE__ */ jsxs("div", {
157
+ className: "flex gap-3 flex-wrap items-end",
158
+ children: [/* @__PURE__ */ jsxs("label", {
159
+ className: "text-sm flex-1",
160
+ children: ["URL", /* @__PURE__ */ jsx("input", {
161
+ type: "url",
162
+ value: url,
163
+ onChange: (e) => setUrl(e.target.value),
164
+ placeholder: "https://mcp.example.com/sse",
165
+ className: "block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-full"
166
+ })]
167
+ }), /* @__PURE__ */ jsxs("label", {
168
+ className: "text-sm",
169
+ children: ["Bearer token (optional)", /* @__PURE__ */ jsx("input", {
170
+ type: "password",
171
+ value: token,
172
+ onChange: (e) => setToken(e.target.value),
173
+ autoComplete: "off",
174
+ className: "block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-56"
175
+ })]
176
+ })]
177
+ }),
178
+ /* @__PURE__ */ jsx("button", {
179
+ type: "submit",
180
+ disabled: busy,
181
+ className: "rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50",
182
+ children: busy ? "adding…" : "add server"
183
+ }),
184
+ err && /* @__PURE__ */ jsx("p", {
185
+ className: "text-sm text-rose-700",
186
+ children: err
187
+ })
188
+ ]
189
+ })]
190
+ }),
191
+ /* @__PURE__ */ jsxs("table", {
192
+ className: "w-full text-sm",
193
+ children: [/* @__PURE__ */ jsx("thead", {
194
+ className: "text-left text-muted-foreground border-b",
195
+ children: /* @__PURE__ */ jsxs("tr", { children: [
196
+ /* @__PURE__ */ jsx("th", {
197
+ className: "py-2",
198
+ children: "name"
199
+ }),
200
+ /* @__PURE__ */ jsx("th", { children: "transport" }),
201
+ /* @__PURE__ */ jsx("th", { children: "target" }),
202
+ /* @__PURE__ */ jsx("th", { children: "state" }),
203
+ /* @__PURE__ */ jsx("th", {})
204
+ ] })
205
+ }), /* @__PURE__ */ jsxs("tbody", { children: [servers.length === 0 && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", {
206
+ colSpan: 5,
207
+ className: "py-6 text-center text-muted-foreground italic",
208
+ children: "no MCP servers yet — add one above"
209
+ }) }), servers.map((s) => /* @__PURE__ */ jsxs("tr", {
210
+ className: "border-b last:border-0 align-top",
211
+ children: [
212
+ /* @__PURE__ */ jsxs("td", {
213
+ className: "py-2",
214
+ children: [
215
+ s.name,
216
+ s.hasAuthToken && /* @__PURE__ */ jsx("span", {
217
+ className: "ml-2 text-[0.7em] uppercase tracking-wide text-muted-foreground",
218
+ children: "auth"
219
+ }),
220
+ testResult[s.id] && /* @__PURE__ */ jsx("div", {
221
+ className: "text-xs text-muted-foreground mt-1 break-all",
222
+ children: testResult[s.id]
223
+ })
224
+ ]
225
+ }),
226
+ /* @__PURE__ */ jsx("td", { children: s.transport }),
227
+ /* @__PURE__ */ jsx("td", {
228
+ className: "font-mono text-xs break-all",
229
+ children: s.transport === "stdio" ? `${s.command ?? ""} ${s.args.join(" ")}`.trim() : s.url
230
+ }),
231
+ /* @__PURE__ */ jsx("td", { children: s.enabled ? /* @__PURE__ */ jsx("span", {
232
+ className: "text-emerald-700",
233
+ children: "enabled"
234
+ }) : /* @__PURE__ */ jsx("span", {
235
+ className: "text-muted-foreground",
236
+ children: "disabled"
237
+ }) }),
238
+ /* @__PURE__ */ jsxs("td", {
239
+ className: "space-x-2 whitespace-nowrap",
240
+ children: [
241
+ /* @__PURE__ */ jsx("button", {
242
+ type: "button",
243
+ onClick: () => test(s.id),
244
+ className: "rounded-md border px-2 py-1 text-xs hover:bg-accent",
245
+ children: "test"
246
+ }),
247
+ /* @__PURE__ */ jsx("button", {
248
+ type: "button",
249
+ onClick: () => toggle(s),
250
+ className: "rounded-md border px-2 py-1 text-xs hover:bg-accent",
251
+ children: s.enabled ? "disable" : "enable"
252
+ }),
253
+ /* @__PURE__ */ jsx("button", {
254
+ type: "button",
255
+ onClick: () => remove(s.id),
256
+ className: "rounded-md border px-2 py-1 text-xs text-rose-700 hover:bg-rose-50",
257
+ children: "delete"
258
+ })
259
+ ]
260
+ })
261
+ ]
262
+ }, s.id))] })]
263
+ })
264
+ ]
265
+ });
266
+ }
267
+ //#endregion
268
+ export { McpPage as component };
@@ -0,0 +1,12 @@
1
+ import { t as createServerFn } from "../server.js";
2
+ import { t as createServerRpc } from "./createServerRpc-CeKECg65.js";
3
+ import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
4
+ //#region src/routes/config/mcp.tsx?tss-serverfn-split
5
+ var fetchServers_createServerFn_handler = createServerRpc({
6
+ id: "278849457893891c3d22806d15e11a0a42cc3630b30e9e62b74cf2d3b982ded7",
7
+ name: "fetchServers",
8
+ filename: "src/routes/config/mcp.tsx"
9
+ }, (opts) => fetchServers.__executeServer(opts));
10
+ var fetchServers = createServerFn({ method: "GET" }).handler(fetchServers_createServerFn_handler, () => daemonClient().get("/api/mcp-servers"));
11
+ //#endregion
12
+ export { fetchServers_createServerFn_handler };
@@ -0,0 +1,12 @@
1
+ import { t as createServerFn } from "../server.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
3
+ import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
+ //#region src/routes/config/mcp.tsx
5
+ var $$splitComponentImporter = () => import("./mcp-BU_kKENi.js");
6
+ var fetchServers = createServerFn({ method: "GET" }).handler(createSsrRpc("278849457893891c3d22806d15e11a0a42cc3630b30e9e62b74cf2d3b982ded7"));
7
+ var Route = createFileRoute("/config/mcp")({
8
+ loader: () => fetchServers(),
9
+ component: lazyRouteComponent($$splitComponentImporter, "component")
10
+ });
11
+ //#endregion
12
+ export { Route as t };