@wenathlan/saddle 1.8.2 → 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.
- package/README.md +9 -9
- package/browser/playwright.js +22 -0
- package/docs/.gitkeep +0 -0
- package/docs/gapmatrix.md +3 -3
- package/docs/libraryapi.md +1 -0
- package/docs/logs/.gitkeep +0 -0
- package/docs/packageaudit185.md +23 -0
- package/docs/plans/00.index.md +50 -0
- package/docs/plans/01.architecture.md +86 -0
- package/docs/plans/02.research.computer.use.md +58 -0
- package/docs/plans/03.research.captcha.bypass.md +68 -0
- package/docs/plans/04.research.sandbox.ai.md +52 -0
- package/docs/plans/05.capture.platform.md +57 -0
- package/docs/plans/06.dependencies.md +97 -0
- package/docs/plans/07.captcha.test.page.md +41 -0
- package/docs/plans/08.production.infra.md +70 -0
- package/docs/plans/09.database.schema.md +121 -0
- package/docs/plans/10.cloudinary.storage.md +57 -0
- package/docs/plans/11.movement.logs.json.md +72 -0
- package/docs/plans/12.research.atlas.agent.browser.md +79 -0
- package/docs/plans/13.research.anti.detection.md +898 -0
- package/docs/plans/14.research.proxy.md +1495 -0
- package/docs/plans/15.research.retry.rate.limit.md +1958 -0
- package/docs/plans/16.research.crawling.md +1417 -0
- package/docs/plans/17.research.caching.md +1610 -0
- package/docs/plans/18.research.content.extraction.md +1952 -0
- package/docs/plans/19.research.errors.events.md +1523 -0
- package/docs/plans/20.research.zod.validation.md +1350 -0
- package/docs/plans/21.research.batch.concurrency.md +1888 -0
- package/docs/plans/22.research.universal.runtime.md +944 -0
- package/docs/plans/23.research.ai.integration.md +1465 -0
- package/docs/plans/24.research.memory.persistence.md +1979 -0
- package/docs/plans/25.research.server.api.md +342 -0
- package/docs/plans/26.research.compilation.md +249 -0
- package/docs/plans/27.research.html.parsing.md +251 -0
- package/docs/plans/28.action.plan.md +50 -0
- package/docs/plans/29.api.reference.md +174 -0
- package/docs/plans/30.architecture.plan.md +94 -0
- package/docs/plans/31.auditoria.dados.md +163 -0
- package/docs/plans/32.bots.automacao.computacional.md +214 -0
- package/docs/plans/33.bots.codigo.revisao.md +220 -0
- package/docs/plans/34.bots.seguranca.cicd.md +366 -0
- package/docs/plans/35.comparativo.concorrencia.md +464 -0
- package/docs/plans/36.computational.memory.md +340 -0
- package/docs/plans/37.deploystrategy.md +394 -0
- package/docs/plans/38.flow.md +155 -0
- package/docs/plans/39.multi.platform.bot.md +252 -0
- package/docs/plans/40.npm.publish.md +250 -0
- package/docs/plans/41.o.que.falta.md +407 -0
- package/docs/plans/42.pesquisa.concorrencia.md +721 -0
- package/docs/plans/43.plan.universal.architecture.md +496 -0
- package/docs/plans/44.reference.md +100 -0
- package/docs/plans/45.robotarchitecture.md +237 -0
- package/docs/plans/46.scdnintegration.md +284 -0
- package/docs/plans/47.multiforge.readme.md +129 -0
- package/docs/plans/48.theory.v4.repo.os.md +152 -0
- package/docs/plans/49.third.party.infra.md +12 -0
- package/docs/plans/50.file.as.compute.md +39 -0
- package/docs/plans/51.architecture.virtual.processor.md +80 -0
- package/docs/plans/52.manifesto.v8.md +11 -0
- package/docs/plans/58.cdn.list.md +23 -0
- package/docs/plans/59.sql.frameworks.md +33 -0
- package/docs/plans/60.sql.thirdparty.md +26 -0
- package/docs/plans/61.objective.multiforge.md +63 -0
- package/docs/plans/62.huggingface.upload.md +26 -0
- package/docs/plans/63.kaggle.upload.md +24 -0
- package/docs/plans/64.npm.storage.md +30 -0
- package/docs/plans/65.rclone.terabox.md +32 -0
- package/docs/plans/66.buckets.and.models.todo.md +14 -0
- package/docs/plans/67.database.todo.md +13 -0
- package/docs/plans/68.deploy.packages.todo.md +12 -0
- package/docs/plans/69.report.human.operator.md +133 -0
- package/docs/plans/70.report.brain2qwerty.ems.md +135 -0
- package/docs/plans/71.report.hd.infinito.vram.md +155 -0
- package/docs/plans/72.plan.hd.infinito.node.md +146 -0
- package/docs/plans/73.plan.scifi.repos.md +125 -0
- package/docs/plans/74.000.manifesto.v8.flat.2..md +11 -0
- package/docs/plans/README.md +489 -0
- package/docs/plans/aggregate_platforms.mjs +146 -0
- package/docs/plans/examplesession.json +36 -0
- package/docs/plans/missing-facts.md +192 -0
- package/docs/plans/models.md +64 -0
- package/docs/plans/organize.cjs +270 -0
- package/docs/plans/platforms.md +2887 -0
- package/docs/plans/sites.md +31322 -0
- package/docs/platformpipelineaudit.md +18 -0
- package/docs/platformpipelines.md +13 -0
- package/docs/registryresearch.md +4 -0
- package/docs/release.md +4 -4
- package/docs/release182notes.md +2 -0
- package/docs/release184notes.md +7 -0
- package/docs/release185notes.md +7 -0
- package/docs/sources/farm.py +117 -0
- package/docs/sources/html/saddle1.html +132 -0
- package/docs/sources/html/saddle2.html +157 -0
- package/docs/sources/html/saddle3.html +119 -0
- package/docs/sources/html/saddle4.html +144 -0
- package/docs/sources/html/saddle5.html +72 -0
- package/docs/sources/html/saddle6.html +171 -0
- package/docs/sources/html/saddle7.html +236 -0
- package/docs/sources/saddle.ts +74 -0
- package/docs/sources/schema.prisma +88 -0
- package/docs/sources/script.sh +64 -0
- package/docs/sources/workflows.yml +458 -0
- package/docs/talks1/_body.txt +14 -0
- package/docs/talks1/_index.md +15 -0
- package/docs/talks1/_screenshot.png +0 -0
- package/docs/talks1/assistant-01.md +5 -0
- package/docs/talks1/assistant-02.md +5 -0
- package/docs/talks1/assistant-03.md +531 -0
- package/docs/talks1/assistant-04.md +26 -0
- package/docs/talks1/assistant-05.md +774 -0
- package/docs/talks1/assistant-06.md +1718 -0
- package/docs/talks1/scrape-share.cjs +185 -0
- package/docs/talks1/scrape-share.ts +183 -0
- package/docs/talks1/user-01.md +3 -0
- package/docs/talks1/user-02.md +3 -0
- package/docs/talks1/user-03.md +88 -0
- package/docs/talks1/user-04.md +3 -0
- package/docs/talks1/user-05.md +3 -0
- package/docs/talks1/user-06.md +88 -0
- package/docs/talks1/user-07.md +88 -0
- package/docs/talks2/_body.txt +14 -0
- package/docs/talks2/_index.md +16 -0
- package/docs/talks2/_screenshot.png +0 -0
- package/docs/talks2/assistant-01.md +5 -0
- package/docs/talks2/assistant-02.md +5 -0
- package/docs/talks2/assistant-03.md +424 -0
- package/docs/talks2/assistant-04.md +598 -0
- package/docs/talks2/assistant-05.md +1280 -0
- package/docs/talks2/assistant-06.md +1227 -0
- package/docs/talks2/assistant-07.md +1252 -0
- package/docs/talks2/user-01.md +3 -0
- package/docs/talks2/user-02.md +3 -0
- package/docs/talks2/user-03.md +88 -0
- package/docs/talks2/user-04.md +88 -0
- package/docs/talks2/user-05.md +88 -0
- package/docs/talks2/user-06.md +88 -0
- package/docs/talks2/user-07.md +3 -0
- package/docs/talks3/_body.txt +467 -0
- package/docs/talks3/_index.md +10 -0
- package/docs/talks3/_screenshot.png +0 -0
- package/docs/talks3/assistant-01.md +417 -0
- package/docs/talks3/assistant-02.md +417 -0
- package/docs/talks3/assistant-03.md +29 -0
- package/docs/talks3/assistant-04.md +727 -0
- package/docs/talks3/user-01.md +88 -0
- package/docs/talks3/user-02.md +88 -0
- package/docs/talks3/user-03.md +3 -0
- package/docs/talks3/user-04.md +3 -0
- package/docs/talks4/_body.txt +14 -0
- package/docs/talks4/_index.md +12 -0
- package/docs/talks4/_screenshot.png +0 -0
- package/docs/talks4/assistant-01.md +5 -0
- package/docs/talks4/assistant-02.md +5 -0
- package/docs/talks4/assistant-03.md +35 -0
- package/docs/talks4/assistant-04.md +512 -0
- package/docs/talks4/assistant-05.md +599 -0
- package/docs/talks4/user-01.md +3 -0
- package/docs/talks4/user-02.md +3 -0
- package/docs/talks4/user-03.md +88 -0
- package/docs/talks4/user-04.md +88 -0
- package/docs/talks4/user-05.md +7 -0
- package/docs/talks5/_body.txt +14 -0
- package/docs/talks5/_index.md +13 -0
- package/docs/talks5/_screenshot.png +0 -0
- package/docs/talks5/assistant-01.md +5 -0
- package/docs/talks5/assistant-02.md +5 -0
- package/docs/talks5/assistant-03.md +690 -0
- package/docs/talks5/assistant-04.md +758 -0
- package/docs/talks5/assistant-05.md +974 -0
- package/docs/talks5/user-01.md +3 -0
- package/docs/talks5/user-02.md +3 -0
- package/docs/talks5/user-03.md +105 -0
- package/docs/talks5/user-04.md +105 -0
- package/docs/talks5/user-05.md +63 -0
- package/docs/talks5/user-06.md +105 -0
- package/docs/talks6/_body.txt +14 -0
- package/docs/talks6/_index.md +9 -0
- package/docs/talks6/_screenshot.png +0 -0
- package/docs/talks6/assistant-01.md +5 -0
- package/docs/talks6/assistant-02.md +5 -0
- package/docs/talks6/assistant-03.md +1499 -0
- package/docs/talks6/user-01.md +3 -0
- package/docs/talks6/user-02.md +3 -0
- package/docs/talks6/user-03.md +88 -0
- package/docs/talks6/user-04.md +88 -0
- package/docs/talks7/_body.txt +14 -0
- package/docs/talks7/_index.md +10 -0
- package/docs/talks7/_screenshot.png +0 -0
- package/docs/talks7/assistant-01.md +5 -0
- package/docs/talks7/assistant-02.md +5 -0
- package/docs/talks7/assistant-03.md +523 -0
- package/docs/talks7/assistant-04.md +617 -0
- package/docs/talks7/user-01.md +3 -0
- package/docs/talks7/user-02.md +3 -0
- package/docs/talks7/user-03.md +105 -0
- package/docs/talks7/user-04.md +67 -0
- package/docs/talks8/conversa1.txt +1322 -0
- package/docs/talks8/conversa2.txt +237 -0
- 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
- 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
- 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
- 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
- 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
- package/docs/talks9/README (2).md +489 -0
- package/docs/talks9/README.md +198 -0
- 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
- package/docs/talks9/conversa.txt +544 -0
- package/docs/talks9/other (2).md +39 -0
- package/docs/talks9/other.md +57 -0
- package/docs/talks9/outro.txt +24 -0
- package/extension/README.md +3 -3
- package/extension/serviceworker.js +63 -4
- package/extension/worker.js +3 -1
- package/package.json +12 -2
- package/packager/manifest.js +1 -1
- package/scrape/agent.ts +122 -0
- package/scrape/batch.ts +79 -0
- package/scrape/biome.json +76 -0
- package/scrape/browser.ts +222 -0
- package/scrape/cache.ts +84 -0
- package/scrape/chunking.ts +193 -0
- package/scrape/cli.ts +105 -0
- package/scrape/crawler.ts +115 -0
- package/scrape/dev-server.ts +94 -0
- package/scrape/errors.ts +132 -0
- package/scrape/events.ts +26 -0
- package/scrape/extract.ts +165 -0
- package/scrape/fetch.ts +105 -0
- package/scrape/formats.ts +85 -0
- package/scrape/headers.ts +71 -0
- package/scrape/index.ts +92 -0
- package/scrape/jsdom.d.ts +6 -0
- package/scrape/llms-txt.ts +84 -0
- package/scrape/middleware.ts +90 -0
- package/scrape/package-lock.json +9397 -0
- package/scrape/package.json +1420 -0
- package/scrape/pool.ts +95 -0
- package/scrape/port.ts +18 -0
- package/scrape/proxy.ts +103 -0
- package/scrape/rate-limiter.ts +95 -0
- package/scrape/renderer.ts +194 -0
- package/scrape/retry.ts +64 -0
- package/scrape/robots.ts +137 -0
- package/scrape/scrape.ts +123 -0
- package/scrape/serialize.ts +310 -0
- package/scrape/server.ts +137 -0
- package/scrape/session.ts +109 -0
- package/scrape/sitemap.ts +131 -0
- package/scrape/tokens.ts +45 -0
- package/scrape/tsconfig.json +28 -0
- package/scrape/types.ts +214 -0
- package/scrape/utils.ts +77 -0
- package/scrape/vite.config.ts +55 -0
- package/scrape/vitest.config.ts +17 -0
- package/workflow/templates.js +4 -4
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# buckets/rclone_terabox.sh - Rclone agregador 70+ storages, Terabox 1TB free por conta
|
|
2
|
+
|
|
3
|
+
# Rclone suporta: S3, GDrive, Dropbox, OneDrive, Terabox, HuggingFace, etc
|
|
4
|
+
# Você tem 3 contas Terabox 1TB cada = 3TB free
|
|
5
|
+
|
|
6
|
+
# Instala rclone
|
|
7
|
+
# curl https://rclone.org/install.sh | sudo bash
|
|
8
|
+
|
|
9
|
+
# Configura 3 contas Terabox
|
|
10
|
+
# rclone config -> new -> terabox -> auth
|
|
11
|
+
|
|
12
|
+
# Upload para Terabox conta 1
|
|
13
|
+
# rclone copy docs/results/ terabox1:opencode-storage/ --progress --transfers 8
|
|
14
|
+
|
|
15
|
+
# Upload para Terabox conta 2 (shard)
|
|
16
|
+
# rclone copy docs/results/ terabox2:opencode-storage/ --progress
|
|
17
|
+
|
|
18
|
+
# Upload para Terabox conta 3
|
|
19
|
+
# rclone copy docs/results/ terabox3:opencode-storage/ --progress
|
|
20
|
+
|
|
21
|
+
# Multi-cloud sync: copia de Terabox para HuggingFace para Kaggle
|
|
22
|
+
# rclone sync terabox1:opencode-storage/ huggingface:opencode-storage/
|
|
23
|
+
# rclone sync terabox1:opencode-storage/ kaggle:opencode-storage/
|
|
24
|
+
|
|
25
|
+
# Lista todos remotes
|
|
26
|
+
# rclone listremotes
|
|
27
|
+
|
|
28
|
+
# Rclone serve como CDN: rclone serve http terabox1:opencode-storage/ --addr :8080
|
|
29
|
+
|
|
30
|
+
echo "Terabox Free: 1TB por conta, arquivo max 4GB free, 20GB premium, 300 arquivos por vez"
|
|
31
|
+
echo "3 contas = 3TB free sem gastar sua máquina"
|
|
32
|
+
echo "Rclone backends: https://rclone.org/docs/#providers (70+)"
|
|
33
|
+
|
|
34
|
+
#!/bin/bash
|
|
35
|
+
# Script: Transforma Armazenamento em RAM / Processamento
|
|
36
|
+
# Uso: ./scripts/storage-as-ram.sh
|
|
37
|
+
|
|
38
|
+
echo "=== Transformando Storage em Processamento ==="
|
|
39
|
+
echo "Antes:" && free -h
|
|
40
|
+
|
|
41
|
+
# 1. Swap file - transforma disco em RAM virtual
|
|
42
|
+
echo "[1] Criando swap 16GB em /mnt/swapfile..."
|
|
43
|
+
sudo fallocate -l 16G /mnt/swapfile 2>/dev/null || sudo dd if=/dev/zero of=/mnt/swapfile bs=1G count=16
|
|
44
|
+
sudo chmod 600 /mnt/swapfile
|
|
45
|
+
sudo mkswap /mnt/swapfile
|
|
46
|
+
sudo swapon /mnt/swapfile
|
|
47
|
+
|
|
48
|
+
# 2. tmpfs RAM disk - RAM que parece storage
|
|
49
|
+
echo "[2] Criando RAM disk 8GB em /mnt/ramdisk..."
|
|
50
|
+
sudo mkdir -p /mnt/ramdisk
|
|
51
|
+
sudo mount -t tmpfs -o size=8G tmpfs /mnt/ramdisk
|
|
52
|
+
|
|
53
|
+
# 3. ZRAM - comprime RAM para caber mais
|
|
54
|
+
echo "[3] Ativando ZRAM..."
|
|
55
|
+
sudo modprobe zram 2>/dev/null || true
|
|
56
|
+
echo 2G | sudo tee /sys/block/zram0/disksize 2>/dev/null || true
|
|
57
|
+
|
|
58
|
+
# 4. Usar /dev/shm (já é tmpfs) como workspace ultra rápido
|
|
59
|
+
echo "[4] Usando /dev/shm como workspace..."
|
|
60
|
+
mkdir -p /dev/shm/opencode-workspace
|
|
61
|
+
|
|
62
|
+
echo "Depois:" && free -h && swapon --show && df -h /mnt/ramdisk /dev/shm
|
|
63
|
+
|
|
64
|
+
echo "Pronto: Storage virou RAM. Use /mnt/ramdisk e /dev/shm para processar binários sem pesar disco."
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
# GitLab CI - 400 min free, 10GB storage por projeto
|
|
2
|
+
# GitLab Pages ilimitado comparado com GitHub
|
|
3
|
+
image: node:20
|
|
4
|
+
|
|
5
|
+
stages:
|
|
6
|
+
- process
|
|
7
|
+
- deploy
|
|
8
|
+
|
|
9
|
+
variables:
|
|
10
|
+
GIT_DEPTH: "1"
|
|
11
|
+
|
|
12
|
+
heavy_processor:
|
|
13
|
+
stage: process
|
|
14
|
+
script:
|
|
15
|
+
- echo "=== GitLab Runner - Transformando Storage em RAM ==="
|
|
16
|
+
- free -h && df -h
|
|
17
|
+
- |
|
|
18
|
+
# Cria swap file de 8GB no storage do runner
|
|
19
|
+
fallocate -l 8G /tmp/swapfile || dd if=/dev/zero of=/tmp/swapfile bs=1M count=8192
|
|
20
|
+
chmod 600 /tmp/swapfile
|
|
21
|
+
mkswap /tmp/swapfile
|
|
22
|
+
swapon /tmp/swapfile || echo "swap precisa sudo, pulando"
|
|
23
|
+
- mkdir -p public/results/$CI_JOB_ID dumps/incoming
|
|
24
|
+
- ls -la dumps/incoming/ || true
|
|
25
|
+
- cp -r dumps/incoming/* public/results/$CI_JOB_ID/ 2>/dev/null || echo "nada"
|
|
26
|
+
- echo "Processado no GitLab em $(date)" > public/results/$CI_JOB_ID/gitlab.txt
|
|
27
|
+
artifacts:
|
|
28
|
+
paths:
|
|
29
|
+
- public/
|
|
30
|
+
expire_in: 7 days
|
|
31
|
+
only:
|
|
32
|
+
- main
|
|
33
|
+
- web
|
|
34
|
+
|
|
35
|
+
pages:
|
|
36
|
+
stage: deploy
|
|
37
|
+
dependencies:
|
|
38
|
+
- heavy_processor
|
|
39
|
+
script:
|
|
40
|
+
- mkdir -p public
|
|
41
|
+
- echo "GitLab Pages deploy"
|
|
42
|
+
artifacts:
|
|
43
|
+
paths:
|
|
44
|
+
- public
|
|
45
|
+
only:
|
|
46
|
+
- main
|
|
47
|
+
|
|
48
|
+
name: Cleanup Artifacts (Evita estourar 500MB Free)
|
|
49
|
+
|
|
50
|
+
on:
|
|
51
|
+
schedule:
|
|
52
|
+
- cron: '0 0 * * 0' # domingo meia-noite
|
|
53
|
+
workflow_dispatch:
|
|
54
|
+
|
|
55
|
+
permissions:
|
|
56
|
+
actions: write
|
|
57
|
+
contents: read
|
|
58
|
+
|
|
59
|
+
jobs:
|
|
60
|
+
cleanup:
|
|
61
|
+
runs-on: ubuntu-latest
|
|
62
|
+
steps:
|
|
63
|
+
- name: Deletar artifacts antigos (>7 dias)
|
|
64
|
+
uses: actions/github-script@v7
|
|
65
|
+
with:
|
|
66
|
+
script: |
|
|
67
|
+
const { owner, repo } = context.repo;
|
|
68
|
+
const artifacts = await github.paginate(github.rest.actions.listArtifactsForRepo, { owner, repo });
|
|
69
|
+
const cutoff = Date.now() - 7*24*60*60*1000;
|
|
70
|
+
for (const art of artifacts) {
|
|
71
|
+
if (new Date(art.created_at).getTime() < cutoff) {
|
|
72
|
+
console.log(`Deletando ${art.name} ${art.id}`);
|
|
73
|
+
await github.rest.actions.deleteArtifact({ owner, repo, artifact_id: art.id });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
# Woodpecker CI para Codeberg - alternativa ilimitada open source
|
|
78
|
+
# Coloque este arquivo em .woodpecker/deploy.yml ou .woodpecker.yml
|
|
79
|
+
# Docs: https://woodpecker-ci.org/
|
|
80
|
+
|
|
81
|
+
when:
|
|
82
|
+
- event: push
|
|
83
|
+
branch: pages
|
|
84
|
+
- event: manual
|
|
85
|
+
|
|
86
|
+
steps:
|
|
87
|
+
heavy-processor:
|
|
88
|
+
image: node:20-bullseye
|
|
89
|
+
commands:
|
|
90
|
+
- echo "Codeberg Woodpecker - Storage como CPU"
|
|
91
|
+
- free -h
|
|
92
|
+
- mkdir -p /tmp/ramdisk
|
|
93
|
+
- mount -t tmpfs -o size=4G tmpfs /tmp/ramdisk || echo "sem permissão tmpfs, usando /tmp"
|
|
94
|
+
- ls -la dumps/incoming/ || true
|
|
95
|
+
- cp -r dumps/incoming/* /tmp/ramdisk/ 2>/dev/null || true
|
|
96
|
+
- echo "Processado em Woodpecker $(date)" > /tmp/ramdisk/woodpecker-result.txt
|
|
97
|
+
- cp /tmp/ramdisk/* docs/results/ -r || true
|
|
98
|
+
volumes:
|
|
99
|
+
- /tmp:/tmp
|
|
100
|
+
|
|
101
|
+
deploy-pages:
|
|
102
|
+
image: bitnami/git
|
|
103
|
+
commands:
|
|
104
|
+
- git config user.name "woodpecker-bot"
|
|
105
|
+
- git config user.email "bot@codeberg"
|
|
106
|
+
- git add docs/results/ || true
|
|
107
|
+
- git commit -m "woodpecker: result" || true
|
|
108
|
+
- git push origin pages || true
|
|
109
|
+
when:
|
|
110
|
+
- event: manual
|
|
111
|
+
|
|
112
|
+
name: Dump Processor (Recebe do Browser)
|
|
113
|
+
|
|
114
|
+
on:
|
|
115
|
+
push:
|
|
116
|
+
paths:
|
|
117
|
+
- 'dumps/incoming/**'
|
|
118
|
+
workflow_dispatch:
|
|
119
|
+
inputs:
|
|
120
|
+
dump_path:
|
|
121
|
+
description: 'Caminho do dump'
|
|
122
|
+
required: false
|
|
123
|
+
|
|
124
|
+
permissions:
|
|
125
|
+
contents: write
|
|
126
|
+
|
|
127
|
+
jobs:
|
|
128
|
+
process-dump:
|
|
129
|
+
runs-on: ubuntu-latest
|
|
130
|
+
steps:
|
|
131
|
+
- uses: actions/checkout@v4
|
|
132
|
+
- name: Processar dumps novos
|
|
133
|
+
run: |
|
|
134
|
+
echo "Processando dumps..."
|
|
135
|
+
ls -R dumps/incoming/ || true
|
|
136
|
+
mkdir -p docs/processed
|
|
137
|
+
for f in dumps/incoming/*; do
|
|
138
|
+
[ -e "$f" ] || continue
|
|
139
|
+
base=$(basename "$f")
|
|
140
|
+
echo "Processando $base"
|
|
141
|
+
# Exemplo: extrai info, gera preview, etc - sem pesar browser
|
|
142
|
+
cp "$f" "docs/processed/$base.processed"
|
|
143
|
+
sha256sum "$f" > "docs/processed/$base.sha256"
|
|
144
|
+
done
|
|
145
|
+
- name: Commit processed
|
|
146
|
+
run: |
|
|
147
|
+
git config user.name "dump-bot"
|
|
148
|
+
git config user.email "dump@bot"
|
|
149
|
+
git add docs/processed/ || true
|
|
150
|
+
git commit -m "chore: process dumps [skip ci]" || true
|
|
151
|
+
git push || true
|
|
152
|
+
|
|
153
|
+
name: Forgejo Heavy Processor (Unlimited Self-Hosted)
|
|
154
|
+
|
|
155
|
+
on:
|
|
156
|
+
push:
|
|
157
|
+
branches: [main]
|
|
158
|
+
workflow_dispatch:
|
|
159
|
+
inputs:
|
|
160
|
+
job_id:
|
|
161
|
+
description: 'Job ID do browser'
|
|
162
|
+
required: true
|
|
163
|
+
filename:
|
|
164
|
+
description: 'Arquivo'
|
|
165
|
+
|
|
166
|
+
# Forgejo usa runners self-hosted = ilimitado
|
|
167
|
+
jobs:
|
|
168
|
+
heavy-unlimited:
|
|
169
|
+
runs-on: ubuntu-latest
|
|
170
|
+
steps:
|
|
171
|
+
- uses: actions/checkout@v4
|
|
172
|
+
- name: Transformar Storage em RAM (Swap + tmpfs)
|
|
173
|
+
run: |
|
|
174
|
+
echo "=== Antes ===" && free -h && df -h
|
|
175
|
+
# 1. Cria swap de 16GB em /mnt (storage -> RAM)
|
|
176
|
+
sudo fallocate -l 16G /mnt/swapfile || sudo dd if=/dev/zero of=/mnt/swapfile bs=1G count=16
|
|
177
|
+
sudo chmod 600 /mnt/swapfile
|
|
178
|
+
sudo mkswap /mnt/swapfile
|
|
179
|
+
sudo swapon /mnt/swapfile
|
|
180
|
+
# 2. Cria RAM disk de 8GB para processamento
|
|
181
|
+
sudo mkdir -p /mnt/ramdisk
|
|
182
|
+
sudo mount -t tmpfs -o size=8G tmpfs /mnt/ramdisk
|
|
183
|
+
# 3. ZRAM para comprimir RAM
|
|
184
|
+
sudo modprobe zram || true
|
|
185
|
+
echo "=== Depois (Storage virou RAM) ===" && free -h && swapon --show
|
|
186
|
+
|
|
187
|
+
- name: Processar binário com RAM expandida
|
|
188
|
+
run: |
|
|
189
|
+
echo "Processando ${{ inputs.filename }} com storage como RAM"
|
|
190
|
+
cp -r dumps/incoming/* /mnt/ramdisk/ 2>/dev/null || true
|
|
191
|
+
ls -lh /mnt/ramdisk/
|
|
192
|
+
# Simula heavy: usa /mnt/ramdisk como workspace
|
|
193
|
+
echo "processed at $(date)" > /mnt/ramdisk/result.txt
|
|
194
|
+
cp /mnt/ramdisk/* docs/results/ 2>/dev/null || true
|
|
195
|
+
|
|
196
|
+
- name: Salvar como artifact ilimitado (Forgejo self-hosted não tem limite 500MB)
|
|
197
|
+
uses: actions/upload-artifact@v4
|
|
198
|
+
with:
|
|
199
|
+
name: result-${{ inputs.job_id }}
|
|
200
|
+
path: docs/results/
|
|
201
|
+
|
|
202
|
+
name: OpenCode Runner (Browser triggers, Action runs)
|
|
203
|
+
|
|
204
|
+
on:
|
|
205
|
+
workflow_dispatch:
|
|
206
|
+
inputs:
|
|
207
|
+
session_id:
|
|
208
|
+
description: 'ID da sessão browser'
|
|
209
|
+
required: true
|
|
210
|
+
prompt:
|
|
211
|
+
description: 'Prompt para o agente'
|
|
212
|
+
required: true
|
|
213
|
+
model:
|
|
214
|
+
description: 'provider/model'
|
|
215
|
+
required: false
|
|
216
|
+
default: 'opencode/gpt-5'
|
|
217
|
+
repository_dispatch:
|
|
218
|
+
types: [opencode-run]
|
|
219
|
+
|
|
220
|
+
permissions:
|
|
221
|
+
contents: write
|
|
222
|
+
issues: write
|
|
223
|
+
|
|
224
|
+
jobs:
|
|
225
|
+
run-opencode:
|
|
226
|
+
runs-on: ubuntu-latest
|
|
227
|
+
steps:
|
|
228
|
+
- uses: actions/checkout@v4
|
|
229
|
+
- uses: oven-sh/setup-bun@v2
|
|
230
|
+
- run: curl -fsSL https://opencode.ai/install | bash
|
|
231
|
+
- run: echo "$HOME/.opencode/bin" >> $GITHUB_PATH
|
|
232
|
+
|
|
233
|
+
- name: Rodar OpenCode headless
|
|
234
|
+
env:
|
|
235
|
+
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
236
|
+
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
|
237
|
+
run: |
|
|
238
|
+
mkdir -p .opencode/results
|
|
239
|
+
opencode run --format json "${{ inputs.prompt }}" > .opencode/results/${{ inputs.session_id }}.json || true
|
|
240
|
+
cat .opencode/results/${{ inputs.session_id }}.json
|
|
241
|
+
|
|
242
|
+
- name: Salvar resultado no repo
|
|
243
|
+
run: |
|
|
244
|
+
git config user.name "opencode-bot"
|
|
245
|
+
git config user.email "bot@opencode.bot"
|
|
246
|
+
git add .opencode/results/
|
|
247
|
+
git commit -m "opencode: ${{ inputs.session_id }}" || true
|
|
248
|
+
git push || true
|
|
249
|
+
|
|
250
|
+
- name: Upload result artifact
|
|
251
|
+
uses: actions/upload-artifact@v4
|
|
252
|
+
with:
|
|
253
|
+
name: opencode-${{ inputs.session_id }}
|
|
254
|
+
path: .opencode/results/
|
|
255
|
+
|
|
256
|
+
name: Deploy GitHub Pages
|
|
257
|
+
|
|
258
|
+
on:
|
|
259
|
+
push:
|
|
260
|
+
branches: [main]
|
|
261
|
+
workflow_dispatch:
|
|
262
|
+
|
|
263
|
+
permissions:
|
|
264
|
+
contents: read
|
|
265
|
+
pages: write
|
|
266
|
+
id-token: write
|
|
267
|
+
|
|
268
|
+
concurrency:
|
|
269
|
+
group: pages
|
|
270
|
+
cancel-in-progress: false
|
|
271
|
+
|
|
272
|
+
jobs:
|
|
273
|
+
build:
|
|
274
|
+
runs-on: ubuntu-latest
|
|
275
|
+
steps:
|
|
276
|
+
- uses: actions/checkout@v4
|
|
277
|
+
- name: Setup Pages
|
|
278
|
+
uses: actions/configure-pages@v5
|
|
279
|
+
- name: Criar .nojekyll
|
|
280
|
+
run: touch .nojekyll
|
|
281
|
+
- name: Build (se precisar)
|
|
282
|
+
run: |
|
|
283
|
+
echo "Site estático - sem build"
|
|
284
|
+
ls -la
|
|
285
|
+
- name: Upload artifact
|
|
286
|
+
uses: actions/upload-pages-artifact@v3
|
|
287
|
+
with:
|
|
288
|
+
path: .
|
|
289
|
+
deploy:
|
|
290
|
+
environment:
|
|
291
|
+
name: github-pages
|
|
292
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
293
|
+
runs-on: ubuntu-latest
|
|
294
|
+
needs: build
|
|
295
|
+
steps:
|
|
296
|
+
- id: deployment
|
|
297
|
+
uses: actions/deploy-pages@v4
|
|
298
|
+
|
|
299
|
+
name: Process Binary (Heavy - Offloaded from Browser)
|
|
300
|
+
|
|
301
|
+
on:
|
|
302
|
+
workflow_dispatch:
|
|
303
|
+
inputs:
|
|
304
|
+
job_id:
|
|
305
|
+
description: 'ID da execução vinda do browser'
|
|
306
|
+
required: true
|
|
307
|
+
type: string
|
|
308
|
+
filename:
|
|
309
|
+
description: 'Nome do binário / arquivo'
|
|
310
|
+
required: true
|
|
311
|
+
type: string
|
|
312
|
+
action:
|
|
313
|
+
description: 'Ação: run, analyze, export'
|
|
314
|
+
required: false
|
|
315
|
+
default: 'run'
|
|
316
|
+
type: choice
|
|
317
|
+
options: [run, analyze, export, opencode]
|
|
318
|
+
prompt:
|
|
319
|
+
description: 'Prompt ou comando opcional'
|
|
320
|
+
required: false
|
|
321
|
+
type: string
|
|
322
|
+
|
|
323
|
+
# Permissão para commitar resultado de volta
|
|
324
|
+
permissions:
|
|
325
|
+
contents: write
|
|
326
|
+
actions: read
|
|
327
|
+
pages: write
|
|
328
|
+
id-token: write
|
|
329
|
+
|
|
330
|
+
jobs:
|
|
331
|
+
heavy:
|
|
332
|
+
runs-on: ubuntu-latest
|
|
333
|
+
timeout-minutes: 30
|
|
334
|
+
steps:
|
|
335
|
+
- name: Checkout repo
|
|
336
|
+
uses: actions/checkout@v4
|
|
337
|
+
|
|
338
|
+
- name: Setup Bun (OpenCode precisa)
|
|
339
|
+
uses: oven-sh/setup-bun@v2
|
|
340
|
+
with:
|
|
341
|
+
bun-version: latest
|
|
342
|
+
|
|
343
|
+
- name: Setup Node
|
|
344
|
+
uses: actions/setup-node@v4
|
|
345
|
+
with:
|
|
346
|
+
node-version: 20
|
|
347
|
+
|
|
348
|
+
- name: Baixar dump do browser se existir
|
|
349
|
+
run: |
|
|
350
|
+
mkdir -p dumps/incoming output
|
|
351
|
+
echo "job_id=${{ inputs.job_id }}" >> $GITHUB_STEP_SUMMARY
|
|
352
|
+
echo "filename=${{ inputs.filename }}" >> $GITHUB_STEP_SUMMARY
|
|
353
|
+
# Se o arquivo foi enviado como artifact anterior, tenta baixar
|
|
354
|
+
ls -la dumps/ || true
|
|
355
|
+
|
|
356
|
+
- name: Instalar OpenCode (dentro do Action, não no browser)
|
|
357
|
+
run: |
|
|
358
|
+
curl -fsSL https://opencode.ai/install | bash
|
|
359
|
+
echo "$HOME/.opencode/bin" >> $GITHUB_PATH
|
|
360
|
+
opencode --version || npm i -g opencode-ai@latest
|
|
361
|
+
|
|
362
|
+
- name: Processamento pesado (aqui não pesa o navegador)
|
|
363
|
+
env:
|
|
364
|
+
JOB_ID: ${{ inputs.job_id }}
|
|
365
|
+
FILENAME: ${{ inputs.filename }}
|
|
366
|
+
PROMPT: ${{ inputs.prompt }}
|
|
367
|
+
run: |
|
|
368
|
+
echo "Processando $FILENAME com ação ${{ inputs.action }}"
|
|
369
|
+
# Simula processamento pesado
|
|
370
|
+
# Exemplo real OpenCode:
|
|
371
|
+
# opencode run --format json "$PROMPT" > output/result.json || true
|
|
372
|
+
|
|
373
|
+
# Se for binário, roda análise
|
|
374
|
+
if [ "${{ inputs.action }}" = "analyze" ]; then
|
|
375
|
+
file dumps/incoming/${{ inputs.filename }} > output/analysis.txt || echo "arquivo não encontrado" > output/analysis.txt
|
|
376
|
+
sha256sum dumps/incoming/${{ inputs.filename }} > output/hash.txt || true
|
|
377
|
+
fi
|
|
378
|
+
|
|
379
|
+
# Se for export, copia
|
|
380
|
+
cp -r dumps/incoming/* output/ 2>/dev/null || echo "{}" > output/result.json
|
|
381
|
+
|
|
382
|
+
echo "{"job_id":"$JOB_ID","filename":"$FILENAME","status":"done","processed_at":"$(date -u +%Y-%m-%dT%H:%M:%SZ)"}" > output/manifest.json
|
|
383
|
+
ls -lh output/
|
|
384
|
+
|
|
385
|
+
- name: Commit resultado no repo (storage via Git)
|
|
386
|
+
run: |
|
|
387
|
+
mkdir -p docs/results/${{ inputs.job_id }}
|
|
388
|
+
cp -r output/* docs/results/${{ inputs.job_id }}/
|
|
389
|
+
git config user.name "opencode-bot"
|
|
390
|
+
git config user.email "bot@opencode.bot"
|
|
391
|
+
git add docs/results/${{ inputs.job_id }}/
|
|
392
|
+
git commit -m "feat: result ${{ inputs.job_id }} - ${{ inputs.filename }}" || echo "nada para commitar"
|
|
393
|
+
git push || true
|
|
394
|
+
|
|
395
|
+
- name: Upload artifact para Pages
|
|
396
|
+
uses: actions/upload-artifact@v4
|
|
397
|
+
with:
|
|
398
|
+
name: result-${{ inputs.job_id }}
|
|
399
|
+
path: output/
|
|
400
|
+
retention-days: 7
|
|
401
|
+
if-no-files-found: warn
|
|
402
|
+
|
|
403
|
+
- name: Deploy para Pages (se quiser expor resultado)
|
|
404
|
+
if: ${{ inputs.action == 'export' }}
|
|
405
|
+
uses: actions/upload-pages-artifact@v3
|
|
406
|
+
with:
|
|
407
|
+
path: docs/results/${{ inputs.job_id }}
|
|
408
|
+
|
|
409
|
+
# Opcional segundo job para Pages
|
|
410
|
+
deploy-pages:
|
|
411
|
+
if: ${{ inputs.action == 'export' }}
|
|
412
|
+
needs: heavy
|
|
413
|
+
runs-on: ubuntu-latest
|
|
414
|
+
permissions:
|
|
415
|
+
pages: write
|
|
416
|
+
id-token: write
|
|
417
|
+
environment:
|
|
418
|
+
name: github-pages
|
|
419
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
420
|
+
steps:
|
|
421
|
+
- id: deployment
|
|
422
|
+
uses: actions/deploy-pages@v4
|
|
423
|
+
|
|
424
|
+
name: Forgejo Third-Party Only
|
|
425
|
+
on:
|
|
426
|
+
workflow_dispatch:
|
|
427
|
+
inputs:
|
|
428
|
+
job_id: { required: true, type: string }
|
|
429
|
+
jobs:
|
|
430
|
+
third-party-process:
|
|
431
|
+
runs-on: ubuntu-latest
|
|
432
|
+
steps:
|
|
433
|
+
- uses: actions/checkout@v4
|
|
434
|
+
- run: |
|
|
435
|
+
free -h
|
|
436
|
+
sudo fallocate -l 12G /mnt/swapfile || true
|
|
437
|
+
sudo chmod 600 /mnt/swapfile; sudo mkswap /mnt/swapfile || true; sudo swapon /mnt/swapfile || true
|
|
438
|
+
sudo mkdir -p /mnt/ramdisk; sudo mount -t tmpfs -o size=6G tmpfs /mnt/ramdisk || true
|
|
439
|
+
echo "Storage -> RAM done, all third-party"
|
|
440
|
+
|
|
441
|
+
name: GitHub Third-Party Only
|
|
442
|
+
on:
|
|
443
|
+
workflow_dispatch:
|
|
444
|
+
inputs:
|
|
445
|
+
job_id: { required: true, type: string }
|
|
446
|
+
permissions:
|
|
447
|
+
contents: write
|
|
448
|
+
jobs:
|
|
449
|
+
thirdparty:
|
|
450
|
+
runs-on: ubuntu-latest
|
|
451
|
+
steps:
|
|
452
|
+
- uses: actions/checkout@v4
|
|
453
|
+
- run: |
|
|
454
|
+
echo "Runner third-party GitHub-hosted, not self-hosted"
|
|
455
|
+
free -h
|
|
456
|
+
sudo fallocate -l 16G /mnt/swapfile || true
|
|
457
|
+
sudo chmod 600 /mnt/swapfile; sudo mkswap /mnt/swapfile || true; sudo swapon /mnt/swapfile || true
|
|
458
|
+
sudo mkdir -p /mnt/ramdisk; sudo mount -t tmpfs -o size=8G tmpfs /mnt/ramdisk || true
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
v1.14.21
|
|
2
|
+
mimo-v2.5-free
|
|
3
|
+
21 Jul 2026, 00:59
|
|
4
|
+
Greeting
|
|
5
|
+
oi
|
|
6
|
+
Build · mimo-v2.5-free
|
|
7
|
+
·
|
|
8
|
+
12:59 AM
|
|
9
|
+
|
|
10
|
+
The user said "oi" which is a Portuguese greeting (like "hi" or "hello"). I should respond briefly and naturally.
|
|
11
|
+
|
|
12
|
+
Hi! How can I help you?
|
|
13
|
+
|
|
14
|
+
Build · mimo-v2.5-free · 3s
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Conversation Turns
|
|
2
|
+
|
|
3
|
+
- [user-01.md](./user-01.md) — user: oi...
|
|
4
|
+
- [assistant-01.md](./assistant-01.md) — assistant: [Thinking] The user said "oi" which is a Portuguese greeting (like "hi" or "hello"). I should respon...
|
|
5
|
+
- [user-02.md](./user-02.md) — user: oi...
|
|
6
|
+
- [assistant-02.md](./assistant-02.md) — assistant: [Thinking] The user said "oi" which is a Portuguese greeting (like "hi" or "hello"). I should respon...
|
|
7
|
+
- [user-03.md](./user-03.md) — user: ***me mostre a passo a passo, os scripts e etc, usando a emomoria deles dos repositorios, dos bucket...
|
|
8
|
+
- [assistant-03.md](./assistant-03.md) — assistant: [Thinking] The user is asking me to research how to create a platform with container sandboxes using...
|
|
9
|
+
- [user-04.md](./user-04.md) — user: pesuisa as outras opçoes por favor citadas aqui faz uma todo lsit de pesuisa: https://opncd.ai/share...
|
|
10
|
+
- [user-05.md](./user-05.md) — user: pesuisa as outras opçoes por favor citadas aqui faz uma todo lsit de pesuisa: ***me mostre a passo ...
|
|
11
|
+
- [assistant-04.md](./assistant-04.md) — assistant: [Thinking] The user wants me to research all the options mentioned and create a comprehensive todo l...
|
|
12
|
+
- [user-06.md](./user-06.md) — user: continue por favor faç uma todo lsit de pesuisa ***me mostre a passo a passo, os scripts e etc, usan...
|
|
13
|
+
- [assistant-05.md](./assistant-05.md) — assistant: [Thinking] The user wants me to continue researching and create a comprehensive todo list of all the...
|
|
14
|
+
- [user-07.md](./user-07.md) — user: ***me mostre a passo a passo, os scripts e etc, usando a emomoria deles dos repositorios, dos bucket...
|
|
15
|
+
- [assistant-06.md](./assistant-06.md) — assistant: [Thinking] The user is asking me to show them a step-by-step implementation plan for building a plat...
|
|
Binary file
|