# luxaris/orion-and-diana-jachacks architecture

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

- Interactive diagram: https://gitdiagram.com/luxaris/orion-and-diana-jachacks
- Repository: https://github.com/luxaris/orion-and-diana-jachacks

## Overview

Orion detects suspected spills through two Jac-orchestrated workflows: V1 investigates a target with web and satellite evidence, while V2 adds spatial-grid and sensor/orbit consensus. Results become manifests and dashboard data; an API also supports investigation jobs and live status. Diana is a separate hunt workflow that reuses V2 SpatialSAR and exposes findings through that API. README documents the dashboard and model/classifier stages, but their source is not present in the supplied tree; those links reflect the documented architecture.

Main entry points: [`v1/watchdog.jac`](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/watchdog.jac) (V1 watchdog), [`v2/orion_api.py`](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/orion_api.py) (V2 API), [`v2/watchdog.jac`](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/watchdog.jac) (V2 watchdog), [`v2/spatial_search.py`](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/spatial_search.py) (SpatialSAR search)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_investigation["Spill investigation"]
  node_v1_walker["V1 watchdog<br/>[watchdog.jac]"]
  node_v1_tools["V1 agent tools<br/>[agent_tools.py]"]
  node_v2_walker["V2 watchdog<br/>[watchdog.jac]"]
  node_v2_tools["V2 agent tools<br/>[agent_tools.py]"]
end

subgraph group_imagery["Satellite analysis"]
  node_v1_classifier["V1 classifiers<br/>[classify_image.py]"]
  node_v1_sar["V1 SAR tools<br/>[sar_model_tools.py]"]
  node_v1_gee["V1 GEE tools<br/>[gee_tools.py]"]
  node_spatial["SpatialSAR search<br/>[spatial_search.py]"]
  node_v2_classifier["V2 classifiers<br/>[sar_model_tools.py]"]
  node_v2_gee["V2 GEE tools<br/>[gee_tools.py]"]
end

subgraph group_delivery["Results and dashboard"]
  node_v1_api["V1 API<br/>[orion_api.py]"]
  node_v1_export["V1 exporter"]
  node_v2_api["V2 API<br/>[orion_api.py]"]
  node_v2_export["V2 exporter"]
  node_dashboard["Watchtower dashboard"]
  node_manifest["Run manifests"]
  node_anomaly_data["Anomaly data"]
end

subgraph group_diana["Diana huntress"]
  node_diana_walker["Diana hunt walker<br/>[diana_huntress.jac]"]
  node_diana_tools["Diana tools<br/>[diana_tools.py]"]
end

node_operator(("Operator"))
node_web_search["Web search"]
node_llm["LLM service"]
node_earth_engine["Google Earth Engine"]

node_operator -->|"starts run"| node_v1_walker
node_operator -->|"starts run"| node_v2_walker
node_v1_walker -->|"calls tools"| node_v1_tools
node_v1_walker -->|"tasks imagery"| node_v1_gee
node_v1_walker -->|"classifies imagery"| node_v1_classifier
node_v1_walker -->|"analyzes SAR"| node_v1_sar
node_v1_tools -->|"searches web"| node_web_search
node_v1_tools -->|"requests reasoning"| node_llm
node_v1_gee -->|"fetches imagery"| node_earth_engine
node_v1_walker -->|"writes results"| node_manifest
node_manifest -->|"reads manifests"| node_v1_export
node_v1_export -->|"writes dashboard data"| node_anomaly_data
node_operator -->|"requests investigation"| node_v1_api
node_v1_api -->|"launches run"| node_v1_walker
node_v1_api -->|"serves anomalies"| node_anomaly_data
node_operator -->|"starts run"| node_v2_walker
node_v2_walker -->|"calls tools"| node_v2_tools
node_v2_walker -->|"runs spatial scan"| node_spatial
node_spatial -->|"classifies chips"| node_v2_classifier
node_spatial -->|"fetches chips"| node_v2_gee
node_v2_gee -->|"fetches imagery"| node_earth_engine
node_v2_tools -->|"searches web"| node_web_search
node_v2_tools -->|"requests reasoning"| node_llm
node_v2_walker -->|"writes results"| node_manifest
node_manifest -->|"reads manifests"| node_v2_export
node_v2_export -->|"writes dashboard data"| node_anomaly_data
node_operator -->|"requests investigation"| node_v2_api
node_v2_api -->|"launches run"| node_v2_walker
node_v2_api -->|"serves anomalies"| node_anomaly_data
node_dashboard -.->|"polls anomalies"| node_v1_api
node_dashboard -.->|"polls anomalies"| node_v2_api
node_anomaly_data -->|"provides anomaly data"| node_dashboard
node_operator -->|"starts hunt"| node_diana_walker
node_diana_walker -->|"calls helpers"| node_diana_tools
node_diana_walker -->|"uses SpatialSAR"| node_spatial
node_diana_tools -->|"requests extraction"| node_llm
node_v2_api -->|"launches Diana"| node_diana_walker
node_diana_tools -->|"records findings"| node_anomaly_data
node_v2_api -->|"serves Diana status"| node_dashboard

click node_v1_walker "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/watchdog.jac"
click node_v1_tools "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/agent_tools.py"
click node_v1_classifier "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/classify_image.py"
click node_v1_sar "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/sar_model_tools.py"
click node_v1_gee "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/gee_tools.py"
click node_v1_api "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/orion_api.py"
click node_v1_export "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/export_watchtower_data.py"
click node_v2_walker "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/watchdog.jac"
click node_v2_tools "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/agent_tools.py"
click node_spatial "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/spatial_search.py"
click node_v2_classifier "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/sar_model_tools.py"
click node_v2_gee "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/gee_tools.py"
click node_v2_api "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/orion_api.py"
click node_v2_export "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/export_watchtower_data.py"
click node_dashboard "https://github.com/luxaris/orion-and-diana-jachacks/tree/main/earth-watchtower"
click node_diana_walker "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/diana/diana_huntress.jac"
click node_diana_tools "https://github.com/luxaris/orion-and-diana-jachacks/blob/main/diana/diana_tools.py"

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_v1_walker,node_v1_tools,node_v2_walker,node_v2_tools toneBlue
class node_v1_classifier,node_v1_sar,node_v1_gee,node_spatial,node_v2_classifier,node_v2_gee toneAmber
class node_v1_api,node_v1_export,node_v2_api,node_v2_export,node_dashboard,node_manifest,node_anomaly_data toneMint
class node_diana_walker,node_diana_tools toneRose
class node_operator,node_web_search,node_llm,node_earth_engine toneIndigo
```

## Components

### Spill investigation

- [V1 watchdog](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/watchdog.jac): `v1/watchdog.jac`
- [V1 agent tools](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/agent_tools.py): `v1/agent_tools.py`
- [V2 watchdog](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/watchdog.jac): `v2/watchdog.jac`
- [V2 agent tools](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/agent_tools.py): `v2/agent_tools.py`

### Satellite analysis

- [V1 classifiers](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/classify_image.py): `v1/classify_image.py`
- [V1 SAR tools](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/sar_model_tools.py): `v1/sar_model_tools.py`
- [V1 GEE tools](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/gee_tools.py): `v1/gee_tools.py`
- [SpatialSAR search](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/spatial_search.py): `v2/spatial_search.py`
- [V2 classifiers](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/sar_model_tools.py): `v2/sar_model_tools.py`
- [V2 GEE tools](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/gee_tools.py): `v2/gee_tools.py`

### Results and dashboard

- [V1 API](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/orion_api.py): `v1/orion_api.py`
- [V1 exporter](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v1/export_watchtower_data.py): `v1/export_watchtower_data.py`
- [V2 API](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/orion_api.py): `v2/orion_api.py`
- [V2 exporter](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/v2/export_watchtower_data.py): `v2/export_watchtower_data.py`
- [Watchtower dashboard](https://github.com/luxaris/orion-and-diana-jachacks/tree/main/earth-watchtower): `earth-watchtower`
- **Run manifests**
- **Anomaly data**

### Diana huntress

- [Diana hunt walker](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/diana/diana_huntress.jac): `diana/diana_huntress.jac`
- [Diana tools](https://github.com/luxaris/orion-and-diana-jachacks/blob/main/diana/diana_tools.py): `diana/diana_tools.py`

### Other components

- **Operator**
- **Web search**
- **LLM service**
- **Google Earth Engine**

## Connections

- Operator → V1 watchdog: starts run
- Operator → V2 watchdog: starts run
- V1 watchdog → V1 agent tools: calls tools
- V1 watchdog → V1 GEE tools: tasks imagery
- V1 watchdog → V1 classifiers: classifies imagery
- V1 watchdog → V1 SAR tools: analyzes SAR
- V1 agent tools → Web search: searches web
- V1 agent tools → LLM service: requests reasoning
- V1 GEE tools → Google Earth Engine: fetches imagery
- V1 watchdog → Run manifests: writes results
- Run manifests → V1 exporter: reads manifests
- V1 exporter → Anomaly data: writes dashboard data
- Operator → V1 API: requests investigation
- V1 API → V1 watchdog: launches run
- V1 API → Anomaly data: serves anomalies
- Operator → V2 watchdog: starts run
- V2 watchdog → V2 agent tools: calls tools
- V2 watchdog → SpatialSAR search: runs spatial scan
- SpatialSAR search → V2 classifiers: classifies chips
- SpatialSAR search → V2 GEE tools: fetches chips
- V2 GEE tools → Google Earth Engine: fetches imagery
- V2 agent tools → Web search: searches web
- V2 agent tools → LLM service: requests reasoning
- V2 watchdog → Run manifests: writes results
- Run manifests → V2 exporter: reads manifests
- V2 exporter → Anomaly data: writes dashboard data
- Operator → V2 API: requests investigation
- V2 API → V2 watchdog: launches run
- V2 API → Anomaly data: serves anomalies
- Watchtower dashboard → V1 API: polls anomalies
- Watchtower dashboard → V2 API: polls anomalies
- Anomaly data → Watchtower dashboard: provides anomaly data
- Operator → Diana hunt walker: starts hunt
- Diana hunt walker → Diana tools: calls helpers
- Diana hunt walker → SpatialSAR search: uses SpatialSAR
- Diana tools → LLM service: requests extraction
- V2 API → Diana hunt walker: launches Diana
- Diana tools → Anomaly data: records findings
- V2 API → Watchtower dashboard: serves Diana status
