🎨 dsh-draw

September 2, 2026 · View on GitHub

🎨 dsh-draw

  • Canal 1024 store: npm i -g dsh1024 uma vez, depois dsh1024 plugin --profile web add dsh-draw (conta para o ranking de instalações do deepseek1024.com).

Roteamento unificado de geração de imagens estáticas para o DeepSeek Harness.

Uma ferramenta, muitos motores — fallback ciente da saúde, resultados duráveis, uso contabilizado.

License DSH plugin Node CI Version npm version npm downloads

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


Compatibilidade

SuperfícieStatus
HarnessDeepSeek Harness 0.1.1-rc.2 (compatibilidade declarada para 0.1.1-rc.2)
Node^22.19.0 || >=24.0.0
MotoresQualquer endpoint de imagens compatível com OpenAI; presets para OpenAI Images (gpt-image-1) e Zhipu CogView (cogview-3-flash)
SuperfíciesFerramenta host image_generate + cartão de resultado web + aba de ajustes de Plugins

A metade de navegador usa o Context do cordis e os pacotes de cliente publicados (dsh-client-ui-slots, dsh-client-ui-settings, dsh-client-ui-tool, dsh-client-locale, dsh-client-connection); ela não depende mais do pacote removido dsh-client-runtime (o bloco de chamada de ferramenta é lido por um contrato estrutural local), então a superfície de cliente também se alinha com hosts 0.1.2-alpha.5. 0.1.2-alpha.5 (adaptado em 2026-09-02): o envelope de sessão mantém seu campo ignorable apenas para compatibilidade de leitura de logs armazenados - o Session.append ainda não consegue estampá-lo, então o comportamento da porta não muda.

O que você ganha

O dsh-draw dá ao harness uma ferramenta unificada image_generate com parâmetros padrão (prompt/size/count/quality/style/engine) traduzidos por motor:

  • Roteamento multi-motor — uma cadeia configurável (OpenAI Images, Zhipu CogView ou qualquer endpoint compatível com OpenAI) percorrida de cima para baixo com fallback ciente da saúde: falhas consecutivas colocam um motor em cooldown e o próximo motor saudável atende a chamada.
  • Resultados duráveis — as imagens geradas são salvas como anexos do workspace (endereçadas por conteúdo, sob a política de anexos do harness) e retornadas como referências de arquivo canônicas.
  • Contabilidade de cota — limites por sessão de chamadas de geração e bytes de imagem, dobrados a partir do registro de sessão durável e aplicados antes do gasto no motor e antes do armazenamento.
  • Credenciais como referências — as chaves de API são nomes de variáveis de ambiente resolvidos por chamada através do seam oficial ctx.credentials; chaves literais nunca ficam na configuração nem nos logs.
  • Superfícies web — um cartão de resultado na conversa (imagens, motor, cota, regenerar com um clique) e uma aba de ajustes de Plugins (cadeia de motores, estado de credenciais, sondas, limites de cota).
modelo                          harness
  │ image_generate {prompt, ...} ──▶ validar ──▶ checar cota ──▶ rotear
  │                                  openai ──(falha)──▶ cogview ──▶ imagens
  │ ◀── JSON canônico + blocos de imagem (referências de anexo duráveis)
  │                       └── evento de sessão draw/generated (cota + auditoria)

Início rápido

# 1. instale o bundle no seu perfil
dsh plugin --profile web add "github:PerryLink/dsh-draw#main"

# ou pelo npm (versões publicadas)
dsh plugin --profile web add dsh-draw

# 2. forneça as chaves do motor como referências de credencial (variáveis de ambiente)
#    OPENAI_API_KEY e/ou ZHIPU_API_KEY — nunca no patch do perfil

# 3. reinicie e verifique a linha
dsh --profile web --dump-config | grep -A2 'id: dsh-draw'

Depois peça ao agente para desenhar:

> Desenhe uma paisagem 1536x1024 de um farol ao entardecer, estilo vívido.

Instalação e desinstalação

  • Canal git (último main): dsh plugin --profile web add "github:PerryLink/dsh-draw#main" — o script prepare compila apenas com dependências de produção.
  • Canal npm (versões publicadas): dsh plugin --profile web add dsh-draw.
  • Canal tarball: pnpm pack neste repositório e então dsh plugin --profile web add ./dsh-draw-<version>.tgz.
  • Desinstalar: dsh plugin --profile web remove dsh-draw (ou remova a linha do patch do perfil).

Se o pnpm reportar ERR_PNPM_IGNORED_BUILDS para este pacote (a validação inofensiva do binário de plataforma do esbuild), adicione allowBuilds: { esbuild: true } ao seu pnpm-workspace.yaml — o CLI dsh imprime o trecho exato.

Configuração

Todos os ajustes são campos Config do Schemastery (alteráveis pelo cordis.yml). Uma sobrescrita direcionada por id substitui a linha inteira — redeclare cada chave que precisar. O cordis.patch.yml documenta cada chave em linha.

ChavePadrãoSignificado
enginesPresets OpenAI + CogViewCadeia ordenada de motores, percorrida de cima para baixo com fallback; cada entrada: id, baseUrl (sem credenciais), model, apiKeyRef (nome de variável de ambiente), enabled, sizeMap, qualitySupported, styleSupported, responseFormat (b64_json/url), imageMediaType
defaultEngineopenaiId de motor preferido pelo roteador; deve nomear um motor configurado
requestTimeoutMs120000Tempo limite HTTP por geração (1000..600000)
maxImagesPerCall4Limite de imagens por chamada (1..10)
maxPromptLength4000Limite de caracteres do prompt (1..32000)
maxGenerationsPerSession200Limite de chamadas por sessão (1..100000)
maxBytesPerSession209715200Limite de bytes de imagem por sessão (1048576..4294967296)
failureThreshold2Falhas consecutivas antes do cooldown (1..10)
cooldownMs60000Cooldown do motor após o limiar (1000..3600000)

Exemplo de sobrescrita no patch do seu perfil:

- insert:
    - id: dsh-draw
      name: dsh-draw
      config:
        defaultEngine: cogview
        maxImagesPerCall: 2

Ferramentas e superfícies

SuperfícieNotas
image_generateParâmetros padrão; retorna JSON canônico (motor/modelo/tamanho, referências de imagem, cota, indicador de fallback, tentativas) mais blocos de imagem
Cartão de resultado (tool.call.toolview, chave image_generate)Imagens, linha de motor/cota, regenerar com um clique (caminho completo do drawer: cota + roteamento + auditoria)
Aba de ajustes (Plugins → Image generation)Cadeia de motores, estado de credenciais, definir/remover chaves de API (referências de credencial), sondas de conectividade, limites de cota

Permissões e dados

  • Permissões: o plugin só faz chamadas HTTPS de saída para os endpoints de motor configurados; todo o resto é somente leitura. As únicas escritas da aba de ajustes são as chamadas de definir/remover credenciais no seam oficial ctx.credentials.
  • Dados: as imagens geradas são salvas através do armazenamento de anexos oficial sob a política de anexos do harness. O uso de cota é dobrado dos eventos de sessão draw/generated, mais o livro auxiliar em memória em hosts que não podem registrar esses eventos — nada mais é armazenado.
  • Registro de sessão: o evento draw/generated registra motor, modelo, solicitação padronizada, totais de bytes e ids de anexo — os fatos de auditoria, nunca as chaves API. O evento só é anexado quando o host conhece o tipo ou honra o envelope ignorable (sondado na montagem); em hosts rc.6/rc.7 e no host sem envelope 0.1.2-alpha.5 (que removeu o envelope e falha fechado em tipos desconhecidos na leitura) a carga vai para o livro auxiliar em memória, então gerar imagens não faz mais a sessão recusar reabrir.

Limites de segurança

  • Referências de credencial, nunca literais. apiKeyRef nomeia uma variável de ambiente; um baseUrl com credenciais falha ruidosamente ao carregar.
  • Exibição saneada. URLs, notas de sonda e texto de erro são redigidos (senhas de userinfo, valores de credencial em queries, tokens bearer, JWT) antes de qualquer exibição ou log.
  • Cota antes do gasto. Os limites de geração e bytes são verificados antes das chamadas ao motor e antes do armazenamento; sessões esgotadas falham rápido sem gastar créditos.
  • Falha ruidosa, fallback deliberado. Respostas malformadas geram erros estruturados; um motor com falhas é ignorado após o limiar de cooldown, e uma cadeia esgotada retorna o registro completo de tentativas em vez de fingir sucesso.

Limitações conhecidas

  • Somente modelos de imagem. Sem endpoints de vídeo, áudio ou edição; sem compreensão visual.
  • Compatibilidade de motores. Os motores devem falar a forma POST /images/generations da OpenAI (entrega base64 ou URL); extras específicos de cada provedor ficam de fora.
  • Consciência de custo é estrutural. O plugin conta chamadas e bytes, mas não conhece o preço dos motores — combine com dsh-budget para a governança de custo.
  • Durabilidade de cota em rc.6/rc.7 e 0.1.2-alpha.5. Em hosts cujo registro de sessão não pode carregar draw/generated (lista estática de eventos, sem envelope ignorable; 0.1.2-alpha.5 removeu o envelope e falha fechado em tipos de evento desconhecidos na leitura), a cota continua exata na sessão viva a partir do livro auxiliar em memória, mas zera ao reiniciar; a contabilidade durável retorna em hosts com uma superfície de eventos para plugins.

Desenvolvimento

pnpm install        # node ^22.19 || >=24
pnpm run typecheck  # tsc: src + tests contra o checkout local do harness
pnpm run typecheck:ci  # tsc contra as faces publicadas 0.1.1-rc.2 (sem paths)
pnpm test           # vitest: 107 testes, 16 arquivos de teste (transporte roteirizado, Context/Session/ToolRuntime reais)
pnpm run build      # declarações tsc + bundles tsdown (lib/)
pnpm run verify:self-contained  # as especificações de dependências resolvem pelo registry
pnpm run verify:artifacts       # face ESM host + manifesto typert + bundle de navegador + arquivos de configuração
pnpm pack           # o tarball publicado

Topics

dsh, dsh-plugin, deepseek-harness, deepseek, cordis, image-generation, openai-images, cogview, zhipu, text-to-image

Contributors

  • @PerryLink — criador e mantenedor: roteador de motores, drawer, contabilidade de cota, vocabulário wire do Typert, metade de navegador e a documentação em cinco idiomas.
  • @Mohei-Muun — relatou a falha de carregamento do log de sessão draw/generated em hosts rc.7 (#2), que levou ao gate de eventos adaptativo.

Este projeto é um dos 33 plugins de DeepSeek Harness mantidos por PerryLink. Se este ajuda você, os outros provavelmente também:

PluginOne-liner
dsh-dsh-auto-reviewAuto-revisão de segundo modelo na cadeia de aprovação, com falha fechada por padrão
dsh-dsh-background-agentsAgentes filhos em segundo plano duráveis com barra lateral de UI web, mensagens e interrupção
dsh-dsh-budgetGovernança de custos para DeepSeek Harness: orçamentos, carbono e latência em um painel.
dsh-dsh-checkpoint-rewindEquivalente ao /rewind do Claude Code: instantâneos, bifurcações de sessão, restauração de uso único
dsh-dsh-claude-moveMigre sessões, memória, habilidades e CLAUDE.md do Claude Code para o DSH
dsh-dsh-clickControle de desktop nativo multiplataforma para DeepSeek Harness — Windows primeiro.
dsh-dsh-composer-historyHistórico de entrada estilo terminal para o compositor web: setas, busca Ctrl+R
dsh-dsh-data-qualityVerificações de qualidade de datasets e verificação de citações (a ponte numérica opcional consumida aqui)
dsh-dsh-defendDefesa contra injeção de prompt, jailbreak e vazamento de segredos para DeepSeek Harness.
dsh-dsh-doublecheckGuardião de disciplina de engenharia: sabatina de requisitos, portões de teste, revisão adversária
dsh-dsh-fastDiagnóstico de desempenho só de leitura para DeepSeek Harness.
dsh-dsh-fund-researchRelatórios de pesquisa deterministas para fundos mútuos públicos chineses
dsh-dsh-githubIntegração de PR/issues do GitHub para o DSH, cada escrita controlada por aprovação
dsh-dsh-industry-researchOrquestração de pesquisa setorial que sela as suas entregas através do ctx.researchReport.assemble deste plugin
dsh-dsh-libraryBase de conhecimento documental local para DeepSeek Harness.
dsh-dsh-local-aiIntegração de modelos locais (Ollama) para DeepSeek Harness.
dsh-dsh-lsp-actionsDiagnósticos, formatação, autocompletar, ações de código e renomeação LSP sobre servidores de linguagem
dsh-dsh-maskMiddleware de mascaramento de PII: anonimiza no limite do modelo, restaura na camada de exibição
dsh-dsh-mcp-panelPainel de tempo de execução MCP somente leitura: comando /mcp + aba Settings com status, ferramentas e erros
dsh-dsh-mementoMemória entre sessões controlada por aprovação: costura ctx.memory + SQLite + ferramenta de memória
dsh-dsh-observeExportador de observabilidade OpenTelemetry e Langfuse para DeepSeek Harness.
dsh-dsh-output-stylesTroca de estilo em tempo de execução equivalente ao outputStyles do Claude Code
dsh-dsh-permission-rulesRegras de permissão declarativas allow/deny/ask estilo Claude Code com auditoria
dsh-dsh-plugin-guideBase de conhecimento de desenvolvimento de plugins como habilidade de agente sob demanda
dsh-dsh-research-reportMotor de relatórios de pesquisa verificáveis com evidência endereçada por conteúdo
dsh-dsh-scorePontuação de qualidade multidimensional para plugins de DeepSeek Harness.
dsh-dsh-session-pinFixe sessões na barra lateral web com ordenação durável
dsh-dsh-session-syncSincronização de sessões entre dispositivos para DeepSeek Harness — um espelho git dedicado do seu armazenamento de sessões.
dsh-dsh-skill-pack-securityPacote de habilidades de auditoria de segurança: varredura de segredos, revisão de dependências e cadeia de suprimentos
dsh-dsh-talkLoop de sessão com voz para DeepSeek Harness: fale e ouça a resposta.
dsh-dsh-test-driveTest drives isolados de instalação e smoke para plugins de DeepSeek Harness.
dsh-dsh-translateTradução de parâmetros entre fornecedores e reparo determinístico de JSON para DeepSeek Harness.

License

Apache License 2.0 © 2026 dsh-draw contributors