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

@mi-gpt/engine

v1.2.1

Published

MiGPT 核心模块

Readme

@mi-gpt/engine

MiGPT 核心模块

实现 Speaker

import type { ISpeaker } from "@mi-gpt/engine/base";

class MySpeaker implements ISpeaker {
  play({ url, text }) {
    // todo 自定义播放音频/文字实现
  }

  abortXiaoAI() {
    // todo 自定义打断小爱回复实现
  }

  // todo 也可以添加更多能力,比如播放暂停等
}

实现 Engine

import { MiGPTEngine } from "@mi-gpt/engine/index";

class MyEngine extends MiGPTEngine {
  config: MyConfig = {};

  // todo 自定义 speaker 实现
  speaker = new MySpeaker();

  async askAI(msg: IMessage): Promise<IReply> {
    // todo 自定义消息回复逻辑
    return { text: "hello " + msg.text };
  }

  async start(config?: MyConfig) {
    await super.start(config);

    // todo 自定义消息拉取逻辑
    while (this.status === "running") {
      this.onMessage({
        id: "123456",
        sender: "user",
        text: "你好",
        timestamp: Date.now(),
      });
      await sleep(100);
    }
  }
}

使用 Engine

async function main() {
  // 创建
  const kMyEngine = new MyEngine();

  // 启动
  await kMyEngine.start({
    async onMessage(engine, { text }) {
      if (text.startsWith("你好")) {
        // 回复文字
        return { text: "你好,很高兴认识你!" };
      }

      if (text.startsWith("播放音乐")) {
        // 也可以回复音频链接
        return { url: "https://example.com/hello.mp3" };
      }

      // 也可以直接调用 engine 上提供的各种能力
      if (text.startsWith("你是谁")) {
        // 打断原来小爱的回复
        await engine.speaker.abortXiaoAI();
        // 播放文字
        await engine.speaker.play({ text: "猜猜看" });
        // 播放音频链接
        await engine.speaker.play({ url: "https://example.com/hello.mp3" });

        // 告诉 Engine 已经处理过这条消息了,不再使用默认的 AI 回复
        return { handled: true };
      }
    },
  });

  // 退出
  process.exit(0);
}

main();