bazilion 0.0.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 (260) hide show
  1. package/.understand-anything/.understandignore +25 -0
  2. package/.understand-anything/fingerprints.json +14267 -0
  3. package/.understand-anything/knowledge-graph.json +18128 -0
  4. package/.understand-anything/meta.json +6 -0
  5. package/CLAUDE.md +164 -0
  6. package/LICENSE +21 -0
  7. package/README.md +195 -0
  8. package/apps/cli/package.json +21 -0
  9. package/apps/cli/src/auth-file.ts +18 -0
  10. package/apps/cli/src/client.ts +37 -0
  11. package/apps/cli/src/columnize.ts +32 -0
  12. package/apps/cli/src/commands/agent.ts +574 -0
  13. package/apps/cli/src/commands/auth.ts +110 -0
  14. package/apps/cli/src/commands/backup.ts +135 -0
  15. package/apps/cli/src/commands/completion.ts +155 -0
  16. package/apps/cli/src/commands/config.ts +95 -0
  17. package/apps/cli/src/commands/doctor.ts +131 -0
  18. package/apps/cli/src/commands/group.ts +132 -0
  19. package/apps/cli/src/commands/inbox.ts +82 -0
  20. package/apps/cli/src/commands/login.ts +73 -0
  21. package/apps/cli/src/commands/memory.ts +106 -0
  22. package/apps/cli/src/commands/profile.ts +259 -0
  23. package/apps/cli/src/commands/provider.ts +170 -0
  24. package/apps/cli/src/commands/send.ts +24 -0
  25. package/apps/cli/src/commands/serve.ts +89 -0
  26. package/apps/cli/src/commands/skill.ts +120 -0
  27. package/apps/cli/src/commands/token.ts +148 -0
  28. package/apps/cli/src/commands/trigger.ts +129 -0
  29. package/apps/cli/src/commands/uninstall.ts +156 -0
  30. package/apps/cli/src/index.ts +196 -0
  31. package/apps/cli/src/paths.ts +12 -0
  32. package/apps/cli/test/agent.test.ts +213 -0
  33. package/apps/cli/test/backup.test.ts +95 -0
  34. package/apps/cli/test/chat.test.ts +539 -0
  35. package/apps/cli/test/columnize.test.ts +29 -0
  36. package/apps/cli/test/completion.test.ts +45 -0
  37. package/apps/cli/test/config-page.test.ts +151 -0
  38. package/apps/cli/test/group.test.ts +74 -0
  39. package/apps/cli/test/helpers.ts +70 -0
  40. package/apps/cli/test/inbox-autodeliver.test.ts +143 -0
  41. package/apps/cli/test/inbox.test.ts +147 -0
  42. package/apps/cli/test/memory.test.ts +69 -0
  43. package/apps/cli/test/profile.test.ts +110 -0
  44. package/apps/cli/test/send.test.ts +30 -0
  45. package/apps/cli/test/server-fixture.ts +212 -0
  46. package/apps/cli/test/session-head.test.ts +45 -0
  47. package/apps/cli/test/skill.test.ts +128 -0
  48. package/apps/cli/test/token.test.ts +109 -0
  49. package/apps/cli/test/trigger.test.ts +245 -0
  50. package/apps/cli/tsconfig.json +4 -0
  51. package/apps/daemon/package.json +31 -0
  52. package/apps/daemon/src/app.ts +41 -0
  53. package/apps/daemon/src/core/agent/archive.ts +8 -0
  54. package/apps/daemon/src/core/agent/delete.ts +30 -0
  55. package/apps/daemon/src/core/agent/resolve.ts +31 -0
  56. package/apps/daemon/src/core/agent/spawn.ts +95 -0
  57. package/apps/daemon/src/core/agent/unarchive.ts +11 -0
  58. package/apps/daemon/src/core/availableModels.ts +58 -0
  59. package/apps/daemon/src/core/db/client.ts +113 -0
  60. package/apps/daemon/src/core/db/migrate.ts +41 -0
  61. package/apps/daemon/src/core/db/migrations/0001_init.sql +179 -0
  62. package/apps/daemon/src/core/group/delete.ts +21 -0
  63. package/apps/daemon/src/core/group/register.ts +68 -0
  64. package/apps/daemon/src/core/index.ts +71 -0
  65. package/apps/daemon/src/core/paths.ts +56 -0
  66. package/apps/daemon/src/core/profile/create.ts +78 -0
  67. package/apps/daemon/src/core/profile/delete.ts +26 -0
  68. package/apps/daemon/src/core/profile/identity.ts +70 -0
  69. package/apps/daemon/src/core/profile/load.ts +45 -0
  70. package/apps/daemon/src/core/profile/seed.ts +74 -0
  71. package/apps/daemon/src/core/profile/templates.ts +60 -0
  72. package/apps/daemon/src/core/profile/update.ts +57 -0
  73. package/apps/daemon/src/core/profile/validate.ts +9 -0
  74. package/apps/daemon/src/core/repos/agents.ts +202 -0
  75. package/apps/daemon/src/core/repos/config.ts +78 -0
  76. package/apps/daemon/src/core/repos/groups.ts +55 -0
  77. package/apps/daemon/src/core/repos/messages.ts +127 -0
  78. package/apps/daemon/src/core/repos/profiles.ts +83 -0
  79. package/apps/daemon/src/core/repos/providerModels.ts +58 -0
  80. package/apps/daemon/src/core/repos/providerState.ts +37 -0
  81. package/apps/daemon/src/core/repos/secrets.ts +145 -0
  82. package/apps/daemon/src/core/repos/skillMeta.ts +49 -0
  83. package/apps/daemon/src/core/repos/triggers.ts +101 -0
  84. package/apps/daemon/src/core/repos/webTokens.ts +87 -0
  85. package/apps/daemon/src/core/secrets.ts +65 -0
  86. package/apps/daemon/src/core/services.ts +264 -0
  87. package/apps/daemon/src/core/skills/discover.ts +28 -0
  88. package/apps/daemon/src/core/skills/import.ts +136 -0
  89. package/apps/daemon/src/core/skills/parse.ts +52 -0
  90. package/apps/daemon/src/core/skills/resolve.ts +50 -0
  91. package/apps/daemon/src/index.ts +45 -0
  92. package/apps/daemon/src/lib/agent-cancel.ts +48 -0
  93. package/apps/daemon/src/lib/agent-id.ts +13 -0
  94. package/apps/daemon/src/lib/agent-turn.ts +56 -0
  95. package/apps/daemon/src/lib/api-key.ts +56 -0
  96. package/apps/daemon/src/lib/auth.ts +41 -0
  97. package/apps/daemon/src/lib/cron.ts +93 -0
  98. package/apps/daemon/src/lib/ctx.ts +80 -0
  99. package/apps/daemon/src/lib/messaging-host.ts +34 -0
  100. package/apps/daemon/src/lib/middleware-auth.ts +52 -0
  101. package/apps/daemon/src/lib/scheduler.ts +294 -0
  102. package/apps/daemon/src/routes/agents.ts +772 -0
  103. package/apps/daemon/src/routes/auth-login.ts +193 -0
  104. package/apps/daemon/src/routes/config.ts +267 -0
  105. package/apps/daemon/src/routes/groups.ts +133 -0
  106. package/apps/daemon/src/routes/messages.ts +29 -0
  107. package/apps/daemon/src/routes/misc.ts +239 -0
  108. package/apps/daemon/src/routes/profiles.ts +197 -0
  109. package/apps/daemon/src/routes/skills.ts +123 -0
  110. package/apps/daemon/src/routes/triggers.ts +29 -0
  111. package/apps/daemon/src/runtime/auth/openai-codex.ts +121 -0
  112. package/apps/daemon/src/runtime/auto-reply/heartbeat.ts +31 -0
  113. package/apps/daemon/src/runtime/index.ts +77 -0
  114. package/apps/daemon/src/runtime/memory/files.ts +103 -0
  115. package/apps/daemon/src/runtime/memory/qmd.ts +152 -0
  116. package/apps/daemon/src/runtime/memory/types.ts +16 -0
  117. package/apps/daemon/src/runtime/pi/events.ts +173 -0
  118. package/apps/daemon/src/runtime/pi/session.ts +536 -0
  119. package/apps/daemon/src/runtime/pi/tools.ts +85 -0
  120. package/apps/daemon/src/runtime/providers/catalog.ts +145 -0
  121. package/apps/daemon/src/runtime/providers/pi-adapter.ts +272 -0
  122. package/apps/daemon/src/runtime/providers/registry.ts +374 -0
  123. package/apps/daemon/src/runtime/providers/retry.ts +176 -0
  124. package/apps/daemon/src/runtime/providers/types.ts +33 -0
  125. package/apps/daemon/src/runtime/session/prompt.ts +83 -0
  126. package/apps/daemon/src/runtime/tools/bootstrap.ts +22 -0
  127. package/apps/daemon/src/runtime/tools/home.ts +114 -0
  128. package/apps/daemon/src/runtime/tools/memory.ts +81 -0
  129. package/apps/daemon/src/runtime/tools/messaging.ts +127 -0
  130. package/apps/daemon/src/runtime/tools/registry.ts +29 -0
  131. package/apps/daemon/src/runtime/tools/types.ts +13 -0
  132. package/apps/daemon/src/runtime/tools/web-extract.ts +110 -0
  133. package/apps/daemon/src/runtime/tools/web-ssrf.ts +245 -0
  134. package/apps/daemon/src/runtime/tools/web.ts +273 -0
  135. package/apps/daemon/src/runtime/worker/entry.ts +221 -0
  136. package/apps/daemon/src/runtime/worker/ipc-protocol.ts +75 -0
  137. package/apps/daemon/src/runtime/worker/spawn.ts +249 -0
  138. package/apps/daemon/test/core/agents.test.ts +319 -0
  139. package/apps/daemon/test/core/available-models.test.ts +63 -0
  140. package/apps/daemon/test/core/config.test.ts +99 -0
  141. package/apps/daemon/test/core/groups.test.ts +63 -0
  142. package/apps/daemon/test/core/helpers.ts +50 -0
  143. package/apps/daemon/test/core/identity.test.ts +85 -0
  144. package/apps/daemon/test/core/migrations.test.ts +83 -0
  145. package/apps/daemon/test/core/profiles.test.ts +182 -0
  146. package/apps/daemon/test/core/provider-models.test.ts +57 -0
  147. package/apps/daemon/test/core/provider-state.test.ts +36 -0
  148. package/apps/daemon/test/core/skill-meta.test.ts +45 -0
  149. package/apps/daemon/test/core/skills.test.ts +271 -0
  150. package/apps/daemon/test/core/triggers.test.ts +182 -0
  151. package/apps/daemon/test/core/web-tokens.test.ts +79 -0
  152. package/apps/daemon/test/cron.test.ts +90 -0
  153. package/apps/daemon/test/runtime/heartbeat.test.ts +34 -0
  154. package/apps/daemon/test/runtime/memory-qmd.test.ts +97 -0
  155. package/apps/daemon/test/runtime/memory.test.ts +78 -0
  156. package/apps/daemon/test/runtime/messaging.test.ts +213 -0
  157. package/apps/daemon/test/runtime/mock-server.ts +65 -0
  158. package/apps/daemon/test/runtime/openai-codex-auth.test.ts +116 -0
  159. package/apps/daemon/test/runtime/providers.test.ts +306 -0
  160. package/apps/daemon/test/runtime/retry.test.ts +191 -0
  161. package/apps/daemon/test/runtime/session-head.test.ts +90 -0
  162. package/apps/daemon/test/runtime/tools-home.test.ts +102 -0
  163. package/apps/daemon/test/runtime/tools-web.test.ts +206 -0
  164. package/apps/daemon/tsconfig.json +4 -0
  165. package/apps/mobile/README.md +60 -0
  166. package/apps/mobile/app/_layout.tsx +58 -0
  167. package/apps/mobile/app/agents/[id]/chat.tsx +486 -0
  168. package/apps/mobile/app/agents/[id]/index.tsx +166 -0
  169. package/apps/mobile/app/agents/index.tsx +212 -0
  170. package/apps/mobile/app/index.tsx +21 -0
  171. package/apps/mobile/app/pair.tsx +226 -0
  172. package/apps/mobile/app/settings.tsx +419 -0
  173. package/apps/mobile/app.json +49 -0
  174. package/apps/mobile/assets/adaptive-icon.png +0 -0
  175. package/apps/mobile/assets/favicon.png +0 -0
  176. package/apps/mobile/assets/icon.png +0 -0
  177. package/apps/mobile/assets/splash-icon.png +0 -0
  178. package/apps/mobile/babel.config.js +6 -0
  179. package/apps/mobile/metro.config.js +28 -0
  180. package/apps/mobile/package.json +44 -0
  181. package/apps/mobile/src/auth.ts +66 -0
  182. package/apps/mobile/src/pair-url.ts +48 -0
  183. package/apps/mobile/src/theme-context.tsx +88 -0
  184. package/apps/mobile/src/theme.ts +135 -0
  185. package/apps/mobile/test/pair-url.test.ts +46 -0
  186. package/apps/mobile/tsconfig.json +23 -0
  187. package/apps/web/components.json +25 -0
  188. package/apps/web/package.json +39 -0
  189. package/apps/web/public/baziu.svg +8 -0
  190. package/apps/web/src/components/AgentTabs.tsx +45 -0
  191. package/apps/web/src/components/BaziuLogo.tsx +21 -0
  192. package/apps/web/src/components/ChatPane.tsx +1033 -0
  193. package/apps/web/src/components/ConfigTabs.tsx +29 -0
  194. package/apps/web/src/components/CopyButton.tsx +68 -0
  195. package/apps/web/src/components/CreateGroupDialog.tsx +127 -0
  196. package/apps/web/src/components/FieldRow.tsx +94 -0
  197. package/apps/web/src/components/Footer.tsx +10 -0
  198. package/apps/web/src/components/PawIcon.tsx +15 -0
  199. package/apps/web/src/components/Sidebar.tsx +287 -0
  200. package/apps/web/src/components/SpawnDialog.tsx +129 -0
  201. package/apps/web/src/components/ThemeToggle.tsx +75 -0
  202. package/apps/web/src/components/TopNav.tsx +34 -0
  203. package/apps/web/src/components/ui/button.tsx +67 -0
  204. package/apps/web/src/components/ui/card.tsx +103 -0
  205. package/apps/web/src/components/ui/checkbox.tsx +31 -0
  206. package/apps/web/src/components/ui/dialog.tsx +168 -0
  207. package/apps/web/src/components/ui/input.tsx +19 -0
  208. package/apps/web/src/components/ui/label.tsx +22 -0
  209. package/apps/web/src/components/ui/radio-group.tsx +44 -0
  210. package/apps/web/src/components/ui/select.tsx +192 -0
  211. package/apps/web/src/components/ui/separator.tsx +26 -0
  212. package/apps/web/src/components/ui/table.tsx +116 -0
  213. package/apps/web/src/components/ui/tabs.tsx +88 -0
  214. package/apps/web/src/components/ui/textarea.tsx +18 -0
  215. package/apps/web/src/lib/auth.ts +50 -0
  216. package/apps/web/src/lib/daemon-client.ts +34 -0
  217. package/apps/web/src/lib/md.ts +45 -0
  218. package/apps/web/src/lib/utils.ts +6 -0
  219. package/apps/web/src/lib/wire-constants.ts +27 -0
  220. package/apps/web/src/routeTree.gen.ts +408 -0
  221. package/apps/web/src/router.tsx +20 -0
  222. package/apps/web/src/routes/__root.tsx +123 -0
  223. package/apps/web/src/routes/agents/$id/inbox.tsx +207 -0
  224. package/apps/web/src/routes/agents/$id/index.tsx +527 -0
  225. package/apps/web/src/routes/agents/$id/triggers.tsx +239 -0
  226. package/apps/web/src/routes/agents/index.tsx +265 -0
  227. package/apps/web/src/routes/api/$.ts +88 -0
  228. package/apps/web/src/routes/config/index.tsx +315 -0
  229. package/apps/web/src/routes/config/services.tsx +49 -0
  230. package/apps/web/src/routes/config/tokens.tsx +192 -0
  231. package/apps/web/src/routes/groups/$id/index.tsx +153 -0
  232. package/apps/web/src/routes/groups/$id/memory.tsx +321 -0
  233. package/apps/web/src/routes/groups/index.tsx +191 -0
  234. package/apps/web/src/routes/index.tsx +133 -0
  235. package/apps/web/src/routes/login.tsx +63 -0
  236. package/apps/web/src/routes/profiles/$id.tsx +549 -0
  237. package/apps/web/src/routes/profiles/index.tsx +458 -0
  238. package/apps/web/src/routes/skills/index.tsx +297 -0
  239. package/apps/web/src/routes/welcome.tsx +61 -0
  240. package/apps/web/src/styles.css +449 -0
  241. package/apps/web/tsconfig.json +25 -0
  242. package/apps/web/vite.config.ts +25 -0
  243. package/biome.json +23 -0
  244. package/docs/agent-engine.md +219 -0
  245. package/docs/architecture.md +627 -0
  246. package/docs/backlog/README.md +42 -0
  247. package/docs/backlog/draft/BAZ-001-a2a-federation-spike.md +125 -0
  248. package/docs/openclaw-reference.md +210 -0
  249. package/package.json +38 -0
  250. package/packages/api-types/package.json +11 -0
  251. package/packages/api-types/src/entities.ts +146 -0
  252. package/packages/api-types/src/events.ts +55 -0
  253. package/packages/api-types/src/index.ts +488 -0
  254. package/packages/api-types/src/memory.ts +15 -0
  255. package/packages/client/package.json +13 -0
  256. package/packages/client/src/index.ts +117 -0
  257. package/pnpm-workspace.yaml +3 -0
  258. package/tsconfig.base.json +23 -0
  259. package/tsconfig.json +11 -0
  260. package/vitest.config.ts +22 -0
@@ -0,0 +1,449 @@
1
+ @import 'tailwindcss';
2
+ @import "tw-animate-css";
3
+ @import "shadcn/tailwind.css";
4
+
5
+ @custom-variant dark (&:is(.dark *));
6
+
7
+ /* Neva Masquerade palette — dedicated to Baziu.
8
+ shadcn semantic tokens are remapped to Baziu colors below so every
9
+ `bg-card`, `text-muted-foreground`, `border-border`, `ring`, etc.
10
+ utility resolves to the Baziu palette without per-component edits.
11
+ The parallel @theme block exposes the raw palette as Tailwind utilities
12
+ (`bg-cream`, `font-display`, `border-frost`) for cases where the
13
+ semantic name doesn't match what we want to express.
14
+ NOT @theme inline: utilities must emit `var(--color-cream)` etc. so
15
+ :root.dark overrides flip them at runtime. With `inline`, Tailwind bakes
16
+ the literal hex into every utility at build time and dark-mode rules can't
17
+ reach them — `text-charcoal` would stay #2A1F16 on a dark background. */
18
+ @theme {
19
+ --font-heading: 'DM Serif Display', Georgia, serif;
20
+ --font-sans: 'DM Sans', system-ui, sans-serif;
21
+ --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
22
+
23
+ --font-display: 'DM Serif Display', Georgia, serif;
24
+ --font-body: 'DM Sans', system-ui, sans-serif;
25
+ --font-mono-baziu: 'JetBrains Mono', 'Fira Code', monospace;
26
+
27
+ --color-cream: #F5F0E8;
28
+ --color-ivory: #FAF8F4;
29
+ --color-frost: #E8E2D8;
30
+ --color-fawn: #D4CAB8;
31
+ --color-chocolate: #3D2B1F;
32
+ --color-charcoal: #2A1F16;
33
+ --color-mocha: #7A6555;
34
+ --color-mocha-light: #9E8E7E;
35
+ --color-sapphire: #4A7C9B;
36
+ --color-sapphire-deep: #3A6580;
37
+ --color-sapphire-light: #6BA3C2;
38
+ --color-sapphire-glow: rgba(74, 124, 155, 0.12);
39
+ --color-rose-baziu: #C4878A;
40
+ --color-snow: #FFFFFF;
41
+
42
+ --shadow-baziu-sm: 0 1px 3px rgba(42, 31, 22, 0.06);
43
+ --shadow-baziu-md: 0 4px 12px rgba(42, 31, 22, 0.08);
44
+ --shadow-baziu-lg: 0 8px 30px rgba(42, 31, 22, 0.10);
45
+
46
+ --color-sidebar-ring: var(--sidebar-ring);
47
+ --color-sidebar-border: var(--sidebar-border);
48
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
49
+ --color-sidebar-accent: var(--sidebar-accent);
50
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
51
+ --color-sidebar-primary: var(--sidebar-primary);
52
+ --color-sidebar-foreground: var(--sidebar-foreground);
53
+ --color-sidebar: var(--sidebar);
54
+ --color-chart-5: var(--chart-5);
55
+ --color-chart-4: var(--chart-4);
56
+ --color-chart-3: var(--chart-3);
57
+ --color-chart-2: var(--chart-2);
58
+ --color-chart-1: var(--chart-1);
59
+ --color-ring: var(--ring);
60
+ --color-input: var(--input);
61
+ --color-border: var(--border);
62
+ --color-destructive: var(--destructive);
63
+ --color-accent-foreground: var(--accent-foreground);
64
+ --color-accent: var(--accent);
65
+ --color-muted-foreground: var(--muted-foreground);
66
+ --color-muted: var(--muted);
67
+ --color-secondary-foreground: var(--secondary-foreground);
68
+ --color-secondary: var(--secondary);
69
+ --color-primary-foreground: var(--primary-foreground);
70
+ --color-primary: var(--primary);
71
+ --color-popover-foreground: var(--popover-foreground);
72
+ --color-popover: var(--popover);
73
+ --color-card-foreground: var(--card-foreground);
74
+ --color-card: var(--card);
75
+ --color-foreground: var(--foreground);
76
+ --color-background: var(--background);
77
+
78
+ --radius-sm: 6px;
79
+ --radius-md: 10px;
80
+ --radius-lg: 16px;
81
+ --radius-xl: 22px;
82
+ --radius-2xl: 28px;
83
+ --radius-3xl: 36px;
84
+ --radius-4xl: 48px;
85
+ }
86
+
87
+ :root {
88
+ /* shadcn semantic tokens, remapped to Baziu colors */
89
+ --background: #F5F0E8; /* cream */
90
+ --foreground: #3D2B1F; /* chocolate */
91
+ --card: #FFFFFF; /* snow */
92
+ --card-foreground: #3D2B1F;
93
+ --popover: #FFFFFF;
94
+ --popover-foreground: #3D2B1F;
95
+ --primary: #4A7C9B; /* sapphire */
96
+ --primary-foreground: #FFFFFF;
97
+ --secondary: #FAF8F4; /* ivory */
98
+ --secondary-foreground: #3D2B1F;
99
+ --muted: #FAF8F4;
100
+ --muted-foreground: #9E8E7E; /* mocha-light */
101
+ --accent: rgba(74, 124, 155, 0.12); /* sapphire-glow */
102
+ --accent-foreground: #3A6580; /* sapphire-deep */
103
+ --destructive: #9B3D3D;
104
+ --border: #E8E2D8; /* frost */
105
+ --input: #E8E2D8;
106
+ --ring: #4A7C9B; /* sapphire focus ring */
107
+ --chart-1: #4A7C9B;
108
+ --chart-2: #C4878A;
109
+ --chart-3: #7A6555;
110
+ --chart-4: #D4CAB8;
111
+ --chart-5: #6BA3C2;
112
+ --radius: 16px;
113
+ --sidebar: #FAF8F4;
114
+ --sidebar-foreground: #3D2B1F;
115
+ --sidebar-primary: #4A7C9B;
116
+ --sidebar-primary-foreground: #FFFFFF;
117
+ --sidebar-accent: rgba(74, 124, 155, 0.12);
118
+ --sidebar-accent-foreground: #3A6580;
119
+ --sidebar-border: #E8E2D8;
120
+ --sidebar-ring: #4A7C9B;
121
+ }
122
+
123
+ /* Dark theme — "Mask & Moonlight".
124
+ A Neva Masquerade after dark: the seal-point mask becomes the page,
125
+ cream body fur becomes text, sapphire eyes glow brighter against the
126
+ dark fur. Flips both the raw palette tokens (so component CSS using
127
+ var(--color-snow)/var(--color-chocolate) etc. auto-inverts) AND the
128
+ shadcn semantic tokens (so Tailwind utilities like bg-card/bg-muted
129
+ resolve correctly). Applied via .dark on <html> by the pre-hydration
130
+ script in __root.tsx — it picks 'system' / 'light' / 'dark' from
131
+ localStorage and falls back to prefers-color-scheme. */
132
+ :root.dark {
133
+ /* Raw palette — re-mapped to the dark side of Baziu */
134
+ --color-cream: #1A140F;
135
+ --color-ivory: #211A13;
136
+ --color-frost: #3B2E24;
137
+ --color-fawn: #5C4A3D;
138
+ --color-chocolate: #F5F0E8;
139
+ --color-charcoal: #FAF8F4;
140
+ --color-mocha: #C4B3A0;
141
+ --color-mocha-light: #A89789;
142
+ --color-sapphire: #7BB4D2;
143
+ --color-sapphire-deep: #5E9BBA;
144
+ --color-sapphire-light: #A0CEE3;
145
+ --color-sapphire-glow: rgba(123, 180, 210, 0.18);
146
+ --color-rose-baziu: #D89A9D;
147
+ --color-snow: #2A211A;
148
+
149
+ --shadow-baziu-sm: 0 1px 3px rgba(0, 0, 0, 0.4);
150
+ --shadow-baziu-md: 0 4px 12px rgba(0, 0, 0, 0.5);
151
+ --shadow-baziu-lg: 0 8px 30px rgba(0, 0, 0, 0.6);
152
+
153
+ /* shadcn semantic tokens */
154
+ --background: #1A140F;
155
+ --foreground: #F5F0E8;
156
+ --card: #2A211A;
157
+ --card-foreground: #F5F0E8;
158
+ --popover: #2A211A;
159
+ --popover-foreground: #F5F0E8;
160
+ --primary: #7BB4D2;
161
+ --primary-foreground: #0F0A07;
162
+ --secondary: #211A13;
163
+ --secondary-foreground: #F5F0E8;
164
+ --muted: #211A13;
165
+ --muted-foreground: #A89789;
166
+ --accent: rgba(123, 180, 210, 0.18);
167
+ --accent-foreground: #A0CEE3;
168
+ --destructive: #D87878;
169
+ --border: #3B2E24;
170
+ --input: #3B2E24;
171
+ --ring: #7BB4D2;
172
+ --chart-1: #7BB4D2;
173
+ --chart-2: #D89A9D;
174
+ --chart-3: #C4B3A0;
175
+ --chart-4: #5C4A3D;
176
+ --chart-5: #A0CEE3;
177
+ --sidebar: #1F1812;
178
+ --sidebar-foreground: #F5F0E8;
179
+ --sidebar-primary: #7BB4D2;
180
+ --sidebar-primary-foreground: #0F0A07;
181
+ --sidebar-accent: rgba(123, 180, 210, 0.18);
182
+ --sidebar-accent-foreground: #A0CEE3;
183
+ --sidebar-border: #3B2E24;
184
+ --sidebar-ring: #7BB4D2;
185
+ }
186
+
187
+ @layer base {
188
+ * {
189
+ @apply border-border outline-ring/50;
190
+ }
191
+ body {
192
+ @apply bg-background text-foreground;
193
+ font-family: var(--font-body);
194
+ font-size: 15px;
195
+ line-height: 1.6;
196
+ -webkit-font-smoothing: antialiased;
197
+ min-height: 100vh;
198
+ }
199
+ html {
200
+ @apply font-sans;
201
+ overflow-y: scroll;
202
+ scrollbar-gutter: stable;
203
+ }
204
+ /* Subtle paper grain — the single most distinctive Baziu signal. */
205
+ body::before {
206
+ content: '';
207
+ position: fixed;
208
+ inset: 0;
209
+ opacity: 0.025;
210
+ pointer-events: none;
211
+ z-index: 9999;
212
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
213
+ background-repeat: repeat;
214
+ background-size: 256px;
215
+ }
216
+ h1, h2, h3 {
217
+ font-family: var(--font-display);
218
+ color: var(--color-charcoal);
219
+ font-weight: 400;
220
+ letter-spacing: -0.01em;
221
+ }
222
+ h1 { font-size: 2rem; margin-bottom: 0.25rem; }
223
+ h2 { font-size: 1.5rem; }
224
+ h3 { font-size: 1.15rem; margin-bottom: 0.4rem; color: var(--color-mocha); }
225
+ code {
226
+ font-family: var(--font-mono);
227
+ font-size: 0.88em;
228
+ background: var(--color-frost);
229
+ padding: 0.15em 0.4em;
230
+ border-radius: var(--radius-sm);
231
+ color: var(--color-mocha);
232
+ }
233
+ a {
234
+ color: var(--color-sapphire);
235
+ text-decoration: none;
236
+ transition: color 0.2s;
237
+ }
238
+ a:hover { color: var(--color-sapphire-deep); }
239
+ }
240
+
241
+ @layer components {
242
+ /* --- forms --- */
243
+ label { display: block; margin: 0.6rem 0; font-size: 0.9em; color: var(--color-mocha); }
244
+ input[type=text], input[type=password], input[type=number], input:not([type]),
245
+ select, textarea {
246
+ padding: 0.5rem 0.75rem;
247
+ font: inherit; font-size: 0.95em;
248
+ border: 1.5px solid var(--color-frost);
249
+ border-radius: var(--radius-md);
250
+ width: 100%;
251
+ background: var(--color-ivory);
252
+ color: var(--color-chocolate);
253
+ transition: all 0.2s;
254
+ outline: none;
255
+ }
256
+ input:focus, select:focus, textarea:focus {
257
+ border-color: var(--color-sapphire);
258
+ box-shadow: 0 0 0 3px var(--color-sapphire-glow);
259
+ background: var(--color-snow);
260
+ }
261
+ input::placeholder { color: var(--color-fawn); }
262
+ input[type=checkbox] {
263
+ accent-color: var(--color-sapphire);
264
+ width: 16px; height: 16px;
265
+ vertical-align: middle; margin-right: 0.35rem;
266
+ }
267
+
268
+ /* --- buttons ---
269
+ Primary-CTA styling applies ONLY to form submits and explicit
270
+ .btn-primary opt-ins. Bare <button type="button"> (icons, menu items,
271
+ toggles) keeps Tailwind's preflight (transparent bg + inherited text)
272
+ so their per-instance Tailwind classes don't fight a global sapphire
273
+ background. */
274
+ button[type='submit']:not(.unstyled),
275
+ .btn-primary {
276
+ display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem;
277
+ padding: 0.5rem 1.25rem;
278
+ font: inherit; font-size: 0.92em; font-weight: 600; letter-spacing: 0.01em;
279
+ border: none; border-radius: var(--radius-md); cursor: pointer;
280
+ transition: all 0.2s;
281
+ background: var(--color-sapphire); color: var(--color-snow);
282
+ }
283
+ button[type='submit']:not(.unstyled):hover,
284
+ .btn-primary:hover {
285
+ background: var(--color-sapphire-deep);
286
+ color: var(--color-snow);
287
+ box-shadow: var(--shadow-baziu-md);
288
+ transform: translateY(-1px);
289
+ }
290
+ button[type='submit']:not(.unstyled):active,
291
+ .btn-primary:active { transform: translateY(0); }
292
+ button[type='submit']:not(.unstyled):disabled,
293
+ button[type='submit']:not(.unstyled)[disabled],
294
+ .btn-primary:disabled,
295
+ .btn-primary[disabled] {
296
+ opacity: 0.5; cursor: not-allowed;
297
+ transform: none; box-shadow: none;
298
+ }
299
+ .ghost-btn {
300
+ display: inline-flex; align-items: center; gap: 0.3rem;
301
+ background: transparent; color: var(--color-mocha);
302
+ border: 1.5px solid var(--color-frost);
303
+ padding: 0.35rem 0.85rem; font: inherit; font-weight: 500; font-size: 0.92em;
304
+ border-radius: var(--radius-md); cursor: pointer;
305
+ transition: all 0.2s;
306
+ }
307
+ .ghost-btn:hover {
308
+ border-color: var(--color-sapphire-light); color: var(--color-sapphire);
309
+ background: var(--color-sapphire-glow);
310
+ }
311
+ .ghost-btn:disabled, .ghost-btn[disabled] {
312
+ opacity: 0.5; cursor: not-allowed;
313
+ }
314
+
315
+ /* --- tables --- */
316
+ table {
317
+ width: 100%; border-collapse: separate; border-spacing: 0;
318
+ margin: 1rem 0; background: var(--color-snow);
319
+ border: 1px solid var(--color-frost); border-radius: var(--radius-lg); overflow: hidden;
320
+ }
321
+ thead { background: var(--color-ivory); }
322
+ th {
323
+ text-align: left; padding: 0.65rem 1rem;
324
+ font-size: 0.82em; font-weight: 600; text-transform: uppercase;
325
+ letter-spacing: 0.06em; color: var(--color-mocha-light);
326
+ border-bottom: 1px solid var(--color-frost);
327
+ }
328
+ td {
329
+ padding: 0.6rem 1rem; border-bottom: 1px solid var(--color-frost);
330
+ vertical-align: middle; font-size: 0.93em;
331
+ }
332
+ tr:last-child td { border-bottom: none; }
333
+ tbody tr { transition: background 0.2s; }
334
+ tbody tr:hover { background: var(--color-sapphire-glow); }
335
+
336
+ /* --- markdown (chat output) ---
337
+ `marked` produces standard HTML (<p>/<h*>/<ul>/<code>/<pre>/<blockquote>);
338
+ Tailwind preflight strips margins + list markers, so without these rules
339
+ the chat reads as flat plain text. Scoped under .md-content so we don't
340
+ bleed into form labels or other authored markup. */
341
+ .md-content > * + * { margin-top: 0.65em; }
342
+ .md-content h1, .md-content h2, .md-content h3,
343
+ .md-content h4, .md-content h5, .md-content h6 {
344
+ font-family: var(--font-serif);
345
+ font-weight: 600;
346
+ color: var(--color-chocolate);
347
+ line-height: 1.3;
348
+ margin-top: 1.1em;
349
+ }
350
+ .md-content h1 { font-size: 1.45em; }
351
+ .md-content h2 { font-size: 1.25em; }
352
+ .md-content h3 { font-size: 1.1em; }
353
+ .md-content h4, .md-content h5, .md-content h6 { font-size: 1em; }
354
+ .md-content p { line-height: 1.55; }
355
+ .md-content ul, .md-content ol {
356
+ padding-left: 1.5em;
357
+ line-height: 1.55;
358
+ }
359
+ .md-content ul { list-style: disc; }
360
+ .md-content ol { list-style: decimal; }
361
+ .md-content li + li { margin-top: 0.25em; }
362
+ .md-content li > ul, .md-content li > ol { margin-top: 0.25em; }
363
+ .md-content a {
364
+ color: var(--color-sapphire);
365
+ text-decoration: underline;
366
+ text-underline-offset: 2px;
367
+ }
368
+ .md-content a:hover { color: var(--color-sapphire-deep); }
369
+ .md-content strong { font-weight: 600; color: var(--color-chocolate); }
370
+ .md-content em { font-style: italic; }
371
+ .md-content code {
372
+ font-family: var(--font-mono, ui-monospace, monospace);
373
+ font-size: 0.88em;
374
+ padding: 0.1em 0.35em;
375
+ background: var(--color-frost);
376
+ border-radius: var(--radius-sm, 4px);
377
+ color: var(--color-chocolate);
378
+ }
379
+ .md-content pre {
380
+ margin: 0.7em 0;
381
+ padding: 0.75rem 1rem;
382
+ background: var(--color-ivory);
383
+ border: 1px solid var(--color-frost);
384
+ border-radius: var(--radius-md);
385
+ overflow-x: auto;
386
+ font-size: 0.88em;
387
+ line-height: 1.5;
388
+ }
389
+ .md-content pre code {
390
+ padding: 0;
391
+ background: transparent;
392
+ border-radius: 0;
393
+ font-size: inherit;
394
+ }
395
+ .md-content blockquote {
396
+ border-left: 3px solid var(--color-frost);
397
+ padding-left: 0.9rem;
398
+ color: var(--color-mocha-light);
399
+ font-style: italic;
400
+ }
401
+ .md-content hr {
402
+ border: none;
403
+ border-top: 1px solid var(--color-frost);
404
+ margin: 1em 0;
405
+ }
406
+ .md-content table {
407
+ margin: 0.5em 0;
408
+ border-collapse: collapse;
409
+ font-size: 0.93em;
410
+ }
411
+ .md-content th, .md-content td {
412
+ padding: 0.4rem 0.7rem;
413
+ border: 1px solid var(--color-frost);
414
+ text-align: left;
415
+ }
416
+ .md-content th {
417
+ background: var(--color-frost);
418
+ font-weight: 600;
419
+ }
420
+ .md-content img { max-width: 100%; height: auto; border-radius: var(--radius-sm, 4px); }
421
+
422
+ /* --- cards --- */
423
+ .card {
424
+ background: var(--color-snow);
425
+ border: 1px solid var(--color-frost);
426
+ border-radius: var(--radius-lg);
427
+ padding: 1.5rem;
428
+ margin: 1.25rem 0;
429
+ box-shadow: var(--shadow-baziu-sm);
430
+ transition: box-shadow 0.2s;
431
+ }
432
+ .card:hover { box-shadow: var(--shadow-baziu-md); }
433
+ .card h3 {
434
+ font-family: var(--font-body);
435
+ font-weight: 600; font-size: 0.92em;
436
+ text-transform: uppercase; letter-spacing: 0.06em;
437
+ color: var(--color-mocha-light); margin-bottom: 1rem;
438
+ }
439
+
440
+ /* --- helpers --- */
441
+ .muted { color: var(--color-mocha-light); font-size: 0.9em; }
442
+ .err {
443
+ color: var(--destructive); padding: 0.75rem 1rem;
444
+ background: color-mix(in srgb, var(--destructive) 12%, transparent);
445
+ border: 1px solid color-mix(in srgb, var(--destructive) 25%, transparent);
446
+ border-radius: var(--radius-md);
447
+ font-size: 0.92em; margin-bottom: 1rem;
448
+ }
449
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Bundler",
6
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
+ "jsx": "react-jsx",
8
+ "strict": true,
9
+ "noUncheckedIndexedAccess": true,
10
+ "verbatimModuleSyntax": true,
11
+ "esModuleInterop": true,
12
+ "allowImportingTsExtensions": true,
13
+ "noEmit": true,
14
+ "skipLibCheck": true,
15
+ "resolveJsonModule": true,
16
+ "isolatedModules": true,
17
+ "types": ["vite/client"],
18
+ "baseUrl": ".",
19
+ "paths": {
20
+ "@/*": ["./src/*"]
21
+ }
22
+ },
23
+ "include": ["src/**/*", "vite.config.ts", "*.ts", "*.tsx"],
24
+ "exclude": ["node_modules", "dist", ".output", ".tanstack", ".nitro"]
25
+ }
@@ -0,0 +1,25 @@
1
+ import { fileURLToPath } from 'node:url'
2
+ import tailwindcss from '@tailwindcss/vite'
3
+ import { tanstackStart } from '@tanstack/react-start/plugin/vite'
4
+ import viteReact from '@vitejs/plugin-react'
5
+ import { defineConfig } from 'vite'
6
+
7
+ // Plugin order matters: tailwindcss → tanstackStart → viteReact. The Start
8
+ // plugin auto-includes the router file-based codegen, so no separate
9
+ // `@tanstack/react-router/plugin/vite` import.
10
+ export default defineConfig({
11
+ server: {
12
+ // The daemon owns 4321; web2 binds 4322 by default. WEB_HOST/WEB_PORT
13
+ // override at boot — kept symmetric with apps/web's config.
14
+ host: process.env.WEB_HOST ?? '127.0.0.1',
15
+ port: Number(process.env.WEB_PORT ?? 4322),
16
+ },
17
+ resolve: {
18
+ alias: {
19
+ // Mirrors the tsconfig `@/*` paths so shadcn-style `@/components/...`
20
+ // imports resolve identically in TS-check, dev, and build.
21
+ '@': fileURLToPath(new URL('./src', import.meta.url)),
22
+ },
23
+ },
24
+ plugins: [tailwindcss(), tanstackStart(), viteReact()],
25
+ })
package/biome.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.4.12/schema.json",
3
+ "files": {
4
+ "includes": ["**", "!**/node_modules", "!**/dist", "!apps/web", "!apps/mobile"]
5
+ },
6
+ "formatter": {
7
+ "enabled": true,
8
+ "indentStyle": "space",
9
+ "indentWidth": 2,
10
+ "lineWidth": 100
11
+ },
12
+ "linter": {
13
+ "enabled": true,
14
+ "rules": { "recommended": true }
15
+ },
16
+ "javascript": {
17
+ "formatter": {
18
+ "quoteStyle": "single",
19
+ "semicolons": "asNeeded",
20
+ "trailingCommas": "all"
21
+ }
22
+ }
23
+ }