Skip to content

Code layout

One repository holds a uv workspace with two Python packages.

packages/plantgraph/      the plant graph schema (depends only on Pydantic)
src/penguineer/
  core/                   command registry, RunContext, run records, errors
  cli/                    the Typer app generated from the registry, the CLI reference renderer
  commands/               one module per command: Params, Result, run()
  connectors/             AVEVA PI through the PI Web API; Parquet, CSV and Delta tables on
                          S3, GCS, Azure or disk
  io/                     historian, LIMS, plant graph, DEXPI P&ID, Homeostat Live and scenario-bundle readers
  engines/                deterministic engines: data health, dead times, alignment, lot windows,
                          group comparison (Welch), tests, investigate,
                          and the fitted calibration (calibration.json)
  bench/                  the homeostat bench plant and its faults, bundle export, scoring
  agent/                  the investigation agent: tool loop, provider adapter, method, findings,
                          document search, commands as tools
  llm/                    optional LLM providers, response cache, versioned prompts
  report/                 report models, grounded summary, evidence plots, HTML and Markdown templates
  graph/                  graph check and graph draft (tag list and P&ID)
tests/                    unit, CLI, round-trip property, schema snapshot and Homeostat Live tests
examples/demo/            a small plant with injected data faults
examples/offspec/         a small plant with an off-spec lot and a known root cause
scripts/                  demo data, Homeostat Live download, CLI reference generator, calibration fit
docs/                     this site