@wenathlan/saddle 1.8.17 → 1.8.18
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/README.md +38 -13
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/isolation/contracts.d.ts +118 -0
- package/dist/isolation/contracts.d.ts.map +1 -0
- package/dist/isolation/contracts.js +84 -0
- package/dist/isolation/contracts.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -2
- package/dist/scrape/robots.js +1 -1
- package/docs/artifactavailability.md +6 -0
- package/docs/releasenotes-1.8.17.md +6 -0
- package/docs/releasenotes-1.8.18.md +32 -0
- package/docs/research-1.8.18-isolation.md +43 -0
- package/docs/saddle.archive.1.8.17.tar.gz.gpg +0 -0
- package/docs/todo-1.8.16.md +56 -1
- package/docs/todo-1.8.18.md +152 -0
- package/extension/manifest.json +1 -1
- package/package.json +3 -2
- package/docs/logs/.gitkeep +0 -0
- package/docs/plans/00.index.md +0 -50
- package/docs/plans/01.architecture.md +0 -86
- package/docs/plans/02.research.computer.use.md +0 -58
- package/docs/plans/03.research.captcha.bypass.md +0 -68
- package/docs/plans/04.research.sandbox.ai.md +0 -52
- package/docs/plans/05.capture.platform.md +0 -57
- package/docs/plans/06.dependencies.md +0 -97
- package/docs/plans/07.captcha.test.page.md +0 -41
- package/docs/plans/08.production.infra.md +0 -70
- package/docs/plans/09.database.schema.md +0 -121
- package/docs/plans/10.cloudinary.storage.md +0 -57
- package/docs/plans/11.movement.logs.json.md +0 -72
- package/docs/plans/12.research.atlas.agent.browser.md +0 -79
- package/docs/plans/13.research.anti.detection.md +0 -898
- package/docs/plans/14.research.proxy.md +0 -1495
- package/docs/plans/15.research.retry.rate.limit.md +0 -1958
- package/docs/plans/16.research.crawling.md +0 -1417
- package/docs/plans/17.research.caching.md +0 -1610
- package/docs/plans/18.research.content.extraction.md +0 -1952
- package/docs/plans/19.research.errors.events.md +0 -1523
- package/docs/plans/20.research.zod.validation.md +0 -1350
- package/docs/plans/21.research.batch.concurrency.md +0 -1888
- package/docs/plans/22.research.universal.runtime.md +0 -944
- package/docs/plans/23.research.ai.integration.md +0 -1465
- package/docs/plans/24.research.memory.persistence.md +0 -1979
- package/docs/plans/25.research.server.api.md +0 -342
- package/docs/plans/26.research.compilation.md +0 -249
- package/docs/plans/27.research.html.parsing.md +0 -251
- package/docs/plans/28.action.plan.md +0 -50
- package/docs/plans/29.api.reference.md +0 -174
- package/docs/plans/30.architecture.plan.md +0 -94
- package/docs/plans/31.auditoria.dados.md +0 -163
- package/docs/plans/32.bots.automacao.computacional.md +0 -214
- package/docs/plans/33.bots.codigo.revisao.md +0 -220
- package/docs/plans/34.bots.seguranca.cicd.md +0 -366
- package/docs/plans/35.comparativo.concorrencia.md +0 -464
- package/docs/plans/36.computational.memory.md +0 -340
- package/docs/plans/37.deploystrategy.md +0 -394
- package/docs/plans/38.flow.md +0 -155
- package/docs/plans/39.multi.platform.bot.md +0 -252
- package/docs/plans/40.npm.publish.md +0 -250
- package/docs/plans/41.o.que.falta.md +0 -407
- package/docs/plans/42.pesquisa.concorrencia.md +0 -721
- package/docs/plans/43.plan.universal.architecture.md +0 -496
- package/docs/plans/44.reference.md +0 -100
- package/docs/plans/45.robotarchitecture.md +0 -237
- package/docs/plans/46.scdnintegration.md +0 -284
- package/docs/plans/47.multiforge.readme.md +0 -129
- package/docs/plans/48.theory.v4.repo.os.md +0 -152
- package/docs/plans/49.third.party.infra.md +0 -12
- package/docs/plans/50.file.as.compute.md +0 -39
- package/docs/plans/51.architecture.virtual.processor.md +0 -80
- package/docs/plans/52.manifesto.v8.md +0 -11
- package/docs/plans/58.cdn.list.md +0 -23
- package/docs/plans/59.sql.frameworks.md +0 -33
- package/docs/plans/60.sql.thirdparty.md +0 -26
- package/docs/plans/61.objective.multiforge.md +0 -63
- package/docs/plans/62.huggingface.upload.md +0 -26
- package/docs/plans/63.kaggle.upload.md +0 -24
- package/docs/plans/64.npm.storage.md +0 -30
- package/docs/plans/65.rclone.terabox.md +0 -32
- package/docs/plans/66.buckets.and.models.todo.md +0 -14
- package/docs/plans/67.database.todo.md +0 -13
- package/docs/plans/68.deploy.packages.todo.md +0 -12
- package/docs/plans/69.report.human.operator.md +0 -133
- package/docs/plans/70.report.brain2qwerty.ems.md +0 -135
- package/docs/plans/71.report.hd.infinito.vram.md +0 -155
- package/docs/plans/72.plan.hd.infinito.node.md +0 -146
- package/docs/plans/73.plan.scifi.repos.md +0 -125
- package/docs/plans/74.000.manifesto.v8.flat.2..md +0 -11
- package/docs/plans/README.md +0 -489
- package/docs/plans/aggregate_platforms.mjs +0 -146
- package/docs/plans/examplesession.json +0 -36
- package/docs/plans/missing-facts.md +0 -192
- package/docs/plans/models.md +0 -64
- package/docs/plans/organize.cjs +0 -270
- package/docs/plans/platforms.md +0 -2887
- package/docs/plans/sites.md +0 -31322
- package/docs/sources/farm.py +0 -117
- package/docs/sources/html/saddle1.html +0 -132
- package/docs/sources/html/saddle2.html +0 -157
- package/docs/sources/html/saddle3.html +0 -119
- package/docs/sources/html/saddle4.html +0 -144
- package/docs/sources/html/saddle5.html +0 -72
- package/docs/sources/html/saddle6.html +0 -171
- package/docs/sources/html/saddle7.html +0 -236
- package/docs/sources/saddle.ts +0 -74
- package/docs/sources/schema.prisma +0 -88
- package/docs/sources/script.sh +0 -64
- package/docs/sources/workflows.yml +0 -458
- package/docs/talks1/_body.txt +0 -14
- package/docs/talks1/_index.md +0 -15
- package/docs/talks1/_screenshot.png +0 -0
- package/docs/talks1/assistant-01.md +0 -5
- package/docs/talks1/assistant-02.md +0 -5
- package/docs/talks1/assistant-03.md +0 -531
- package/docs/talks1/assistant-04.md +0 -26
- package/docs/talks1/assistant-05.md +0 -774
- package/docs/talks1/assistant-06.md +0 -1718
- package/docs/talks1/scrape-share.cjs +0 -185
- package/docs/talks1/scrape-share.ts +0 -183
- package/docs/talks1/user-01.md +0 -3
- package/docs/talks1/user-02.md +0 -3
- package/docs/talks1/user-03.md +0 -88
- package/docs/talks1/user-04.md +0 -3
- package/docs/talks1/user-05.md +0 -3
- package/docs/talks1/user-06.md +0 -88
- package/docs/talks1/user-07.md +0 -88
- package/docs/talks2/_body.txt +0 -14
- package/docs/talks2/_index.md +0 -16
- package/docs/talks2/_screenshot.png +0 -0
- package/docs/talks2/assistant-01.md +0 -5
- package/docs/talks2/assistant-02.md +0 -5
- package/docs/talks2/assistant-03.md +0 -424
- package/docs/talks2/assistant-04.md +0 -598
- package/docs/talks2/assistant-05.md +0 -1280
- package/docs/talks2/assistant-06.md +0 -1227
- package/docs/talks2/assistant-07.md +0 -1252
- package/docs/talks2/user-01.md +0 -3
- package/docs/talks2/user-02.md +0 -3
- package/docs/talks2/user-03.md +0 -88
- package/docs/talks2/user-04.md +0 -88
- package/docs/talks2/user-05.md +0 -88
- package/docs/talks2/user-06.md +0 -88
- package/docs/talks2/user-07.md +0 -3
- package/docs/talks3/_body.txt +0 -467
- package/docs/talks3/_index.md +0 -10
- package/docs/talks3/_screenshot.png +0 -0
- package/docs/talks3/assistant-01.md +0 -417
- package/docs/talks3/assistant-02.md +0 -417
- package/docs/talks3/assistant-03.md +0 -29
- package/docs/talks3/assistant-04.md +0 -727
- package/docs/talks3/user-01.md +0 -88
- package/docs/talks3/user-02.md +0 -88
- package/docs/talks3/user-03.md +0 -3
- package/docs/talks3/user-04.md +0 -3
- package/docs/talks4/_body.txt +0 -14
- package/docs/talks4/_index.md +0 -12
- package/docs/talks4/_screenshot.png +0 -0
- package/docs/talks4/assistant-01.md +0 -5
- package/docs/talks4/assistant-02.md +0 -5
- package/docs/talks4/assistant-03.md +0 -35
- package/docs/talks4/assistant-04.md +0 -512
- package/docs/talks4/assistant-05.md +0 -599
- package/docs/talks4/user-01.md +0 -3
- package/docs/talks4/user-02.md +0 -3
- package/docs/talks4/user-03.md +0 -88
- package/docs/talks4/user-04.md +0 -88
- package/docs/talks4/user-05.md +0 -7
- package/docs/talks5/_body.txt +0 -14
- package/docs/talks5/_index.md +0 -13
- package/docs/talks5/_screenshot.png +0 -0
- package/docs/talks5/assistant-01.md +0 -5
- package/docs/talks5/assistant-02.md +0 -5
- package/docs/talks5/assistant-03.md +0 -690
- package/docs/talks5/assistant-04.md +0 -758
- package/docs/talks5/assistant-05.md +0 -974
- package/docs/talks5/user-01.md +0 -3
- package/docs/talks5/user-02.md +0 -3
- package/docs/talks5/user-03.md +0 -105
- package/docs/talks5/user-04.md +0 -105
- package/docs/talks5/user-05.md +0 -63
- package/docs/talks5/user-06.md +0 -105
- package/docs/talks6/_body.txt +0 -14
- package/docs/talks6/_index.md +0 -9
- package/docs/talks6/_screenshot.png +0 -0
- package/docs/talks6/assistant-01.md +0 -5
- package/docs/talks6/assistant-02.md +0 -5
- package/docs/talks6/assistant-03.md +0 -1499
- package/docs/talks6/user-01.md +0 -3
- package/docs/talks6/user-02.md +0 -3
- package/docs/talks6/user-03.md +0 -88
- package/docs/talks6/user-04.md +0 -88
- package/docs/talks7/_body.txt +0 -14
- package/docs/talks7/_index.md +0 -10
- package/docs/talks7/_screenshot.png +0 -0
- package/docs/talks7/assistant-01.md +0 -5
- package/docs/talks7/assistant-02.md +0 -5
- package/docs/talks7/assistant-03.md +0 -523
- package/docs/talks7/assistant-04.md +0 -617
- package/docs/talks7/user-01.md +0 -3
- package/docs/talks7/user-02.md +0 -3
- package/docs/talks7/user-03.md +0 -105
- package/docs/talks7/user-04.md +0 -67
- package/docs/talks8/conversa1.txt +0 -1322
- package/docs/talks8/conversa2.txt +0 -237
- package/docs/talks9/Beyond the Obvious_ 50 Plataformas Auto-Hospedadas de Forja de C/303/263digo para Al/303/251m de Gitea e GitLab.md" +0 -174
- package/docs/talks9/De NPM a Multi-Linguagem_ Uma Arquitetura T/303/251cnica para a Execu/303/247/303/243o Integrada de C/303/263digo no Ecossistema Node.js.md" +0 -59
- package/docs/talks9/De NPM a VMs Virtuais_ Uma An/303/241lise Arquitet/303/264nica para a Realiza/303/247/303/243o do Ciclo de Vida do Projeto SADDLE.md" +0 -91
- package/docs/talks9/Mapeamento da Engrenagem Computacional_ Uma Arquitetura para Execu/303/247/303/243o Isolada e Persist/303/252ncia em Ambientes Distribu/303/255dos.md" +0 -116
- package/docs/talks9/O Cen/303/241rio Pr/303/241tico do SADDLE_ Uma An/303/241lise de Viabilidade e Modelo de Ciclo de Vida Integrado.md" +0 -128
- package/docs/talks9/README (2).md +0 -489
- package/docs/talks9/README.md +0 -198
- package/docs/talks9/Viabilidade do Saddle_ Uma An/303/241lise T/303/251cnica da Transforma/303/247/303/243o de Armazenamento Remoto em Mem/303/263ria Computacional.md" +0 -80
- package/docs/talks9/conversa.txt +0 -544
- package/docs/talks9/other (2).md +0 -39
- package/docs/talks9/other.md +0 -57
- package/docs/talks9/outro.txt +0 -24
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<strong>Storage-backed jobs, scraping contracts and portable runners for Node.js.</strong><br/>
|
|
7
7
|
<strong>Binary computing engine, agent browser, scraper and packager.</strong><br/>
|
|
8
8
|
<a href="https://github.com/wenathlan/saddle/actions/workflows/ci.yml"><img src="https://github.com/wenathlan/saddle/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
9
|
-
<a href="https://github.com/wenathlan/saddle/releases/tag/v1.8.
|
|
9
|
+
<a href="https://github.com/wenathlan/saddle/releases/tag/v1.8.18"><img src="https://img.shields.io/badge/release-v1.8.18-d35d3d" alt="Release 1.8.18" /></a>
|
|
10
10
|
<a href="https://github.com/wenathlan/saddle/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-GPL--3.0--only-202a2f" alt="GPL 3.0 only license" /></a>
|
|
11
11
|
</p>
|
|
12
12
|
|
|
@@ -40,17 +40,19 @@ node --import tsx examples/publicapi.ts
|
|
|
40
40
|
npm test
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
##
|
|
43
|
+
## Foundation
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
Saddle is organized as a progressive architecture. **Foundation** defines the storage, runner and working-set model. **Engine** defines the contracts that make that model executable. **Productization** exposes the same contracts through package, extension, workflow, native and web surfaces without creating a second source of truth.
|
|
46
46
|
|
|
47
|
-
###
|
|
47
|
+
### Storage, runners and working sets
|
|
48
48
|
|
|
49
49
|
Saddle treats a repository, bucket or object store as durable state and a third-party runner as a replaceable processor. GitHub Actions is one adapter, not the core. Forgejo, Gitea, GitLab, Codeberg, Docker and caller-owned runners can implement the same runner contracts.
|
|
50
50
|
|
|
51
51
|
The physical limit remains explicit: remote storage is not VRAM. A storage-to-RAM bridge can stage a bounded working set through a local filesystem, tmpfs, mmap, cache or caller-owned storage adapter, but it cannot remove network latency or create the bandwidth of a GPU bus. The engine exposes that distinction instead of hiding it behind marketing language.
|
|
52
52
|
|
|
53
|
-
The execution model
|
|
53
|
+
### The execution model
|
|
54
|
+
|
|
55
|
+
The execution model is intentionally small and explicit:
|
|
54
56
|
|
|
55
57
|
```text
|
|
56
58
|
repository or bucket -> runner working set -> process -> durable artifact
|
|
@@ -74,7 +76,11 @@ The historical design treats the repository and its runner as a **virtual proces
|
|
|
74
76
|
|
|
75
77
|
The engine keeps these boundaries explicit. It does not silently install a browser, mount a bucket as VRAM, create a database, choose a proxy, or transfer credentials to a provider.
|
|
76
78
|
|
|
77
|
-
|
|
79
|
+
## Engine
|
|
80
|
+
|
|
81
|
+
The engine coordinates serializable contracts rather than hiding providers. The caller composes storage, working-set, runner, protocol and delivery adapters around a durable artifact boundary. Remote effects remain adapter-owned; the transport-neutral root does not require a cloud account, database, browser binary or secret.
|
|
82
|
+
|
|
83
|
+
### What is included
|
|
78
84
|
|
|
79
85
|
| Area | Contracts shipped | Result |
|
|
80
86
|
| --- | --- | --- |
|
|
@@ -101,7 +107,9 @@ The protocol layer accepts JSON request/response envelopes, NDJSON append-only e
|
|
|
101
107
|
|
|
102
108
|
The root entry point is transport-neutral. Node filesystem, HTTP server, persistent sessions and Playwright are explicit subpaths or optional adapters. The library accepts caller-provided fetchers, browser transports, storage adapters, persistence, proxy pools, captcha evidence handlers, webhook secrets and remote credentials.
|
|
103
109
|
|
|
104
|
-
|
|
110
|
+
## Productization
|
|
111
|
+
|
|
112
|
+
### One engine, many shells
|
|
105
113
|
|
|
106
114
|
The same contracts can be surfaced as an npm library, application archive, computer runtime, desktop installer, Android APK/AAB, iOS IPA, CLI, binary, browser package, Manifest V3 extension, web/PWA artifact, LibreOffice OXT, VSIX, webhook server, MCP transport, workflow action, container image, Maven package, NuGet package or RubyGem. These surfaces are declarative target plans and caller-owned adapters around the engine; they are not separate sources of truth.
|
|
107
115
|
|
|
@@ -135,8 +143,12 @@ Saddle can be connected to GitHub, GitLab, Forgejo, Gitea, Codeberg, Docker or a
|
|
|
135
143
|
| `nodeserver` | Web Request/Response handler |
|
|
136
144
|
| `engine` / `scheduler` | job lifecycle and runner dispatch |
|
|
137
145
|
| `release-assets` | SHA256SUMS, SBOM and provenance metadata for caller-selected artifacts |
|
|
146
|
+
| `releaseevidence` / `evaluateevidence` | serializable release-evidence creation and evaluation |
|
|
147
|
+
| `releasereadiness` / `evidencefromverification` | readiness assessment from caller-supplied verification evidence |
|
|
148
|
+
| `executionrequest` / `executiondecision` / `executionhandoff` | denied-by-default privileged-effect planning and caller-owned handoff projection |
|
|
149
|
+
| `internalenvelope` / `internalapi` | pure typed envelopes for a unified web gateway, plan, policy, materialization, execution, persistence and evidence boundary |
|
|
138
150
|
|
|
139
|
-
The
|
|
151
|
+
The package export map is defined by the root manifest. Runnable public examples, API reference material and technical records ship with the package, while the root entry point remains the recommended starting surface for applications that do not need a platform-specific adapter.
|
|
140
152
|
|
|
141
153
|
## Browser extension
|
|
142
154
|
|
|
@@ -165,7 +177,7 @@ The base permission set is `activeTab`, `scripting` and `storage`. It does not r
|
|
|
165
177
|
| Failure | retry, circuit breaker, idempotency and resume are configurable |
|
|
166
178
|
| Releases | version comes from the `vX.Y.Z` tag and must match `package.json` |
|
|
167
179
|
|
|
168
|
-
Version 1.8.
|
|
180
|
+
Version 1.8.18 keeps the TypeScript-first public package paths stable and adds serializable, denied-by-default execution intent, policy decision, handoff and internal-API contracts. They do not read a file, start a process, create a worker, instantiate WebAssembly, open a browser, call a provider, allocate host memory, write a database or dispatch remotely. An operator may supply a separately approved adapter later; the initial result remains a plan or a receipt. The current container targets `linux/amd64`, `linux/arm64` and `linux/ppc64le`; release evidence, readiness and verification remain serializable and caller-owned. Release workflows also include cache-retention operations and an automatic mobile artifact fallback that is identified according to its actual signing state. The dynamic debug collector remains an unchecked browser boundary because it monkey-patches browser APIs; the rest of the web surface remains strictly typechecked.
|
|
169
181
|
|
|
170
182
|
## Package surfaces and release automation
|
|
171
183
|
|
|
@@ -192,7 +204,7 @@ The core program will not transfer information to other networked systems unless
|
|
|
192
204
|
|
|
193
205
|
## GitHub Pages web surface
|
|
194
206
|
|
|
195
|
-
The marketing site lives under [`web/`](web/) with a root-based TypeScript/React layout. It has no `client/` or `src/` subdirectory. Vite normalizes the base path and all visual assets resolve through a shared helper, so the same build works at `/` and `/saddle/`.
|
|
207
|
+
The marketing site lives under [`web/`](web/) with a root-based TypeScript/React layout. It has no `client/` or `src/` subdirectory. Vite normalizes the base path and all visual assets resolve through a shared helper, so the same build works at `/` and `/saddle/`. Its `/playground` route projects the unified internal API boundaries with a fixed safe fixture; it is not a binary executor, service host, persistent store, remote browser or hidden backend.
|
|
196
208
|
|
|
197
209
|
```bash
|
|
198
210
|
npm run web:check
|
|
@@ -201,7 +213,7 @@ VITE_BASE_PATH=/saddle npm run web:build:pages
|
|
|
201
213
|
|
|
202
214
|
Small public configuration and visual assets live under `web/public/`. The development collector is TypeScript source at `web/lib/debugcollector.ts`, injected only in development, and uses `/debuglogs`; it is not part of the production build. The obsolete `web/public/__manus__` directory is intentionally absent.
|
|
203
215
|
|
|
204
|
-
## Development
|
|
216
|
+
## Development
|
|
205
217
|
|
|
206
218
|
```bash
|
|
207
219
|
npm ci
|
|
@@ -216,6 +228,19 @@ VITE_BASE_PATH=/saddle npm run web:build:pages
|
|
|
216
228
|
|
|
217
229
|
The engine test suite is deterministic and does not require real credentials or network access. The release path is: update `package.json` and the manifest files, update `changelog.md` and release notes, run all gates, create `v<package-version>`, push the tag and create the GitHub release. Registry workflows then derive the same version from that release tag. A package metadata change alone does not publish anything; the release tag is the intentional publication boundary.
|
|
218
230
|
|
|
231
|
+
## CLI
|
|
232
|
+
|
|
233
|
+
The published `saddle` executable is a local, adapter-oriented inspection surface. It intentionally lists only stable commands and does not turn a local invocation into remote dispatch.
|
|
234
|
+
|
|
235
|
+
| Command | Purpose | External effect |
|
|
236
|
+
| --- | --- | --- |
|
|
237
|
+
| `saddle help` | list the stable command surface | none |
|
|
238
|
+
| `saddle modes` | print the mode catalog as JSON | none |
|
|
239
|
+
| `saddle runexample` | execute a temporary local engine example | temporary local storage only |
|
|
240
|
+
| `saddle mcp` | print the available MCP tool declarations | none |
|
|
241
|
+
|
|
242
|
+
Remote execution, provider credentials, browser transport, persistence, proxy selection, captcha evidence handling and webhook dispatch remain caller-provided adapters. The CLI is therefore a way to inspect or exercise local contracts, not a substitute for an operator-owned deployment policy.
|
|
243
|
+
|
|
219
244
|
## Repository map
|
|
220
245
|
|
|
221
246
|
```text
|
|
@@ -245,11 +270,11 @@ The engine is TypeScript-first ESM with English JSDoc comments and a generated J
|
|
|
245
270
|
|
|
246
271
|
## Historical documentation
|
|
247
272
|
|
|
248
|
-
|
|
273
|
+
The repository history contains 41 root README revisions and several surface-specific records. Their durable ideas are consolidated here: storage-backed execution, bounded working sets, replaceable runners, content extraction, browser actions, workflow delivery, multi-registry packaging, explicit recovery contracts and caller-owned integrations. Historical references that describe superseded identities, obsolete Node baselines, speculative provider quotas, unavailable hosted services or removed layouts remain historical evidence rather than current promises.
|
|
249
274
|
|
|
250
275
|
## Current scope
|
|
251
276
|
|
|
252
|
-
Version 1.8.
|
|
277
|
+
Version 1.8.18 extends the TypeScript-first engine with flat project-owned desktop, Android and iOS build surfaces; explicit Capacitor staging boundaries; dotted release asset naming; helper-binary rejection; structured extraction provenance; browser context budgets; resumable workflow compensation; retention metadata; release-evidence contracts; and pure internal API execution-policy contracts. The web playground demonstrates request, policy and handoff states using a fixed fixture with no operational adapter. Browser binaries, provider credentials, hosted automation registration, persistent databases, captcha solvers, remote execution and production deployment remain caller-selected adapters. Future work should extend contracts without coupling the core to one forge, registry, browser or storage vendor.
|
|
253
278
|
|
|
254
279
|
## License
|
|
255
280
|
|
package/dist/index.d.ts
CHANGED
|
@@ -115,6 +115,7 @@ export * from "./modes/resolve.js";
|
|
|
115
115
|
export * from "./binary/build.js";
|
|
116
116
|
export * from "./binary/archive.js";
|
|
117
117
|
export * from "./binary/transform.js";
|
|
118
|
+
export * from "./isolation/contracts.js";
|
|
118
119
|
export * from "./api/rate.js";
|
|
119
120
|
export * from "./api/http.js";
|
|
120
121
|
export * from "./api/service.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -115,6 +115,7 @@ export * from "./modes/resolve.js";
|
|
|
115
115
|
export * from "./binary/build.js";
|
|
116
116
|
export * from "./binary/archive.js";
|
|
117
117
|
export * from "./binary/transform.js";
|
|
118
|
+
export * from "./isolation/contracts.js";
|
|
118
119
|
export * from "./api/rate.js";
|
|
119
120
|
export * from "./api/http.js";
|
|
120
121
|
export * from "./api/service.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* isolation contracts describe effect boundaries without executing binaries, touching hosts, or calling providers.
|
|
3
|
+
*/
|
|
4
|
+
/** Validates a bounded request for a privileged effect without performing it. */
|
|
5
|
+
export declare function executionrequest(input?: {}): Readonly<{
|
|
6
|
+
version: 1;
|
|
7
|
+
id: string;
|
|
8
|
+
effect: string;
|
|
9
|
+
target: string;
|
|
10
|
+
source: string;
|
|
11
|
+
budget: Readonly<{
|
|
12
|
+
maxbytes: number;
|
|
13
|
+
maxmilliseconds: number;
|
|
14
|
+
network: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
state: "requested";
|
|
17
|
+
}>;
|
|
18
|
+
/** Evaluates a requested effect against explicit policy, approval, and adapter declarations. */
|
|
19
|
+
export declare function executiondecision(request: any, input?: {}): Readonly<{
|
|
20
|
+
version: 1;
|
|
21
|
+
request: Readonly<{
|
|
22
|
+
version: 1;
|
|
23
|
+
id: string;
|
|
24
|
+
effect: string;
|
|
25
|
+
target: string;
|
|
26
|
+
source: string;
|
|
27
|
+
budget: Readonly<{
|
|
28
|
+
maxbytes: number;
|
|
29
|
+
maxmilliseconds: number;
|
|
30
|
+
network: boolean;
|
|
31
|
+
}>;
|
|
32
|
+
state: "requested";
|
|
33
|
+
}>;
|
|
34
|
+
state: "caller-delegates" | "denied";
|
|
35
|
+
reasons: readonly any[];
|
|
36
|
+
adapter: Readonly<{
|
|
37
|
+
owner: string;
|
|
38
|
+
capabilities: readonly string[];
|
|
39
|
+
}>;
|
|
40
|
+
effects: readonly any[];
|
|
41
|
+
}>;
|
|
42
|
+
/** Renders a side-effect-free handoff and never invokes an adapter. */
|
|
43
|
+
export declare function executionhandoff(input?: {}): Readonly<{
|
|
44
|
+
version: 1;
|
|
45
|
+
state: "execution-disabled";
|
|
46
|
+
code: "EXECUTION_POLICY_DENIED";
|
|
47
|
+
decision: Readonly<{
|
|
48
|
+
version: 1;
|
|
49
|
+
request: Readonly<{
|
|
50
|
+
version: 1;
|
|
51
|
+
id: string;
|
|
52
|
+
effect: string;
|
|
53
|
+
target: string;
|
|
54
|
+
source: string;
|
|
55
|
+
budget: Readonly<{
|
|
56
|
+
maxbytes: number;
|
|
57
|
+
maxmilliseconds: number;
|
|
58
|
+
network: boolean;
|
|
59
|
+
}>;
|
|
60
|
+
state: "requested";
|
|
61
|
+
}>;
|
|
62
|
+
state: "caller-delegates" | "denied";
|
|
63
|
+
reasons: readonly any[];
|
|
64
|
+
adapter: Readonly<{
|
|
65
|
+
owner: string;
|
|
66
|
+
capabilities: readonly string[];
|
|
67
|
+
}>;
|
|
68
|
+
effects: readonly any[];
|
|
69
|
+
}>;
|
|
70
|
+
effects: readonly any[];
|
|
71
|
+
}> | Readonly<{
|
|
72
|
+
version: 1;
|
|
73
|
+
state: "caller-delegates";
|
|
74
|
+
code: "CALLER_ADAPTER_REQUIRED";
|
|
75
|
+
decision: Readonly<{
|
|
76
|
+
version: 1;
|
|
77
|
+
request: Readonly<{
|
|
78
|
+
version: 1;
|
|
79
|
+
id: string;
|
|
80
|
+
effect: string;
|
|
81
|
+
target: string;
|
|
82
|
+
source: string;
|
|
83
|
+
budget: Readonly<{
|
|
84
|
+
maxbytes: number;
|
|
85
|
+
maxmilliseconds: number;
|
|
86
|
+
network: boolean;
|
|
87
|
+
}>;
|
|
88
|
+
state: "requested";
|
|
89
|
+
}>;
|
|
90
|
+
state: "caller-delegates" | "denied";
|
|
91
|
+
reasons: readonly any[];
|
|
92
|
+
adapter: Readonly<{
|
|
93
|
+
owner: string;
|
|
94
|
+
capabilities: readonly string[];
|
|
95
|
+
}>;
|
|
96
|
+
effects: readonly any[];
|
|
97
|
+
}>;
|
|
98
|
+
effects: readonly any[];
|
|
99
|
+
}>;
|
|
100
|
+
/** Validates a serializable envelope for a unified web internal API boundary. */
|
|
101
|
+
export declare function internalenvelope(input?: {}): Readonly<{
|
|
102
|
+
version: 1;
|
|
103
|
+
boundary: string;
|
|
104
|
+
requestid: string;
|
|
105
|
+
payload: any;
|
|
106
|
+
}>;
|
|
107
|
+
/** Creates pure internal API handlers for planning, policy, handoff, and evidence projections. */
|
|
108
|
+
export declare function internalapi(input?: {}): Readonly<{
|
|
109
|
+
handle: (envelope: any) => Readonly<{
|
|
110
|
+
version: 1;
|
|
111
|
+
boundary: any;
|
|
112
|
+
requestid: any;
|
|
113
|
+
state: any;
|
|
114
|
+
data: any;
|
|
115
|
+
effects: readonly any[];
|
|
116
|
+
}>;
|
|
117
|
+
}>;
|
|
118
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../isolation/contracts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,KAAK;;;;;;;;;;;;GAK1C;AAED,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,OAAO,KAAA,EAAE,KAAK,KAAK;;;;;;;;;;;;;;;;;;;;;;GAgBpD;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,KAAK,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAI1C;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,KAAK;;;;;GAG1C;AAED,kGAAkG;AAClG,wBAAgB,WAAW,CAAC,KAAK,KAAK;;;;;;;;;GAarC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* isolation contracts describe effect boundaries without executing binaries, touching hosts, or calling providers.
|
|
3
|
+
*/
|
|
4
|
+
const boundaries = new Set(["gateway", "planning", "policy", "materialization", "execution", "persistence", "evidence"]);
|
|
5
|
+
const effects = new Set(["binary-execution", "host-bridge", "remote-dispatch", "provider-access", "local-storage", "browser-session", "database", "network"]);
|
|
6
|
+
const targets = new Set(["local", "remote", "provider", "browser", "storage"]);
|
|
7
|
+
/** Validates a bounded request for a privileged effect without performing it. */
|
|
8
|
+
export function executionrequest(input = {}) {
|
|
9
|
+
const effect = valid(input.effect, effects, "execution effect");
|
|
10
|
+
const target = valid(input.target, targets, "execution target");
|
|
11
|
+
const source = digest(input.source, "execution source");
|
|
12
|
+
return Object.freeze({ version: 1, id: nonempty(input.id, "execution id"), effect, target, source, budget: budget(input.budget), state: "requested" });
|
|
13
|
+
}
|
|
14
|
+
/** Evaluates a requested effect against explicit policy, approval, and adapter declarations. */
|
|
15
|
+
export function executiondecision(request, input = {}) {
|
|
16
|
+
const normalized = executionrequest(request);
|
|
17
|
+
const policy = normalizedlist(input.policy?.alloweffects);
|
|
18
|
+
const policytargets = normalizedlist(input.policy?.allowtargets);
|
|
19
|
+
const approval = normalizedlist(input.approval?.effects);
|
|
20
|
+
const approvaltargets = normalizedlist(input.approval?.targets);
|
|
21
|
+
const capabilities = normalizedlist(input.adapter?.capabilities);
|
|
22
|
+
const reasons = [];
|
|
23
|
+
if (!policy.includes(normalized.effect))
|
|
24
|
+
reasons.push("policy-effect");
|
|
25
|
+
if (!policytargets.includes(normalized.target))
|
|
26
|
+
reasons.push("policy-target");
|
|
27
|
+
if (!approval.includes(normalized.effect))
|
|
28
|
+
reasons.push("approval-effect");
|
|
29
|
+
if (!approvaltargets.includes(normalized.target))
|
|
30
|
+
reasons.push("approval-target");
|
|
31
|
+
if (!capabilities.includes(normalized.effect))
|
|
32
|
+
reasons.push("adapter-capability");
|
|
33
|
+
if (!String(input.adapter?.owner ?? ""))
|
|
34
|
+
reasons.push("adapter-owner");
|
|
35
|
+
const allowed = reasons.length === 0;
|
|
36
|
+
return Object.freeze({ version: 1, request: normalized, state: allowed ? "caller-delegates" : "denied", reasons: Object.freeze(reasons), adapter: allowed ? Object.freeze({ owner: String(input.adapter.owner), capabilities: Object.freeze(capabilities) }) : null, effects: Object.freeze([]) });
|
|
37
|
+
}
|
|
38
|
+
/** Renders a side-effect-free handoff and never invokes an adapter. */
|
|
39
|
+
export function executionhandoff(input = {}) {
|
|
40
|
+
const decision = executiondecision(input.request, input.configuration);
|
|
41
|
+
if (decision.state !== "caller-delegates")
|
|
42
|
+
return Object.freeze({ version: 1, state: "execution-disabled", code: "EXECUTION_POLICY_DENIED", decision, effects: Object.freeze([]) });
|
|
43
|
+
return Object.freeze({ version: 1, state: "caller-delegates", code: "CALLER_ADAPTER_REQUIRED", decision, effects: Object.freeze([]) });
|
|
44
|
+
}
|
|
45
|
+
/** Validates a serializable envelope for a unified web internal API boundary. */
|
|
46
|
+
export function internalenvelope(input = {}) {
|
|
47
|
+
const boundary = valid(input.boundary, boundaries, "internal api boundary");
|
|
48
|
+
return Object.freeze({ version: 1, boundary, requestid: nonempty(input.requestid, "internal api requestid"), payload: freezeobject(input.payload ?? {}) });
|
|
49
|
+
}
|
|
50
|
+
/** Creates pure internal API handlers for planning, policy, handoff, and evidence projections. */
|
|
51
|
+
export function internalapi(input = {}) {
|
|
52
|
+
const configuration = freezeobject(input.configuration ?? {});
|
|
53
|
+
function handle(envelope) {
|
|
54
|
+
const request = internalenvelope(envelope);
|
|
55
|
+
if (request.boundary === "gateway")
|
|
56
|
+
return response(request, "accepted", { requestid: request.requestid });
|
|
57
|
+
if (request.boundary === "planning")
|
|
58
|
+
return response(request, "planned", { request: executionrequest(request.payload) });
|
|
59
|
+
if (request.boundary === "policy")
|
|
60
|
+
return response(request, "evaluated", { decision: executiondecision(request.payload.request, request.payload.configuration ?? configuration) });
|
|
61
|
+
if (request.boundary === "execution")
|
|
62
|
+
return response(request, "projected", { handoff: executionhandoff({ request: request.payload.request, configuration: request.payload.configuration ?? configuration }) });
|
|
63
|
+
if (request.boundary === "materialization")
|
|
64
|
+
return response(request, "planned", { state: "no-materialization", effects: Object.freeze([]) });
|
|
65
|
+
if (request.boundary === "persistence")
|
|
66
|
+
return response(request, "projected", { state: "ephemeral-fixture", effects: Object.freeze([]) });
|
|
67
|
+
return response(request, "recorded", { receipt: Object.freeze({ version: 1, state: String(request.payload.state ?? "unknown"), effects: Object.freeze([]) }) });
|
|
68
|
+
}
|
|
69
|
+
return Object.freeze({ handle });
|
|
70
|
+
}
|
|
71
|
+
function response(request, state, data) { return Object.freeze({ version: 1, boundary: request.boundary, requestid: request.requestid, state, data: freezeobject(data), effects: Object.freeze([]) }); }
|
|
72
|
+
function budget(input = {}) { return Object.freeze({ maxbytes: positive(input.maxbytes ?? 1, "execution budget maxbytes"), maxmilliseconds: positive(input.maxmilliseconds ?? 1, "execution budget maxmilliseconds"), network: input.network === true }); }
|
|
73
|
+
function normalizedlist(value) { return Object.freeze([...new Set(Array.isArray(value) ? value.map((entry) => String(entry)) : [])].sort()); }
|
|
74
|
+
function freezeobject(value) { if (!value || typeof value !== "object" || Array.isArray(value))
|
|
75
|
+
throw new TypeError("internal api payload must be an object"); return Object.freeze({ ...value }); }
|
|
76
|
+
function valid(value, collection, name) { const output = String(value ?? ""); if (!collection.has(output))
|
|
77
|
+
throw new TypeError(`${name} is invalid`); return output; }
|
|
78
|
+
function digest(value, name) { const output = String(value ?? "").toLowerCase(); if (!/^[a-f0-9]{64}$/.test(output))
|
|
79
|
+
throw new TypeError(`${name} sha256 is invalid`); return output; }
|
|
80
|
+
function nonempty(value, name) { const output = String(value ?? ""); if (!output)
|
|
81
|
+
throw new TypeError(`${name} is required`); return output; }
|
|
82
|
+
function positive(value, name) { const output = Number(value); if (!Number.isSafeInteger(output) || output < 1)
|
|
83
|
+
throw new TypeError(`${name} must be a positive safe integer`); return output; }
|
|
84
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../isolation/contracts.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -4,15 +4,14 @@ export declare function mcpserver(options?: {}): {
|
|
|
4
4
|
description: string;
|
|
5
5
|
}[];
|
|
6
6
|
handle(request: any): Promise<{
|
|
7
|
-
error?: undefined;
|
|
8
7
|
jsonrpc: string;
|
|
9
8
|
id: any;
|
|
10
9
|
result: {
|
|
11
10
|
tools: any;
|
|
12
11
|
content?: undefined;
|
|
13
12
|
};
|
|
14
|
-
} | {
|
|
15
13
|
error?: undefined;
|
|
14
|
+
} | {
|
|
16
15
|
jsonrpc: string;
|
|
17
16
|
id: any;
|
|
18
17
|
result: {
|
|
@@ -22,6 +21,7 @@ export declare function mcpserver(options?: {}): {
|
|
|
22
21
|
text: string;
|
|
23
22
|
}[];
|
|
24
23
|
};
|
|
24
|
+
error?: undefined;
|
|
25
25
|
} | {
|
|
26
26
|
result?: undefined;
|
|
27
27
|
jsonrpc: string;
|
package/dist/scrape/robots.js
CHANGED
|
@@ -43,7 +43,7 @@ export function robotsrules(text = "") { const directives = []; const groups = [
|
|
|
43
43
|
/** Fetches and caches a site's robots policy without failing the caller's scrape. */
|
|
44
44
|
export async function fetchRobotsTxt(siteUrl, options = {}) { const base = siteUrl.replace(/\/$/, ""); const robotsUrl = `${base}/robots.txt`; const cached = cache.get(robotsUrl); if (cached && Date.now() - cached.fetchedAt < cachettl)
|
|
45
45
|
return cached.robots; try {
|
|
46
|
-
const response = await fetch(robotsUrl, { headers: { "User-Agent": options.userAgent ?? "Saddle/1.8.
|
|
46
|
+
const response = await fetch(robotsUrl, { headers: { "User-Agent": options.userAgent ?? "Saddle/1.8.18" }, signal: AbortSignal.timeout(options.timeout ?? 5000) });
|
|
47
47
|
const robots = response.ok ? robotsrules(await response.text()) : robotsrules();
|
|
48
48
|
cache.set(robotsUrl, { robots, fetchedAt: Date.now() });
|
|
49
49
|
return robots;
|
|
@@ -152,3 +152,9 @@ The release-evidence API can normalize and evaluate results supplied by complete
|
|
|
152
152
|
The 1.8.17 candidate keeps the established release asset contract while expanding the GHCR image index to `linux/amd64`, `linux/arm64`, and `linux/ppc64le`. The workflow must inspect the pushed index before this document treats those platform variants as available. The attached `saddle.container.1.8.17.tar.gz` remains one archive artifact and is not evidence of a Windows container variant.
|
|
153
153
|
|
|
154
154
|
`windows/amd64`, `linux/arm/v7`, and `linux/386` are not claimed by this candidate. A Windows image requires its own versioned Windows base, Dockerfile, runner, and compatibility validation; the existing Debian Linux Dockerfile cannot produce it by adding a platform string. `unknown` descriptors are not runnable targets. The platform decision and evidence limits are detailed in [containerplatforms-1.8.17.md](containerplatforms-1.8.17.md).
|
|
155
|
+
|
|
156
|
+
## 1.8.17 verified container publication
|
|
157
|
+
|
|
158
|
+
The published [v1.8.17 release](https://github.com/wenathlan/saddle/releases/tag/v1.8.17) contains 38 attached assets, including `saddle.container.1.8.17.tar.gz`, `manifest.container.1.8.17.json`, and `sha256.container.1.8.17`. GHCR workflow run `31847952976` completed successfully after QEMU-enabled Buildx published and inspected the Linux OCI index. Its post-push assertion accepted exactly `linux/amd64`, `linux/arm64`, and `linux/ppc64le`; the amd64 variant was pulled, its OCI version label was compared with `1.8.17`, and `saddle help` completed.
|
|
159
|
+
|
|
160
|
+
The release container manifest identifies `ghcr.io/wenathlan/saddle:1.8.17` and preserves `caller-owned` as its signing state. The Android manifest records `ci-test-key`. Those explicit metadata states do not imply production signing, Windows container availability, notarization, vulnerability status, or any independent trust property.
|
|
@@ -30,6 +30,12 @@ The release workflows derive all names from `v1.8.17`. The expected artifact mat
|
|
|
30
30
|
|
|
31
31
|
These notes describe the release candidate and expected outputs. Registry availability, image index contents, scan results, signatures, SBOM validity, Android signing, iOS artifacts, and any platform-specific execution claim are recorded only after the relevant workflow output independently confirms them.
|
|
32
32
|
|
|
33
|
+
## Verified publication results
|
|
34
|
+
|
|
35
|
+
The published [v1.8.17 release](https://github.com/wenathlan/saddle/releases/tag/v1.8.17) is neither a draft nor a prerelease and contains **38 attached assets**: 20 primary artifacts, nine manifests, and nine checksum files. The desktop, mobile, extension, and target workflows completed successfully. The Android manifest records `ci-test-key` and the container manifest records `caller-owned`; neither state is presented as production signing or registry trust.
|
|
36
|
+
|
|
37
|
+
The six tag-driven registry workflows completed successfully in container-first order: GHCR, GitHub Packages npm, public npmjs, Maven, NuGet GitHub Packages, and RubyGems. GHCR run `31847952976` passed its QEMU-enabled build, scan, publication, manifest-index assertion for `linux/amd64`, `linux/arm64`, and `linux/ppc64le`, amd64 pull, OCI version-label comparison, and `saddle help` smoke test.
|
|
38
|
+
|
|
33
39
|
## References
|
|
34
40
|
|
|
35
41
|
[1]: https://docs.docker.com/build/building/multi-platform/ "Docker multi-platform builds"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Saddle 1.8.18
|
|
2
|
+
|
|
3
|
+
Saddle 1.8.18 adds a data-only isolation planning surface and a single-site playground. It does not turn the package into a VPS, a micro-VM, a database host, a remote browser, or an executor. A binary, browser, container, provider, storage, database, network, or host operation remains unavailable until an operator supplies a compatible adapter, an explicit policy and a matching approval. The initial web projection uses a fixed safe fixture and produces only plans, denials or caller-owned handoffs.
|
|
4
|
+
|
|
5
|
+
## Changes
|
|
6
|
+
|
|
7
|
+
| Area | Change |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| Isolation contracts | Adds `executionrequest`, `executiondecision` and `executionhandoff` to normalize intent, make the default denial explicit and render an adapter handoff without invoking it. |
|
|
10
|
+
| Internal API | Adds `internalenvelope` and `internalapi` for typed gateway, planning, policy, materialization, execution, persistence and evidence projections. |
|
|
11
|
+
| Package surface | Adds `@wenathlan/saddle/isolation` as a narrow browser-safe subpath instead of requiring the complete root export graph. |
|
|
12
|
+
| Default posture | Rejects effects without matching effect policy, target policy, approval, adapter capability and named adapter owner. The decision contains no effect invocation. |
|
|
13
|
+
| Playground | Adds the unified `/playground` route under `web/`, showing a fixed descriptor, six internal boundaries and the difference between denial and a still-non-executing handoff. |
|
|
14
|
+
| Versioning | Aligns active package, registry, native, extension, crawler, Capacitor and iOS metadata to `1.8.18`, with iOS build number `1008018`. |
|
|
15
|
+
|
|
16
|
+
## Operational boundary
|
|
17
|
+
|
|
18
|
+
An in-memory object, an in-memory database or a JavaScript data structure runs on the resources of its process host. It is not a VPS or a micro-VM. A remote browser, OCI sandbox, WebAssembly runtime and KVM micro-VM likewise require a real operator host and resource budget. The library does not select, pay for, create or use any such infrastructure. The new contracts make those future integration points explicit without activating them.
|
|
19
|
+
|
|
20
|
+
## Expected artifact matrix
|
|
21
|
+
|
|
22
|
+
The tag-driven release workflow derives names from `v1.8.18`. If the platform workflows complete, the candidate matrix contains the following 38 release assets. This is an expected matrix, not a claim that assets, registry entries, signatures, scans or platform execution have already been independently verified.
|
|
23
|
+
|
|
24
|
+
| Class | Expected assets |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| Primary artifacts | `saddle.aab.1.8.18.aab`, `saddle.apk.1.8.18.apk`, `saddle.browser.1.8.18.arm64.app.zip`, `saddle.browser.1.8.18.arm64.appimage`, `saddle.browser.1.8.18.arm64.deb`, `saddle.browser.1.8.18.arm64.dmg`, `saddle.browser.1.8.18.arm64.exe`, `saddle.browser.1.8.18.arm64.msi`, `saddle.browser.1.8.18.arm64.rpm`, `saddle.browser.1.8.18.x64.app.zip`, `saddle.browser.1.8.18.x64.appimage`, `saddle.browser.1.8.18.x64.deb`, `saddle.browser.1.8.18.x64.dmg`, `saddle.browser.1.8.18.x64.exe`, `saddle.browser.1.8.18.x64.msi`, `saddle.browser.1.8.18.x64.rpm`, `saddle.browser.1.8.18.x86.exe`, `saddle.browser.1.8.18.x86.msi`, `saddle.container.1.8.18.tar.gz`, `saddle.extension.1.8.18.zip` |
|
|
27
|
+
| Manifests | `manifest.android.1.8.18.json`, `manifest.container.1.8.18.json`, `manifest.desktop.linux.arm64.1.8.18.json`, `manifest.desktop.linux.x64.1.8.18.json`, `manifest.desktop.macos.arm64.1.8.18.json`, `manifest.desktop.macos.x64.1.8.18.json`, `manifest.desktop.windows.arm64.1.8.18.json`, `manifest.desktop.windows.x64.1.8.18.json`, `manifest.desktop.windows.x86.1.8.18.json` |
|
|
28
|
+
| Checksums | `sha256.android.1.8.18`, `sha256.container.1.8.18`, `sha256.desktop.linux.arm64.1.8.18`, `sha256.desktop.linux.x64.1.8.18`, `sha256.desktop.macos.arm64.1.8.18`, `sha256.desktop.macos.x64.1.8.18`, `sha256.desktop.windows.arm64.1.8.18`, `sha256.desktop.windows.x64.1.8.18`, `sha256.desktop.windows.x86.1.8.18` |
|
|
29
|
+
|
|
30
|
+
## Verification boundary
|
|
31
|
+
|
|
32
|
+
The deterministic engine suite has passed 139 active tests for this candidate. The web TypeScript check and static build have passed, and the `/playground` route was manually verified in its denial and handoff-projection states. Registry availability, image manifest inspection, scan results, signing status, SBOM validation, Android signing, iOS artifacts and attached release assets must be recorded only after their relevant workflow outputs independently complete.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# 1.8.18 isolation research record
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
This record classifies operational prerequisites for the execution adapters proposed for Saddle 1.8.18. It is evidence for planning only; it does not add a provider dependency, provision infrastructure, or assert that Saddle already operates any of the listed systems.
|
|
6
|
+
|
|
7
|
+
## Findings
|
|
8
|
+
|
|
9
|
+
| Technology | Verified finding | Saddle disposition |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| Neko | Neko is a self-hosted remote browser or desktop built around container images and WebRTC. Operation requires image selection, networking, authentication, and usually a TURN or port-routing strategy. Browser persistence and file access require explicit policy or volume configuration. | Treat as a caller-owned remote-browser adapter candidate. The root library can describe requirements and validate a receipt; it cannot claim remote browser isolation without a configured operator deployment. |
|
|
12
|
+
| gVisor | gVisor supplies the OCI `runsc` runtime for sandboxed containers. It has its own compatibility and performance boundaries and is not a conventional virtual machine. | Treat as a caller-owned OCI isolation adapter candidate. A plan must declare the image, mount, network, resource and receipt policy before dispatch. |
|
|
13
|
+
| Firecracker | Firecracker runs KVM micro-VMs and requires host KVM access, a compatible Linux architecture, kernel image, root filesystem image, and production jailer configuration. | Treat as a caller-owned micro-VM adapter candidate requiring dedicated host infrastructure. It cannot run in the transport-neutral root or be promised by the static website. |
|
|
14
|
+
|
|
15
|
+
## Planning implication
|
|
16
|
+
|
|
17
|
+
The feasible 1.8.18 foundation is a serializable, denied-by-default execution plan plus adapter interfaces and capability receipts. The initial `web/` playground can let an operator create and inspect plans, binary metadata and policy outcomes with safe local fixtures. It must not execute uploaded binaries, create sandboxes, attach to Docker, start browser sessions, manage credentials, or expose a network target without a separately configured backend.
|
|
18
|
+
|
|
19
|
+
## Submitted-material synthesis
|
|
20
|
+
|
|
21
|
+
The submitted conversation records request that the former multi-site design be consolidated into one `web/` site. The useful architectural intent is a single user-facing surface that has internal API boundaries corresponding to a gateway, a plan coordinator, a working-set/materialization layer, an executor boundary, a persistence boundary, and a receipt/audit projection. That intent is compatible with Saddle's contract model when each boundary is represented by a deterministic in-memory demonstration adapter by default.
|
|
22
|
+
|
|
23
|
+
The same records contain several claims that must not become product statements. A static site cannot be a server, a VPS, or a micro-VM by itself. An in-memory filesystem, SQLite `:memory:`, PouchDB memory adapter, or JavaScript object graph still consumes the memory and CPU of whichever process hosts it; it provides data isolation or a logical model, not no-hardware computation. An actual remote browser, binary processor, container, gVisor sandbox, or Firecracker micro-VM necessarily runs on some host and consumes its resources. A persistent embedded database necessarily consumes the host's storage. Those capabilities therefore remain disabled unless the caller explicitly provides an adapter and an approval; the default playground will demonstrate planning and denial paths only.
|
|
24
|
+
|
|
25
|
+
The requested product default is consequently recorded as: no user-machine access, no implicit network call, no provider account, no paid product, no free-tier product, no local disk use, no binary execution, no browser launch, and no remote dispatch. A caller may add a local, remote, storage, database, browser, container, or micro-VM adapter later, but the receipt must identify that it was enabled and what resources it is permitted to use.
|
|
26
|
+
|
|
27
|
+
## Submitted material provenance
|
|
28
|
+
|
|
29
|
+
1. User-provided `CONVERSA25.txt`
|
|
30
|
+
2. User-provided `CONVERSA26.txt`
|
|
31
|
+
3. User-provided `CONVERSA27.txt`
|
|
32
|
+
4. User-provided `conversa.txt`
|
|
33
|
+
5. User-provided `pasted_content.txt`
|
|
34
|
+
|
|
35
|
+
## Playground verification
|
|
36
|
+
|
|
37
|
+
The unified `/playground` route was built and inspected through a temporary preview. The rendered page presents the six internal boundaries, the fixed binary descriptor, a default `EXECUTION_POLICY_DENIED` projection with an empty effects list, and an optional handoff projection that remains explicitly non-executing. The navigation includes the new Playground route and the page copy distinguishes internal typed envelopes from hidden endpoints, second sites, remote machines, or active infrastructure. The responsive layout presents the boundary map as an editorial six-stage band and places the policy-state projection beside its two state controls without visually implying that either button starts an executor. Selecting the optional state changed the projection to `CALLER_ADAPTER_REQUIRED` with `caller-delegates` and an empty effects array; it did not add a real adapter or initiate an operation.
|
|
38
|
+
|
|
39
|
+
## Sources
|
|
40
|
+
|
|
41
|
+
1. [Neko documentation](https://neko.m1k1o.net/docs/v2)
|
|
42
|
+
2. [Firecracker getting started guide](https://github.com/firecracker-microvm/firecracker/blob/main/docs/getting-started.md)
|
|
43
|
+
3. [gVisor documentation](https://gvisor.dev/docs/)
|
|
Binary file
|