Executando verificação de segurança...
14

Código-fonte completo do Claude Code é exposto após tropeço da Anthropic

O código-fonte completo do Claude Code foi exposto após um pesquisador de segurança identificar um arquivo de source map publicado inadvertidamente no NPM. O vazamento ocorreu porque a Anthropic incluiu, sem perceber, um arquivo do tipo “.map” dentro do pacote distribuído.

Esse tipo de arquivo é normalmente utilizado durante o desenvolvimento para mapear código compilado ou minificado de volta ao código original, facilitando processos de depuração. No entanto, na prática, um source map pode conter praticamente todo o código-fonte original em formato legível.

Com isso, qualquer pessoa que baixasse o pacote no npm conseguia acessar o arquivo e reconstruir integralmente a base do projeto. O conteúdo acabou sendo publicado no repositório instructkr/claude-code no GitHub, reunindo cerca de 1.900 arquivos em TypeScript e mais de 512.000 linhas de código.

A publicação foi atualizada para corrigir a URL do repositório GitHub.

Carregando publicação patrocinada...
7

Meus 2 cents,

Para quem quiser replicar o processo de extracao que eles fizeram do zero (sem risco de pegar algum repositorio envenenado - que estao surgindo aos montes), tem este passo-a-passo:

  1. Baixar o codigo pacote original do ClaudeCode
mkdir claude-code-extract && cd claude-code-extract
npm pack @anthropic-ai/[email protected]
tar -xzf anthropic-ai-claude-code-2.1.88.tgz
cd package
  1. Criar o programa que extrai (p.ex. unpack.mjs)
import { readFileSync, writeFileSync, mkdirSync } from "fs";
import { dirname, join } from "path";

const mapFile = join(import.meta.dirname, "cli.js.map");
const outDir = join(import.meta.dirname, "unpacked");

console.log("Reading source map...");
const map = JSON.parse(readFileSync(mapFile, "utf-8"));

const sources = map.sources || [];
const contents = map.sourcesContent || [];

console.log(`Found ${sources.length} source files.`);

let written = 0;
let skipped = 0;

for (let i = 0; i < sources.length; i++) {
  const src = sources[i];
  const content = contents[i];

  if (content == null) {
    skipped++;
    continue;
  }

  const outPath = join(outDir, src.replace(/^\.\.\//g, ""));
  mkdirSync(dirname(outPath), { recursive: true });
  writeFileSync(outPath, content);
  written++;
}

console.log(`Done! Wrote ${written} files to ${outDir}`);
if (skipped > 0) console.log(`Skipped ${skipped} files with no content.`);
  1. Extrair
node unpack.mjs

ls unpacked

Saude e Sucesso !

4

Meus 2 cents,

Repositorio (chatgptprojects/claude-code) devidamente starreado e forkeado.

Dei uma olhada rapida, algumas coisas que achei interessantes:

  • Apenas 30Mb de codigo fonte (que da para baixar para uns 18Mb sem minificar mas tirando redundancias).

  • Codigo ate que simples de um modo geral - nao vi nada que chamasse a atencao tipo "uau, que ideia fora da caixa" ou "putz, que otimizacao bem planejada". Arroz com feijao, com tempero honesto e fazendo o que se propoe

    • NOTA: foi so uma passada de olho, entao pode ter algo mais elaborado em algum canto.
  • Tudo bem que sao propostas diferentes, mas me lembrei do OpenClaw que da uma sensacao meio que "balaio de gatos".

Enfim, algo que remete ao KISS:

  • faca funcionar

  • faca bem feito

  • se nao precisa, nao inventa moda

EDIT: Ja estao se espalhando analises sobre o codigo:

https://github.com/openedclaude/claude-reviews-claude

Saude e Sucesso !

1