@wenathlan/saddle 1.8.4 → 1.8.5

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 (249) hide show
  1. package/README.md +7 -7
  2. package/browser/playwright.js +22 -0
  3. package/docs/.gitkeep +0 -0
  4. package/docs/gapmatrix.md +1 -1
  5. package/docs/libraryapi.md +1 -0
  6. package/docs/logs/.gitkeep +0 -0
  7. package/docs/packageaudit185.md +23 -0
  8. package/docs/plans/00.index.md +50 -0
  9. package/docs/plans/01.architecture.md +86 -0
  10. package/docs/plans/02.research.computer.use.md +58 -0
  11. package/docs/plans/03.research.captcha.bypass.md +68 -0
  12. package/docs/plans/04.research.sandbox.ai.md +52 -0
  13. package/docs/plans/05.capture.platform.md +57 -0
  14. package/docs/plans/06.dependencies.md +97 -0
  15. package/docs/plans/07.captcha.test.page.md +41 -0
  16. package/docs/plans/08.production.infra.md +70 -0
  17. package/docs/plans/09.database.schema.md +121 -0
  18. package/docs/plans/10.cloudinary.storage.md +57 -0
  19. package/docs/plans/11.movement.logs.json.md +72 -0
  20. package/docs/plans/12.research.atlas.agent.browser.md +79 -0
  21. package/docs/plans/13.research.anti.detection.md +898 -0
  22. package/docs/plans/14.research.proxy.md +1495 -0
  23. package/docs/plans/15.research.retry.rate.limit.md +1958 -0
  24. package/docs/plans/16.research.crawling.md +1417 -0
  25. package/docs/plans/17.research.caching.md +1610 -0
  26. package/docs/plans/18.research.content.extraction.md +1952 -0
  27. package/docs/plans/19.research.errors.events.md +1523 -0
  28. package/docs/plans/20.research.zod.validation.md +1350 -0
  29. package/docs/plans/21.research.batch.concurrency.md +1888 -0
  30. package/docs/plans/22.research.universal.runtime.md +944 -0
  31. package/docs/plans/23.research.ai.integration.md +1465 -0
  32. package/docs/plans/24.research.memory.persistence.md +1979 -0
  33. package/docs/plans/25.research.server.api.md +342 -0
  34. package/docs/plans/26.research.compilation.md +249 -0
  35. package/docs/plans/27.research.html.parsing.md +251 -0
  36. package/docs/plans/28.action.plan.md +50 -0
  37. package/docs/plans/29.api.reference.md +174 -0
  38. package/docs/plans/30.architecture.plan.md +94 -0
  39. package/docs/plans/31.auditoria.dados.md +163 -0
  40. package/docs/plans/32.bots.automacao.computacional.md +214 -0
  41. package/docs/plans/33.bots.codigo.revisao.md +220 -0
  42. package/docs/plans/34.bots.seguranca.cicd.md +366 -0
  43. package/docs/plans/35.comparativo.concorrencia.md +464 -0
  44. package/docs/plans/36.computational.memory.md +340 -0
  45. package/docs/plans/37.deploystrategy.md +394 -0
  46. package/docs/plans/38.flow.md +155 -0
  47. package/docs/plans/39.multi.platform.bot.md +252 -0
  48. package/docs/plans/40.npm.publish.md +250 -0
  49. package/docs/plans/41.o.que.falta.md +407 -0
  50. package/docs/plans/42.pesquisa.concorrencia.md +721 -0
  51. package/docs/plans/43.plan.universal.architecture.md +496 -0
  52. package/docs/plans/44.reference.md +100 -0
  53. package/docs/plans/45.robotarchitecture.md +237 -0
  54. package/docs/plans/46.scdnintegration.md +284 -0
  55. package/docs/plans/47.multiforge.readme.md +129 -0
  56. package/docs/plans/48.theory.v4.repo.os.md +152 -0
  57. package/docs/plans/49.third.party.infra.md +12 -0
  58. package/docs/plans/50.file.as.compute.md +39 -0
  59. package/docs/plans/51.architecture.virtual.processor.md +80 -0
  60. package/docs/plans/52.manifesto.v8.md +11 -0
  61. package/docs/plans/58.cdn.list.md +23 -0
  62. package/docs/plans/59.sql.frameworks.md +33 -0
  63. package/docs/plans/60.sql.thirdparty.md +26 -0
  64. package/docs/plans/61.objective.multiforge.md +63 -0
  65. package/docs/plans/62.huggingface.upload.md +26 -0
  66. package/docs/plans/63.kaggle.upload.md +24 -0
  67. package/docs/plans/64.npm.storage.md +30 -0
  68. package/docs/plans/65.rclone.terabox.md +32 -0
  69. package/docs/plans/66.buckets.and.models.todo.md +14 -0
  70. package/docs/plans/67.database.todo.md +13 -0
  71. package/docs/plans/68.deploy.packages.todo.md +12 -0
  72. package/docs/plans/69.report.human.operator.md +133 -0
  73. package/docs/plans/70.report.brain2qwerty.ems.md +135 -0
  74. package/docs/plans/71.report.hd.infinito.vram.md +155 -0
  75. package/docs/plans/72.plan.hd.infinito.node.md +146 -0
  76. package/docs/plans/73.plan.scifi.repos.md +125 -0
  77. package/docs/plans/74.000.manifesto.v8.flat.2..md +11 -0
  78. package/docs/plans/README.md +489 -0
  79. package/docs/plans/aggregate_platforms.mjs +146 -0
  80. package/docs/plans/examplesession.json +36 -0
  81. package/docs/plans/missing-facts.md +192 -0
  82. package/docs/plans/models.md +64 -0
  83. package/docs/plans/organize.cjs +270 -0
  84. package/docs/plans/platforms.md +2887 -0
  85. package/docs/plans/sites.md +31322 -0
  86. package/docs/registryresearch.md +2 -0
  87. package/docs/release.md +4 -4
  88. package/docs/release184notes.md +2 -2
  89. package/docs/release185notes.md +7 -0
  90. package/docs/sources/farm.py +117 -0
  91. package/docs/sources/html/saddle1.html +132 -0
  92. package/docs/sources/html/saddle2.html +157 -0
  93. package/docs/sources/html/saddle3.html +119 -0
  94. package/docs/sources/html/saddle4.html +144 -0
  95. package/docs/sources/html/saddle5.html +72 -0
  96. package/docs/sources/html/saddle6.html +171 -0
  97. package/docs/sources/html/saddle7.html +236 -0
  98. package/docs/sources/saddle.ts +74 -0
  99. package/docs/sources/schema.prisma +88 -0
  100. package/docs/sources/script.sh +64 -0
  101. package/docs/sources/workflows.yml +458 -0
  102. package/docs/talks1/_body.txt +14 -0
  103. package/docs/talks1/_index.md +15 -0
  104. package/docs/talks1/_screenshot.png +0 -0
  105. package/docs/talks1/assistant-01.md +5 -0
  106. package/docs/talks1/assistant-02.md +5 -0
  107. package/docs/talks1/assistant-03.md +531 -0
  108. package/docs/talks1/assistant-04.md +26 -0
  109. package/docs/talks1/assistant-05.md +774 -0
  110. package/docs/talks1/assistant-06.md +1718 -0
  111. package/docs/talks1/scrape-share.cjs +185 -0
  112. package/docs/talks1/scrape-share.ts +183 -0
  113. package/docs/talks1/user-01.md +3 -0
  114. package/docs/talks1/user-02.md +3 -0
  115. package/docs/talks1/user-03.md +88 -0
  116. package/docs/talks1/user-04.md +3 -0
  117. package/docs/talks1/user-05.md +3 -0
  118. package/docs/talks1/user-06.md +88 -0
  119. package/docs/talks1/user-07.md +88 -0
  120. package/docs/talks2/_body.txt +14 -0
  121. package/docs/talks2/_index.md +16 -0
  122. package/docs/talks2/_screenshot.png +0 -0
  123. package/docs/talks2/assistant-01.md +5 -0
  124. package/docs/talks2/assistant-02.md +5 -0
  125. package/docs/talks2/assistant-03.md +424 -0
  126. package/docs/talks2/assistant-04.md +598 -0
  127. package/docs/talks2/assistant-05.md +1280 -0
  128. package/docs/talks2/assistant-06.md +1227 -0
  129. package/docs/talks2/assistant-07.md +1252 -0
  130. package/docs/talks2/user-01.md +3 -0
  131. package/docs/talks2/user-02.md +3 -0
  132. package/docs/talks2/user-03.md +88 -0
  133. package/docs/talks2/user-04.md +88 -0
  134. package/docs/talks2/user-05.md +88 -0
  135. package/docs/talks2/user-06.md +88 -0
  136. package/docs/talks2/user-07.md +3 -0
  137. package/docs/talks3/_body.txt +467 -0
  138. package/docs/talks3/_index.md +10 -0
  139. package/docs/talks3/_screenshot.png +0 -0
  140. package/docs/talks3/assistant-01.md +417 -0
  141. package/docs/talks3/assistant-02.md +417 -0
  142. package/docs/talks3/assistant-03.md +29 -0
  143. package/docs/talks3/assistant-04.md +727 -0
  144. package/docs/talks3/user-01.md +88 -0
  145. package/docs/talks3/user-02.md +88 -0
  146. package/docs/talks3/user-03.md +3 -0
  147. package/docs/talks3/user-04.md +3 -0
  148. package/docs/talks4/_body.txt +14 -0
  149. package/docs/talks4/_index.md +12 -0
  150. package/docs/talks4/_screenshot.png +0 -0
  151. package/docs/talks4/assistant-01.md +5 -0
  152. package/docs/talks4/assistant-02.md +5 -0
  153. package/docs/talks4/assistant-03.md +35 -0
  154. package/docs/talks4/assistant-04.md +512 -0
  155. package/docs/talks4/assistant-05.md +599 -0
  156. package/docs/talks4/user-01.md +3 -0
  157. package/docs/talks4/user-02.md +3 -0
  158. package/docs/talks4/user-03.md +88 -0
  159. package/docs/talks4/user-04.md +88 -0
  160. package/docs/talks4/user-05.md +7 -0
  161. package/docs/talks5/_body.txt +14 -0
  162. package/docs/talks5/_index.md +13 -0
  163. package/docs/talks5/_screenshot.png +0 -0
  164. package/docs/talks5/assistant-01.md +5 -0
  165. package/docs/talks5/assistant-02.md +5 -0
  166. package/docs/talks5/assistant-03.md +690 -0
  167. package/docs/talks5/assistant-04.md +758 -0
  168. package/docs/talks5/assistant-05.md +974 -0
  169. package/docs/talks5/user-01.md +3 -0
  170. package/docs/talks5/user-02.md +3 -0
  171. package/docs/talks5/user-03.md +105 -0
  172. package/docs/talks5/user-04.md +105 -0
  173. package/docs/talks5/user-05.md +63 -0
  174. package/docs/talks5/user-06.md +105 -0
  175. package/docs/talks6/_body.txt +14 -0
  176. package/docs/talks6/_index.md +9 -0
  177. package/docs/talks6/_screenshot.png +0 -0
  178. package/docs/talks6/assistant-01.md +5 -0
  179. package/docs/talks6/assistant-02.md +5 -0
  180. package/docs/talks6/assistant-03.md +1499 -0
  181. package/docs/talks6/user-01.md +3 -0
  182. package/docs/talks6/user-02.md +3 -0
  183. package/docs/talks6/user-03.md +88 -0
  184. package/docs/talks6/user-04.md +88 -0
  185. package/docs/talks7/_body.txt +14 -0
  186. package/docs/talks7/_index.md +10 -0
  187. package/docs/talks7/_screenshot.png +0 -0
  188. package/docs/talks7/assistant-01.md +5 -0
  189. package/docs/talks7/assistant-02.md +5 -0
  190. package/docs/talks7/assistant-03.md +523 -0
  191. package/docs/talks7/assistant-04.md +617 -0
  192. package/docs/talks7/user-01.md +3 -0
  193. package/docs/talks7/user-02.md +3 -0
  194. package/docs/talks7/user-03.md +105 -0
  195. package/docs/talks7/user-04.md +67 -0
  196. package/docs/talks8/conversa1.txt +1322 -0
  197. package/docs/talks8/conversa2.txt +237 -0
  198. package/docs/talks9/Beyond the Obvious_ 50 Plataformas Auto-Hospedadas de Forja de C/303/263digo para Al/303/251m de Gitea e GitLab.md" +174 -0
  199. package/docs/talks9/De NPM a Multi-Linguagem_ Uma Arquitetura T/303/251cnica para a Execu/303/247/303/243o Integrada de C/303/263digo no Ecossistema Node.js.md" +59 -0
  200. package/docs/talks9/De NPM a VMs Virtuais_ Uma An/303/241lise Arquitet/303/264nica para a Realiza/303/247/303/243o do Ciclo de Vida do Projeto SADDLE.md" +91 -0
  201. package/docs/talks9/Mapeamento da Engrenagem Computacional_ Uma Arquitetura para Execu/303/247/303/243o Isolada e Persist/303/252ncia em Ambientes Distribu/303/255dos.md" +116 -0
  202. package/docs/talks9/O Cen/303/241rio Pr/303/241tico do SADDLE_ Uma An/303/241lise de Viabilidade e Modelo de Ciclo de Vida Integrado.md" +128 -0
  203. package/docs/talks9/README (2).md +489 -0
  204. package/docs/talks9/README.md +198 -0
  205. 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" +80 -0
  206. package/docs/talks9/conversa.txt +544 -0
  207. package/docs/talks9/other (2).md +39 -0
  208. package/docs/talks9/other.md +57 -0
  209. package/docs/talks9/outro.txt +24 -0
  210. package/package.json +12 -2
  211. package/scrape/agent.ts +122 -0
  212. package/scrape/batch.ts +79 -0
  213. package/scrape/biome.json +76 -0
  214. package/scrape/browser.ts +222 -0
  215. package/scrape/cache.ts +84 -0
  216. package/scrape/chunking.ts +193 -0
  217. package/scrape/cli.ts +105 -0
  218. package/scrape/crawler.ts +115 -0
  219. package/scrape/dev-server.ts +94 -0
  220. package/scrape/errors.ts +132 -0
  221. package/scrape/events.ts +26 -0
  222. package/scrape/extract.ts +165 -0
  223. package/scrape/fetch.ts +105 -0
  224. package/scrape/formats.ts +85 -0
  225. package/scrape/headers.ts +71 -0
  226. package/scrape/index.ts +92 -0
  227. package/scrape/jsdom.d.ts +6 -0
  228. package/scrape/llms-txt.ts +84 -0
  229. package/scrape/middleware.ts +90 -0
  230. package/scrape/package-lock.json +9397 -0
  231. package/scrape/package.json +1420 -0
  232. package/scrape/pool.ts +95 -0
  233. package/scrape/port.ts +18 -0
  234. package/scrape/proxy.ts +103 -0
  235. package/scrape/rate-limiter.ts +95 -0
  236. package/scrape/renderer.ts +194 -0
  237. package/scrape/retry.ts +64 -0
  238. package/scrape/robots.ts +137 -0
  239. package/scrape/scrape.ts +123 -0
  240. package/scrape/serialize.ts +310 -0
  241. package/scrape/server.ts +137 -0
  242. package/scrape/session.ts +109 -0
  243. package/scrape/sitemap.ts +131 -0
  244. package/scrape/tokens.ts +45 -0
  245. package/scrape/tsconfig.json +28 -0
  246. package/scrape/types.ts +214 -0
  247. package/scrape/utils.ts +77 -0
  248. package/scrape/vite.config.ts +55 -0
  249. package/scrape/vitest.config.ts +17 -0
@@ -50,6 +50,8 @@ Release `v1.8.1` was created from the identity migration commit `efcbb02`. The n
50
50
 
51
51
  Release `v1.8.2` was created from commit `ac7c355` after the repository transfer to `wenathlan`. All release jobs succeeded: GitHub npm `31559770092` logged the owner-derived `@wenathlan/saddle` package, npmjs `31559770096` published the same public package, GHCR `31559770016` pushed `ghcr.io/wenathlan/saddle:1.8.2` and `latest`, Maven `31559770216` deployed `io.wenathlan:saddle:1.8.2`, NuGet `31559770142` created and pushed `Saddle.1.8.2.nupkg`, RubyGems `31559770023` registered `saddle (1.8.2)`, and extension build `31559769740` attached `saddle-extension-1.8.2.zip`. Release validation `31559770059` also succeeded. Independent checks confirmed npmjs `@wenathlan/saddle@1.8.2` and the GitHub release asset. The GitHub organization package-list API returned 403 for the available integration, while unauthenticated GHCR, Maven and NuGet endpoints returned 401; these protected visibility boundaries do not contradict the successful authenticated workflow logs.
52
52
 
53
+ Release `v1.8.4` was created from commit `d64a7bc` and the complete release matrix succeeded: engine CI `31561276824`, cross-runtime compatibility `31561276811`, release validation `31561278178`, extension build `31561278220`, GitHub npm `31561278174`, npmjs `31561278155`, GHCR `31561278152`, Maven `31561278161`, NuGet `31561278165` and RubyGems `31561278131`. The release therefore published `@wenathlan/saddle@1.8.4`, `ghcr.io/wenathlan/saddle:1.8.4`, `io.wenathlan:saddle:1.8.4`, `Saddle.1.8.4.nupkg`, `saddle (1.8.4)` and `saddle-extension-1.8.4.zip`. The legacy package metadata endpoint confirmed the public package `io.devthink.saddle` under `wenathlan`, but both version listing and deletion returned HTTP 403 because the current GitHub App token lacks package-management deletion permission; no deletion is claimed.
54
+
53
55
  ## sources
54
56
 
55
57
  1. GitHub Docs — About permissions for GitHub Packages: https://docs.github.com/en/packages/learn-github-packages/about-permissions-for-github-packages
package/docs/release.md CHANGED
@@ -1,4 +1,4 @@
1
- # saddle release 1.8.4
1
+ # saddle release 1.8.5
2
2
 
3
3
  ## release path
4
4
 
@@ -6,10 +6,10 @@ The release path is intentionally split into source validation, package validati
6
6
 
7
7
  | step | owner | condition |
8
8
  |---|---|---|
9
- | package version | repository | `package.json` is `1.8.4` |
9
+ | package version | repository | `package.json` is `1.8.5` |
10
10
  | quality gate | GitHub Actions | `npm run pack:check` passes |
11
- | tag | repository owner | tag `v1.8.4` points to the validated release commit |
12
- | GitHub release | repository owner | release `v1.8.4` is created from the validated tag |
11
+ | tag | repository owner | tag `v1.8.5` points to the validated release commit |
12
+ | GitHub release | repository owner | release `v1.8.5` is created from the validated tag |
13
13
  | GitHub Packages | GitHub Actions | `publishgithubnpm.yml`, `publishghcr.yml`, `publishmaven.yml`, `publishnuget.yml`, and `publishrubygems.yml` use `GITHUB_TOKEN` |
14
14
  | public npmjs | owner-managed GitHub Actions secret | `publishnpmjs.yml` uses `NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}` and derives the version from the release tag or latest release in manual maintenance runs |
15
15
  | extension zip | GitHub Actions | `buildextension.yml` derives the version from the release tag, validates the unpacked artifact and attaches `saddle-extension-<version>.zip` |
@@ -2,6 +2,6 @@
2
2
 
3
3
  Saddle 1.8.4 updates every active library and forge pipeline to Node.js 26.7.0 and adds deterministic package gates to GitLab, Forgejo, Gitea and Woodpecker workflows. GitHub Actions remains the authoritative multi-registry release path; the other forge files are caller-configured validation and artifact paths because their runners, secrets and package registries differ.
4
4
 
5
- The legacy public Maven package `io.devthink.saddle` was identified under the `wenathlan` organization. Its deletion request was attempted through the GitHub Packages API, but the authenticated GitHub App integration returned HTTP 403 because it lacks package-management deletion permission. The new owner-aligned Maven coordinate is `io.wenathlan:saddle` and must not be removed.
5
+ The legacy public Maven package `io.devthink.saddle` was identified under the `wenathlan` organization. Its deletion request was attempted through the GitHub Packages API, but the authenticated GitHub App integration returned HTTP 403 because it lacks package-management deletion permission. The new owner-aligned Maven coordinate is `io.wenathlan:saddle` and was published successfully; it must not be removed.
6
6
 
7
- The companion Saddle Pages repository now contains a GitHub Pages workflow using `actions/configure-pages@v5`, `actions/upload-pages-artifact@v4` and `actions/deploy-pages@v4`, plus caller-configured GitLab Pages, Forgejo, Codeberg Pages, Gitea and Woodpecker pipelines. The site builds only `dist/public` with `VITE_BASE_PATH=/saddle-pages/` and uses Node.js 26.7.0.
7
+ The companion Saddle Pages repository is public at `https://github.com/wenathlan/saddle-pages` and contains the GitHub Pages workflow using `actions/configure-pages@v5`, `actions/upload-pages-artifact@v4` and `actions/deploy-pages@v4`, plus caller-configured GitLab Pages, Forgejo, Codeberg Pages, Gitea and Woodpecker pipelines. The site builds only `dist/public` with `VITE_BASE_PATH=/saddle-pages/` and uses Node.js 26.7.0. The initial source push omitted `.github/workflows/pages.yml` because the current GitHub App token lacks the `workflow` scope; the workflow remains prepared in the local project checkpoint for the required reauthorization.
@@ -0,0 +1,7 @@
1
+ # Saddle 1.8.5
2
+
3
+ Saddle 1.8.5 extends the published 1.8.4 engine without rewriting its immutable tag. The package metadata now declares Node.js `>=26.7.0`, npm `>=10.9.2`, the reproducible package manager `npm@12.0.2`, `main`/`module`/`browser` entry hints and `sideEffects: false` for bundlers.
4
+
5
+ The release adds `playwright` as an optional peer at `^1.62.1` and exposes `@wenathlan/saddle/browser-playwright`. The adapter dynamically loads the caller-installed provider and reports `OPTIONAL_DEPENDENCY_MISSING` when Playwright is not installed. No browser binary, credential, host or runtime dependency is forced into the transport-neutral root.
6
+
7
+ The package remains root-based JavaScript ESM. `trustedDependencies` and patch metadata were intentionally not added: the package has no install-time dependency requiring trust escalation and no active package patch to describe. The pnpm documentation also states that pnpm 11 no longer reads settings from the `pnpm` field in `package.json`, so no stale `pnpm.patchedDependencies` field was introduced.
@@ -0,0 +1,117 @@
1
+ # farm.py - Orquestra N repos para multiplicar storage ilimitado
2
+ # Ideia: 1 repo = 500MB artifact free. 10 repos = 5GB, 100 repos = 50GB ilimitado
3
+
4
+ import os, requests
5
+
6
+ # Lista de repos workers (você cria via API)
7
+ WORKER_REPOS = [
8
+ "seuuser/opencode-worker-1",
9
+ "seuuser/opencode-worker-2",
10
+ "seuuser/opencode-worker-3",
11
+ # ... adicione 100
12
+ ]
13
+
14
+ TOKEN = os.getenv("GITHUB_TOKEN")
15
+
16
+ def dispatch_to_farm(filename, job_id):
17
+ for repo in WORKER_REPOS:
18
+ owner, name = repo.split("/")
19
+ url = f"https://api.github.com/repos/{owner}/{name}/actions/workflows/process-binary.yml/dispatches"
20
+ payload = {
21
+ "ref": "main",
22
+ "inputs": {"job_id": job_id, "filename": filename, "action": "run"}
23
+ }
24
+ r = requests.post(url, json=payload, headers={
25
+ "Authorization": f"Bearer {TOKEN}",
26
+ "Accept": "application/vnd.github+json"
27
+ })
28
+ print(f"{repo}: {r.status_code}")
29
+ if r.status_code == 204:
30
+ break # conseguiu um worker
31
+
32
+ if __name__ == "__main__":
33
+ dispatch_to_farm("binary.wasm", "job-123")
34
+
35
+ #!/bin/bash
36
+ # Script: Transforma Armazenamento em RAM / Processamento
37
+ # Uso: ./scripts/storage-as-ram.sh
38
+
39
+ echo "=== Transformando Storage em Processamento ==="
40
+ echo "Antes:" && free -h
41
+
42
+ # 1. Swap file - transforma disco em RAM virtual
43
+ echo "[1] Criando swap 16GB em /mnt/swapfile..."
44
+ sudo fallocate -l 16G /mnt/swapfile 2>/dev/null || sudo dd if=/dev/zero of=/mnt/swapfile bs=1G count=16
45
+ sudo chmod 600 /mnt/swapfile
46
+ sudo mkswap /mnt/swapfile
47
+ sudo swapon /mnt/swapfile
48
+
49
+ # 2. tmpfs RAM disk - RAM que parece storage
50
+ echo "[2] Criando RAM disk 8GB em /mnt/ramdisk..."
51
+ sudo mkdir -p /mnt/ramdisk
52
+ sudo mount -t tmpfs -o size=8G tmpfs /mnt/ramdisk
53
+
54
+ # 3. ZRAM - comprime RAM para caber mais
55
+ echo "[3] Ativando ZRAM..."
56
+ sudo modprobe zram 2>/dev/null || true
57
+ echo 2G | sudo tee /sys/block/zram0/disksize 2>/dev/null || true
58
+
59
+ # 4. Usar /dev/shm (já é tmpfs) como workspace ultra rápido
60
+ echo "[4] Usando /dev/shm como workspace..."
61
+ mkdir -p /dev/shm/opencode-workspace
62
+
63
+ echo "Depois:" && free -h && swapon --show && df -h /mnt/ramdisk /dev/shm
64
+
65
+ echo "Pronto: Storage virou RAM. Use /mnt/ramdisk e /dev/shm para processar binários sem pesar disco."
66
+
67
+ # buckets/huggingface_upload.py - Usa Hugging Face como bucket ilimitado de terceiros
68
+ from huggingface_hub import HfApi, upload_folder
69
+ import os
70
+
71
+ # Free: public best-effort ilimitado, private 100GB
72
+ # PRO $9/mo: 10TB public + 1TB private
73
+ # Cada arquivo até 500GB com Xet backend
74
+
75
+ api = HfApi(token=os.getenv("HF_TOKEN"))
76
+
77
+ REPO_ID = "seuuser/opencode-storage" # dataset repo
78
+ REPO_TYPE = "dataset" # dataset tem viewer, melhor para binários
79
+
80
+ # Cria repo se não existe
81
+ api.create_repo(REPO_ID, repo_type=REPO_TYPE, exist_ok=True, private=False)
82
+
83
+ # Upload pasta dumps como dataset
84
+ upload_folder(
85
+ folder_path="docs/results",
86
+ repo_id=REPO_ID,
87
+ repo_type=REPO_TYPE,
88
+ commit_message="feat: dump from browser via third-party"
89
+ )
90
+
91
+ print(f"Upload feito: https://huggingface.co/datasets/{REPO_ID}")
92
+ # Acesso via CDN: https://huggingface.co/datasets/{REPO_ID}/resolve/main/arquivo.bin
93
+
94
+ # buckets/kaggle_upload.py - Kaggle como bucket 200GB por dataset, público ilimitado
95
+ # Limite: 200GB por dataset, 50 arquivos top-level, privado total 200GB, público ilimitado
96
+
97
+ import os, json, subprocess, pathlib
98
+
99
+ DATASET_NAME = "seuuser-opencode-storage-part-001" # cada dataset 200GB
100
+ DATASET_PATH = pathlib.Path("docs/results")
101
+
102
+ # dataset-metadata.json
103
+ meta = {
104
+ "title": "opencode-storage-part-001",
105
+ "id": f"seuuser/{DATASET_NAME}",
106
+ "licenses": [{"name": "mit"}],
107
+ "resources": [{"path": "results", "description": "binários processados"}]
108
+ }
109
+
110
+ (DATASET_PATH / "dataset-metadata.json").write_text(json.dumps(meta, indent=2))
111
+
112
+ # Cria ou versiona
113
+ # kaggle datasets create -p docs/results --dir-mode tar
114
+ # kaggle datasets version -p docs/results -m "add more bins"
115
+
116
+ print("Kaggle: cada dataset público = 200GB free ilimitado. Crie N datasets para N*200GB")
117
+ print("10 datasets = 2TB free, 100 datasets = 20TB")