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

@lih-x-x/kmr

v1.0.71

Published

关键会议记录服务 — 从飞书会议纪要中提取关键信息并持久化保存

Readme

KMR(Key Meetings Record)

关键会议记录服务 — 从飞书会议纪要中提取关键信息并持久化保存,帮助你在遗忘后通过只言片语快速找回历史会议。

功能

  • 会议纪要提取:发送飞书云文档链接给机器人,自动提取会议摘要、待办事项、风险项、关键共识、可复用知识
  • 任务闭环:提取待办后自动发送确认消息,回复 /confirm 创建飞书任务,/reject 取消,3 分钟超时自动取消。自动通过群成员列表解析负责人并指派任务,同步回写会议记录
  • 飞书任务系统集成kmr create-task 直接创建任务(含截止日期、负责人、描述),kmr update-task 更新任务标题/截止日期/负责人,kmr task 查看所有任务状态,变更同步回写本地会议记录
  • 每日任务摘要推送:每天 9:30 向管理员推送未完成和已完成任务摘要,错过时下次启动补推;每小时自动同步飞书任务完成状态
  • 本地 AI · 零成本接入:基于 acpx 复用本地 Claude / Codex,接入飞书机器人实现私有化部署,数据不出本机,无额外 API 费用
  • 历史信息搜索:会议记录和任务均可通过 AI 对话查询;/find 指令与自然语言双支持,返回最相关的 3 条结果
  • 指令 / 自然语言双支持/list/show/del/find/task 等精确指令,与自由对话文本均可使用,AI 理解意图自动路由到对应操作
  • AI 自由对话:发送非指令文本即可与 AI 自由对话,基于 acpx 持久化 session,按用户隔离,支持 claude 和 codex 两种 agent。AI 可直接调用 kmr 命令创建任务、查询记录,回复通过飞书机器人发送,处理中显示表情回应
  • 独立任务创建:通过 kmr create-task 命令(或 AI 对话)直接创建飞书任务,支持关联到指定会议记录(--meeting <id>),无关联时存入独立任务记录
  • 首次启动自动引导:无配置文件时自动初始化并打开 Web 设置页引导填写飞书凭证,配置完成后自动继续启动,无需手动 kmr init
  • 记录管理/list 列出所有记录,/show <id> 查看详情,/del <id> 删除记录,/task 查看所有任务
  • CLI 命令kmr listkmr showkmr taskkmr delkmr findkmr create-taskkmr update-task 等子命令可在终端直接操作,无需启动服务
  • 群聊智能识别:群聊中非 @消息仅自动识别会议纪要文档链接(通过文档标题判断),其他操作需 @机器人
  • 管理员通知:配置 adminOpenId 后,服务启动和停止时自动向管理员推送通知,每天 9:30 推送任务摘要(错过则启动时补推)
  • 版本更新检查:启动时自动检测 npm 新版本并提示更新
  • 本地持久化:所有数据以 JSON 文件存储在 ~/.kmr/ 目录下,支持 grep 检索
  • Web 管理界面:服务启动时自动打开浏览器,查看会议记录、AI 会话、管理配置

核心理念:不是记录员,而是分析师

KMR 不做流水账式的会议记录搬运。每条提取结果都围绕三个核心目标:

1. 溯源追责 — 关键共识与承诺

谁答应了什么?什么时候完成?定下了什么约定?

会议中达成的承诺、约定、决议是最容易被遗忘也最容易被否认的。KMR 会提取每一条共识,标注相关方和截止日期,并由 Agent 分析达成背景——事后有人不认账时,一搜即得。

{
  "content": "前端重构方案采用渐进式迁移,不做大爆炸重写",
  "participants": ["张三", "李四"],
  "deadline": "2026-06-01",
  "context": "因为当前版本仍在高频迭代,大规模重写会阻塞业务需求至少两个月,团队评估后一致选择渐进方案以降低风险"
}

2. 任务闭环 — 会议待办变真实任务

会议待办不再悬空,从纪要到飞书任务全程自动。

会议结束不是终点。KMR 提取待办后自动发起确认消息,回复 /confirm 即可在飞书创建任务并自动解析负责人,任务状态同步回写到会议记录——会开了,事就该定下来。

3. 知识复用 — 可提效的工具与方法

会上提到的工具用法、方法论、经验教训,下次用得上吗?

有价值的信息往往在会议中一闪而过。KMR 会按 tool(工具用法)、methodology(方法论)、lesson(经验教训)、best-practice(最佳实践)分类提取,标注适用场景,形成可检索的知识库。

{
  "category": "tool",
  "content": "用 pnpm patch 可以临时修复第三方包的 bug,不用 fork 仓库",
  "scenario": "依赖包有 bug 但官方还没发版时,用 pnpm patch 打补丁可以快速解决而不引入维护负担",
  "source": "王五"
}

前置条件

  • Node.js >= 18
  • acpx 已全局安装(npm install -g acpx@latest
  • Claude Code 或 Codex 已安装并可通过 acpx 调用
  • 飞书自建应用,开启以下权限:
    • im:message:receive_v1(接收消息事件)
    • im:message(发送消息)
    • im:chat:readonlyim:chat.members:read(获取群成员列表,用于解析任务负责人)
    • docs:document.content:read(读取文档内容)
    • docs:document:readonly(读取文档元信息,用于标题识别)
    • task:task:write(创建飞书任务)

快速开始

方式一:全局安装(推荐)

npm install -g @lih-x-x/kmr
kmr   # 启动服务,首次运行自动初始化配置并引导填写飞书凭证

方式二:克隆源码

git clone <repo-url> && cd kmr
npm install
npm run init    # 初始化配置
npm run dev     # 启动服务

配置文件

编辑 ~/.kmr/config.json

{
  "lark": {
    "appId": "你的飞书应用 App ID",
    "appSecret": "你的飞书应用 App Secret",
    "adminOpenId": "管理员的 open_id(可选,用于接收服务启停通知)"
  },
  "agent": {
    "provider": "claude",
    "timeout": 120000
  },
  "storage": {
    "dataDir": "~/.kmr/data/meetings"
  }
}

provider 支持 claudecodex 两种 agent,可在 Web 设置页面实时切换,无需重启服务。

配置完成后运行 kmrnpm run dev 启动服务。

使用方式

提取会议纪要

在飞书中向机器人发送会议云文档链接:

https://xxx.feishu.cn/docx/abc123

机器人会自动读取文档内容,提取结构化信息并回复摘要。

搜索历史会议

/find 关于用户增长的会议
/find 上次讨论技术架构的内容
/find 处理A事件的文档

机器人会返回最相关的 3 条会议记录及原始文档链接。

管理会议记录

/list                       # 列出所有记录(ID + 标题 + 链接)
展示所有记录                 # 自然语言同样支持

/show meeting_1714380000    # 查看某条记录的完整详情
查看 meeting_1714380000 详情 # 自然语言同样支持

/del meeting_1714380000     # 删除某条记录
删掉 meeting_1714380000     # 自然语言同样支持

/task                       # 查看所有已创建任务的状态

CLI 命令

无需启动服务,直接在终端操作:

kmr list              # 列出所有会议记录
kmr show <id>         # 查看记录详情(JSON)
kmr task              # 查看所有任务状态
kmr del <id>          # 删除记录
kmr find <query>      # AI 搜索会议记录
kmr create-task <标题> [--due YYYY-MM-DD] [--assignee 姓名] [--desc 描述] [--meeting <id>]  # 创建飞书任务
kmr update-task <taskId> [--summary 新标题] [--due YYYY-MM-DD] [--assignee 姓名]             # 更新飞书任务

直接创建飞书任务

除了从会议纪要提取待办后创建任务,也可以直接创建独立任务:

# 创建独立任务
kmr create-task "完成技术方案设计" --due 2026-05-20 --assignee 张三 --desc "需要包含架构图和接口设计"

# 关联到指定会议记录
kmr create-task "完成前端重构" --due 2026-05-20 --assignee 张三 --meeting meeting_1714380000

也可以在飞书中直接告诉 AI 机器人创建任务,它会自动调用命令完成操作。

创建飞书任务(从会议纪要)

会议纪要提取后,如果包含待办事项,机器人会自动发送确认消息:

📝 检测到 3 条待办,是否创建飞书任务?

1. [张三] 完成前端重构方案(截止 2026-05-15)
2. [李四] 提交性能测试报告(截止 2026-05-10)
3. [王五] 更新 API 文档(截止 2026-05-12)

回复 /confirm all 创建全部
回复 /confirm 1,2 创建选中的任务
回复 /reject 取消创建

⏱ 3 分钟内未回复将自动取消

创建的任务会自动设置截止时间,并通过群成员列表自动解析负责人姓名为飞书 open_id 进行指派(解析失败时 fallback 到确认者)。任务信息同步回写到会议记录中。

AI 自由对话

发送非指令文本即可与 AI 对话,每个用户拥有独立的持久化会话:

你好,帮我总结一下最近的技术方案

会话基于 acpx claude session,上下文在多轮对话间保持。

群聊使用

@机器人:可使用所有指令和 AI 对话,与私聊体验一致。

@KMR /list
@KMR /find 技术方案评审
@KMR https://xxx.feishu.cn/docx/abc123

无需@:以下场景机器人会自动响应:

  • 发送会议纪要文档链接(通过文档标题中的"纪要/会议记录"等关键词自动识别)
  • 回复 /confirm/reject 确认或取消创建任务

其他消息机器人不会响应,不会打扰群聊。

Web 管理界面

服务启动后会自动打开浏览器,访问 http://localhost:3000

  • 会议记录:查看所有已提取的会议,点击展开查看详情(含共识、知识、已创建任务等)
  • AI 会话:查看各用户的对话历史,支持删除
  • 设置:点击右上角齿轮图标,配置飞书 App ID/Secret、Agent 参数等

项目结构

kmr/
├── src/
│   ├── index.ts              # 服务入口
│   ├── config.ts             # 配置管理(~/.kmr/config.json)
│   ├── cli.ts                # CLI 入口(kmr 命令、版本更新检查)
│   ├── cli-init.ts           # kmr init 命令
│   ├── lark/
│   │   ├── client.ts         # 飞书长连接客户端(消息去重、群聊过滤)
│   │   ├── docReader.ts      # 飞书文档内容读取(含标题获取)
│   │   ├── messenger.ts      # 飞书消息回复(摘要、确认、任务结果等)
│   │   ├── router.ts         # 消息路由(指令解析、自然语言匹配)
│   │   ├── taskCreator.ts    # 飞书任务创建(Task API v2)
│   │   └── userResolver.ts   # 群成员姓名→open_id 解析
│   ├── agent/
│   │   ├── types.ts          # AgentProvider 接口
│   │   ├── claudeCode.ts     # Claude/Codex 实现(acpx)
│   │   └── prompt.ts         # Prompt 模板
│   ├── session/
│   │   ├── manager.ts        # AI 会话管理(per-user acpx session)
│   │   └── skill.ts          # 会话角色设定模板
│   ├── query/
│   │   ├── finder.ts         # grep 匹配
│   │   └── handler.ts        # /find 编排
│   ├── web/
│   │   ├── server.ts         # HTTP 服务器 + REST API
│   │   ├── openBrowser.ts    # 自动打开浏览器
│   │   └── public/           # 前端静态文件
│   │       ├── index.html
│   │       ├── style.css
│   │       └── app.js
│   ├── utils/
│   │   └── claudeEnv.ts      # ~/.claude/settings.json 环境变量加载
│   ├── task/
│   │   └── sync.ts           # 飞书任务状态同步
│   └── storage/
│       ├── types.ts          # 数据类型定义
│       └── jsonStore.ts      # JSON 文件存储
├── tests/                    # 测试文件
├── tsup.config.ts            # tsup 构建配置
├── package.json
└── tsconfig.json

数据存储

会议记录存储在 ~/.kmr/data/meetings/ 下,每个会议一个 JSON 文件:

~/.kmr/
├── config.json
├── data/
│   └── meetings/
│       ├── 2026-04-29_meeting_1714380000.json
│       └── 2026-04-30_meeting_1714466400.json
└── sessions/
    └── <userId>/
        ├── skill.md          # AI 角色设定
        └── summary.md        # 对话历史

每条会议记录包含:会议摘要、关键共识与承诺(含 Agent 背景分析)、可复用知识(工具/方法/经验)、待办事项、风险项、项目关联、已创建的飞书任务、原始文档文本。

开发

# 运行测试
npm test

# 监听模式
npm run test:watch

# 类型检查
npx tsc --noEmit

# 构建
npm run build

架构扩展

Agent 模块通过 AgentProvider 接口抽象,当前支持 Claude Code 和 Codex 两种 agent(均通过 acpx 调用)。可在 Web 设置页面实时切换,无需重启服务。后续可扩展其他 Agent(如 Kiro、Gemini 等),只需实现该接口:

interface AgentProvider {
  name: string;
  extract(content: string): Promise<MeetingRecord>;
  searchKeywords(query: string): Promise<string[]>;
  rankResults(query: string, candidates: MeetingRecord[]): Promise<MeetingRecord[]>;
}

许可

ISC