{"_id":"@agentix-e/anomaly-detector-core","_rev":"2-a62daf01d5f3ad40bb32baed6632612e","name":"@agentix-e/anomaly-detector-core","dist-tags":{"latest":"1.0.0"},"versions":{"0.0.0":{"name":"@agentix-e/anomaly-detector-core","version":"0.0.0","keywords":["oidc","trusted-publishing","setup"],"_id":"@agentix-e/anomaly-detector-core@0.0.0","maintainers":[{"name":"lambertyan","email":"853901691@qq.com"}],"dist":{"shasum":"b8657c8c24e93442fa37e4a6068edb206b1e327a","tarball":"https://registry.npmjs.org/@agentix-e/anomaly-detector-core/-/anomaly-detector-core-0.0.0.tgz","fileCount":2,"integrity":"sha512-j3bFbopfxJZDHrJnLz1mhxeR+cquTl4ewajFFmyTB2BGVQLJDoyOHM2Zg+7NJLOQEziFC8RXBsb8HM6PtfOEAA==","signatures":[{"sig":"MEQCIB9pyBzfpnbJ2MmkQvpOg8hAJ7fiWIykubXkTOT+KpRnAiB1CYTcfPYmHhkfDgtKlxhsgyZFP6itnbKo9ii/I/WGXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2091},"_npmUser":{"name":"lambertyan","email":"853901691@qq.com"},"_npmVersion":"11.9.0","description":"OIDC trusted publishing setup package for @agentix-e/anomaly-detector-core","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/anomaly-detector-core_0.0.0_1784462206411_0.9479863804872246","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@agentix-e/anomaly-detector-core","version":"1.0.0","description":"Core anomaly detection engine for time-series — RRCF detection, multi-model forecasting, attribution, and drift detection. Works in Node.js and Browser.","keywords":["time-series","anomaly-detection","forecasting","rrcf","trcf","aiops","monitoring","typescript","agentix-e","wasm","browser"],"license":"MIT","author":{"name":"AgentiX-E"},"repository":{"type":"git","url":"git+https://github.com/AgentiX-E/anomaly-detector.git","directory":"packages/anomaly-detector-core"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","sideEffects":false,"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./detect":{"types":"./dist/detect/index.d.ts","import":"./dist/detect/index.js","require":"./dist/detect/index.cjs"},"./forecast":{"types":"./dist/forecast/index.d.ts","import":"./dist/forecast/index.js","require":"./dist/forecast/index.cjs"},"./calibrate":{"types":"./dist/calibrate/index.d.ts","import":"./dist/calibrate/index.js","require":"./dist/calibrate/index.cjs"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.js","require":"./dist/utils/index.cjs"},"./visualize":{"types":"./dist/visualize/index.d.ts","import":"./dist/visualize/index.js","require":"./dist/visualize/index.cjs"}},"scripts":{"build":"tsup src/index.ts --format esm,cjs --dts --clean","dev":"tsup src/index.ts --format esm,cjs --dts --watch","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","test:browser":"vitest run --config vitest.browser.config.ts","lint":"eslint src/ --ext .ts","typecheck":"tsc --noEmit","bench":"vitest bench","clean":"rm -rf dist coverage"},"dependencies":{"@beshu-tech/trcf-ts":"^1.1.0","@sipemu/anofox-forecast":"^0.15.8"},"devDependencies":{"@playwright/test":"^1.50.0","@types/node":"^22.0.0","eslint":"^9.0.0","tsup":"^8.0.0","typescript":"^5.7.0","vitest":"^3.0.0","@vitest/coverage-v8":"^3.0.0","@vitest/browser":"^3.0.0"},"engines":{"node":">=22.0.0"},"publishConfig":{"access":"public","provenance":true},"gitHead":"17ffce3a04487626a746c97cfde9fad4d96c6604","_id":"@agentix-e/anomaly-detector-core@1.0.0","bugs":{"url":"https://github.com/AgentiX-E/anomaly-detector/issues"},"homepage":"https://github.com/AgentiX-E/anomaly-detector#readme","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-fPd1yleRcfUzSXalInrG41lTIEpRwwP4rTR3ikT9RDwOAfDHZVdnwRlkIU1eUjWgTZTAwCr7ywuceEj1Lu/opQ==","shasum":"ccc971bfa2af2f913542389a2790fc9427a604f2","tarball":"https://registry.npmjs.org/@agentix-e/anomaly-detector-core/-/anomaly-detector-core-1.0.0.tgz","fileCount":9,"unpackedSize":86387,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agentix-e%2fanomaly-detector-core@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIF7vQWF7J6uA4O3KgdCoEFpCRDCfOrY2siisAJEAJHTOAiAEVyo3D10CVvH+nxT2kNaFDs54Jb7SnnJpDKjE9YhC0Q=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:88bea009-66f9-43cc-9720-f8e949c23c58"}},"directories":{},"maintainers":[{"name":"lambertyan","email":"853901691@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/anomaly-detector-core_1.0.0_1784477274416_0.513858408831934"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-19T11:56:46.219Z","modified":"2026-07-19T16:07:54.892Z","0.0.0":"2026-07-19T11:56:46.548Z","1.0.0":"2026-07-19T16:07:54.572Z"},"keywords":["time-series","anomaly-detection","forecasting","rrcf","trcf","aiops","monitoring","typescript","agentix-e","wasm","browser"],"description":"Core anomaly detection engine for time-series — RRCF detection, multi-model forecasting, attribution, and drift detection. Works in Node.js and Browser.","maintainers":[{"name":"lambertyan","email":"853901691@qq.com"}],"readme":"# @agentix-e/anomaly-detector-core\n\n> Core anomaly detection engine for time-series — RRCF detection, multi-model forecasting, attribution, drift detection, and framework-agnostic visualization. Dual-runtime (Node.js + Browser).\n\n[![npm](https://img.shields.io/npm/v/@agentix-e/anomaly-detector-core?color=blue)](https://www.npmjs.com/package/@agentix-e/anomaly-detector-core)\n[![CI](https://github.com/AgentiX-E/anomaly-detector/actions/workflows/ci.yml/badge.svg)](https://github.com/AgentiX-E/anomaly-detector/actions/workflows/ci.yml)\n[![Coverage](https://img.shields.io/badge/coverage-report-blue)](https://agentix-e.github.io/anomaly-detector/coverage/)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/AgentiX-E/anomaly-detector/blob/master/LICENSE)\n\n## Overview\n\n`@agentix-e/anomaly-detector-core` is the engine powering the anomaly-detector\necosystem. It provides:\n\n- **Streaming anomaly detection** via RRCF (`TrcfDetector`) — sub-millisecond per point\n- **Multi-model forecasting** via anofox-forecast (40+ models: ARIMA, ETS, Theta, TBATS, GARCH, VAR)\n- **Auto model selection** based on data characteristics (trend, seasonality, intermittency)\n- **Three calibration modes**: Forecast-Guided, Anomaly-Guided, Joint Confidence\n- **Leave-one-out Shapley attribution** for multivariate anomaly root cause analysis\n- **Concept drift detection** via ADWIN / KSWIN with adaptive threshold adjustment\n- **Framework-agnostic visualization** output (`ChartData`) compatible with any charting library\n- **DI-ready architecture** — inject custom detectors, forecasters, or calibrators via `createDetector(config)`\n\nAll components are platform-agnostic. Platform-specific adapters (TimesFM for Node.js / Browser)\nlive in the corresponding entry packages.\n\n## Installation\n\n```bash\nnpm install @agentix-e/anomaly-detector-core\n```\n\nRequires **Node.js >= 22** or a modern browser with WebAssembly support.\n\n## Quick Start\n\n```ts\nimport { createDetector } from '@agentix-e/anomaly-detector-core'\n\n// Zero-config startup — auto-selects the best forecaster\nconst detector = createDetector()\n\nconst history = [\n  { value: 50, timestamp: Date.now() - 60000 },\n  { value: 51, timestamp: Date.now() - 30000 },\n]\nconst current = { value: 95, timestamp: Date.now() }\n\nconst result = await detector.analyze(current, history)\n\nconsole.log(result.jointConfidence)  // 0.0–1.0\nconsole.log(result.attribution)      // per-dimension contribution\nconsole.log(result.drift)            // drift detection info\nconsole.log(result.calibration)      // calibration details\n\nif (result.jointConfidence > 0.95) {\n  // Your alert logic — library outputs confidence, you decide the threshold\n}\n```\n\n### With Custom Configuration\n\n```ts\nimport { createDetector } from '@agentix-e/anomaly-detector-core'\n\nconst detector = createDetector({\n  // Disable auto model selection, pin a specific forecaster\n  forecaster: {\n    type: 'theta',\n    enableAutoSelect: false,\n  },\n  // Tune calibration weights\n  calibration: {\n    weights: { grade: 0.5, spread: 0.2, hitRate: 0.2, drift: 0.1 },\n  },\n  // Hook into analysis lifecycle\n  hooks: {\n    onAnomaly: (point) => console.warn('Anomaly detected:', point),\n  },\n})\n```\n\n### Multivariate Detection\n\n```ts\nconst detector = createDetector()\n\n// Data points with multiple dimensions\nconst point = {\n  value: 100,\n  timestamp: Date.now(),\n  dimensions: { cpu: 90, memory: 85, disk_io: 40 },\n}\n\nconst result = await detector.analyze(point, history)\n// result.attribution → [{ dimension: 'cpu', contribution: 0.72 }, ...]\n```\n\n### Visualization Output\n\n```ts\nimport { buildChartData } from '@agentix-e/anomaly-detector-core/visualize'\nimport { classifyByLevels } from '@agentix-e/anomaly-detector-core/utils'\n\n// Produce framework-agnostic chart data\nconst chart = buildChartData(analyzedPoints)\n// chart.series, chart.annotations, chart.axes — universal format\n// Map to your preferred charting library (ECharts, Chart.js, D3, etc.)\n\n// Map jointConfidence to severity levels\nconst { level } = classifyByLevels(result.jointConfidence, [\n  [0.7, 'warning'],\n  [0.9, 'critical'],\n])\n```\n\n## API Documentation\n\n### Key Exports\n\n| Export | Kind | Description |\n|--------|------|-------------|\n| `createDetector(config?)` | function | Factory — returns an `IAnomalyDetector` instance |\n| `TrcfDetector` | class | RRCF-based streaming anomaly detector |\n| `AnofoxForecaster` | class | Node.js forecasting adapter (anofox-forecast WASM) |\n| `BrowserAnofoxForecaster` | class | Browser forecasting adapter |\n| `ForecastGuidedCalibrator` | class | Calibrates scores using forecast residuals |\n| `AnomalyGuidedCalibrator` | class | Calibrates scores using detection confidence |\n| `JointConfidenceCalibrator` | class | Bayesian fusion of detection + forecast signals |\n| `DimensionAttributor` | class | Leave-one-out Shapley attribution |\n| `DriftDetector` | class | ADWIN / KSWIN concept drift detection |\n| `AutoModelSelector` | class | Selects best forecasting model from data characteristics |\n| `buildChartData(points)` | function | Produces `ChartData` for any visualization library |\n| `buildSparkline(result)` | function | Compact sparkline for dashboard cards |\n| `classifyByLevels(confidence, levels)` | function | Maps `jointConfidence` to N-level severity |\n| `suppressFlapping(history)` | function | Detects alert fatigue patterns |\n\n### Subpath Exports\n\n```\n@agentix-e/anomaly-detector-core          → createDetector, types\n@agentix-e/anomaly-detector-core/detect   → TrcfDetector, DimensionAttributor, DriftDetector\n@agentix-e/anomaly-detector-core/forecast → AnofoxForecaster, AutoModelSelector\n@agentix-e/anomaly-detector-core/calibrate → 3 calibrator implementations\n@agentix-e/anomaly-detector-core/utils    → classifyByLevels, suppressFlapping\n@agentix-e/anomaly-detector-core/visualize → buildChartData, buildSparkline\n```\n\n### Core Interfaces (DI Tokens)\n\n```ts\ninterface IAnomalyDetector {\n  analyze(point: DataPoint, context: DataPoint[]): Promise<AnalyzedPoint>\n  getState(): AnalyzerState\n  setState(state: AnalyzerState): void\n  reset(): void\n}\n\ninterface IDetector {\n  detect(point: DataPoint, context: DataPoint[]): DetectionResult\n}\n\ninterface IForecaster {\n  forecast(context: DataPoint[], horizon?: number): Promise<ForecastResult>\n}\n\ninterface ICalibrator {\n  readonly mode: CalibrationMode\n  calibrate(detection: DetectionResult, forecast: ForecastResult, currentPoint: DataPoint): CalibrationResult\n}\n```\n\nInject custom implementations via `createDetector({ _customForecaster, calibration })`.\n\n## License\n\nMIT\n","readmeFilename":"README.md","homepage":"https://github.com/AgentiX-E/anomaly-detector#readme","repository":{"type":"git","url":"git+https://github.com/AgentiX-E/anomaly-detector.git","directory":"packages/anomaly-detector-core"},"author":{"name":"AgentiX-E"},"bugs":{"url":"https://github.com/AgentiX-E/anomaly-detector/issues"},"license":"MIT"}