@wenathlan/saddle 1.8.13 → 1.8.15
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 +47 -9
- 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 +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +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/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 +22 -4
- package/docs/ecosystemplan.md +1 -1
- package/docs/enginearchitecture.md +28 -0
- 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/releaseassets.md +2 -2
- package/docs/releasenotes-1.8.12.md +17 -2
- package/docs/releasenotes-1.8.13.md +30 -2
- package/docs/releasenotes-1.8.14.md +67 -0
- package/docs/releasenotes-1.8.15.md +37 -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/README.md +1 -1
- package/extension/manifest.json +1 -1
- package/package.json +9 -2
|
@@ -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`.
|
package/docs/releaseassets.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Release assets
|
|
2
2
|
|
|
3
|
-
The Node-only release adapter creates deterministic metadata for caller-selected artifacts. For version `1.8.
|
|
3
|
+
The Node-only release adapter creates deterministic metadata for caller-selected artifacts. For version `1.8.14`, it writes dotted surface-specific names such as `sha256.desktop.1.8.14`, `manifest.desktop.1.8.14.json`, `sbom.desktop.1.8.14.cdx.json` and `provenance.desktop.1.8.14.intoto.jsonl`. The adapter rejects underscore-based public names and Rust build-helper executables. It never publishes, authenticates or selects a registry.
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npm run release:assets -- \
|
|
7
|
-
--version 1.8.
|
|
7
|
+
--version 1.8.14 \
|
|
8
8
|
--surface desktop \
|
|
9
9
|
--output build/release \
|
|
10
10
|
--artifact build/saddle.tgz \
|
|
@@ -17,7 +17,7 @@ Saddle 1.8.12 consolidates the root-first native surfaces, the GPL-3.0-only proj
|
|
|
17
17
|
|
|
18
18
|
## Artifact matrix
|
|
19
19
|
|
|
20
|
-
The release workflows derive the version from the release tag and use these lowercase dotted names.
|
|
20
|
+
The release workflows derive the version from the release tag and use these lowercase dotted names. The `v1.8.12` release was published and contains the generated assets listed below; iOS remains unavailable because Apple signing and provisioning were not configured.
|
|
21
21
|
|
|
22
22
|
| Surface | Architectures or mode | Expected artifact |
|
|
23
23
|
|---|---|---|
|
|
@@ -31,13 +31,28 @@ The release workflows derive the version from the release tag and use these lowe
|
|
|
31
31
|
|
|
32
32
|
Each generated surface must carry its checksum and manifest companion. Where enabled, CI also emits SBOM and provenance metadata. The signing state must be one of `unsigned`, `ci-test-key`, `caller-owned`, `notarized` or the exact provider status produced by CI. No unsigned artifact is described as trusted or production-signed.
|
|
33
33
|
|
|
34
|
+
## Verified attached assets
|
|
35
|
+
|
|
36
|
+
The release contains **38 attached assets**. Desktop binaries are unsigned, Android APK/AAB files use the explicitly labeled `ci-test-key`, and the container is marked `caller-owned`.
|
|
37
|
+
|
|
38
|
+
| Surface | Attached assets | Signing |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| Linux desktop | `saddle.browser.1.8.12.x64.deb`, `saddle.browser.1.8.12.x64.rpm`, `saddle.browser.1.8.12.x64.appimage`, `saddle.browser.1.8.12.arm64.deb`, `saddle.browser.1.8.12.arm64.rpm`, `saddle.browser.1.8.12.arm64.appimage` | `unsigned` |
|
|
41
|
+
| Windows desktop | `saddle.browser.1.8.12.x86.exe`, `saddle.browser.1.8.12.x86.msi`, `saddle.browser.1.8.12.x64.exe`, `saddle.browser.1.8.12.x64.msi`, `saddle.browser.1.8.12.arm64.exe`, `saddle.browser.1.8.12.arm64.msi` | `unsigned` |
|
|
42
|
+
| macOS desktop | `saddle.browser.1.8.12.x64.dmg`, `saddle.browser.1.8.12.x64.app.zip`, `saddle.browser.1.8.12.arm64.dmg`, `saddle.browser.1.8.12.arm64.app.zip` | `unsigned` |
|
|
43
|
+
| Android | `saddle.apk.1.8.12.apk`, `saddle.aab.1.8.12.aab` | `ci-test-key` |
|
|
44
|
+
| Container | `saddle.container.1.8.12.tar.gz` | `caller-owned` |
|
|
45
|
+
| Browser extension | `saddle.extension.1.8.12.zip` | `unsigned` |
|
|
46
|
+
| Manifests | `manifest.android.1.8.12.json`, `manifest.container.1.8.12.json`, `manifest.desktop.linux.arm64.1.8.12.json`, `manifest.desktop.linux.x64.1.8.12.json`, `manifest.desktop.macos.arm64.1.8.12.json`, `manifest.desktop.macos.x64.1.8.12.json`, `manifest.desktop.windows.arm64.1.8.12.json`, `manifest.desktop.windows.x64.1.8.12.json`, `manifest.desktop.windows.x86.1.8.12.json` | metadata |
|
|
47
|
+
| Checksums | `sha256.android.1.8.12`, `sha256.container.1.8.12`, `sha256.desktop.linux.arm64.1.8.12`, `sha256.desktop.linux.x64.1.8.12`, `sha256.desktop.macos.arm64.1.8.12`, `sha256.desktop.macos.x64.1.8.12`, `sha256.desktop.windows.arm64.1.8.12`, `sha256.desktop.windows.x64.1.8.12`, `sha256.desktop.windows.x86.1.8.12` | integrity metadata |
|
|
48
|
+
|
|
34
49
|
## Compatibility and upgrade notes
|
|
35
50
|
|
|
36
51
|
The public package remains `@wenathlan/saddle`. The release does not downgrade the package to `1.8.3`; the active version is `1.8.12`. Version `1.8.21` is reserved for the next objective-driven research and implementation cycle. SignPath Foundation approval and production code-signing credentials remain caller-owned and are not implied by this release note.
|
|
37
52
|
|
|
38
53
|
## Verification
|
|
39
54
|
|
|
40
|
-
The
|
|
55
|
+
The release validation workflow passed, and the live release contains the 38 assets listed above. The original release-event security and mobile jobs were superseded by successful, explicitly labeled manual reruns; no production signing claim is made.
|
|
41
56
|
|
|
42
57
|
## References
|
|
43
58
|
|
|
@@ -17,7 +17,7 @@ Saddle 1.8.13 carries the active code and release-facing manifests forward from
|
|
|
17
17
|
|
|
18
18
|
## Artifact contract
|
|
19
19
|
|
|
20
|
-
The active workflows derive names from the release tag. The
|
|
20
|
+
The active workflows derive names from the release tag. The `v1.8.13` release was published and contains the generated assets listed below; iOS remains unavailable because Apple signing and provisioning were not configured.
|
|
21
21
|
|
|
22
22
|
| Surface | Expected artifact family |
|
|
23
23
|
|---|---|
|
|
@@ -31,9 +31,37 @@ The active workflows derive names from the release tag. The following names are
|
|
|
31
31
|
|
|
32
32
|
Signing remains explicit. `unsigned`, `ci-test-key`, `caller-owned`, `notarized` and a provider-reported status are distinct states. This release note does not claim SignPath approval or production signing.
|
|
33
33
|
|
|
34
|
+
## Verified attached assets
|
|
35
|
+
|
|
36
|
+
The release contains **38 attached assets**. Desktop binaries are unsigned, Android APK/AAB files use the explicitly labeled `ci-test-key`, and the container is marked `caller-owned`.
|
|
37
|
+
|
|
38
|
+
| Surface | Attached assets | Signing |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| Linux desktop | `saddle.browser.1.8.13.x64.deb`, `saddle.browser.1.8.13.x64.rpm`, `saddle.browser.1.8.13.x64.appimage`, `saddle.browser.1.8.13.arm64.deb`, `saddle.browser.1.8.13.arm64.rpm`, `saddle.browser.1.8.13.arm64.appimage` | `unsigned` |
|
|
41
|
+
| Windows desktop | `saddle.browser.1.8.13.x86.exe`, `saddle.browser.1.8.13.x86.msi`, `saddle.browser.1.8.13.x64.exe`, `saddle.browser.1.8.13.x64.msi`, `saddle.browser.1.8.13.arm64.exe`, `saddle.browser.1.8.13.arm64.msi` | `unsigned` |
|
|
42
|
+
| macOS desktop | `saddle.browser.1.8.13.x64.dmg`, `saddle.browser.1.8.13.x64.app.zip`, `saddle.browser.1.8.13.arm64.dmg`, `saddle.browser.1.8.13.arm64.app.zip` | `unsigned` |
|
|
43
|
+
| Android | `saddle.apk.1.8.13.apk`, `saddle.aab.1.8.13.aab` | `ci-test-key` |
|
|
44
|
+
| Container | `saddle.container.1.8.13.tar.gz` | `caller-owned` |
|
|
45
|
+
| Browser extension | `saddle.extension.1.8.13.zip` | `unsigned` |
|
|
46
|
+
| Manifests | `manifest.android.1.8.13.json`, `manifest.container.1.8.13.json`, `manifest.desktop.linux.arm64.1.8.13.json`, `manifest.desktop.linux.x64.1.8.13.json`, `manifest.desktop.macos.arm64.1.8.13.json`, `manifest.desktop.macos.x64.1.8.13.json`, `manifest.desktop.windows.arm64.1.8.13.json`, `manifest.desktop.windows.x64.1.8.13.json`, `manifest.desktop.windows.x86.1.8.13.json` | metadata |
|
|
47
|
+
| Checksums | `sha256.android.1.8.13`, `sha256.container.1.8.13`, `sha256.desktop.linux.arm64.1.8.13`, `sha256.desktop.linux.x64.1.8.13`, `sha256.desktop.macos.arm64.1.8.13`, `sha256.desktop.macos.x64.1.8.13`, `sha256.desktop.windows.arm64.1.8.13`, `sha256.desktop.windows.x64.1.8.13`, `sha256.desktop.windows.x86.1.8.13` | integrity metadata |
|
|
48
|
+
|
|
49
|
+
## Registry publication
|
|
50
|
+
|
|
51
|
+
The six registry workflows derive the version from the same `v1.8.13` release tag through `.github/actions/releaseversion`. The release-event jobs completed successfully for GitHub Packages npm, public npmjs, Maven and RubyGems. GHCR completed successfully after the corrected Buildx and image-hardening rerun. NuGet was rerun manually from `main` and completed successfully with `Saddle.1.8.13.nupkg`; the package is published to GitHub Packages NuGet under the `wenathlan` owner. Public `nuget.org` was not targeted by the repository workflow and is not claimed here.
|
|
52
|
+
|
|
53
|
+
| Registry | Workflow | Verified version | Result |
|
|
54
|
+
|---|---|---:|---|
|
|
55
|
+
| GHCR | `publishghcr.yml` | `1.8.13` | success after corrected rerun |
|
|
56
|
+
| GitHub Packages npm | `publishgithubnpm.yml` | `1.8.13` | success |
|
|
57
|
+
| Public npmjs | `publishnpmjs.yml` | `1.8.13` | success |
|
|
58
|
+
| Maven GitHub Packages | `publishmaven.yml` | `1.8.13` | success |
|
|
59
|
+
| NuGet GitHub Packages | `publishnuget.yml` | `1.8.13` | success after explicit rerun |
|
|
60
|
+
| RubyGems GitHub Packages | `publishrubygems.yml` | `1.8.13` | success |
|
|
61
|
+
|
|
34
62
|
## Verification
|
|
35
63
|
|
|
36
|
-
The queue, structured extraction, browser context, workflow compensation and retention features passed the active engine and release test suites. The
|
|
64
|
+
The queue, structured extraction, browser context, workflow compensation and retention features passed the active engine and release test suites. The release validation workflow passed, and the live release contains the 38 assets listed above. The original release-event security, GHCR and mobile failures were superseded by successful corrected reruns; production signing remains pending.
|
|
37
65
|
|
|
38
66
|
## References
|
|
39
67
|
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Saddle 1.8.14 release notes
|
|
2
|
+
|
|
3
|
+
Saddle 1.8.14 carries the active code and release-facing manifests forward from 1.8.13. The 1.8.13 release notes remain the canonical record for the previous artifact set. The comparative 1.8.21 research remains planning material and is not presented as a separate shipped version.
|
|
4
|
+
|
|
5
|
+
## Changes
|
|
6
|
+
|
|
7
|
+
| Area | Change |
|
|
8
|
+
|---|---|
|
|
9
|
+
| Version identity | Aligned npm, lockfile, Maven, NuGet, RubyGems, browser extension, Tauri, Capacitor, iOS and crawler metadata to `1.8.14`. The iOS marketing version is `1.8.14` with build `1008014`. |
|
|
10
|
+
| Container | Added a build-stage TypeScript engine compilation, runtime-only `dist` copy, `org.opencontainers.image.version` label and post-push pull/label/CLI smoke validation. |
|
|
11
|
+
| Registry order | Documented GHCR as the first package surface, followed by GitHub Packages npm, public npmjs, Maven, NuGet and RubyGems. |
|
|
12
|
+
| Release automation | Kept the shared release-tag resolver as the only version source; workflows reject tag/package mismatches and do not contain per-release manual versions. |
|
|
13
|
+
| Architecture | Kept the root-first layout, no project-owned `src` directory, transport-neutral exports and caller-owned infrastructure. |
|
|
14
|
+
|
|
15
|
+
## Artifact contract
|
|
16
|
+
|
|
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
|
+
|
|
19
|
+
| Surface | Expected artifact family |
|
|
20
|
+
|---|---|
|
|
21
|
+
| Linux desktop | `saddle.browser.1.8.14.<architecture>.deb`, `.rpm`, `.appimage` |
|
|
22
|
+
| Windows desktop | `saddle.browser.1.8.14.<architecture>.exe`, `.msi` |
|
|
23
|
+
| macOS desktop | `saddle.browser.1.8.14.<architecture>.dmg`, `.app.zip` |
|
|
24
|
+
| Android | `saddle.apk.1.8.14.apk`, `saddle.aab.1.8.14.aab` |
|
|
25
|
+
| iOS | `saddle.ipa.1.8.14.ipa`, `saddle.app.1.8.14.app.zip` |
|
|
26
|
+
| Container | `saddle.container.1.8.14.tar.gz` |
|
|
27
|
+
| Browser extension | `saddle.extension.1.8.14.zip` |
|
|
28
|
+
|
|
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
|
+
|
|
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
|
+
|
|
46
|
+
## Registry publication
|
|
47
|
+
|
|
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.
|
|
49
|
+
|
|
50
|
+
| Registry | Workflow | Version | Verified result |
|
|
51
|
+
|---|---|---:|---|
|
|
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` |
|
|
58
|
+
|
|
59
|
+
## Verification policy
|
|
60
|
+
|
|
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.
|
|
62
|
+
|
|
63
|
+
## References
|
|
64
|
+
|
|
65
|
+
[1]: https://github.com/wenathlan/saddle "Saddle source repository"
|
|
66
|
+
[2]: https://github.com/wenathlan/saddle/releases "Saddle release archive"
|
|
67
|
+
[3]: https://github.com/wenathlan/saddle/blob/main/docs/releasenotes-1.8.13.md "Saddle 1.8.13 release notes"
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
## References
|
|
35
|
+
|
|
36
|
+
[1]: https://github.com/wenathlan/saddle "Saddle source repository"
|
|
37
|
+
[2]: https://github.com/wenathlan/saddle/releases "Saddle release archive"
|
|
@@ -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
|
|----------|------|
|
package/docs/talks9/README.md
CHANGED
|
@@ -22,13 +22,13 @@ Saddle is a **JavaScript ESM engine** for jobs that move data between storage, a
|
|
|
22
22
|
Saddle requires **Node.js 22 or newer**.
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
npm install @
|
|
25
|
+
npm install @wenathlan/saddle
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
The public API uses injected transports. A caller can use the built-in `fetch`, a custom fetcher, a browser adapter, a storage backend or a runner without changing the core contracts.
|
|
29
29
|
|
|
30
30
|
```js
|
|
31
|
-
import { scrapeurl, formatforagent } from "@
|
|
31
|
+
import { scrapeurl, formatforagent } from "@wenathlan/saddle";
|
|
32
32
|
|
|
33
33
|
const result = await scrapeurl("https://example.com", {
|
|
34
34
|
format: "markdown"
|
|
@@ -95,7 +95,7 @@ import {
|
|
|
95
95
|
localmemory,
|
|
96
96
|
localstorage,
|
|
97
97
|
scheduler
|
|
98
|
-
} from "@
|
|
98
|
+
} from "@wenathlan/saddle";
|
|
99
99
|
|
|
100
100
|
const events = eventbus();
|
|
101
101
|
const run = engine({
|
|
@@ -155,7 +155,7 @@ The release is distributed through the following GitHub Packages registries.
|
|
|
155
155
|
| NuGet | `Saddle 1.0.0` | [`publishnuget.yml`](.github/workflows/publishnuget.yml) |
|
|
156
156
|
| RubyGems | `saddle 1.0.0` | [`publishrubygems.yml`](.github/workflows/publishrubygems.yml) |
|
|
157
157
|
|
|
158
|
-
The canonical JavaScript package name remains `@
|
|
158
|
+
The canonical JavaScript package name remains `@wenathlan/saddle` for the public npmjs workflow. GitHub Packages uses `@iakadion/saddle` because the GitHub Actions token is authorized for the repository owner namespace.
|
|
159
159
|
|
|
160
160
|
## Development
|
|
161
161
|
|