Bundle
dsh-codegraph
DSH profile bundle exposing the codegraph CLI as eight model-facing code-intelligence tools: symbol search, callers/callees, impact analysis, area exploration, symbol/file reading, index status and sync.
- Source
- errrepe
- License
- MIT
- Updated
- Updated yesterday
Readme
# dsh-codegraph [DSH](https://github.com/deepseek-ai) (DeepSeek Harness) profile bundle que expõe o [`codegraph`](https://github.com/colbymchenry/codegraph) como oito tools de inteligência de código para o modelo. O plugin mantém um índice do workspace atual em sincronismo e dá ao agente busca de símbolos, análise de chamadas, análise de impacto e leitura de código — sem `grep` às cegas. > **Pré-requisito**: o CLI `codegraph` instalado e no `PATH` (o plugin executa o CLI; não o gerencia). Em macOS/Linux: > ```bash > cargo install codegraph # ou siga as instruções da repo do codegraph > codegraph --version # verifique antes de prosseguir > ``` ## Instalação O pacote é um DSH profile bundle — instalável em qualquer profile com um comando: ```bash dsh plugin --profile web add /caminho/para/este/checkout # ou, uma vez publicado no npm: dsh plugin --profile web add dsh-codegraph # ou direto do GitHub: dsh plugin --profile web add github:errrepe/dsh-codegraph-plugin ``` O comando registra o bundle em `dsh.profile.bundles` e o plugin carrega no próximo boot do profile. Reinicie o processo DSH do profile para o plugin fazer efeito. Para remover: ```bash dsh plugin --profile web remove dsh-codegraph ``` ## Como funciona - Cada tool executa `codegraph <subcommand>` **na cwd da sessão que chamou** — o projeto cujo índice é lido é sempre o workspace em que o agente está trabalhando. A execução usa a sandbox policy da própria sessão, o que permite ao SQLite (WAL) do índice abrir dentro de workspaces confinados. - Projeto sem índice: rode `codegraph init` na raiz do projeto (via bash) uma única vez. Depois disso, chame `codegraph_sync` após editar arquivos para que as queries reflitam o código atual. - Saída: `query`/`callers`/`callees`/`impact` retornam JSON estruturado; `explore`/`node`/`status`/`sync` retornam texto formatado. Todos os argumentos dinâmicos são shell-quoted de forma segura (single-quote POSIX); há testes de round-trip por bash real (`node test/quote.test.js`). ## Configuracao em Settings/Plugins e System Prompt O plugin agora expõe um card em **Settings > Plugins** (aba Configuráveis) com `key: codegraph`: - **Ativar Codegraph** (`enabled`, padrão `true`): quando ligado, as oito tools permanecem registradas. Quando desligado, cada tool retorna erro `Codegraph is disabled in Settings > Plugins` — sem derrubar o boot. - **Instruir o modelo via system prompt** (`injectPrompt`, padrão `true`): quando ligado junto com `enabled`, o host injeta a seção `codegraph-guidance` (ordem 50) em todo prompt montado. A seção ensina o modelo a preferir o grafo ao `grep` cego. Veja o digest em `lib/index.js` (`CODEGRAPH_PROMPT`). Desligar remove a seção sem deixar resíduo (`renderPrompt` descarta seções vazias). Persistência: as duas flags vivem no namespace `codegraph` em `~/.dsh/settings.yaml` (camadas: defaults da schema < `base` do composition < documento do usuário). A UI faz `POST /api/dsh-codegraph/describe` e `POST /api/dsh-codegraph/mutate` (loopback-only) e reage a conflitos de revisão. O toggle afeta o próximo step do modelo sem reinício. Comportamento esperado pelo upstream `colbymchenry/codegraph` (https://github.com/colbymchenry/codegraph): o grafo entrega contexto cirúrgico em uma chamada. O digest instrui o modelo a: verificar `codegraph_status` antes da primeira busca (se sem índice, rodar `codegraph init`), usar `codegraph_explore` como primeira escolha para perguntas abertas (retorna símbolos + source agrupado por arquivo + caminhos de chamada + blast radius em um shot), seguir `codegraph_query` com `codegraph_node` para leitura exata, mapear impacto com `codegraph_callers`/`impact` antes de refatorar, e rodar `codegraph_sync` após editar. Reserve `grep`/`glob` apenas para texto não-código ou quando `status` indica ausência de índice. ## Tools | Tool | O que faz | Saída | |---|---|---| | `codegraph_query` | Busca símbolos (funções, classes, métodos) por nome, com filtro por kind | JSON | | `codegraph_callers` | Quem chama um símbolo — primeiro passo antes de mudar uma função | JSON | | `codegraph_callees` | O que um símbolo chama | JSON | | `codegraph_impact` | Raio de impacto de mudar um símbolo (dependentes + testes que cobrem) | JSON | | `codegraph_explore` | Explora uma área: símbolos relevantes, código-fonte, caminhos de chamada, dependentes — em um shot | texto | | `codegraph_node` | Lê o código-fonte completo de um símbolo (+ trail de chamadas), ou lê um arquivo com line numbers e dependentes | texto | | `codegraph_status` | Estatísticas do índice: contagens de arquivos/nodes/edges, por kind e linguagem | texto | | `codegraph_sync` | Sincroniza o índice com as mudanças desde a última indexação | texto | ## Compatibilidade e resiliência - **Settings/Plugins**: o host registra o namespace `codegraph` via `@deepseek-ai/dsh-settings` (`installSettingsSection` com fallback manual). Se o serviço estiver ausente (host antigo/headless), o plugin cai para `enabled: true` e sem bridge — nunca bloqueia o boot. - **System prompt**: a seção `codegraph-guidance` vive em `@deepseek-ai/dsh-system-prompt` ordem 50 (depois da persona 0, antes do guia de tools 100+). Texto é função de `current()`; quando `enabled` é `false` ou `injectPrompt` é `false`, retorna `""` e não deixa resíduo. - O `defineTool` do harness é resolvido em runtime (import guardado com fallback), pois não é uma dependência resolvível de bundles de terceiros. Se indisponível, o plugin loga um aviso e não registra os tools — **nunca** derruba o boot do DSH. - Sem sessão com cwd (ex.: uso headless sem agent): os tools retornam erro explícito, não crasham. - CLI ausente ou projeto sem índice: o erro do próprio CLI é devolvido ao modelo como erro do tool. ## Desenvolvimento ```bash npm run check # node --check nos módulos npm test # testes de quoting/argv (bash real round-trip) ``` Estrutura: `lib/index.js` (host half — registro dos tools, namespace `codegraph`, seção `codegraph-guidance`, bridge `/api/dsh-codegraph/*`), `lib/client.js` (browser half — card `settings.plugin.item` key `codegraph` em Settings > Plugins), `lib/quote.js` (builders de argv puros e testáveis), `cordis.patch.yml` (row `codegraph` do composition). ## Licença MIT — veja [LICENSE](./LICENSE). ## FAQ **Does codegraph need to be installed?** Yes — the plugin shells out to the `codegraph` CLI on the host `PATH`. Install via `cargo install codegraph` or from https://github.com/colbymchenry/codegraph. **When to call `codegraph_sync`?** After editing files, so subsequent `query`/`explore` calls see the new code. `status` shows whether the index is stale.
Install
dsh plugin --profile web add github:errrepe/dsh-codegraph-plugin#a1dea26ea7a1b4de1dfff876a63a9217d4d486de
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-codegraph from the hub