DeepSeek Harness Remote
DeepSeek Harness Remote 可將手機或另一台電腦與你運行 DeepSeek Harness 的電腦安全連接,隨時隨地繼續你的工作,方便隨時查看進度並繼續工作。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Estante: convierte los README de tus proyectos en libros para estudiarlos y defenderlos en entrevistas
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Biblioteca personal de estudio: cada proyecto que construyes se convierte en un libro que lees en el iPhone (o cualquier móvil) como en Apple Books, para entender y defender cómo está hecho.
La fuente de cada libro es un único Markdown, INFO_PROYECT_<NOMBRE>.md. La app no inventa contenido: el orden y el texto del MD son la autoridad. El build lo estructura en capítulos, secciones, glosario y banco de preguntas, y lo publica como archivos estáticos.
Estante es personal: cada quien tiene sus libros y su despliegue. Este repo trae solo la app. Tus libros viven en projects/, que está en .gitignore: nunca suben a git ni viajan con un fork o un clon. La IA que escribe los libros la pone y la paga quien la usa. Mientras no tengas libros, la app muestra un tutorial (examples/).
Clona la app e instala:
git clone https://github.com/AlanSan1195/estante && cd estante && bun install
bunx playwright install chromium
Chromium se usa para renderizar diagramas Mermaid en tu computadora y para las pruebas e2e.
Crea tus libros con tu agente o a mano (ver Añadir un libro). Para leerlos en local, usa bun run dev.
Publica con bun run deploy (Vercel) o bun run deploy --netlify. El build se hace en tu computadora, porque ahí están tus libros, y la CLI sube el resultado. La primera vez te pide iniciar sesión y elegir o crear el proyecto (ver Publicar).
Instala en el teléfono: abre tu URL en la computadora y, en Inicio, toca Ábrela en tu teléfono. Escanea el QR y añádela a la pantalla de inicio (Instalar en el teléfono).
Para traer las mejoras de la app, haz git pull. Nunca hay conflictos con tus libros, porque no están en git. Para respaldarlos, cada MD suele vivir también en el repo de su proyecto. Si quieres, projects/ puede ser un repo privado propio.
Con un agente (recomendado). En Claude Code, desde la raíz de este repo, usa /libro ../mi-proyecto (o la URL de un repo). El agente lee el código, escribe projects/INFO_PROYECT_<NOMBRE>.md con el formato correcto, lo valida y te pregunta antes de publicarlo. Con otros agentes (Codex…), pídele que siga docs/generar-libro.md.
A mano:
Copia el MD a projects/, por ejemplo projects/INFO_PROYECT_MI_APP.md. También vale una subcarpeta por proyecto, y nombres con espacios o con la copia de Finder (INFO_PROYECT_MI_APP 2.md → slug mi-app-2).
Opcional: añade una portada projects/<slug>.cover.jpg (o .png / .webp / .svg). Si no la hay, se genera una portada SVG.
Opcional: añade un frontmatter YAML para ajustar metadatos:
---
title: Mi app
subtitle: Libro de estudio
author: Tu nombre
color: "#4338ca" # paleta de la portada
repo: usuario/mi-app # las referencias a archivos enlazan a GitHub
branch: main
root: /ruta/absoluta/al/proyecto # si la raíz no se detecta sola
---
Con bun run dev corriendo, guardar el MD recompila el libro y recarga el navegador.
El formato completo, con una plantilla, está en docs/formato-libro.md. Lo esencial:
## N. Título son capítulos y ### N.M secciones.**Implementado:**, **Por verificar:**…) son callouts.[x](src/archivo.ts:15) es una referencia a archivo.**N. ¿Pregunta?** Respuesta es el banco de preguntas de Práctica.bun install
bun run dev # servidor de desarrollo (compila projects/ y vigila cambios)
bun run build # build estático en dist/
bun run books:check # estadísticas y avisos de cada libro, sin escribir nada (--strict sale con 1 si hay avisos)
bun test # núcleo (libro sintético de fixture) y motor de lectura
bun run test:e2e # lector, estante y estudio en WebKit con el descriptor de iPhone 15 (build + preview)
bun run check # astro check + Biome + reglas de arquitectura (dependency-cruiser)
bun run icons # regenera los iconos PNG y el favicon desde assets/icons/estante.svg
Hexagonal en el núcleo, pragmática en la interfaz:
src/
├─ core/ núcleo: TypeScript puro, sin Astro, React ni node:*
│ ├─ domain/ Book, Chapter, Block, Location, Leitner, preferencias, formato publicado
│ ├─ ports/ ProjectSource, DocumentParser, CodeHighlighter, DiagramRenderer, CoverGenerator,
│ │ BookRenderer, BookRepository, ContentEnricher, Progress/Annotation/Practice/PreferencesRepository
│ └─ application/ compileLibrary (caso de uso del build), validateBook, publishBook
├─ adapters/build/ fs, remark, Shiki, Mermaid, portada SVG, HTML, repositorio estático, enriquecedor no-op
├─ adapters/browser/ IndexedDB (idb): progreso, preferencias, conteo de páginas, anotaciones, práctica
├─ integration/ integración de Astro = raíz de composición del build
├─ reader-engine/ motor de lectura en TS puro: paginación, curl, deslizar, desplazamiento, gestos
├─ ui/ React: lector (chrome, hojas, visores, estudio), estante (library/), práctica, búsqueda;
│ stores de Zustand; services.ts = raíz del navegador
├─ components/ barra de pestañas de vidrio (Astro, sin JS)
├─ layouts/ · pages/ rutas: / (Inicio), /biblioteca, /practica, /buscar, /leer/<slug>[?b=<bloque>]
└─ styles/ tokens, temas, tipografía del libro y vidrio
dependency-cruiser hace cumplir las fronteras: src/core no importa nada de fuera del núcleo, y src/reader-engine no importa React, UI ni adaptadores.
translate3d(−i·W). Medir los fragmentos de cada bloque da el mapa bloque ↔ página, así que cambiar la letra o rotar el teléfono conserva la ubicación.clip-path y una matriz de reflexión; la solapa es la página espejada y tenue. Solo cambian clip-path, transform y opacidad por cuadro: React no participa.<ClientRouter/>); al cerrarlo vuelve a su sitio. Inicio y Biblioteca siguen la apariencia del sistema.engine.redecorate()).search.json, dentro del libro (menú ≡) y en todo el estante (/buscar). Los resultados abren /leer/<slug>?b=<bloque> con la píldora para volver.Cambios previstos que solo exigen un adaptador nuevo:
ProjectSource);ContentEnricher);ProgressRepository);OfflineRepository).public/manifest.webmanifest (standalone, fondo negro) con iconos normales y maskable, más apple-touch-icon.png. Se generan con bun run icons.public/sw.js):
/offline/.astro dev no lo usa.books-<slug> (puerto OfflineRepository, adaptador sobre Cache Storage) y la descarga es atómica.beforeinstallprompt.Instalar la app y leer sin conexión exige HTTPS, así que hace falta un hosting. Como tus libros solo están en tu computadora, el build se hace ahí y se sube ya construido con bun run deploy (scripts/deploy.ts):
bun run deploy # Vercel: vercel pull + vercel build --prod + vercel deploy --prebuilt --prod
bun run deploy --netlify # Netlify: bun run build + netlify deploy --prod --no-build --dir dist
.vercel/ o .netlify/, que están ignorados.projects/ está vacío, el comando se detiene para no publicar solo el tutorial (--allow-empty lo fuerza)..estante-cache/, que no se versiona.vercel.json (git.deploymentEnabled: false) y netlify.toml (ignore = "exit 0") los desactivan. Un push no publica nada, porque en el servidor no están tus libros y saldría solo el tutorial.| Host | Configuración en el repo |
|---|---|
| Vercel | vercel.json: Bun, salida dist, cabeceras y Node 24 tomado de engines |
| Netlify | netlify.toml + public/_headers |
| Otro estático (Cloudflare Pages…) | Sube dist/ tras bun run build. public/_headers sirve en Cloudflare. GitHub Pages no funciona tal cual: el sitio viviría en /estante/ y la app usa rutas absolutas. |
En todos los hosts las cabeceras son las mismas:
sw.js sin caché y con Service-Worker-Allowed;/_astro/* inmutable y /books/* con caché corta;noindex para que no aparezca en buscadores, que también está en el <meta> y en robots.txt.El sitio no aparece en buscadores, pero lo puede abrir cualquiera que tenga la URL. Si quieres que sea privado, pon delante la protección de tu host o Cloudflare Access.
La instalación y la lectura sin conexión necesitan HTTPS, así que hazlas con la URL de tu despliegue. Por la red local (http://192.168…) el lector funciona, pero el navegador no registra el service worker. Para no teclear la URL en el teléfono, ábrela en la computadora: Inicio muestra Ábrela en tu teléfono con un QR.
Esto es lo que escribe el build y lo que consumen el lector y el service worker. Los tipos están en src/core/domain/published.ts.
public/books/
index.json catálogo (LibraryCatalog)
<slug>/manifest.json índice, glosario, preguntas, checklists, palabras (BookManifest)
<slug>/<capitulo>.html fragmento HTML por capítulo
<slug>/search.json documentos de búsqueda por bloque
<slug>/cover.svg|jpg|… portada
Una ubicación de lectura es { chapterId, blockId, charOffset }, nunca un número de página. Cada bloque del HTML lleva data-b (id estable) y data-w (palabras previas dentro del capítulo). El porcentaje se calcula como (chapter.wordStart + data-w + fracción del bloque) / totalWords.