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

@zhin.js/agent

v0.0.13

Published

Zhin AI Agent — session, ZhinAgent, init; composes @zhin.js/core providers and tools

Downloads

2,031

Readme

@zhin.js/agent

Zhin AI Agent 组合层:在 @zhin.js/core 的类型与 Provider 之上,提供会话管理、Agent 执行循环、ZhinAgent 与框架挂载(init)。

功能特性

  • 🤖 Agent 循环Agent / createAgent,支持工具调用、迭代与事件
  • 📝 会话管理SessionManager、内存/数据库会话、SessionManager.generateId
  • 🧠 ZhinAgent:与 Zhin 消息流集成的智能体(SOUL/TOOLS/AGENTS、工具收集、执行策略)
  • 🔌 框架挂载initAgentModule() 注册 ctx.ai、定时任务、DB 模型等
  • 📦 上下文与记忆ContextManagerConversationMemoryUserProfileStore
  • 跟进与定时FollowUpManagerPersistentCronEngine、cron 工具
  • 🔧 内置工具:calculator、time、search、codeRunner、http、memory 等
  • 📐 会话压缩compactSession、token 估算、总结与裁剪
  • 🪝 Hook 系统registerAIHooktriggerAIHook

依赖关系

  • 依赖 @zhin.js/core:AI 类型(AIProviderChatMessageSession 等)与各 Provider 实现(OpenAI、Ollama 等)
  • 通常通过 zhin.js 主包使用,主包会调用 initAgentModule() 并 re-export 本包 API

安装

npm install @zhin.js/agent
# 或使用主包(已包含 agent)
npm install zhin.js

使用

在主包中(推荐)

主包 zhin.js 已依赖 @zhin.js/agent 并在 setup 中调用 initAgentModule(),插件可直接从 zhin.js 使用:

import {
  initAIModule,   // 即 initAgentModule 的别名
  ZhinAgent,
  Agent,
  createAgent,
  AIService,
  SessionManager,
  registerAIHook,
  getBuiltinTools,
} from 'zhin.js'

// 使用 ctx.ai (AIService)
useContext('ai', async (ai) => {
  const session = ai.sessions.get(sessionId)
  // ...
})

直接使用 @zhin.js/agent

仅在需要单独集成 Agent 能力时使用:

import { initAgentModule, createAgent, AIService } from '@zhin.js/agent'
import { OllamaProvider } from '@zhin.js/core'

// 初始化(需先有 DatabaseFeature 等)
initAgentModule()

// 低层 Agent
const provider = new OllamaProvider({ baseUrl: 'http://localhost:11434' })
const agent = createAgent(provider, { tools: [], systemPrompt: '你是一个助手' })
const result = await agent.run('你好')

核心导出

| 类别 | 导出 | |------|------| | 初始化 | initAgentModule | | Agent | Agent, createAgent, formatToolTitle | | 服务与会话 | AIService, SessionManager, MemorySessionManager, DatabaseSessionManager, createMemorySessionManager, createDatabaseSessionManager | | ZhinAgent | ZhinAgent,以及 config / exec-policy / tool-collector / prompt / builtin-tools 等子模块 | | 上下文与记忆 | ContextManager, createContextManager, ConversationMemory, UserProfileStore | | 跟进与定时 | FollowUpManager, PersistentCronEngine, createCronTools, setCronManager, getCronManager | | 压缩与 Bootstrap | compactSession, estimateTokens, loadBootstrapFiles, loadSoulPersona, loadToolsGuide, loadAgentsMemory | | Hook | registerAIHook, unregisterAIHook, triggerAIHook, createAIHookEvent | | 内置工具 | getBuiltinTools, getAllBuiltinTools, calculatorTool, timeTool, searchTool, codeRunnerTool, httpTool, memoryTool | | 输出与检测 | parseOutput, renderToPlainText, renderToSatori, detectTone | | 子代理 | SubagentManager | | 限流 | RateLimiter | | 存储抽象 | StorageBackend, MemoryStorageBackend, DatabaseStorageBackend, createSwappableBackend |

类型(如 ZhinAgentConfigContextConfigAgentState 等)均从包入口导出或从 @zhin.js/core 再导出。

全局上下文

通过 initAgentModule() 挂载后,插件可声明:

declare module '@zhin.js/core' {
  namespace Plugin {
    interface Contexts {
      ai: AIService  // 由 @zhin.js/agent 提供
    }
  }
}

主包 zhin.jsPlugin.Contexts.ai 类型已指向本包的 AIService

多 Agent 使用方式

1. 主 Agent + 子 Agent(内置)

框架已提供 SubagentManager:主 ZhinAgent 通过工具 spawn_task 把复杂/耗时任务派给后台子 Agent 异步执行,子 Agent 用受限工具集(文件、Shell、网络搜索等),完成后通过回调把结果发回主会话。

  • 主对话不阻塞,用户可继续聊天。
  • 子 Agent 由 ZhinAgent.initSubagentManager(createTools) 在 init 时挂好,主 Agent 在回复里提到「后台 / 子任务 / spawn」时会注入 spawn_task 工具。
  • 用户说「后台帮我整理这份文档」时,主 Agent 可调用 spawn_task({ task: '...', label: '...' }),子任务在后台跑完后再通知用户。

无需额外配置即可使用;若需自定义子 Agent 工具或执行策略,可在 init 里对 ZhinAgent 调用 initSubagentManager 时传入自己的 createToolsexecPolicyConfig

2. 用 AIService 创建多个不同配置的 Agent

ctx.ai(AIService)可以按需创建多个互不共享状态的 Agent,每个可指定不同 provider、model、systemPrompt、tools:

import { useContext } from 'zhin.js'

useContext('ai', async (ai) => {
  // 专用「代码助手」Agent
  const codeAgent = ai.createAgent({
    provider: 'openai',
    model: 'gpt-4o',
    systemPrompt: '你只负责代码审查与建议,不闲聊。',
    useBuiltinTools: true,
    tools: [/* 可选:额外工具 */],
  })
  const codeResult = await codeAgent.run('审查这段 TypeScript 的类型安全')

  // 专用「翻译」Agent,不用内置工具
  const translateAgent = ai.createAgent({
    provider: 'ollama',
    model: 'qwen2.5',
    systemPrompt: '只做中英互译,不解释。',
    useBuiltinTools: false,
    collectExternalTools: false,
  })
  const translated = await translateAgent.run('Hello world')
})

适合:按场景/按接口使用不同「角色」的 Agent(代码、翻译、总结等),彼此独立。

3. 一次调用、单次任务(不持有 Agent 实例)

不需要长期持有 Agent 时,可直接用 runAgent 跑单次任务:

useContext('ai', async (ai) => {
  const result = await ai.runAgent('总结以下内容:...', {
    provider: 'deepseek',
    systemPrompt: '只输出 3 条要点。',
  })
  console.log(result.content)
})

4. 多 Agent 协作/编排(由 zhin.js 层实现)

本包只提供基础能力:createAgentZhinAgentai.createAgent 等。多 Agent 串联/并联编排(例如 A 的输出作为 B 的输入、按条件路由到不同专业 Agent)以及按 bot / 按群组配置多个 ZhinAgent 的调度与路由,将在 zhin.js 主包实现;插件侧通过 zhin.js 暴露的 API 使用即可,无需在业务里手写多实例维护与路由逻辑。

开发

项目结构

src/
├── index.ts              # 入口与 re-export
├── agent.ts              # Agent 执行循环(无状态,TF-IDF 工具过滤)
├── service.ts            # AIService
├── session.ts            # SessionManager
├── storage.ts            # 统一存储抽象层(StorageBackend 接口)
├── context-manager.ts
├── conversation-memory.ts
├── user-profile.ts
├── follow-up.ts
├── subagent.ts
├── rate-limiter.ts
├── cron-engine.ts
├── compaction.ts
├── bootstrap.ts
├── hooks.ts
├── output.ts
├── tools.ts
├── builtin-tools.ts
├── tone-detector.ts
├── init.ts               # initAgentModule 精简入口(委托子模块)
├── init/                 # init 子模块(从 init.ts 拆分)
│   ├── shared-refs.ts
│   ├── types.ts              # 集中的类型增强声明
│   ├── register-tool-service.ts
│   ├── register-db-models.ts
│   ├── register-ai-service.ts
│   ├── create-zhin-agent.ts
│   ├── register-ai-trigger.ts
│   ├── register-db-upgrade.ts
│   ├── register-message-recorder.ts
│   ├── register-management-tools.ts
│   └── register-builtin-tools.ts
└── zhin-agent/           # ZhinAgent 及子模块
    ├── index.ts          # ZhinAgent 主类
    ├── config.ts
    ├── exec-policy.ts
    ├── tool-collector.ts
    ├── prompt.ts
    └── builtin-tools.ts

构建

pnpm build   # 或 npm run build
pnpm clean   # 清理 lib

许可证

MIT License