@wenathlan/saddle 2.0.154 → 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 +112 -41
  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 -121
  161. package/dist/edgeplane.js +0 -341
  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 -707
  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 -48
  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
package/virtualgpu.ts CHANGED
@@ -53,7 +53,7 @@
53
53
  import { execFileSync } from 'node:child_process';
54
54
  import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
55
55
  import { dirname } from 'node:path';
56
- import { MIGPROFILES } from './virtualmemory.js';
56
+ import { MIGPROFILES } from './virtualmemory.ts';
57
57
 
58
58
  /** pci bdf (bus:device.function) validator: strict hex format only.
59
59
  * blocks any shell metacharacter or path traversal. */
package/virtualization.ts CHANGED
@@ -855,7 +855,7 @@ export const kvmcapnames: readonly string[] = [
855
855
 
856
856
  /** re-exports the gpu passthrough surface (vfio bind, rom dump, looking
857
857
  * glass, vgpu profiles) whose canonical home is virtualgpu.ts. */
858
- export * from './virtualgpu.js';
858
+ export * from './virtualgpu.ts';
859
859
 
860
860
  /* ------------------------------------------------------------------ */
861
861
  /* context: checkpoint (criu planner, file snapshot, uffd, diff, live */
package/workloadlaw.ts ADDED
@@ -0,0 +1,293 @@
1
+ // # workloadlaw — the family workload lane catalog and the join law of the
2
+ // engine (root layer, wave WL1). One row per heavy workload lane of every
3
+ // official app of the family: the app that owns the lane, the lane's name,
4
+ // the demand the lane puts on the sandbox (gpu, network, isolation depth,
5
+ // boot budget) and where the lane runs today. The law this module answers
6
+ // is the owner's nuclear modality law made executable for the whole
7
+ // family: the workload never chooses a modality by name — the join
8
+ // resolver reads the demand and answers the modality set that satisfies
9
+ // it, so the person chooses none and the platform resolves the join of
10
+ // all. Every lane row carries a demand and never a modality id: the
11
+ // candidates are always computed from the registry of record
12
+ // (modalityregistry.ts), so the answer can never drift from the catalog
13
+ // and a modality that turns live tomorrow answers the same lane without
14
+ // this file moving.
15
+ //
16
+ // The honest today fields: one row declares `today: "engine-lane"` when the
17
+ // heavy pass already runs on a server-side engine surface of the family
18
+ // (the os sandbox lane, the edge plane dispatcher, the app gateways the
19
+ // deploys serve), and `today: "app-lane"` when the heavy pass still walks
20
+ // inside the app surface (the seeded rehearsals, the browser fallbacks the
21
+ // catalog laws keep naming). The report reads both truths beside the join
22
+ // verdict — a lane that resolves dispatchable and still walks app-lane is
23
+ // the next wave's work order, named honestly instead of hidden. The join
24
+ // verdict itself answers from the registry alone: "dispatchable" when at
25
+ // least one live modality satisfies the demand, "planned-only" when only
26
+ // planned records do (the gpu lanes ride here today and say so), and
27
+ // "unresolved" when the demand fits nothing — a calibration defect the
28
+ // battery refuses.
29
+ //
30
+ // Pure data and pure functions: zero storage, zero node-only imports, the
31
+ // browser-pure bundle keeps carrying it, exactly the registry law.
32
+
33
+ import { type ModalityRecord, resolvejoin } from "./modalityregistry.ts";
34
+
35
+ /** The demand one workload lane puts on the sandbox — the join vocabulary
36
+ * the resolver reads (never a modality name: the nuclear law). */
37
+ export type WorkloadDemand = {
38
+ /** Whether the lane's pass needs a gpu path through the virtual drivers. */
39
+ gpu: boolean;
40
+ /** Whether the lane's pass needs a network path. */
41
+ network: boolean;
42
+ /** The isolation depth the lane demands at minimum. */
43
+ isolation: ModalityRecord["isolation"];
44
+ /** The boot budget the lane tolerates, in milliseconds (defaults to the
45
+ * cold ceiling of the ladder when absent). */
46
+ bootbudget?: number;
47
+ };
48
+
49
+ /** Where the heavy pass of the lane runs today — the honest truth the
50
+ * report reads beside the join verdict. */
51
+ export type LaneToday = "engine-lane" | "app-lane";
52
+
53
+ /** One workload lane of the family catalog: the app that owns the lane,
54
+ * the lane's stable id, the role sentence, the demand and the honest
55
+ * today. */
56
+ export type WorkloadLane = {
57
+ /** The official app slug that owns the lane. */
58
+ app: string;
59
+ /** The lane id inside the app (kebab-case, unique per app). */
60
+ lane: string;
61
+ /** What the lane does, in one sentence. */
62
+ role: string;
63
+ /** The demand the lane puts on the sandbox. */
64
+ demand: WorkloadDemand;
65
+ /** Where the heavy pass runs today (the honest truth). */
66
+ today: LaneToday;
67
+ };
68
+
69
+ /** The join verdict of one lane: computed from the registry, never
70
+ * declared by hand. */
71
+ export type LaneVerdict = "dispatchable" | "planned-only" | "unresolved";
72
+
73
+ /** One answered join: the lane row, the verdict and the candidate records
74
+ * the resolver answered (best candidate first). */
75
+ export type LaneJoin = {
76
+ /** The lane row the join answered. */
77
+ lane: WorkloadLane;
78
+ /** The honest verdict computed from the registry. */
79
+ verdict: LaneVerdict;
80
+ /** The modality records that satisfy the demand, best first. */
81
+ candidates: readonly ModalityRecord[];
82
+ /** How many candidates the registry already drives live. */
83
+ livecount: number;
84
+ };
85
+
86
+ /** The family workload lane catalog: the lanes of the eleven official
87
+ * apps, walked from the analysis waves (A1) that mapped every app's heavy
88
+ * passes. The rows carry demands and honest todays — never modality ids:
89
+ * the join computes the answer from the registry of record. */
90
+ export const FAMILYLANES: readonly WorkloadLane[] = Object.freeze([
91
+ // the argan lanes: the dns engine's heavy passes
92
+ { app: "argan", lane: "dnssec-validate", role: "the dnssec chain validation walk: rrsig parsing, key tag checksums, validity windows and ds match rules over untrusted input", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
93
+ { app: "argan", lane: "zonefile-parse-diff", role: "the master file parse and the external-dns diff: tokenizer, normalization, creates/deletes/updates by group", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
94
+ { app: "argan", lane: "catalog-registry-serve", role: "the registry tables the catalog serves: mime types, protocols and seed rows over https and db, never the browser fallback", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "app-lane" },
95
+ { app: "argan", lane: "label-store-seed", role: "the label manifest seed into the store: the upsert walk that protects translated rows, mirrored server-side", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "app-lane" },
96
+ // the cadria lanes: the versawaze engine's generation passes
97
+ { app: "cadria", lane: "analyze-wav", role: "the audio analysis pipeline: decode, downmix, resample, stft and the spectrum, rhythm, tonality, timbre and structure fusion", demand: { gpu: false, network: false, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
98
+ { app: "cadria", lane: "generate-image", role: "the image generation walk: palette, composition blocks, rhythm scatter, texture and motion into the deterministic project", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
99
+ { app: "cadria", lane: "render-svg", role: "the svg render of the image project: draw command compilation and the byte-deterministic serialization", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
100
+ { app: "cadria", lane: "decode-video", role: "the frame-accurate video decode lane: the container-namespace pass the codec walk rides, never the visitor decoder", demand: { gpu: false, network: false, isolation: "namespace", bootbudget: 800 }, today: "app-lane" },
101
+ { app: "cadria", lane: "compile-shader", role: "the shader program assembly: the fragment library, the deterministic manifest and the sha digest, no visitor gpu ever compiles", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
102
+ // the cobaia lanes: the monetization surface's light walks
103
+ { app: "cobaia", lane: "plan-checkout", role: "the plan checkout surface: mrr plan rows, link validation and the billing webhook walk when it lands, secrets server-side", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "app-lane" },
104
+ { app: "cobaia", lane: "ads-slot", role: "the honest ad slot lane: the reserved slots and the rotation decision the deploy answers before the render", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "app-lane" },
105
+ { app: "cobaia", lane: "label-seed", role: "the label manifest seed of the monetization face: the store walk the sqlite vault carries", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
106
+ // the debonair lanes: the kathesis engine's audio walks
107
+ { app: "debonair", lane: "ingest-audio", role: "the ingest worker: the stream separation, the pcm downmix and the payload json the reconstruction reads", demand: { gpu: false, network: false, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
108
+ { app: "debonair", lane: "render-track", role: "the render worker: the composed plan render, the mastering chain and the wav encode into the take store", demand: { gpu: false, network: false, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
109
+ // the forge lanes: the execution clone's run walks
110
+ { app: "forge", lane: "binary-run", role: "the binary run lane: the runner the saddle engine answers for the fleet, the mode gate resolving through the join", demand: { gpu: false, network: true, isolation: "namespace", bootbudget: 800 }, today: "app-lane" },
111
+ { app: "forge", lane: "queue-priority", role: " the run queue walk: express, normal and batch ordering over the queue the lane serves", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
112
+ // the foundry lanes: the pipeline clone's graph walks
113
+ { app: "foundry", lane: "pipeline-graph", role: "the pipeline graph lane: provision, pull, run, collect and store — the plan walk the herd drives", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
114
+ { app: "foundry", lane: "image-artifact", role: "the image artifact lane: the format plans, the checksum seals and the shelf records the vault stores", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
115
+ // the getry lanes: the ai gateway's inference walks
116
+ { app: "getry", lane: "inference-route", role: "the inference route lane: the provider pool, the sse parse and the model masking over the upstream calls", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
117
+ { app: "getry", lane: "stream-fallback", role: "the resilience runner: the verdict ladder, the backoff walk and the trail the retry lane keeps", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
118
+ { app: "getry", lane: "thinking-ladder", role: "the seven-level reasoning ladder: the budget resolution the request injects before the upstream call", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
119
+ { app: "getry", lane: "router-rotation", role: "the rotation lane: the weighted draw, the cooldown ledger and the session rows the store keeps", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
120
+ // the saddle lanes: the engine's own dispatch surface
121
+ { app: "saddle", lane: "edge-dispatch", role: "the edge plane dispatch itself: the visitor guard, the lane resolution and the artifact commit through the vault seam", demand: { gpu: false, network: true, isolation: "process", bootbudget: 1500 }, today: "engine-lane" },
122
+ // the stealthhead lanes: the fps platform's simulation walks
123
+ { app: "stealthhead", lane: "match-simulate", role: "the authoritative match simulation: the fixed-step physics, the reconcile and rewind twin and the seeded spawns", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "app-lane" },
124
+ { app: "stealthhead", lane: "rank-compute", role: "the ranking walk: the elo ladder, the season batch and the position assignment over the standing rows", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "app-lane" },
125
+ { app: "stealthhead", lane: "world-bake", role: "the world pre-compilation: the map bake through the render engine — the gpu pass the planned modalities answer", demand: { gpu: true, network: true, isolation: "vm", bootbudget: 1500 }, today: "app-lane" },
126
+ { app: "stealthhead", lane: "ballistics-balance", role: "the armory balance sweep: falloff, shots-to-kill and ttk validation, offline and deterministic", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
127
+ // the vault lanes: the storage engine's object walks
128
+ { app: "vault", lane: "blob-ingest", role: "the object deposit lane: path and mime validation, the quota gate inside the write transaction and the detach walk", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
129
+ { app: "vault", lane: "chunk-window", role: "the chunk window lane: the fixed slicing, the per-window digest and the brotli decision over the byte stream", demand: { gpu: false, network: false, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
130
+ { app: "vault", lane: "digest-sha256", role: "the digest engine: the sha-256 master and chunk walks and the full re-verification the read path answers", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
131
+ { app: "vault", lane: "ref-gc", role: "the reference gc lane: the soft-delete tombstones, the ref detach and the orphan sweep the store drives", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
132
+ // the devthink lanes: the os envelope's command walks
133
+ { app: "devthink", lane: "chat-sandbox", role: "the chat sandbox lane: the session jail, the tool surface and the exec walks the engine dispatches server-side", demand: { gpu: false, network: true, isolation: "namespace", bootbudget: 1500 }, today: "engine-lane" },
134
+ { app: "devthink", lane: "llm-gateway", role: "the universal gateway pipeline: model resolution, auth, body building, retry and the streaming byte passthrough", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
135
+ { app: "devthink", lane: "stream-parse", role: "the streaming parser: the tolerant sse walk, the payload normalization and the delta tracking over the live stream", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
136
+ { app: "devthink", lane: "graph-run", role: "the graph runner: the deterministic stage walk, the retry ladder and the progress views the console draws", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
137
+ { app: "devthink", lane: "mcp-serve", role: "the mcp registry lane: the tool catalog, the approval gates and the transports the server answers", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
138
+ ]);
139
+
140
+ /** The official app slugs the catalog covers — the lockstep vocabulary the
141
+ * ownership manifest of the os answers (every official app owns at least
142
+ * one workload lane here). */
143
+ export const CATALOGAPPS: readonly string[] = Object.freeze([
144
+ "argan",
145
+ "cadria",
146
+ "cobaia",
147
+ "debonair",
148
+ "devthink",
149
+ "forge",
150
+ "foundry",
151
+ "getry",
152
+ "saddle",
153
+ "stealthhead",
154
+ "vault",
155
+ ]);
156
+
157
+ /** Answers the workload lanes one app owns.
158
+ *
159
+ * @param app the official app slug.
160
+ * @returns the lane rows of the app, catalog order.
161
+ */
162
+ export function lanesof(app: string): readonly WorkloadLane[] {
163
+ return FAMILYLANES.filter((row) => row.app === app);
164
+ }
165
+
166
+ /** Answers one lane row by app and lane id.
167
+ *
168
+ * @param app the official app slug.
169
+ * @param lane the lane id inside the app.
170
+ * @returns the lane row, or undefined when the catalog carries no such
171
+ * lane.
172
+ */
173
+ export function getlane(app: string, lane: string): WorkloadLane | undefined {
174
+ return FAMILYLANES.find((row) => row.app === app && row.lane === lane);
175
+ }
176
+
177
+ /** Joins one lane row against the registry of record: the nuclear law
178
+ * made executable — the demand rides the join resolver, the candidates
179
+ * answer best-first and the verdict is computed, never declared.
180
+ *
181
+ * @param row the lane row to join.
182
+ * @returns the answered join: the row, the verdict and the candidates.
183
+ */
184
+ export function lanejoin(row: WorkloadLane): LaneJoin {
185
+ const candidates = resolvejoin({
186
+ base: "max",
187
+ gpu: row.demand.gpu,
188
+ network: row.demand.network,
189
+ isolation: row.demand.isolation,
190
+ bootbudget: row.demand.bootbudget,
191
+ });
192
+ const livecount = candidates.filter((modality) => modality.state === "live").length;
193
+ const verdict: LaneVerdict = livecount > 0 ? "dispatchable" : candidates.length > 0 ? "planned-only" : "unresolved";
194
+ return { lane: row, verdict, candidates, livecount };
195
+ }
196
+
197
+ /** Joins one lane of one app by id — the surface the api route and the
198
+ * app mirrors read.
199
+ *
200
+ * @param app the official app slug.
201
+ * @param lane the lane id inside the app.
202
+ * @returns the answered join, or undefined when the catalog carries no
203
+ * such lane.
204
+ */
205
+ export function familyjoin(app: string, lane: string): LaneJoin | undefined {
206
+ const row = getlane(app, lane);
207
+ return row === undefined ? undefined : lanejoin(row);
208
+ }
209
+
210
+ /** One app's workload answer: the lanes, the joins and the honest counts. */
211
+ export type AppWorkloadReport = {
212
+ /** The official app slug. */
213
+ app: string;
214
+ /** The lane count the app owns. */
215
+ lanes: number;
216
+ /** The lanes whose join answered at least one live modality. */
217
+ dispatchable: number;
218
+ /** The lanes whose join answered only planned records. */
219
+ plannedonly: number;
220
+ /** The lanes whose join answered nothing (a calibration defect). */
221
+ unresolved: number;
222
+ /** The lanes whose heavy pass still walks the app surface. */
223
+ applane: number;
224
+ /** The lanes whose heavy pass already walks an engine surface. */
225
+ enginelane: number;
226
+ /** The per-lane joins, catalog order. */
227
+ joins: readonly LaneJoin[];
228
+ };
229
+
230
+ /** The family workload report: the honest census of every app's lanes
231
+ * against the registry of record — the work order the next waves read.
232
+ * */
233
+ export type FamilyWorkloadReport = {
234
+ /** The official app count the catalog covers. */
235
+ apps: number;
236
+ /** The total lane count of the catalog. */
237
+ lanes: number;
238
+ /** The lanes whose join answered at least one live modality. */
239
+ dispatchable: number;
240
+ /** The lanes whose join answered only planned records (the gpu waits). */
241
+ plannedonly: number;
242
+ /** The lanes whose join answered nothing. */
243
+ unresolved: number;
244
+ /** The lanes whose heavy pass still walks the app surface — the honest
245
+ * migration list the next waves work through. */
246
+ applanemigration: number;
247
+ /** The per-app reports, catalog order. */
248
+ perapp: readonly AppWorkloadReport[];
249
+ };
250
+
251
+ /** Computes the honest family workload report from the catalog and the
252
+ * registry — every count derived, nothing hardcoded, so the report can
253
+ * never drift from either surface.
254
+ *
255
+ * @returns the family census of the workload law.
256
+ */
257
+ export function workloadreport(): FamilyWorkloadReport {
258
+ const perapp: AppWorkloadReport[] = [];
259
+ let dispatchable = 0;
260
+ let plannedonly = 0;
261
+ let unresolved = 0;
262
+ let applanemigration = 0;
263
+ for (const app of CATALOGAPPS) {
264
+ const joins = lanesof(app).map(lanejoin);
265
+ const dispatchablecount = joins.filter((join) => join.verdict === "dispatchable").length;
266
+ const plannedonlycount = joins.filter((join) => join.verdict === "planned-only").length;
267
+ const unresolvedcount = joins.filter((join) => join.verdict === "unresolved").length;
268
+ const applanecount = joins.filter((join) => join.lane.today === "app-lane").length;
269
+ dispatchable += dispatchablecount;
270
+ plannedonly += plannedonlycount;
271
+ unresolved += unresolvedcount;
272
+ applanemigration += applanecount;
273
+ perapp.push({
274
+ app,
275
+ lanes: joins.length,
276
+ dispatchable: dispatchablecount,
277
+ plannedonly: plannedonlycount,
278
+ unresolved: unresolvedcount,
279
+ applane: applanecount,
280
+ enginelane: joins.length - applanecount,
281
+ joins,
282
+ });
283
+ }
284
+ return {
285
+ apps: CATALOGAPPS.length,
286
+ lanes: FAMILYLANES.length,
287
+ dispatchable,
288
+ plannedonly,
289
+ unresolved,
290
+ applanemigration,
291
+ perapp,
292
+ };
293
+ }
package/dist/App.d.ts DELETED
@@ -1,5 +0,0 @@
1
- import '@fontsource-variable/geist-mono';
2
- import '@fontsource-variable/inter';
3
- import './Sol/sol.css';
4
- declare function App(): import("react").JSX.Element;
5
- export default App;
package/dist/App.js DELETED
@@ -1,52 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * App — the global anchor (layer 1 of the anchor architecture) and the only
4
- * TSX outside the theme. The root manages the themes as single files: it
5
- * imports only the theme anchor (Sol/Sol.tsx — the file named after the theme
6
- * folder, beside Sol/sol.css) and the theme stylesheet, wraps the anchor in
7
- * the global concerns it owns (the error boundary, the theme and tooltip
8
- * providers, the toaster and the wouter router provider) and renders it. The
9
- * whole route tree lives behind the theme anchor; no page or component of the
10
- * theme is ever imported here.
11
- */
12
- import { createRoot } from 'react-dom/client';
13
- import { Router as WouterRouter } from 'wouter';
14
- import Sol from './Sol/Sol';
15
- import { ErrorBoundary, ThemeProvider, Toaster, TooltipProvider } from './Sol/shell/Shell.tsx';
16
- import '@fontsource-variable/geist-mono';
17
- import '@fontsource-variable/inter';
18
- import './Sol/sol.css';
19
- import { seedlabels } from './labels';
20
- // the copy law rides the boot: the seed refreshes the label store rows
21
- // (translated rows protected) before the first paint answers
22
- if (typeof window !== 'undefined')
23
- void seedlabels().catch(() => { });
24
- // NOTE: About Theme
25
- // - First choose a default theme according to your design style (dark or light bg), than change color palette in Sol/sol.css
26
- // to keep consistent foreground/background color across components
27
- // - If you want to make theme switchable, pass `switchable` ThemeProvider and use `useTheme` hook
28
- /** The router base derives from the declared base path so the same build serves
29
- * every host. A relative base ("./") cannot name the folder it lands in, but the
30
- * dispatcher always boots cold links at the application root first — so the
31
- * folder prefix of the boot pathname is exactly the router base (absolute, so
32
- * wouter never has to match against a relative prefix). The absolute bases
33
- * carry through unchanged. */
34
- function routerBase() {
35
- const declaredBase = import.meta.env.BASE_URL;
36
- if (declaredBase !== '/' && declaredBase !== './')
37
- return declaredBase.replace(/\/$/, '');
38
- const bootPath = window.location.pathname.replace(/index\.html$/, '').replace(/\/$/, '');
39
- return bootPath === '' ? '' : bootPath;
40
- }
41
- function App() {
42
- return (_jsx(ErrorBoundary, { children: _jsx(ThemeProvider, { defaultTheme: "dark", children: _jsxs(TooltipProvider, { children: [_jsx(Toaster, {}), _jsx(WouterRouter, { base: routerBase(), children: _jsx(Sol, {}) })] }) }) }));
43
- }
44
- /* The self-mount: the app owns its bootstrap — the retired main.tsx
45
- * wrapper is gone, so this module is the single entry the html loads
46
- * (the doctrine of the 2.1.0 universal interface: one tsx app, the
47
- * router and the mount live together). */
48
- const rootmount = typeof document !== 'undefined' ? document.getElementById('root') : null;
49
- if (rootmount) {
50
- createRoot(rootmount).render(_jsx(App, {}));
51
- }
52
- export default App;
package/dist/Sol/Sol.d.ts DELETED
@@ -1,3 +0,0 @@
1
- /** The route tree of the theme: the entry flow (intro, onboarding) before
2
- * the catch-all that mounts the window over every page route. */
3
- export default function Sol(): import("react").JSX.Element;
package/dist/Sol/Sol.js DELETED
@@ -1,46 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * Sol theme anchor — layer 2 of the anchor architecture.
4
- * The file carrying the theme folder's own name (Sol/Sol.tsx, beside
5
- * Sol/sol.css) is the path manager of the pages: it imports one anchor per
6
- * page folder (`folder/folder.tsx`, each beside the loose components its
7
- * folder keeps) and mounts every route and subroute of the theme. App.tsx
8
- * consumes only this file and the theme stylesheet; no page component is
9
- * ever imported outside this layer. When a theme folder changes its name
10
- * (Moon, Aqua), this file follows the new name and App.tsx keeps importing
11
- * the anchor by the folder path. Since the family window conversion the
12
- * theme is an APPLICATION: the entry flow opens the route table — /intro
13
- * (the akash-floor splash) and /onboarding (the first-run frames) — and
14
- * every other route renders as the content of the ONE application window
15
- * (the page anchors carry no chrome of their own; the window rail is the
16
- * only nav). The flow contract rides the home anchor's entry gate
17
- * (Sol/home/entrygate.tsx): "/" consults the seen flags (onboardingstate.ts)
18
- * before anything shows, the intro hands straight to /onboarding and the
19
- * onboarding lands home.
20
- */
21
- import { Route, Switch } from 'wouter';
22
- import AgentBrowserAnchor from './agentbrowser/agentbrowser';
23
- import ArchitectureAnchor from './architecture/architecture';
24
- import ComputeAnchor from './compute/compute';
25
- import ConsoleAnchor from './console/console';
26
- import DashboardAnchor from './dashboard/dashboard';
27
- import DocsAnchor from './docs/docs';
28
- import HomeAnchor from './home/home';
29
- import IntegrationsAnchor from './integrations/integrations';
30
- import IntroAnchor from './intro/intro';
31
- import LoginAnchor from './login/login';
32
- import NotFoundAnchor from './notfound/notfound';
33
- import OnboardingAnchor from './onboarding/onboarding';
34
- import PlaygroundAnchor from './playground/playground';
35
- import RegisterAnchor from './register/register';
36
- import { Shell } from './shell/Shell.tsx';
37
- /** The window stage: the ONE application window wrapping the whole page
38
- * route table — every existing route stays alive inside the stage. */
39
- function WindowStage() {
40
- return (_jsx(Shell, { children: _jsxs(Switch, { children: [_jsx(Route, { path: '/', component: HomeAnchor }), _jsx(Route, { path: '/architecture', component: ArchitectureAnchor }), _jsx(Route, { path: '/agent-browser', component: AgentBrowserAnchor }), _jsx(Route, { path: '/compute', component: ComputeAnchor }), _jsx(Route, { path: '/integrations', component: IntegrationsAnchor }), _jsx(Route, { path: '/playground', component: PlaygroundAnchor }), _jsx(Route, { path: '/console', component: ConsoleAnchor }), _jsx(Route, { path: '/login', component: LoginAnchor }), _jsx(Route, { path: '/register', component: RegisterAnchor }), _jsx(Route, { path: '/dashboard', component: DashboardAnchor }), _jsx(Route, { path: '/docs', component: DocsAnchor }), _jsx(Route, { path: '/404', component: NotFoundAnchor }), _jsx(Route, { component: NotFoundAnchor })] }) }));
41
- }
42
- /** The route tree of the theme: the entry flow (intro, onboarding) before
43
- * the catch-all that mounts the window over every page route. */
44
- export default function Sol() {
45
- return (_jsxs(Switch, { children: [_jsx(Route, { path: '/intro', component: IntroAnchor }), _jsx(Route, { path: '/onboarding', component: OnboardingAnchor }), _jsx(Route, { component: WindowStage })] }));
46
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * agent browser 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 AgentBrowser(): import("react").JSX.Element;
@@ -1,121 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * agent browser 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
- import { PulseRegular as Activity, ProhibitedRegular as Ban, CameraRegular as Camera, CheckmarkCircleRegular as CheckCircle2, KeyboardRegular as Keyboard, CursorRegular as MousePointer2, PlayRegular as Play, ArrowCounterclockwiseRegular as RotateCcw, DocumentTextRegular as ScrollText, WindowConsoleRegular as Terminal, } from '@fluentui/react-icons';
11
- // Signal & Ledger: agent browser as an event trail, evidence and deterministic replay.
12
- // The session console renders the rows the sessions catalog serves — the
13
- // documented example log of docs/logs/examplesession.json offline, the paired
14
- // database rows over HTTPS — never invented coordinates or counts. Every
15
- // word of the page itself rides the label store (labels.ts — the copy law).
16
- import { useEffect, useState } from 'react';
17
- import { PageShell } from '../shell/Shell.tsx';
18
- import { label, labelfill } from '../../labels.ts';
19
- import { agentsessions, mediaSlots, } from '../../catalog';
20
- /** the glyph of one event kind of the session trail. */
21
- function eventicon(type) {
22
- if (type === 'scroll')
23
- return ScrollText;
24
- if (type === 'type')
25
- return Keyboard;
26
- return MousePointer2;
27
- }
28
- /** the value line of one event: exactly the fields the row carries. */
29
- function eventvalue(event) {
30
- if (event.type === 'scroll')
31
- return `dy ${event.dy ?? 0}`;
32
- if (event.type === 'type')
33
- return `key ${event.key ?? ''}`;
34
- return `x ${event.x ?? 0} / y ${event.y ?? 0}`;
35
- }
36
- /** the elapsed label of one event from its relative time. */
37
- const eventtime = (event) => `+${event.t} ms`;
38
- /** one rendered event row: the glyph, the relative time, the kind and the fields. */
39
- function SessionEventRow({ event }) {
40
- const Icon = eventicon(event.type);
41
- return (_jsxs("div", { className: "console-row", children: [_jsx(Icon, { fontSize: 16 }), _jsx("span", { className: "console-time", children: eventtime(event) }), _jsx("strong", { children: event.type }), _jsx("span", { children: eventvalue(event) })] }));
42
- }
43
- /** the event trail of one session: one row per captured event. */
44
- function SessionTrail({ events }) {
45
- return (_jsx(_Fragment, { children: events.map((event) => (_jsx(SessionEventRow, { event: event }, `${event.t}-${event.type}`))) }));
46
- }
47
- /** the captcha verdict badge of one session: the honest outcome of the run. */
48
- function CaptchaBadge({ verdict }) {
49
- return (_jsxs("span", { className: verdict.passed ? 'console-pass' : 'console-denied', children: [verdict.passed ? _jsx(CheckCircle2, { fontSize: 14 }) : _jsx(Ban, { fontSize: 13 }), " ", verdict.kind, ' ', label(verdict.passed ? 'agentbrowser.captcha.passed' : 'agentbrowser.captcha.failed')] }));
50
- }
51
- /** the principle cards beside the console: the glyph is presentation code,
52
- * the words ride the store (agentbrowser.principle.*). */
53
- const principles = [
54
- { icon: Camera, titlekey: 'agentbrowser.principle.dom.title', bodykey: 'agentbrowser.principle.dom.body' },
55
- {
56
- icon: RotateCcw,
57
- titlekey: 'agentbrowser.principle.replay.title',
58
- bodykey: 'agentbrowser.principle.replay.body',
59
- },
60
- {
61
- icon: Play,
62
- titlekey: 'agentbrowser.principle.evidence.title',
63
- bodykey: 'agentbrowser.principle.evidence.body',
64
- },
65
- ];
66
- export default function AgentBrowser() {
67
- const [media, setMedia] = useState(undefined);
68
- const [sessions, setSessions] = useState(null);
69
- useEffect(() => {
70
- void mediaSlots().then((rows) => setMedia(rows.find((slot) => slot.id === 'media.agentbrowser.trace')));
71
- }, []);
72
- useEffect(() => {
73
- let live = true;
74
- agentsessions()
75
- .then((rows) => {
76
- if (live)
77
- setSessions(rows);
78
- })
79
- .catch(() => {
80
- if (live)
81
- setSessions([]);
82
- });
83
- return () => {
84
- live = false;
85
- };
86
- }, []);
87
- const session = sessions?.[0] ?? null;
88
- const lastt = session ? session.events[session.events.length - 1]?.t ?? 0 : 0;
89
- const sessionlabel = session ? session.session.id : label('agentbrowser.console.reading');
90
- /** the trimmed json projection of the served row (the docs/logs shape). */
91
- const sessionsummary = session
92
- ? JSON.stringify({
93
- version: session.version,
94
- session: {
95
- id: session.session.id,
96
- browser: session.session.browser,
97
- },
98
- events: session.events.map((event) => event.type),
99
- captcha: session.captcha,
100
- }, null, 2)
101
- : label('agentbrowser.console.waitingSession');
102
- return (_jsxs(PageShell, { section: label('agentbrowser.shell.section'), label: label('agentbrowser.shell.label'), title: label('agentbrowser.shell.title'), intro: label('agentbrowser.shell.intro'), media: media, children: [_jsxs("section", { className: "content-section split-content", children: [_jsxs("div", { children: [_jsx("p", { className: "eyebrow", children: label('agentbrowser.split.eyebrow') }), _jsx("h2", { className: "section-title", children: label('agentbrowser.split.title') })] }), _jsxs("div", { className: "prose-copy", children: [_jsx("p", { children: label('agentbrowser.split.body1') }), _jsx("p", { children: label('agentbrowser.split.body2') })] })] }), _jsxs("section", { className: "content-section browser-grid", children: [_jsxs("div", { className: "session-console", children: [_jsxs("div", { className: "console-head", children: [_jsxs("span", { children: [_jsx(Terminal, { fontSize: 14 }), ' ', labelfill('agentbrowser.console.session', {
103
- id: sessionlabel,
104
- })] }), session ? _jsx(CaptchaBadge, { verdict: session.captcha }) : null] }), _jsx("div", { className: "console-rows", children: session === null ? (_jsxs("div", { className: "console-row", "aria-live": "polite", children: [_jsx(Activity, { fontSize: 16 }), _jsx("span", { className: "console-time" }), _jsx("strong", { children: label('agentbrowser.console.catalog') }), _jsx("span", { children: label('agentbrowser.console.waiting') })] })) : session.events.length === 0 ? (_jsxs("div", { className: "console-row", "aria-live": "polite", children: [_jsx(Activity, { fontSize: 16 }), _jsx("span", { className: "console-time" }), _jsx("strong", { children: label('agentbrowser.console.catalog') }), _jsx("span", { children: label('agentbrowser.console.empty') })] })) : (_jsxs(_Fragment, { children: [_jsx(SessionTrail, { events: session.events }), _jsxs("div", { className: "console-row", children: [_jsx(Activity, { fontSize: 16 }), _jsxs("span", { className: "console-time", children: ["+", lastt, " ms"] }), _jsx("strong", { children: label('agentbrowser.console.metrics') }), _jsx("span", { children: labelfill('agentbrowser.console.events', {
105
- n: String(session.events.length),
106
- s: (lastt / 1000).toFixed(1),
107
- }) })] })] })) }), _jsxs("div", { className: "console-footer", children: [_jsx("span", { children: labelfill('agentbrowser.console.seed', {
108
- seed: session
109
- ? session.session.seed
110
- : label('agentbrowser.console.na'),
111
- }) }), _jsx("span", { children: labelfill('agentbrowser.console.browser', {
112
- browser: session
113
- ? session.session.browser
114
- : label('agentbrowser.console.na'),
115
- }) })] })] }), _jsx("div", { className: "browser-principles", children: principles.map((principle) => {
116
- const Icon = principle.icon;
117
- return (_jsxs("div", { className: "principle-card", children: [_jsx(Icon, { fontSize: 19 }), _jsxs("div", { children: [_jsx("strong", { children: label(principle.titlekey) }), _jsx("span", { children: label(principle.bodykey) })] })] }, principle.titlekey));
118
- }) })] }), _jsxs("section", { className: "content-section", children: [_jsxs("div", { className: "content-section-heading", children: [_jsx("p", { className: "eyebrow", children: labelfill('agentbrowser.json.eyebrow', {
119
- version: String(session ? session.version : 1),
120
- }) }), _jsx("span", { className: "mono-label", children: label('agentbrowser.json.mono') })] }), _jsx("pre", { className: "code-block", children: _jsx("code", { children: sessionsummary }) })] })] }));
121
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * architecture 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 Architecture(): import("react").JSX.Element;