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

linkyun-infiniti-agent

v0.8.6

Published

LinkYun Infiniti Agent — long-running CLI agent (Node.js, React + Ink TUI)

Readme

Infiniti Agent

项目级 AI 智能体框架。每个目录启动的 agent 都可以拥有独立的 skills、memory 和 session,天然支持多智能体协同。

支持 Anthropic (Claude) / OpenAI / Gemini 等多模型,可配置多个 LLM profile 用于不同场景。

快速开始

# 安装
npm install -g linkyun-infiniti-agent

# 首次配置(交互式,支持一次配置多个 LLM profile)
infiniti-agent init

# 在项目目录初始化独立实例
cd your-project
infiniti-agent migrate

# 开始对话
infiniti-agent

本地全栈:大模型与 TTS

要完整跑通 对话(LLM)+ 语音(TTS),先在兄弟 service 仓库启动本地模型服务,然后在 ~/.infiniti-agent/config.json 或项目下 .infiniti-agent/config.jsoninfiniti-agent migrate 后)里配置 service URL。

本仓库现在定位为 Agent 编排层:CLI / TUI / LiveUI / 会话 / LLM 调度 / TTS client / ASR。重模型服务建议放在兄弟仓库独立运行:

  • ../infiniti-llm-service:Ollama / vLLM 启动、健康检查、延迟测试。
  • ../infiniti-tts-service:VoxCPM2 / MOSS-TTS-Nano ONNX 安装、模型下载、HTTP 服务。

主仓只需要知道这些服务的 URL。配置片段见 docs/services.fragment.json;仓库内旧 TTS 脚本会暂时保留用于兼容,新的开发和部署优先使用独立 service 仓库。

大模型(LLM)

本项目的 LLM 走 OpenAI 兼容 HTTP API(provider: "openai")。本机服务由 ../infiniti-llm-service 启动;主仓只配置 baseUrlmodelapiKey

常用 service URL:

  • Ollama:http://127.0.0.1:11434/v1
  • vLLM:http://127.0.0.1:8000/v1
  • LM Studio 等:使用工具界面提供的 OpenAI-compatible baseUrl

示例:

{
  "llm": {
    "provider": "openai",
    "baseUrl": "http://127.0.0.1:11434/v1",
    "model": "qwen2.5:7b",
    "apiKey": "ollama",
    "disableTools": true
  }
}

TTS

TTS 服务由 ../infiniti-tts-service 独立启动;主仓只配置 providerbaseUrl,以及声音参数。

常用 service URL:

  • VoxCPM2:http://127.0.0.1:8810
  • MOSS-TTS-Nano ONNX:http://127.0.0.1:18083

示例:

{
  "tts": {
    "provider": "voxcpm",
    "baseUrl": "http://127.0.0.1:8810",
    "controlInstruction": "年轻女性,温柔自然",
    "amplitudeNormalize": "rms"
  }
}

命令一览

| 命令 | 说明 | |------|------| | infiniti-agent | 进入交互对话(TUI) | | infiniti-agent chat | 同上 | | infiniti-agent cli <prompt> | 非交互执行一轮,结果输出到 stdout | | infiniti-agent init | 配置 LLM(写入全局 ~/.infiniti-agent/config.json) | | infiniti-agent migrate | 将全局配置复制到当前目录 .infiniti-agent/,实现项目级独立 | | infiniti-agent upgrade | 升级旧版 config.json 到最新格式 | | infiniti-agent export <file> | 导出当前 agent layout 为 zip 格式 .agent 文件 | | infiniti-agent import <file> | 从 .agent 文件导入 agent layout,已有 layout 时询问是否覆盖 | | infiniti-agent sync | 登录 LinkYun,选择 Agent,并按时间戳双向同步 .agent 归档 | | infiniti-agent link | 从 SOUL.md 提取邮件配置,生成 mail-poller.sh 邮件轮询守护脚本 | | infiniti-agent skill add <source> | 安装 Skill(支持 owner/repo、git URL、本地路径) | | infiniti-agent skill list | 列出当前项目已安装的 Skills | | infiniti-agent live | LiveUI:WebSocket + Electron 透明窗 + TUI(需先 npm run build虚拟人窗口依赖本包内的 electron 模块,全局安装后若看不到窗口,在包安装目录执行一次 npm install 或重装本包以拉取 optional 依赖) |

Live 语音输入默认是 按住空格说话:点击麦克风按钮启用后,长按空格开始录音,松开发送 ASR 识别。若要恢复旧版自动 VAD / 自动打断模式,启动时加 --autoinfiniti-agent live --auto

Live 底部文本框会保留最近输入历史;焦点在文本框内且斜杠补全未打开时,可用 ↑ / ↓ 在历史输入中导航。

LiveUI 窗口为无边框透明窗:在底部深色对话条上,除按钮与输入框以外的区域(条的外沿与留白)可拖动窗口;人物区域不再弹出单独拖动面板。

Electron 窗口(默认):无边框、透明、置顶叠层。需要标题栏 + 视图 菜单(重新加载、开发者工具、缩放等)时:INFINITI_LIVEUI_DEBUG_WINDOW=1。启动时自动打开 DevTools(独立窗口):INFINITI_LIVEUI_DEVTOOLS=1infiniti-agent live--debug 时也会自动设置 DevTools。

渲染依赖 Live2D Cubism Core:已内置在 liveui/public/live2dcubismcore.min.js(构建时复制到 dist/),index.html相对路径 ./live2dcubismcore.min.js 加载,避免 Electron file:// 下绝对路径 /xxx.js 指向磁盘根目录导致加载失败。模型入口为配置解析出的 file: 路径(.model3.json)。

LiveUI / Live2D(config.json 顶层 liveUi,对齐 Open-LLM-VTuber 的目录与 model_dict.json):

  • live2dModelsDir:模型根目录(如 ./live2d-models,其下为 模型名/runtime/*.model3.json)。
  • live2dModelDict:模型清单 JSON 路径,默认 ./model_dict.json
  • live2dModelName:清单里某条目的 name(与 VTuber character_config.live2d_model_name 一致)。
  • live2dModel3Json:若已离线下载,可直接写 .model3.json 路径(优先于 dict+name)。
  • port:WebSocket 端口;也可用 infiniti-agent live -p 9000 或环境变量 INFINITI_LIVEUI_PORT 覆盖。
  • subconsciousHeartbeatMs:subconscious-agent heartbeat 间隔,单位毫秒;默认 60000,范围 50003600000
  • figureZoom:LiveUI 虚拟人缩放比例,范围 0.41.5infiniti-agent live --zoom 可临时覆盖。
  • renderer:角色渲染方式,可选 live2dspritereal2d。未设置时保持旧逻辑:有 spriteExpressions.dir 则用 sprite,否则用 live2d
  • spriteExpressions.dirsprite 模式使用含 exp_01.pngexp_08.png 的目录(如 ./live2d-models/luna/expression);real2d 模式按 /real2d 参考代码使用含 exp01.pngexp06.png、可选 exp_open.png 的目录(如 ./live2d-models/jess/expression2d),并通过 MediaPipe landmarks 做实时 2D 变形与口型驱动。

一键写入默认 liveUi(合并到项目的 .infiniti-agent/config.json,并在缺少 ./model_dict.json 时从包内示例复制):

# 方式 A:在已 migrate 的项目根执行(把脚本路径换成你的 infiniti-agent 克隆目录)
cd ~/your-project
node ~/Dev/infiniti-agent/infiniti-agent/scripts/merge-liveui-config.mjs

# 方式 B:在 infiniti-agent 源码根执行,并传入项目路径
cd ~/Dev/infiniti-agent/infiniti-agent
npm run setup:liveui -- ~/your-project

将 Open-LLM-VTuber 的 live2d-models 文件夹拷到项目根下的 live2d-models/,与 model_dict.json 中的 url 一致即可校验通过。

TTS(config.tts:本仓库只作为 TTS client 调用外部 service。VoxCPM2、MOSS-TTS-Nano ONNX 的安装、模型下载和启动见 ../infiniti-tts-service;这里仅配置 "provider""baseUrl"。VoxCPM2 可选 referenceAudioPathcontrolInstructionamplitudeNormalizerms / peak / none,默认 rms)等字段,详见 src/config/types.tsVoxcpmTtsConfig

Seedance 视频(config.seedance/video <提示词>/seedance <提示词> 会调用火山方舟异步视频任务,完成后下载到本地 .infiniti-agent/inbox/assets/ 并写入你的邮箱。若当前消息带有 Live 拍照图片或用户上传图片,会自动作为参考图传给视频 API;LLM 也可通过内置工具 seedance_video 发起同样的异步任务。常用配置:

{
  "seedance": {
    "provider": "volcengine",
    "baseUrl": "https://ark.cn-beijing.volces.com",
    "apiKey": "YOUR_ARK_API_KEY",
    "model": "doubao-seedance-2-0-260128",
    "ratio": "16:9",
    "duration": 5,
    "resolution": "720p",
    "generateAudio": true,
    "watermark": false
  }
}

常用选项:

infiniti-agent cli 查询天气 --debug              # 输出调试日志到 stderr
infiniti-agent cli 查询天气 --disable-thinking    # 禁用深度思考模式
infiniti-agent --dangerously-skip-permissions      # 跳过工具安全评估

项目级独立运行

每个目录下的 .infiniti-agent/ 是该项目的独立数据空间:

your-project/
├── .infiniti-agent/
│   ├── config.json      # 项目级配置(不存在则 fallback 到全局)
│   ├── session.json     # 对话历史
│   ├── memory.md        # 长期记忆
│   ├── skills/          # 已安装的 Skills
│   └── error.log        # 错误日志
├── SOUL.md              # Agent 人格定义(可选)
├── INFINITI.md           # 项目说明 / 指令(可选)
└── ...

不同目录的 agent 完全隔离——可以各自安装不同的 skills,拥有不同的 memory 和对话历史。

可以把当前目录的 agent 打包迁移到另一个目录:

infiniti-agent export jess.agent
cd ../another-project
infiniti-agent import ../jess.agent

.agent 文件本质上是 zip,包含 .infiniti-agent/ 以及 SOUL.mdINFINITI.mdCLAUDE.md 等 agent 提示文件。若目标目录已存在 agent layout,导入时会询问是否覆盖;自动化脚本可使用 infiniti-agent import jess.agent --force

infiniti-agent sync 会把 LinkYun 登录信息、workspace 和选中的 Agent code 保存在当前目录 .env.local,下次自动复用;该文件不会被 export 打进 .agent,也默认不提交 Git。手动同步时会先拉取 Agent 的 SOUL / 角色素材,再查看服务器 .agent 版本:如果服务器归档比本地 .infiniti-agent/session.json 更新,就下载并覆盖当前 layout;如果服务器没有归档或本地 session 更新,就导出并上传本地 .agent。可用 --pull--push 强制方向,--login 强制重新登录,--agent <code> 切换绑定的 LinkYun Agent。

当当前目录已有 .env.local 绑定 Agent 时,infiniti-agent / chat / live / cli 启动前会自动做一次 pull-only 同步:只在服务器 .agent 更新时下载,不会在启动时自动上传旧本地状态;正常退出时会自动 push 一次。覆盖导入前会把 SOUL.mdsession.jsonmemory.jsonsubconscious.jsonschedules.jsonsessions.dbknowledge.db 等关键文件备份到 .infiniti-agent/backups/sync/(保留最近 5 份),每次同步会追加记录到 .infiniti-agent/sync-history.jsonl。临时跳过自动同步可用 INFINITI_AGENT_SKIP_STARTUP_SYNC=1 infiniti-agent

自定义 Agent 行为

在项目根目录创建以下文件即可定制 agent:

  • SOUL.md — 定义 agent 的人格、角色和行为准则
  • INFINITI.md — 项目专属指令(也兼容 CLAUDE.md

示例 SOUL.md

你是一个专注于 Python 后端开发的助手。
偏好使用 FastAPI 和 SQLAlchemy。
回复简洁,优先给出可运行的代码。

多 LLM Profile

config.json 中配置多个 LLM,用于不同场景:

{
  "version": 1,
  "llm": {
    "default": "main",
    "metaAgentProfile": "gate",
    "subconsciousProfile": "dream",
    "profiles": {
      "main":    { "provider": "anthropic", "baseUrl": "https://api.anthropic.com", "model": "claude-sonnet-4-20250514", "apiKey": "sk-..." },
      "gate":    { "provider": "gemini",    "baseUrl": "https://generativelanguage.googleapis.com/v1beta", "model": "gemini-2.0-flash", "apiKey": "AIza..." },
      "compact": { "provider": "openai",    "baseUrl": "https://api.openai.com/v1", "model": "gpt-4.1-mini", "apiKey": "sk-..." }
    }
  }
}

| Profile | 用途 | |---------|------| | main(default) | 主对话模型 | | gate | 工具安全评估(meta-agent,可用便宜快速的模型) | | compact | 会话压缩摘要 |

llm.metaAgentProfile 可单独指定 meta-agent / 工具安全评估使用哪个 provider profile;未配置时默认尝试 gate。如果该 profile 连接或请求失败,会自动回退到当前默认 LLM 再评估。

llm.subconsciousProfile 可单独指定 subconscious-agent / 心理状态引擎使用哪个 provider profile;未配置时默认使用当前主 LLM。

旧格式(平铺 provider/model/apiKey)仍完全兼容,运行 infiniti-agent upgrade 即可自动升级。

Skills

Skills 是可插拔的能力扩展,本质是 SKILL.md 文件注入到系统提示中:

# 从 GitHub 安装
infiniti-agent skill add owner/repo

# 从本地路径安装
infiniti-agent skill add ./my-skill

# 查看已安装
infiniti-agent skill list

你也可以直接在 .infiniti-agent/skills/my-skill/SKILL.md 中手写 skill。

内置工具

Agent 开箱即用以下工具(无需额外配置):

  • read_file / write_file / str_replace — 文件读写与编辑
  • list_directory / glob_files / grep_files — 目录浏览与搜索
  • bash — 执行 shell 命令
  • http_request — HTTP 请求
  • update_memory — 写入长期记忆

还可以通过 MCP 服务器扩展更多工具。

邮件轮询守护(link)

infiniti-agent link 从当前目录的 SOUL.md 中自动提取邮件相关配置(Agent 地址、Agent ID、API Key),生成一个开箱即用的 mail-poller.sh 守护脚本。

前提: SOUL.md 中需包含以下信息(格式不限,命令会自动识别):

  • Agent 地址:[email protected]
  • Agent ID:UUID 格式(如 30bc8485-c1af-4fad-b83b-5915c8673632
  • API Key:以 amk_ 开头的密钥

使用方式:

# 生成 mail-poller.sh
infiniti-agent link

# 前台运行(Ctrl-C 停止)
./mail-poller.sh

# 后台运行
nohup ./mail-poller.sh &

# 仅检查一次后退出
./mail-poller.sh --once

脚本每 60 秒检查一次 Mail Broker 收件箱,发现未读邮件时自动调用 infiniti-agent cli 处理。运行日志写入 mail-poller.log,终端仅显示单行状态。

无限循环运行示例

除了 link 生成的邮件轮询脚本,你也可以用最简单的方式让 agent 持续运行——cli 模式 + shell 循环:

#!/bin/bash
# loop-agent.sh — 每 60 秒执行一轮 agent 任务
while true; do
  infiniti-agent cli "检查 inbox/ 目录下的新文件,处理后移到 done/"
  sleep 60
done

或用 cron 定时触发:

# crontab -e
*/5 * * * * cd /path/to/project && infiniti-agent cli "检查并处理待办任务"

配合 SOUL.md 定义角色 + Skills 扩展能力,每个目录都可以成为一个独立的自动化智能体。

会话管理

  • 对话历史自动保存在 .infiniti-agent/session.json
  • 配置 compaction.autoThresholdTokens 可自动压缩过长的对话:
{
  "compaction": {
    "autoThresholdTokens": 30000
  }
}
  • TUI 中输入 /clear 清空当前会话,/compact 手动触发压缩

开发

git clone https://github.com/stelee410/infiniti-agent.git
cd infiniti-agent
npm install
npm run dev                          # 启动 TUI(开发模式)
npm run dev -- cli 你好               # CLI 模式
npm run build && npm link            # 全局安装本地版本

发布到 npm

npm run build
npm publish              # 包名: linkyun-infiniti-agent,命令: infiniti-agent

协议

package.json 中的 license 字段。