dsh-github

August 30, 2026 · View on GitHub

dsh-github

PRs, revisiones, issues y CI de GitHub para DeepSeek Harness — cada escritura aprobada por un humano y el token nunca registrado.

Crea, revisa, fusiona y busca en GitHub desde el agente, con una acción compuesta de CI, un bot de revisión por sondeo y una puerta de status-check.

License DSH plugin Node CI Version npm version

  • Canal 1024 store: npm i -g dsh1024 una vez, luego dsh1024 plugin --profile web add @perrylink/dsh-github (cuenta para el ranking de instalaciones de deepseek1024.com). npm downloads

English · 简体中文 · Español · Português · हिन्दी


📚 Tabla de contenidos

Compatibilidad

SuperficieEstado
HarnessDeepSeek Harness 0.1.1-rc.2 (compatibilidad declarada para 0.1.1-rc.2)
Node^22.19.0 || >=24.0.0
PlataformasTodas (plugin host; red saliente a GitHub)
ModeloCualquiera (la revisión estática es determinista; reviewMode: "model" es opcional)

Qué obtienes

dsh-github cubre el vacío de GitHub entre dsh y herramientas como Claude Code y Codex: tu agente puede leer, revisar, abrir, actualizar y fusionar pull requests, leer metadatos de repositorios y archivos, comentar y cerrar issues, y buscar — mientras un humano aprueba cada escritura y el token permanece en secreto.

  • 14 herramientaspr_create, pr_merge, pr_update, gh_review, review_post, gh_issue, issue_open, issue_comment, issue_close, gh_search, gh_repo, gh_file, gh_repo_search, gh_checks, todas con JSON canónico mediante defineTool.
  • 3 familias de comandos/pr create, /review (start/stop/post), /issue open.
  • Ciclo de vida completo de PRs — crear → revisar → actualizar (título/cuerpo/estado/rama base) → fusionar (merge/squash/rebase, borrado opcional de la rama head).
  • Revisiones en líneareview_post publica un único comentario de resumen o comentarios de revisión anclados por línea contra el commit head de la PR.
  • Escrituras con aprobación — cada escritura en GitHub pasa por ctx.approval (ask por defecto, se cierra ante fallo); los motivos de aprobación previsualizan títulos, tamaños de cuerpo y anulaciones de comentarios.
  • Secreto del token — capa de credenciales → entorno → CLI gh, resuelto por operación, nunca en registros, eventos, representaciones ni errores.
  • Trabajos de revisión en segundo plano/review se ejecuta en ctx.jobs con la superficie propia del host job_list / job_output / job_kill.
  • Resiliencia — reintento 429 con retroceso Retry-After/x-ratelimit-reset; las herramientas de lectura son seguras ante concurrencia; todas las llamadas respetan la cancelación.
  • Superficie CI — la herramienta de un solo uso ci_run, un bot de revisión por sondeo y una puerta de status-check (acción compuesta action.yml).

Inicio rápido

# 1. instala el bundle en tu perfil
dsh plugin --profile web add "github:PerryLink/dsh-github#main"

# o desde npm (versiones publicadas)
dsh plugin --profile web add @perrylink/dsh-github

# 2. reinicia y verifica la fila
dsh --profile web --dump-config | grep -A3 'id: dsh-github'

Instalación y desinstalación

  • canal git (último main): dsh plugin --profile web add "github:PerryLink/dsh-github#main" — el script prepare compila solo con dependencias de producción.
  • canal npm (versiones publicadas): dsh plugin --profile web add @perrylink/dsh-github.
  • canal tarball: pnpm pack en este repositorio y luego dsh plugin --profile web add ./dsh-github-<version>.tgz.
  • desinstalar: dsh plugin --profile web remove dsh-github (o elimina la fila del parche de perfil).

Configuración

Todos los ajustes son campos Config de Schemastery (modificables desde cordis.yml). Una anulación dirigida por id reemplaza toda la fila — vuelve a indicar cada clave que necesites. cordis.patch.yml documenta cada clave en línea.

ClavePor defectoSignificado
tokenSourceautoauto (credenciales → env → gh) o uno de credentials / env / gh
tokenRefGITHUB_TOKENReferencia de la capa de credenciales / nombre de la variable de entorno
defaultOwnerRepoowner/repo de respaldo cuando una llamada no indica ninguno y git no tiene origen
autoCommitfalseSi /pr create puede indicar al modelo que haga commit+push primero
maxDiffChars8000Límite de caracteres para los diffs de PR leídos en las revisiones
renderExcerptChars2000Límite de caracteres para el extracto de diff representado en la salida de la herramienta
maxComments20Límite para los comentarios de PR listados por gh_review
reviewJobTimeoutMs600000Plazo para un trabajo de revisión en segundo plano (falla con timeout)
maxReviewRecords50Límite para los registros en memoria de trabajos de revisión; los registros finalizados más antiguos se eliminan primero
maxFileChars12000Límite de caracteres para el contenido de archivos leído por gh_file
maxFindings50Límite de hallazgos del analizador por revisión
maxLineLength300Longitud de línea a partir de la cual el analizador marca un hallazgo de línea larga
reviewModestaticMotor de revisión: static (analizador determinista) o model (subagente de un solo uso a través de la seam subagents del host; falla de forma evidente si la seam no está presente)
modelReviewProviderNombre del proveedor de subagente para reviewMode: "model"; por defecto, el primer proveedor registrado
maxRetries3Intentos de reintento 429 por solicitud
retryBaseMs500Base del retroceso de reintento (se duplica por intento)
retryMaxWaitMs60000Tope del retroceso de reintento
requestTimeoutMs30000Tiempo máximo por solicitud; aborta el fetch al superarse
apiBaseUrlhttps://api.github.comURL base de la API REST de GitHub (GitHub Enterprise)
allowedActions['pr.create','pr.merge','pr.update','review.post','issue.create','issue.comment','issue.close','ci.run']Lista blanca de acciones de escritura; cualquier otra se deniega antes de la aprobación
workspaceDirprocess cwdDirectorio de trabajo para la inspección de git de solo lectura
ci{ enabled: false, … }Sección de integración CI: bot de revisión por sondeo, puerta de status-check y la herramienta de un solo uso ci_run (contiene todas las claves ci.*)

Herramientas y superficies

SuperficieTipoNotas
pr_createherramientaCrea una pull request (escritura; con aprobación)
pr_mergeherramientaFusiona una PR (merge/squash/rebase, borrado opcional de la rama head)
pr_updateherramientaActualiza una PR (título/cuerpo/estado/rama base)
gh_reviewherramientaLee una PR: metadatos, diff limitado, comentarios, CI, hallazgos estáticos
review_postherramientaPublica un comentario de revisión (resumen o en línea anclado por línea)
gh_issueherramientaLista / obtiene / comenta issues (las PRs se marcan kind: "pr")
issue_openherramientaCrea un issue
issue_commentherramientaComenta un issue o una PR
issue_closeherramientaCierra un issue (motivo de estado opcional)
gh_searchherramientaBusca issues y PRs (cuota de búsqueda independiente)
gh_repoherramientaLee los metadatos del repositorio
gh_fileherramientaLee un archivo en una rama/tag/commit
gh_repo_searchherramientaBúsqueda GraphQL de repositorios (cuota de búsqueda separada)
gh_checksherramientaChecks de estado GraphQL de un PR (check runs + commit statuses)
/pr createcomandoLee el estado de git y encola una instrucción pr_create
/reviewcomandoInicia / detiene / publica un trabajo de revisión en segundo plano
/issue opencomandoEncola una instrucción issue_open
ci_runherramientaRevisión CI de un solo uso ejecutada por la acción compuesta / el driver CI
bot de revisiónsuperficieBot de revisión por sondeo con comentarios inline idempotentes (ci.*)
puerta de status-checksuperficiePublica el veredicto success / needs-changes por commit head de PR (action.yml)

Arquitectura

  • Capa de credenciales. tokenSource: auto resuelve por operación en el orden capa de credenciales (referencia GITHUB_TOKEN) → variable de entorno → token de la CLI gh. El valor es una variable local entregada al cliente REST; nunca entra en valores canónicos, representaciones, tarjetas, salidas de comandos, avisos inyectados, salidas de trabajos, motivos de aprobación ni mensajes de error.
  • Puerta de aprobación. Todas las escrituras fluyen a través de las herramientas del modelo. Un listener waterfall tools/pre-execute devuelve ask para las herramientas de escritura, de modo que el registro pregunta al humano mediante ctx.approval (el host registra el par de auditoría approval/asked + approval/decided) y se cierra ante fallo sin un respondedor. Los comandos nunca escriben directamente: un comando de escritura reúne contexto de solo lectura y luego despierta al agente para que el modelo ejecute la herramienta controlada dentro de un turno.
  • Trabajo de revisión en segundo plano. /review <pr> inicia un trabajo github-review en ctx.jobs; el trabajo obtiene metadatos (capturando el SHA del commit head para la publicación en línea), el diff limitado, las comprobaciones de CI y los comentarios existentes, y luego ejecuta el analizador determinista multiarchivo (src/review.ts). Con reviewMode: "model", el trabajo entrega el diff limitado a un subagente de un solo uso a través de la seam subagents del host. La finalización llega a la sesión mediante el consumidor dsh-tool-jobs del host; el modelo lo lee con job_output y lo publica con review_post.
  • Acción compuesta de CI / bot de revisión / puerta de status-check. El repositorio incluye una acción compuesta (action.yml) que revisa PRs, arregla CI y escribe el informe; un bot de revisión por sondeo publica comentarios inline idempotentes; y una puerta de status-check publica el veredicto por commit head de PR. La herramienta de un solo uso ci_run impulsa la ejecución headless. Toda escritura permanece sujeta a aprobación.

Permisos y datos

  • Permisos: las escrituras cabalgan sobre la capa de aprobación oficial; nada se reimplementa ni se elude. El plugin declara network:outbound y filesystem:write en su manifiesto de workshop.
  • Datos: el informe de revisión vive en la memoria del proceso, indexado por el id del trabajo; no se escribe nada duradero en disco.
  • Registro de sesión: el plugin no añade tipos de evento de sesión personalizados; todo el contenido visible para el modelo fluye por superficies registradas por el host (tool/result, user/message, command/run, approval/asked…).

Límites de seguridad

  • Aprobación, no aplicación. Las escrituras solo producen decisiones ask/deny en la capa oficial; el sandbox y los sistemas de aprobación siguen siendo la autoridad de aplicación.
  • Se cierra ante fallo. La ausencia de respondedor de aprobación degrada a la decisión más estricta — nunca a un paso silencioso.
  • El token nunca sale del proceso. Se lee por operación y se envía solo en el encabezado Authorization; nunca se registra, representa, inyecta ni aparece en errores.
  • Sin escrituras fuera de la aprobación. /pr create nunca hace commit ni push por sí mismo; con autoCommit: true, el modelo realiza esas escrituras mediante la propia puerta de aprobación de la herramienta bash. El trabajo de revisión no realiza escrituras; solo review_post publica, tras la aprobación.
  • El contenido no confiable se escapa y se marca. formatPostBody escapa en HTML y con comillas invertidas los nombres de archivo derivados del diff, y el contenido externo de GitHub (archivos, cuerpos, comentarios, resultados de búsqueda) se marca como externo en las representaciones.
  • Trabajo acotado y límites de velocidad. Los 429 se reintentan con retroceso; la cuota restante se muestra en cada resultado, incluidos los fallos.

Limitaciones conocidas

  • Sin eventos de sesión personalizados — deliberado (ver Arquitectura); las pistas de auditoría dependen del vocabulario de eventos propio del host.
  • Analizador estático por defecto — reglas deterministas (src/review.ts), cero tokens, reproducible. reviewMode: "model" consume tokens y requiere la seam subagents y un proveedor registrado.
  • Trabajos y registros locales al proceso — el informe de revisión vive en la memoria del plugin, indexado por el id del trabajo; el mapa de registros está limitado por maxReviewRecords (los registros finalizados más antiguos se eliminan primero).
  • Las dist-tags latest de npm están obsoletas — instala mediante el cierre de perfil que proporciona dsh-base; nunca con un simple npm i @deepseek-ai/dsh-tools.

Desarrollo

pnpm install             # node ^22.19 || >=24
pnpm run build           # tsc --noEmitOnError → lib/
pnpm run prepare         # compilación autocontenida para instalación git (scripts/prepare.mjs)
pnpm run prepublishOnly  # compilar + probar antes de publicar
pnpm test                # vitest run
pnpm run typecheck       # tsc --noEmit
pnpm run check:readmes   # cruza anclas de TOC, herramientas y claves de configuración en los 5 README

Estructura del repositorio

src/index.ts          plugin entry (name/inject/apply, applyWithDeps for tests)
src/config.ts         Schemastery Config
src/types.ts          local structural views of host services + Context merging
src/credential.ts     token resolution (seam → env → gh), per operation
src/github.ts         REST client: 429 retry, rate limits, diff media type
src/git.ts            read-only git inspection + origin parsing for any API host
src/review.ts         deterministic diff analyzer + sanitized comment drafting
src/jobs.ts           github-review background job producer (metadata + diff + CI + comments)
src/approval-gate.ts  tools/pre-execute ask/deny gate with write previews
src/tools.ts          the twelve model-facing tools
src/commands.ts       /pr, /review, /issue
src/present.ts        pure UI-card presenters
test/                 vitest suite + mock host scaffolding + opt-in e2e smoke
cordis.patch.yml      bundle patch (one insert row)
scripts/prepare.mjs   self-contained git-install build

Temas

dsh · dsh-plugin · deepseek-harness · github · pull-request · code-review · issue-tracker

Contribuidores

  • @PerryLink — creador y mantenedor: la superficie de herramientas de GitHub, la puerta de aprobación, los trabajos de revisión en segundo plano, la acción compuesta de CI, el bot de revisión, la puerta de status-check y la documentación en cinco idiomas.
  • @AraragiEro — la tarjeta de configuración del token de GitHub en la página de ajustes de Plugins (#6).
  • @alexchenzl — invitó al plugin a incluirse en el DSH Directory (#5).

Este proyecto es uno de los 33 complementos de DeepSeek Harness mantenidos por PerryLink. Si este te ayuda, probablemente los demás también:

PluginOne-liner
dsh-dsh-auto-reviewAuto-revisión de segundo modelo en la cadena de aprobación, con cierre en fallo por defecto
dsh-dsh-background-agentsAgentes hijos en segundo plano durables con barra lateral de UI web, mensajería e interrupción
dsh-dsh-budgetGobernanza de costes para DeepSeek Harness: presupuestos, carbono y latencia en un panel.
dsh-dsh-checkpoint-rewindEquivalente a /rewind de Claude Code: instantáneas, bifurcaciones de sesión, restauración de un solo uso
dsh-dsh-claude-moveMigra sesiones, memoria, habilidades y CLAUDE.md de Claude Code a DSH
dsh-dsh-clickControl de escritorio nativo multiplataforma para DeepSeek Harness — Windows primero.
dsh-dsh-composer-historyHistorial de entrada estilo terminal para el compositor web: flechas, búsqueda Ctrl+R
dsh-dsh-data-qualityComprobaciones de calidad de datasets y verificación de citas (el puente numérico opcional consumido aquí)
dsh-dsh-defendDefensa contra inyección de prompts, jailbreak y fuga de secretos para DeepSeek Harness.
dsh-dsh-doublecheckGuardián de disciplina de ingeniería: interrogatorio de requisitos, puertas de pruebas, revisión adversaria
dsh-dsh-drawEnrutamiento unificado de generación de imágenes estáticas para DeepSeek Harness.
dsh-dsh-fastDiagnóstico de rendimiento de solo lectura para DeepSeek Harness.
dsh-dsh-fund-researchInformes de investigación deterministas para fondos mutuos públicos chinos
dsh-dsh-industry-researchOrquestación de investigación sectorial que sella sus entregables mediante el ctx.researchReport.assemble de este plugin
dsh-dsh-libraryBase de conocimiento documental local para DeepSeek Harness.
dsh-dsh-local-aiIntegración de modelos locales (Ollama) para DeepSeek Harness.
dsh-dsh-lsp-actionsDiagnósticos, formato, autocompletado, acciones de código y renombrado LSP sobre servidores de lenguaje
dsh-dsh-maskMiddleware de enmascaramiento de PII: anonimiza en el límite del modelo, restaura en la capa de visualización
dsh-dsh-mcp-panelPanel de tiempo de ejecución MCP de solo lectura: comando /mcp + pestaña Settings con estado, herramientas y errores
dsh-dsh-mementoMemoria entre sesiones controlada por aprobación: costura ctx.memory + SQLite + herramienta de memoria
dsh-dsh-observeExportador de observabilidad OpenTelemetry y Langfuse para DeepSeek Harness.
dsh-dsh-output-stylesCambio de estilo en tiempo de ejecución equivalente a outputStyles de Claude Code
dsh-dsh-permission-rulesReglas de permisos declarativas allow/deny/ask estilo Claude Code con auditoría
dsh-dsh-plugin-guideBase de conocimiento de desarrollo de plugins como habilidad de agente bajo demanda
dsh-dsh-research-reportMotor de informes de investigación verificables con evidencia direccionada por contenido
dsh-dsh-scorePuntuación de calidad multidimensional para plugins de DeepSeek Harness.
dsh-dsh-session-pinFija sesiones en la barra lateral web con orden durable
dsh-dsh-session-syncSincronización de sesiones entre dispositivos para DeepSeek Harness — un espejo git dedicado de tu almacén de sesiones.
dsh-dsh-skill-pack-securityPaquete de habilidades de auditoría de seguridad: escaneo de secretos, revisión de dependencias y cadena de suministro
dsh-dsh-talkBucle de sesión con voz para DeepSeek Harness: háblale y escucha su respuesta.
dsh-dsh-test-drivePruebas de instalación y humo aisladas para plugins de DeepSeek Harness.
dsh-dsh-translateTraducción de parámetros entre proveedores y reparación determinista de JSON para DeepSeek Harness.

Licencia

Apache License 2.0 © 2026 dsh-github contributors