O Project Collector é uma ferramenta de linha de comando (CLI) que percorre um diretório de código, aplica filtros configuráveis (inclusões/exclusões) e produz:
- 🗂️ Árvore de diretórios ASCII, destacando arquivos incluídos ou ignorados.
- 📦 Conteúdo selecionado opcional, encapsulado entre marcadores
START/END.
Ideal para análises iterativas de projetos, auxiliando tanto desenvolvedores quanto IAs a explorarem, filtrarem e extraírem informações de forma controlada.
pip install project-collectorpip install -e .O comando principal é hpc (atalho de Hephoria Project Collector). Sua sintaxe básica:
hpc [<diretório>] [opções]<diretório>(opcional): caminho para a raiz do projeto. Se omitido em comandos de configuração, usa apenas a ação de gerenciamento.- Se for análise de projeto, é recomendado usar
.para o diretório atual.
-
Gerar apenas a árvore com perfil
Amazilium-Foundation:hpc . -ucfg Amazilium-Foundation --only-tree- Mostra estrutura sem coletar conteúdo.
-
Coletar árvore + conteúdo usando padrão de requisição
Project_Collectore ignorando defaults:hpc . -ucfg Project_Collector --no-defaults- Aplica apenas
configs/requests/Project_Collector.json.
- Aplica apenas
-
Definir perfil padrão para execuções futuras:
hpc -scfg gepe-frontend hpc . # agora usa gepe-frontend sem precisar de -ucfg
-
Listar todos os perfis disponíveis:
hpc -lcfg
-
Iniciar um novo perfil (gerar skeleton de JSON):
hpc -icfg MeuProjeto
-
Debug detalhado durante a execução:
hpc . -ucfg Amazilium-Foundation --verbose- Exibe mensagens de inclusão/ignoração de cada arquivo.
Os padrões de exclusão e inclusão são definidos em arquivos JSON internos ao Project Collector (dentro do pacote, em configs/), e não no projeto que você está analisando. Ao executar, o CLI carrega automaticamente essas configurações:
configs/
├── defaults/ # padrões de exclusão por projeto
└── requests/ # overrides e padrões de inclusão por projetoCada arquivo JSON de request deve conter:
- Defaults (
configs/defaults/<projeto>.json): padrões de exclusão globais (nome de pastas/arquivos). - Requests (
configs/requests/<projeto>.json): adicionais de exclusão e regras de inclusão.
Cada situação de uso pode demandar um fluxo diferente, sempre de forma iterativa — ajuste um filtro por vez, avalie o resultado e decida se precisa de nova iteração:
-
Explorar sem contexto (descoberta)
-
Quando usar: você ou a IA não conhecem a estrutura interna do projeto.
-
Objetivo: mapear o espaço de arquivos disponíveis.
-
Passos:
- Rode:
hpc <diretório> --use-config <perfil> --only-tree - Analise a árvore (arquivos
>>> incluído <<<x(ignored)). - Identifique possíveis pastas/arquivos de interesse.
- Rode:
-
Iteração: ajuste os padrões iniciais em
configs/requests/<perfil>.jsone repita até ter escopo adequado.
-
-
Focar em um alvo conhecido
-
Quando usar: você já sabe o arquivo ou pasta de interesse (ex.:
ClasseX.js, módulouser). -
Objetivo: filtrar exatamente aquele alvo.
-
Passos:
- Defina
INCLUDE_FILE_PATTERNSpara o nome exato ou glob (ex.:"ClasseX.js"). - Ou use
INCLUDE_FOLDER_PATTERNScom substring ou multi-segmento (ex.:"src/user"). - Rode
hpc <diretório> --use-config <perfil> --only-treepara validar árvore ou sem--only-treepara trazer conteúdo.
- Defina
-
Iteração: se incluir demais ou de menos, refina o padrão (glob ↔ regex ↔ substring).
-
-
Reaproveitar lógica existente
-
Quando usar: quer ver implementações já prontas ou padrões de código.
-
Objetivo: localizar trechos por conteúdo (nomes de funções, classes, variáveis).
-
Passos:
- Use
INCLUDE_CONTENT_PATTERNScom substring ou regex (ex.:"process.env","funçãoA"). - Rode sem
--only-treepara coletar blocos START/END e revisar o código.
- Use
-
Iteração: combine com
INCLUDE_FOLDER_PATTERNSouINCLUDE_FILE_PATTERNSpara restringir a pastas específicas.
-
-
Fluxo misto e refinamento contínuo
-
Quando usar: necessidade de combinar filtros de pasta, arquivo e conteúdo.
-
Objetivo: equilibrar escopo amplo e precisão, sem excluir demais.
-
Passos:
- Comece amplo (ex.: só
INCLUDE_FOLDER_PATTERNS). - Analise resultados e adicione
INCLUDE_FILE_PATTERNSouINCLUDE_CONTENT_PATTERNSgradualmente. - Utilize
--verbosepara entender por que cada arquivo foi incluído ou ignorado.
- Comece amplo (ex.: só
-
Iteração: monitore quantidade de resultados; ajuste filtros um a um para evitar uso excessivo ou insuficiente.
-
Dica: mantenha sempre o objetivo principal em mente, trace onde você está no fluxo, e só avance para novos ajustes após validar cada etapa.
"ADDITIONAL_IGNORED_DIRS": {"SUBSTRINGS":["__tests__"]}- Comportamento: desce na árvore, mas ignora completamente
__tests__.
"INCLUDE_FOLDER_PATTERNS": {"SUBSTRINGS":["models"]}- Comportamento: todos os arquivos em qualquer diretório cujo nome ou caminho contenha
modelssão mostrados; todo o resto é ignorado.
"INCLUDE_FILE_PATTERNS": {"GLOBS":["*.test.js"]}- Comportamento: apenas arquivos cujo nome bata o padrão
*.test.jssão incluídos.
"INCLUDE_CONTENT_PATTERNS": {"SUBSTRINGS":["UsersRepository"]}- Comportamento: somente arquivos que contenham
UsersRepositoryno texto são retornados; o filtro de conteúdo é aplicado mesmo sem--only-tree.
"ADDITIONAL_IGNORED_FILES": {"REGEX":["^temp_.*\.js$"]}- Comportamento: remove todo arquivo cujo nome comece com
temp_e termine em.js.
"INCLUDE_FILE_PATTERNS": {"REGEX":["Controller.*\.js$"]}- Comportamento: inclui apenas arquivos cujo nome casem com a regex, por exemplo
UserController.js,OrderController.js.
"ADDITIONAL_IGNORED_DIRS": {"SUBSTRINGS":["dist"]},
"INCLUDE_FOLDER_PATTERNS": {"SUBSTRINGS":["src"]}- Comportamento: ignora pastas
dist, mas só inclui arquivos dentro de qualquersrc.
{
"ADDITIONAL_IGNORED_DIRS": { "GLOBS":[".*"], "REGEX":[], "SUBSTRINGS":["__pycache__"] },
"INCLUDE_FOLDER_PATTERNS": { "GLOBS":["*/models"], "REGEX":["^usecases$"],"SUBSTRINGS":["utils"] },
"INCLUDE_FILE_PATTERNS": { "GLOBS":["*.js","*.ts"], "REGEX":["^Base.*\.js$"],"SUBSTRINGS":["Schema"] },
"INCLUDE_CONTENT_PATTERNS": { "REGEX":["TODO:"], "SUBSTRINGS":["// FIXME"] }
}-
Comportamento:
-
Exclui todas as pastas ocultas (glob
.*) e__pycache__. -
Inclui pastas que:
- Batam o glob: qualquer
modelsem qualquer nível; - Batam o regex: pasta exatamente chamada
usecases; - Contenham substring
utils.
- Batam o glob: qualquer
-
Dentro dessas, inclui arquivos que:
- Batam glob em
.jsou.ts; - Batam regex
^Base.*\.js$; - Contenham substring
Schema.
- Batam glob em
-
Ainda dentro desses arquivos, só retorna os que tenham
TODO:ou// FIXMEno código.
-
-ucfg, --use-config <nome>: escolhe perfil temporário.-scfg, --set-config <nome>: define perfil padrão.-ccfg, --clear-config: limpa perfil padrão.-gcfg, --get-config: mostra perfil padrão.-lcfg, --list-configs: lista todos os perfis.-icfg, --init-config X: cria skeleton emdefaults/X.jsonerequests/X.json.--no-defaults: ignora arquivos dedefaults/.--only-tree: só exibe árvore, sem coletar conteúdo.-v, --verbose: logs de debug.
Para humanos e IAs usarem o Project Collector sem erros, foque nestes pontos-chave:
- Use
--verbosepara debugar: entenda por que cada arquivo foi incluído ou ignorado antes de ajustar filtros. - Evite padrões conflitantes: defina globs, regex e substrings de forma hierárquica (excludes → include_folder → include_file → include_content) para não neutralizar regras específicas.
- Refinamento progressivo: aplique primeiro substrings simples, depois expanda para regex ou globs conforme necessário; teste cada ajuste isoladamente.
- Gere somente o
requestsconfig necessário: crie/edit o JSON emconfigs/requests/, sem alterar defaults a menos que seja imprescindível.
Quando uma IA interagir com o Project Collector, é vital que ela siga um método iterativo e evite armadilhas de alucinação:
- Siga rigorosamente 'Abordagens Iterativas': em vez de misturar filtros arbitrariamente, a IA deve sempre aplicar o método descrito na seção de Abordagens Iterativas para cada caso de uso, ajustando um filtro por vez e validando antes de avançar.
- Detecte uso inútil: se um filtro não reduzir resultados ou produzir árvore idêntica, a IA deve reconhecer e parar para redefinir padrões.
- Previna loops sem fim: limite o número de iterações ou mudanças de filtro; se após 3 ajustes não houver progresso, peça feedback adicional.
- Reaproveite lógica existente: antes de criar novos padrões, a IA deve pesquisar implementações semelhantes no código e sugerir reutilização.
- Mantenha o objetivo em mente: em cada passo, verifique se a filtragem aproxima ao alvo; caso contrário, avalie se precisa de mais contexto ou se deve abortar a busca.
- Sempre forneça o config quando quiser fazer a busca: SEMPRE que quiser fazer uma busca, forneça um ou os 2 configs, sempre enviando o config de request e, somente quando necessário, enviando o default. Só mexa no config default se realmente for necessário, se n tiver como solucionar rodando Project_Collector em uma subpasta diferente, tiver que alterar algo de lá pois está ignorando uma informação que precisa ou pegando algo desnecesário em muitas requisições diferentes.
Seguindo essas práticas, IAs evitarão filtros muito nichados ou vagos, loops intermináveis e intervenções humanas constantes.
Antes de acionar qualquer comando:
-
Defina seu objetivo com precisão
- Que pergunta você quer responder?
- Que tipo de informação (arquivo inteiro, método específico, trecho de código) é realmente necessária?
-
Formule hipóteses de escopo usando pistas de contexto
Nunca presuma nomes de pasta, arquivo ou conteúdo. Se você não tem certeza, comece usando filtros de conteúdo para descobrir onde o termo aparece, depois refine.
-
Reúna tudo o que você já sabe sobre o alvo: nomes de arquivos, diretórios, conteúdo presente nos arquivos como funções, variáveis, tipos, comentários padrões de código relevantes ou qualquer outro.
-
Combine filtros que aproveitem essas pistas, por exemplo:
- Diretório + nome de arquivo (ex.:
/sales/+subscriptions_controller.dart) - Arquivo + trecho de código (ex.:
subscriptions_controller.dart+void update() - Diretório + padrão de conteúdo (ex.:
home/cash_register+history)
- Diretório + nome de arquivo (ex.:
-
Avalie se a combinação reduz ruído sem omitir dados cruciais: busque o melhor equilíbrio entre foco e cobertura.
-
-
Avalie trade-offs de complexidade e volume de saída
-
Complexidade do filtro: padrões muito sofisticados podem ser frágeis e custosos para ajustar.
-
Tamanho do output:
- Escopo estreito → risco de perder informações relevantes.
- Escopo amplo → excesso de dados e sobrecarga.
-
Use julgamento crítico para decidir quais e quantos filtros aplicar em cada iteração, visando um resultado manejável e relevante.
-
-
Execute e revise qualitativamente
-
Rode o comando no escopo definido.
-
Avalie:
- "Encontrei exatamente o que procurava?"
- "Faltou contexto para a próxima etapa?"
- "Veio ruído demais?"
-
Registre brevemente o que funcionou e o que não foi eficaz.
-
-
Itere com propósito
- Se o resultado atender ao objetivo → prossiga.
- Se não → ajuste seus filtros com base no feedback; reformule sua hipótese inicial se necessário.
- Documente suas decisões para facilitar futuras iterações.
-
Seleção e alternância de estratégias de busca
-
Identifique camadas de abordagem: Utilizando prioridade filtro dependendo da abordagem, só incluindo um filtro de menor prioridade se realmente ouver necessiade.
-
Micro: foco em arquivo ou conteúdo, com pistas claras.
-
Relação de prioridade:
conteúdo > arquivo > diretório,
-
-
Médio: foco em diretórios, módulos ou grupos de arquivos relacionados.
-
Macro: visão do projeto inteiro, analisando estrutura geral, padrões ou dependências.
-
Relação de prioridade:
diretório > arquivo > conteúdo,
-
-
-
Escolha a camada inicial dependendo do seu conhecimento do alvo e do volume de dados esperado.
-
Avalie a eficácia de cada camada:
- Se micro não for suficiente, escale para médio (ex.: filtrar pastas inteiras).
- Se médio ainda gerar ruído ou faltar contexto, escale para macro (mapear estrutura ampla) ou refine filtros.
-
Mude de camada de forma consciente, anotando o motivo da transição para orientar futuras buscas.
-
Dica: antes de fornecer seu JSON de request, forneça um breve comentário sobre o “Objetivo da busca” e a “Hipótese de escopo” para dar contexto a qualquer iteração futura.
- Tarefas isoladas: especifique uma única busca por vez (ex.: buscar padrões de pasta OU de conteúdo, não ambos simultaneamente sem validação).
- Confirmação de contexto: peça à IA para validar a árvore e sugerir ajustes no JSON antes de coletar conteúdo.
{ "ADDITIONAL_IGNORED_DIRS": { "GLOBS": [], "REGEX": [], "SUBSTRINGS": [] }, "ADDITIONAL_IGNORED_FILES": { "GLOBS": [], "REGEX": [], "SUBSTRINGS": [] }, "INCLUDE_FOLDER_PATTERNS": { "GLOBS": [], "REGEX": [], "SUBSTRINGS": [] }, "INCLUDE_FILE_PATTERNS": { "GLOBS": [], "REGEX": [], "SUBSTRINGS": [] }, "INCLUDE_CONTENT_PATTERNS": { "REGEX": [], "SUBSTRINGS": [] } }