npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@modellahja/vivo

v1.6.0

Published

LAHJA Vivo realtime audio/video conversation SDK with turn-taking priority, resilient session recovery, resumable chatHistory, semantic keyPass, streaming text/audio and interview UI.

Readme

@modellahja/vivo

Professional browser-first SDK for realtime AI voice and video conversations.

Current package version: 1.6.0

Vivo combines realtime media, streaming transcripts/audio, resumable conversation history, semantic interaction routing, turn-taking control, session recovery, a provider adapter layer, and a built-in conversation/interview UI.

Install

npm install @modellahja/[email protected]

Documentation

Start here:

Core conversation features:

UI and application integration:

Engineering references:

Minimal example

import {
  createVivoConversation,
  GoogleGenAIAdapter
} from '@modellahja/vivo';

const vivo = createVivoConversation({
  mode: 'video',
  adapter: new GoogleGenAIAdapter({ client: googleClient }),

  context: {
    language: 'ar-SA',
    dialect: 'najdi',
    speaker: {
      role: 'assistant',
      voice: 'Aoede'
    }
  },

  turnTaking: {
    priority: 'balanced'
  },

  sessionPersistence: {
    enabled: true,
    storage: 'localStorage'
  }
});

vivo.on('assistant.text.final', ({ text }) => {
  console.log('Assistant:', text);
});

vivo.on('history.changed', ({ chatHistory }) => {
  console.log('History:', chatHistory);
});

if (vivo.session.hasRecovery()) {
  await vivo.session.restore();
} else {
  await vivo.session.start();
}

Built-in UI

<div id="vivo"></div>
await vivo.showVivo({
  container: '#vivo',
  variant: 'conversation',
  title: 'Vivo',
  showTranscript: true,
  showLevels: true,
  showTimer: true
});

For interviews:

await vivo.showVivo({
  container: '#vivo',
  variant: 'interview',
  interview: {
    position: 'Senior Backend Engineer',
    language: 'ar-SA',
    dialect: 'najdi',
    durationMinutes: 30,
    keywords: ['.NET', 'APIs', 'architecture']
  }
});

Core concepts

| Concept | Purpose | |---|---| | context | Prompt, language, dialect, keywords, speaker, interview metadata | | chatHistory | Ordered conversation interactions used for resume/continuation | | keyPass | Semantic { key, prompt } rules that emit application events | | turnTaking | Controls who owns the speaking floor and interruption behavior | | sessionPersistence | Saves a recovery pointer in a cookie and the full checkpoint in Web Storage | | reconnect | Reconnects transient provider/network failures without ending the logical conversation | | streaming | Emits partial/final text and audio events | | adapter | Connects Vivo to a realtime AI provider |

Important recovery design

Vivo does not store the full conversation in a cookie. Cookies are intentionally small. The SDK stores only a compact recovery pointer in the cookie and stores the full recovery checkpoint in localStorage or sessionStorage.

The checkpoint includes session/conversation identifiers, chatHistory, current partial text, KeyPass configuration, turn-taking state, floor ownership, and stream sequence. Raw long-form audio is not persisted in cookies or Web Storage.

See Session Recovery.

Package layout

@modellahja/vivo
├─ src/                 SDK source
├─ dist/                compiled package
├─ docs/                feature documentation
├─ examples/            usage examples
├─ scripts/             verification/regression scripts
├─ README.md            main entry point
└─ package.json

Development verification

npm install
npm run typecheck
npm run build
npm run test:regression
npm run verify:publish
npm pack

License

MIT