@wenathlan/saddle 2.0.154 → 2.0.159

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 (314) hide show
  1. package/Dockerfile +167 -1334
  2. package/README.md +59 -60
  3. package/biome.jsonc +3 -3
  4. package/browser.ts +482 -0
  5. package/cli.ts +274 -0
  6. package/distribution.ts +731 -0
  7. package/docker.config +29 -8
  8. package/docs/{architecture.1.8.19.mmd → architecture1819.md} +6 -0
  9. package/docs/artifactavailability.md +2 -2
  10. package/docs/browser.md +18 -1
  11. package/docs/{containerplatforms.2.1.0.md → containerplatforms210.md} +1 -1
  12. package/docs/{documentmap.1.8.12.md → documentmap1812.md} +1 -1
  13. package/docs/extension.md +13 -2
  14. package/docs/features.md +5 -0
  15. package/docs/libraryapi.md +1 -1
  16. package/docs/{ninety.modalities.md → ninetymodalities.md} +87 -4
  17. package/docs/{planning.ninety.md → planningninety.md} +6 -6
  18. package/docs/{releasenotes.1.8.13.md → releasenotes1813.md} +2 -2
  19. package/docs/{releasenotes.1.8.14.md → releasenotes1814.md} +1 -1
  20. package/docs/{repo.synthesis.1.8.16.md → reposynthesis1816.md} +1 -1
  21. package/docs/todo.md +2 -2
  22. package/docs/{todo.1.8.15.md → todo1815.md} +1 -1
  23. package/docs/{todo.1.8.16.md → todo1816.md} +5 -5
  24. package/execution.ts +677 -0
  25. package/foundation.ts +314 -0
  26. package/index.ts +36 -34
  27. package/isolation.ts +84 -0
  28. package/modalityregistry.ts +189 -145
  29. package/modes.ts +170 -0
  30. package/mttg.config +1 -1
  31. package/orchestrator.ts +49 -15
  32. package/package.json +105 -89
  33. package/qemu.config +2 -2
  34. package/sandbox.ts +3279 -0
  35. package/scheduler.ts +1 -1
  36. package/server.ts +52 -0
  37. package/tsconfig.json +12 -13
  38. package/virtual.ts +7528 -0
  39. package/workloadlaw.ts +293 -0
  40. package/dist/App.d.ts +0 -5
  41. package/dist/App.js +0 -52
  42. package/dist/Sol/Sol.d.ts +0 -3
  43. package/dist/Sol/Sol.js +0 -46
  44. package/dist/Sol/agentbrowser/agentbrowser.d.ts +0 -9
  45. package/dist/Sol/agentbrowser/agentbrowser.js +0 -121
  46. package/dist/Sol/architecture/architecture.d.ts +0 -9
  47. package/dist/Sol/architecture/architecture.js +0 -93
  48. package/dist/Sol/compute/compute.d.ts +0 -9
  49. package/dist/Sol/compute/compute.js +0 -22
  50. package/dist/Sol/console/console.d.ts +0 -15
  51. package/dist/Sol/console/console.js +0 -292
  52. package/dist/Sol/dashboard/dashboard.d.ts +0 -10
  53. package/dist/Sol/dashboard/dashboard.js +0 -181
  54. package/dist/Sol/docs/docs.d.ts +0 -9
  55. package/dist/Sol/docs/docs.js +0 -28
  56. package/dist/Sol/home/home.d.ts +0 -35
  57. package/dist/Sol/home/home.js +0 -239
  58. package/dist/Sol/integrations/integrations.d.ts +0 -9
  59. package/dist/Sol/integrations/integrations.js +0 -83
  60. package/dist/Sol/intro/intro.d.ts +0 -7
  61. package/dist/Sol/intro/intro.js +0 -102
  62. package/dist/Sol/login/login.d.ts +0 -16
  63. package/dist/Sol/login/login.js +0 -49
  64. package/dist/Sol/notfound/notfound.d.ts +0 -9
  65. package/dist/Sol/notfound/notfound.js +0 -15
  66. package/dist/Sol/onboarding/onboarding.d.ts +0 -25
  67. package/dist/Sol/onboarding/onboarding.js +0 -60
  68. package/dist/Sol/playground/playground.d.ts +0 -9
  69. package/dist/Sol/playground/playground.js +0 -127
  70. package/dist/Sol/register/register.d.ts +0 -16
  71. package/dist/Sol/register/register.js +0 -193
  72. package/dist/Sol/shell/Shell.d.ts +0 -124
  73. package/dist/Sol/shell/Shell.js +0 -335
  74. package/dist/Sol/wingets/ComputeBootladder.d.ts +0 -6
  75. package/dist/Sol/wingets/ComputeBootladder.js +0 -71
  76. package/dist/Sol/wingets/ComputeModalitycatalog.d.ts +0 -7
  77. package/dist/Sol/wingets/ComputeModalitycatalog.js +0 -71
  78. package/dist/Sol/wingets/ConsoleApibadge.d.ts +0 -7
  79. package/dist/Sol/wingets/ConsoleApibadge.js +0 -5
  80. package/dist/Sol/wingets/ConsoleEdgelaw.d.ts +0 -6
  81. package/dist/Sol/wingets/ConsoleEdgelaw.js +0 -36
  82. package/dist/Sol/wingets/ConsoleEventstimeline.d.ts +0 -19
  83. package/dist/Sol/wingets/ConsoleEventstimeline.js +0 -12
  84. package/dist/Sol/wingets/ConsoleSnapshotcontrols.d.ts +0 -8
  85. package/dist/Sol/wingets/ConsoleSnapshotcontrols.js +0 -8
  86. package/dist/Sol/wingets/ConsoleSpecpanel.d.ts +0 -21
  87. package/dist/Sol/wingets/ConsoleSpecpanel.js +0 -75
  88. package/dist/Sol/wingets/ConsoleTerminal.d.ts +0 -22
  89. package/dist/Sol/wingets/ConsoleTerminal.js +0 -77
  90. package/dist/Sol/wingets/DashboardAccountpanel.d.ts +0 -18
  91. package/dist/Sol/wingets/DashboardAccountpanel.js +0 -65
  92. package/dist/Sol/wingets/DashboardAdminpanel.d.ts +0 -6
  93. package/dist/Sol/wingets/DashboardAdminpanel.js +0 -90
  94. package/dist/Sol/wingets/DashboardAuditlog.d.ts +0 -8
  95. package/dist/Sol/wingets/DashboardAuditlog.js +0 -50
  96. package/dist/Sol/wingets/DashboardCreatesandboxform.d.ts +0 -10
  97. package/dist/Sol/wingets/DashboardCreatesandboxform.js +0 -71
  98. package/dist/Sol/wingets/DashboardEventstimeline.d.ts +0 -8
  99. package/dist/Sol/wingets/DashboardEventstimeline.js +0 -83
  100. package/dist/Sol/wingets/DashboardGlobalsandboxestable.d.ts +0 -8
  101. package/dist/Sol/wingets/DashboardGlobalsandboxestable.js +0 -57
  102. package/dist/Sol/wingets/DashboardMeshnodestable.d.ts +0 -8
  103. package/dist/Sol/wingets/DashboardMeshnodestable.js +0 -103
  104. package/dist/Sol/wingets/DashboardSandboxlist.d.ts +0 -10
  105. package/dist/Sol/wingets/DashboardSandboxlist.js +0 -163
  106. package/dist/Sol/wingets/DashboardUserstable.d.ts +0 -8
  107. package/dist/Sol/wingets/DashboardUserstable.js +0 -78
  108. package/dist/Sol/wingets/HomeEntrygate.d.ts +0 -23
  109. package/dist/Sol/wingets/HomeEntrygate.js +0 -73
  110. package/dist/Sol/wingets/HomeMetricstrip.d.ts +0 -9
  111. package/dist/Sol/wingets/HomeMetricstrip.js +0 -4
  112. package/dist/Sol/wingets/HomeRuntimediagram.d.ts +0 -1
  113. package/dist/Sol/wingets/HomeRuntimediagram.js +0 -22
  114. package/dist/Sol/wingets/LoginForm.d.ts +0 -19
  115. package/dist/Sol/wingets/LoginForm.js +0 -141
  116. package/dist/Sol/wingets/RegisterPasswordconfirm.d.ts +0 -13
  117. package/dist/Sol/wingets/RegisterPasswordconfirm.js +0 -16
  118. package/dist/Sol/wingets/RegisterPasswordmeter.d.ts +0 -19
  119. package/dist/Sol/wingets/RegisterPasswordmeter.js +0 -65
  120. package/dist/Sol/wingets/RegisterUsernamerules.d.ts +0 -11
  121. package/dist/Sol/wingets/RegisterUsernamerules.js +0 -16
  122. package/dist/Sol/wingets/index.d.ts +0 -39
  123. package/dist/Sol/wingets/index.js +0 -39
  124. package/dist/alternatives.d.ts +0 -508
  125. package/dist/alternatives.js +0 -950
  126. package/dist/api.d.ts +0 -154
  127. package/dist/api.js +0 -174
  128. package/dist/auth.d.ts +0 -268
  129. package/dist/auth.js +0 -476
  130. package/dist/automation.d.ts +0 -425
  131. package/dist/automation.js +0 -566
  132. package/dist/browser.d.ts +0 -561
  133. package/dist/browser.js +0 -1058
  134. package/dist/capacitor.config.d.ts +0 -45
  135. package/dist/capacitor.config.js +0 -48
  136. package/dist/catalog.d.ts +0 -43
  137. package/dist/catalog.js +0 -44
  138. package/dist/cli.d.ts +0 -16
  139. package/dist/cli.js +0 -168
  140. package/dist/communication.d.ts +0 -181
  141. package/dist/communication.js +0 -376
  142. package/dist/compute.d.ts +0 -1160
  143. package/dist/compute.js +0 -2272
  144. package/dist/dashboardlib.d.ts +0 -58
  145. package/dist/dashboardlib.js +0 -161
  146. package/dist/db.d.ts +0 -569
  147. package/dist/db.js +0 -1080
  148. package/dist/distribution.d.ts +0 -528
  149. package/dist/distribution.js +0 -810
  150. package/dist/drizzle.config.d.ts +0 -20
  151. package/dist/drizzle.config.js +0 -18
  152. package/dist/edgelandes.d.ts +0 -70
  153. package/dist/edgelandes.host.d.ts +0 -26
  154. package/dist/edgelandes.host.js +0 -1089
  155. package/dist/edgelandes.inproc.d.ts +0 -27
  156. package/dist/edgelandes.inproc.js +0 -952
  157. package/dist/edgelandes.js +0 -1133
  158. package/dist/edgelandes.ninety.d.ts +0 -31
  159. package/dist/edgelandes.ninety.js +0 -174
  160. package/dist/edgelandes.virtual.d.ts +0 -25
  161. package/dist/edgelandes.virtual.js +0 -629
  162. package/dist/edgeplane.d.ts +0 -121
  163. package/dist/edgeplane.js +0 -341
  164. package/dist/examplelocaljob.d.ts +0 -1
  165. package/dist/examplelocaljob.js +0 -14
  166. package/dist/execution.d.ts +0 -529
  167. package/dist/execution.js +0 -760
  168. package/dist/family.d.ts +0 -16
  169. package/dist/family.js +0 -42
  170. package/dist/familyurl.d.ts +0 -21
  171. package/dist/familyurl.js +0 -24
  172. package/dist/format.d.ts +0 -18
  173. package/dist/format.js +0 -59
  174. package/dist/foundation.d.ts +0 -172
  175. package/dist/foundation.js +0 -312
  176. package/dist/index.d.ts +0 -735
  177. package/dist/index.js +0 -1020
  178. package/dist/integration.d.ts +0 -235
  179. package/dist/integration.js +0 -228
  180. package/dist/intelligence.d.ts +0 -93
  181. package/dist/intelligence.js +0 -144
  182. package/dist/isolation.d.ts +0 -128
  183. package/dist/isolation.js +0 -95
  184. package/dist/labels.d.ts +0 -665
  185. package/dist/labels.js +0 -707
  186. package/dist/localauth.d.ts +0 -127
  187. package/dist/localauth.js +0 -413
  188. package/dist/media.d.ts +0 -343
  189. package/dist/media.js +0 -985
  190. package/dist/mesh.d.ts +0 -177
  191. package/dist/mesh.js +0 -468
  192. package/dist/modalityregistry.d.ts +0 -109
  193. package/dist/modalityregistry.js +0 -1386
  194. package/dist/modes.d.ts +0 -358
  195. package/dist/modes.js +0 -133
  196. package/dist/onboardingstate.d.ts +0 -79
  197. package/dist/onboardingstate.js +0 -282
  198. package/dist/orchestrator.d.ts +0 -1338
  199. package/dist/orchestrator.js +0 -4310
  200. package/dist/packager/targetcli.js +0 -4
  201. package/dist/paths.d.ts +0 -2
  202. package/dist/paths.js +0 -14
  203. package/dist/performance.d.ts +0 -415
  204. package/dist/performance.js +0 -826
  205. package/dist/quantum.d.ts +0 -809
  206. package/dist/quantum.js +0 -2072
  207. package/dist/render.d.ts +0 -380
  208. package/dist/render.js +0 -1072
  209. package/dist/runall.d.ts +0 -2
  210. package/dist/runall.js +0 -39
  211. package/dist/runtimeprobe.d.ts +0 -4
  212. package/dist/runtimeprobe.js +0 -8
  213. package/dist/sandbox.d.ts +0 -355
  214. package/dist/sandbox.js +0 -1721
  215. package/dist/sandboxenvprofile.d.ts +0 -29
  216. package/dist/sandboxenvprofile.js +0 -89
  217. package/dist/sandboxprofile.d.ts +0 -137
  218. package/dist/sandboxprofile.js +0 -241
  219. package/dist/sandboxqueue.d.ts +0 -108
  220. package/dist/sandboxqueue.js +0 -201
  221. package/dist/sandboxquota.d.ts +0 -121
  222. package/dist/sandboxquota.js +0 -236
  223. package/dist/scheduler.d.ts +0 -595
  224. package/dist/scheduler.js +0 -1258
  225. package/dist/scriptlanes.d.ts +0 -182
  226. package/dist/scriptlanes.js +0 -660
  227. package/dist/scripts.buildengine.d.ts +0 -1
  228. package/dist/scripts.buildengine.js +0 -39
  229. package/dist/scripts.securitygate.d.ts +0 -1
  230. package/dist/scripts.securitygate.js +0 -68
  231. package/dist/scripts.validateflatnative.d.ts +0 -1
  232. package/dist/scripts.validateflatnative.js +0 -72
  233. package/dist/security.d.ts +0 -500
  234. package/dist/security.js +0 -1169
  235. package/dist/seedcatalog.d.ts +0 -13
  236. package/dist/seedcatalog.js +0 -46
  237. package/dist/server.d.ts +0 -20
  238. package/dist/server.js +0 -53
  239. package/dist/speccatalog.d.ts +0 -31
  240. package/dist/speccatalog.js +0 -163
  241. package/dist/tiers.d.ts +0 -1001
  242. package/dist/tiers.js +0 -2169
  243. package/dist/utils.d.ts +0 -2
  244. package/dist/utils.js +0 -5
  245. package/dist/vaulthandoff.d.ts +0 -141
  246. package/dist/vaulthandoff.js +0 -444
  247. package/dist/virtual.d.ts +0 -640
  248. package/dist/virtual.js +0 -1284
  249. package/dist/virtualcpu.d.ts +0 -315
  250. package/dist/virtualcpu.js +0 -1180
  251. package/dist/virtualgpu.d.ts +0 -344
  252. package/dist/virtualgpu.js +0 -1000
  253. package/dist/virtualization.d.ts +0 -606
  254. package/dist/virtualization.js +0 -1186
  255. package/dist/virtualmemory.d.ts +0 -817
  256. package/dist/virtualmemory.js +0 -1795
  257. package/dist/vite.config.d.ts +0 -3
  258. package/dist/vite.config.js +0 -48
  259. package/dist/vitest.config.d.ts +0 -2
  260. package/dist/vitest.config.js +0 -25
  261. package/dist/webserver.d.ts +0 -166
  262. package/dist/webserver.js +0 -2226
  263. package/dist/workloadlaw.d.ts +0 -133
  264. package/dist/workloadlaw.js +0 -193
  265. package/docs/.gitkeep +0 -0
  266. package/docs/architecture.1.8.19.md +0 -76
  267. package/docs/logs/examplesession.json +0 -54
  268. package/docs/repo.analysis.1.8.21.json +0 -2617
  269. package/docs/repo.candidates.1.8.21.jsonl +0 -666
  270. package/docs/repo.selected.1.8.21.json +0 -786
  271. package/manifest.json +0 -20
  272. package/media.ts +0 -1337
  273. package/virtualcpu.ts +0 -1274
  274. package/virtualgpu.ts +0 -1182
  275. package/virtualization.ts +0 -1628
  276. package/virtualmemory.ts +0 -2303
  277. /package/docs/{artifactresearch.1.8.9.md → artifactresearch189.md} +0 -0
  278. /package/docs/{batches.1816.to.1820.md → batches1816to1820.md} +0 -0
  279. /package/docs/{brancharchive.2026.08.18.md → brancharchive20260818.md} +0 -0
  280. /package/docs/{containerplatforms.1.8.17.md → containerplatforms1817.md} +0 -0
  281. /package/docs/{e2ugh.engine.md → e2ughengine.md} +0 -0
  282. /package/docs/{flatbuildresearch.1.8.11.md → flatbuildresearch1811.md} +0 -0
  283. /package/docs/{licenseaudit.1.8.12.md → licenseaudit1812.md} +0 -0
  284. /package/docs/{mobileconversionresearch.1.8.10.md → mobileconversionresearch1810.md} +0 -0
  285. /package/docs/{nativeidentityresearch.1.8.11.md → nativeidentityresearch1811.md} +0 -0
  286. /package/docs/{native.wrappers.md → nativewrappers.md} +0 -0
  287. /package/docs/{planning.1.8.18.md → planning1818.md} +0 -0
  288. /package/docs/{planning.1.8.19.md → planning1819.md} +0 -0
  289. /package/docs/{planning.engine.md → planningengine.md} +0 -0
  290. /package/docs/{releasenotes.1.8.12.md → releasenotes1812.md} +0 -0
  291. /package/docs/{releasenotes.1.8.15.md → releasenotes1815.md} +0 -0
  292. /package/docs/{releasenotes.1.8.16.md → releasenotes1816.md} +0 -0
  293. /package/docs/{releasenotes.1.8.17.md → releasenotes1817.md} +0 -0
  294. /package/docs/{releasenotes.1.8.18.md → releasenotes1818.md} +0 -0
  295. /package/docs/{releasenotes.1.8.19.md → releasenotes1819.md} +0 -0
  296. /package/docs/{reorganization.1.8.8.md → reorganization188.md} +0 -0
  297. /package/docs/{reorganization.1.8.9.md → reorganization189.md} +0 -0
  298. /package/docs/{repo.research.1.8.16.md → reporesearch1816.md} +0 -0
  299. /package/docs/{repo.research.1.8.21.md → reporesearch1821.md} +0 -0
  300. /package/docs/{repo.synthesis.1.8.21.md → reposynthesis1821.md} +0 -0
  301. /package/docs/{research.1.8.18.isolation.md → research1818isolation.md} +0 -0
  302. /package/docs/{research.1.8.19.virtual.browser.md → research1819virtualbrowser.md} +0 -0
  303. /package/docs/{scanningresearch.1.8.11.md → scanningresearch1811.md} +0 -0
  304. /package/docs/{securityaudit.1.8.7.md → securityaudit187.md} +0 -0
  305. /package/docs/{securityreferences.1.8.11.md → securityreferences1811.md} +0 -0
  306. /package/docs/{securityresearch.1.8.11.md → securityresearch1811.md} +0 -0
  307. /package/docs/{signingresearch.1.8.12.md → signingresearch1812.md} +0 -0
  308. /package/docs/{tauri.glib.risk.1.8.11.md → tauriglibrisk1811.md} +0 -0
  309. /package/docs/{todo.1.8.18.md → todo1818.md} +0 -0
  310. /package/docs/{todo.1.8.19.md → todo1819.md} +0 -0
  311. /package/docs/{toolchainresearch.1.8.9.md → toolchainresearch189.md} +0 -0
  312. /package/docs/{web.duplicatecleanup.md → webduplicatecleanup.md} +0 -0
  313. /package/docs/{web.ideas.md → webideas.md} +0 -0
  314. /package/docs/{workflowimprovements.2026.08.19.md → workflowimprovements20260819.md} +0 -0
@@ -1,335 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // the saddle shell of the theme.
3
- // Shell — the app surface of the saddle, answering the FAMILY STANDALONE
4
- // LAW: an app accessed by its own url (wenathlan.github.io/devthink/
5
- // saddle/) is the normal application, one hundred percent — it renders
6
- // FULL-BLEED, the routed stage owning the whole viewport with the page
7
- // rail of SECTIONS as the app's own navigation (no window chrome of its
8
- // own: no title bar, no caption buttons, no resize handles, no inactive
9
- // grayscale, no entry scale). The WINDOW (the draggable frame with the
10
- // captions and the eight handles) exists ONLY when the app is embedded
11
- // inside the DevThink OS power clip — the framed contract below renders
12
- // the SAME surface tree under the shell--embedded seat: the sectioned
13
- // rail and the routed stage answer in both seats so the design is
14
- // IDENTICAL at the direct url and inside the os window (the window-era
15
- // law), and the OS draws the window chrome around it. The file also
16
- // exports every shared primitive the page
17
- // folders import from "./shell/Shell" (or "@/shell/Shell"): PageShell,
18
- // SaddleMark, SectionRail, ThemeProvider, useTheme, ErrorBoundary, Button,
19
- // buttonVariants, the Card family, the Tooltip family and the Toaster.
20
- // Nothing shared lives loose at the theme root; page-specific components
21
- // live in the page folder that owns them.
22
- import { Slot } from '@radix-ui/react-slot';
23
- import * as TooltipPrimitive from '@radix-ui/react-tooltip';
24
- import { cva } from 'class-variance-authority';
25
- import { WarningRegular as AlertTriangle, WindowAppsRegular as AppWindow, BookOpenRegular as BookOpen, BoxMultipleRegular as Boxes, BrainCircuitRegular as Cpu, BeakerRegular as FlaskConical, GaugeRegular as Gauge, TableRegular as LayoutDashboard, ArrowEnterLeftRegular as LogIn, WeatherMoonRegular as Moon, PlugConnectedRegular as PlugZap, ArrowCounterclockwiseRegular as RotateCcw, WeatherSunnyRegular as Sun, WindowConsoleRegular as TerminalSquare, PersonAddRegular as UserPlus, } from '@fluentui/react-icons';
26
- import { useTheme as useNextTheme } from 'next-themes';
27
- import { Component, createContext, useContext, useEffect, useState, } from 'react';
28
- import { Toaster as Sonner } from 'sonner';
29
- import { Link, useLocation } from 'wouter';
30
- import { familyrow } from '../../family.ts';
31
- import { familyurl } from '../../familyurl.ts';
32
- import { label } from '../../labels.ts';
33
- import { cn } from '../../utils.ts';
34
- const ThemeContext = createContext(undefined);
35
- export function ThemeProvider({ children, defaultTheme = 'light', switchable = false, }) {
36
- const [theme, setTheme] = useState(() => {
37
- if (switchable) {
38
- const stored = localStorage.getItem('theme');
39
- return stored || defaultTheme;
40
- }
41
- return defaultTheme;
42
- });
43
- useEffect(() => {
44
- const root = document.documentElement;
45
- if (theme === 'dark') {
46
- root.classList.add('dark');
47
- }
48
- else {
49
- root.classList.remove('dark');
50
- }
51
- if (switchable) {
52
- localStorage.setItem('theme', theme);
53
- }
54
- }, [theme, switchable]);
55
- const toggleTheme = switchable
56
- ? () => {
57
- setTheme((prev) => (prev === 'light' ? 'dark' : 'light'));
58
- }
59
- : undefined;
60
- return (_jsx(ThemeContext.Provider, { value: { theme, toggleTheme, switchable }, children: children }));
61
- }
62
- export function useTheme() {
63
- const context = useContext(ThemeContext);
64
- if (!context) {
65
- throw new Error('useTheme must be used within ThemeProvider');
66
- }
67
- return context;
68
- }
69
- export class ErrorBoundary extends Component {
70
- constructor(props) {
71
- super(props);
72
- this.state = { hasError: false, error: null };
73
- }
74
- static getDerivedStateFromError(error) {
75
- return { hasError: true, error };
76
- }
77
- render() {
78
- if (this.state.hasError) {
79
- return (_jsx("div", { className: "flex items-center justify-center min-h-screen p-8 bg-background", children: _jsxs("div", { className: "flex flex-col items-center w-full max-w-2xl p-8", children: [_jsx(AlertTriangle, { fontSize: 48, className: "text-destructive mb-6 flex-shrink-0" }), _jsx("h2", { className: "text-xl mb-4", children: "An unexpected error occurred." }), _jsx("div", { className: "p-4 w-full rounded bg-muted overflow-auto mb-6", children: _jsx("pre", { className: "text-sm text-muted-foreground whitespace-break-spaces", children: this.state.error?.stack }) }), _jsxs("button", { type: "button", onClick: () => window.location.reload(), className: cn('flex items-center gap-2 px-4 py-2 rounded-lg', 'bg-primary text-primary-foreground', 'hover:opacity-90 cursor-pointer'), children: [_jsx(RotateCcw, { fontSize: 16 }), "Reload Page"] })] }) }));
80
- }
81
- return this.props.children;
82
- }
83
- }
84
- /* =============================== brand mark ============================ */
85
- /**
86
- * SaddleMark — the premium drawn icon of the theme, rebuilt in the house
87
- * icon spirit (the devthink Sol/shell/app.icons.tsx standard): a gradient
88
- * squircle face over the saddle tan-leather story, a soft top gloss, a mid
89
- * layer of story orbs over a pedestal band, two blurred inner contours, a
90
- * contact ellipse, a discrete film grain and the glyph in thick ivory
91
- * strokes over a translucent backing. The finishing (glow breathing,
92
- * perspective tilt, glyph lift, one sheen sweep on hover) is animated by
93
- * Sol/sol.css — plain transform/opacity/filter transitions, guarded for
94
- * reduced motion and coarse pointers. Sized by the caller class or by the
95
- * chrome CSS (.dt-nav__start .sol-mark, .dt-start__foot .sol-mark).
96
- */
97
- /** the tan-leather story of saddle: face gradient top, glow and orb */
98
- const MARK_STORY = '#d6b483';
99
- /** the deep shade the face gradient settles into */
100
- const MARK_DEEP = '#8f6b3c';
101
- /** the warm subtone of the mid layer, contours and contact ellipse */
102
- const MARK_SOFT = '#f2e3c8';
103
- /** the warm ivory of the glyph strokes */
104
- const MARK_IVORY = '#fbf5ea';
105
- /** the translucent backing of the outlined glyph shapes */
106
- const MARK_BACKING = 'rgba(255,255,255,.14)';
107
- /** the asymmetric squircle of the face: tighter shoulders, heavier base */
108
- const MARK_SQUIRCLE = 'M22 0 L74 0 Q96 0 96 22 L96 66 Q96 96 66 96 L30 96 Q0 96 0 66 L0 22 Q0 0 22 0 Z';
109
- /** The sandbox engine glyph: the crate drawn in light isometric. */
110
- function MarkGlyph() {
111
- return (_jsxs(_Fragment, { children: [_jsx("path", { d: "M31 42.5 L40 33 H65 L56 42.5 Z", fill: MARK_BACKING }), _jsx("path", { d: "M56 42.5 L65 33 V56 L56 65.5 Z", fill: "rgba(255,255,255,.09)" }), _jsx("rect", { x: "31", y: "42.5", width: "25", height: "23", rx: "2.5", fill: MARK_BACKING })] }));
112
- }
113
- export function SaddleMark({ className, label = 'Saddle', size, hidden, flow }) {
114
- const a11y = label && !hidden
115
- ? { role: 'img', 'aria-label': label }
116
- : { 'aria-hidden': true };
117
- const sized = size ? { width: size, height: size } : undefined;
118
- return (_jsxs("span", { className: cn('sol-mark', flow && 'sol-mark--flow', className), style: sized, ...a11y, children: [_jsx("span", { className: "sol-mark__glow" }), _jsxs("svg", { className: "sol-mark__svg", viewBox: "0 0 96 96", "aria-hidden": "true", focusable: "false", children: [_jsxs("defs", { children: [_jsxs("linearGradient", { id: "sdlm-bg", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0", stopColor: MARK_STORY }), _jsx("stop", { offset: ".6", stopColor: MARK_STORY }), _jsx("stop", { offset: "1", stopColor: MARK_DEEP })] }), _jsxs("linearGradient", { id: "sdlm-gloss", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0", stopColor: "#ffffff", stopOpacity: ".32" }), _jsx("stop", { offset: "1", stopColor: "#ffffff", stopOpacity: "0" })] }), _jsxs("radialGradient", { id: "sdlm-orb", cx: ".5", cy: ".5", r: ".5", children: [_jsx("stop", { offset: "0", stopColor: MARK_SOFT, stopOpacity: ".9" }), _jsx("stop", { offset: ".35", stopColor: MARK_SOFT, stopOpacity: ".5" }), _jsx("stop", { offset: "1", stopColor: MARK_SOFT, stopOpacity: "0" })] }), _jsxs("linearGradient", { id: "sdlm-edge-l", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0", stopColor: MARK_SOFT, stopOpacity: "0" }), _jsx("stop", { offset: ".45", stopColor: MARK_SOFT, stopOpacity: ".3" }), _jsx("stop", { offset: "1", stopColor: MARK_SOFT, stopOpacity: ".7" })] }), _jsxs("linearGradient", { id: "sdlm-edge-d", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0", stopColor: MARK_SOFT, stopOpacity: "0" }), _jsx("stop", { offset: ".5", stopColor: MARK_SOFT, stopOpacity: ".22" }), _jsx("stop", { offset: "1", stopColor: MARK_SOFT, stopOpacity: ".55" })] }), _jsxs("linearGradient", { id: "sdlm-sheen", x1: "0", y1: "0", x2: "1", y2: "1", children: [_jsx("stop", { offset: "0", stopColor: "#ffffff", stopOpacity: "0" }), _jsx("stop", { offset: ".45", stopColor: "#ffffff", stopOpacity: ".5" }), _jsx("stop", { offset: ".55", stopColor: "#ffffff", stopOpacity: ".5" }), _jsx("stop", { offset: "1", stopColor: "#ffffff", stopOpacity: "0" })] }), _jsxs("linearGradient", { id: "sdlm-flow-band", x1: "0", y1: "0", x2: "1", y2: "0", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { offset: "0", stopColor: MARK_SOFT, stopOpacity: "0" }), _jsx("stop", { offset: ".5", stopColor: MARK_SOFT, stopOpacity: ".95" }), _jsx("stop", { offset: "1", stopColor: MARK_SOFT, stopOpacity: "0" })] }), _jsx("filter", { id: "sdlm-soft", x: "-40%", y: "-40%", width: "180%", height: "180%", children: _jsx("feGaussianBlur", { stdDeviation: "3" }) }), _jsx("filter", { id: "sdlm-wide", x: "-60%", y: "-60%", width: "220%", height: "220%", children: _jsx("feGaussianBlur", { stdDeviation: "8" }) }), _jsx("filter", { id: "sdlm-lift", x: "-40%", y: "-40%", width: "180%", height: "180%", children: _jsx("feDropShadow", { dx: "0", dy: "2", stdDeviation: "2", floodColor: MARK_DEEP, floodOpacity: ".38" }) }), _jsxs("filter", { id: "sdlm-grain", x: "0%", y: "0%", width: "100%", height: "100%", children: [_jsx("feTurbulence", { type: "fractalNoise", baseFrequency: "0.9", numOctaves: "2", stitchTiles: "stitch", result: "n" }), _jsx("feColorMatrix", { in: "n", type: "saturate", values: "0" }), _jsx("feComposite", { operator: "in", in2: "SourceGraphic" })] }), _jsx("clipPath", { id: "sdlm-clip", children: _jsx("path", { d: MARK_SQUIRCLE }) })] }), _jsx("path", { d: MARK_SQUIRCLE, fill: "url(#sdlm-bg)" }), _jsx("path", { d: MARK_SQUIRCLE, fill: "url(#sdlm-gloss)", opacity: ".5" }), _jsxs("g", { clipPath: "url(#sdlm-clip)", children: [_jsxs("g", { className: "sol-mark__mid", children: [_jsx("circle", { cx: "48", cy: "40", r: "25", fill: "url(#sdlm-orb)", filter: "url(#sdlm-wide)", opacity: ".85" }), _jsx("rect", { x: "-12", y: "56", width: "120", height: "44", fill: MARK_SOFT, opacity: ".3", filter: "url(#sdlm-soft)" })] }), _jsx("path", { d: MARK_SQUIRCLE, fill: "none", stroke: "url(#sdlm-edge-d)", strokeWidth: "6", filter: "url(#sdlm-wide)", opacity: ".55", transform: "translate(1.4 1.9) scale(0.97)" }), _jsx("path", { d: MARK_SQUIRCLE, fill: "none", stroke: "url(#sdlm-edge-l)", strokeWidth: "2.5", filter: "url(#sdlm-soft)", opacity: ".5" }), _jsx("ellipse", { cx: "48", cy: "94", rx: "30", ry: "7", fill: "url(#sdlm-orb)", filter: "url(#sdlm-soft)", opacity: ".55" }), _jsx("g", { className: "sol-mark__sheen", children: _jsx("rect", { x: "-11", y: "-24", width: "26", height: "144", fill: "url(#sdlm-sheen)", transform: "skewX(-16)" }) }), _jsx("path", { d: MARK_SQUIRCLE, fill: "#ffffff", filter: "url(#sdlm-grain)", opacity: ".08" })] }), _jsx("g", { filter: "url(#sdlm-lift)", children: _jsx("g", { className: "sol-mark__glyph", fill: "none", stroke: MARK_IVORY, strokeWidth: "5", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx(MarkGlyph, {}) }) }), flow ? (_jsx("g", { className: "sol-mark__flow", fill: "none", stroke: "url(#sdlm-flow-band)", strokeWidth: "3.5", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx(MarkGlyph, {}) })) : null] })] }));
119
- }
120
- export function SectionRail({ number, label }) {
121
- return (_jsxs("div", { className: "section-rail", role: "group", "aria-label": `${number} ${label}`, children: [_jsx("span", { className: "rail-number", children: number }), _jsx("span", { className: "rail-line" }), _jsx("span", { className: "rail-label", children: label })] }));
122
- }
123
- /** the rail of the app, SECTIONED: workspace, platform, library and
124
- * account — one entry per page route, the apex home first. exported for
125
- * the onboarding copy beside this folder. */
126
- export const NAV_SECTIONS = [
127
- {
128
- id: 'workspace',
129
- label: 'workspace',
130
- apps: [
131
- { href: '/', label: 'home', detail: 'the thesis and the machine', icon: LayoutDashboard },
132
- {
133
- href: '/dashboard',
134
- label: 'dashboard',
135
- detail: 'sessions, users and the admin panel',
136
- icon: Gauge,
137
- },
138
- { href: '/console', label: 'console', detail: 'operations and events', icon: TerminalSquare },
139
- {
140
- href: '/playground',
141
- label: 'playground',
142
- detail: 'map requests, never run them',
143
- icon: FlaskConical,
144
- },
145
- ],
146
- },
147
- {
148
- id: 'platform',
149
- label: 'platform',
150
- apps: [
151
- { href: '/compute', label: 'compute', detail: 'execution layers and tiers', icon: Cpu },
152
- {
153
- href: '/integrations',
154
- label: 'integrations',
155
- detail: 'surfaces and bridges',
156
- icon: PlugZap,
157
- },
158
- {
159
- href: '/agent-browser',
160
- label: 'agentbrowser',
161
- detail: "the agent's own browser",
162
- icon: AppWindow,
163
- },
164
- ],
165
- },
166
- {
167
- id: 'library',
168
- label: 'library',
169
- apps: [
170
- { href: '/docs', label: 'docs', detail: 'the working notes', icon: BookOpen },
171
- {
172
- href: '/architecture',
173
- label: 'architecture',
174
- detail: 'repo, CI, pages, buckets',
175
- icon: Boxes,
176
- },
177
- ],
178
- },
179
- {
180
- id: 'account',
181
- label: 'account',
182
- apps: [
183
- { href: '/login', label: 'login', detail: 'sign in to the node', icon: LogIn },
184
- { href: '/register', label: 'register', detail: 'create the local account', icon: UserPlus },
185
- ],
186
- },
187
- ];
188
- /** the pages the window hosts, flattened (the onboarding facts read this). */
189
- export const START_APPS = NAV_SECTIONS.flatMap((section) => section.apps);
190
- /** one accent-dotted family link of the rail foot (spec §12): the sibling
191
- * deploy units beside saddle, each linked by the familyurl contract with the
192
- * accent dot riding the shared family.ts table — the same row the node:test
193
- * suite pins, so the rail foot can never drift from the landing footer. */
194
- function FamilyRail() {
195
- return (_jsx("div", { className: "winapp__family", children: familyrow().map((member) => (_jsxs("a", { className: "winapp__famlink", href: familyurl(member.slug), target: "_blank", rel: "noreferrer", title: `${member.slug} — opens in a new tab`, "aria-label": `open ${member.slug} in a new tab`, style: { '--fam-dot': member.accent }, children: [_jsx("span", { className: "winapp__famdot", "aria-hidden": "true" }), _jsx("span", { className: "winapp__famlabel", children: member.slug })] }, member.slug))) }));
196
- }
197
- /**
198
- * the theme flip of the rail foot: flips the document theme class,
199
- * stores nothing (the in-memory doctrine of the app surface).
200
- *
201
- * @returns the toggle element.
202
- */
203
- function ThemeToggle() {
204
- const [theme, setTheme] = useState(() => typeof document === 'undefined' || document.documentElement.classList.contains('dark')
205
- ? 'dark'
206
- : 'light');
207
- /** flips the dark class on the root and mirrors it into the label. */
208
- function toggle() {
209
- const next = theme === 'dark' ? 'light' : 'dark';
210
- document.documentElement.classList.toggle('dark', next === 'dark');
211
- setTheme(next);
212
- }
213
- return (_jsxs("button", { type: "button", className: "winapp__theme", "aria-label": "toggle theme", onClick: toggle, children: [theme === 'dark' ? (_jsx(Sun, { fontSize: 14, "aria-hidden": "true" })) : (_jsx(Moon, { fontSize: 14, "aria-hidden": "true" })), theme] }));
214
- }
215
- /**
216
- * the app surface: the SECTIONED page rail and the routed stage beside it,
217
- * owning the whole viewport.
218
- *
219
- * @param children the routed page.
220
- * @returns the app surface element.
221
- */
222
- export function Shell({ children, themeButton = true }) {
223
- // the embedded contract: inside the os power clip the app rides the host
224
- // window chrome — the seat class answers the mount, the surface tree
225
- // never changes between the two doors (the window-era law: one design)
226
- const framed = (() => {
227
- try {
228
- return window.self !== window.top;
229
- }
230
- catch {
231
- return true;
232
- }
233
- })();
234
- const [location] = useLocation();
235
- // the active rail entry: the bare path owns home, every other page owns its route
236
- const isActive = (href) => href === '/' ? location === '/' : location === href || location.startsWith(`${href}/`);
237
- // the embedded seat: inside the os power clip the app rides the host
238
- // window chrome, but the SURFACE stays the same — the seat class
239
- // answers the mount so differential styles (if any) can find it, the
240
- // tree never changes between the two doors (the window-era law: one
241
- // design)
242
- const seat = framed ? 'shell--embedded' : 'shell--standalone';
243
- // the surface pass: the direct url answers full-bleed — the window
244
- // chrome exists only inside the os power clip, so the app owns the whole
245
- // viewport; the SECTIONED page rail stays as the app's own navigation
246
- // and the routed stage fills the rest of the screen
247
- return (_jsx("div", { className: `shell ${seat}`, children: _jsxs("div", { className: "winapp__body", children: [_jsxs("nav", { className: "winapp__rail", "aria-label": "Pages", children: [NAV_SECTIONS.map((section) => (_jsxs("div", { className: "winapp__section", children: [_jsx("p", { className: "winapp__sectionlabel", "aria-hidden": "true", children: section.label }), section.apps.map((app) => {
248
- const Icon = app.icon;
249
- return (_jsxs(Link, { href: app.href, className: "winapp__raillink", title: app.detail, "aria-label": app.label, "aria-current": isActive(app.href) ? 'page' : undefined, children: [_jsx(Icon, { fontSize: 16, strokeWidth: 1.7, "aria-hidden": "true" }), _jsx("span", { className: "winapp__raillabel", children: app.label })] }, app.href));
250
- })] }, section.id))), _jsxs("div", { className: "winapp__railfoot", children: [_jsx("p", { className: "winapp__familyhead", "aria-hidden": "true", children: "family" }), _jsx(FamilyRail, {}), themeButton ? _jsx(ThemeToggle, {}) : null] })] }), _jsx("div", { className: "winapp__stage", children: _jsx("main", { className: "shell", children: children }) })] }) }));
251
- }
252
- export default Shell;
253
- // the prop keeps its public name `label` for every caller; the local
254
- // binding answers `pagelabel` so the label store accessor the footer
255
- // reads stays in scope (the copy law — no shadow, no hardcoded string).
256
- export function PageShell({ section, label: pagelabel, title, intro, children, media }) {
257
- return (_jsxs("div", { className: "site-frame", children: [_jsxs("main", { children: [_jsxs("section", { className: "page-intro halftone container", children: [_jsx(SectionRail, { number: section, label: pagelabel }), _jsxs("div", { className: "page-intro-copy", children: [_jsxs("p", { className: "eyebrow", children: ["saddle \u00B7 ", pagelabel] }), _jsx("h1", { className: "page-title", children: title }), _jsx("p", { className: "page-intro-text", children: intro })] }), media && (_jsx("figure", { className: "page-intro-art media-area", style: { aspectRatio: media.ratio }, "aria-label": "media area", children: _jsxs("figcaption", { children: [_jsx("span", { children: media.label }), _jsx("span", { children: media.caption })] }) }))] }), _jsx("div", { className: "page-content container", children: children })] }), _jsxs("footer", { className: "site-footer container", children: [_jsx("span", { children: label('home.footer.copyright') }), _jsx("span", { className: "mono-label", children: label('home.footer.mono') })] })] }));
258
- }
259
- /* ================================== button ============================= */
260
- const buttonVariants = cva(
261
- // biome-ignore lint/security/noSecrets: the cva base string is a tailwind utility list, not a credential
262
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", {
263
- variants: {
264
- variant: {
265
- default: 'bg-primary text-primary-foreground hover:bg-primary/90',
266
- destructive: 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',
267
- outline: 'border bg-transparent shadow-xs hover:bg-accent dark:bg-transparent dark:border-input dark:hover:bg-input/50',
268
- secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
269
- ghost: 'hover:bg-accent dark:hover:bg-accent/50',
270
- link: 'text-primary underline-offset-4 hover:underline',
271
- },
272
- size: {
273
- default: 'h-9 px-4 py-2 has-[>svg]:px-3',
274
- sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',
275
- lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',
276
- icon: 'size-9',
277
- 'icon-sm': 'size-8',
278
- 'icon-lg': 'size-10',
279
- },
280
- },
281
- defaultVariants: {
282
- variant: 'default',
283
- size: 'default',
284
- },
285
- });
286
- function Button({ className, variant, size, asChild = false, ...props }) {
287
- const Comp = asChild ? Slot : 'button';
288
- return (_jsx(Comp, { "data-slot": "button", className: cn(buttonVariants({ variant, size, className })), ...props }));
289
- }
290
- /* =================================== card ============================== */
291
- function Card({ className, ...props }) {
292
- return (_jsx("div", { "data-slot": "card", className: cn('bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm', className), ...props }));
293
- }
294
- function CardHeader({ className, ...props }) {
295
- return (_jsx("div", { "data-slot": "card-header", className: cn('@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6', className), ...props }));
296
- }
297
- function CardTitle({ className, ...props }) {
298
- return (_jsx("div", { "data-slot": "card-title", className: cn('leading-none font-semibold', className), ...props }));
299
- }
300
- function CardDescription({ className, ...props }) {
301
- return (_jsx("div", { "data-slot": "card-description", className: cn('text-muted-foreground text-sm', className), ...props }));
302
- }
303
- function CardAction({ className, ...props }) {
304
- return (_jsx("div", { "data-slot": "card-action", className: cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className), ...props }));
305
- }
306
- function CardContent({ className, ...props }) {
307
- return _jsx("div", { "data-slot": "card-content", className: cn('px-6', className), ...props });
308
- }
309
- function CardFooter({ className, ...props }) {
310
- return (_jsx("div", { "data-slot": "card-footer", className: cn('flex items-center px-6 [.border-t]:pt-6', className), ...props }));
311
- }
312
- /* ================================= tooltip ============================= */
313
- function TooltipProvider({ delayDuration = 0, ...props }) {
314
- return (_jsx(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration: delayDuration, ...props }));
315
- }
316
- function Tooltip({ ...props }) {
317
- return (_jsx(TooltipProvider, { children: _jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props }) }));
318
- }
319
- function TooltipTrigger({ ...props }) {
320
- return _jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
321
- }
322
- function TooltipContent({ className, sideOffset = 0, children, ...props }) {
323
- return (_jsx(TooltipPrimitive.Portal, { children: _jsxs(TooltipPrimitive.Content, { "data-slot": "tooltip-content", sideOffset: sideOffset, className: cn('bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance', className), ...props, children: [children, _jsx(TooltipPrimitive.Arrow, { className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })] }) }));
324
- }
325
- /* ================================== sonner ============================= */
326
- const Toaster = ({ ...props }) => {
327
- const { theme = 'system' } = useNextTheme();
328
- return (_jsx(Sonner, { theme: theme, className: "toaster group", style: {
329
- '--normal-bg': 'var(--popover)',
330
- '--normal-text': 'var(--popover-foreground)',
331
- '--normal-border': 'var(--border)',
332
- }, ...props }));
333
- };
334
- /* ================================ exports ============================== */
335
- export { Button, buttonVariants, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, };
@@ -1,6 +0,0 @@
1
- /**
2
- * the boot ladder strip: one tile per boot class with the ceiling the
3
- * records state — while the plan loads the tiles skeleton, when the engine
4
- * does not answer the tiles say unreached instead of inventing numbers.
5
- */
6
- export default function ComputeBootladder(): import("react").JSX.Element;
@@ -1,71 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // Signal & Ledger: the boot ladder — the three boot classes with the
3
- // ceilings the records themselves state. The winget fetches the plan on
4
- // mount and computes the hot / warm / cold floors and ceilings from the
5
- // fetched records; no number in this file is fixed.
6
- import { TimerRegular as Ladder } from "@fluentui/react-icons";
7
- import { useEffect, useState } from "react";
8
- import { fetchmodalities } from "../../api.ts";
9
- /** the three boot classes of the plan: the class names are the ladder
10
- * shape (ui scaffolding), every number comes from the fetched records. */
11
- const classes = ["hot", "warm", "cold"];
12
- /** computes the rungs from the fetched records: min / max bootms per class,
13
- * empty classes stay out of the ladder. */
14
- function rungsof(plan) {
15
- return classes
16
- .map((boot) => {
17
- const times = plan.records.filter((record) => record.boot === boot).map((record) => record.bootms);
18
- return {
19
- boot,
20
- count: times.length,
21
- floor: times.length > 0 ? Math.min(...times) : 0,
22
- ceiling: times.length > 0 ? Math.max(...times) : 0,
23
- };
24
- })
25
- .filter((rung) => rung.count > 0);
26
- }
27
- /**
28
- * the boot ladder strip: one tile per boot class with the ceiling the
29
- * records state — while the plan loads the tiles skeleton, when the engine
30
- * does not answer the tiles say unreached instead of inventing numbers.
31
- */
32
- export default function ComputeBootladder() {
33
- const [plan, setplan] = useState(null);
34
- const [failed, setfailed] = useState(false);
35
- /** the ladder mount: read the plan once; null means the engine slept. */
36
- useEffect(() => {
37
- let cancelled = false;
38
- fetchmodalities()
39
- .then((result) => {
40
- if (cancelled)
41
- return;
42
- if (result === null) {
43
- setfailed(true);
44
- return;
45
- }
46
- setfailed(false);
47
- setplan(result);
48
- })
49
- .catch(() => {
50
- if (!cancelled)
51
- setfailed(true);
52
- });
53
- return () => {
54
- cancelled = true;
55
- };
56
- }, []);
57
- const rungs = plan === null ? [] : rungsof(plan);
58
- const loading = plan === null && !failed;
59
- return (_jsxs("section", { className: "content-section", "aria-label": "the boot ladder of the engine plan", children: [_jsxs("div", { className: "content-section-heading", children: [_jsx("p", { className: "eyebrow", children: "BOOT LADDER / CLASSES" }), _jsxs("span", { className: "mono-label", children: [_jsx(Ladder, { fontSize: 12, "aria-hidden": "true" }), " ", failed ? "engine unreachable" : "ceilings from the records"] })] }), _jsx("div", { className: "metric-strip", children: classes.map((boot) => {
60
- const rung = rungs.find((entry) => entry.boot === boot);
61
- return (_jsxs("div", { className: "metric", children: [_jsx("span", { className: "metric-value", children: loading ? _jsx("span", { className: "dash-skeleton" }) : rung === undefined ? "—" : `${rung.ceiling} ms` }), _jsx("span", { className: "metric-label", children: failed
62
- ? `${boot} · unreached`
63
- : rung === undefined
64
- ? `${boot} · empty class`
65
- : `${boot} · boot ceiling` }), _jsx("span", { className: "metric-detail", children: failed
66
- ? "the engine did not answer"
67
- : rung === undefined
68
- ? "the plan carries no member"
69
- : `floor ${rung.floor} ms · ${rung.count} modalities` })] }, boot));
70
- }) })] }));
71
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * the modality catalog surface: the plan counts strip, then one row per
3
- * record the engine serves — loading renders skeleton rows, an unreachable
4
- * engine renders the honest single line, an empty plan renders the empty
5
- * caption.
6
- */
7
- export default function ComputeModalitycatalog(): import("react").JSX.Element;
@@ -1,71 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // Signal & Ledger: the compute face — the modality catalog the engine
3
- // states about itself. The winget carries zero fixed records: the plan
4
- // counts and every table row arrive from /api/v1/modalities on mount (the
5
- // wingets consume the db through the api, never a shipped array), and
6
- // when the engine does not answer the surface says so in one line
7
- // instead of painting rows it does not have.
8
- import { TableSimpleRegular as Catalog } from "@fluentui/react-icons";
9
- import { useEffect, useState } from "react";
10
- import { fetchmodalities } from "../../api.ts";
11
- /** the plan-state tones ride the house chip system: live keeps the success
12
- * ink, host the neutral chip, planned the muted one — no new colors. */
13
- const statetone = {
14
- live: "dash-chip online",
15
- host: "dash-chip",
16
- planned: "dash-chip off",
17
- };
18
- /** the static legend: ui copy, not data — what each plan state means. */
19
- const legend = "live runs on the edge engine today · host answers when the guest host provides the lane · planned seats wait in the roadmap";
20
- /** the honest error line: the engine is the only source of rows. */
21
- const unreachable = "the engine is unreachable — the catalog rides the saddle api";
22
- /** the skeleton row widths while the plan loads (a descending ladder so
23
- * the shimmer reads as rows, not bars). */
24
- const skeletonwidths = [94, 88, 82, 76, 70, 64];
25
- /** the lane flags of one record as one mono cell (gpu / network). */
26
- function laneflags(record) {
27
- const flags = [record.gpu ? "gpu" : "", record.network ? "net" : ""].filter(Boolean);
28
- return flags.length > 0 ? flags.join(" · ") : "—";
29
- }
30
- /** one honest tile of the plan counts strip. */
31
- function Count({ value, label, detail }) {
32
- return (_jsxs("div", { className: "metric", children: [_jsx("span", { className: "metric-value", children: value === "load" ? _jsx("span", { className: "dash-skeleton" }) : value }), _jsx("span", { className: "metric-label", children: label }), _jsx("span", { className: "metric-detail", children: detail })] }));
33
- }
34
- /**
35
- * the modality catalog surface: the plan counts strip, then one row per
36
- * record the engine serves — loading renders skeleton rows, an unreachable
37
- * engine renders the honest single line, an empty plan renders the empty
38
- * caption.
39
- */
40
- export default function ComputeModalitycatalog() {
41
- const [plan, setplan] = useState(null);
42
- const [failed, setfailed] = useState(false);
43
- /** the catalog mount: read the plan once; null means the engine slept. */
44
- useEffect(() => {
45
- let cancelled = false;
46
- fetchmodalities()
47
- .then((result) => {
48
- if (cancelled)
49
- return;
50
- if (result === null) {
51
- setfailed(true);
52
- return;
53
- }
54
- setfailed(false);
55
- setplan(result);
56
- })
57
- .catch(() => {
58
- if (!cancelled)
59
- setfailed(true);
60
- });
61
- return () => {
62
- cancelled = true;
63
- };
64
- }, []);
65
- const records = plan === null ? [] : plan.records;
66
- const loading = plan === null && !failed;
67
- return (_jsxs("section", { className: "content-section", "aria-label": "the modality catalog served by the saddle api", children: [_jsxs("div", { className: "content-section-heading", children: [_jsx("p", { className: "eyebrow", children: "MODALITY CATALOG / THE PLAN" }), _jsxs("span", { className: "mono-label", children: [_jsx(Catalog, { fontSize: 12, "aria-hidden": "true" }), " served by the engine api"] })] }), failed ? (_jsx("p", { className: "dash-panelerror", children: unreachable })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "metric-strip", children: [_jsx(Count, { value: loading ? "load" : (plan?.plancount ?? 0), label: "modalities", detail: "the plan total" }), _jsx(Count, { value: loading ? "load" : (plan?.live ?? 0), label: "live", detail: "running on the edge engine" }), _jsx(Count, { value: loading ? "load" : (plan?.host ?? 0), label: "host", detail: "host-gated lanes" }), _jsx(Count, { value: loading ? "load" : (plan?.planned ?? 0), label: "planned", detail: "roadmap seats" })] }), _jsx("section", { className: "dash-tablescroll",
68
- // biome-ignore lint/a11y/noNoninteractiveTabindex: deliberate wcag scrollable-region pattern: the tabIndex keeps the overflowing catalog keyboard-scrollable; the table itself only presents rows
69
- tabIndex: 0, "aria-label": "the modality catalog table", children: _jsxs("table", { children: [loading && _jsx("caption", { className: "dash-empty", children: "reading the plan from the engine\u2026" }), !loading && records.length === 0 && (_jsx("caption", { className: "dash-empty", children: "the engine carries no records yet" })), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: "id" }), _jsx("th", { scope: "col", children: "label" }), _jsx("th", { scope: "col", children: "family" }), _jsx("th", { scope: "col", children: "state" }), _jsx("th", { scope: "col", children: "boot" }), _jsx("th", { scope: "col", children: "lanes" })] }) }), _jsxs("tbody", { children: [loading &&
70
- skeletonwidths.map((width) => (_jsx("tr", { children: _jsx("td", { colSpan: 6, children: _jsx("span", { className: "dash-skeleton", style: { width: `${width}%` } }) }) }, `skeleton-${width}`))), records.map((record) => (_jsxs("tr", { children: [_jsx("td", { className: "wrapcell", children: record.id }), _jsx("td", { children: record.label }), _jsx("td", { children: record.family }), _jsx("td", { children: _jsx("span", { className: statetone[record.state], children: record.state }) }), _jsxs("td", { children: [record.boot, " \u00B7 ", record.bootms, " ms"] }), _jsx("td", { children: laneflags(record) })] }, record.id)))] })] }) }), _jsx("p", { className: "dash-statusnote", children: legend })] }))] }));
71
- }
@@ -1,7 +0,0 @@
1
- type ApiBadgeProps = {
2
- apion: boolean;
3
- label: string;
4
- };
5
- /** the engine-mode badge ("api connected (v..., uptime ...s)" or local). */
6
- export default function ApiBadge({ apion, label }: ApiBadgeProps): import("react").JSX.Element;
7
- export {};
@@ -1,5 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /** the engine-mode badge ("api connected (v..., uptime ...s)" or local). */
3
- export default function ApiBadge({ apion, label }) {
4
- return (_jsx("span", { className: apion ? 'api-badge apion' : 'api-badge', "aria-live": "polite", children: label }));
5
- }
@@ -1,6 +0,0 @@
1
- /**
2
- * the edge-law band: a single slim line above the console content — the
3
- * shield, the law sentence and, once the engine answers, the live / host /
4
- * planned micro-counts of the modality plan.
5
- */
6
- export default function ConsoleEdgelaw(): import("react").JSX.Element;
@@ -1,36 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // The Law Banner: the console states the execution law — every pass runs
3
- // on the saddle edge engine over the internet, never on the visitor
4
- // machine (no visitor browser, gpu or cpu). The micro-counts (live / host
5
- // / planned) arrive from /api/v1/modalities on mount; while they load the
6
- // sentence stands alone.
7
- import { ShieldTaskRegular as Shield } from "@fluentui/react-icons";
8
- import { useEffect, useState } from "react";
9
- import { fetchmodalities } from "../../api.ts";
10
- /** the law the console carries: one sentence, lowercase english. */
11
- const lawsentence = "the saddle edge engine executes every pass — nothing runs on the visitor machine";
12
- /**
13
- * the edge-law band: a single slim line above the console content — the
14
- * shield, the law sentence and, once the engine answers, the live / host /
15
- * planned micro-counts of the modality plan.
16
- */
17
- export default function ConsoleEdgelaw() {
18
- const [plan, setplan] = useState(null);
19
- /** the banner mount: read the plan once; silence keeps the sentence alone. */
20
- useEffect(() => {
21
- let cancelled = false;
22
- fetchmodalities()
23
- .then((result) => {
24
- if (!cancelled && result !== null) {
25
- setplan(result);
26
- }
27
- })
28
- .catch(() => {
29
- /* the sentence alone is the honest floor when the engine sleeps */
30
- });
31
- return () => {
32
- cancelled = true;
33
- };
34
- }, []);
35
- return (_jsxs("p", { className: "r3-declared-ribbon", role: "note", children: [_jsx(Shield, { fontSize: 13, "aria-hidden": "true" }), " ", lawsentence, plan !== null && ` · live ${plan.live} · host ${plan.host} · planned ${plan.planned}`] }));
36
- }
@@ -1,19 +0,0 @@
1
- /** timeline entry kinds tinting the left border. */
2
- export type SandboxEventKind = 'lifecycle' | 'exec' | 'snapshot';
3
- /** one bus event row: stamp, sequence, topic and detail. */
4
- export type SandboxEvent = {
5
- id: number;
6
- time: string;
7
- topic: string;
8
- detail: string;
9
- kind: SandboxEventKind;
10
- };
11
- type EventsTimelineProps = {
12
- events: SandboxEvent[];
13
- };
14
- /**
15
- * the bus event timeline (role=log, polite aria-live); the empty state
16
- * matches the static page ("no events yet; start the sandbox.").
17
- */
18
- export default function EventsTimeline({ events }: EventsTimelineProps): import("react").JSX.Element;
19
- export {};
@@ -1,12 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // Events timeline: faithful absorption of the console.html bus events aside —
3
- // the newest event on top, kind-tinted left borders and a 50 entry cap
4
- // maintained by the console page.
5
- import { label } from '../../labels.ts';
6
- /**
7
- * the bus event timeline (role=log, polite aria-live); the empty state
8
- * matches the static page ("no events yet; start the sandbox.").
9
- */
10
- export default function EventsTimeline({ events }) {
11
- return (_jsxs("aside", { className: "events-panel", "aria-labelledby": "eventstitle", children: [_jsx("h2", { className: "sandbox-panel-title", id: "eventstitle", children: label('console.events.title') }), _jsx("ol", { className: "events-list", role: "log", "aria-live": "polite", "aria-label": label('console.events.aria'), children: events.length === 0 ? (_jsx("li", { className: "events-empty", children: label('console.events.empty') })) : (events.map((event) => (_jsxs("li", { className: event.kind, children: [_jsx("span", { className: "event-time", children: `${event.time} #${event.id} ` }), _jsx("span", { className: "event-topic", children: event.topic }), _jsx("span", { className: "event-detail", children: event.detail })] }, event.id)))) })] }));
12
- }
@@ -1,8 +0,0 @@
1
- type SnapshotControlsProps = {
2
- running: boolean;
3
- onsnapshot: () => void;
4
- onstop: () => void;
5
- };
6
- /** the snapshot and teardown buttons of the running sandbox. */
7
- export default function SnapshotControls({ running, onsnapshot, onstop }: SnapshotControlsProps): import("react").JSX.Element;
8
- export {};
@@ -1,8 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // Snapshot controls: faithful absorption of the console.html snapshot/stop
3
- // buttons — both stay disabled until a sandbox is running.
4
- import { label } from '../../labels.ts';
5
- /** the snapshot and teardown buttons of the running sandbox. */
6
- export default function SnapshotControls({ running, onsnapshot, onstop }) {
7
- return (_jsxs(_Fragment, { children: [_jsx("button", { className: "button", type: "button", disabled: !running, onClick: onsnapshot, "aria-label": label('console.snapshotAria'), children: label('console.snapshot') }), _jsx("button", { className: "button", type: "button", disabled: !running, onClick: onstop, "aria-label": label('console.stopAria'), children: label('console.stop') })] }));
8
- }