Onde o ledger fica

Um arquivo só de acréscimos para a máquina inteira. O que é escrito nele, quando, e o que acontece se ele se perde ou se danifica.

Um arquivo para a máquina #

O ledger é o quota.jsonl, em ~/.autodev/. Existe um para a máquina e não um para cada projeto, porque uma assinatura atravessa todos os projetos dela. É JSON Lines, e o AutoDev só acrescenta a ele.

Não é um dos índices que o AutoDev consegue reconstruir, e nunca é rotacionado. É a única cópia dos dados de medição. O log de eventos é rotacionado quando cresce, e aplicar isso ao ledger apagaria o histórico de que o painel é desenhado.

Como uma linha se parece #

Uma linha é um registro. Os três tipos estão em O que é medido, e esta é a forma deles:

quota.jsonl
{"type":"call","ts":"<time>","provider":"<provider>","root":"<project path>","ms":<n>,"ok":true,"model":"<model>","usd":null,"usdDelta":null,"tokens":null,"usage":null,"quota":[],"compactions":[],"inferences":null,"contextWindow":null,"context":null}
{"type":"limit","ts":"<time>","provider":"<provider>","root":"<project path>","retryAt":"<time>","source":"text","kind":null}
{"type":"work","ts":"<time>","provider":"<provider>","root":"<project path>","commit":"<sha>","mode":"thread","taskId":null}

Todo registro leva root, o caminho absoluto do projeto. Um call também leva o modelo. Se você compartilhar o arquivo, compartilhe sabendo disso.

Como ele é escrito #

Todo provedor é construído por uma só função, então toda chamada é registrada: cada turno de cada participante, e as chamadas que conferem a execução, como a auditoria de conclusão. O registro call é escrito quando a chamada termina, e um registro limit o segue quando a chamada informou um limite. Um registro work é escrito quando o AutoDev credita um commit.

A escrita é feita no melhor esforço. Se o ledger não puder ser escrito, a chamada ainda tem sucesso e um aviso quota.record_failed vai para o log, porque a instrumentação não pode ser capaz de quebrar o que mede. Projetos concorrentes acrescentam ao mesmo arquivo, e por isso ele é JSON Lines e não um único array JSON.

Lendo você mesmo #

Toda cifra do painel é calculada a partir deste arquivo, por código que o lê e mais nada. Você pode ler os mesmos registros:

powershell
autodev quota --json

autodev report --json imprime o modelo do relatório do mesmo modo. Cada linha do quota.jsonl é JSON puro, então qualquer ferramenta que leia JSON Lines o lê.

Se ele se danifica ou se perde #

Uma linha que não pode ser lida é contada e mostrada na seção Integrity do autodev quota, e é ignorada. Uma última linha escrita pela metade é reparada no próximo acréscimo. Um arquivo apagado está perdido: nada o reconstrói, e o painel recomeça de um histórico vazio.

O AutoDev não envia o ledger a lugar nenhum. O servidor que o acesso remoto inicia pode servir a visão de cota derivada a quem tem o token ou a um navegador pareado, pelas regras do nível de telemetria dele. O que você pode fazer pelo celular as lista.

Onde o estado fica lista os outros arquivos de ~/.autodev/, e Lendo o painel de cota trata do que o painel faz com este.