@wenathlan/saddle 2.0.153 → 2.0.155

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/Dockerfile +139 -55
  2. package/README.md +58 -59
  3. package/browser.ts +482 -0
  4. package/cli.ts +274 -0
  5. package/distribution.ts +731 -0
  6. package/docker.config +29 -8
  7. package/docs/artifactavailability.md +2 -2
  8. package/docs/browser.md +18 -1
  9. package/docs/{containerplatforms.2.1.0.md → containerplatforms210.md} +1 -1
  10. package/docs/{documentmap.1.8.12.md → documentmap1812.md} +1 -1
  11. package/docs/extension.md +13 -2
  12. package/docs/libraryapi.md +1 -1
  13. package/docs/{ninety.modalities.md → ninetymodalities.md} +87 -4
  14. package/docs/{planning.ninety.md → planningninety.md} +6 -6
  15. package/docs/{releasenotes.1.8.13.md → releasenotes1813.md} +2 -2
  16. package/docs/{releasenotes.1.8.14.md → releasenotes1814.md} +1 -1
  17. package/docs/{repo.synthesis.1.8.16.md → reposynthesis1816.md} +1 -1
  18. package/docs/todo.md +2 -2
  19. package/docs/{todo.1.8.15.md → todo1815.md} +1 -1
  20. package/docs/{todo.1.8.16.md → todo1816.md} +5 -5
  21. package/execution.ts +677 -0
  22. package/foundation.ts +314 -0
  23. package/index.ts +35 -27
  24. package/isolation.ts +84 -0
  25. package/modes.ts +170 -0
  26. package/mttg.config +1 -1
  27. package/orchestrator.ts +49 -15
  28. package/package.json +90 -75
  29. package/qemu.config +2 -2
  30. package/sandbox.ts +2094 -0
  31. package/scheduler.ts +1 -1
  32. package/server.ts +52 -0
  33. package/tsconfig.json +11 -12
  34. package/virtual.ts +1105 -0
  35. package/virtualgpu.ts +1 -1
  36. package/virtualization.ts +1 -1
  37. package/workloadlaw.ts +293 -0
  38. package/dist/App.d.ts +0 -5
  39. package/dist/App.js +0 -52
  40. package/dist/Sol/Sol.d.ts +0 -3
  41. package/dist/Sol/Sol.js +0 -46
  42. package/dist/Sol/agentbrowser/agentbrowser.d.ts +0 -9
  43. package/dist/Sol/agentbrowser/agentbrowser.js +0 -121
  44. package/dist/Sol/architecture/architecture.d.ts +0 -9
  45. package/dist/Sol/architecture/architecture.js +0 -93
  46. package/dist/Sol/compute/compute.d.ts +0 -9
  47. package/dist/Sol/compute/compute.js +0 -22
  48. package/dist/Sol/console/console.d.ts +0 -15
  49. package/dist/Sol/console/console.js +0 -292
  50. package/dist/Sol/dashboard/dashboard.d.ts +0 -10
  51. package/dist/Sol/dashboard/dashboard.js +0 -181
  52. package/dist/Sol/docs/docs.d.ts +0 -9
  53. package/dist/Sol/docs/docs.js +0 -28
  54. package/dist/Sol/home/home.d.ts +0 -35
  55. package/dist/Sol/home/home.js +0 -239
  56. package/dist/Sol/integrations/integrations.d.ts +0 -9
  57. package/dist/Sol/integrations/integrations.js +0 -83
  58. package/dist/Sol/intro/intro.d.ts +0 -7
  59. package/dist/Sol/intro/intro.js +0 -102
  60. package/dist/Sol/login/login.d.ts +0 -16
  61. package/dist/Sol/login/login.js +0 -49
  62. package/dist/Sol/notfound/notfound.d.ts +0 -9
  63. package/dist/Sol/notfound/notfound.js +0 -15
  64. package/dist/Sol/onboarding/onboarding.d.ts +0 -25
  65. package/dist/Sol/onboarding/onboarding.js +0 -60
  66. package/dist/Sol/playground/playground.d.ts +0 -9
  67. package/dist/Sol/playground/playground.js +0 -127
  68. package/dist/Sol/register/register.d.ts +0 -16
  69. package/dist/Sol/register/register.js +0 -193
  70. package/dist/Sol/shell/Shell.d.ts +0 -124
  71. package/dist/Sol/shell/Shell.js +0 -335
  72. package/dist/Sol/wingets/ComputeBootladder.d.ts +0 -6
  73. package/dist/Sol/wingets/ComputeBootladder.js +0 -71
  74. package/dist/Sol/wingets/ComputeModalitycatalog.d.ts +0 -7
  75. package/dist/Sol/wingets/ComputeModalitycatalog.js +0 -71
  76. package/dist/Sol/wingets/ConsoleApibadge.d.ts +0 -7
  77. package/dist/Sol/wingets/ConsoleApibadge.js +0 -5
  78. package/dist/Sol/wingets/ConsoleEdgelaw.d.ts +0 -6
  79. package/dist/Sol/wingets/ConsoleEdgelaw.js +0 -36
  80. package/dist/Sol/wingets/ConsoleEventstimeline.d.ts +0 -19
  81. package/dist/Sol/wingets/ConsoleEventstimeline.js +0 -12
  82. package/dist/Sol/wingets/ConsoleSnapshotcontrols.d.ts +0 -8
  83. package/dist/Sol/wingets/ConsoleSnapshotcontrols.js +0 -8
  84. package/dist/Sol/wingets/ConsoleSpecpanel.d.ts +0 -21
  85. package/dist/Sol/wingets/ConsoleSpecpanel.js +0 -75
  86. package/dist/Sol/wingets/ConsoleTerminal.d.ts +0 -22
  87. package/dist/Sol/wingets/ConsoleTerminal.js +0 -77
  88. package/dist/Sol/wingets/DashboardAccountpanel.d.ts +0 -18
  89. package/dist/Sol/wingets/DashboardAccountpanel.js +0 -65
  90. package/dist/Sol/wingets/DashboardAdminpanel.d.ts +0 -6
  91. package/dist/Sol/wingets/DashboardAdminpanel.js +0 -90
  92. package/dist/Sol/wingets/DashboardAuditlog.d.ts +0 -8
  93. package/dist/Sol/wingets/DashboardAuditlog.js +0 -50
  94. package/dist/Sol/wingets/DashboardCreatesandboxform.d.ts +0 -10
  95. package/dist/Sol/wingets/DashboardCreatesandboxform.js +0 -71
  96. package/dist/Sol/wingets/DashboardEventstimeline.d.ts +0 -8
  97. package/dist/Sol/wingets/DashboardEventstimeline.js +0 -83
  98. package/dist/Sol/wingets/DashboardGlobalsandboxestable.d.ts +0 -8
  99. package/dist/Sol/wingets/DashboardGlobalsandboxestable.js +0 -57
  100. package/dist/Sol/wingets/DashboardMeshnodestable.d.ts +0 -8
  101. package/dist/Sol/wingets/DashboardMeshnodestable.js +0 -103
  102. package/dist/Sol/wingets/DashboardSandboxlist.d.ts +0 -10
  103. package/dist/Sol/wingets/DashboardSandboxlist.js +0 -163
  104. package/dist/Sol/wingets/DashboardUserstable.d.ts +0 -8
  105. package/dist/Sol/wingets/DashboardUserstable.js +0 -78
  106. package/dist/Sol/wingets/HomeEntrygate.d.ts +0 -23
  107. package/dist/Sol/wingets/HomeEntrygate.js +0 -73
  108. package/dist/Sol/wingets/HomeMetricstrip.d.ts +0 -9
  109. package/dist/Sol/wingets/HomeMetricstrip.js +0 -4
  110. package/dist/Sol/wingets/HomeRuntimediagram.d.ts +0 -1
  111. package/dist/Sol/wingets/HomeRuntimediagram.js +0 -22
  112. package/dist/Sol/wingets/LoginForm.d.ts +0 -19
  113. package/dist/Sol/wingets/LoginForm.js +0 -141
  114. package/dist/Sol/wingets/RegisterPasswordconfirm.d.ts +0 -13
  115. package/dist/Sol/wingets/RegisterPasswordconfirm.js +0 -16
  116. package/dist/Sol/wingets/RegisterPasswordmeter.d.ts +0 -19
  117. package/dist/Sol/wingets/RegisterPasswordmeter.js +0 -65
  118. package/dist/Sol/wingets/RegisterUsernamerules.d.ts +0 -11
  119. package/dist/Sol/wingets/RegisterUsernamerules.js +0 -16
  120. package/dist/Sol/wingets/index.d.ts +0 -39
  121. package/dist/Sol/wingets/index.js +0 -39
  122. package/dist/alternatives.d.ts +0 -508
  123. package/dist/alternatives.js +0 -950
  124. package/dist/api.d.ts +0 -154
  125. package/dist/api.js +0 -174
  126. package/dist/auth.d.ts +0 -268
  127. package/dist/auth.js +0 -476
  128. package/dist/automation.d.ts +0 -425
  129. package/dist/automation.js +0 -566
  130. package/dist/browser.d.ts +0 -561
  131. package/dist/browser.js +0 -1058
  132. package/dist/capacitor.config.d.ts +0 -45
  133. package/dist/capacitor.config.js +0 -48
  134. package/dist/catalog.d.ts +0 -43
  135. package/dist/catalog.js +0 -44
  136. package/dist/cli.d.ts +0 -16
  137. package/dist/cli.js +0 -168
  138. package/dist/communication.d.ts +0 -181
  139. package/dist/communication.js +0 -376
  140. package/dist/compute.d.ts +0 -1160
  141. package/dist/compute.js +0 -2272
  142. package/dist/dashboardlib.d.ts +0 -58
  143. package/dist/dashboardlib.js +0 -161
  144. package/dist/db.d.ts +0 -569
  145. package/dist/db.js +0 -1080
  146. package/dist/distribution.d.ts +0 -528
  147. package/dist/distribution.js +0 -810
  148. package/dist/drizzle.config.d.ts +0 -20
  149. package/dist/drizzle.config.js +0 -18
  150. package/dist/edgelandes.d.ts +0 -70
  151. package/dist/edgelandes.host.d.ts +0 -26
  152. package/dist/edgelandes.host.js +0 -1089
  153. package/dist/edgelandes.inproc.d.ts +0 -27
  154. package/dist/edgelandes.inproc.js +0 -952
  155. package/dist/edgelandes.js +0 -1133
  156. package/dist/edgelandes.ninety.d.ts +0 -31
  157. package/dist/edgelandes.ninety.js +0 -174
  158. package/dist/edgelandes.virtual.d.ts +0 -25
  159. package/dist/edgelandes.virtual.js +0 -629
  160. package/dist/edgeplane.d.ts +0 -114
  161. package/dist/edgeplane.js +0 -305
  162. package/dist/examplelocaljob.d.ts +0 -1
  163. package/dist/examplelocaljob.js +0 -14
  164. package/dist/execution.d.ts +0 -529
  165. package/dist/execution.js +0 -760
  166. package/dist/family.d.ts +0 -16
  167. package/dist/family.js +0 -42
  168. package/dist/familyurl.d.ts +0 -21
  169. package/dist/familyurl.js +0 -24
  170. package/dist/format.d.ts +0 -18
  171. package/dist/format.js +0 -59
  172. package/dist/foundation.d.ts +0 -172
  173. package/dist/foundation.js +0 -312
  174. package/dist/index.d.ts +0 -735
  175. package/dist/index.js +0 -1020
  176. package/dist/integration.d.ts +0 -235
  177. package/dist/integration.js +0 -228
  178. package/dist/intelligence.d.ts +0 -93
  179. package/dist/intelligence.js +0 -144
  180. package/dist/isolation.d.ts +0 -128
  181. package/dist/isolation.js +0 -95
  182. package/dist/labels.d.ts +0 -665
  183. package/dist/labels.js +0 -751
  184. package/dist/localauth.d.ts +0 -127
  185. package/dist/localauth.js +0 -413
  186. package/dist/media.d.ts +0 -343
  187. package/dist/media.js +0 -985
  188. package/dist/mesh.d.ts +0 -177
  189. package/dist/mesh.js +0 -468
  190. package/dist/modalityregistry.d.ts +0 -109
  191. package/dist/modalityregistry.js +0 -1386
  192. package/dist/modes.d.ts +0 -358
  193. package/dist/modes.js +0 -133
  194. package/dist/onboardingstate.d.ts +0 -79
  195. package/dist/onboardingstate.js +0 -282
  196. package/dist/orchestrator.d.ts +0 -1338
  197. package/dist/orchestrator.js +0 -4310
  198. package/dist/packager/targetcli.js +0 -4
  199. package/dist/paths.d.ts +0 -2
  200. package/dist/paths.js +0 -14
  201. package/dist/performance.d.ts +0 -415
  202. package/dist/performance.js +0 -826
  203. package/dist/quantum.d.ts +0 -809
  204. package/dist/quantum.js +0 -2072
  205. package/dist/render.d.ts +0 -380
  206. package/dist/render.js +0 -1072
  207. package/dist/runall.d.ts +0 -2
  208. package/dist/runall.js +0 -39
  209. package/dist/runtimeprobe.d.ts +0 -4
  210. package/dist/runtimeprobe.js +0 -8
  211. package/dist/sandbox.d.ts +0 -355
  212. package/dist/sandbox.js +0 -1721
  213. package/dist/sandboxenvprofile.d.ts +0 -29
  214. package/dist/sandboxenvprofile.js +0 -89
  215. package/dist/sandboxprofile.d.ts +0 -137
  216. package/dist/sandboxprofile.js +0 -241
  217. package/dist/sandboxqueue.d.ts +0 -108
  218. package/dist/sandboxqueue.js +0 -201
  219. package/dist/sandboxquota.d.ts +0 -121
  220. package/dist/sandboxquota.js +0 -236
  221. package/dist/scheduler.d.ts +0 -595
  222. package/dist/scheduler.js +0 -1258
  223. package/dist/scriptlanes.d.ts +0 -182
  224. package/dist/scriptlanes.js +0 -660
  225. package/dist/scripts.buildengine.d.ts +0 -1
  226. package/dist/scripts.buildengine.js +0 -39
  227. package/dist/scripts.securitygate.d.ts +0 -1
  228. package/dist/scripts.securitygate.js +0 -68
  229. package/dist/scripts.validateflatnative.d.ts +0 -1
  230. package/dist/scripts.validateflatnative.js +0 -72
  231. package/dist/security.d.ts +0 -500
  232. package/dist/security.js +0 -1169
  233. package/dist/seedcatalog.d.ts +0 -13
  234. package/dist/seedcatalog.js +0 -46
  235. package/dist/server.d.ts +0 -20
  236. package/dist/server.js +0 -53
  237. package/dist/speccatalog.d.ts +0 -31
  238. package/dist/speccatalog.js +0 -163
  239. package/dist/tiers.d.ts +0 -1001
  240. package/dist/tiers.js +0 -2169
  241. package/dist/utils.d.ts +0 -2
  242. package/dist/utils.js +0 -5
  243. package/dist/vaulthandoff.d.ts +0 -141
  244. package/dist/vaulthandoff.js +0 -444
  245. package/dist/virtual.d.ts +0 -640
  246. package/dist/virtual.js +0 -1284
  247. package/dist/virtualcpu.d.ts +0 -315
  248. package/dist/virtualcpu.js +0 -1180
  249. package/dist/virtualgpu.d.ts +0 -344
  250. package/dist/virtualgpu.js +0 -1000
  251. package/dist/virtualization.d.ts +0 -606
  252. package/dist/virtualization.js +0 -1186
  253. package/dist/virtualmemory.d.ts +0 -817
  254. package/dist/virtualmemory.js +0 -1795
  255. package/dist/vite.config.d.ts +0 -3
  256. package/dist/vite.config.js +0 -43
  257. package/dist/vitest.config.d.ts +0 -2
  258. package/dist/vitest.config.js +0 -25
  259. package/dist/webserver.d.ts +0 -166
  260. package/dist/webserver.js +0 -2226
  261. package/dist/workloadlaw.d.ts +0 -133
  262. package/dist/workloadlaw.js +0 -193
  263. package/manifest.json +0 -20
  264. package/media.ts +0 -1337
  265. /package/docs/{architecture.1.8.19.md → architecture1819.md} +0 -0
  266. /package/docs/{architecture.1.8.19.mmd → architecture1819.mmd} +0 -0
  267. /package/docs/{artifactresearch.1.8.9.md → artifactresearch189.md} +0 -0
  268. /package/docs/{batches.1816.to.1820.md → batches1816to1820.md} +0 -0
  269. /package/docs/{brancharchive.2026.08.18.md → brancharchive20260818.md} +0 -0
  270. /package/docs/{containerplatforms.1.8.17.md → containerplatforms1817.md} +0 -0
  271. /package/docs/{e2ugh.engine.md → e2ughengine.md} +0 -0
  272. /package/docs/{flatbuildresearch.1.8.11.md → flatbuildresearch1811.md} +0 -0
  273. /package/docs/{licenseaudit.1.8.12.md → licenseaudit1812.md} +0 -0
  274. /package/docs/{mobileconversionresearch.1.8.10.md → mobileconversionresearch1810.md} +0 -0
  275. /package/docs/{nativeidentityresearch.1.8.11.md → nativeidentityresearch1811.md} +0 -0
  276. /package/docs/{native.wrappers.md → nativewrappers.md} +0 -0
  277. /package/docs/{planning.1.8.18.md → planning1818.md} +0 -0
  278. /package/docs/{planning.1.8.19.md → planning1819.md} +0 -0
  279. /package/docs/{planning.engine.md → planningengine.md} +0 -0
  280. /package/docs/{releasenotes.1.8.12.md → releasenotes1812.md} +0 -0
  281. /package/docs/{releasenotes.1.8.15.md → releasenotes1815.md} +0 -0
  282. /package/docs/{releasenotes.1.8.16.md → releasenotes1816.md} +0 -0
  283. /package/docs/{releasenotes.1.8.17.md → releasenotes1817.md} +0 -0
  284. /package/docs/{releasenotes.1.8.18.md → releasenotes1818.md} +0 -0
  285. /package/docs/{releasenotes.1.8.19.md → releasenotes1819.md} +0 -0
  286. /package/docs/{reorganization.1.8.8.md → reorganization188.md} +0 -0
  287. /package/docs/{reorganization.1.8.9.md → reorganization189.md} +0 -0
  288. /package/docs/{repo.analysis.1.8.21.json → repoanalysis1821.json} +0 -0
  289. /package/docs/{repo.candidates.1.8.21.jsonl → repocandidates1821.jsonl} +0 -0
  290. /package/docs/{repo.research.1.8.16.md → reporesearch1816.md} +0 -0
  291. /package/docs/{repo.research.1.8.21.md → reporesearch1821.md} +0 -0
  292. /package/docs/{repo.selected.1.8.21.json → reposelected1821.json} +0 -0
  293. /package/docs/{repo.synthesis.1.8.21.md → reposynthesis1821.md} +0 -0
  294. /package/docs/{research.1.8.18.isolation.md → research1818isolation.md} +0 -0
  295. /package/docs/{research.1.8.19.virtual.browser.md → research1819virtualbrowser.md} +0 -0
  296. /package/docs/{scanningresearch.1.8.11.md → scanningresearch1811.md} +0 -0
  297. /package/docs/{securityaudit.1.8.7.md → securityaudit187.md} +0 -0
  298. /package/docs/{securityreferences.1.8.11.md → securityreferences1811.md} +0 -0
  299. /package/docs/{securityresearch.1.8.11.md → securityresearch1811.md} +0 -0
  300. /package/docs/{signingresearch.1.8.12.md → signingresearch1812.md} +0 -0
  301. /package/docs/{tauri.glib.risk.1.8.11.md → tauriglibrisk1811.md} +0 -0
  302. /package/docs/{todo.1.8.18.md → todo1818.md} +0 -0
  303. /package/docs/{todo.1.8.19.md → todo1819.md} +0 -0
  304. /package/docs/{toolchainresearch.1.8.9.md → toolchainresearch189.md} +0 -0
  305. /package/docs/{web.duplicatecleanup.md → webduplicatecleanup.md} +0 -0
  306. /package/docs/{web.ideas.md → webideas.md} +0 -0
  307. /package/docs/{workflowimprovements.2026.08.19.md → workflowimprovements20260819.md} +0 -0
@@ -1,45 +0,0 @@
1
- /**
2
- * the one conversion config of the grand merge, living at the app root so
3
- * the capacitor cli resolves it from its working directory (verified against
4
- * @capacitor/cli 8.5.1: the mobile lane runs `npx cap add`/`npx cap sync`
5
- * from the app root and every path below — webDir above all — resolves
6
- * relative to that cwd).
7
- *
8
- * the shared web build (the hashed bundles that vite emits straight at the
9
- * app root) is the single application source of every platform: the browser,
10
- * github pages, vercel, netlify, the tv and the android wrapper all render
11
- * the same web bundle. the native shells are generated on the runners
12
- * (`npx cap add android` / `npx cap add ios`) into android/ and ios/ beside
13
- * this config — a gitignored toolchain output that is never committed (see
14
- * docs/native.wrappers.md for the doctrine).
15
- *
16
- * the shape follows the family capacitor contract (the same shape every
17
- * family app declares, devthink first); the type import stays out so the web
18
- * typecheck never requires the optional capacitor toolchain — the identity
19
- * fields stay plain and typed structurally here, with the saddle extras
20
- * (logging behavior, web-content debugging, the ios content mode) riding
21
- * beside them.
22
- */
23
- /** the structural contract of the capacitor config the cli reads (the subset this repository declares). */
24
- type CapacitorConfigShape = {
25
- appId: string;
26
- appName: string;
27
- webDir: string;
28
- bundledWebRuntime?: boolean;
29
- loggingBehavior?: string;
30
- server?: {
31
- androidScheme?: string;
32
- };
33
- android?: {
34
- allowMixedContent?: boolean;
35
- path?: string;
36
- webContentsDebuggingEnabled?: boolean;
37
- };
38
- ios?: {
39
- path?: string;
40
- preferredContentMode?: string;
41
- webContentsDebuggingEnabled?: boolean;
42
- };
43
- };
44
- declare const config: CapacitorConfigShape;
45
- export default config;
@@ -1,48 +0,0 @@
1
- /**
2
- * the one conversion config of the grand merge, living at the app root so
3
- * the capacitor cli resolves it from its working directory (verified against
4
- * @capacitor/cli 8.5.1: the mobile lane runs `npx cap add`/`npx cap sync`
5
- * from the app root and every path below — webDir above all — resolves
6
- * relative to that cwd).
7
- *
8
- * the shared web build (the hashed bundles that vite emits straight at the
9
- * app root) is the single application source of every platform: the browser,
10
- * github pages, vercel, netlify, the tv and the android wrapper all render
11
- * the same web bundle. the native shells are generated on the runners
12
- * (`npx cap add android` / `npx cap add ios`) into android/ and ios/ beside
13
- * this config — a gitignored toolchain output that is never committed (see
14
- * docs/native.wrappers.md for the doctrine).
15
- *
16
- * the shape follows the family capacitor contract (the same shape every
17
- * family app declares, devthink first); the type import stays out so the web
18
- * typecheck never requires the optional capacitor toolchain — the identity
19
- * fields stay plain and typed structurally here, with the saddle extras
20
- * (logging behavior, web-content debugging, the ios content mode) riding
21
- * beside them.
22
- */
23
- const config = {
24
- /** the saddle mobile identity — the id the mobile lane stamps onto the generated shells. */
25
- appId: "im.saddle.app",
26
- appName: "Saddle",
27
- /** the vite build of the theme: `npm run web:build:pages` emits the hashed bundles at the app root. */
28
- webDir: ".",
29
- bundledWebRuntime: false,
30
- loggingBehavior: "none",
31
- server: {
32
- androidScheme: "https",
33
- },
34
- /** the build paths the mobile lane answers: the android wrapper and the ios
35
- * shell materialize beside this config (family-mobile.yml) and the cli
36
- * reads them from these declared folders. */
37
- android: {
38
- allowMixedContent: false,
39
- path: "android",
40
- webContentsDebuggingEnabled: false,
41
- },
42
- ios: {
43
- path: "ios",
44
- preferredContentMode: "mobile",
45
- webContentsDebuggingEnabled: false,
46
- },
47
- };
48
- export default config;
package/dist/catalog.d.ts DELETED
@@ -1,43 +0,0 @@
1
- export type MediaSlot = {
2
- id: string;
3
- label: string;
4
- ratio: string;
5
- caption: string;
6
- };
7
- /** one captured event of an agent browser session (docs/logs contract). */
8
- export type AgentSessionEvent = {
9
- /** the relative time of the event in milliseconds */
10
- t: number;
11
- /** the event kind: move, click, type or scroll */
12
- type: string;
13
- /** the css px coordinates of a move or click */
14
- x?: number;
15
- y?: number;
16
- /** the scroll delta of a scroll event */
17
- dy?: number;
18
- /** the pressed key of a type event */
19
- key?: string;
20
- };
21
- /** one agent browser session row: the session identity, its events and the
22
- * captcha verdict of the run. */
23
- export type AgentSession = {
24
- /** the log format version */
25
- version: number;
26
- /** the session identity: id, browser and seed */
27
- session: {
28
- id: string;
29
- browser: string;
30
- seed: string;
31
- };
32
- /** the captured events in relative-time order */
33
- events: AgentSessionEvent[];
34
- /** the captcha verdict of the run */
35
- captcha: {
36
- kind: string;
37
- passed: boolean;
38
- };
39
- };
40
- export declare function mediaSlots(): Promise<MediaSlot[]>;
41
- /** the agent browser sessions the pages render: the documented example log
42
- * offline, the paired database rows over HTTPS once the endpoint answers. */
43
- export declare function agentsessions(): Promise<AgentSession[]>;
package/dist/catalog.js DELETED
@@ -1,44 +0,0 @@
1
- /** Style: Saddle interface catalog — the read-only data layer of the pages.
2
- * The owner doctrine: the interface never hardcodes data in components and
3
- * never touches the visitor machine — no IndexedDB, no localForage, no
4
- * browser storage writes. The rows live in the site's own self-hosted
5
- * database (the virtual repo that mirrors the repository content per theme)
6
- * and reach the interface over HTTPS; the reviewed seeds below are the
7
- * offline answer of the static build until the database endpoint is paired.
8
- * Media is never a file in the repository: the pages prepare media areas and
9
- * the catalog answers their labels, ratios and captions. */
10
- import { seedAgentSessions, seedMediaSlots } from "./seedcatalog";
11
- const cache = new Map();
12
- /** Reads one catalog kind: the paired database answers first over HTTPS
13
- * (same origin gateway path), the reviewed seeds answer offline. Nothing is
14
- * written to the visitor device. */
15
- async function catalogRows(kind, seeds) {
16
- const cached = cache.get(kind);
17
- if (cached)
18
- return cached;
19
- let rows = seeds;
20
- try {
21
- const base = import.meta.env?.VITE_CATALOG_URL?.replace(/\/$/, "") ?? "";
22
- if (base) {
23
- const answer = await fetch(`${base}/catalog/${kind}`, { headers: { accept: "application/json" } });
24
- if (answer.ok) {
25
- const payload = (await answer.json());
26
- if (Array.isArray(payload.rows) && payload.rows.length)
27
- rows = payload.rows;
28
- }
29
- }
30
- }
31
- catch {
32
- /* the database endpoint is optional; the seeds answer the static build */
33
- }
34
- cache.set(kind, rows);
35
- return rows;
36
- }
37
- export function mediaSlots() {
38
- return catalogRows("saddle.media", seedMediaSlots);
39
- }
40
- /** the agent browser sessions the pages render: the documented example log
41
- * offline, the paired database rows over HTTPS once the endpoint answers. */
42
- export function agentsessions() {
43
- return catalogRows("saddle.sessions", seedAgentSessions);
44
- }
package/dist/cli.d.ts DELETED
@@ -1,16 +0,0 @@
1
- /**
2
- * cli.ts — the saddle command-line entry point.
3
- *
4
- * This file is the v2.0.0 grand-merge consolidation of the former nested
5
- * folders of the repository (cli) into the single
6
- * root-level domain file of the e2ugh family standard: one optimized
7
- * TypeScript file per correlated domain, ordinal sections, JSDoc on every
8
- * block, intra-domain imports dissolved, cross-domain imports rewritten to
9
- * ./<domain>.js. Every capability of every source file is preserved here;
10
- * the pure re-export barrels (none in this domain) folded their surface into this file directly.
11
- */
12
- /**
13
- * the cli keeps local execution explicit and leaves remote dispatch to adapters.
14
- */
15
- /** Runs one CLI command and keeps external services behind adapters. */
16
- export declare function main(args?: string[]): Promise<void>;
package/dist/cli.js DELETED
@@ -1,168 +0,0 @@
1
- /**
2
- * cli.ts — the saddle command-line entry point.
3
- *
4
- * This file is the v2.0.0 grand-merge consolidation of the former nested
5
- * folders of the repository (cli) into the single
6
- * root-level domain file of the e2ugh family standard: one optimized
7
- * TypeScript file per correlated domain, ordinal sections, JSDoc on every
8
- * block, intra-domain imports dissolved, cross-domain imports rewritten to
9
- * ./<domain>.js. Every capability of every source file is preserved here;
10
- * the pure re-export barrels (none in this domain) folded their surface into this file directly.
11
- */
12
- import { mkdtemp, readFile } from "node:fs/promises";
13
- import { tmpdir } from "node:os";
14
- import { join } from "node:path";
15
- import { argv } from "node:process";
16
- import { eventbus } from "./foundation.js";
17
- import { localmemory, localstorage } from "./virtual.js";
18
- import { engine, inprocess, scheduler } from "./execution.js";
19
- import { mcpserver } from "./integration.js";
20
- import { modecatalog } from "./modes.js";
21
- import { creategrid, defaultplan, dockerrun, multiplex, planlint, plantoml, qemucommand } from "./index.js";
22
- /* ════════════════════════════════════════════════════════════════════ */
23
- /* Section 1: cli/main.ts — the saddle command-line entry point (the bin "saddle" resolves to dist/cli.js after the grand merge; the file is executable through the bin entry, not a shebang). */
24
- /* ════════════════════════════════════════════════════════════════════ */
25
- /**
26
- * the cli keeps local execution explicit and leaves remote dispatch to adapters.
27
- */
28
- /** Runs one CLI command and keeps external services behind adapters. */
29
- export async function main(args = argv.slice(2)) {
30
- const command = args[0] ?? "help";
31
- /* Help stays short and lists only stable local commands. */
32
- if (["help", "--help", "-h"].includes(command)) {
33
- console.log("saddle <command>\n\ncommands\n help\n modes\n plan [qemu|docker|toml]\n vm [qemu|docker|toml]\n vmlint\n gpus\n runexample\n mcp");
34
- return;
35
- }
36
- if (command === "modes") {
37
- console.log(JSON.stringify(modecatalog(), null, 2));
38
- return;
39
- }
40
- if (command === "plan") {
41
- await renderplan(args[1]);
42
- return;
43
- }
44
- /* The vm/vmlint/gpus triad makes the nominal npm aliases (vm:create, */
45
- /* vm:validate, gpu:list) real: they map to the live engine surface — */
46
- /* the plan renderer, the planlint validator, and the gpus.json catalog. */
47
- if (command === "vm") {
48
- await renderplan(args[1] ?? "qemu");
49
- return;
50
- }
51
- if (command === "vmlint") {
52
- await rendervmlint();
53
- return;
54
- }
55
- if (command === "gpus") {
56
- await rendergpus();
57
- return;
58
- }
59
- if (command === "runexample") {
60
- const root = await mkdtemp(join(tmpdir(), "saddlecli"));
61
- const events = eventbus();
62
- const run = engine({ storage: localstorage(root), memory: localmemory(), scheduler: scheduler([inprocess()]), events });
63
- const result = await run.run({ name: "cliexample", input: { hello: "saddle" } }, ({ job }) => ({ jobid: job.id, ok: true, message: "storage to working set to result" }));
64
- console.log(JSON.stringify({ jobid: result.job.id, artifact: result.artifact, events: events.all().length }, null, 2));
65
- return;
66
- }
67
- if (command === "mcp") {
68
- const server = mcpserver();
69
- console.log(JSON.stringify({ tools: server.listtools() }, null, 2));
70
- return;
71
- }
72
- throw new Error(`unknown command: ${command}`);
73
- }
74
- /* ════════════════════════════════════════════════════════════════════ */
75
- /* Section 2: the plan renderer — the architect CLI absorbed from the e2ugh */
76
- /* engine entry (index.ts); the former `e2ugh` bin folds into the single */
77
- /* `saddle` bin at the 2.0.0 grand merge. */
78
- /* ════════════════════════════════════════════════════════════════════ */
79
- /**
80
- * Renders one machine plan (defaulting to defaultplan, overridden by the
81
- * optional vm.config.toml regex fields) preceded by the MTTG multiplex
82
- * header — the absorbed e2ugh engine CLI entry, byte-compatible with the
83
- * former `node ./index.ts` invocation through the single saddle bin.
84
- *
85
- * @param format the render format: qemu (default), docker or toml.
86
- */
87
- async function renderplan(format = "qemu") {
88
- try {
89
- let candidate = { ...defaultplan };
90
- try {
91
- const raw = await readFile("vm.config.toml", "utf8");
92
- const vcpus = /vcpus = (\d+)/.exec(raw)?.[1];
93
- const mem = /gib = (\d+)/.exec(raw)?.[1];
94
- const mttg = /virtual_threads = (\d+)/.exec(raw)?.[1];
95
- if (vcpus !== undefined) {
96
- candidate = { ...candidate, vcpus: Number(vcpus) };
97
- }
98
- if (mem !== undefined) {
99
- candidate = { ...candidate, memorygib: Number(mem) };
100
- }
101
- if (mttg !== undefined) {
102
- candidate = { ...candidate, mttgthreads: Number(mttg), mttg: true };
103
- }
104
- }
105
- catch {
106
- /* catcher: vm.config.toml is optional; defaults stay */
107
- }
108
- const grid = creategrid(undefined, candidate.mttgthreads);
109
- const header = `# multiplex ${multiplex(grid).toFixed(1)}x on ${grid.host} host threads\n`;
110
- const body = format === "docker"
111
- ? dockerrun(candidate)
112
- : format === "toml"
113
- ? plantoml(candidate)
114
- : qemucommand(candidate);
115
- process.stdout.write(`${header}${body}\n`);
116
- for (const note of planlint(candidate)) {
117
- process.stderr.write(`# ${note}\n`);
118
- }
119
- }
120
- catch (error) {
121
- process.stderr.write(`planner failed: ${error instanceof Error ? error.message : String(error)}\n`);
122
- }
123
- }
124
- /**
125
- * Validates the effective machine plan (defaults overridden by the optional
126
- * vm.config.toml fields) through planlint and prints only the advisory
127
- * notes — the engine behind the nominal `vm:validate` npm alias: exit code
128
- * stays zero because the notes are advisory, never fatal.
129
- */
130
- async function rendervmlint() {
131
- let candidate = { ...defaultplan };
132
- try {
133
- const raw = await readFile("vm.config.toml", "utf8");
134
- const vcpus = /vcpus = (\d+)/.exec(raw)?.[1];
135
- const mem = /gib = (\d+)/.exec(raw)?.[1];
136
- const mttg = /virtual_threads = (\d+)/.exec(raw)?.[1];
137
- if (vcpus !== undefined)
138
- candidate = { ...candidate, vcpus: Number(vcpus) };
139
- if (mem !== undefined)
140
- candidate = { ...candidate, memorygib: Number(mem) };
141
- if (mttg !== undefined)
142
- candidate = { ...candidate, mttgthreads: Number(mttg), mttg: true };
143
- }
144
- catch {
145
- /* catcher: vm.config.toml is optional; defaults stay */
146
- }
147
- const notes = planlint(candidate);
148
- console.log(`vcpus ${candidate.vcpus} memorygib ${candidate.memorygib} — ${notes.length} note(s)`);
149
- for (const note of notes) {
150
- console.log(`# ${note}`);
151
- }
152
- }
153
- /**
154
- * Lists the GPU catalog of the engine (gpus.json — the catalog the
155
- * orchestrator resolves GPU requests against) — the engine behind the
156
- * nominal `gpu:list` npm alias.
157
- */
158
- async function rendergpus() {
159
- const catalog = JSON.parse(await readFile("gpus.json", "utf8"));
160
- console.log(`${catalog.gpus.length} gpus`);
161
- for (const gpu of catalog.gpus) {
162
- const name = String(gpu.name ?? gpu.model ?? "unknown");
163
- const profiles = Array.isArray(gpu.profiles) ? gpu.profiles.length : 0;
164
- console.log(profiles > 0 ? `${name} (${profiles} mig profiles)` : name);
165
- }
166
- }
167
- if (import.meta.url === `file://${argv[1]}`)
168
- main().catch((error) => { console.error(error); process.exitCode = 1; });
@@ -1,181 +0,0 @@
1
- /**
2
- * communication.ts — API, protocol and webhook communication contracts.
3
- *
4
- * This file is the v2.0.0 grand-merge consolidation of the former nested
5
- * folders of the repository (api) into the single
6
- * root-level domain file of the saddle family standard: one optimized
7
- * TypeScript file per correlated domain, ordinal sections, JSDoc on every
8
- * block, intra-domain imports dissolved, cross-domain imports rewritten to
9
- * ./<domain>.js. Every capability of every source file is preserved here;
10
- * the pure re-export barrels (none in this domain) folded their surface into this file directly.
11
- */
12
- /**
13
- * api authorization delegates token verification to the caller and never stores credentials.
14
- */
15
- /** Authorizes a request through an injected verifier or returns an anonymous principal. */
16
- export declare function authorize(request: any, options?: {}): Promise<{
17
- authenticated: boolean;
18
- subject: string;
19
- tokenpresent: boolean;
20
- claims?: undefined;
21
- } | {
22
- tokenpresent?: undefined;
23
- authenticated: boolean;
24
- subject: string;
25
- claims: any;
26
- }>;
27
- /**
28
- * api contracts keep request identity and success envelopes stable across HTTP and MCP adapters.
29
- */
30
- export declare const apiversion = 1;
31
- /** Extracts a caller supplied request id or creates a local id without exposing secrets. */
32
- export declare function requestcontext(request: any, options?: {}): {
33
- version: number;
34
- requestid: string;
35
- method: any;
36
- path: any;
37
- };
38
- /** Creates a versioned success envelope for APIs that opt into envelopes. */
39
- export declare function successpayload(data: any, context?: {}): {
40
- version: number;
41
- requestid: string;
42
- data: any;
43
- };
44
- /** Creates a versioned error payload with a stable retry hint. */
45
- export declare function errorpayload(code: any, message: any, context?: {}): {
46
- version: number;
47
- requestid: string;
48
- error: {
49
- code: string;
50
- message: string;
51
- retryafter: number;
52
- };
53
- };
54
- /**
55
- * URL security rejects private network targets before a fetch is attempted.
56
- * DNS resolution remains a host adapter concern and is never performed silently.
57
- */
58
- export declare function assertpublicurl(value: any, options?: {}): URL;
59
- /** Checks a resolved address list through a caller supplied DNS resolver to reduce rebinding risk. */
60
- export declare function assertresolvedpublicurl(value: any, options?: {}): Promise<URL>;
61
- /** Validates a redirect chain as public and bounded before a caller follows it. */
62
- export declare function assertredirectchain(values?: any[], options?: {}): string[];
63
- /** Returns a non throwing boolean for validators and middleware. */
64
- export declare function ispublicurl(value: any, options?: {}): boolean;
65
- /**
66
- * token bucket rate limiting supports global user and domain keys.
67
- */
68
- export declare function ratebucket(options?: {}): {
69
- consume: (key: any, cost?: number) => {
70
- allowed: boolean;
71
- retryafter: number;
72
- };
73
- clear(): void;
74
- };
75
- export declare function ratelimiter(options?: {}): {
76
- check(input?: {}): {
77
- allowed: boolean;
78
- retryafter: any;
79
- scope: string | {
80
- consume: (key: any, cost?: number) => {
81
- allowed: boolean;
82
- retryafter: number;
83
- };
84
- clear(): void;
85
- };
86
- } | {
87
- scope?: undefined;
88
- allowed: boolean;
89
- retryafter: number;
90
- };
91
- };
92
- export declare function jsonresponse(data: any, options?: {}): Response;
93
- export declare function errorresponse(code: any, message: any, options?: {}): Response;
94
- export declare function sseresponse(events: any): Response;
95
- /**
96
- * json helpers keep serialization rules explicit at the protocol boundary.
97
- */
98
- export declare function jsonencode(value: any): string;
99
- export declare function jsondecode(value: any): any;
100
- /**
101
- * ndjson supports append only records and incremental parsing.
102
- */
103
- export declare function ndjsonencode(values: any): AsyncGenerator<string, void, unknown>;
104
- export declare function ndjsondecode(input: any): AsyncGenerator<any, void, unknown>;
105
- /**
106
- * sse helpers encode typed events without requiring a web framework.
107
- */
108
- export declare function sseencode(event: any): string;
109
- export declare function ssedecode(chunk: any): {
110
- id: any;
111
- event: any;
112
- data: any;
113
- };
114
- /**
115
- * block streaming yields bounded chunks and lets the consumer control backpressure.
116
- */
117
- export declare function blockstream(input: any, options?: {}): AsyncGenerator<{
118
- index: number;
119
- offset: number;
120
- data: Uint8Array<ArrayBuffer>;
121
- final: boolean;
122
- }, void, unknown>;
123
- /**
124
- * control service exposes operator controls through Web Request and Response without selecting a web framework.
125
- */
126
- /** Creates a framework-neutral HTTP handler for an injected operator control surface. */
127
- export declare function controlservice(options?: {}): {
128
- path: string;
129
- controls: any;
130
- handle: (request: any) => Promise<Response>;
131
- };
132
- /**
133
- * webhook signatures use hmac sha256 and keep secrets outside serialized events.
134
- */
135
- export declare function webhooksig(payload: any, secret: any): string;
136
- export declare function webhookverify(payload: any, signature: any, secret: any): boolean;
137
- /**
138
- * webhook delivery tracks attempts and dead letters without choosing a queue vendor.
139
- */
140
- /** Creates a sequential delivery queue with retryable failure handling. */
141
- export declare function deliveryqueue(options?: {}): {
142
- deliver: (input: {}, handler: any) => Promise<{
143
- id: string;
144
- status: string;
145
- attempts: number;
146
- createdat: number;
147
- event: any;
148
- metadata: any;
149
- }>;
150
- get(id: any): any;
151
- list(): any[];
152
- deadletters(): any[];
153
- };
154
- /**
155
- * webhook receiver validates signatures before dispatch and drops duplicate delivery ids.
156
- */
157
- export declare function webhookreceiver(options?: {}): {
158
- receive(input?: {}): Promise<{
159
- accepted: boolean;
160
- status: number;
161
- reason: string;
162
- duplicate?: undefined;
163
- deliveryid?: undefined;
164
- result?: undefined;
165
- } | {
166
- reason?: undefined;
167
- accepted: boolean;
168
- status: number;
169
- duplicate: boolean;
170
- deliveryid?: undefined;
171
- result?: undefined;
172
- } | {
173
- reason?: undefined;
174
- duplicate?: undefined;
175
- accepted: boolean;
176
- status: number;
177
- deliveryid: any;
178
- result: any;
179
- }>;
180
- deliveries(): unknown[];
181
- };