@wenathlan/saddle 1.8.14 → 1.8.16
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 +2 -2
- package/dist/apps/registry.d.ts +1 -1
- package/dist/binary/archive.d.ts +27 -0
- package/dist/binary/archive.d.ts.map +1 -0
- package/dist/binary/archive.js +46 -0
- package/dist/binary/archive.js.map +1 -0
- package/dist/binary/transform.d.ts +70 -0
- package/dist/binary/transform.d.ts.map +1 -0
- package/dist/binary/transform.js +105 -0
- package/dist/binary/transform.js.map +1 -0
- package/dist/delivery/manifest.d.ts +35 -0
- package/dist/delivery/manifest.d.ts.map +1 -0
- package/dist/delivery/manifest.js +68 -0
- package/dist/delivery/manifest.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -3
- package/dist/memory/engine.d.ts +1 -1
- package/dist/memory/planner.d.ts +66 -0
- package/dist/memory/planner.d.ts.map +1 -0
- package/dist/memory/planner.js +108 -0
- package/dist/memory/planner.js.map +1 -0
- package/dist/release/evidence.d.ts +92 -0
- package/dist/release/evidence.d.ts.map +1 -0
- package/dist/release/evidence.js +148 -0
- package/dist/release/evidence.js.map +1 -0
- package/dist/runners/chain.d.ts +125 -0
- package/dist/runners/chain.d.ts.map +1 -0
- package/dist/runners/chain.js +95 -0
- package/dist/runners/chain.js.map +1 -0
- package/dist/scrape/robots.js +1 -1
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/memory.js +2 -2
- package/dist/storage/memory.js.map +1 -1
- package/dist/storage/pool.d.ts +95 -0
- package/dist/storage/pool.d.ts.map +1 -0
- package/dist/storage/pool.js +202 -0
- package/dist/storage/pool.js.map +1 -0
- package/dist/surfaces/requirements.d.ts +29 -0
- package/dist/surfaces/requirements.d.ts.map +1 -0
- package/dist/surfaces/requirements.js +50 -0
- package/dist/surfaces/requirements.js.map +1 -0
- package/docs/artifactavailability.md +13 -1
- package/docs/ecosystemplan.md +1 -1
- package/docs/enginearchitecture.md +30 -0
- package/docs/libraryapi.md +5 -1
- package/docs/plans/00.index.md +2 -2
- package/docs/plans/06.dependencies.md +1 -1
- package/docs/plans/18.research.content.extraction.md +3 -3
- package/docs/plans/22.research.universal.runtime.md +10 -10
- package/docs/plans/28.action.plan.md +1 -1
- package/docs/plans/35.comparativo.concorrencia.md +10 -10
- package/docs/plans/40.npm.publish.md +6 -6
- package/docs/plans/41.o.que.falta.md +2 -2
- package/docs/plans/42.pesquisa.concorrencia.md +2 -2
- package/docs/plans/43.plan.universal.architecture.md +2 -2
- package/docs/plans/44.reference.md +1 -1
- package/docs/plans/45.robotarchitecture.md +3 -3
- package/docs/plans/46.scdnintegration.md +1 -1
- package/docs/plans/README.md +2 -2
- package/docs/plans/missing-facts.md +1 -1
- package/docs/registryresearch.md +3 -3
- package/docs/release17notes.md +1 -1
- package/docs/releasenotes-1.8.14.md +24 -9
- package/docs/releasenotes-1.8.15.md +41 -0
- package/docs/releasenotes-1.8.16.md +40 -0
- package/docs/repo-research-1.8.16.md +439 -0
- package/docs/repo-synthesis-1.8.16.md +56 -0
- package/docs/talks9/README (2).md +2 -2
- package/docs/talks9/README.md +4 -4
- 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" +4 -4
- package/docs/talks9/conversa.txt +4 -4
- package/docs/todo-1.8.15.md +483 -0
- package/docs/todo-1.8.16.md +651 -0
- package/docs/todo.md +708 -0
- package/extension/manifest.json +1 -1
- package/package.json +10 -2
|
@@ -117,7 +117,7 @@ Each surface also emits `sha256.*.1.8.13`, `manifest.*.1.8.13.json` and, where e
|
|
|
117
117
|
|
|
118
118
|
## 1.8.14 release matrix
|
|
119
119
|
|
|
120
|
-
Version 1.8.14 keeps the release-tag-derived matrix and adds post-push container pull and smoke validation. The implementation records retention policy and keep/prune decisions but never removes caller-owned files. The release
|
|
120
|
+
Version 1.8.14 keeps the release-tag-derived matrix and adds post-push container pull and smoke validation. The implementation records retention policy and keep/prune decisions but never removes caller-owned files. The release contains 38 verified assets; iOS remains unavailable until caller-owned Apple signing and provisioning are configured.
|
|
121
121
|
|
|
122
122
|
| Surface | Architectures | Artifact naming contract |
|
|
123
123
|
| --- | --- | --- |
|
|
@@ -130,3 +130,15 @@ Version 1.8.14 keeps the release-tag-derived matrix and adds post-push container
|
|
|
130
130
|
| Browser extension | Manifest V3 | `saddle.extension.1.8.14.zip` |
|
|
131
131
|
|
|
132
132
|
Each surface also emits `sha256.*.1.8.14`, `manifest.*.1.8.14.json` and, where enabled by the release path, SBOM and provenance metadata. The Android manifest records `ci-test-key`, desktop manifests record `unsigned` and the container manifest records `caller-owned`. The container image additionally records `org.opencontainers.image.version=1.8.14`; the post-push workflow pulls that exact version and runs the CLI help smoke test.
|
|
133
|
+
|
|
134
|
+
The verified 1.8.14 release contains six Linux assets, six Windows assets, four macOS assets, two Android assets, one container archive, one browser extension, nine manifests and nine checksum files. The release-event mobile job did not bypass missing production credentials; the successful manual rerun used the explicit `ci-test-key` path.
|
|
135
|
+
|
|
136
|
+
## 1.8.15 verified release matrix
|
|
137
|
+
|
|
138
|
+
The published [v1.8.15 release](https://github.com/wenathlan/saddle/releases/tag/v1.8.15) contains 38 attached assets: six Linux desktop artifacts, six Windows desktop artifacts, four macOS desktop artifacts, two Android artifacts, one container archive, one browser extension, nine manifests, and nine checksum files. The primary artifacts use the dotted lowercase names `saddle.browser.1.8.15.<architecture>.<format>`, `saddle.apk.1.8.15.apk`, `saddle.aab.1.8.15.aab`, `saddle.container.1.8.15.tar.gz`, and `saddle.extension.1.8.15.zip`.
|
|
139
|
+
|
|
140
|
+
The available metadata files are `manifest.android.1.8.15.json`, `manifest.container.1.8.15.json`, the seven desktop `manifest.*.1.8.15.json` files, and the matching nine `sha256.*.1.8.15` files. The release record identifies Android as `ci-test-key`, desktop surfaces as `unsigned`, and the container as `caller-owned`; those declared states do not imply production signing, notarization, or registry trust.
|
|
141
|
+
|
|
142
|
+
## 1.8.16 candidate release matrix
|
|
143
|
+
|
|
144
|
+
Version 1.8.16 preserves the tag-derived 38-asset contract described in [releasenotes-1.8.16.md](releasenotes-1.8.16.md). Before tag workflows complete, every 1.8.16 entry is an expected output rather than an availability claim. The new release-evidence API can normalize and evaluate results supplied by completed verification adapters, but it cannot generate artifacts, change their signing state, publish them, or validate their registry availability.
|
package/docs/ecosystemplan.md
CHANGED
|
@@ -46,7 +46,7 @@ Each block follows the same loop:
|
|
|
46
46
|
3. Define the smallest transport-neutral contract.
|
|
47
47
|
4. Implement grouped logic in the domain folder without adding a vendor dependency unless required.
|
|
48
48
|
5. Add deterministic tests with fake transports and no real credentials.
|
|
49
|
-
6. Update API docs, README claims, changelog and `todo.md`.
|
|
49
|
+
6. Update API docs, README claims, changelog and `docs/todo.md`.
|
|
50
50
|
7. Run format, syntax, tests, package and security checks.
|
|
51
51
|
8. Commit and push the block before starting the next one.
|
|
52
52
|
|
|
@@ -32,11 +32,41 @@ The public contract uses plain objects and factory functions. The engine never r
|
|
|
32
32
|
| contract | responsibility | open choice |
|
|
33
33
|
|---|---|---|
|
|
34
34
|
| `storageadapter` | put, get, head, delete, and list artifacts | local, s3 compatible, webdav, hf, kaggle, or another backend |
|
|
35
|
+
| `storagepool` | read verified replicas, write to an explicit quorum, describe capabilities, and produce a repair plan | caller-authorized adapters with explicit priority and no background replication |
|
|
35
36
|
| `localmemory` | prepare, sync, and cleanup a working set | tmpfs, mmap, sqlite, r2, or a remote bridge |
|
|
37
|
+
| `workingbudget` / `workingadmission` / `bridgeplan` | plan bounded materialization and host-memory operations | caller-owned host adapter; the transport-neutral core never mounts, swaps, or executes a shell command |
|
|
38
|
+
| `providerchain` / `artifacthandoff` | select a declared eligible runner and prepare immutable transfer evidence | caller-authorized provider reports and a caller-owned dispatch or storage adapter |
|
|
39
|
+
| `deliverymanifest` / `verifydelivery` / `pwaplan` | verify immutable transport chunks and describe offline registration requirements | caller-owned CDN or web host; no dynamic import or service-worker registration from the core |
|
|
36
40
|
| `scheduler` | select the first available provider by stable priority | github, forgejo, gitea, gitlab, hf, kaggle, or custom |
|
|
37
41
|
| `engine` | coordinate the lifecycle and emit events | library, cli, browser, desktop, mobile, or service |
|
|
38
42
|
| `validatesession` | accept a versioned session record | browser capture, replay, or external event source |
|
|
39
43
|
|
|
44
|
+
`storagepool` is an additive storage contract. It selects members in stable caller-configured priority order, accepts only caller-owned adapters, verifies a returned digest when one is supplied by the caller or manifest, and returns per-member evidence. A quorum write reports partial outcomes and fails when the requested threshold is not met. `repairplan` is declarative: it identifies a source and candidate targets but never starts a background repair, probes an account, or mutates an adapter.
|
|
45
|
+
|
|
46
|
+
`workingadmission` selects serializable candidates against byte and entry budgets without reading data. `bridgeplan` can describe `temporaryfile`, `mmap`, `tmpfs`, `zram`, or `swap` only when a caller declares the capability. A returned `caller-executes` result contains preconditions and cleanup ownership; an unsupported capability is reported without a probe or side effect.
|
|
47
|
+
|
|
48
|
+
`materializationledger` records only validated materialization transitions and produces a `caller-cleans` plan. It does not unlink a file, unmount a volume, modify swap, or delete a remote replica.
|
|
49
|
+
|
|
50
|
+
`magicbytes`, `wasmplan`, `transformationkey`, `transformationcache`, and `executeisolated` define a separate binary boundary. The module classifies verified byte prefixes, plans bounded WASM work, invalidates cache reuse when source, compiler, key, or policy differ, and calls an injected isolated adapter only. It never creates a process, a container, a filesystem mount, or a network connection by itself.
|
|
51
|
+
|
|
52
|
+
`cacheeligibility` rejects reuse for outputs that are unverified, secret-bearing, private, environment-bound, or partial. It reports normalized reasons and never attempts to inspect, upload, or redact an artifact.
|
|
53
|
+
|
|
54
|
+
`archivelimits` and `archiveinspection` validate a caller-provided archive inventory before extraction. The contract rejects excess entry count, nested depth, output bytes, decompression ratio, absolute paths, and traversal paths. `extractarchive` requires an accepted inspection and an injected adapter, so the core neither opens an archive nor writes an extracted file.
|
|
55
|
+
|
|
56
|
+
`providerchain` consumes only explicit provider reports. It rejects unavailable, under-capacity, or capability-incompatible candidates with evidence, chooses the remaining candidate by stable priority, and emits a `caller-dispatches` plan rather than a remote request. `artifacthandoff` requires an artifact digest, size, provider identity, and retention choice before a caller transfers output to storage.
|
|
57
|
+
|
|
58
|
+
`renderdispatch` can serialize an existing dispatch plan only through an injected adapter. It does not post to a forge, create a workflow run, or own an authentication token.
|
|
59
|
+
|
|
60
|
+
`cancellationplan` represents a caller request to cancel a remote run. It deliberately reports the remote state as `unknown` until the selected provider adapter confirms an outcome, and it leaves any compensation decision to the caller.
|
|
61
|
+
|
|
62
|
+
`deliverymanifest` keeps ordered chunks immutable through content type, size, and SHA-256 metadata. `verifydelivery` checks received bytes without evaluating JavaScript or WASM. `pwaplan` only describes scope, offline intent, update policy, and declared service-worker support; the host decides whether to register anything.
|
|
63
|
+
|
|
64
|
+
`cdncapabilities` records only caller-reported delivery properties such as immutable caching, purge support, range delivery, integrity headers, CORS, and visibility. It never performs a CDN probe, purge, upload, or configuration mutation.
|
|
65
|
+
|
|
66
|
+
`releaseevidence` evaluates caller-supplied supply-chain and release metadata as data. It normalizes a subject digest, producer, workflow, evidence kind, verification method, timestamp and explicit status. `evaluateevidence` produces only `accepted`, `rejected`, or `insufficient` with stable reason codes; it never treats an unchecked declaration as a signature, trust decision, compliance result, or vulnerability assessment. `evidencefromverification` converts an already-completed `verifyassets` result into `checked` checksum evidence, retaining its explicit signing state as metadata and never upgrading an `unsigned` or caller-owned state into a signing claim. `releasereadiness` binds a source tag, observed manifest versions, gates, artifact-plan digest, publication targets, signing state, and evidence result into a serializable receipt. These contracts do not edit versions, create a tag, trigger a workflow, publish, sign, scan, download, or contact a registry.
|
|
67
|
+
|
|
68
|
+
`miniappplan`, `dnsplan`, and `applicationbridge` add deployment-neutral application requirements. Mini App plans reject token-bearing input and require an HTTPS origin plus a caller-selected validation method. DNS records list ownership, DNSSEC and HTTPS requirements but cannot buy a domain, change a zone, or obtain a certificate. Surface bridges only report declared capabilities for browser, desktop, mobile, extension, and Mini App targets.
|
|
69
|
+
|
|
40
70
|
## execution lifecycle
|
|
41
71
|
|
|
42
72
|
```text
|
package/docs/libraryapi.md
CHANGED
|
@@ -39,6 +39,8 @@ The public API is designed around injected transports. Consumers can use the sam
|
|
|
39
39
|
| `commandguard` | enforce caller-defined bot command scopes |
|
|
40
40
|
| `deliveryqueue` | retry webhook deliveries and retain dead letters |
|
|
41
41
|
| `nodeserver` | expose a Web Request/Response handler through Node HTTP |
|
|
42
|
+
| `releaseevidence` / `evaluateevidence` | normalize caller-supplied evidence and evaluate it against explicit policy with bounded decision reasons |
|
|
43
|
+
| `evidencefromverification` / `releasereadiness` | map an already-valid local checksum result and assemble a descriptive readiness receipt without performing a release |
|
|
42
44
|
| `@wenathlan/saddle/browser-playwright` | optional Node-only Playwright session adapter; the peer is caller-installed and the root remains vendor-neutral |
|
|
43
45
|
|
|
44
46
|
```js
|
|
@@ -56,10 +58,12 @@ The `fetcher`, browser adapter, persistence adapter, proxy pool, captcha solver,
|
|
|
56
58
|
|
|
57
59
|
## package surfaces
|
|
58
60
|
|
|
59
|
-
The package exposes explicit subpaths for `./browser`, `./bot`, `./captcha`, `./memory-engine`, and `./
|
|
61
|
+
The package exposes explicit subpaths for `./browser`, `./bot`, `./captcha`, `./memory-engine`, `./deploy`, and `./release-evidence`. Desktop, mobile, target-plan and n8n contracts are exported from the root entry; the root entry remains the complete compiled JavaScript API with generated TypeScript declarations for consumers that prefer one import.
|
|
60
62
|
|
|
61
63
|
The `./extension` subpath exposes browser-neutral message, snapshot and service-worker routing contracts. The concrete Manifest V3 files live in `extension/`; they are not imported by the core at runtime and do not require Chrome when the library is used as a Node package. The browser surface also exposes snapshots, tab/frame context, action results, bounded action batches and recording through `./browser`.
|
|
62
64
|
|
|
63
65
|
The current release exposes `desktopmanifest`, `mobilemanifest`, `desktopadapter`, `mobileadapter`, `n8nnode`, `n8nmatch`, `n8nexecute`, `controlsurface`, `controlservice`, and `workerbridge`. These factories describe surface boundaries and invoke caller-owned handlers; they do not install a native toolkit, start an n8n server, create a dashboard, or store credentials.
|
|
64
66
|
|
|
67
|
+
`releaseevidence` and `evaluateevidence` retain the status that a caller supplies instead of asserting a security property. `evidencefromverification` accepts only an already-valid `verifyassets` result and maps its checksum inventory to `checked` evidence; its signing field remains metadata, so `unsigned`, `caller-owned`, or `caller-configured` does not become a signature or reputation claim. `releasereadiness` is descriptive: it cannot alter files, create tags, invoke CI, publish artifacts, sign content, or contact registries.
|
|
68
|
+
|
|
65
69
|
The root entry is cross-runtime safe for the tested core contract. Filesystem, Node HTTP, persistent queue, file sessions, local memory and captcha evidence adapters remain available through explicit Node-only files or subpaths. `runtimecontract` reports the capabilities of the current global scope, while `memorystorage` provides a process-local backend for browser workers, Deno, Bun and deterministic tests.
|
package/docs/plans/00.index.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Index
|
|
2
2
|
|
|
3
|
-
Project: **UKA** — computer use agent, sandbox for AI and captcha bypass. Super bot with computational memory. Package `@
|
|
3
|
+
Project: **UKA** — computer use agent, sandbox for AI and captcha bypass. Super bot with computational memory. Package `@wenathlan/saddle`. Domain acquired.
|
|
4
4
|
|
|
5
5
|
Theme: computer use, bypasses, captcha, sandbox for AI, container for AI, multi-platform bot, storage-to-compute memory transformation.
|
|
6
6
|
|
|
@@ -30,7 +30,7 @@ Theme: computer use, bypasses, captcha, sandbox for AI, container for AI, multi-
|
|
|
30
30
|
| 37 | [deploystrategy.md](./37.deploystrategy.md) | Deploy strategies (Netlify, Vercel, CI/CD, Docker, VM) |
|
|
31
31
|
| 36 | [computational.memory.md](./36.computational.memory.md) | Storage-to-compute memory transformation system |
|
|
32
32
|
| 39 | [multi.platform.bot.md](./39.multi.platform.bot.md) | Multi-platform bot (GitHub, GitLab, Forgejo, Gitea, Discord) |
|
|
33
|
-
| 40 | [npm.publish.md](./40.npm.publish.md) | NPM package publishing (`@
|
|
33
|
+
| 40 | [npm.publish.md](./40.npm.publish.md) | NPM package publishing (`@wenathlan/saddle`) |
|
|
34
34
|
| 46 | [scdnintegration.md](./46.scdnintegration.md) | SCDN integration for assets and deployment |
|
|
35
35
|
| 44 | [reference.md](./44.reference.md) | Reference index for all saddle documentation |
|
|
36
36
|
| 33 | [bots.codigo.revisao.md](./33.bots.codigo.revisao.md) | Best AI code review bots (research) |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 06 Dependencies
|
|
2
2
|
|
|
3
|
-
Dependency list of the `@
|
|
3
|
+
Dependency list of the `@wenathlan/UKA` package, grouped by function. Total: 65 packages (including the dev tooling set). The user asked for "50 to 60, or 60+. Counting 10 more", so this set covers browser automation, ai/vision, sandbox, server, db, storage and validation.
|
|
4
4
|
|
|
5
5
|
## Browser automation and mouse (8)
|
|
6
6
|
1. `playwright` — real brave/chromium automation via cdp.
|
|
@@ -396,8 +396,8 @@ OpenGraph (OG) e Twitter Card são metadados usados para social sharing. Menos c
|
|
|
396
396
|
|
|
397
397
|
<!-- Twitter Card -->
|
|
398
398
|
<meta name="twitter:card" content="summary_large_image">
|
|
399
|
-
<meta name="twitter:site" content="@
|
|
400
|
-
<meta name="twitter:creator" content="@
|
|
399
|
+
<meta name="twitter:site" content="@wenathlan">
|
|
400
|
+
<meta name="twitter:creator" content="@nasblor">
|
|
401
401
|
<meta name="twitter:title" content="Título da Página">
|
|
402
402
|
<meta name="twitter:description" content="Descrição da Página">
|
|
403
403
|
<meta name="twitter:image" content="https://example.com/image.jpg">
|
|
@@ -868,7 +868,7 @@ console.log(result.siteName);
|
|
|
868
868
|
|
|
869
869
|
### turndown 7.2.4 (Padrão)
|
|
870
870
|
|
|
871
|
-
`turndown` é o conversor HTML→Markdown mais popular. Usado pelo `@
|
|
871
|
+
`turndown` é o conversor HTML→Markdown mais popular. Usado pelo `@wenathlan/webscrape`.
|
|
872
872
|
|
|
873
873
|
```ts
|
|
874
874
|
import TurndownService from 'turndown';
|
|
@@ -189,7 +189,7 @@ export async function readFile(path: string): Promise<string | null> {
|
|
|
189
189
|
|
|
190
190
|
```json
|
|
191
191
|
{
|
|
192
|
-
"name": "@
|
|
192
|
+
"name": "@wenathlan/webscrape",
|
|
193
193
|
"exports": {
|
|
194
194
|
".": {
|
|
195
195
|
"types": "./dist/index.d.ts",
|
|
@@ -216,16 +216,16 @@ export async function readFile(path: string): Promise<string | null> {
|
|
|
216
216
|
|
|
217
217
|
```typescript
|
|
218
218
|
// Node.js
|
|
219
|
-
import { scrape } from '@
|
|
219
|
+
import { scrape } from '@wenathlan/webscrape/node';
|
|
220
220
|
|
|
221
221
|
// Browser
|
|
222
|
-
import { scrape } from '@
|
|
222
|
+
import { scrape } from '@wenathlan/webscrape/browser';
|
|
223
223
|
|
|
224
224
|
// Deno
|
|
225
|
-
import { scrape } from '@
|
|
225
|
+
import { scrape } from '@wenathlan/webscrape/deno';
|
|
226
226
|
|
|
227
227
|
// Universal (só APIs comuns)
|
|
228
|
-
import { scrape } from '@
|
|
228
|
+
import { scrape } from '@wenathlan/webscrape';
|
|
229
229
|
```
|
|
230
230
|
|
|
231
231
|
### 4.3. unenv polyfills
|
|
@@ -615,10 +615,10 @@ npx @arethetypeswrong/cli
|
|
|
615
615
|
|
|
616
616
|
**Exemplo de output:**
|
|
617
617
|
```
|
|
618
|
-
@
|
|
618
|
+
@wenathlan/webscrape
|
|
619
619
|
|
|
620
620
|
"import" - ESM
|
|
621
|
-
✅ @
|
|
621
|
+
✅ @wenathlan/webscrape → ./dist/index.js
|
|
622
622
|
✅ Types: ./dist/index.d.ts
|
|
623
623
|
|
|
624
624
|
"require" - CJS
|
|
@@ -626,7 +626,7 @@ npx @arethetypeswrong/cli
|
|
|
626
626
|
💡 Add a "require" condition
|
|
627
627
|
|
|
628
628
|
"browser" - Browser ESM
|
|
629
|
-
✅ @
|
|
629
|
+
✅ @wenathlan/webscrape → ./dist/browser.js
|
|
630
630
|
```
|
|
631
631
|
|
|
632
632
|
### 9.3. other tools
|
|
@@ -636,7 +636,7 @@ npx @arethetypeswrong/cli
|
|
|
636
636
|
npx arethetypeswrong --pack
|
|
637
637
|
|
|
638
638
|
# Verificar size do bundle
|
|
639
|
-
npx bundlephobia @
|
|
639
|
+
npx bundlephobia @wenathlan/webscrape
|
|
640
640
|
|
|
641
641
|
# Verificar dependências circulares
|
|
642
642
|
npx madge --circular src/
|
|
@@ -896,7 +896,7 @@ export async function loadConfig(root = '.'): Promise<Config | null> {
|
|
|
896
896
|
|
|
897
897
|
```json
|
|
898
898
|
{
|
|
899
|
-
"name": "@
|
|
899
|
+
"name": "@wenathlan/webscrape",
|
|
900
900
|
"exports": {
|
|
901
901
|
".": {
|
|
902
902
|
"types": "./dist/index.d.ts",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Phase: planning + research done
|
|
4
4
|
- [x] Folder structure (mirrors `cli`/`debonair`): `docs/plans`, `docs/talks`, `docs/logs`, `tests/{examples,output,scripts}`, `web`, `.github/workflows`.
|
|
5
|
-
- [x] Config files: `package.json` (`@
|
|
5
|
+
- [x] Config files: `package.json` (`@wenathlan/saddle`, 65 deps), `tsconfig.json`, `biome.json`, `vitest.config.ts`, `.github/workflows/saddle-tests.yml`, `.gitignore`, `.npmrc`, `.nvmrc`, `README.md`.
|
|
6
6
|
- [x] Research done (computer use, hcaptcha bypass, vercel sandbox, atlas agent browser).
|
|
7
7
|
- [x] Planning docs in `docs/plans/` (01 to 12 + index).
|
|
8
8
|
- [x] Applied skill arch: no `src/`, no vercel/netlify functions, mysql2, socket, no localhost, lowercase files, production = `web/`.
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
## Sumário Executivo
|
|
10
10
|
|
|
11
|
-
`@
|
|
11
|
+
`@wenathlan/webscrape` é um toolkit de scraping all-in-one que ocupa um nicho único: combina HTTP scraping, browser automation, serialização multi-formato, formatação para IA e um servidor HTTP — tudo em um único pacote TypeScript, sem depender de serviços em nuvem. A análise técnica revela que, enquanto competitors como Crawlee e Scrapy dominam em infraestrutura de produção (filas persistentes, Docker, anti-detection), webscrape supera em integração com IA, estimativa de tokens e chunking para RAG.
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
@@ -226,14 +226,14 @@ Nenhum outro competitor suporta Bun nativamente. Crawlee e Puppeteer são Node-o
|
|
|
226
226
|
|
|
227
227
|
```typescript
|
|
228
228
|
// Um pacote faz TUDO:
|
|
229
|
-
import { scrapeUrl } from '@
|
|
230
|
-
import { crawl } from '@
|
|
231
|
-
import { batchScrape } from '@
|
|
232
|
-
import { serializeResult } from '@
|
|
233
|
-
import { formatForAgent } from '@
|
|
234
|
-
import { chunkMarkdown } from '@
|
|
235
|
-
import { generateLlmsTxt } from '@
|
|
236
|
-
import { createServer } from '@
|
|
229
|
+
import { scrapeUrl } from '@wenathlan/webscrape/scrape';
|
|
230
|
+
import { crawl } from '@wenathlan/webscrape/crawler';
|
|
231
|
+
import { batchScrape } from '@wenathlan/webscrape/batch';
|
|
232
|
+
import { serializeResult } from '@wenathlan/webscrape/serialize';
|
|
233
|
+
import { formatForAgent } from '@wenathlan/webscrape/agent';
|
|
234
|
+
import { chunkMarkdown } from '@wenathlan/webscrape/chunking';
|
|
235
|
+
import { generateLlmsTxt } from '@wenathlan/webscrape/llms-txt';
|
|
236
|
+
import { createServer } from '@wenathlan/webscrape/server';
|
|
237
237
|
```
|
|
238
238
|
|
|
239
239
|
**Nenhum competitor combina:**
|
|
@@ -373,7 +373,7 @@ O Redis serialization (`JSON.SET` command) é exclusivo — permite popular Redi
|
|
|
373
373
|
|
|
374
374
|
```json
|
|
375
375
|
// webscrape: 1 package
|
|
376
|
-
@
|
|
376
|
+
@wenathlan/webscrape
|
|
377
377
|
|
|
378
378
|
// Crawlee: multi-package
|
|
379
379
|
crawlee
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# NPM Package Publishing for Saddle Robot
|
|
2
2
|
|
|
3
|
-
> Package `@
|
|
3
|
+
> Package `@wenathlan/saddle` published to NPM registry.
|
|
4
4
|
> Acts as both library and CLI binary.
|
|
5
5
|
|
|
6
6
|
## Overview
|
|
@@ -16,7 +16,7 @@ bypass, and memory engine capabilities.
|
|
|
16
16
|
|
|
17
17
|
```json
|
|
18
18
|
{
|
|
19
|
-
"name": "@
|
|
19
|
+
"name": "@wenathlan/saddle",
|
|
20
20
|
"version": "1.0.0",
|
|
21
21
|
"description": "Super bot: agent browser, captcha bypass, multi-platform GitHub/GitLab/Forgejo/Gitea automation with computational memory",
|
|
22
22
|
"main": "lib/index.js",
|
|
@@ -129,11 +129,11 @@ git push --follow-tags
|
|
|
129
129
|
### As Library
|
|
130
130
|
|
|
131
131
|
```bash
|
|
132
|
-
npm install @
|
|
132
|
+
npm install @wenathlan/saddle
|
|
133
133
|
```
|
|
134
134
|
|
|
135
135
|
```javascript
|
|
136
|
-
import { SaddleRobot } from '@
|
|
136
|
+
import { SaddleRobot } from '@wenathlan/saddle'
|
|
137
137
|
|
|
138
138
|
const robot = new SaddleRobot({
|
|
139
139
|
platform: 'github',
|
|
@@ -146,7 +146,7 @@ await robot.start()
|
|
|
146
146
|
### As CLI
|
|
147
147
|
|
|
148
148
|
```bash
|
|
149
|
-
npm install -g @
|
|
149
|
+
npm install -g @wenathlan/saddle
|
|
150
150
|
|
|
151
151
|
saddle --help
|
|
152
152
|
saddle capture --url https://example.com
|
|
@@ -200,7 +200,7 @@ main()
|
|
|
200
200
|
## Scoped Package Structure
|
|
201
201
|
|
|
202
202
|
```
|
|
203
|
-
@
|
|
203
|
+
@wenathlan/saddle/
|
|
204
204
|
├── lib/
|
|
205
205
|
│ ├── index.js main entry point
|
|
206
206
|
│ ├── index.cjs CommonJS entry point
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
## Sumário
|
|
10
10
|
|
|
11
|
-
`@
|
|
11
|
+
`@wenathlan/webscrape` é um toolkit all-in-one que combina scraping, serialização multi-formato, AI formatting e chunking para RAG — um posicionamento único no mercado. No entanto, 3 gaps críticos impedem a adoção em produção: ausência de anti-detection real, queue persistente e suporte Docker. Este documento lista tudo que falta, priorizado por impacto.
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
- Puppeteer: `chrome-devtools-mcp`
|
|
147
147
|
|
|
148
148
|
**Implementação necessária:**
|
|
149
|
-
1. Criar pacote `@
|
|
149
|
+
1. Criar pacote `@wenathlan/webscrape-mcp`
|
|
150
150
|
2. Expor endpoints como MCP tools: `scrape`, `crawl`, `batch`, `extract`, `serialize`
|
|
151
151
|
3. Usar SDK oficial `@modelcontextprotocol/sdk`
|
|
152
152
|
4. Adicionar configuração MCP ao `cli.ts`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Competitive Research: webscrape vs. 7 Competitors
|
|
2
2
|
|
|
3
3
|
> **Date:** 2026-06-08
|
|
4
|
-
> **Objective:** Deep analysis of 7 direct/indirect competitors to identify gaps, opportunities, and architectural insights for the `@
|
|
4
|
+
> **Objective:** Deep analysis of 7 direct/indirect competitors to identify gaps, opportunities, and architectural insights for the `@wenathlan/webscrape` toolkit.
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -601,7 +601,7 @@ Request → [Downloader Middlewares] → Downloader → [Spider Middlewares] →
|
|
|
601
601
|
**Impact:** Cannot be used by AI agents (Claude, Cursor, Windsurf) natively.
|
|
602
602
|
|
|
603
603
|
**Recommendation:**
|
|
604
|
-
- Create `@
|
|
604
|
+
- Create `@wenathlan/webscrape-mcp` package
|
|
605
605
|
- Expose scrape/crawl/batch endpoints as MCP tools
|
|
606
606
|
- Integrate with Claude Desktop, VS Code, Cursor
|
|
607
607
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 1. Visão Geral
|
|
4
4
|
|
|
5
|
-
A biblioteca `@
|
|
5
|
+
A biblioteca `@wenathlan/webscrape` precisa funcionar em **TODOS os modos**:
|
|
6
6
|
|
|
7
7
|
| Modo | Como funciona |
|
|
8
8
|
|------|--------------|
|
|
@@ -404,7 +404,7 @@ export default defineConfig({
|
|
|
404
404
|
|
|
405
405
|
```json
|
|
406
406
|
{
|
|
407
|
-
"name": "@
|
|
407
|
+
"name": "@wenathlan/webscrape",
|
|
408
408
|
"version": "2.0.0",
|
|
409
409
|
"type": "module",
|
|
410
410
|
"main": "./dist/index.js",
|
|
@@ -175,13 +175,13 @@ CMD ["node", "server.js"]
|
|
|
175
175
|
|
|
176
176
|
## NPM Package Publishing
|
|
177
177
|
|
|
178
|
-
Saddle can be published as an NPM package `@
|
|
178
|
+
Saddle can be published as an NPM package `@wenathlan/saddle` for
|
|
179
179
|
distribution as both a library and a CLI tool.
|
|
180
180
|
|
|
181
181
|
### Package Structure
|
|
182
182
|
|
|
183
183
|
```
|
|
184
|
-
@
|
|
184
|
+
@wenathlan/saddle/
|
|
185
185
|
├── lib/
|
|
186
186
|
│ ├── browser.js (agent browser engine)
|
|
187
187
|
│ ├── bot.js (multi-platform bot engine)
|
|
@@ -200,7 +200,7 @@ distribution as both a library and a CLI tool.
|
|
|
200
200
|
|
|
201
201
|
| Mode | Entry Point | Usage |
|
|
202
202
|
|------|------------|-------|
|
|
203
|
-
| Library | `require('@
|
|
203
|
+
| Library | `require('@wenathlan/saddle')` | Import as Node module |
|
|
204
204
|
| CLI | `saddle --command capture` | Run as terminal command |
|
|
205
205
|
| Binary | `node_modules/.bin/saddle` | Direct execution |
|
|
206
206
|
|
|
@@ -144,7 +144,7 @@ class SCDNClient {
|
|
|
144
144
|
|
|
145
145
|
```typescript
|
|
146
146
|
// In browser capture module
|
|
147
|
-
import { SCDNClient } from '@
|
|
147
|
+
import { SCDNClient } from '@wenathlan/saddle/deploy'
|
|
148
148
|
|
|
149
149
|
async function uploadCaptureSession(
|
|
150
150
|
sessionData: SessionData,
|
package/docs/plans/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Binary computing agent, agent browser, computer-use, scraper and packager.
|
|
4
4
|
|
|
5
|
-
> **Storage turned into memory.** Saddle runs on other people's computers (GitHub Actions, Forgejo, Gitea, GitLab, Codeberg, free Docker containers) and turns unlimited third-party storage buckets into virtual RAM/GPU/CPU. **Nothing runs on the operator's local machine.** Ships as a library, CLI, binary, n8n node, CRX extension, Android/iOS and Tauri desktop app. Package `@
|
|
5
|
+
> **Storage turned into memory.** Saddle runs on other people's computers (GitHub Actions, Forgejo, Gitea, GitLab, Codeberg, free Docker containers) and turns unlimited third-party storage buckets into virtual RAM/GPU/CPU. **Nothing runs on the operator's local machine.** Ships as a library, CLI, binary, n8n node, CRX extension, Android/iOS and Tauri desktop app. Package `@wenathlan/saddle` — published to npm, GitHub Packages, Maven, NuGet, RubyGems and GitHub Containers (auto-mirrored to jsDelivr). It is simultaneously **sandbox + virtual machine + webhook server + workflow orchestrator (n8n-style) + packager + deployment system + integration platform** — sometimes each *is* the other three; the virtual VMs expose vCPU/VRAM/vGPU/virtual processing to the user, 100% on the internet, 100% virtual.
|
|
6
6
|
|
|
7
7
|
This document is the single source of truth, arranged as a progressive arc: **Foundation (1–6)**, **Engine (7–17)**, **Productization (18–31)**. Nothing here is attributed to external tooling; it is the project's own architecture.
|
|
8
8
|
|
|
@@ -368,7 +368,7 @@ Where a platform has no formal app portal (Telegram, Matrix), the robot is still
|
|
|
368
368
|
|
|
369
369
|
Sources: `api.kilo.ai`, `opencode.ai/zen`, `openrouter.ai`. Count with `js-tiktoken` / `gpt-tokenizer`.
|
|
370
370
|
|
|
371
|
-
22. **Packaging & Publishing** — `@
|
|
371
|
+
22. **Packaging & Publishing** — `@wenathlan/saddle` as **lib + CLI** (`saddle`); install `npm install @wenathlan/saddle` (global for CLI). Package layout: `lib/index.js` + `bin/saddle.js` (`node:util parseArgs{command, platform, token, verbose}`, default `help`), exports map subpaths `./browser, ./bot, ./captcha, ./memory-engine, ./deploy` (import/require dual) + `./index.cjs`. Scripts: `"build":"tsc"`, `"test":"vitest run"`, `"lint":"biome check ."`, `"typecheck":"tsc --noEmit"`, `"prepublishOnly":"npm run build && npm test"`, `"prepare":"husky"`. Version: semver `npm version patch|minor|major` + `git push --follow-tags`. Library API: `import { SaddleRobot } from '@wenathlan/saddle'; await robot.start(); await robot.executeCommand(cmd)`. `npm publish --access public` → auto-mirror jsDelivr/UNPKG/esm.sh.
|
|
372
372
|
|
|
373
373
|
| Registry | What |
|
|
374
374
|
|----------|------|
|
|
@@ -118,7 +118,7 @@ FILE: 40.npm.publish.md
|
|
|
118
118
|
- Pre-publish checklist
|
|
119
119
|
- As library (npm install) and CLI (npm install -g, saddle --command)
|
|
120
120
|
- Binary entry point: saddle.js
|
|
121
|
-
- Scoped package structure: @
|
|
121
|
+
- Scoped package structure: @wenathlaning/saddle/
|
|
122
122
|
- Versioning strategy: semver (patch/minor/major)
|
|
123
123
|
- 10-step pre-publish checklist
|
|
124
124
|
- No mention of these npm details
|
package/docs/registryresearch.md
CHANGED
|
@@ -34,15 +34,15 @@ The live GHCR workflow `31544093172` completed successfully, and the public pack
|
|
|
34
34
|
|
|
35
35
|
## live verification
|
|
36
36
|
|
|
37
|
-
The first `publishgithubnpm.yml` run failed with HTTP 403 because `@
|
|
37
|
+
The first `publishgithubnpm.yml` run failed with HTTP 403 because `@wenathlan/saddle` was not an authorized package namespace for the `iakadion/saddle` workflow. The corrected run `31543249301` completed successfully after rewriting the package name in the CI workspace to `@iakadion/saddle`. However, the repository Packages page still returned an empty listing immediately afterward, and the available GitHub API token could not read the user package namespace. The next verification must query the owner package page directly and inspect the workflow publish logs before treating the successful exit code as visible package availability.
|
|
38
38
|
|
|
39
39
|
The v1.7.0 release verification used workflow logs as the available artifact evidence. GitHub npm run `31549603859` published `@iakadion/saddle@1.7.0`; GHCR run `31549603838` pushed `ghcr.io/iakadion/saddle:1.7.0` and `latest`; Maven retry run `31549802841` uploaded `io.devthink:saddle:1.7.0`; RubyGems retry run `31549804286` registered `saddle (1.7.0)`; and NuGet retry run `31549972311` created and pushed `Saddle.1.7.0.nupkg`. The GitHub package-list API was not readable with the available integration token, so these statements are limited to successful workflow upload evidence rather than an independent package-page listing.
|
|
40
40
|
|
|
41
|
-
The first public npmjs run `31549603849` used OIDC and returned HTTP 404. Retry `31551708958` used the configured `NPM_TOKEN` secret, and retry `31551771374` confirmed that the masked secret reached the runner after newline normalization; both still returned HTTP 404 for `@
|
|
41
|
+
The first public npmjs run `31549603849` used OIDC and returned HTTP 404. Retry `31551708958` used the configured `NPM_TOKEN` secret, and retry `31551771374` confirmed that the masked secret reached the runner after newline normalization; both still returned HTTP 404 for `@wenathlan/saddle`. The identity-check retry `31552368723` reached `npm whoami` with a masked token but npm returned HTTP 401. The remaining blocker is the token itself or its account/scope permission: the owner must replace `NPM_TOKEN` with a valid raw npm access token authorized to publish `@wenathlan/saddle`. The exposed token from the prior conversation remains deliberately unused.
|
|
42
42
|
|
|
43
43
|
The cross-runtime workflow `31552266171` and its manual rerun `31552272176` completed successfully. The matrix ran the root probe on Node, Bun and Deno and the deterministic Node suite. The root entry no longer imports filesystem, Node HTTP, persistent queue, file-session or local-memory adapters; those remain explicit Node-only subpaths.
|
|
44
44
|
|
|
45
|
-
Release `v1.8.0` was created from commit `9ddfd6c`. GitHub npm run `31556461901`, GHCR run `31556461887`, NuGet run `31556461883` and RubyGems run `31556461991` completed successfully for `1.8.0`. Maven run `31556461885` initially failed because setup-java rejects `latest`; after changing the workflow to JDK 26, manual run `31556549154` completed successfully. Public npmjs run `31556461909` produced the `@
|
|
45
|
+
Release `v1.8.0` was created from commit `9ddfd6c`. GitHub npm run `31556461901`, GHCR run `31556461887`, NuGet run `31556461883` and RubyGems run `31556461991` completed successfully for `1.8.0`. Maven run `31556461885` initially failed because setup-java rejects `latest`; after changing the workflow to JDK 26, manual run `31556549154` completed successfully. Public npmjs run `31556461909` produced the `@wenathlan/saddle@1.8.0` tarball but the registry rejected the PUT with HTTP 404 `Scope not found`; no public npmjs publication is claimed.
|
|
46
46
|
|
|
47
47
|
The active package identity on main is now `@wenathlan/saddle`. The repository has since transferred to `wenathlan`; the authenticated `iakadion` account retains administrator permission. Release `v1.8.2` is the first release prepared against the transferred repository owner for GitHub Packages npm, Maven and GHCR.
|
|
48
48
|
|
package/docs/release17notes.md
CHANGED
|
@@ -21,4 +21,4 @@ The release was prepared with the deterministic Node test runner, format checks,
|
|
|
21
21
|
|
|
22
22
|
## Registry targets
|
|
23
23
|
|
|
24
|
-
The release workflows target GitHub Packages npm, npmjs through OIDC Trusted Publishing, GHCR, Maven, NuGet and RubyGems. Each package is verified from its workflow result before being reported as published. npmjs publication remains conditional on the one-time Trusted Publisher configuration for `@
|
|
24
|
+
The release workflows target GitHub Packages npm, npmjs through OIDC Trusted Publishing, GHCR, Maven, NuGet and RubyGems. Each package is verified from its workflow result before being reported as published. npmjs publication remains conditional on the one-time Trusted Publisher configuration for `@wenathlan/saddle`.
|
|
@@ -14,7 +14,7 @@ Saddle 1.8.14 carries the active code and release-facing manifests forward from
|
|
|
14
14
|
|
|
15
15
|
## Artifact contract
|
|
16
16
|
|
|
17
|
-
The active workflows derive names from the `v1.8.14` release tag. The
|
|
17
|
+
The active workflows derive names from the `v1.8.14` release tag. The release was verified with 38 uploaded assets listed below; iOS remains unavailable because Apple signing and provisioning are caller-owned and were not configured.
|
|
18
18
|
|
|
19
19
|
| Surface | Expected artifact family |
|
|
20
20
|
|---|---|
|
|
@@ -28,22 +28,37 @@ The active workflows derive names from the `v1.8.14` release tag. The expected a
|
|
|
28
28
|
|
|
29
29
|
Signing remains explicit. `unsigned`, `ci-test-key`, `caller-owned`, `notarized` and a provider-reported status are distinct states. These notes do not claim SignPath approval or production signing.
|
|
30
30
|
|
|
31
|
+
## Verified attached assets
|
|
32
|
+
|
|
33
|
+
The release contains **38 uploaded assets**. Desktop artifacts are unsigned, Android artifacts use the explicitly labeled `ci-test-key`, the container is `caller-owned` and the extension is unsigned.
|
|
34
|
+
|
|
35
|
+
| Surface | Attached assets | Signing |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| Linux desktop | `saddle.browser.1.8.14.arm64.appimage`, `saddle.browser.1.8.14.arm64.deb`, `saddle.browser.1.8.14.arm64.rpm`, `saddle.browser.1.8.14.x64.appimage`, `saddle.browser.1.8.14.x64.deb`, `saddle.browser.1.8.14.x64.rpm` | `unsigned` |
|
|
38
|
+
| Windows desktop | `saddle.browser.1.8.14.arm64.exe`, `saddle.browser.1.8.14.arm64.msi`, `saddle.browser.1.8.14.x64.exe`, `saddle.browser.1.8.14.x64.msi`, `saddle.browser.1.8.14.x86.exe`, `saddle.browser.1.8.14.x86.msi` | `unsigned` |
|
|
39
|
+
| macOS desktop | `saddle.browser.1.8.14.arm64.app.zip`, `saddle.browser.1.8.14.arm64.dmg`, `saddle.browser.1.8.14.x64.app.zip`, `saddle.browser.1.8.14.x64.dmg` | `unsigned` |
|
|
40
|
+
| Android | `saddle.apk.1.8.14.apk`, `saddle.aab.1.8.14.aab` | `ci-test-key` |
|
|
41
|
+
| Container | `saddle.container.1.8.14.tar.gz` | `caller-owned` |
|
|
42
|
+
| Browser extension | `saddle.extension.1.8.14.zip` | `unsigned` |
|
|
43
|
+
| Manifests | Nine `manifest.*.1.8.14.json` files covering Android, container, Linux, macOS and Windows | metadata |
|
|
44
|
+
| Checksums | Nine `sha256.*.1.8.14` files covering Android, container, Linux, macOS and Windows | integrity metadata |
|
|
45
|
+
|
|
31
46
|
## Registry publication
|
|
32
47
|
|
|
33
48
|
The six registry workflows derive the version from the same `v1.8.14` release tag through `.github/actions/releaseversion`. GHCR is listed first in the package order and must build, scan, push, pull and smoke-test the published image before the job is successful. The remaining workflows publish GitHub Packages npm, public npmjs, Maven, NuGet GitHub Packages and RubyGems from the same validated version. Public `nuget.org` is not targeted by the current repository workflow.
|
|
34
49
|
|
|
35
|
-
| Registry | Workflow | Version |
|
|
50
|
+
| Registry | Workflow | Version | Verified result |
|
|
36
51
|
|---|---|---:|---|
|
|
37
|
-
| GHCR | `publishghcr.yml` | `1.8.14` |
|
|
38
|
-
| GitHub Packages npm | `publishgithubnpm.yml` | `1.8.14` |
|
|
39
|
-
| Public npmjs | `publishnpmjs.yml` | `1.8.14` |
|
|
40
|
-
| Maven GitHub Packages | `publishmaven.yml` | `1.8.14` |
|
|
41
|
-
| NuGet GitHub Packages | `publishnuget.yml` | `1.8.14` |
|
|
42
|
-
| RubyGems GitHub Packages | `publishrubygems.yml` | `1.8.14` |
|
|
52
|
+
| GHCR | `publishghcr.yml` | `1.8.14` | success; run `31806235613` also pulled, inspected and smoke-tested the image |
|
|
53
|
+
| GitHub Packages npm | `publishgithubnpm.yml` | `1.8.14` | success; run `31806235570` |
|
|
54
|
+
| Public npmjs | `publishnpmjs.yml` | `1.8.14` | success; run `31806235515` |
|
|
55
|
+
| Maven GitHub Packages | `publishmaven.yml` | `1.8.14` | success; run `31806235540` |
|
|
56
|
+
| NuGet GitHub Packages | `publishnuget.yml` | `1.8.14` | success; run `31806235606` |
|
|
57
|
+
| RubyGems GitHub Packages | `publishrubygems.yml` | `1.8.14` | success; run `31806235523` |
|
|
43
58
|
|
|
44
59
|
## Verification policy
|
|
45
60
|
|
|
46
|
-
Local gates
|
|
61
|
+
Local gates passed before the tag was created. Desktop run `31806235468` completed successfully. The release-event mobile run `31806235484` correctly refused to claim production signing because the Android secrets were absent; manual run `31806605994` with `allow_test_signing=true` completed successfully and attached the APK/AAB as `ci-test-key`. Production signing remains pending until caller-owned certificates and provider configuration are supplied.
|
|
47
62
|
|
|
48
63
|
## References
|
|
49
64
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Saddle 1.8.15
|
|
2
|
+
|
|
3
|
+
Saddle 1.8.15 adds transport-neutral contracts for verified storage, bounded working sets, isolated transformations, provider selection and immutable delivery. The shared core remains declarative: it does not create runners, start containers, register service workers, mutate DNS, transfer artifacts or execute binaries without a caller-owned adapter.
|
|
4
|
+
|
|
5
|
+
## Changes
|
|
6
|
+
|
|
7
|
+
| Area | Change |
|
|
8
|
+
|---|---|
|
|
9
|
+
| Storage | Added verified pool reads, primary/mirror/fan-out writes, quorum evidence, operation budgets, range reads, repair plans and verified-source restore plans. |
|
|
10
|
+
| Memory | Added bounded working-set admission, capability-gated bridge plans, materialization transitions and declarative cleanup plans. |
|
|
11
|
+
| Transformations | Added magic-byte classification, bounded WASM plans, isolated adapters, archive inspection limits and cache eligibility controls. |
|
|
12
|
+
| Providers | Added capability-based selection, caller preferences, dry-run rendering, integrity-bound handoff and cancellation plans with unknown remote state preserved. |
|
|
13
|
+
| Delivery | Added immutable chunk manifests, verification without evaluation, PWA/CDN capability reports, Mini App validation requirements and DNS/application bridge descriptors. |
|
|
14
|
+
| Validation | Active tests increased to 132 while the 69 legacy tests remain green; package, flat native, web and audit gates passed. |
|
|
15
|
+
|
|
16
|
+
## Artifact contract
|
|
17
|
+
|
|
18
|
+
The release workflows derive artifact names and package versions from `v1.8.15`. The following artifact families are expected from the release pipelines; signing remains explicit and is never inferred from a filename.
|
|
19
|
+
|
|
20
|
+
| Surface | Artifact family |
|
|
21
|
+
|---|---|
|
|
22
|
+
| Linux desktop | `saddle.browser.1.8.15.<architecture>.deb`, `.rpm`, `.appimage` |
|
|
23
|
+
| Windows desktop | `saddle.browser.1.8.15.<architecture>.exe`, `.msi` |
|
|
24
|
+
| macOS desktop | `saddle.browser.1.8.15.<architecture>.dmg`, `.app.zip` |
|
|
25
|
+
| Android | `saddle.apk.1.8.15.apk`, `saddle.aab.1.8.15.aab` |
|
|
26
|
+
| iOS | `saddle.ipa.1.8.15.ipa`, `saddle.app.1.8.15.app.zip` |
|
|
27
|
+
| Container | `saddle.container.1.8.15.tar.gz` |
|
|
28
|
+
| Browser extension | `saddle.extension.1.8.15.zip` |
|
|
29
|
+
|
|
30
|
+
## Publication and verification policy
|
|
31
|
+
|
|
32
|
+
The six registry workflows publish from the same validated release tag, in container-first order: GHCR, GitHub Packages npm, public npmjs, Maven, NuGet GitHub Packages and RubyGems. GHCR must build, scan, push, pull, inspect its OCI version label and complete a smoke check. Production signing remains caller-owned; the release does not claim SignPath approval, Apple notarization or a production Android signing key unless a workflow reports those states.
|
|
33
|
+
|
|
34
|
+
## Verified publication results
|
|
35
|
+
|
|
36
|
+
The v1.8.15 release has **38 attached assets** after the desktop rerun completed. GHCR, GitHub Packages npm, npmjs, Maven, NuGet and RubyGems completed successfully from the release event. The initial release-event Android job correctly failed because no production signing secrets were present; manual run `31835215420` completed with the explicitly labeled `ci-test-key` fallback. The desktop rerun completed after a transient macOS asset-attachment failure, without changing the tag or claiming notarization.
|
|
37
|
+
|
|
38
|
+
## References
|
|
39
|
+
|
|
40
|
+
[1]: https://github.com/wenathlan/saddle "Saddle source repository"
|
|
41
|
+
[2]: https://github.com/wenathlan/saddle/releases "Saddle release archive"
|