@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,28 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * docs page anchor — layer 3 of the anchor architecture.
4
- * The file carrying the folder's own name is the path manager of the page:
5
- * it imports the loose components beside it, mounts the page and re-exports
6
- * the public component surface. Only the theme anchor (Sol/Sol.tsx) consumes
7
- * this file. This anchor carries the former main component of the folder,
8
- * which now lives here as the page mount itself.
9
- */
10
- // Signal & Ledger: documentation as an operations index, with short paths and preserved context.
11
- import { ArrowUpRightRegular as ArrowUpRight, BookOpenRegular as BookOpen, BracesRegular as Braces, CodeRegular as FileCode2, FlagRegular as Flag, RecordRegular as GitCommitHorizontal, PlayCircleRegular as PlayCircle, } from '@fluentui/react-icons';
12
- import { PageShell } from '../shell/Shell.tsx';
13
- import { label, labelfill } from '../../labels.ts';
14
- /** the operations index: the glyph and the two-digit index are presentation
15
- * code, every word rides the store under the docs.note.* family. */
16
- const docs = [
17
- { icon: BookOpen, index: '00', key: 'thesis' },
18
- { icon: Braces, index: '01', key: 'session' },
19
- { icon: GitCommitHorizontal, index: '02', key: 'repo' },
20
- { icon: FileCode2, index: '03', key: 'chain' },
21
- { icon: Flag, index: '04', key: 'gates' },
22
- ];
23
- export default function Docs() {
24
- return (_jsxs(PageShell, { section: label('docs.shell.section'), label: label('docs.shell.label'), title: label('docs.shell.title'), intro: label('docs.shell.intro'), children: [_jsxs("section", { className: "content-section split-content", children: [_jsxs("div", { children: [_jsx("p", { className: "eyebrow", children: label('docs.split.eyebrow') }), _jsx("h2", { className: "section-title", children: label('docs.split.title') })] }), _jsxs("div", { className: "prose-copy", children: [_jsx("p", { children: label('docs.split.body1') }), _jsx("p", { children: label('docs.split.body2') })] })] }), _jsxs("section", { className: "content-section docs-list", children: [_jsxs("div", { className: "content-section-heading", children: [_jsx("p", { className: "eyebrow", children: label('docs.index.eyebrow') }), _jsx("span", { className: "mono-label", children: labelfill('docs.index.mono', { n: String(docs.length) }) })] }), docs.map((doc) => {
25
- const Icon = doc.icon;
26
- return (_jsxs("button", { type: "button", className: "doc-row", onClick: (event) => event.preventDefault(), children: [_jsx("span", { className: "doc-index", children: doc.index }), _jsx(Icon, { fontSize: 20, strokeWidth: 1.5 }), _jsxs("div", { className: "doc-copy", children: [_jsx("span", { children: label(`docs.note.${doc.key}.meta`) }), _jsx("strong", { children: label(`docs.note.${doc.key}.title`) }), _jsx("p", { children: label(`docs.note.${doc.key}.body`) })] }), _jsx(ArrowUpRight, { fontSize: 17 })] }, doc.key));
27
- })] }), _jsxs("section", { className: "content-section docs-cta", children: [_jsx(PlayCircle, { fontSize: 22 }), _jsxs("div", { children: [_jsx("p", { className: "eyebrow", children: label('docs.cta.eyebrow') }), _jsx("h3", { children: label('docs.cta.title') }), _jsx("p", { children: label('docs.cta.body') })] }), _jsxs("a", { href: "https://github.com/wenathlan/saddle", target: "_blank", rel: "noreferrer", className: "button button-dark", children: [label('docs.cta.link'), _jsx(ArrowUpRight, { fontSize: 15 })] })] })] }));
28
- }
@@ -1,35 +0,0 @@
1
- /**
2
- * home page anchor — layer 3 of the anchor architecture.
3
- * The file carrying the folder's own name is the path manager of the page:
4
- * it imports the loose components beside it, mounts the page and re-exports
5
- * the public component surface. Only the theme anchor (Sol/Sol.tsx) consumes
6
- * this file. This anchor carries the former main component of the folder,
7
- * which now lives here as the page mount itself.
8
- *
9
- * R3-saddle: home is the LANDING of the platform — one sand light over the
10
- * window stage, the prompt-giga field where the operator declares a sandbox
11
- * (a giant mono input with the embedded boot key and the real declared
12
- * vocabulary of sandboxprofile.ts as chips), the sandbox matrix as a
13
- * hairline ledger of the three runtime bases (base / guests / arch / vgpu /
14
- * ceiling — the documented development bootstrap limits of
15
- * sandboxenvprofile.ts), the thesis, the runtime chain, the surfaces
16
- * ledger, the 01–03 steps and the footer meta-quad. The boot key parses the
17
- * draft against the declared vocabulary and hands the parsed declaration to
18
- * the console over the `saddle.declared` session key — the console reads
19
- * and spends it once on mount (a real handoff: the hardware identities stay
20
- * caller choices there).
21
- *
22
- * The flow law rides this anchor: the default export is the ENTRY GATE
23
- * (entrygate.tsx, beside this anchor) — the seen flags are consulted before
24
- * the landing shows, an unfinished flow is replaced at /intro or
25
- * /onboarding, and only a visitor that finished both stages ever sees the
26
- * surface below.
27
- */
28
- export * from '../wingets';
29
- /**
30
- * The home page anchor: the entry gate rides the surface — the flow law
31
- * (intro → onboarding → the platform) is consulted before the home shows.
32
- *
33
- * @returns the gated home element.
34
- */
35
- export default function Home(): import("react").JSX.Element;
@@ -1,239 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * home page anchor — layer 3 of the anchor architecture.
4
- * The file carrying the folder's own name is the path manager of the page:
5
- * it imports the loose components beside it, mounts the page and re-exports
6
- * the public component surface. Only the theme anchor (Sol/Sol.tsx) consumes
7
- * this file. This anchor carries the former main component of the folder,
8
- * which now lives here as the page mount itself.
9
- *
10
- * R3-saddle: home is the LANDING of the platform — one sand light over the
11
- * window stage, the prompt-giga field where the operator declares a sandbox
12
- * (a giant mono input with the embedded boot key and the real declared
13
- * vocabulary of sandboxprofile.ts as chips), the sandbox matrix as a
14
- * hairline ledger of the three runtime bases (base / guests / arch / vgpu /
15
- * ceiling — the documented development bootstrap limits of
16
- * sandboxenvprofile.ts), the thesis, the runtime chain, the surfaces
17
- * ledger, the 01–03 steps and the footer meta-quad. The boot key parses the
18
- * draft against the declared vocabulary and hands the parsed declaration to
19
- * the console over the `saddle.declared` session key — the console reads
20
- * and spends it once on mount (a real handoff: the hardware identities stay
21
- * caller choices there).
22
- *
23
- * The flow law rides this anchor: the default export is the ENTRY GATE
24
- * (entrygate.tsx, beside this anchor) — the seen flags are consulted before
25
- * the landing shows, an unfinished flow is replaced at /intro or
26
- * /onboarding, and only a visitor that finished both stages ever sees the
27
- * surface below.
28
- */
29
- import { ArrowDownRightRegular as ArrowDownRight, ArrowUpRightRegular as ArrowUpRight, PlugConnectedRegular as Cable, KeyboardRegular as Command, LayerRegular as Layers3, ArrowRightRegular as MoveRight, BoxRegular as Package, } from '@fluentui/react-icons';
30
- // Signal & Ledger: home as the landing — declare the sandbox, read the matrix, boot the console.
31
- import { useEffect, useMemo, useState } from 'react';
32
- import { Link, useLocation } from 'wouter';
33
- import { SectionRail } from '../shell/Shell.tsx';
34
- import { mediaSlots } from '../../catalog';
35
- import { label, labelfill } from '../../labels.ts';
36
- import { specenvlimits } from '../../sandboxenvprofile.ts';
37
- import { SANDBOXARCHES, SANDBOXBASES, SANDBOXFORMS, SANDBOXOSES, } from '../../sandboxprofile.ts';
38
- import { HomeEntrygate as EntryGate } from '../wingets';
39
- import { MetricStrip as MetricStrip } from '../wingets';
40
- import { RuntimeDiagram as RuntimeDiagram } from '../wingets';
41
- export * from '../wingets';
42
- /** the session key the boot key writes and the console reads (once, then spent). */
43
- const DECLARED_KEY = 'saddle.declared';
44
- /** parses one draft line against the declared vocabularies of sandboxprofile. */
45
- function parsedraft(raw) {
46
- const words = raw
47
- .toLowerCase()
48
- .split(/[^a-z0-9]+/)
49
- .filter(Boolean);
50
- return {
51
- base: SANDBOXBASES.find((entry) => words.includes(entry)) ?? null,
52
- os: SANDBOXOSES.find((entry) => words.includes(entry)) ?? null,
53
- arch: SANDBOXARCHES.find((entry) => words.includes(entry)) ?? null,
54
- };
55
- }
56
- /** the chip groups of the hero: the three fixed vocabularies — the tokens
57
- * are the declared data, the group labels ride the store. */
58
- function chipgroups() {
59
- return [
60
- { key: 'base', label: label('home.chips.base'), items: SANDBOXBASES },
61
- { key: 'os', label: label('home.chips.guest'), items: SANDBOXOSES },
62
- { key: 'arch', label: label('home.chips.arch'), items: SANDBOXARCHES },
63
- ];
64
- }
65
- /** the surfaces ledger: one engine, three shells (the labels ride the store). */
66
- function surfaces() {
67
- return [
68
- {
69
- index: '01',
70
- icon: Cable,
71
- title: label('home.surface.browser.title'),
72
- body: label('home.surface.browser.body'),
73
- href: '/agent-browser',
74
- },
75
- {
76
- index: '02',
77
- icon: Layers3,
78
- title: label('home.surface.compute.title'),
79
- body: label('home.surface.compute.body'),
80
- href: '/compute',
81
- },
82
- {
83
- index: '03',
84
- icon: Package,
85
- title: label('home.surface.packages.title'),
86
- body: label('home.surface.packages.body'),
87
- href: '/integrations',
88
- },
89
- ];
90
- }
91
- /** the 01–03 steps of the landing: declare → boot → keep. */
92
- function steps() {
93
- return [
94
- {
95
- index: '01',
96
- title: label('home.steps.declare.title'),
97
- body: label('home.steps.declare.body'),
98
- },
99
- {
100
- index: '02',
101
- title: label('home.steps.boot.title'),
102
- body: label('home.steps.boot.body'),
103
- href: '/console',
104
- },
105
- {
106
- index: '03',
107
- title: label('home.steps.keep.title'),
108
- body: label('home.steps.keep.body'),
109
- href: '/dashboard',
110
- },
111
- ];
112
- }
113
- /** the footer meta-quad: the four moves of the platform. */
114
- function quad() {
115
- return [
116
- {
117
- index: '01',
118
- title: label('home.quad.boot.title'),
119
- body: label('home.quad.boot.body'),
120
- href: '/console',
121
- },
122
- {
123
- index: '02',
124
- title: label('home.quad.operate.title'),
125
- body: label('home.quad.operate.body'),
126
- href: '/dashboard',
127
- },
128
- {
129
- index: '03',
130
- title: label('home.quad.chain.title'),
131
- body: label('home.quad.chain.body'),
132
- href: '/compute',
133
- },
134
- {
135
- index: '04',
136
- title: label('home.quad.thesis.title'),
137
- body: label('home.quad.thesis.body'),
138
- href: '/architecture',
139
- },
140
- ];
141
- }
142
- /** the landing surface: the hero stage, the ledgers and the footer quad
143
- * (mounted only when the entry gate lets the flow through). */
144
- function HomeSurface() {
145
- const [, navigate] = useLocation();
146
- const [media, setMedia] = useState([]);
147
- const [draft, setDraft] = useState('');
148
- useEffect(() => {
149
- void mediaSlots().then(setMedia);
150
- }, []);
151
- const runtimeSlot = media.find((slot) => slot.id === 'media.runtime.map');
152
- /** the live parse: chips and the typed draft share one source of truth. */
153
- const parsed = useMemo(() => parsedraft(draft), [draft]);
154
- const declaredbits = [
155
- parsed.base !== null ? labelfill('home.declared.base', { value: parsed.base }) : null,
156
- parsed.os !== null ? labelfill('home.declared.guest', { value: parsed.os }) : null,
157
- parsed.arch !== null ? labelfill('home.declared.arch', { value: parsed.arch }) : null,
158
- ].filter(Boolean);
159
- const declaredline = declaredbits.length > 0
160
- ? labelfill('home.declared.line', { parts: declaredbits.join(' · ') })
161
- : label('home.declared.none');
162
- /** toggles one vocabulary token inside the draft line. */
163
- const toggletoken = (token) => {
164
- setDraft((prev) => {
165
- const words = prev
166
- .toLowerCase()
167
- .split(/[^a-z0-9]+/)
168
- .filter(Boolean);
169
- const next = words.includes(token)
170
- ? words.filter((word) => word !== token)
171
- : [...words, token];
172
- return next.join(' · ');
173
- });
174
- };
175
- /** the boot key: parse, hand the declaration over, open the console. */
176
- const spin = () => {
177
- try {
178
- sessionStorage.setItem(DECLARED_KEY, JSON.stringify(parsedraft(draft)));
179
- }
180
- catch {
181
- /* storage unavailable: the boot key still navigates */
182
- }
183
- navigate('/console');
184
- };
185
- /** the sandbox matrix: the three bases over the documented bootstrap limits. */
186
- const limits = specenvlimits({}).bases;
187
- const matrixrows = ['lite', 'balanced', 'max'].map((id) => {
188
- const row = limits[id];
189
- return {
190
- id,
191
- featured: id === 'max',
192
- guests: labelfill('home.matrix.guests', { n: String(SANDBOXOSES.length) }),
193
- arch: label('home.matrix.archValue'),
194
- vgpu: row.maxvgpus === 0
195
- ? label('home.matrix.vgpuNone')
196
- : labelfill(row.maxvgpus === 1 ? 'home.matrix.vgpuOne' : 'home.matrix.vgpuMany', { n: String(row.maxvgpus) }),
197
- ceiling: labelfill('home.matrix.ceiling', {
198
- vcpus: String(row.maxvcpus),
199
- ram: String(row.maxramgb),
200
- disk: String(row.maxdiskgb),
201
- minutes: String(Math.round(row.maxtimeoutseconds / 60)),
202
- }),
203
- };
204
- });
205
- return (_jsxs("div", { className: "site-frame home-page", children: [_jsxs("main", { children: [_jsx("section", { className: "r3-hero halftone", "aria-labelledby": "r3herotitle", children: _jsxs("div", { className: "r3-hero-inner", children: [_jsxs("div", { className: "r3-hero-copy", children: [_jsxs("p", { className: "eyebrow r3-hero-eyebrow", children: [_jsx("span", { className: "status-dot" }), " ", label('home.hero.eyebrow')] }), _jsxs("h1", { className: "r3-display", id: "r3herotitle", children: [label('home.hero.titleLine1'), _jsx("br", {}), _jsx("em", { children: label('home.hero.titleLine2') })] }), _jsx("p", { className: "r3-hero-lede", children: label('home.hero.lede') }), _jsxs("form", { className: "r3-prompt", "aria-label": label('home.hero.formAria'), onSubmit: (event) => {
206
- event.preventDefault();
207
- spin();
208
- }, children: [_jsx("label", { className: "r3-prompt-label", htmlFor: "r3declare", children: label('home.hero.declareLabel') }), _jsx("input", { id: "r3declare", className: "r3-prompt-input", type: "text", value: draft, placeholder: label('home.hero.placeholder'), spellCheck: false, autoComplete: "off", onChange: (event) => setDraft(event.target.value) }), _jsxs("button", { className: "r3-prompt-key", type: "submit", children: [label('home.hero.boot'), _jsx(ArrowDownRight, { fontSize: 15, "aria-hidden": "true" })] })] }), _jsxs("fieldset", { className: "r3-chips", children: [_jsx("legend", { className: "r3-chips-legend", children: label('home.hero.chipsLegend') }), chipgroups().map((group) => (_jsxs("div", { className: "r3-chipgroup", children: [_jsx("span", { className: "r3-chipgroup-label", children: group.label }), group.items.map((token) => (_jsx("button", { type: "button", className: parsed[group.key] === token ? 'r3-chip is-on' : 'r3-chip', "aria-pressed": parsed[group.key] === token, onClick: () => toggletoken(token), children: token }, token)))] }, group.key)))] }), _jsx("p", { className: "r3-declared", role: "status", "aria-live": "polite", children: declaredline })] }), _jsxs("aside", { className: "r3-matrix", "aria-label": label('home.matrix.aria'), children: [_jsxs("div", { className: "r3-matrix-head", children: [_jsx("span", { children: label('home.matrix.title') }), _jsx("span", { className: "mono-label", children: label('home.matrix.subtitle') })] }), _jsxs("table", { className: "r3-matrix-table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: label('home.matrix.colBase') }), _jsx("th", { scope: "col", children: label('home.matrix.colGuests') }), _jsx("th", { scope: "col", children: label('home.matrix.colArch') }), _jsx("th", { scope: "col", children: label('home.matrix.colVgpu') }), _jsx("th", { scope: "col", children: label('home.matrix.colCeiling') })] }) }), _jsx("tbody", { children: matrixrows.map((row) => (_jsxs("tr", { className: row.featured ? 'is-featured' : undefined, children: [_jsx("th", { scope: "row", children: row.id }), _jsx("td", { children: row.guests }), _jsx("td", { children: row.arch }), _jsx("td", { children: row.vgpu }), _jsx("td", { children: row.ceiling })] }, row.id))) })] }), _jsx("p", { className: "r3-matrix-note", children: labelfill('home.matrix.note', { oses: SANDBOXOSES.join(' · ') }) })] })] }) }), _jsx("section", { className: "metric-section container", children: _jsx(MetricStrip, { metrics: [
209
- {
210
- value: String(SANDBOXBASES.length).padStart(2, '0'),
211
- label: label('home.metric.bases.label'),
212
- detail: label('home.metric.bases.detail'),
213
- },
214
- {
215
- value: label('home.metric.storage.value'),
216
- label: label('home.metric.storage.label'),
217
- detail: label('home.metric.storage.detail'),
218
- },
219
- {
220
- value: String(SANDBOXFORMS.length).padStart(2, '0'),
221
- label: label('home.metric.forms.label'),
222
- detail: label('home.metric.forms.detail'),
223
- },
224
- ] }) }), _jsxs("section", { id: "thesis", className: "thesis-section container section-with-rail", children: [_jsx(SectionRail, { number: "01", label: label('home.thesis.railLabel') }), _jsxs("div", { className: "thesis-content", children: [_jsx("p", { className: "eyebrow", children: label('home.thesis.eyebrow') }), _jsxs("h2", { className: "section-title", children: [label('home.thesis.title'), _jsx("span", { children: label('home.thesis.titleAccent') })] }), _jsxs("div", { className: "thesis-grid", children: [_jsxs("p", { children: [label('home.thesis.bodyLead'), _jsx("b", { children: label('home.thesis.keep') }), label('home.thesis.join'), _jsx("b", { children: label('home.thesis.process') }), label('home.thesis.bodyTail')] }), _jsxs("div", { className: "evidence-card", children: [_jsxs("div", { className: "evidence-card-head", children: [_jsx(Command, { fontSize: 16 }), _jsx("span", { children: label('home.evidence.head') }), _jsx("span", { className: "card-index", children: label('home.evidence.index') })] }), _jsxs("div", { className: "evidence-equation", children: [_jsx("span", { children: label('home.evidence.storage') }), _jsx("b", { children: label('home.evidence.equals') }), _jsx("span", { children: label('home.evidence.memory') })] }), _jsxs("div", { className: "evidence-card-foot", children: [_jsx("span", { children: label('home.evidence.difference') }), _jsx("b", { children: label('home.evidence.usageFlag') })] })] })] })] })] }), _jsx("section", { className: "runtime-section", children: _jsxs("div", { className: "container section-with-rail", children: [_jsx(SectionRail, { number: "02", label: label('home.chain.railLabel') }), _jsxs("div", { className: "runtime-content", children: [_jsxs("div", { className: "section-heading-row", children: [_jsxs("div", { children: [_jsx("p", { className: "eyebrow", children: label('home.chain.eyebrow') }), _jsx("h2", { className: "section-title", children: label('home.chain.title') })] }), _jsxs(Link, { href: "/architecture", className: "small-arrow-link", children: [label('home.chain.archLink'), _jsx(MoveRight, { fontSize: 15 })] })] }), _jsxs("div", { className: "runtime-layout", children: [_jsx(RuntimeDiagram, {}), _jsxs("div", { className: "runtime-art-frame", children: [runtimeSlot && (_jsx("figure", { className: "media-area", style: { aspectRatio: runtimeSlot.ratio }, "aria-label": label('home.media.area'), children: _jsxs("figcaption", { children: [_jsx("span", { children: runtimeSlot.label }), _jsx("span", { children: runtimeSlot.caption })] }) })), _jsx("span", { children: label('home.chain.fig') })] })] })] })] }) }), _jsxs("section", { className: "surfaces-section container section-with-rail", children: [_jsx(SectionRail, { number: "03", label: label('home.surfaces.railLabel') }), _jsxs("div", { className: "surfaces-content", children: [_jsxs("div", { className: "section-heading-row", children: [_jsxs("div", { children: [_jsx("p", { className: "eyebrow", children: label('home.surfaces.eyebrow') }), _jsxs("h2", { className: "section-title", children: [label('home.surfaces.titleLine1'), _jsx("br", {}), label('home.surfaces.titleLine2')] })] }), _jsx("span", { className: "mono-label", children: labelfill('home.surfaces.available', {
225
- n: String(surfaces().length).padStart(2, '0'),
226
- }) })] }), _jsx("div", { className: "surface-list", children: surfaces().map((surface) => {
227
- const Icon = surface.icon;
228
- return (_jsxs(Link, { className: "surface-row", href: surface.href, children: [_jsx("span", { className: "surface-number", children: surface.index }), _jsx(Icon, { fontSize: 21, strokeWidth: 1.5, "aria-hidden": "true" }), _jsxs("div", { className: "surface-copy", children: [_jsx("h3", { children: surface.title }), _jsx("p", { children: surface.body })] }), _jsx(ArrowUpRight, { className: "surface-arrow", fontSize: 18, "aria-hidden": "true" })] }, surface.title));
229
- }) })] })] }), _jsx("section", { className: "r3-steps container", "aria-label": label('home.steps.aria'), children: steps().map((step) => (_jsxs("div", { className: "r3-step", children: [_jsx("span", { className: "r3-step-index", children: step.index }), _jsx("h3", { className: "r3-step-title", children: step.title }), _jsx("p", { className: "r3-step-body", children: step.body }), step.href && (_jsxs(Link, { className: "r3-step-link", href: step.href, children: [labelfill('home.steps.link', { title: step.title }), _jsx(ArrowUpRight, { fontSize: 14, "aria-hidden": "true" })] }))] }, step.index))) })] }), _jsxs("footer", { className: "r3-quad", children: [_jsx("div", { className: "r3-quad-grid container", children: quad().map((cell) => (_jsxs(Link, { className: "r3-quad-cell", href: cell.href, children: [_jsx("span", { className: "r3-quad-index", children: cell.index }), _jsx("span", { className: "r3-quad-title", children: cell.title }), _jsx("span", { className: "r3-quad-body", children: cell.body })] }, cell.index))) }), _jsxs("div", { className: "site-footer container", children: [_jsx("span", { children: label('home.footer.copyright') }), _jsx("span", { className: "mono-label", children: label('home.footer.mono') })] })] })] }));
230
- }
231
- /**
232
- * The home page anchor: the entry gate rides the surface — the flow law
233
- * (intro → onboarding → the platform) is consulted before the home shows.
234
- *
235
- * @returns the gated home element.
236
- */
237
- export default function Home() {
238
- return (_jsx(EntryGate, { children: _jsx(HomeSurface, {}) }));
239
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * integrations page anchor — layer 3 of the anchor architecture.
3
- * The file carrying the folder's own name is the path manager of the page:
4
- * it imports the loose components beside it, mounts the page and re-exports
5
- * the public component surface. Only the theme anchor (Sol/Sol.tsx) consumes
6
- * this file. This anchor carries the former main component of the folder,
7
- * which now lives here as the page mount itself.
8
- */
9
- export default function Integrations(): import("react").JSX.Element;
@@ -1,83 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * integrations page anchor — layer 3 of the anchor architecture.
4
- * The file carrying the folder's own name is the path manager of the page:
5
- * it imports the loose components beside it, mounts the page and re-exports
6
- * the public component surface. Only the theme anchor (Sol/Sol.tsx) consumes
7
- * this file. This anchor carries the former main component of the folder,
8
- * which now lives here as the page mount itself.
9
- */
10
- // Signal & Ledger: integrations as surfaces of the same engine, not
11
- // disconnected products. The glyphs are presentation code; every word rides
12
- // the label store (labels.ts — the copy law).
13
- import { FoodAppleRegular as Apple, BotRegular as Bot, BoxRegular as Box, BoxRegular as Container, BranchForkRegular as GitBranch, GlobeRegular as Globe, PhoneRegular as Smartphone, WindowConsoleRegular as Terminal, } from '@fluentui/react-icons';
14
- import { PageShell } from '../shell/Shell.tsx';
15
- import { label, labelfill } from '../../labels.ts';
16
- /** the surface groups: the glyph is presentation code, the group and item
17
- * words ride the store (integrations.group.* / integrations.item.*). */
18
- const integrationGroups = [
19
- {
20
- labelkey: 'integrations.group.package.label',
21
- items: [
22
- {
23
- icon: Box,
24
- namekey: 'integrations.item.npm.name',
25
- bodykey: 'integrations.item.npm.body',
26
- },
27
- {
28
- icon: Terminal,
29
- namekey: 'integrations.item.cli.name',
30
- bodykey: 'integrations.item.cli.body',
31
- },
32
- {
33
- icon: Container,
34
- namekey: 'integrations.item.container.name',
35
- bodykey: 'integrations.item.container.body',
36
- },
37
- ],
38
- },
39
- {
40
- labelkey: 'integrations.group.client.label',
41
- items: [
42
- {
43
- icon: Globe,
44
- namekey: 'integrations.item.crx.name',
45
- bodykey: 'integrations.item.crx.body',
46
- },
47
- {
48
- icon: Smartphone,
49
- namekey: 'integrations.item.mobile.name',
50
- bodykey: 'integrations.item.mobile.body',
51
- },
52
- {
53
- icon: Apple,
54
- namekey: 'integrations.item.desktop.name',
55
- bodykey: 'integrations.item.desktop.body',
56
- },
57
- ],
58
- },
59
- {
60
- labelkey: 'integrations.group.bot.label',
61
- items: [
62
- {
63
- icon: GitBranch,
64
- namekey: 'integrations.item.forge.name',
65
- bodykey: 'integrations.item.forge.body',
66
- },
67
- { icon: Bot, namekey: 'integrations.item.n8n.name', bodykey: 'integrations.item.n8n.body' },
68
- {
69
- icon: Terminal,
70
- namekey: 'integrations.item.webhook.name',
71
- bodykey: 'integrations.item.webhook.body',
72
- },
73
- ],
74
- },
75
- ];
76
- export default function Integrations() {
77
- return (_jsxs(PageShell, { section: label('integrations.shell.section'), label: label('integrations.shell.label'), title: label('integrations.shell.title'), intro: label('integrations.shell.intro'), children: [_jsxs("section", { className: "content-section split-content", children: [_jsxs("div", { children: [_jsx("p", { className: "eyebrow", children: label('integrations.split.eyebrow') }), _jsx("h2", { className: "section-title", children: label('integrations.split.title') })] }), _jsxs("div", { className: "prose-copy", children: [_jsx("p", { children: label('integrations.split.body1') }), _jsx("p", { children: label('integrations.split.body2') })] })] }), _jsx("section", { className: "content-section integration-groups", children: integrationGroups.map((group) => (_jsxs("div", { className: "integration-group", children: [_jsxs("div", { className: "content-section-heading", children: [_jsx("p", { className: "eyebrow", children: label(group.labelkey) }), _jsx("span", { className: "mono-label", children: labelfill('integrations.group.mono', {
78
- n: String(group.items.length),
79
- }) })] }), _jsx("div", { className: "integration-grid", children: group.items.map((item) => {
80
- const Icon = item.icon;
81
- return (_jsxs("div", { className: "integration-card", children: [_jsx(Icon, { fontSize: 20, strokeWidth: 1.5 }), _jsx("strong", { children: label(item.namekey) }), _jsx("span", { children: label(item.bodykey) })] }, item.namekey));
82
- }) })] }, group.labelkey))) }), _jsxs("section", { className: "content-section integration-quote", children: [_jsx("p", { children: label('integrations.quote.body') }), _jsx("span", { className: "mono-label", children: label('integrations.quote.mono') })] })] }));
83
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * The intro page: the brand lands, holds ~1.6s, slides up and hands the
3
- * surface to the onboarding. Click, any key or reduced motion skips.
4
- *
5
- * @returns the intro element (null while the seen state resolves).
6
- */
7
- export default function Intro(): import("react").JSX.Element;
@@ -1,102 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // the saddle intro of the theme.
3
- /**
4
- * intro.tsx — the opening splash of the APPLICATION: the akash floor. The
5
- * drawn mark lands with the Akash spring (the overshoot curve
6
- * cubic-bezier(.34,1.56,.64,1)), the name rises with the backOut lift and
7
- * the honest role line fades in under the 1.6s hold. The exit slides the
8
- * whole stage up over 0.8s (cubic-bezier(0.76,0,0.24,1)) and hands the
9
- * surface DIRECTLY to the onboarding at /onboarding — the intro itself
10
- * advances the flow. No loading dots, no spinner: the mark speaks. A click,
11
- * any key or prefers-reduced-motion skips. The seen flags ride the one
12
- * accessor (onboardingstate.ts — the database, the offline cache, the
13
- * memory): while the state resolves the page renders null, a finished flow
14
- * replaces straight back to the home (the close-caption relaunch lands
15
- * there, the intro never replays) and a mid-flow visitor resumes at
16
- * /onboarding.
17
- */
18
- import { useCallback, useEffect, useRef, useState } from 'react';
19
- import { useLocation } from 'wouter';
20
- import { loadOnboardingState, markIntroSeen, readOnboardingState, } from '../../onboardingstate.ts';
21
- import { label } from '../../labels.ts';
22
- import { SaddleMark } from '../shell/Shell.tsx';
23
- /** how long the brand holds before the exit (ms) — the doctrine asks ~1.6s */
24
- const HOLD_MS = 1600;
25
- /** how long the slide-up exit runs before the hand-over (ms) */
26
- const LEAVE_MS = 800;
27
- /**
28
- * The intro page: the brand lands, holds ~1.6s, slides up and hands the
29
- * surface to the onboarding. Click, any key or reduced motion skips.
30
- *
31
- * @returns the intro element (null while the seen state resolves).
32
- */
33
- export default function Intro() {
34
- const [, navigate] = useLocation();
35
- const [phase, setPhase] = useState('pending');
36
- const seenRef = useRef({ introseen: false, onboardingseen: false });
37
- const leftRef = useRef(false);
38
- /** the hand-over route: the onboarding, unless the flow already finished. */
39
- const handover = useCallback(() => (seenRef.current.onboardingseen ? '/' : '/onboarding'), []);
40
- /** the leave: the intro counts as seen (leaving counts — the visitor
41
- * answered the stage), the stage slides, the hand-over follows. One
42
- * guarded run — the skip listeners and the hold timer share it. */
43
- const leave = useCallback(() => {
44
- if (leftRef.current)
45
- return;
46
- leftRef.current = true;
47
- markIntroSeen();
48
- setPhase('leaving');
49
- window.setTimeout(() => navigate(handover()), LEAVE_MS);
50
- }, [handover, navigate]);
51
- useEffect(() => {
52
- let live = true;
53
- const known = readOnboardingState();
54
- if (known)
55
- seenRef.current = known;
56
- loadOnboardingState().then((state) => {
57
- if (!live)
58
- return;
59
- seenRef.current = state;
60
- // the flow law: a finished visitor never replays the opening (the
61
- // close-caption relaunch lands home); a mid-flow one resumes ahead
62
- if (state.onboardingseen)
63
- navigate('/', { replace: true });
64
- else if (state.introseen)
65
- navigate('/onboarding', { replace: true });
66
- else
67
- setPhase('playing');
68
- });
69
- return () => {
70
- live = false;
71
- };
72
- }, [navigate]);
73
- useEffect(() => {
74
- if (phase !== 'playing')
75
- return;
76
- // reduced motion skips the choreography and hands over at once
77
- if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
78
- if (!leftRef.current) {
79
- leftRef.current = true;
80
- markIntroSeen();
81
- navigate(handover());
82
- }
83
- return;
84
- }
85
- const hold = window.setTimeout(leave, HOLD_MS);
86
- const skip = (event) => {
87
- if (event.type === 'keydown' || event.button === 0)
88
- leave();
89
- };
90
- window.addEventListener('keydown', skip);
91
- window.addEventListener('pointerdown', skip);
92
- return () => {
93
- window.clearTimeout(hold);
94
- window.removeEventListener('keydown', skip);
95
- window.removeEventListener('pointerdown', skip);
96
- };
97
- }, [handover, leave, navigate, phase]);
98
- // the state read holds the page: nothing renders, the canvas alone shows — no flash
99
- if (phase === 'pending')
100
- return null;
101
- return (_jsxs("div", { className: "winintro", "data-leaving": phase === 'leaving' ? 'true' : undefined, role: "status", "aria-label": label('intro.status'), children: [_jsxs("div", { className: "winintro__stage", children: [_jsx("span", { className: "winintro__mark", "aria-hidden": "true", children: _jsx(SaddleMark, { size: 96 }) }), _jsx("h1", { className: "winintro__name", children: label('intro.name') }), _jsx("p", { className: "winintro__role", children: label('intro.role') })] }), _jsx("p", { className: "winintro__skip", "aria-hidden": "true", children: label('intro.skip') })] }));
102
- }
@@ -1,16 +0,0 @@
1
- /**
2
- * login page anchor — layer 3 of the anchor architecture.
3
- * The file carrying the folder's own name is the path manager of the page:
4
- * it imports the loose components beside it, mounts the page and re-exports
5
- * the public component surface. Only the theme anchor (Sol/Sol.tsx) consumes
6
- * this file. This anchor carries the former main component of the folder,
7
- * which now lives here as the page mount itself.
8
- */
9
- export * from '../wingets';
10
- /** meta description carried by the absorbed static page. */
11
- export declare const loginpagedescription = "saddle sign in: username and password only, session in a secure cookie";
12
- /**
13
- * the sign-in page frame: brand lockup, the instrument card (form beside
14
- * the trust rail) and the static-edge footer notes.
15
- */
16
- export default function Login(): import("react").JSX.Element;
@@ -1,49 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * login page anchor — layer 3 of the anchor architecture.
4
- * The file carrying the folder's own name is the path manager of the page:
5
- * it imports the loose components beside it, mounts the page and re-exports
6
- * the public component surface. Only the theme anchor (Sol/Sol.tsx) consumes
7
- * this file. This anchor carries the former main component of the folder,
8
- * which now lives here as the page mount itself.
9
- */
10
- // Sign-in page: faithful absorption of login.html — the account panel with
11
- // the login form, the api status line and the project footer. the session
12
- // is carried exclusively by the saddlesession cookie (nothing sensitive is
13
- // ever stored in localstorage). R3-saddle: one instrument card with an
14
- // asymmetric interior — the form (1.2fr) beside the trust rail (1fr) that
15
- // carries the real session facts; 44px inputs, the sand focus ring.
16
- import { Link } from 'wouter';
17
- import { label } from '../../labels.ts';
18
- import { LoginForm as LoginForm } from '../wingets';
19
- export * from '../wingets';
20
- /** meta description carried by the absorbed static page. */
21
- export const loginpagedescription = 'saddle sign in: username and password only, session in a secure cookie';
22
- /** the real session facts of the trust rail: the labels ride the store. */
23
- function trustfacts() {
24
- return [
25
- {
26
- label: label('login.trust.sessionLabel'),
27
- body: label('login.trust.sessionBody'),
28
- },
29
- {
30
- label: label('login.trust.transportLabel'),
31
- body: label('login.trust.transportBody'),
32
- },
33
- {
34
- label: label('login.trust.errorsLabel'),
35
- body: label('login.trust.errorsBody'),
36
- },
37
- {
38
- label: label('login.trust.fallbackLabel'),
39
- body: label('login.trust.fallbackBody'),
40
- },
41
- ];
42
- }
43
- /**
44
- * the sign-in page frame: brand lockup, the instrument card (form beside
45
- * the trust rail) and the static-edge footer notes.
46
- */
47
- export default function Login() {
48
- return (_jsx("div", { className: "auth-frame", children: _jsxs("div", { className: "r3-authcard", children: [_jsxs("header", { className: "auth-head", children: [_jsx(Link, { href: "/", className: "brand-lockup", children: _jsx("span", { className: "brand-wordmark", children: label('login.brand') }) }), _jsx("span", { className: "auth-tagline", children: label('login.tagline') })] }), _jsxs("main", { className: "r3-authgrid", children: [_jsxs("section", { className: "auth-panel", "aria-labelledby": "formtitle", children: [_jsx("h2", { className: "auth-panel-title", id: "formtitle", children: label('login.panel.title') }), _jsx(LoginForm, {})] }), _jsxs("aside", { className: "r3-authtrust", "aria-label": label('login.trust.aria'), children: [_jsx("p", { className: "eyebrow", children: label('login.trust.eyebrow') }), _jsx("ul", { className: "r3-trustlist", children: trustfacts().map((fact) => (_jsxs("li", { className: "r3-trustfact", children: [_jsx("span", { className: "r3-trustlabel", children: fact.label }), _jsx("span", { className: "r3-trustbody", children: fact.body })] }, fact.label))) })] })] }), _jsxs("footer", { className: "auth-foot", children: [_jsx("span", { children: label('login.footer.cookie') }), _jsx("span", { className: "auth-foot-right", children: label('login.footer.api') })] })] }) }));
49
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * notfound page anchor — layer 3 of the anchor architecture.
3
- * The file carrying the folder's own name is the path manager of the page:
4
- * it imports the loose components beside it, mounts the page and re-exports
5
- * the public component surface. Only the theme anchor (Sol/Sol.tsx) consumes
6
- * this file. This anchor carries the former main component of the folder,
7
- * which now lives here as the page mount itself.
8
- */
9
- export default function NotFound(): import("react").JSX.Element;
@@ -1,15 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * notfound page anchor — layer 3 of the anchor architecture.
4
- * The file carrying the folder's own name is the path manager of the page:
5
- * it imports the loose components beside it, mounts the page and re-exports
6
- * the public component surface. Only the theme anchor (Sol/Sol.tsx) consumes
7
- * this file. This anchor carries the former main component of the folder,
8
- * which now lives here as the page mount itself.
9
- */
10
- // # NotFound — the 404 of the saddle theme: a route the static edge never mapped.
11
- import { Link } from 'wouter';
12
- import { label } from '../../labels.ts';
13
- export default function NotFound() {
14
- return (_jsx("div", { className: "site-frame notfound-page", children: _jsx("main", { children: _jsxs("section", { className: "container notfound-frame", children: [_jsx("p", { className: "eyebrow", children: label('notfound.eyebrow') }), _jsx("h1", { children: label('notfound.title') }), _jsx("p", { children: label('notfound.body') }), _jsxs("div", { className: "notfound-actions", children: [_jsx(Link, { href: "/", className: "button button-primary", children: label('notfound.backHome') }), _jsx(Link, { href: "/agent-browser", className: "button", children: label('notfound.agentBrowser') })] })] }) }) }));
15
- }