@wenathlan/saddle 2.0.161 → 2.0.163
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 +189 -43
- package/README.md +1 -1
- package/biome.jsonc +0 -0
- package/distribution.ts +16 -3
- package/docs/acceptableusepolicy.md +9 -0
- package/docs/authors.md +16 -0
- package/docs/bugreport.md +16 -0
- package/docs/cla.md +9 -0
- package/docs/codeofconduct.md +9 -0
- package/docs/contributing.md +9 -0
- package/docs/copyright.md +7 -0
- package/docs/disclaimer.md +7 -0
- package/docs/eula.md +7 -0
- package/docs/exportcontrol.md +17 -0
- package/docs/features.md +0 -0
- package/docs/governance.md +9 -0
- package/docs/ninetymodalities.md +0 -0
- package/docs/notice.md +7 -0
- package/docs/planningengine.md +0 -0
- package/docs/planningninety.md +0 -0
- package/docs/privacypolicy.md +9 -0
- package/docs/pullrequesttemplate.md +13 -0
- package/docs/support.md +7 -0
- package/docs/termsandconditions.md +9 -0
- package/docs/termsofuse.md +9 -0
- package/docs/thirdpartynotices.md +19 -0
- package/docs/trademarkpolicy.md +7 -0
- package/docs/workloadlaw.md +0 -0
- package/modalityregistry.ts +190 -1383
- package/package.json +78 -78
- package/sandbox.ts +18 -12
- package/tsconfig.json +6 -6
- package/workloadlaw.ts +0 -0
package/Dockerfile
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# saddle 2.0.
|
|
1
|
+
# saddle 2.0.162 — THE ENGINE CONTAINER FILE
|
|
2
2
|
#
|
|
3
3
|
# THE FAMILY CONTAINER DOCTRINE, THE SADDLE SHAPE: one versioned container
|
|
4
4
|
# per engine, built like the site homes (argan, cadria) build theirs — a
|
|
@@ -16,14 +16,18 @@
|
|
|
16
16
|
# THE THREE VARIANT PROFILES (the saddle-exclusive law: the only app of
|
|
17
17
|
# the family that ships three) — select with the target flag:
|
|
18
18
|
#
|
|
19
|
-
# docker build --target max -t saddle:2.0.
|
|
20
|
-
# docker build --target balanced -t saddle:2.0.
|
|
21
|
-
# docker build --target lite -t saddle:2.0.
|
|
19
|
+
# docker build --target max -t saddle:2.0.162 .
|
|
20
|
+
# docker build --target balanced -t saddle:2.0.162-balanced .
|
|
21
|
+
# docker build --target lite -t saddle:2.0.162-lite .
|
|
22
22
|
#
|
|
23
23
|
# max — the full profile catalog: the epyc 9965 class, 192 vcpu,
|
|
24
24
|
# 384 threads, 1024 gib ram plan, the b200 gpu plan x8.
|
|
25
25
|
# balanced — the threadripper pro 9995wx class, 96 vcpu, 192 threads,
|
|
26
|
-
# 512 gib ram plan, the b200 gpu plan x2.
|
|
26
|
+
# 512 gib ram plan, the b200 gpu plan x2. THE DEFAULT
|
|
27
|
+
# TARGET: the plain `docker build -f saddle/Dockerfile .`
|
|
28
|
+
# with no --target answers the balanced stage (the last
|
|
29
|
+
# stage of the file) — the SADDLE_PROFILE lane's documented
|
|
30
|
+
# default — and the publish legs always name their target.
|
|
27
31
|
# lite — the ryzen 9950x3d class, 16 vcpu, 32 threads, 128 gib
|
|
28
32
|
# ram plan, the rtx 5090 gpu plan x1.
|
|
29
33
|
#
|
|
@@ -31,22 +35,55 @@
|
|
|
31
35
|
# assert), the catalog constants stay the publish matrix's single source,
|
|
32
36
|
# and every profile ships the same engine graph — the same ninety
|
|
33
37
|
# modalities, the same console, the same health surface; only the declared
|
|
34
|
-
# hardware plan differs.
|
|
38
|
+
# hardware plan differs. Each variant stage re-declares the six plan
|
|
39
|
+
# build-args with its own honest defaults and re-stamps the plan ENV, so a
|
|
40
|
+
# local `--target` leg answers its real hardware plan with no args passed
|
|
41
|
+
# (the publish legs pass the matrix constants per leg and override the
|
|
42
|
+
# defaults — one lane, two honest entries).
|
|
35
43
|
#
|
|
36
|
-
# THE ELEVEN-
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
#
|
|
40
|
-
#
|
|
41
|
-
#
|
|
42
|
-
#
|
|
43
|
-
# (
|
|
44
|
-
#
|
|
45
|
-
#
|
|
46
|
-
#
|
|
47
|
-
#
|
|
48
|
-
#
|
|
49
|
-
#
|
|
44
|
+
# THE ELEVEN-DEVICE BANK the profiles declare against (the exotic law's
|
|
45
|
+
# hardware vocabulary): the quickCatalog of saddle/virtualhardware.json
|
|
46
|
+
# carries exactly eleven virtual devices — seven cpu classes (epyc 9965,
|
|
47
|
+
# epyc 9755, threadripper 7995wx, ryzen 9950x3d, ryzen 9950x3d2, ryzen
|
|
48
|
+
# 9800x3d, xeon 6980p) and four gpu classes (rtx 5090, rtx pro 6000,
|
|
49
|
+
# b200, h100) — and the three profiles stamp their plan (the cpu class,
|
|
50
|
+
# the vcpu/thread counts, the ram plan, the gpu class and count) from
|
|
51
|
+
# that bank; every device stays virtual (the engine presents it, the
|
|
52
|
+
# visitor machine never lends its own).
|
|
53
|
+
#
|
|
54
|
+
# THE GUEST OS LANE the sandbox modalities answer (the owner's nickname
|
|
55
|
+
# law, saddle/docs/ninetymodalities.md): the spec vocabulary boots linux
|
|
56
|
+
# plus the nickname builds — marsh (marshmallow) resolves android,
|
|
57
|
+
# grapenios and grafene os resolve grapheneos, omashi resolves omarchy —
|
|
58
|
+
# and the owner's "v" names no guest os: it answers the languagev
|
|
59
|
+
# compiler seat of the ninety modalities. The container lane itself rides
|
|
60
|
+
# linux (the eleven-architecture standard below); the guest os vocabulary
|
|
61
|
+
# is the sandbox spec surface the console answers, never a host
|
|
62
|
+
# distribution this container installs.
|
|
63
|
+
#
|
|
64
|
+
# THE ELEVEN-ARCHITECTURE PLATFORM STANDARD (the pr15 law): every
|
|
65
|
+
# profile answers the eleven architecture seats the container standard
|
|
66
|
+
# names — the CONTAINERARCHIDS of saddle/containerarch.ts (linux-x64,
|
|
67
|
+
# darwin-arm64, windows-x64, linux-arm64, darwin-x64, windows-arm64,
|
|
68
|
+
# linux-x64-musl, linux-riscv64, wasm32, darwin-arm64-v8,
|
|
69
|
+
# windows-x64-gnu). The build legs follow the container-carried seats
|
|
70
|
+
# the pinned node base honestly answers: the amd64 leg serves linux-x64
|
|
71
|
+
# and linux-x64-musl, the arm64 leg serves linux-arm64, and the arm64/v8
|
|
72
|
+
# leg serves the darwin-arm64-v8 abi seat (the arm64 legs ride qemu
|
|
73
|
+
# emulation in the publish workflow). The linux-riscv64 seat the
|
|
74
|
+
# containerarch standard carries on the bash:5 driver base answers the
|
|
75
|
+
# honest coded absence on this node engine base (the pinned base ships
|
|
76
|
+
# no riscv64 manifest), and the six target seats (the darwin and
|
|
77
|
+
# windows seats and wasm32) answer the standard's honest coded absence
|
|
78
|
+
# (ARCH_TARGET_NOT_CONTAINER), never a pretended build leg — the same
|
|
79
|
+
# honesty law the containerarch table keeps for its own pinned base: a
|
|
80
|
+
# leg never claims a manifest the base does not carry. The base stage
|
|
81
|
+
# declares the TARGETPLATFORM/TARGETARCH automatic build-args (the
|
|
82
|
+
# devthink container's standard arch interface) and stamps the honesty
|
|
83
|
+
# law into the build log with its arch guard: a leg the base carries
|
|
84
|
+
# answers its leg line, a legacy builder without a platform axis answers
|
|
85
|
+
# its documented note, and anything else answers the coded refusal
|
|
86
|
+
# before a heavy step runs.
|
|
50
87
|
#
|
|
51
88
|
# THE CONTEXT LAW (the family context fix): this file COPYs from two
|
|
52
89
|
# trees (saddle/ and the engine-ownership sibling vault/), so every build
|
|
@@ -81,7 +118,7 @@ ARG NODE_BASE_DIGEST
|
|
|
81
118
|
# ===== stage: solbuild — the locked npm tree and the console spa =====
|
|
82
119
|
FROM --platform=$BUILDPLATFORM ${NODE_BASE_TAG}@sha256:${NODE_BASE_DIGEST} AS solbuild
|
|
83
120
|
|
|
84
|
-
ARG SADDLE_VERSION=2.0.
|
|
121
|
+
ARG SADDLE_VERSION=2.0.162
|
|
85
122
|
|
|
86
123
|
WORKDIR /app
|
|
87
124
|
|
|
@@ -109,7 +146,17 @@ RUN npm run web:build:pages \
|
|
|
109
146
|
# ===== stage: base — the hardened runtime floor every profile shares =====
|
|
110
147
|
FROM ${NODE_BASE_TAG}@sha256:${NODE_BASE_DIGEST} AS base
|
|
111
148
|
|
|
112
|
-
ARG SADDLE_VERSION=2.0.
|
|
149
|
+
ARG SADDLE_VERSION=2.0.162
|
|
150
|
+
# the revision stamp the devthink container carries (DEVTHINK_REVISION
|
|
151
|
+
# there): the publish legs pass the release sha at build time and the
|
|
152
|
+
# revision label below declares the default-unknown local shape.
|
|
153
|
+
ARG SADDLE_REVISION=unknown
|
|
154
|
+
# the automatic platform args (the devthink standard arch interface):
|
|
155
|
+
# the multi-arch node base resolves each leg's platform itself, and the
|
|
156
|
+
# arch guard below reads TARGETARCH to stamp the eleven-architecture
|
|
157
|
+
# law into the build log of every leg.
|
|
158
|
+
ARG TARGETPLATFORM
|
|
159
|
+
ARG TARGETARCH
|
|
113
160
|
ARG SADDLE_PROFILE=max
|
|
114
161
|
ARG VHE_PROFILE_CPU="epyc9965"
|
|
115
162
|
ARG VHE_PROFILE_VCPUS="192"
|
|
@@ -123,7 +170,8 @@ LABEL org.opencontainers.image.title="saddle" \
|
|
|
123
170
|
org.opencontainers.image.version="${SADDLE_VERSION}" \
|
|
124
171
|
org.opencontainers.image.licenses="GPL-3.0-only" \
|
|
125
172
|
org.opencontainers.image.source="https://github.com/wenathlan/devthink" \
|
|
126
|
-
org.opencontainers.image.documentation="https://github.com/wenathlan/devthink/tree/main/saddle"
|
|
173
|
+
org.opencontainers.image.documentation="https://github.com/wenathlan/devthink/tree/main/saddle" \
|
|
174
|
+
org.opencontainers.image.revision="${SADDLE_REVISION}"
|
|
127
175
|
|
|
128
176
|
WORKDIR /app
|
|
129
177
|
|
|
@@ -144,6 +192,26 @@ ENV NODE_ENV=production \
|
|
|
144
192
|
SADDLE_PROFILE_GPU=${VHE_PROFILE_GPU} \
|
|
145
193
|
SADDLE_PROFILE_GPUS=${VHE_PROFILE_GPUS}
|
|
146
194
|
|
|
195
|
+
# the arch-leg guard of the eleven-architecture standard: the pinned
|
|
196
|
+
# node base resolves the platform of every leg buildx names, and this
|
|
197
|
+
# echo layer stamps the honesty law into the build log — the two arches
|
|
198
|
+
# the base carries answer their leg line (the amd64 leg serves the
|
|
199
|
+
# linux-x64 and linux-x64-musl seats, the arm64 leg serves the
|
|
200
|
+
# linux-arm64 seat and the darwin-arm64-v8 abi seat through its v8
|
|
201
|
+
# variant), the legacy builder (no platform axis) answers its documented
|
|
202
|
+
# note, and any other arch answers the coded refusal before the heavy
|
|
203
|
+
# steps below could run (buildx itself fails such a leg at base
|
|
204
|
+
# resolution first; the guard keeps the law loud on every builder).
|
|
205
|
+
RUN case "${TARGETARCH:-}" in \
|
|
206
|
+
amd64|arm64) \
|
|
207
|
+
echo "arch leg ${TARGETARCH} of ${TARGETPLATFORM:-<unresolved>}: one of the two arches the pinned node base carries — the legs of the container-carried seats of the eleven-architecture standard (linux-x64 and linux-x64-musl on amd64, linux-arm64 and the darwin-arm64-v8 abi seat on arm64)" ;; \
|
|
208
|
+
"") \
|
|
209
|
+
echo "arch leg unresolved: the legacy builder carries no platform axis; buildkit answers TARGETARCH per leg" ;; \
|
|
210
|
+
*) \
|
|
211
|
+
echo "the eleven-architecture standard answers the ${TARGETARCH} arch with the honest coded absence (ARCH_TARGET_NOT_CONTAINER for the target seats, ARCH_IMAGE_ABSENT for the riscv64 seat the node engine base does not ship): the pinned node base carries no such manifest" >&2; \
|
|
212
|
+
exit 1 ;; \
|
|
213
|
+
esac
|
|
214
|
+
|
|
147
215
|
COPY --from=solbuild /app/package.json /app/package-lock.json ./
|
|
148
216
|
RUN apt-get update \
|
|
149
217
|
&& apt-get upgrade -y \
|
|
@@ -196,45 +264,123 @@ RUN apt-get update \
|
|
|
196
264
|
# the solbuild stage lands it). with the graph closed, node
|
|
197
265
|
# webserver.ts starts clean; before the fix the container crashed at
|
|
198
266
|
# boot with module-not-found.
|
|
267
|
+
#
|
|
268
|
+
# The two lazy engine seats ride the same closed graph (the exotic law:
|
|
269
|
+
# the ninety modalities answer real runs inside the container, never the
|
|
270
|
+
# guarded absence): webserver.ts mounts the edge artifact vault through
|
|
271
|
+
# a first-use import of virtual.ts (the guarded loader degrades to null
|
|
272
|
+
# when the module is absent, so a container without it answers no
|
|
273
|
+
# artifact persistence), and edgelandes.ts lazily mounts virtual.ts for
|
|
274
|
+
# its virtual-file, s3 and persistence recipe seats plus tiers.ts for
|
|
275
|
+
# the kernel recipe seat — copying both keeps those seats live inside
|
|
276
|
+
# the container, and their import closures stay inside the set
|
|
277
|
+
# (virtual.ts pulls foundation.ts only; tiers.ts pulls node builtins
|
|
278
|
+
# only).
|
|
199
279
|
# run the console with: docker run saddle:<version>
|
|
200
|
-
COPY --from=solbuild /app/webserver.ts /app/db.ts /app/labels.ts /app/auth.ts /app/mesh.ts /app/sandbox.ts /app/modalityregistry.ts /app/edgeplane.ts /app/workloadlaw.ts /app/foundation.ts /app/edgelandes.ts /app/scriptlanes.ts /app/execution.ts /app/mime.types /app/init.sql /app/schema.prisma ./
|
|
280
|
+
COPY --from=solbuild /app/webserver.ts /app/db.ts /app/labels.ts /app/auth.ts /app/mesh.ts /app/sandbox.ts /app/modalityregistry.ts /app/edgeplane.ts /app/workloadlaw.ts /app/foundation.ts /app/edgelandes.ts /app/scriptlanes.ts /app/execution.ts /app/virtual.ts /app/tiers.ts /app/mime.types /app/init.sql /app/schema.prisma ./
|
|
201
281
|
# the label store of the console stack: labels.ts (pulled by db.ts)
|
|
202
282
|
# resolves ../vault/labelstore.ts at /vault - the same family context
|
|
203
283
|
# fix the solbuild stage applies.
|
|
204
284
|
COPY --from=solbuild /vault/labelstore.ts /vault/labelstore.ts
|
|
205
285
|
COPY --from=solbuild /out/spa ./
|
|
206
286
|
|
|
287
|
+
# the writable state home of the engine console (the vault engine
|
|
288
|
+
# container's /app/data pattern): db.ts resolves the sqlite store at
|
|
289
|
+
# import time (SADDLE_DB, else ./saddle.db under the working directory)
|
|
290
|
+
# and every directory the COPY chain staged stays root-owned, so the
|
|
291
|
+
# unprivileged node user needs a home it owns before the database file
|
|
292
|
+
# can open — without it the console crashed at boot on the sqlite
|
|
293
|
+
# cantopen refusal. An operator pins the persistent volume here; the
|
|
294
|
+
# engine creates the store on first boot.
|
|
295
|
+
RUN mkdir -p /app/data && chown -R node:node /app/data
|
|
296
|
+
|
|
207
297
|
USER node
|
|
208
298
|
|
|
209
299
|
# the console service doors: the webserver answers the engine api and the
|
|
210
300
|
# staged spa on the saddle port (the source-is-library law runs the .ts
|
|
211
|
-
# graph natively - node 26 strips the types, zero npm dependencies)
|
|
301
|
+
# graph natively - node 26 strips the types, zero npm dependencies), the
|
|
302
|
+
# port pin keeps the webserver's random-port fallback from ever
|
|
303
|
+
# answering, and the sqlite store opens under the writable state home
|
|
304
|
+
# above.
|
|
212
305
|
ENV SADDLE_PORT=8080 \
|
|
213
|
-
SADDLE_HOST=0.0.0.0
|
|
306
|
+
SADDLE_HOST=0.0.0.0 \
|
|
307
|
+
SADDLE_DB=/app/data/saddle.db
|
|
214
308
|
|
|
215
309
|
EXPOSE 8080
|
|
216
310
|
|
|
217
|
-
# the health probe rides the
|
|
218
|
-
# (
|
|
219
|
-
#
|
|
220
|
-
#
|
|
221
|
-
|
|
311
|
+
# the health probe rides the PUBLIC /api/v1/health route the webserver
|
|
312
|
+
# answers (the engine's own health surface: the ok flag, the version, the
|
|
313
|
+
# db healthcheck — never the spa shell the extensionless /health path
|
|
314
|
+
# serves, which would answer 200 html even with the engine sealed). The
|
|
315
|
+
# port follows SADDLE_PORT with the 8080 fallback (node fetch, zero wget
|
|
316
|
+
# dependency on the slim debian base; the callback spells function() — no
|
|
317
|
+
# arrow, no equal sign — so the dockle CIS-DI-0010 heuristic never reads
|
|
318
|
+
# a credential pair into the recorded healthcheck).
|
|
319
|
+
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 CMD ["node", "-e", "fetch('http://127.0.0.1:'+(process.env.SADDLE_PORT||8080)+'/api/v1/health').then(function(r){return r.json()}).then(function(j){if(!j.ok)process.exit(1)}).catch(function(){process.exit(1)})"]
|
|
222
320
|
|
|
223
321
|
ENTRYPOINT ["node", "webserver.ts"]
|
|
224
322
|
|
|
225
323
|
# ===== the variant profile targets (the saddle-exclusive three) =====
|
|
226
|
-
#
|
|
227
|
-
#
|
|
228
|
-
#
|
|
229
|
-
|
|
230
|
-
|
|
324
|
+
# Every variant stage re-declares the six plan build-args with its own
|
|
325
|
+
# honest defaults and re-stamps the plan ENV: a local `--target` leg
|
|
326
|
+
# answers its real hardware plan with no args passed (the pre-fix file
|
|
327
|
+
# stamped the max plan under every profile name when the caller passed
|
|
328
|
+
# no VHE_PROFILE_* args), and the publish legs pass the matrix constants
|
|
329
|
+
# per leg and override the defaults — the publish matrix stays the single
|
|
330
|
+
# source of the catalog either way.
|
|
231
331
|
|
|
232
|
-
#
|
|
233
|
-
|
|
234
|
-
|
|
332
|
+
# max — the full profile catalog: the epyc 9965 class, 192 vcpu, 384
|
|
333
|
+
# threads, 1024 gib ram, the b200 gpu plan x8 (the bare version tag the
|
|
334
|
+
# registry lane answers).
|
|
335
|
+
FROM base AS max
|
|
336
|
+
ARG VHE_PROFILE_CPU="epyc9965"
|
|
337
|
+
ARG VHE_PROFILE_VCPUS="192"
|
|
338
|
+
ARG VHE_PROFILE_THREADS="384"
|
|
339
|
+
ARG VHE_PROFILE_RAM_GB="1024"
|
|
340
|
+
ARG VHE_PROFILE_GPU="b200"
|
|
341
|
+
ARG VHE_PROFILE_GPUS="8"
|
|
342
|
+
ENV SADDLE_PROFILE=max \
|
|
343
|
+
SADDLE_PROFILE_CPU=${VHE_PROFILE_CPU} \
|
|
344
|
+
SADDLE_PROFILE_VCPUS=${VHE_PROFILE_VCPUS} \
|
|
345
|
+
SADDLE_PROFILE_THREADS=${VHE_PROFILE_THREADS} \
|
|
346
|
+
SADDLE_PROFILE_RAM_GB=${VHE_PROFILE_RAM_GB} \
|
|
347
|
+
SADDLE_PROFILE_GPU=${VHE_PROFILE_GPU} \
|
|
348
|
+
SADDLE_PROFILE_GPUS=${VHE_PROFILE_GPUS}
|
|
235
349
|
|
|
236
|
-
# lite — the ryzen class,
|
|
237
|
-
#
|
|
238
|
-
# lite, the lightest leg the family carries).
|
|
350
|
+
# lite — the ryzen 9950x3d class, 16 vcpu, 32 threads, 128 gib ram, the
|
|
351
|
+
# rtx 5090 gpu plan x1 (the -lite suffix tag the registry lane answers).
|
|
239
352
|
FROM base AS lite
|
|
240
|
-
|
|
353
|
+
ARG VHE_PROFILE_CPU="ryzen9950x3d"
|
|
354
|
+
ARG VHE_PROFILE_VCPUS="16"
|
|
355
|
+
ARG VHE_PROFILE_THREADS="32"
|
|
356
|
+
ARG VHE_PROFILE_RAM_GB="128"
|
|
357
|
+
ARG VHE_PROFILE_GPU="rtx5090"
|
|
358
|
+
ARG VHE_PROFILE_GPUS="1"
|
|
359
|
+
ENV SADDLE_PROFILE=lite \
|
|
360
|
+
SADDLE_PROFILE_CPU=${VHE_PROFILE_CPU} \
|
|
361
|
+
SADDLE_PROFILE_VCPUS=${VHE_PROFILE_VCPUS} \
|
|
362
|
+
SADDLE_PROFILE_THREADS=${VHE_PROFILE_THREADS} \
|
|
363
|
+
SADDLE_PROFILE_RAM_GB=${VHE_PROFILE_RAM_GB} \
|
|
364
|
+
SADDLE_PROFILE_GPU=${VHE_PROFILE_GPU} \
|
|
365
|
+
SADDLE_PROFILE_GPUS=${VHE_PROFILE_GPUS}
|
|
366
|
+
|
|
367
|
+
# balanced — the threadripper pro 9995wx class, 96 vcpu, 192 threads,
|
|
368
|
+
# 512 gib ram, the b200 gpu plan x2 (the -balanced suffix tag the
|
|
369
|
+
# registry lane answers). THE DEFAULT TARGET: the last stage of the
|
|
370
|
+
# file — the plain `docker build -f saddle/Dockerfile .` with no
|
|
371
|
+
# --target answers the balanced profile (the SADDLE_PROFILE lane's
|
|
372
|
+
# documented default).
|
|
373
|
+
FROM base AS balanced
|
|
374
|
+
ARG VHE_PROFILE_CPU="threadripperpro9995wx"
|
|
375
|
+
ARG VHE_PROFILE_VCPUS="96"
|
|
376
|
+
ARG VHE_PROFILE_THREADS="192"
|
|
377
|
+
ARG VHE_PROFILE_RAM_GB="512"
|
|
378
|
+
ARG VHE_PROFILE_GPU="b200"
|
|
379
|
+
ARG VHE_PROFILE_GPUS="2"
|
|
380
|
+
ENV SADDLE_PROFILE=balanced \
|
|
381
|
+
SADDLE_PROFILE_CPU=${VHE_PROFILE_CPU} \
|
|
382
|
+
SADDLE_PROFILE_VCPUS=${VHE_PROFILE_VCPUS} \
|
|
383
|
+
SADDLE_PROFILE_THREADS=${VHE_PROFILE_THREADS} \
|
|
384
|
+
SADDLE_PROFILE_RAM_GB=${VHE_PROFILE_RAM_GB} \
|
|
385
|
+
SADDLE_PROFILE_GPU=${VHE_PROFILE_GPU} \
|
|
386
|
+
SADDLE_PROFILE_GPUS=${VHE_PROFILE_GPUS}
|
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ domain modules land beside the saddle domains:
|
|
|
31
31
|
| `media.ts`, `render.ts`, `quantum.ts`, `tiers.ts` | media pipeline, GPU registry, quantum simulation, tier policy |
|
|
32
32
|
| `security.ts`, `alternatives.ts` | hardening gates and the alternative-stack catalog |
|
|
33
33
|
| `index.html`, `App.tsx`, `sol/` | the single SPA shell and the Sol theme (one tsx app with one stylesheet per theme) |
|
|
34
|
-
| `server.ts`, `sandbox.ts` | the zero-dependency self-hosted API of the 2.0.
|
|
34
|
+
| `server.ts`, `sandbox.ts` | the zero-dependency self-hosted API of the 2.0.163 grand-merge envelope (`node server.ts`; the api answers its version at `/api/v1/health`) and the browser-pure engine port |
|
|
35
35
|
| `vercel.json`, `netlify.toml` | the platform deploy adapters beside the surface they publish (the caddy ghost stays out of the tree) |
|
|
36
36
|
| `specs/*` package exports | processors, gpus, cores, boards and the qemu/mttg/passage/docker envelopes |
|
|
37
37
|
|
package/biome.jsonc
CHANGED
|
File without changes
|
package/distribution.ts
CHANGED
|
@@ -366,7 +366,20 @@ export async function writeTargetPlan(target: string, format = target, output =
|
|
|
366
366
|
return filename;
|
|
367
367
|
}
|
|
368
368
|
|
|
369
|
-
|
|
369
|
+
/** The cli entry seat: argv[1] only exists under the node runtime — the
|
|
370
|
+
* family browser bridges import this module through the modes ladder for
|
|
371
|
+
* the publish contracts, and the raw process.argv[1] read throws at
|
|
372
|
+
* import time in the browser (the blank-window era of the forge and
|
|
373
|
+
* foundry seats). the guard answers undefined everywhere but node. */
|
|
374
|
+
const cliseat =
|
|
375
|
+
typeof process === "object" &&
|
|
376
|
+
process !== null &&
|
|
377
|
+
Array.isArray(process.argv) &&
|
|
378
|
+
typeof process.argv[1] === "string"
|
|
379
|
+
? process.argv[1]
|
|
380
|
+
: undefined;
|
|
381
|
+
|
|
382
|
+
if (cliseat?.endsWith("targetcli.js") || cliseat?.endsWith("targetcli.ts")) {
|
|
370
383
|
const [, , target = "library", format = target, output = "build/targets"] = process.argv;
|
|
371
384
|
writeTargetPlan(target, format, output).then((filename) => console.log(`target plan: ${filename}`)).catch((error) => { console.error(error.message); process.exitCode = 1; });
|
|
372
385
|
}
|
|
@@ -511,7 +524,7 @@ function normalizeupdatedat(value) { const normalized = Number(value ?? 0); if (
|
|
|
511
524
|
|
|
512
525
|
function comparefreshness(left, right) { return right.updatedat - left.updatedat || right.bytes - left.bytes || left.name.localeCompare(right.name); }
|
|
513
526
|
|
|
514
|
-
if (
|
|
527
|
+
if (cliseat !== undefined && cliseat === fileURLToPath(import.meta.url)) createassets(parsearguments(process.argv.slice(2))).then(({ output }) => { console.log(`release assets: ${output}`); }).catch((error) => { console.error(error.message); process.exitCode = 1; });
|
|
515
528
|
|
|
516
529
|
/* ════════════════════════════════════════════════════════════════════ */
|
|
517
530
|
/* Section 9: release/verify.ts — Release verification checks artifact digests, manifest consistency and */
|
|
@@ -613,7 +626,7 @@ function verifyparsearguments(argumentslist) {
|
|
|
613
626
|
return options;
|
|
614
627
|
}
|
|
615
628
|
|
|
616
|
-
if (
|
|
629
|
+
if (cliseat !== undefined && cliseat === fileURLToPath(import.meta.url)) verifyassets(verifyparsearguments(process.argv.slice(2))).then((result) => { console.log(JSON.stringify(result)); }).catch((error) => { console.error(error.message); process.exitCode = 1; });
|
|
617
630
|
|
|
618
631
|
/* ════════════════════════════════════════════════════════════════════ */
|
|
619
632
|
/* Section 10: release/evidence.ts — Release evidence evaluates caller-supplied metadata without fetching, signing, */
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Saddle acceptable use policy
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, andraneris, and contributors.
|
|
4
|
+
|
|
5
|
+
The Saddle source code is licensed under the GNU General Public License version 3.0 only. This policy governs hosted services, credentials, runners and integrations operated with Saddle; it does not reduce rights granted by the GPL.
|
|
6
|
+
|
|
7
|
+
Operators must use Saddle lawfully, respect the terms of each connected provider, protect credentials, and obtain authorization before accessing systems or data. Operators must not use Saddle to distribute malware, evade access controls, attack third-party systems, violate privacy, infringe intellectual property, or exceed provider quotas.
|
|
8
|
+
|
|
9
|
+
The project may suspend a hosted integration or reject an unsafe request when necessary to protect users, providers or the public. These operational controls do not restrict lawful use, modification or redistribution of the GPL-licensed software itself.
|
package/docs/authors.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Saddle authors
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, andraneris, and contributors.
|
|
4
|
+
|
|
5
|
+
The project authors and historical copyright holders are:
|
|
6
|
+
|
|
7
|
+
| Contributor | Role |
|
|
8
|
+
|---|---|
|
|
9
|
+
| devthink | Historical author and project contributor |
|
|
10
|
+
| nathlan | Project owner and maintainer |
|
|
11
|
+
| iakadion | Historical author and project contributor |
|
|
12
|
+
| nathu filho | Historical author and project contributor |
|
|
13
|
+
| allan neris | Historical author and project contributor |
|
|
14
|
+
| andraneris | Historical author and project contributor |
|
|
15
|
+
|
|
16
|
+
Saddle is maintained at https://github.com/wenathlan/saddle and distributed under GPL-3.0-only. Contributors retain copyright in their original contributions unless a separate written agreement states otherwise.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug Report
|
|
3
|
+
about: Report a reproducible issue in Saddle
|
|
4
|
+
title: "[BUG]"
|
|
5
|
+
labels: bug
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Saddle is licensed under GPL-3.0-only. Please do not include secrets or private data.
|
|
9
|
+
|
|
10
|
+
**Describe the issue:**
|
|
11
|
+
|
|
12
|
+
**File / Line:**
|
|
13
|
+
|
|
14
|
+
**Expected behavior:**
|
|
15
|
+
|
|
16
|
+
**Additional context:**
|
package/docs/cla.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Saddle contributor terms
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, andraneris, and contributors.
|
|
4
|
+
|
|
5
|
+
Saddle does not require an exclusive proprietary assignment of contributions. A contributor submitting a change represents that the contributor has the right to submit it and grants the project the permissions necessary to review, merge, reproduce, distribute and maintain the contribution under GPL-3.0-only.
|
|
6
|
+
|
|
7
|
+
The contributor keeps copyright in the contribution. The project may include the contribution in source and binary releases under GPL-3.0-only and may preserve attribution and required notices.
|
|
8
|
+
|
|
9
|
+
If a separate contributor agreement is required for a particular institutional or commercial arrangement, it must be reviewed and accepted in writing before the contribution is merged. This file is not a replacement for legal advice or a bespoke agreement.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Saddle code of conduct
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, andraneris, and contributors.
|
|
4
|
+
|
|
5
|
+
The Saddle community follows a respectful, inclusive and technically constructive standard. Participants communicate in good faith, explain technical concerns with evidence, respect different backgrounds and experience levels, and protect private information.
|
|
6
|
+
|
|
7
|
+
Unacceptable conduct includes harassment, discrimination, threats, deliberate disclosure of private information, malicious interference, impersonation, spam, and behavior that violates applicable law or the project policies.
|
|
8
|
+
|
|
9
|
+
Project maintainers may moderate discussions, remove harmful content, or restrict participation when necessary. Reports should be sent through the repository security or support channels, with private disclosure used for security-sensitive matters.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Contributing to Saddle
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, andraneris, and contributors.
|
|
4
|
+
|
|
5
|
+
Saddle welcomes contributions that improve the library, its adapters, target builds, documentation, tests and security posture. Contributions are licensed under GPL-3.0-only unless a different compatible arrangement is agreed in writing before acceptance.
|
|
6
|
+
|
|
7
|
+
A pull request should explain the change, include focused verification, preserve the root-first architecture and avoid credentials, private data or generated artifacts. Security vulnerabilities must use the private process in `SECURITY.md` rather than a public issue.
|
|
8
|
+
|
|
9
|
+
Maintainers may review, request changes, decline or merge a contribution. No contributor is required to transfer exclusive ownership of their work merely to submit a pull request.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Saddle copyright notice
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, andraneris, and contributors.
|
|
4
|
+
|
|
5
|
+
The Saddle source code and original documentation are distributed under the GNU General Public License version 3.0 only. The complete license text is kept in the root `LICENSE` file and must be distributed with covered copies.
|
|
6
|
+
|
|
7
|
+
Copyright ownership remains with the respective authors and contributors. Copyright ownership does not remove the rights granted by GPL-3.0-only. The Saddle name, logos and other marks are covered separately by `trademarkpolicy.md`.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Saddle disclaimer
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, andraneris, and contributors.
|
|
4
|
+
|
|
5
|
+
Saddle is provided under GPL-3.0-only and without warranty to the maximum extent permitted by law. The project does not guarantee availability, correctness, security, compatibility, performance or fitness for a particular purpose.
|
|
6
|
+
|
|
7
|
+
Operators remain responsible for reviewing source code, configuring integrations, protecting credentials, validating outputs and complying with the terms of connected services. Nothing in this disclaimer removes rights or obligations established by GPL-3.0-only.
|
package/docs/eula.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Saddle end user license notice
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, and contributors.
|
|
4
|
+
|
|
5
|
+
Saddle source code, scripts and covered binaries are licensed under the GNU General Public License version 3.0 only. The root `LICENSE` file controls the copyright license and grants the permissions described there.
|
|
6
|
+
|
|
7
|
+
This notice does not add a proprietary restriction to GPL-licensed code. Separate terms may apply to a hosted service, a third-party provider, a trademark, or data supplied by an operator. Those terms cannot remove rights granted by the GPL for the covered source code.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
SADDLE - EXPORT CONTROL NOTICE
|
|
2
|
+
Version 1.0, August 2026
|
|
3
|
+
|
|
4
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, andraneris, and contributors. Licensed under GPL-3.0-only.
|
|
5
|
+
Project: saddle
|
|
6
|
+
|
|
7
|
+
Project Saddle is open-source software under GPL-3.0-only. Export,
|
|
8
|
+
re-export and sanctions laws may still apply to a particular operator,
|
|
9
|
+
destination, service or use case.
|
|
10
|
+
|
|
11
|
+
You agree not to export, re-export, or transfer Project saddle to any
|
|
12
|
+
prohibited destination, entity, or person, or for any prohibited end-use.
|
|
13
|
+
|
|
14
|
+
Operators are responsible for checking applicable rules before
|
|
15
|
+
transferring source, binaries, credentials or data across borders.
|
|
16
|
+
|
|
17
|
+
END OF EXPORT CONTROL NOTICE
|
package/docs/features.md
CHANGED
|
File without changes
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Saddle governance
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, and contributors.
|
|
4
|
+
|
|
5
|
+
Saddle is maintained as a library-first open-source project under GPL-3.0-only. The repository owner coordinates releases, security response, release approvals and provider integrations. Contributors retain copyright in their contributions unless a separate written agreement states otherwise.
|
|
6
|
+
|
|
7
|
+
Changes should include focused reasoning, tests where practical, documentation for public behavior, and review of security-sensitive workflows. Release artifacts must be traceable to repository source and generated by the documented automation.
|
|
8
|
+
|
|
9
|
+
Technical governance is recorded in the repository plans and workflow files. This document describes project responsibility and does not override the GPL or a contributor's applicable rights.
|
package/docs/ninetymodalities.md
CHANGED
|
File without changes
|
package/docs/notice.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Saddle notice
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, and contributors.
|
|
4
|
+
|
|
5
|
+
Saddle is open-source software licensed under the GNU General Public License version 3.0 only. The source code, generated artifacts and documentation may include work from third-party projects; each third-party component remains subject to its own license.
|
|
6
|
+
|
|
7
|
+
The project name and logos are trademarks of their respective owner. The trademark policy does not restrict rights granted by GPL-3.0-only to the source code.
|
package/docs/planningengine.md
CHANGED
|
File without changes
|
package/docs/planningninety.md
CHANGED
|
File without changes
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Saddle privacy policy
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, and contributors.
|
|
4
|
+
|
|
5
|
+
The core Saddle library does not intentionally collect telemetry or transmit data without an operator-requested integration. Browser, scraper, storage and runner features can access data only when the operator configures and invokes them. Operators must review the configuration and the privacy policy of every connected provider.
|
|
6
|
+
|
|
7
|
+
The repository itself is hosted by third-party services such as GitHub. Those services process requests, account data, logs and cookies under their own policies. A deployment that adds analytics, account data, logs or external storage must document that behavior and provide the controls required by applicable law.
|
|
8
|
+
|
|
9
|
+
Privacy questions and reports should use the repository support channel. Security-sensitive reports must follow `SECURITY.md`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!-- Saddle pull request template -->
|
|
2
|
+
|
|
3
|
+
# Description
|
|
4
|
+
|
|
5
|
+
## Type of change
|
|
6
|
+
|
|
7
|
+
## Verification
|
|
8
|
+
|
|
9
|
+
- [ ] The change preserves GPL-3.0-only metadata and required notices.
|
|
10
|
+
- [ ] Tests or a reason for not adding tests are included.
|
|
11
|
+
- [ ] Security-sensitive behavior and workflow changes were reviewed.
|
|
12
|
+
- [ ] No credentials, private data or generated build output was added.
|
|
13
|
+
- [ ] Public documentation was updated when behavior changed.
|
package/docs/support.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Saddle support
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, and contributors.
|
|
4
|
+
|
|
5
|
+
Saddle is open-source software under GPL-3.0-only. Questions about installation, configuration, usage and reproducible failures should include the version, target, relevant logs and a minimal reproduction without credentials or private data.
|
|
6
|
+
|
|
7
|
+
Security reports must use the private process in `SECURITY.md`. Requests involving a third-party provider should also include the provider and the operator-controlled configuration. Community support is provided on a best-effort basis and does not create a warranty, service-level agreement or maintenance obligation.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Saddle terms and conditions
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, and contributors.
|
|
4
|
+
|
|
5
|
+
These terms describe access to the Saddle repository, documentation, releases and project services. The source code license is the GNU General Public License version 3.0 only; the root `LICENSE` file controls permissions to copy, modify, run and redistribute covered works.
|
|
6
|
+
|
|
7
|
+
Users must comply with applicable law, third-party provider terms, the acceptable use policy, and the security policy. Users must not use a configured integration to access data or systems without authorization, expose credentials, distribute malware, or evade safety controls.
|
|
8
|
+
|
|
9
|
+
The repository and project services are provided without warranty to the maximum extent permitted by law. Separate provider terms apply to infrastructure, accounts, data and hosted services. These terms do not add restrictions to GPL-licensed source code.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Saddle terms of use
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, and contributors.
|
|
4
|
+
|
|
5
|
+
Saddle may be used, modified and redistributed under GPL-3.0-only. Use of a connected account, runner, storage provider, browser session or hosted service remains subject to the operator's authorization and that provider's terms.
|
|
6
|
+
|
|
7
|
+
Users must protect secrets, respect privacy, avoid unauthorized access, and validate outputs before relying on them. Feedback may be used by the project under the applicable copyright permissions; submitting feedback does not transfer unrelated rights in the contributor's code.
|
|
8
|
+
|
|
9
|
+
The project is provided as-is without a warranty or service-level commitment. The GPL and applicable law control where this document conflicts with a covered source license.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Saddle third-party notices
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, and contributors.
|
|
4
|
+
|
|
5
|
+
Saddle includes or builds with third-party components. Their individual licenses remain in force and are not replaced by GPL-3.0-only. Package manifests, lockfiles and generated license inventories are the source of truth for the exact dependency set of each release.
|
|
6
|
+
|
|
7
|
+
When a component requires a notice, attribution or source offer, the release process must include it. A future dependency should be recorded with its name, version, license identifier, copyright notice and source URL.
|
|
8
|
+
|
|
9
|
+
## Merged lineage notice — e2ugh (the 2.0.0 grand merge)
|
|
10
|
+
|
|
11
|
+
The e2ugh virtual-hardware engine (the private repository that merged into
|
|
12
|
+
saddle at 2.0.0) was originally published under the MIT license
|
|
13
|
+
("Copyright (c) 2026 wenathlan"). The merged repository relicenses the
|
|
14
|
+
combined work under GPL-3.0-only; the original MIT grant of the e2ugh
|
|
15
|
+
sources is acknowledged here so the lineage's license history stays
|
|
16
|
+
recorded: every file, feature and document of e2ugh carries into saddle
|
|
17
|
+
(readapted to the saddle product metadata) with the e2ugh release history
|
|
18
|
+
preserved verbatim in the CHANGELOG.md lineage sections and the engine
|
|
19
|
+
reference preserved at docs/e2ughengine.md.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Saddle trademark policy
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 devthink, nathlan, iakadion, nathu filho, allan neris, and contributors.
|
|
4
|
+
|
|
5
|
+
The names “Saddle” and “Saddle Browser”, together with associated logos and marks, identify the project and its official releases. GPL-3.0-only grants rights to the source code; it does not grant permission to use project marks in a way that suggests endorsement, affiliation or official distribution.
|
|
6
|
+
|
|
7
|
+
Forks and modified distributions should use distinct names and branding where necessary to avoid confusion. Descriptive references to compatibility, origin or modification are permitted when they are accurate and do not imply sponsorship.
|
package/docs/workloadlaw.md
CHANGED
|
File without changes
|