Metadata-Version: 2.4
Name: sourcecode
Version: 0.1.0
Summary: Genera un mapa de contexto estructurado de proyectos de software para agentes IA
License: MIT
Requires-Python: >=3.9
Requires-Dist: pathspec>=1.0
Requires-Dist: ruamel-yaml>=0.18
Requires-Dist: tomli>=2.0; python_version < '3.11'
Requires-Dist: typer>=0.24
Provides-Extra: dev
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pytest>=8; extra == 'dev'
Requires-Dist: ruff>=0.15; extra == 'dev'
Description-Content-Type: text/markdown

# sourcecode

`sourcecode` genera un mapa de contexto estructurado de un proyecto de software para que un agente pueda entender rapido su stack, puntos de entrada y forma del repositorio.

## Instalacion

```bash
pip install sourcecode
```

Requiere Python `3.9+`.

## Uso rapido

Analizar el directorio actual en JSON:

```bash
sourcecode .
```

Generar una vista compacta para prompts o handoff:

```bash
sourcecode --compact .
```

Analizar otro directorio y escribir YAML a fichero:

```bash
sourcecode --format yaml --output sourcecode.yaml /ruta/al/proyecto
```

Mostrar version:

```bash
sourcecode --version
```

Opciones principales:

- `--format json|yaml`: formato de salida.
- `--output PATH`: escribe a fichero en vez de `stdout`.
- `--compact`: devuelve una vista reducida con `schema_version`, `project_type`, `stacks`, `entry_points` y `file_tree_depth1`.
- `--depth INTEGER`: profundidad maxima del arbol de ficheros.
- `--no-redact`: desactiva la redaccion de secretos.

## Que detecta

- Stacks: Node.js, Python, Go, Rust, Java, PHP, Ruby y Dart.
- Frameworks asociados al stack cuando hay senales suficientes.
- `project_type`: `webapp`, `api`, `library`, `cli`, `fullstack`, `monorepo` o `unknown`.
- `entry_points` relevantes, como `main.py`, `cmd/api/main.go` o `app/page.tsx`.
- Workspaces y roots por stack en repos multi-stack o monorepo.

## Ejemplo compacto

Salida real de un fixture Next.js:

```json
{
  "schema_version": "1.0",
  "project_type": "webapp",
  "stacks": [
    {
      "stack": "nodejs",
      "detection_method": "manifest",
      "confidence": "high",
      "frameworks": [
        { "name": "Next.js", "source": "package.json" },
        { "name": "React", "source": "package.json" }
      ],
      "package_manager": "pnpm",
      "manifests": ["package.json"],
      "primary": true,
      "root": ".",
      "workspace": null,
      "signals": [
        "manifest:package.json",
        "framework:Next.js",
        "framework:React",
        "package_manager:pnpm",
        "entry:app/page.tsx"
      ]
    }
  ],
  "entry_points": [
    {
      "path": "app/page.tsx",
      "stack": "nodejs",
      "kind": "web",
      "source": "package.json"
    }
  ],
  "file_tree_depth1": {
    "pnpm-lock.yaml": null,
    "package.json": null,
    "app": {}
  }
}
```

## Ejemplo monorepo

En un monorepo, cada stack incluye su `root` y `workspace`, y uno de ellos queda marcado como `primary`.

```json
{
  "project_type": "monorepo",
  "stacks": [
    {
      "stack": "nodejs",
      "primary": true,
      "root": "apps/web",
      "workspace": "apps/web"
    },
    {
      "stack": "python",
      "primary": false,
      "root": "packages/api",
      "workspace": "packages/api"
    }
  ],
  "entry_points": [
    { "path": "apps/web/app/page.tsx", "stack": "nodejs", "kind": "web" },
    { "path": "packages/api/main.py", "stack": "python", "kind": "cli" }
  ]
}
```

## Output

El schema completo incluye:

- `metadata`: version de schema, timestamp, version de `sourcecode` y ruta analizada.
- `file_tree`: arbol del repositorio donde `null` representa un fichero y un objeto representa un directorio.
- `stacks`: detecciones por ecosistema con confianza, frameworks, manifests, `primary`, `root`, `workspace` y `signals`.
- `project_type`: clasificacion general del proyecto.
- `entry_points`: entradas detectadas por stack.

La referencia detallada esta en [docs/schema.md](/Users/user/Documents/workspace/atlas/atlas-cli/docs/schema.md).

## Desarrollo

Instalacion editable con dependencias de desarrollo:

```bash
pip install -e ".[dev]"
```

Validacion local:

```bash
ruff check src tests
mypy src
pytest -q
```
