Metadata-Version: 2.4
Name: jsat
Version: 0.1.0
Summary: JaySoft AI Tools — open-source codebase intelligence shell and SDK
Project-URL: Homepage, https://github.com/jsat-project/jsat
Project-URL: Repository, https://github.com/jsat-project/jsat
Project-URL: Bug Tracker, https://github.com/jsat-project/jsat/issues
Author-email: JaySoft <iamjpsonkar@gmail.com>
License: MIT
Keywords: ai,cli,codebase,intelligence,sdk,static-analysis
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: Quality Assurance
Requires-Python: >=3.10
Requires-Dist: click>=8
Requires-Dist: gitpython>=3.1
Requires-Dist: httpx>=0.27
Requires-Dist: psutil>=5.9
Requires-Dist: pydantic-settings>=2
Requires-Dist: pydantic>=2.5
Requires-Dist: pyyaml>=6
Requires-Dist: rich>=13
Requires-Dist: sqlean-py>=0.21.7
Requires-Dist: structlog>=24
Requires-Dist: tree-sitter-go>=0.21
Requires-Dist: tree-sitter-javascript>=0.21
Requires-Dist: tree-sitter-python>=0.21
Requires-Dist: tree-sitter>=0.21
Requires-Dist: typer[all]>=0.12
Provides-Extra: all
Requires-Dist: anthropic>=0.30; extra == 'all'
Requires-Dist: graphiti-core>=0.3; extra == 'all'
Requires-Dist: jsonschema>=4.20; extra == 'all'
Requires-Dist: neo4j>=5.15; extra == 'all'
Requires-Dist: ollama>=0.2; extra == 'all'
Requires-Dist: openai>=1.35; extra == 'all'
Requires-Dist: openapi-spec-validator>=0.7; extra == 'all'
Requires-Dist: prance>=23; extra == 'all'
Requires-Dist: pygithub>=2; extra == 'all'
Requires-Dist: qdrant-client>=1.7; extra == 'all'
Requires-Dist: redis>=5; extra == 'all'
Requires-Dist: sarif-tools>=0.3; extra == 'all'
Requires-Dist: semgrep>=1.50; extra == 'all'
Requires-Dist: tree-sitter-java>=0.21; extra == 'all'
Requires-Dist: tree-sitter-ruby>=0.21; extra == 'all'
Requires-Dist: tree-sitter-rust>=0.21; extra == 'all'
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.30; extra == 'anthropic'
Provides-Extra: ci
Requires-Dist: jsonschema>=4.20; extra == 'ci'
Requires-Dist: openapi-spec-validator>=0.7; extra == 'ci'
Requires-Dist: prance>=23; extra == 'ci'
Requires-Dist: pygithub>=2; extra == 'ci'
Requires-Dist: sarif-tools>=0.3; extra == 'ci'
Requires-Dist: semgrep>=1.50; extra == 'ci'
Requires-Dist: tree-sitter-java>=0.21; extra == 'ci'
Requires-Dist: tree-sitter-ruby>=0.21; extra == 'ci'
Requires-Dist: tree-sitter-rust>=0.21; extra == 'ci'
Provides-Extra: local
Requires-Dist: ollama>=0.2; extra == 'local'
Provides-Extra: openai
Requires-Dist: openai>=1.35; extra == 'openai'
Provides-Extra: standard
Requires-Dist: jsonschema>=4.20; extra == 'standard'
Requires-Dist: openapi-spec-validator>=0.7; extra == 'standard'
Requires-Dist: prance>=23; extra == 'standard'
Requires-Dist: semgrep>=1.50; extra == 'standard'
Requires-Dist: tree-sitter-java>=0.21; extra == 'standard'
Requires-Dist: tree-sitter-ruby>=0.21; extra == 'standard'
Requires-Dist: tree-sitter-rust>=0.21; extra == 'standard'
Provides-Extra: team
Requires-Dist: graphiti-core>=0.3; extra == 'team'
Requires-Dist: jsonschema>=4.20; extra == 'team'
Requires-Dist: neo4j>=5.15; extra == 'team'
Requires-Dist: openapi-spec-validator>=0.7; extra == 'team'
Requires-Dist: prance>=23; extra == 'team'
Requires-Dist: qdrant-client>=1.7; extra == 'team'
Requires-Dist: redis>=5; extra == 'team'
Requires-Dist: semgrep>=1.50; extra == 'team'
Requires-Dist: tree-sitter-java>=0.21; extra == 'team'
Requires-Dist: tree-sitter-ruby>=0.21; extra == 'team'
Requires-Dist: tree-sitter-rust>=0.21; extra == 'team'
Description-Content-Type: text/markdown

# JSAT — JaySoft AI Tools

> Codebase intelligence shell and SDK. Lightweight by default.

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
[![Author](https://img.shields.io/badge/author-Jay%20Prakash%20Sonkar-green.svg)](https://github.com/iamjpsonkar)

## What is JSAT?

JSAT gives any AI (Claude, Codex, Gemini, or local Ollama) deep, structured understanding of
your codebase — so you spend less time explaining context and more time shipping.

- **Interactive shell** like IPython, but for codebase intelligence
- **Python SDK** — `from jsat import JSAT`
- **Works offline** with local Ollama — no API keys required
- **Lightweight by default** — `pip install jsat` is ~80MB and starts in <800ms

## Quick Start

```bash
pip install jsat          # core only
pip install jsat[local]   # + Ollama for local AI (recommended)

cd your-project/
jsat init --profile solo  # write .jsat.yaml
jsat index .              # build the codebase graph
jsat                      # start the shell
```

```
JSAT Shell v0.1.0
> what does this project do?
> which services write to the orders table?
> blast-radius src/payment/refund.py
```

## Installation Profiles

| Profile | Command | Size | Use case |
|---------|---------|------|---------|
| Core | `pip install jsat` | ~80MB | Quick evaluation |
| Local AI | `pip install jsat[local]` | ~85MB | Solo dev with Ollama |
| Standard | `pip install jsat[standard]` | ~120MB | Individual engineers |
| Team | `pip install jsat[team]` | ~200MB | Engineering teams |
| CI | `pip install jsat[ci]` | ~90MB | CI pipelines (no AI cost) |
| Full | `pip install jsat[all]` | ~350MB | Power users |

## System Auto-Detection

JSAT probes your machine on first run and selects the right backends:

```bash
jsat doctor   # see what's detected and what to install
```

| Your setup | Graph | Embeddings | Cache |
|-----------|-------|-----------|-------|
| Laptop, Ollama running | SQLite | nomic-embed-code (local) | disk |
| Team server (Neo4j+Qdrant+Redis) | Neo4j | text-embedding-3-small | Redis |
| ARM (Apple M2, Pi) | SQLite | nomic-embed-code via Metal | disk |
| CI environment | SQLite | none (skipped) | memory |

## Python SDK

```python
from jsat import JSAT

js = JSAT(repo=".")
js.index()

# Natural language query
result = js.query("what calls the refund endpoint?")
print(result.answer)

# Blast radius — trace impact of a change
report = js.blast_radius("src/payment/refund.py")
for impact in report.impacts:
    print(f"{impact.severity}: {impact.node_name}")

# Incident investigation
incident = js.investigate_incident("500 errors on checkout since 14:00")
for h in incident.hypotheses:
    print(f"Score {h.score}: {h.commit_summary}")

# Export for sharing
js.export("backup.jsat.zip")
```

## CLI Reference

```bash
jsat index [PATH] [--branch HEAD] [--force]
jsat shell
jsat doctor [--refresh] [--json]
jsat init --profile solo|team|ci|raspberry-pi
jsat export OUTPUT
jsat import ARCHIVE
jsat skills list
jsat version
```

## Architecture

JSAT is built around a **graph-native architecture**:

- **tree-sitter** for multi-language AST parsing
- **SQLite** (local) or **Neo4j** (team) for the codebase graph
- **Ollama** (local) or any cloud LLM for AI features
- **Lazy loading** — nothing heavy loads until you use it

All backends implement ABCs — tools never call backends directly.

## Project

- **Author:** Jay Prakash Sonkar ([@iamjpsonkar](https://github.com/iamjpsonkar))
- **Email:** iamjpsonkar@gmail.com
- **License:** MIT
- **Specification:** [`plan.md`](plan.md) | **Implementation guide:** [`prompt.md`](prompt.md)
