Standalone Chronos SDK (@xtnd-dynamics/xtnd-chronos-sdk)
Repository:
XTND-DYNAMICS/xtnd-chronos-sdk
NPM Package:@xtnd-dynamics/xtnd-chronos-sdk
1. Overview
@xtnd-dynamics/xtnd-chronos-sdk is the standalone, zero-dependency client library for human activity telemetry, multi-signal project attribution, and Notion timesheet generation.
It can be integrated into desktop background watchers, CLI tools, Electron apps, or local automation scripts (e.g. scripts reading macOS SQLite databases for Apple Mail, WhatsApp, or Call History).
2. Standalone Storage & Gateway Forwarding
The standalone SDK includes a built-in ChronosStorageManager:
- Buffers normalized evidence events locally in memory.
- Synchronizes unbilled/unsynced events in batches to
https://api.chronos.vantage.xgi.io/v1/events/evidence. - Uses unreferenced timers so Node.js worker and CLI processes can terminate cleanly when idle.
3. Exported API
import {
chronos, // Pre-instantiated global singleton
ChronosClient, // Custom client constructor
ChronosEvidenceCollector, // Multi-source event normalizer
ContextualAttributionEngine, // Multi-signal scoring engine
DurationEstimator, // 15-minute standard block rounding estimator
WorkSessionCoalescer, // Temporal clustering & duplicate filter
ReconciliationEngine, // Notion overlap reconciliation
NotionSyncBridge // Notion API payload generator
} from '@xtnd-dynamics/xtnd-chronos-sdk';
4. Usage Example
import { ChronosClient } from '@xtnd-dynamics/xtnd-chronos-sdk';
const client = new ChronosClient('https://api.chronos.vantage.xgi.io', [
{
projectId: 'proj-planorama',
projectName: 'Planorama',
identifiers: ['ORD-9821'],
keywords: ['webordre'],
},
]);
// Ingest local call event
client.collector.recordPhoneCall({
callId: 'call-44',
timestamp: Date.now() - 1800000,
phoneNumber: '+4512345678',
contactName: 'Jørgen',
durationSeconds: 1320, // 22 minutes -> rounds to 30 min (0.5h)
});
// Reconstruct work session
const sessions = client.reconstructSessions();
// Generate Notion draft
const drafts = client.reconcileNotion([]);
console.log(drafts[0].durationHours); // 0.5