@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.
- package/Dockerfile +139 -55
- package/README.md +58 -59
- package/browser.ts +482 -0
- package/cli.ts +274 -0
- package/distribution.ts +731 -0
- package/docker.config +29 -8
- package/docs/artifactavailability.md +2 -2
- package/docs/browser.md +18 -1
- package/docs/{containerplatforms.2.1.0.md → containerplatforms210.md} +1 -1
- package/docs/{documentmap.1.8.12.md → documentmap1812.md} +1 -1
- package/docs/extension.md +13 -2
- package/docs/libraryapi.md +1 -1
- package/docs/{ninety.modalities.md → ninetymodalities.md} +87 -4
- package/docs/{planning.ninety.md → planningninety.md} +6 -6
- package/docs/{releasenotes.1.8.13.md → releasenotes1813.md} +2 -2
- package/docs/{releasenotes.1.8.14.md → releasenotes1814.md} +1 -1
- package/docs/{repo.synthesis.1.8.16.md → reposynthesis1816.md} +1 -1
- package/docs/todo.md +2 -2
- package/docs/{todo.1.8.15.md → todo1815.md} +1 -1
- package/docs/{todo.1.8.16.md → todo1816.md} +5 -5
- package/execution.ts +677 -0
- package/foundation.ts +314 -0
- package/index.ts +35 -27
- package/isolation.ts +84 -0
- package/modes.ts +170 -0
- package/mttg.config +1 -1
- package/orchestrator.ts +49 -15
- package/package.json +90 -75
- package/qemu.config +2 -2
- package/sandbox.ts +2094 -0
- package/scheduler.ts +1 -1
- package/server.ts +52 -0
- package/tsconfig.json +11 -12
- package/virtual.ts +1105 -0
- package/virtualgpu.ts +1 -1
- package/virtualization.ts +1 -1
- package/workloadlaw.ts +293 -0
- package/dist/App.d.ts +0 -5
- package/dist/App.js +0 -52
- package/dist/Sol/Sol.d.ts +0 -3
- package/dist/Sol/Sol.js +0 -46
- package/dist/Sol/agentbrowser/agentbrowser.d.ts +0 -9
- package/dist/Sol/agentbrowser/agentbrowser.js +0 -121
- package/dist/Sol/architecture/architecture.d.ts +0 -9
- package/dist/Sol/architecture/architecture.js +0 -93
- package/dist/Sol/compute/compute.d.ts +0 -9
- package/dist/Sol/compute/compute.js +0 -22
- package/dist/Sol/console/console.d.ts +0 -15
- package/dist/Sol/console/console.js +0 -292
- package/dist/Sol/dashboard/dashboard.d.ts +0 -10
- package/dist/Sol/dashboard/dashboard.js +0 -181
- package/dist/Sol/docs/docs.d.ts +0 -9
- package/dist/Sol/docs/docs.js +0 -28
- package/dist/Sol/home/home.d.ts +0 -35
- package/dist/Sol/home/home.js +0 -239
- package/dist/Sol/integrations/integrations.d.ts +0 -9
- package/dist/Sol/integrations/integrations.js +0 -83
- package/dist/Sol/intro/intro.d.ts +0 -7
- package/dist/Sol/intro/intro.js +0 -102
- package/dist/Sol/login/login.d.ts +0 -16
- package/dist/Sol/login/login.js +0 -49
- package/dist/Sol/notfound/notfound.d.ts +0 -9
- package/dist/Sol/notfound/notfound.js +0 -15
- package/dist/Sol/onboarding/onboarding.d.ts +0 -25
- package/dist/Sol/onboarding/onboarding.js +0 -60
- package/dist/Sol/playground/playground.d.ts +0 -9
- package/dist/Sol/playground/playground.js +0 -127
- package/dist/Sol/register/register.d.ts +0 -16
- package/dist/Sol/register/register.js +0 -193
- package/dist/Sol/shell/Shell.d.ts +0 -124
- package/dist/Sol/shell/Shell.js +0 -335
- package/dist/Sol/wingets/ComputeBootladder.d.ts +0 -6
- package/dist/Sol/wingets/ComputeBootladder.js +0 -71
- package/dist/Sol/wingets/ComputeModalitycatalog.d.ts +0 -7
- package/dist/Sol/wingets/ComputeModalitycatalog.js +0 -71
- package/dist/Sol/wingets/ConsoleApibadge.d.ts +0 -7
- package/dist/Sol/wingets/ConsoleApibadge.js +0 -5
- package/dist/Sol/wingets/ConsoleEdgelaw.d.ts +0 -6
- package/dist/Sol/wingets/ConsoleEdgelaw.js +0 -36
- package/dist/Sol/wingets/ConsoleEventstimeline.d.ts +0 -19
- package/dist/Sol/wingets/ConsoleEventstimeline.js +0 -12
- package/dist/Sol/wingets/ConsoleSnapshotcontrols.d.ts +0 -8
- package/dist/Sol/wingets/ConsoleSnapshotcontrols.js +0 -8
- package/dist/Sol/wingets/ConsoleSpecpanel.d.ts +0 -21
- package/dist/Sol/wingets/ConsoleSpecpanel.js +0 -75
- package/dist/Sol/wingets/ConsoleTerminal.d.ts +0 -22
- package/dist/Sol/wingets/ConsoleTerminal.js +0 -77
- package/dist/Sol/wingets/DashboardAccountpanel.d.ts +0 -18
- package/dist/Sol/wingets/DashboardAccountpanel.js +0 -65
- package/dist/Sol/wingets/DashboardAdminpanel.d.ts +0 -6
- package/dist/Sol/wingets/DashboardAdminpanel.js +0 -90
- package/dist/Sol/wingets/DashboardAuditlog.d.ts +0 -8
- package/dist/Sol/wingets/DashboardAuditlog.js +0 -50
- package/dist/Sol/wingets/DashboardCreatesandboxform.d.ts +0 -10
- package/dist/Sol/wingets/DashboardCreatesandboxform.js +0 -71
- package/dist/Sol/wingets/DashboardEventstimeline.d.ts +0 -8
- package/dist/Sol/wingets/DashboardEventstimeline.js +0 -83
- package/dist/Sol/wingets/DashboardGlobalsandboxestable.d.ts +0 -8
- package/dist/Sol/wingets/DashboardGlobalsandboxestable.js +0 -57
- package/dist/Sol/wingets/DashboardMeshnodestable.d.ts +0 -8
- package/dist/Sol/wingets/DashboardMeshnodestable.js +0 -103
- package/dist/Sol/wingets/DashboardSandboxlist.d.ts +0 -10
- package/dist/Sol/wingets/DashboardSandboxlist.js +0 -163
- package/dist/Sol/wingets/DashboardUserstable.d.ts +0 -8
- package/dist/Sol/wingets/DashboardUserstable.js +0 -78
- package/dist/Sol/wingets/HomeEntrygate.d.ts +0 -23
- package/dist/Sol/wingets/HomeEntrygate.js +0 -73
- package/dist/Sol/wingets/HomeMetricstrip.d.ts +0 -9
- package/dist/Sol/wingets/HomeMetricstrip.js +0 -4
- package/dist/Sol/wingets/HomeRuntimediagram.d.ts +0 -1
- package/dist/Sol/wingets/HomeRuntimediagram.js +0 -22
- package/dist/Sol/wingets/LoginForm.d.ts +0 -19
- package/dist/Sol/wingets/LoginForm.js +0 -141
- package/dist/Sol/wingets/RegisterPasswordconfirm.d.ts +0 -13
- package/dist/Sol/wingets/RegisterPasswordconfirm.js +0 -16
- package/dist/Sol/wingets/RegisterPasswordmeter.d.ts +0 -19
- package/dist/Sol/wingets/RegisterPasswordmeter.js +0 -65
- package/dist/Sol/wingets/RegisterUsernamerules.d.ts +0 -11
- package/dist/Sol/wingets/RegisterUsernamerules.js +0 -16
- package/dist/Sol/wingets/index.d.ts +0 -39
- package/dist/Sol/wingets/index.js +0 -39
- package/dist/alternatives.d.ts +0 -508
- package/dist/alternatives.js +0 -950
- package/dist/api.d.ts +0 -154
- package/dist/api.js +0 -174
- package/dist/auth.d.ts +0 -268
- package/dist/auth.js +0 -476
- package/dist/automation.d.ts +0 -425
- package/dist/automation.js +0 -566
- package/dist/browser.d.ts +0 -561
- package/dist/browser.js +0 -1058
- package/dist/capacitor.config.d.ts +0 -45
- package/dist/capacitor.config.js +0 -48
- package/dist/catalog.d.ts +0 -43
- package/dist/catalog.js +0 -44
- package/dist/cli.d.ts +0 -16
- package/dist/cli.js +0 -168
- package/dist/communication.d.ts +0 -181
- package/dist/communication.js +0 -376
- package/dist/compute.d.ts +0 -1160
- package/dist/compute.js +0 -2272
- package/dist/dashboardlib.d.ts +0 -58
- package/dist/dashboardlib.js +0 -161
- package/dist/db.d.ts +0 -569
- package/dist/db.js +0 -1080
- package/dist/distribution.d.ts +0 -528
- package/dist/distribution.js +0 -810
- package/dist/drizzle.config.d.ts +0 -20
- package/dist/drizzle.config.js +0 -18
- package/dist/edgelandes.d.ts +0 -70
- package/dist/edgelandes.host.d.ts +0 -26
- package/dist/edgelandes.host.js +0 -1089
- package/dist/edgelandes.inproc.d.ts +0 -27
- package/dist/edgelandes.inproc.js +0 -952
- package/dist/edgelandes.js +0 -1133
- package/dist/edgelandes.ninety.d.ts +0 -31
- package/dist/edgelandes.ninety.js +0 -174
- package/dist/edgelandes.virtual.d.ts +0 -25
- package/dist/edgelandes.virtual.js +0 -629
- package/dist/edgeplane.d.ts +0 -114
- package/dist/edgeplane.js +0 -305
- package/dist/examplelocaljob.d.ts +0 -1
- package/dist/examplelocaljob.js +0 -14
- package/dist/execution.d.ts +0 -529
- package/dist/execution.js +0 -760
- package/dist/family.d.ts +0 -16
- package/dist/family.js +0 -42
- package/dist/familyurl.d.ts +0 -21
- package/dist/familyurl.js +0 -24
- package/dist/format.d.ts +0 -18
- package/dist/format.js +0 -59
- package/dist/foundation.d.ts +0 -172
- package/dist/foundation.js +0 -312
- package/dist/index.d.ts +0 -735
- package/dist/index.js +0 -1020
- package/dist/integration.d.ts +0 -235
- package/dist/integration.js +0 -228
- package/dist/intelligence.d.ts +0 -93
- package/dist/intelligence.js +0 -144
- package/dist/isolation.d.ts +0 -128
- package/dist/isolation.js +0 -95
- package/dist/labels.d.ts +0 -665
- package/dist/labels.js +0 -751
- package/dist/localauth.d.ts +0 -127
- package/dist/localauth.js +0 -413
- package/dist/media.d.ts +0 -343
- package/dist/media.js +0 -985
- package/dist/mesh.d.ts +0 -177
- package/dist/mesh.js +0 -468
- package/dist/modalityregistry.d.ts +0 -109
- package/dist/modalityregistry.js +0 -1386
- package/dist/modes.d.ts +0 -358
- package/dist/modes.js +0 -133
- package/dist/onboardingstate.d.ts +0 -79
- package/dist/onboardingstate.js +0 -282
- package/dist/orchestrator.d.ts +0 -1338
- package/dist/orchestrator.js +0 -4310
- package/dist/packager/targetcli.js +0 -4
- package/dist/paths.d.ts +0 -2
- package/dist/paths.js +0 -14
- package/dist/performance.d.ts +0 -415
- package/dist/performance.js +0 -826
- package/dist/quantum.d.ts +0 -809
- package/dist/quantum.js +0 -2072
- package/dist/render.d.ts +0 -380
- package/dist/render.js +0 -1072
- package/dist/runall.d.ts +0 -2
- package/dist/runall.js +0 -39
- package/dist/runtimeprobe.d.ts +0 -4
- package/dist/runtimeprobe.js +0 -8
- package/dist/sandbox.d.ts +0 -355
- package/dist/sandbox.js +0 -1721
- package/dist/sandboxenvprofile.d.ts +0 -29
- package/dist/sandboxenvprofile.js +0 -89
- package/dist/sandboxprofile.d.ts +0 -137
- package/dist/sandboxprofile.js +0 -241
- package/dist/sandboxqueue.d.ts +0 -108
- package/dist/sandboxqueue.js +0 -201
- package/dist/sandboxquota.d.ts +0 -121
- package/dist/sandboxquota.js +0 -236
- package/dist/scheduler.d.ts +0 -595
- package/dist/scheduler.js +0 -1258
- package/dist/scriptlanes.d.ts +0 -182
- package/dist/scriptlanes.js +0 -660
- package/dist/scripts.buildengine.d.ts +0 -1
- package/dist/scripts.buildengine.js +0 -39
- package/dist/scripts.securitygate.d.ts +0 -1
- package/dist/scripts.securitygate.js +0 -68
- package/dist/scripts.validateflatnative.d.ts +0 -1
- package/dist/scripts.validateflatnative.js +0 -72
- package/dist/security.d.ts +0 -500
- package/dist/security.js +0 -1169
- package/dist/seedcatalog.d.ts +0 -13
- package/dist/seedcatalog.js +0 -46
- package/dist/server.d.ts +0 -20
- package/dist/server.js +0 -53
- package/dist/speccatalog.d.ts +0 -31
- package/dist/speccatalog.js +0 -163
- package/dist/tiers.d.ts +0 -1001
- package/dist/tiers.js +0 -2169
- package/dist/utils.d.ts +0 -2
- package/dist/utils.js +0 -5
- package/dist/vaulthandoff.d.ts +0 -141
- package/dist/vaulthandoff.js +0 -444
- package/dist/virtual.d.ts +0 -640
- package/dist/virtual.js +0 -1284
- package/dist/virtualcpu.d.ts +0 -315
- package/dist/virtualcpu.js +0 -1180
- package/dist/virtualgpu.d.ts +0 -344
- package/dist/virtualgpu.js +0 -1000
- package/dist/virtualization.d.ts +0 -606
- package/dist/virtualization.js +0 -1186
- package/dist/virtualmemory.d.ts +0 -817
- package/dist/virtualmemory.js +0 -1795
- package/dist/vite.config.d.ts +0 -3
- package/dist/vite.config.js +0 -43
- package/dist/vitest.config.d.ts +0 -2
- package/dist/vitest.config.js +0 -25
- package/dist/webserver.d.ts +0 -166
- package/dist/webserver.js +0 -2226
- package/dist/workloadlaw.d.ts +0 -133
- package/dist/workloadlaw.js +0 -193
- package/manifest.json +0 -20
- package/media.ts +0 -1337
- /package/docs/{architecture.1.8.19.md → architecture1819.md} +0 -0
- /package/docs/{architecture.1.8.19.mmd → architecture1819.mmd} +0 -0
- /package/docs/{artifactresearch.1.8.9.md → artifactresearch189.md} +0 -0
- /package/docs/{batches.1816.to.1820.md → batches1816to1820.md} +0 -0
- /package/docs/{brancharchive.2026.08.18.md → brancharchive20260818.md} +0 -0
- /package/docs/{containerplatforms.1.8.17.md → containerplatforms1817.md} +0 -0
- /package/docs/{e2ugh.engine.md → e2ughengine.md} +0 -0
- /package/docs/{flatbuildresearch.1.8.11.md → flatbuildresearch1811.md} +0 -0
- /package/docs/{licenseaudit.1.8.12.md → licenseaudit1812.md} +0 -0
- /package/docs/{mobileconversionresearch.1.8.10.md → mobileconversionresearch1810.md} +0 -0
- /package/docs/{nativeidentityresearch.1.8.11.md → nativeidentityresearch1811.md} +0 -0
- /package/docs/{native.wrappers.md → nativewrappers.md} +0 -0
- /package/docs/{planning.1.8.18.md → planning1818.md} +0 -0
- /package/docs/{planning.1.8.19.md → planning1819.md} +0 -0
- /package/docs/{planning.engine.md → planningengine.md} +0 -0
- /package/docs/{releasenotes.1.8.12.md → releasenotes1812.md} +0 -0
- /package/docs/{releasenotes.1.8.15.md → releasenotes1815.md} +0 -0
- /package/docs/{releasenotes.1.8.16.md → releasenotes1816.md} +0 -0
- /package/docs/{releasenotes.1.8.17.md → releasenotes1817.md} +0 -0
- /package/docs/{releasenotes.1.8.18.md → releasenotes1818.md} +0 -0
- /package/docs/{releasenotes.1.8.19.md → releasenotes1819.md} +0 -0
- /package/docs/{reorganization.1.8.8.md → reorganization188.md} +0 -0
- /package/docs/{reorganization.1.8.9.md → reorganization189.md} +0 -0
- /package/docs/{repo.analysis.1.8.21.json → repoanalysis1821.json} +0 -0
- /package/docs/{repo.candidates.1.8.21.jsonl → repocandidates1821.jsonl} +0 -0
- /package/docs/{repo.research.1.8.16.md → reporesearch1816.md} +0 -0
- /package/docs/{repo.research.1.8.21.md → reporesearch1821.md} +0 -0
- /package/docs/{repo.selected.1.8.21.json → reposelected1821.json} +0 -0
- /package/docs/{repo.synthesis.1.8.21.md → reposynthesis1821.md} +0 -0
- /package/docs/{research.1.8.18.isolation.md → research1818isolation.md} +0 -0
- /package/docs/{research.1.8.19.virtual.browser.md → research1819virtualbrowser.md} +0 -0
- /package/docs/{scanningresearch.1.8.11.md → scanningresearch1811.md} +0 -0
- /package/docs/{securityaudit.1.8.7.md → securityaudit187.md} +0 -0
- /package/docs/{securityreferences.1.8.11.md → securityreferences1811.md} +0 -0
- /package/docs/{securityresearch.1.8.11.md → securityresearch1811.md} +0 -0
- /package/docs/{signingresearch.1.8.12.md → signingresearch1812.md} +0 -0
- /package/docs/{tauri.glib.risk.1.8.11.md → tauriglibrisk1811.md} +0 -0
- /package/docs/{todo.1.8.18.md → todo1818.md} +0 -0
- /package/docs/{todo.1.8.19.md → todo1819.md} +0 -0
- /package/docs/{toolchainresearch.1.8.9.md → toolchainresearch189.md} +0 -0
- /package/docs/{web.duplicatecleanup.md → webduplicatecleanup.md} +0 -0
- /package/docs/{web.ideas.md → webideas.md} +0 -0
- /package/docs/{workflowimprovements.2026.08.19.md → workflowimprovements20260819.md} +0 -0
package/dist/seedcatalog.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/** Style: Saddle catalog seeds — the reviewed offline answer of the catalog
|
|
2
|
-
* until the database endpoint is paired. The rows describe the prepared media
|
|
3
|
-
* areas the pages render: no image file ships in the repository, the picture
|
|
4
|
-
* content arrives from the database over HTTPS. The agent session seed
|
|
5
|
-
* mirrors the documented example log of docs/logs/examplesession.json
|
|
6
|
-
* verbatim, so the agent browser page renders the repository's own example
|
|
7
|
-
* instead of inventing one. */
|
|
8
|
-
import type { AgentSession, MediaSlot } from "./catalog";
|
|
9
|
-
export declare const seedMediaSlots: MediaSlot[];
|
|
10
|
-
/** the reviewed agent session seed: the documented example session of
|
|
11
|
-
* docs/logs/examplesession.json (id, browser, seed, events and the captcha
|
|
12
|
-
* verdict), mirrored verbatim — the offline answer of the sessions catalog. */
|
|
13
|
-
export declare const seedAgentSessions: AgentSession[];
|
package/dist/seedcatalog.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
export const seedMediaSlots = [
|
|
2
|
-
{
|
|
3
|
-
id: "media.home.hero",
|
|
4
|
-
label: "memory bridge",
|
|
5
|
-
ratio: "16 / 10",
|
|
6
|
-
caption: "Abstract bridge of storage tiles and remote compute nodes.",
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
id: "media.runtime.map",
|
|
10
|
-
label: "remote runtime map",
|
|
11
|
-
ratio: "4 / 3",
|
|
12
|
-
caption: "Illustrated map of repositories connected to remote runners.",
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
id: "media.agentbrowser.trace",
|
|
16
|
-
label: "browser trace",
|
|
17
|
-
ratio: "3 / 2",
|
|
18
|
-
caption: "Cursor trace and evidence from a browser session.",
|
|
19
|
-
},
|
|
20
|
-
];
|
|
21
|
-
/** the reviewed agent session seed: the documented example session of
|
|
22
|
-
* docs/logs/examplesession.json (id, browser, seed, events and the captcha
|
|
23
|
-
* verdict), mirrored verbatim — the offline answer of the sessions catalog. */
|
|
24
|
-
export const seedAgentSessions = [
|
|
25
|
-
{
|
|
26
|
-
version: 1,
|
|
27
|
-
session: {
|
|
28
|
-
id: "examplesession-0001",
|
|
29
|
-
browser: "brave",
|
|
30
|
-
seed: "examplesession-seed-0001",
|
|
31
|
-
},
|
|
32
|
-
events: [
|
|
33
|
-
{ t: 140, type: "move", x: 120, y: 90 },
|
|
34
|
-
{ t: 300, type: "move", x: 180, y: 140 },
|
|
35
|
-
{ t: 480, type: "click", x: 180, y: 140 },
|
|
36
|
-
{ t: 680, type: "type", key: "k" },
|
|
37
|
-
{ t: 900, type: "move", x: 240, y: 200 },
|
|
38
|
-
{ t: 1140, type: "click", x: 240, y: 200 },
|
|
39
|
-
{ t: 1400, type: "scroll", dy: 320 },
|
|
40
|
-
],
|
|
41
|
-
captcha: {
|
|
42
|
-
kind: "hcaptcha",
|
|
43
|
-
passed: true,
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
];
|
package/dist/server.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* server.ts — the Node HTTP server surface.
|
|
3
|
-
*
|
|
4
|
-
* This file is the v2.0.0 grand-merge consolidation of the former nested
|
|
5
|
-
* folders of the repository (server) 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
|
-
* node server is an optional adapter around the universal service contract.
|
|
14
|
-
*/
|
|
15
|
-
/** Creates a Node HTTP adapter with explicit host, port, and request handler. */
|
|
16
|
-
export declare function nodeserver(options?: {}): {
|
|
17
|
-
server: import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>;
|
|
18
|
-
listen(): Promise<unknown>;
|
|
19
|
-
close(): Promise<unknown>;
|
|
20
|
-
};
|
package/dist/server.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* server.ts — the Node HTTP server surface.
|
|
3
|
-
*
|
|
4
|
-
* This file is the v2.0.0 grand-merge consolidation of the former nested
|
|
5
|
-
* folders of the repository (server) 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
|
-
import { createServer } from "node:http";
|
|
13
|
-
/* ════════════════════════════════════════════════════════════════════ */
|
|
14
|
-
/* Section 1: server/node.ts — node server is an optional adapter around the universal service contract. */
|
|
15
|
-
/* ════════════════════════════════════════════════════════════════════ */
|
|
16
|
-
/**
|
|
17
|
-
* node server is an optional adapter around the universal service contract.
|
|
18
|
-
*/
|
|
19
|
-
/** Creates a Node HTTP adapter with explicit host, port, and request handler. */
|
|
20
|
-
export function nodeserver(options = {}) {
|
|
21
|
-
if (!options.host || !Number.isInteger(options.port) || options.port < 1)
|
|
22
|
-
throw new TypeError("node server requires host and port");
|
|
23
|
-
if (typeof options.handle !== "function")
|
|
24
|
-
throw new TypeError("node server requires handle");
|
|
25
|
-
/* Request translation stays inside the Node adapter. */
|
|
26
|
-
const server = createServer(async (request, response) => {
|
|
27
|
-
try {
|
|
28
|
-
const chunks = [];
|
|
29
|
-
for await (const chunk of request)
|
|
30
|
-
chunks.push(chunk);
|
|
31
|
-
const body = Buffer.concat(chunks).toString("utf8");
|
|
32
|
-
const headers = new Headers(request.headers);
|
|
33
|
-
const webrequest = new Request(new URL(request.url ?? "/", `http://${options.host}:${options.port}`), { method: request.method, headers, body: body || undefined });
|
|
34
|
-
const result = await options.handle(webrequest);
|
|
35
|
-
response.statusCode = result.status;
|
|
36
|
-
result.headers.forEach((value, key) => {
|
|
37
|
-
response.setHeader(key, value);
|
|
38
|
-
});
|
|
39
|
-
response.end(Buffer.from(await result.arrayBuffer()));
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
response.statusCode = 500;
|
|
43
|
-
response.setHeader("content-type", "application/json");
|
|
44
|
-
response.end(JSON.stringify({ error: error.message }));
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
/* Lifecycle methods keep the server optional for library consumers. */
|
|
48
|
-
return {
|
|
49
|
-
server,
|
|
50
|
-
listen() { return new Promise((resolve, reject) => { server.once("error", reject); server.listen(options.port, options.host, () => resolve({ host: options.host, port: options.port })); }); },
|
|
51
|
-
close() { return new Promise((resolve, reject) => server.close((error) => error ? reject(error) : resolve())); }
|
|
52
|
-
};
|
|
53
|
-
}
|
package/dist/speccatalog.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/** one normalized catalog row: the payload cell keeps the full source
|
|
2
|
-
* row as json text so no field of the datasets is lost. */
|
|
3
|
-
export type SpecRow = {
|
|
4
|
-
id: string;
|
|
5
|
-
name: string;
|
|
6
|
-
payload: string;
|
|
7
|
-
};
|
|
8
|
-
/**
|
|
9
|
-
* lists the boards dataset.
|
|
10
|
-
*
|
|
11
|
-
* @returns the board rows.
|
|
12
|
-
*/
|
|
13
|
-
export declare function listboards(): SpecRow[];
|
|
14
|
-
/**
|
|
15
|
-
* lists the cores dataset.
|
|
16
|
-
*
|
|
17
|
-
* @returns the core rows.
|
|
18
|
-
*/
|
|
19
|
-
export declare function listcores(): SpecRow[];
|
|
20
|
-
/**
|
|
21
|
-
* lists the gpus dataset.
|
|
22
|
-
*
|
|
23
|
-
* @returns the gpu rows.
|
|
24
|
-
*/
|
|
25
|
-
export declare function listgpus(): SpecRow[];
|
|
26
|
-
/**
|
|
27
|
-
* lists the processors dataset.
|
|
28
|
-
*
|
|
29
|
-
* @returns the processor rows.
|
|
30
|
-
*/
|
|
31
|
-
export declare function listprocessors(): SpecRow[];
|
package/dist/speccatalog.js
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* speccatalog.ts — the spec catalog layer of the saddle database (root
|
|
3
|
-
* layer, library-grade: no consumer data hardcoded here).
|
|
4
|
-
*
|
|
5
|
-
* mirrors the repository datasets (boards.json, cores.json, gpus.json,
|
|
6
|
-
* processors.json) into the site DB on first run and serves typed list
|
|
7
|
-
* accessors over prepared statements. every statement is parameterized —
|
|
8
|
-
* sql is never assembled by string concatenation. the database file is
|
|
9
|
-
* the same one db.ts boots (SADDLE_DB environment, never a hardcoded
|
|
10
|
-
* location), so the engine, the self-hosted api and the theme answer
|
|
11
|
-
* from one source of truth. the json files stay the seed source of
|
|
12
|
-
* record; nothing inside the engine modules duplicates them.
|
|
13
|
-
*/
|
|
14
|
-
import { createHash } from 'node:crypto';
|
|
15
|
-
import { readFileSync } from 'node:fs';
|
|
16
|
-
import { join, dirname } from 'node:path';
|
|
17
|
-
import { fileURLToPath } from 'node:url';
|
|
18
|
-
import { DatabaseSync } from 'node:sqlite';
|
|
19
|
-
import { dbpath } from './db.ts';
|
|
20
|
-
/** the directory holding this module: the repository root with the
|
|
21
|
-
* datasets beside the engine sources. */
|
|
22
|
-
const moduledir = dirname(fileURLToPath(import.meta.url));
|
|
23
|
-
/** the datasets the catalog mirrors, with the array key of each file. */
|
|
24
|
-
const datasets = [
|
|
25
|
-
{ dataset: 'boards', file: 'boards.json', key: 'boards' },
|
|
26
|
-
{ dataset: 'cores', file: 'cores.json', key: 'models' },
|
|
27
|
-
{ dataset: 'gpus', file: 'gpus.json', key: 'gpus' },
|
|
28
|
-
{ dataset: 'processors', file: 'processors.json', key: 'processors' },
|
|
29
|
-
];
|
|
30
|
-
/** the catalog schema: static strings only, safe on every boot. */
|
|
31
|
-
const ddl = `
|
|
32
|
-
create table if not exists specboards (
|
|
33
|
-
id text primary key,
|
|
34
|
-
name text not null,
|
|
35
|
-
payload text not null
|
|
36
|
-
);
|
|
37
|
-
create table if not exists speccores (
|
|
38
|
-
id text primary key,
|
|
39
|
-
name text not null,
|
|
40
|
-
payload text not null
|
|
41
|
-
);
|
|
42
|
-
create table if not exists specgpus (
|
|
43
|
-
id text primary key,
|
|
44
|
-
name text not null,
|
|
45
|
-
payload text not null
|
|
46
|
-
);
|
|
47
|
-
create table if not exists specprocessors (
|
|
48
|
-
id text primary key,
|
|
49
|
-
name text not null,
|
|
50
|
-
payload text not null
|
|
51
|
-
);
|
|
52
|
-
`;
|
|
53
|
-
/** the statements, all prepared once (bound parameters only). */
|
|
54
|
-
const statements = {};
|
|
55
|
-
/** the catalog connection: the same file the engine db.ts boots. */
|
|
56
|
-
let database = null;
|
|
57
|
-
/** true once the mirror pass has run for this process. */
|
|
58
|
-
let mirrored = false;
|
|
59
|
-
/**
|
|
60
|
-
* derives the stable row id: sha-256 of the exact source row, so the
|
|
61
|
-
* mirror stays idempotent across runs (insert or replace).
|
|
62
|
-
*
|
|
63
|
-
* @param dataset the dataset namespace.
|
|
64
|
-
* @param row the raw source row.
|
|
65
|
-
* @returns the hex digest id.
|
|
66
|
-
*/
|
|
67
|
-
function rowid(dataset, row) {
|
|
68
|
-
return createHash('sha256').update(`${dataset}:${JSON.stringify(row)}`).digest('hex').slice(0, 40);
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* extracts the display name of a row from the usual field candidates.
|
|
72
|
-
*
|
|
73
|
-
* @param row the raw source row.
|
|
74
|
-
* @returns the best name field found.
|
|
75
|
-
*/
|
|
76
|
-
function rowname(row) {
|
|
77
|
-
const candidates = ['name', 'model', 'model_name', 'board', 'title', 'id'];
|
|
78
|
-
for (const key of candidates) {
|
|
79
|
-
const value = row[key];
|
|
80
|
-
if (typeof value === 'string' && value.trim() !== '')
|
|
81
|
-
return value;
|
|
82
|
-
}
|
|
83
|
-
return '(unnamed)';
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* opens the catalog connection, creates the schema and mirrors the
|
|
87
|
-
* datasets on first run. errors stay contained: a catalog failure never
|
|
88
|
-
* breaks the engine boot.
|
|
89
|
-
*/
|
|
90
|
-
function ensurecatalog() {
|
|
91
|
-
if (mirrored)
|
|
92
|
-
return;
|
|
93
|
-
database = new DatabaseSync(dbpath);
|
|
94
|
-
database.exec(ddl);
|
|
95
|
-
for (const spec of datasets) {
|
|
96
|
-
statements[spec.dataset] = {
|
|
97
|
-
insert: database.prepare(`insert or replace into spec${spec.dataset} (id, name, payload) values (?, ?, ?)`),
|
|
98
|
-
select: database.prepare(`select id, name, payload from spec${spec.dataset} order by name`),
|
|
99
|
-
};
|
|
100
|
-
try {
|
|
101
|
-
const document = JSON.parse(readFileSync(join(moduledir, spec.file), 'utf8'));
|
|
102
|
-
const rows = document[spec.key];
|
|
103
|
-
if (!Array.isArray(rows))
|
|
104
|
-
continue;
|
|
105
|
-
for (const row of rows) {
|
|
106
|
-
if (row === null || typeof row !== 'object')
|
|
107
|
-
continue;
|
|
108
|
-
const record = row;
|
|
109
|
-
statements[spec.dataset].insert.run(rowid(spec.dataset, row), rowname(record), JSON.stringify(record));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
catch {
|
|
113
|
-
/* an unreadable dataset leaves the catalog table as-is; the json
|
|
114
|
-
* file stays the source of record for the next boot */
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
mirrored = true;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* lists the rows of one dataset through the prepared statement.
|
|
121
|
-
*
|
|
122
|
-
* @param dataset the dataset to read.
|
|
123
|
-
* @returns the catalog rows.
|
|
124
|
-
*/
|
|
125
|
-
function listdataset(dataset) {
|
|
126
|
-
ensurecatalog();
|
|
127
|
-
const statement = statements[dataset]?.select;
|
|
128
|
-
if (!statement)
|
|
129
|
-
return [];
|
|
130
|
-
return statement.all();
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* lists the boards dataset.
|
|
134
|
-
*
|
|
135
|
-
* @returns the board rows.
|
|
136
|
-
*/
|
|
137
|
-
export function listboards() {
|
|
138
|
-
return listdataset('boards');
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* lists the cores dataset.
|
|
142
|
-
*
|
|
143
|
-
* @returns the core rows.
|
|
144
|
-
*/
|
|
145
|
-
export function listcores() {
|
|
146
|
-
return listdataset('cores');
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* lists the gpus dataset.
|
|
150
|
-
*
|
|
151
|
-
* @returns the gpu rows.
|
|
152
|
-
*/
|
|
153
|
-
export function listgpus() {
|
|
154
|
-
return listdataset('gpus');
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* lists the processors dataset.
|
|
158
|
-
*
|
|
159
|
-
* @returns the processor rows.
|
|
160
|
-
*/
|
|
161
|
-
export function listprocessors() {
|
|
162
|
-
return listdataset('processors');
|
|
163
|
-
}
|