@thesight/core
v0.7.0
Published
Core engine for Sight — Solana log parser, CPI tree builder, Anchor IDL resolver, and per-CPI compute-unit attribution. Used by the Sight OpenTelemetry SDK and profiler CLI.
Maintainers
Readme
@thesight/core
Core engine for Sight — the OpenTelemetry observability layer for Solana.
This package contains the primitives every other Sight package depends on: a Solana program-log parser that reconstructs the full CPI call tree, an Anchor IDL resolver for decoding program names and custom errors, and compute-unit attribution that breaks down where each unit was spent per CPI frame. Pure functions, no I/O, runs in any Node or edge runtime.
Most users don't import this directly — you want
@thesight/sdk instead,
which wraps this engine with OTel spans and an ingest exporter.
Install
pnpm add @thesight/coreWhat's inside
import {
parseLogs, // Solana program logs → CPI call tree + CU attribution
IdlResolver, // Registry-first Anchor IDL + error decoder
enrichTree, // Hydrate a CPI tree with program + instruction names
toFlamegraph, // Flatten a CPI tree into flamegraph items
flatAttributions, // Per-program CU percentages
cuBudgetHealth, // ok | warn | danger for a given CU usage
resolveEndpoint, // Solana cluster → {rpc, ws} helper
CONFIG_DEFAULTS, // Default runtime config: plan tiers, stablecoins, TTLs
} from '@thesight/core';Parsing a transaction
import { parseLogs, IdlResolver, enrichTree } from '@thesight/core';
const { cpiTree, cuAttributions } = parseLogs({ logs });
// Register an IDL explicitly — Sight never guesses program names from chain
const resolver = new IdlResolver();
resolver.register('YourProgramIdHere', myAnchorIdl);
await enrichTree(cpiTree, resolver);
// cpiTree.roots now have programName, instructionName, and per-CPI cuConsumedWhy registry-first IDLs
Many Solana programs don't upload IDLs on-chain, and the ones that do
sometimes drift from their source. Sight never fabricates program names
— you register() what you know, and unknown programs surface honestly
as short-ids in the UI rather than lying to you.
The on-chain Anchor PDA fetch path exists for the profiler CLI's
opt-in discovery mode, but it's gated behind { allowOnChainFetch: true }
and off by default.
License
MIT — see LICENSE.
