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 🙏

© 2025 – Pkg Stats / Ryan Hefner

simple-assistant

v1.0.0

Published

A flexible, event-driven assistant system for frontend applications with support for message queuing, chaining, priority handling, and context-based triggers

Readme

Simple Assistant

npm version License: MIT GitHub

A flexible, event-driven assistant system for frontend applications with support for message queuing, chaining, priority handling, and context-based triggers.

📦 Installation

npm install simple-assistant

📚 Documentation

For complete documentation, API reference, and examples, see the library README.

✨ Features

  • 🎯 Priority Queue System - High-priority messages can interrupt or queue behind persistent messages
  • ⛓️ Message Chaining - Display multiple related messages sequentially
  • 🎮 Context-Aware Triggers - Execute scripts based on application state conditions
  • ⏱️ Smart Auto-Close - Configurable auto-close with timer management
  • 🔒 Persistent Messages - Mark critical messages as non-interruptible
  • 🔄 Script Lifecycle Hooks - Full control over script execution
  • 📊 Execution History - Track and analyze script execution patterns
  • 🛠️ TypeScript First - Complete type safety

🚀 Quick Start

import { Assistant } from 'simple-assistant'

const assistant = new Assistant({
  initialContext: { isLoggedIn: false }
})

assistant.on('message:triggered', (message, script, messageIndex) => {
  console.log(message.content)
})

assistant.registerScript({
  id: 'welcome',
  name: 'Welcome Message',
  messages: [{ type: 'text', content: 'Welcome!' }],
  trigger: { type: 'immediate' }
})

assistant.start()

🔧 Development

# Install dependencies
pnpm install

# Build library
pnpm build

# Test package locally
npm pack

📖 Key Concepts

Scripts

Scripts define what messages to display, when to display them, and how they behave:

{
  id: 'cart-reminder',
  priority: 10,
  messages: [
    { type: 'text', content: '🛒 Complete your purchase!' }
  ],
  persistent: true,  // Cannot be interrupted
  autoClose: false,  // Must be manually closed
  displayDuration: 5000
}

Message Chaining

Display multiple messages sequentially:

{
  id: 'tutorial',
  messages: [
    { type: 'text', content: 'Step 1: ...' },
    { type: 'text', content: 'Step 2: ...' },
    { type: 'text', content: 'Step 3: ...' }
  ],
  displayDuration: 4000  // Each message shows for 4s
}

Context-Based Triggers

React to application state changes:

{
  id: 'login-prompt',
  trigger: { type: 'conditional' },
  triggerConditions: {
    operator: 'equals',
    contextKey: 'isLoggedIn',
    expectedValue: false,
    evaluate: (ctx) => ctx.get('isLoggedIn') === false
  }
}

🏗️ Project Structure

simple-assistant/
├── src/assistant/         # 📦 Library source code
│   ├── core/             # Core classes (Assistant, RuntimeProcessor, ScriptManager)
│   ├── interfaces/       # TypeScript interfaces
│   ├── models/           # Data models
│   ├── types/            # Type definitions
│   ├── utils/            # Utilities (EventEmitter, Logger)
│   ├── index.ts          # Main entry point
│   └── README.md         # Complete documentation
├── dist/                 # Built library (after npm run build)
├── vite.lib.config.ts    # Library build configuration
├── tsconfig.lib.json     # TypeScript configuration
└── package.json

📄 License

MIT © [Your Name]

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

🔗 Links