@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.
Files changed (75) hide show
  1. package/README.md +47 -9
  2. package/dist/binary/archive.d.ts +27 -0
  3. package/dist/binary/archive.d.ts.map +1 -0
  4. package/dist/binary/archive.js +46 -0
  5. package/dist/binary/archive.js.map +1 -0
  6. package/dist/binary/transform.d.ts +70 -0
  7. package/dist/binary/transform.d.ts.map +1 -0
  8. package/dist/binary/transform.js +105 -0
  9. package/dist/binary/transform.js.map +1 -0
  10. package/dist/delivery/manifest.d.ts +35 -0
  11. package/dist/delivery/manifest.d.ts.map +1 -0
  12. package/dist/delivery/manifest.js +68 -0
  13. package/dist/delivery/manifest.js.map +1 -0
  14. package/dist/index.d.ts +7 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +7 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/memory/planner.d.ts +66 -0
  19. package/dist/memory/planner.d.ts.map +1 -0
  20. package/dist/memory/planner.js +108 -0
  21. package/dist/memory/planner.js.map +1 -0
  22. package/dist/runners/chain.d.ts +125 -0
  23. package/dist/runners/chain.d.ts.map +1 -0
  24. package/dist/runners/chain.js +95 -0
  25. package/dist/runners/chain.js.map +1 -0
  26. package/dist/scrape/robots.js +1 -1
  27. package/dist/storage/index.d.ts +1 -0
  28. package/dist/storage/index.d.ts.map +1 -1
  29. package/dist/storage/index.js +1 -0
  30. package/dist/storage/index.js.map +1 -1
  31. package/dist/storage/memory.js +2 -2
  32. package/dist/storage/memory.js.map +1 -1
  33. package/dist/storage/pool.d.ts +95 -0
  34. package/dist/storage/pool.d.ts.map +1 -0
  35. package/dist/storage/pool.js +202 -0
  36. package/dist/storage/pool.js.map +1 -0
  37. package/dist/surfaces/requirements.d.ts +29 -0
  38. package/dist/surfaces/requirements.d.ts.map +1 -0
  39. package/dist/surfaces/requirements.js +50 -0
  40. package/dist/surfaces/requirements.js.map +1 -0
  41. package/docs/artifactavailability.md +22 -4
  42. package/docs/ecosystemplan.md +1 -1
  43. package/docs/enginearchitecture.md +28 -0
  44. package/docs/plans/00.index.md +2 -2
  45. package/docs/plans/06.dependencies.md +1 -1
  46. package/docs/plans/18.research.content.extraction.md +3 -3
  47. package/docs/plans/22.research.universal.runtime.md +10 -10
  48. package/docs/plans/28.action.plan.md +1 -1
  49. package/docs/plans/35.comparativo.concorrencia.md +10 -10
  50. package/docs/plans/40.npm.publish.md +6 -6
  51. package/docs/plans/41.o.que.falta.md +2 -2
  52. package/docs/plans/42.pesquisa.concorrencia.md +2 -2
  53. package/docs/plans/43.plan.universal.architecture.md +2 -2
  54. package/docs/plans/44.reference.md +1 -1
  55. package/docs/plans/45.robotarchitecture.md +3 -3
  56. package/docs/plans/46.scdnintegration.md +1 -1
  57. package/docs/plans/README.md +2 -2
  58. package/docs/plans/missing-facts.md +1 -1
  59. package/docs/registryresearch.md +3 -3
  60. package/docs/release17notes.md +1 -1
  61. package/docs/releaseassets.md +2 -2
  62. package/docs/releasenotes-1.8.12.md +17 -2
  63. package/docs/releasenotes-1.8.13.md +30 -2
  64. package/docs/releasenotes-1.8.14.md +67 -0
  65. package/docs/releasenotes-1.8.15.md +37 -0
  66. package/docs/talks9/README (2).md +2 -2
  67. package/docs/talks9/README.md +4 -4
  68. 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
  69. package/docs/talks9/conversa.txt +4 -4
  70. package/docs/todo-1.8.15.md +483 -0
  71. package/docs/todo-1.8.16.md +651 -0
  72. package/docs/todo.md +708 -0
  73. package/extension/README.md +1 -1
  74. package/extension/manifest.json +1 -1
  75. 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": "@devthink/webscrape",
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 '@devthink/webscrape/node';
219
+ import { scrape } from '@wenathlan/webscrape/node';
220
220
 
221
221
  // Browser
222
- import { scrape } from '@devthink/webscrape/browser';
222
+ import { scrape } from '@wenathlan/webscrape/browser';
223
223
 
224
224
  // Deno
225
- import { scrape } from '@devthink/webscrape/deno';
225
+ import { scrape } from '@wenathlan/webscrape/deno';
226
226
 
227
227
  // Universal (só APIs comuns)
228
- import { scrape } from '@devthink/webscrape';
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
- @devthink/webscrape
618
+ @wenathlan/webscrape
619
619
 
620
620
  "import" - ESM
621
- ✅ @devthink/webscrape → ./dist/index.js
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
- ✅ @devthink/webscrape → ./dist/browser.js
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 @devthink/webscrape
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": "@devthink/webscrape",
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` (`@devthink/saddle`, 65 deps), `tsconfig.json`, `biome.json`, `vitest.config.ts`, `.github/workflows/saddle-tests.yml`, `.gitignore`, `.npmrc`, `.nvmrc`, `README.md`.
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
- `@devthink/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.
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 '@devthink/webscrape/scrape';
230
- import { crawl } from '@devthink/webscrape/crawler';
231
- import { batchScrape } from '@devthink/webscrape/batch';
232
- import { serializeResult } from '@devthink/webscrape/serialize';
233
- import { formatForAgent } from '@devthink/webscrape/agent';
234
- import { chunkMarkdown } from '@devthink/webscrape/chunking';
235
- import { generateLlmsTxt } from '@devthink/webscrape/llms-txt';
236
- import { createServer } from '@devthink/webscrape/server';
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
- @devthink/webscrape
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 `@devthink/saddle` published to NPM registry.
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": "@devthink/saddle",
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 @devthink/saddle
132
+ npm install @wenathlan/saddle
133
133
  ```
134
134
 
135
135
  ```javascript
136
- import { SaddleRobot } from '@devthink/saddle'
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 @devthink/saddle
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
- @devthink/saddle/
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
- `@devthink/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.
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 `@devthink/webscrape-mcp`
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 `@devthink/webscrape` toolkit.
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 `@devthink/webscrape-mcp` package
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 `@devthink/webscrape` precisa funcionar em **TODOS os modos**:
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": "@devthink/webscrape",
407
+ "name": "@wenathlan/webscrape",
408
408
  "version": "2.0.0",
409
409
  "type": "module",
410
410
  "main": "./dist/index.js",
@@ -81,7 +81,7 @@ files, and deployment payloads with edge caching.
81
81
 
82
82
  ### NPM Publishing
83
83
 
84
- Package `@devthink/saddle` available as both library and
84
+ Package `@wenathlan/saddle` available as both library and
85
85
  CLI binary.
86
86
 
87
87
  ## Architecture Rules (from arch skill)
@@ -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 `@devthink/saddle` for
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
- @devthink/saddle/
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('@devthink/saddle')` | Import as Node module |
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 '@devthink/saddle/deploy'
147
+ import { SCDNClient } from '@wenathlan/saddle/deploy'
148
148
 
149
149
  async function uploadCaptureSession(
150
150
  sessionData: SessionData,
@@ -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 `@devthink/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.
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** — `@devthink/saddle` as **lib + CLI** (`saddle`); install `npm install @devthink/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 '@devthink/saddle'; await robot.start(); await robot.executeCommand(cmd)`. `npm publish --access public` → auto-mirror jsDelivr/UNPKG/esm.sh.
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: @devthinking/saddle/
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
@@ -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 `@devthink/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.
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 `@devthink/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 `@devthink/saddle`. The exposed token from the prior conversation remains deliberately unused.
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 `@devthink/saddle@1.8.0` tarball but the registry rejected the PUT with HTTP 404 `Scope not found`; no public npmjs publication is claimed.
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
 
@@ -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 `@devthink/saddle`.
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`.
@@ -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.12`, it writes dotted surface-specific names such as `sha256.desktop.1.8.12`, `manifest.desktop.1.8.12.json`, `sbom.desktop.1.8.12.cdx.json` and `provenance.desktop.1.8.12.intoto.jsonl`. The adapter rejects underscore-based public names and Rust build-helper executables. It never publishes, authenticates or selects a registry.
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.12 \
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. This table is the contract expected from CI; it does not claim that an asset exists until the corresponding workflow attaches it.
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 prepared state passed 107 active tests, 69 legacy tests, engine build and syntax checks, formatting checks, web TypeScript and Pages build checks, npm pack dry-run, npm audit, flat-native validation and diff hygiene. Final artifact sizes and live download URLs must be filled from the actual GitHub Actions release run rather than estimated in advance.
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 following names are expected for a 1.8.13 run; actual URLs, checksums and sizes must come from the completed CI run.
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 complete release gate must be rerun after the implementation commit before a tag or release is created. The 1.8.21 research set remains the planning label for this feature batch and is not presented as a separate published version.
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 `@devthink/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.
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** — `@devthink/saddle` as **lib + CLI** (`saddle`); install `npm install @devthink/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 '@devthink/saddle'; await robot.start(); await robot.executeCommand(cmd)`. `npm publish --access public` → auto-mirror jsDelivr/UNPKG/esm.sh.
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
  |----------|------|
@@ -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 @devthink/saddle
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 "@devthink/saddle";
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 "@devthink/saddle";
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 `@devthink/saddle` for the public npmjs workflow. GitHub Packages uses `@iakadion/saddle` because the GitHub Actions token is authorized for the repository owner namespace.
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