# prsense-labs/prsense architecture

> Architecture diagram of the GitHub repository prsense-labs/prsense, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/prsense-labs/prsense
- Repository: https://github.com/prsense-labs/prsense

## Overview

PRSense is repository memory and code intelligence software: it detects overlapping pull requests, indexes code and engineering history for search and Q&A, and can generate unified refactors. Users enter through the CLI, GitHub Action, or server APIs; PR checks classify similarity, while RAG queries retrieve code, decisions, and PR history. The README also documents AST/health/style analysis, triage, impact scoring, rules, and automated refactor PRs. Some subsystem wiring is not shown in the sampled source, so uncertain connections are omitted.

Main entry points: [`src/server.ts`](https://github.com/prsense-labs/prsense/blob/main/src/server.ts) (HTTP Server), [`src/embeddingPipeline.ts`](https://github.com/prsense-labs/prsense/blob/main/src/embeddingPipeline.ts) (Embedding Pipeline), [`src/storage/interface.ts`](https://github.com/prsense-labs/prsense/blob/main/src/storage/interface.ts) (Storage Backends), [`action/index.ts`](https://github.com/prsense-labs/prsense/blob/main/action/index.ts) (GitHub Action)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Product Entry Points"]
  node_cli["CLI<br/>[prsense-easy.ts]"]
  node_action["GitHub Action<br/>[index.ts]"]
  node_server["HTTP Server<br/>[server.ts]"]
  node_rag_api["RAG API<br/>[ragEndpoints.ts]"]
  node_webhook_api["Webhook Function<br/>[webhook.ts]"]
end

subgraph group_memory["Repository Memory"]
  node_storage[("Storage Backends<br/>[interface.ts]")]
  node_file_storage[("File Storage<br/>[file.ts]")]
  node_pg_storage[("Postgres Storage<br/>[postgres.ts]")]
  node_sqlite_storage[("SQLite Storage<br/>[sqlite.ts]")]
  node_memory_storage[("Memory Storage<br/>[memory.ts]")]
  node_indexer["Codebase Indexer<br/>[codebaseIndexer.ts]"]
  node_rag_query["RAG Query Engine<br/>[queryEngine.ts]"]
end

subgraph group_analysis["Code Intelligence"]
  node_detector["PR Detector<br/>[prsense.ts]"]
  node_decision["Similarity Decision<br/>[decisionEngine.ts]"]
  node_embedding["Embedding Pipeline"]
  node_ast["AST Parser<br/>[parser.ts]"]
  node_health["Health Metrics<br/>[metrics.ts]"]
  node_style["Style Learner<br/>[learner.ts]"]
  node_triage["PR Triage<br/>[triage.ts]"]
  node_impact["Impact Scoring<br/>[impactScore.ts]"]
  node_rules["Rules Engine<br/>[rules.ts]"]
end

subgraph group_refactor["Refactoring"]
  node_refactor_engine["Refactor Engine<br/>[engine.ts]"]
  node_auto_pr["Auto-PR Agent<br/>[auto-pr.ts]"]
end

subgraph group_integrations["External Integrations"]
  node_embedder["Embedding Backends<br/>[onnx.ts]"]
  node_providers["Git Providers<br/>[index.ts]"]
  node_slack_ingest["Slack Decision Ingest<br/>[slackIngest.ts]"]
  node_notifications["Notification Dispatch<br/>[index.ts]"]
  node_llm["LLM Providers<br/>[deepseek.ts]"]
end

node_github_user(("Developer / CI"))
node_github(("GitHub"))
node_slack(("Slack"))
node_codebase["Local Codebase"]

node_github_user -->|"runs commands"| node_cli
node_github_user -->|"opens pull request"| node_action
node_github_user -->|"calls APIs"| node_server
node_action -->|"checks PR"| node_detector
node_action -->|"loads and saves"| node_file_storage
node_action -->|"selects backend"| node_embedder
node_detector -->|"classifies score"| node_decision
node_detector -->|"embeds PR"| node_embedding
node_embedding -->|"requests vectors"| node_embedder
node_server -->|"handles webhook via"| node_providers
node_webhook_api -->|"calls webhook handler"| node_server
node_server -->|"initializes when configured"| node_pg_storage
node_server -->|"initializes fallback"| node_sqlite_storage
node_server -->|"uses fallback"| node_memory_storage
node_server -->|"classifies PR"| node_triage
node_server -->|"scores impact"| node_impact
node_server -->|"evaluates rules"| node_rules
node_server -->|"dispatches notifications"| node_notifications
node_server -->|"reads analytics"| node_storage
node_rag_api -->|"obtains storage"| node_storage
node_rag_api -->|"starts indexing"| node_indexer
node_rag_api -->|"runs query"| node_rag_query
node_indexer -->|"embeds code chunks"| node_embedding
node_indexer -->|"stores chunks"| node_storage
node_rag_query -->|"embeds question"| node_embedding
node_rag_query -->|"searches and hydrates"| node_storage
node_rag_query -.->|"synthesizes answer"| node_llm
node_slack -->|"submits decision"| node_slack_ingest
node_slack_ingest -->|"embeds decision"| node_embedding
node_slack_ingest -->|"saves decision"| node_storage
node_codebase -->|"provides files"| node_indexer
node_cli -->|"runs refactor"| node_refactor_engine
node_refactor_engine -->|"generates unified code"| node_llm
node_refactor_engine -->|"requests auto PR"| node_auto_pr
node_auto_pr -->|"opens pull request"| node_github
node_github -.->|"PR operations"| node_providers
node_ast -->|"supports analysis"| node_health

click node_cli "https://github.com/prsense-labs/prsense/blob/main/bin/prsense-easy.ts"
click node_action "https://github.com/prsense-labs/prsense/blob/main/action/index.ts"
click node_server "https://github.com/prsense-labs/prsense/blob/main/src/server.ts"
click node_rag_api "https://github.com/prsense-labs/prsense/blob/main/src/api/ragEndpoints.ts"
click node_webhook_api "https://github.com/prsense-labs/prsense/blob/main/api/webhook.ts"
click node_detector "https://github.com/prsense-labs/prsense/blob/main/src/prsense.ts"
click node_decision "https://github.com/prsense-labs/prsense/blob/main/src/decisionEngine.ts"
click node_embedding "https://github.com/prsense-labs/prsense/blob/main/src/embeddingPipeline.ts"
click node_embedder "https://github.com/prsense-labs/prsense/blob/main/src/embedders/onnx.ts"
click node_storage "https://github.com/prsense-labs/prsense/blob/main/src/storage/interface.ts"
click node_file_storage "https://github.com/prsense-labs/prsense/blob/main/src/storage/file.ts"
click node_pg_storage "https://github.com/prsense-labs/prsense/blob/main/src/storage/postgres.ts"
click node_sqlite_storage "https://github.com/prsense-labs/prsense/blob/main/src/storage/sqlite.ts"
click node_memory_storage "https://github.com/prsense-labs/prsense/blob/main/src/storage/memory.ts"
click node_indexer "https://github.com/prsense-labs/prsense/blob/main/src/rag/codebaseIndexer.ts"
click node_rag_query "https://github.com/prsense-labs/prsense/blob/main/src/rag/queryEngine.ts"
click node_ast "https://github.com/prsense-labs/prsense/blob/main/src/ast/parser.ts"
click node_health "https://github.com/prsense-labs/prsense/blob/main/src/health/metrics.ts"
click node_style "https://github.com/prsense-labs/prsense/blob/main/src/style/learner.ts"
click node_triage "https://github.com/prsense-labs/prsense/blob/main/src/triage.ts"
click node_impact "https://github.com/prsense-labs/prsense/blob/main/src/impactScore.ts"
click node_rules "https://github.com/prsense-labs/prsense/blob/main/src/rules.ts"
click node_refactor_engine "https://github.com/prsense-labs/prsense/blob/main/src/refactor/engine.ts"
click node_auto_pr "https://github.com/prsense-labs/prsense/blob/main/src/refactor/auto-pr.ts"
click node_providers "https://github.com/prsense-labs/prsense/blob/main/src/providers/index.ts"
click node_slack_ingest "https://github.com/prsense-labs/prsense/blob/main/src/providers/slackIngest.ts"
click node_notifications "https://github.com/prsense-labs/prsense/blob/main/src/notifications/index.ts"
click node_llm "https://github.com/prsense-labs/prsense/blob/main/src/llm/deepseek.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_action,node_server,node_rag_api,node_webhook_api toneBlue
class node_storage,node_file_storage,node_pg_storage,node_sqlite_storage,node_memory_storage,node_indexer,node_rag_query toneAmber
class node_detector,node_decision,node_embedding,node_ast,node_health,node_style,node_triage,node_impact,node_rules toneMint
class node_refactor_engine,node_auto_pr toneRose
class node_embedder,node_providers,node_slack_ingest,node_notifications,node_llm,node_github_user,node_github,node_slack,node_codebase toneIndigo
```

## Components

### Product Entry Points

- [CLI](https://github.com/prsense-labs/prsense/blob/main/bin/prsense-easy.ts): `bin/prsense-easy.ts`
- [GitHub Action](https://github.com/prsense-labs/prsense/blob/main/action/index.ts): `action/index.ts`
- [HTTP Server](https://github.com/prsense-labs/prsense/blob/main/src/server.ts): `src/server.ts`
- [RAG API](https://github.com/prsense-labs/prsense/blob/main/src/api/ragEndpoints.ts): `src/api/ragEndpoints.ts`
- [Webhook Function](https://github.com/prsense-labs/prsense/blob/main/api/webhook.ts): `api/webhook.ts`

### Repository Memory

- [Storage Backends](https://github.com/prsense-labs/prsense/blob/main/src/storage/interface.ts): `src/storage/interface.ts`
- [File Storage](https://github.com/prsense-labs/prsense/blob/main/src/storage/file.ts): `src/storage/file.ts`
- [Postgres Storage](https://github.com/prsense-labs/prsense/blob/main/src/storage/postgres.ts): `src/storage/postgres.ts`
- [SQLite Storage](https://github.com/prsense-labs/prsense/blob/main/src/storage/sqlite.ts): `src/storage/sqlite.ts`
- [Memory Storage](https://github.com/prsense-labs/prsense/blob/main/src/storage/memory.ts): `src/storage/memory.ts`
- [Codebase Indexer](https://github.com/prsense-labs/prsense/blob/main/src/rag/codebaseIndexer.ts): `src/rag/codebaseIndexer.ts`
- [RAG Query Engine](https://github.com/prsense-labs/prsense/blob/main/src/rag/queryEngine.ts): `src/rag/queryEngine.ts`

### Code Intelligence

- [PR Detector](https://github.com/prsense-labs/prsense/blob/main/src/prsense.ts): `src/prsense.ts`
- [Similarity Decision](https://github.com/prsense-labs/prsense/blob/main/src/decisionEngine.ts): `src/decisionEngine.ts`
- [Embedding Pipeline](https://github.com/prsense-labs/prsense/blob/main/src/embeddingPipeline.ts): `src/embeddingPipeline.ts`
- [AST Parser](https://github.com/prsense-labs/prsense/blob/main/src/ast/parser.ts): `src/ast/parser.ts`
- [Health Metrics](https://github.com/prsense-labs/prsense/blob/main/src/health/metrics.ts): `src/health/metrics.ts`
- [Style Learner](https://github.com/prsense-labs/prsense/blob/main/src/style/learner.ts): `src/style/learner.ts`
- [PR Triage](https://github.com/prsense-labs/prsense/blob/main/src/triage.ts): `src/triage.ts`
- [Impact Scoring](https://github.com/prsense-labs/prsense/blob/main/src/impactScore.ts): `src/impactScore.ts`
- [Rules Engine](https://github.com/prsense-labs/prsense/blob/main/src/rules.ts): `src/rules.ts`

### Refactoring

- [Refactor Engine](https://github.com/prsense-labs/prsense/blob/main/src/refactor/engine.ts): `src/refactor/engine.ts`
- [Auto-PR Agent](https://github.com/prsense-labs/prsense/blob/main/src/refactor/auto-pr.ts): `src/refactor/auto-pr.ts`

### External Integrations

- [Embedding Backends](https://github.com/prsense-labs/prsense/blob/main/src/embedders/onnx.ts): `src/embedders/onnx.ts`
- [Git Providers](https://github.com/prsense-labs/prsense/blob/main/src/providers/index.ts): `src/providers/index.ts`
- [Slack Decision Ingest](https://github.com/prsense-labs/prsense/blob/main/src/providers/slackIngest.ts): `src/providers/slackIngest.ts`
- [Notification Dispatch](https://github.com/prsense-labs/prsense/blob/main/src/notifications/index.ts): `src/notifications/index.ts`
- [LLM Providers](https://github.com/prsense-labs/prsense/blob/main/src/llm/deepseek.ts): `src/llm/deepseek.ts`

### Other components

- **Developer / CI**
- **GitHub**
- **Slack**
- **Local Codebase**

## Connections

- Developer / CI → CLI: runs commands
- Developer / CI → GitHub Action: opens pull request
- Developer / CI → HTTP Server: calls APIs
- GitHub Action → PR Detector: checks PR
- GitHub Action → File Storage: loads and saves
- GitHub Action → Embedding Backends: selects backend
- PR Detector → Similarity Decision: classifies score
- PR Detector → Embedding Pipeline: embeds PR
- Embedding Pipeline → Embedding Backends: requests vectors
- HTTP Server → Git Providers: handles webhook via
- Webhook Function → HTTP Server: calls webhook handler
- HTTP Server → Postgres Storage: initializes when configured
- HTTP Server → SQLite Storage: initializes fallback
- HTTP Server → Memory Storage: uses fallback
- HTTP Server → PR Triage: classifies PR
- HTTP Server → Impact Scoring: scores impact
- HTTP Server → Rules Engine: evaluates rules
- HTTP Server → Notification Dispatch: dispatches notifications
- HTTP Server → Storage Backends: reads analytics
- RAG API → Storage Backends: obtains storage
- RAG API → Codebase Indexer: starts indexing
- RAG API → RAG Query Engine: runs query
- Codebase Indexer → Embedding Pipeline: embeds code chunks
- Codebase Indexer → Storage Backends: stores chunks
- RAG Query Engine → Embedding Pipeline: embeds question
- RAG Query Engine → Storage Backends: searches and hydrates
- RAG Query Engine → LLM Providers: synthesizes answer
- Slack → Slack Decision Ingest: submits decision
- Slack Decision Ingest → Embedding Pipeline: embeds decision
- Slack Decision Ingest → Storage Backends: saves decision
- Local Codebase → Codebase Indexer: provides files
- CLI → Refactor Engine: runs refactor
- Refactor Engine → LLM Providers: generates unified code
- Refactor Engine → Auto-PR Agent: requests auto PR
- Auto-PR Agent → GitHub: opens pull request
- GitHub → Git Providers: PR operations
- AST Parser → Health Metrics: supports analysis
