@wenathlan/saddle 2.0.153 → 2.0.155

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 (307) hide show
  1. package/Dockerfile +139 -55
  2. package/README.md +58 -59
  3. package/browser.ts +482 -0
  4. package/cli.ts +274 -0
  5. package/distribution.ts +731 -0
  6. package/docker.config +29 -8
  7. package/docs/artifactavailability.md +2 -2
  8. package/docs/browser.md +18 -1
  9. package/docs/{containerplatforms.2.1.0.md → containerplatforms210.md} +1 -1
  10. package/docs/{documentmap.1.8.12.md → documentmap1812.md} +1 -1
  11. package/docs/extension.md +13 -2
  12. package/docs/libraryapi.md +1 -1
  13. package/docs/{ninety.modalities.md → ninetymodalities.md} +87 -4
  14. package/docs/{planning.ninety.md → planningninety.md} +6 -6
  15. package/docs/{releasenotes.1.8.13.md → releasenotes1813.md} +2 -2
  16. package/docs/{releasenotes.1.8.14.md → releasenotes1814.md} +1 -1
  17. package/docs/{repo.synthesis.1.8.16.md → reposynthesis1816.md} +1 -1
  18. package/docs/todo.md +2 -2
  19. package/docs/{todo.1.8.15.md → todo1815.md} +1 -1
  20. package/docs/{todo.1.8.16.md → todo1816.md} +5 -5
  21. package/execution.ts +677 -0
  22. package/foundation.ts +314 -0
  23. package/index.ts +35 -27
  24. package/isolation.ts +84 -0
  25. package/modes.ts +170 -0
  26. package/mttg.config +1 -1
  27. package/orchestrator.ts +49 -15
  28. package/package.json +90 -75
  29. package/qemu.config +2 -2
  30. package/sandbox.ts +2094 -0
  31. package/scheduler.ts +1 -1
  32. package/server.ts +52 -0
  33. package/tsconfig.json +11 -12
  34. package/virtual.ts +1105 -0
  35. package/virtualgpu.ts +1 -1
  36. package/virtualization.ts +1 -1
  37. package/workloadlaw.ts +293 -0
  38. package/dist/App.d.ts +0 -5
  39. package/dist/App.js +0 -52
  40. package/dist/Sol/Sol.d.ts +0 -3
  41. package/dist/Sol/Sol.js +0 -46
  42. package/dist/Sol/agentbrowser/agentbrowser.d.ts +0 -9
  43. package/dist/Sol/agentbrowser/agentbrowser.js +0 -121
  44. package/dist/Sol/architecture/architecture.d.ts +0 -9
  45. package/dist/Sol/architecture/architecture.js +0 -93
  46. package/dist/Sol/compute/compute.d.ts +0 -9
  47. package/dist/Sol/compute/compute.js +0 -22
  48. package/dist/Sol/console/console.d.ts +0 -15
  49. package/dist/Sol/console/console.js +0 -292
  50. package/dist/Sol/dashboard/dashboard.d.ts +0 -10
  51. package/dist/Sol/dashboard/dashboard.js +0 -181
  52. package/dist/Sol/docs/docs.d.ts +0 -9
  53. package/dist/Sol/docs/docs.js +0 -28
  54. package/dist/Sol/home/home.d.ts +0 -35
  55. package/dist/Sol/home/home.js +0 -239
  56. package/dist/Sol/integrations/integrations.d.ts +0 -9
  57. package/dist/Sol/integrations/integrations.js +0 -83
  58. package/dist/Sol/intro/intro.d.ts +0 -7
  59. package/dist/Sol/intro/intro.js +0 -102
  60. package/dist/Sol/login/login.d.ts +0 -16
  61. package/dist/Sol/login/login.js +0 -49
  62. package/dist/Sol/notfound/notfound.d.ts +0 -9
  63. package/dist/Sol/notfound/notfound.js +0 -15
  64. package/dist/Sol/onboarding/onboarding.d.ts +0 -25
  65. package/dist/Sol/onboarding/onboarding.js +0 -60
  66. package/dist/Sol/playground/playground.d.ts +0 -9
  67. package/dist/Sol/playground/playground.js +0 -127
  68. package/dist/Sol/register/register.d.ts +0 -16
  69. package/dist/Sol/register/register.js +0 -193
  70. package/dist/Sol/shell/Shell.d.ts +0 -124
  71. package/dist/Sol/shell/Shell.js +0 -335
  72. package/dist/Sol/wingets/ComputeBootladder.d.ts +0 -6
  73. package/dist/Sol/wingets/ComputeBootladder.js +0 -71
  74. package/dist/Sol/wingets/ComputeModalitycatalog.d.ts +0 -7
  75. package/dist/Sol/wingets/ComputeModalitycatalog.js +0 -71
  76. package/dist/Sol/wingets/ConsoleApibadge.d.ts +0 -7
  77. package/dist/Sol/wingets/ConsoleApibadge.js +0 -5
  78. package/dist/Sol/wingets/ConsoleEdgelaw.d.ts +0 -6
  79. package/dist/Sol/wingets/ConsoleEdgelaw.js +0 -36
  80. package/dist/Sol/wingets/ConsoleEventstimeline.d.ts +0 -19
  81. package/dist/Sol/wingets/ConsoleEventstimeline.js +0 -12
  82. package/dist/Sol/wingets/ConsoleSnapshotcontrols.d.ts +0 -8
  83. package/dist/Sol/wingets/ConsoleSnapshotcontrols.js +0 -8
  84. package/dist/Sol/wingets/ConsoleSpecpanel.d.ts +0 -21
  85. package/dist/Sol/wingets/ConsoleSpecpanel.js +0 -75
  86. package/dist/Sol/wingets/ConsoleTerminal.d.ts +0 -22
  87. package/dist/Sol/wingets/ConsoleTerminal.js +0 -77
  88. package/dist/Sol/wingets/DashboardAccountpanel.d.ts +0 -18
  89. package/dist/Sol/wingets/DashboardAccountpanel.js +0 -65
  90. package/dist/Sol/wingets/DashboardAdminpanel.d.ts +0 -6
  91. package/dist/Sol/wingets/DashboardAdminpanel.js +0 -90
  92. package/dist/Sol/wingets/DashboardAuditlog.d.ts +0 -8
  93. package/dist/Sol/wingets/DashboardAuditlog.js +0 -50
  94. package/dist/Sol/wingets/DashboardCreatesandboxform.d.ts +0 -10
  95. package/dist/Sol/wingets/DashboardCreatesandboxform.js +0 -71
  96. package/dist/Sol/wingets/DashboardEventstimeline.d.ts +0 -8
  97. package/dist/Sol/wingets/DashboardEventstimeline.js +0 -83
  98. package/dist/Sol/wingets/DashboardGlobalsandboxestable.d.ts +0 -8
  99. package/dist/Sol/wingets/DashboardGlobalsandboxestable.js +0 -57
  100. package/dist/Sol/wingets/DashboardMeshnodestable.d.ts +0 -8
  101. package/dist/Sol/wingets/DashboardMeshnodestable.js +0 -103
  102. package/dist/Sol/wingets/DashboardSandboxlist.d.ts +0 -10
  103. package/dist/Sol/wingets/DashboardSandboxlist.js +0 -163
  104. package/dist/Sol/wingets/DashboardUserstable.d.ts +0 -8
  105. package/dist/Sol/wingets/DashboardUserstable.js +0 -78
  106. package/dist/Sol/wingets/HomeEntrygate.d.ts +0 -23
  107. package/dist/Sol/wingets/HomeEntrygate.js +0 -73
  108. package/dist/Sol/wingets/HomeMetricstrip.d.ts +0 -9
  109. package/dist/Sol/wingets/HomeMetricstrip.js +0 -4
  110. package/dist/Sol/wingets/HomeRuntimediagram.d.ts +0 -1
  111. package/dist/Sol/wingets/HomeRuntimediagram.js +0 -22
  112. package/dist/Sol/wingets/LoginForm.d.ts +0 -19
  113. package/dist/Sol/wingets/LoginForm.js +0 -141
  114. package/dist/Sol/wingets/RegisterPasswordconfirm.d.ts +0 -13
  115. package/dist/Sol/wingets/RegisterPasswordconfirm.js +0 -16
  116. package/dist/Sol/wingets/RegisterPasswordmeter.d.ts +0 -19
  117. package/dist/Sol/wingets/RegisterPasswordmeter.js +0 -65
  118. package/dist/Sol/wingets/RegisterUsernamerules.d.ts +0 -11
  119. package/dist/Sol/wingets/RegisterUsernamerules.js +0 -16
  120. package/dist/Sol/wingets/index.d.ts +0 -39
  121. package/dist/Sol/wingets/index.js +0 -39
  122. package/dist/alternatives.d.ts +0 -508
  123. package/dist/alternatives.js +0 -950
  124. package/dist/api.d.ts +0 -154
  125. package/dist/api.js +0 -174
  126. package/dist/auth.d.ts +0 -268
  127. package/dist/auth.js +0 -476
  128. package/dist/automation.d.ts +0 -425
  129. package/dist/automation.js +0 -566
  130. package/dist/browser.d.ts +0 -561
  131. package/dist/browser.js +0 -1058
  132. package/dist/capacitor.config.d.ts +0 -45
  133. package/dist/capacitor.config.js +0 -48
  134. package/dist/catalog.d.ts +0 -43
  135. package/dist/catalog.js +0 -44
  136. package/dist/cli.d.ts +0 -16
  137. package/dist/cli.js +0 -168
  138. package/dist/communication.d.ts +0 -181
  139. package/dist/communication.js +0 -376
  140. package/dist/compute.d.ts +0 -1160
  141. package/dist/compute.js +0 -2272
  142. package/dist/dashboardlib.d.ts +0 -58
  143. package/dist/dashboardlib.js +0 -161
  144. package/dist/db.d.ts +0 -569
  145. package/dist/db.js +0 -1080
  146. package/dist/distribution.d.ts +0 -528
  147. package/dist/distribution.js +0 -810
  148. package/dist/drizzle.config.d.ts +0 -20
  149. package/dist/drizzle.config.js +0 -18
  150. package/dist/edgelandes.d.ts +0 -70
  151. package/dist/edgelandes.host.d.ts +0 -26
  152. package/dist/edgelandes.host.js +0 -1089
  153. package/dist/edgelandes.inproc.d.ts +0 -27
  154. package/dist/edgelandes.inproc.js +0 -952
  155. package/dist/edgelandes.js +0 -1133
  156. package/dist/edgelandes.ninety.d.ts +0 -31
  157. package/dist/edgelandes.ninety.js +0 -174
  158. package/dist/edgelandes.virtual.d.ts +0 -25
  159. package/dist/edgelandes.virtual.js +0 -629
  160. package/dist/edgeplane.d.ts +0 -114
  161. package/dist/edgeplane.js +0 -305
  162. package/dist/examplelocaljob.d.ts +0 -1
  163. package/dist/examplelocaljob.js +0 -14
  164. package/dist/execution.d.ts +0 -529
  165. package/dist/execution.js +0 -760
  166. package/dist/family.d.ts +0 -16
  167. package/dist/family.js +0 -42
  168. package/dist/familyurl.d.ts +0 -21
  169. package/dist/familyurl.js +0 -24
  170. package/dist/format.d.ts +0 -18
  171. package/dist/format.js +0 -59
  172. package/dist/foundation.d.ts +0 -172
  173. package/dist/foundation.js +0 -312
  174. package/dist/index.d.ts +0 -735
  175. package/dist/index.js +0 -1020
  176. package/dist/integration.d.ts +0 -235
  177. package/dist/integration.js +0 -228
  178. package/dist/intelligence.d.ts +0 -93
  179. package/dist/intelligence.js +0 -144
  180. package/dist/isolation.d.ts +0 -128
  181. package/dist/isolation.js +0 -95
  182. package/dist/labels.d.ts +0 -665
  183. package/dist/labels.js +0 -751
  184. package/dist/localauth.d.ts +0 -127
  185. package/dist/localauth.js +0 -413
  186. package/dist/media.d.ts +0 -343
  187. package/dist/media.js +0 -985
  188. package/dist/mesh.d.ts +0 -177
  189. package/dist/mesh.js +0 -468
  190. package/dist/modalityregistry.d.ts +0 -109
  191. package/dist/modalityregistry.js +0 -1386
  192. package/dist/modes.d.ts +0 -358
  193. package/dist/modes.js +0 -133
  194. package/dist/onboardingstate.d.ts +0 -79
  195. package/dist/onboardingstate.js +0 -282
  196. package/dist/orchestrator.d.ts +0 -1338
  197. package/dist/orchestrator.js +0 -4310
  198. package/dist/packager/targetcli.js +0 -4
  199. package/dist/paths.d.ts +0 -2
  200. package/dist/paths.js +0 -14
  201. package/dist/performance.d.ts +0 -415
  202. package/dist/performance.js +0 -826
  203. package/dist/quantum.d.ts +0 -809
  204. package/dist/quantum.js +0 -2072
  205. package/dist/render.d.ts +0 -380
  206. package/dist/render.js +0 -1072
  207. package/dist/runall.d.ts +0 -2
  208. package/dist/runall.js +0 -39
  209. package/dist/runtimeprobe.d.ts +0 -4
  210. package/dist/runtimeprobe.js +0 -8
  211. package/dist/sandbox.d.ts +0 -355
  212. package/dist/sandbox.js +0 -1721
  213. package/dist/sandboxenvprofile.d.ts +0 -29
  214. package/dist/sandboxenvprofile.js +0 -89
  215. package/dist/sandboxprofile.d.ts +0 -137
  216. package/dist/sandboxprofile.js +0 -241
  217. package/dist/sandboxqueue.d.ts +0 -108
  218. package/dist/sandboxqueue.js +0 -201
  219. package/dist/sandboxquota.d.ts +0 -121
  220. package/dist/sandboxquota.js +0 -236
  221. package/dist/scheduler.d.ts +0 -595
  222. package/dist/scheduler.js +0 -1258
  223. package/dist/scriptlanes.d.ts +0 -182
  224. package/dist/scriptlanes.js +0 -660
  225. package/dist/scripts.buildengine.d.ts +0 -1
  226. package/dist/scripts.buildengine.js +0 -39
  227. package/dist/scripts.securitygate.d.ts +0 -1
  228. package/dist/scripts.securitygate.js +0 -68
  229. package/dist/scripts.validateflatnative.d.ts +0 -1
  230. package/dist/scripts.validateflatnative.js +0 -72
  231. package/dist/security.d.ts +0 -500
  232. package/dist/security.js +0 -1169
  233. package/dist/seedcatalog.d.ts +0 -13
  234. package/dist/seedcatalog.js +0 -46
  235. package/dist/server.d.ts +0 -20
  236. package/dist/server.js +0 -53
  237. package/dist/speccatalog.d.ts +0 -31
  238. package/dist/speccatalog.js +0 -163
  239. package/dist/tiers.d.ts +0 -1001
  240. package/dist/tiers.js +0 -2169
  241. package/dist/utils.d.ts +0 -2
  242. package/dist/utils.js +0 -5
  243. package/dist/vaulthandoff.d.ts +0 -141
  244. package/dist/vaulthandoff.js +0 -444
  245. package/dist/virtual.d.ts +0 -640
  246. package/dist/virtual.js +0 -1284
  247. package/dist/virtualcpu.d.ts +0 -315
  248. package/dist/virtualcpu.js +0 -1180
  249. package/dist/virtualgpu.d.ts +0 -344
  250. package/dist/virtualgpu.js +0 -1000
  251. package/dist/virtualization.d.ts +0 -606
  252. package/dist/virtualization.js +0 -1186
  253. package/dist/virtualmemory.d.ts +0 -817
  254. package/dist/virtualmemory.js +0 -1795
  255. package/dist/vite.config.d.ts +0 -3
  256. package/dist/vite.config.js +0 -43
  257. package/dist/vitest.config.d.ts +0 -2
  258. package/dist/vitest.config.js +0 -25
  259. package/dist/webserver.d.ts +0 -166
  260. package/dist/webserver.js +0 -2226
  261. package/dist/workloadlaw.d.ts +0 -133
  262. package/dist/workloadlaw.js +0 -193
  263. package/manifest.json +0 -20
  264. package/media.ts +0 -1337
  265. /package/docs/{architecture.1.8.19.md → architecture1819.md} +0 -0
  266. /package/docs/{architecture.1.8.19.mmd → architecture1819.mmd} +0 -0
  267. /package/docs/{artifactresearch.1.8.9.md → artifactresearch189.md} +0 -0
  268. /package/docs/{batches.1816.to.1820.md → batches1816to1820.md} +0 -0
  269. /package/docs/{brancharchive.2026.08.18.md → brancharchive20260818.md} +0 -0
  270. /package/docs/{containerplatforms.1.8.17.md → containerplatforms1817.md} +0 -0
  271. /package/docs/{e2ugh.engine.md → e2ughengine.md} +0 -0
  272. /package/docs/{flatbuildresearch.1.8.11.md → flatbuildresearch1811.md} +0 -0
  273. /package/docs/{licenseaudit.1.8.12.md → licenseaudit1812.md} +0 -0
  274. /package/docs/{mobileconversionresearch.1.8.10.md → mobileconversionresearch1810.md} +0 -0
  275. /package/docs/{nativeidentityresearch.1.8.11.md → nativeidentityresearch1811.md} +0 -0
  276. /package/docs/{native.wrappers.md → nativewrappers.md} +0 -0
  277. /package/docs/{planning.1.8.18.md → planning1818.md} +0 -0
  278. /package/docs/{planning.1.8.19.md → planning1819.md} +0 -0
  279. /package/docs/{planning.engine.md → planningengine.md} +0 -0
  280. /package/docs/{releasenotes.1.8.12.md → releasenotes1812.md} +0 -0
  281. /package/docs/{releasenotes.1.8.15.md → releasenotes1815.md} +0 -0
  282. /package/docs/{releasenotes.1.8.16.md → releasenotes1816.md} +0 -0
  283. /package/docs/{releasenotes.1.8.17.md → releasenotes1817.md} +0 -0
  284. /package/docs/{releasenotes.1.8.18.md → releasenotes1818.md} +0 -0
  285. /package/docs/{releasenotes.1.8.19.md → releasenotes1819.md} +0 -0
  286. /package/docs/{reorganization.1.8.8.md → reorganization188.md} +0 -0
  287. /package/docs/{reorganization.1.8.9.md → reorganization189.md} +0 -0
  288. /package/docs/{repo.analysis.1.8.21.json → repoanalysis1821.json} +0 -0
  289. /package/docs/{repo.candidates.1.8.21.jsonl → repocandidates1821.jsonl} +0 -0
  290. /package/docs/{repo.research.1.8.16.md → reporesearch1816.md} +0 -0
  291. /package/docs/{repo.research.1.8.21.md → reporesearch1821.md} +0 -0
  292. /package/docs/{repo.selected.1.8.21.json → reposelected1821.json} +0 -0
  293. /package/docs/{repo.synthesis.1.8.21.md → reposynthesis1821.md} +0 -0
  294. /package/docs/{research.1.8.18.isolation.md → research1818isolation.md} +0 -0
  295. /package/docs/{research.1.8.19.virtual.browser.md → research1819virtualbrowser.md} +0 -0
  296. /package/docs/{scanningresearch.1.8.11.md → scanningresearch1811.md} +0 -0
  297. /package/docs/{securityaudit.1.8.7.md → securityaudit187.md} +0 -0
  298. /package/docs/{securityreferences.1.8.11.md → securityreferences1811.md} +0 -0
  299. /package/docs/{securityresearch.1.8.11.md → securityresearch1811.md} +0 -0
  300. /package/docs/{signingresearch.1.8.12.md → signingresearch1812.md} +0 -0
  301. /package/docs/{tauri.glib.risk.1.8.11.md → tauriglibrisk1811.md} +0 -0
  302. /package/docs/{todo.1.8.18.md → todo1818.md} +0 -0
  303. /package/docs/{todo.1.8.19.md → todo1819.md} +0 -0
  304. /package/docs/{toolchainresearch.1.8.9.md → toolchainresearch189.md} +0 -0
  305. /package/docs/{web.duplicatecleanup.md → webduplicatecleanup.md} +0 -0
  306. /package/docs/{web.ideas.md → webideas.md} +0 -0
  307. /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
- }