📊 dsh-observe

September 6, 2026 · View on GitHub

📊 dsh-observe

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

Exportador de observabilidade OpenTelemetry e Langfuse para o DeepSeek Harness.

Transforme eventos de sessão em traces OTLP e observações Langfuse — saneados, com buffer e desligados por padrão.

License DSH plugin Node CI Version npm version npm downloads

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


Compatibility

SuperfícieStatus
HarnessDeepSeek Harness dsh-v0.1.3-alpha.1 (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. Verificado em 2026-09-06 contra o checkout master dsh-v0.1.3-alpha.1 (cadeia completa de portas + smoke de instalação de perfil).
Node^22.19.0 || >=24.0.0
BackendsOpenTelemetry OTLP/HTTP (traces + metrics, codificação JSON) e Langfuse (observabilidade de LLM) — um ou ambos
ModeloIndependente de modelo: exporta o fluxo session/event; não faz chamadas a modelos

What you get

O dsh-observe transforma o fluxo session/event do harness em protocolos padrão de observabilidade:

  • Spans — spans de turno, passo, chamada de ferramenta (duração, status, derivação de tentativas) e geração de LLM, ligados em traces por turno com ids deterministas.
  • Metrics — contadores de tokens por provider/modelo, contadores de custo em USD (tabela de preços configurável) e o gauge opcional de pressão de contexto via ctx.tokenMeter.
  • Captura saneada — corpos de prompt e completion são redigidos (nomes de chave estruturais + padrões de segredos embutidos + seus padrões) e truncados antes de qualquer enfileiramento ou envio.
  • Confiabilidade — lotes assíncronos (por tamanho e por temporizador), um buffer offline durável e limitado (storage-domain) com despejo do mais antigo, e tentativas com backoff exponencial determinista; lotes não entregues sobrevivem a reinícios.
  • Interruptor em tempo de execução — o Typert remote opcional (observe/status, observe/setEnabled) permite a uma página de ajustes parar e retomar a exportação sem desmontar.
  • Desligado por padrãoenabled: true mais ao menos um backend é a adesão explícita; caso contrário, nada é capturado ou exportado.
fluxo session/event
   │ collector (spans de turno/passo/ferramenta/LLM, métricas)
   │ sanitize (chaves, segredos, orçamentos)
   ├──▶ pipeline "otlp"  ── fila ── flush ──▶ OTLP /v1/traces + /v1/metrics
   │         └─ tentativa/backoff ─┐
   ├──▶ pipeline "langfuse" ── fila ── flush ──▶ ingestão Langfuse
   │         └─ tentativa/backoff ─┤
   └────────── spool durável (buffer offline, limitado) ◀┘

Quick start

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

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

# 2. configure um backend no patch do seu perfil (cordis.yml) e reinicie
dsh --profile web

Configuração OTLP mínima (a linha vem comentada em cordis.patch.yml):

- insert:
    - id: dsh-observe
      name: dsh-observe
      config:
        enabled: true
        otlp:
          endpoint: http://localhost:4318

Depois verifique que a linha monta:

dsh --profile web --dump-config | grep -A2 'id: dsh-observe'

Install & uninstall

  • Canal git (último main): dsh plugin --profile web add "github:PerryLink/dsh-observe#main" — o script prepare compila apenas com dependências de produção.
  • Canal npm (versões publicadas): dsh plugin --profile web add dsh-observe.
  • Canal tarball: pnpm pack neste repositório e então dsh plugin --profile web add ./dsh-observe-<version>.tgz.
  • Desinstalar: dsh plugin --profile web remove dsh-observe (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.

Configuration

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.

KeyDefaultMeaning
enabledfalseInterruptor mestre; true mais ao menos um backend é a adesão explícita
otlpnullConfiguração do backend OTLP, ou null para desativá-lo
otlp.endpoint(obrigatório)URL base do OTLP; /v1/traces e /v1/metrics são acrescentados
otlp.serviceNamedeepseek-harnessAtributo de recurso service.name
otlp.serviceVersion(nenhum)Atributo de recurso service.version
otlp.headers{}Cabeçalhos extras mesclados em cada requisição de exportação
otlp.timeoutMs10000Tempo limite por requisição
langfusenullConfiguração do backend Langfuse, ou null para desativá-lo
langfuse.baseUrlhttps://cloud.langfuse.comURL base do Langfuse
langfuse.publicKey(obrigatório)Chave pública do projeto
langfuse.secretKey(obrigatório)Chave secreta do projeto
langfuse.release(nenhum)Tag de release carimbada nos traces
langfuse.traceNamesession {session} turn {turn}Modelo do nome do trace; {session}/{turn} interpolam por trace
langfuse.tags[]Tags estáticas carimbadas em cada trace
langfuse.timeoutMs10000Tempo limite por requisição
capture.turnstrueSpans de ciclo de vida do turno
capture.stepstrueSpans de ciclo de vida do passo
capture.toolstrueSpans de chamada de ferramenta com argumentos/resultados saneados
capture.llmtrueSpans de geração de LLM
llm.prompttrueCaptura o prompt de requisição saneado (false = apenas tamanhos)
llm.completiontrueCaptura a completion saneada (false = apenas tamanhos)
metadata.sessionIdtrueAtributo de id de sessão
metadata.cwdfalseDiretório de trabalho da sessão (um caminho local — desligado por padrão)
metadata.agentPresettrueAtributo de id do agent preset
metadata.modeltrueAtributos de provider/modelo
metrics.tokenstrueContadores de tokens por provider/modelo
metrics.costtrueContadores de custo em USD (precisam de regras pricing que coincidam)
metrics.contextTokenstrueGauge de pressão de contexto (precisa de ctx.tokenMeter)
pricing[]Tabela de preços, primeira coincidência vence: { provider?, model, inputPerToken, outputPerToken, cacheReadPerToken?, cacheWritePerToken? }
sanitize.enabledtrueInterruptor mestre de redação (false desativa a redação, nunca o truncamento)
sanitize.redactKeys[]Substrings de nome de chave extras (key/token/secret/password/authorization/credential/apiKey sempre incluídas)
sanitize.redactPatterns[]Expressões regulares de segredos extras
sanitize.truncatePromptChars4000Orçamento de caracteres do prompt
sanitize.truncateCompletionChars4000Orçamento de caracteres da completion
sanitize.truncateToolInputChars2000Orçamento de caracteres dos argumentos de ferramenta
sanitize.truncateToolOutputChars2000Orçamento de caracteres do resultado de ferramenta
sanitize.truncateAttributeChars512Orçamento de strings de atributos de span
batch.maxRecords256Flush quando a fila atinge este número de registros
batch.flushIntervalMs5000Intervalo de flush por temporizador
batch.maxQueueRecords2000Limite da fila em memória; o excesso derrama para o buffer
batch.maxBufferRecords10000Limite do buffer offline durável; os registros mais antigos caem primeiro
batch.bufferRetryIntervalMs30000Intervalo de tentativa do buffer offline
retry.maxAttempts5Tentativas por lote, incluindo a primeira
retry.baseDelayMs1000Primeiro atraso de backoff
retry.factor2Multiplicador de backoff por falha consecutiva
retry.maxDelayMs60000Teto do backoff
remote.enabledfalseMonta o Typert remote observe (interruptor)

Tools & surfaces

Este plugin não registra ferramentas de modelo — é um exportador em segundo plano. Suas superfícies:

  • Consome session/event (coleta de spans/métricas), session/flush (impulso de exportação best-effort — o checkpoint de durabilidade nunca espera um backend remoto) e session/disposed.
  • Serviço remote opcional observeobserve/status devolve o estado do interruptor, os backends configurados, a profundidade da fila e a ocupação do buffer; observe/setEnabled para e retoma a exportação em tempo de execução.

Permissions & data

  • Permissões: network:outbound para os endpoints que você configurar, session:read para o fluxo de eventos, storage:write para o buffer offline; sem código nativo, sem acesso ao sistema de arquivos.
  • Dados: tudo o que é enviado deriva do registro de sessão e é saneado (redação + truncamento) antes de enfileirar, armazenar ou transmitir. O buffer offline guarda apenas registros saneados, re-validados ao serem lidos.
  • Credenciais: as chaves pública/secreta do Langfuse viajam apenas para o endpoint Langfuse configurado; os cabeçalhos OTLP apenas para o endpoint OTLP configurado. O plugin não armazena credenciais — guarde-as em referências de credenciais ou valores injetados pelo ambiente.

Security boundaries

  • Desligado por padrão — nada é capturado ou exportado sem adesão explícita.
  • Sanear antes de enviar — redação estrutural de chaves, padrões de segredos embutidos (chaves de API, tokens do GitHub, chaves da AWS, credenciais bearer, chaves privadas), seus padrões e orçamentos de caracteres aplicam-se antes de qualquer registro sair da memória.
  • Re-validação no limite durável — registros lidos do armazenamento são checados novamente antes que um sink possa vê-los.
  • Falha ruidosa, falha contida — falhas de exportação avisam, contam, tentam de novo e por fim vão para o spool; um manipulador de sessão que falha é capturado e registrado, de modo que a observabilidade nunca pode quebrar o caminho quente do harness.
  • Model-visible ⟺ logged — as exportações de prompt/completion projetam apenas o cabeçalho registrado e a superfície da sessão; o exportador não inventa conteúdo.

Known limitations

  • npm 0.1.2-rc.1 — o plugin é desenvolvido e testado contra @deepseek-ai/dsh@0.1.2-rc.1; baselines mais novos devem funcionar e são verificados pelo workflow compat mensal.
  • Métricas evitam o caminho de tentativa/spool — as métricas OTLP são agregadas cumulativamente, então um flush perdido se autocura no seguinte (por design, não é um bug).
  • Sem amostragem — toda família de spans habilitada é exportada; ajuste os interruptores capture.* e batch.maxBufferRecords para sessões de alto volume.

Development

pnpm install        # node ^22.19 || >=24
pnpm run typecheck  # tsc: src + tests contra o checkout local do harness
pnpm run typecheck:ci  # tsc contra os tipos publicados 0.1.2-rc.1 (sem paths)
pnpm test           # vitest: 95 testes, 13 suítes (Context/Session/storage seam reais)
pnpm run test:coverage  # porta de cobertura (90/80/90/90)
pnpm run build      # bundle tsdown + declarações tsc (lib/)
pnpm run verify:self-contained  # as especificações de dependências resolvem pelo registry
pnpm run verify:artifacts       # face ESM construída + bundle patch presentes
node scripts/check-readme-sync.mjs  # porta de sincronia dos cinco READMEs
pnpm pack           # o tarball publicado

Topics

dsh, dsh-plugin, deepseek-harness, deepseek, cordis, observability, opentelemetry, otlp, langfuse, tracing

Contributors

  • @PerryLink — criador e mantenedor: collector, pipelines, spool, sinks OTLP/Langfuse, saneamento e a documentação em cinco idiomas.

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-drawRoteamento unificado de geração de imagens estáticas para DeepSeek Harness.
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-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-observe contributors

Instalar a partir do mercado do DSH Desktop

Todos os plugins PerryLink podem ser explorados no mercado integrado do DSH Desktop: Market → Sources → add source → colar https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → selecionar. A instalação continua passando pela verificação de identidade npm do mercado e pela sua confirmação.