feat: CLI onboarding + editablePathPatterns - #211
Conversation
新增 editablePathPatterns 配置项,允许 readonly agent 编辑指定路径的文件。 PM agent 默认可编辑 config/personas/* 和 config/knowledge/*, 用户可以直接让 chatbot 修改自己的人格和知识库配置。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
setup.sh 从 428 行精简到 ~160 行,仅保留: - 系统依赖检查 (Node.js, python3/make/gcc) - npm install + native 模块验证 - ANTHROPIC_API_KEY 配置 - 编译验证 飞书配置、团队信息、Bot 人格等交由 npm run onboard 完成。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
新增 npm run onboard 命令,通过 Agent SDK 在终端启动多轮对话, 引导用户完成飞书应用配置、团队信息、Bot 人格和可选功能设定。 - scripts/onboard.ts: CLI 多轮对话入口 - src/onboarding/bootstrap.ts: prompt 生成 + 完成状态检测 - .env.example: 添加 ONBOARDING_COMPLETED 文档 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Claude finished @lishuceo's task in 4m 1s —— View job PR Review: feat: CLI onboarding + editablePathPatterns
✅ Approved — Clean, well-structured PR with no issues found at high confidence. Review SummaryeditablePathPatterns (
CLI onboarding (
setup.sh simplification
Overall: The feature design is well-thought-out — |
修复 `npm run onboard` 报 "Not logged in" 的问题: - 添加 `import 'dotenv/config'` 加载 .env 中的 ANTHROPIC_API_KEY - query options 传递 `env: process.env` 确保子进程继承 API Key 和 Base URL Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Claude finished @lishuceo's task in 2m 4s —— View job PR Review: feat/onboarding-cli (re-review after sync)
✅ Approved — No new issues found. Clean, well-structured PR. Review SummaryeditablePathPatterns (
CLI onboarding (
setup.sh simplification
Overall: The |
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Claude finished @lishuceo's task in 1m 38s —— View job PR Review: feat/onboarding-cli + editablePathPatterns (re-review after sync)
✅ Approved — No issues found at confidence ≥ 75. Clean, well-structured PR. Review SummaryeditablePathPatterns (
CLI onboarding (
setup.sh simplification
Overall: The |
- setup.sh: 检查 ANTHROPIC_API_KEY 是否以 sk- 开头,防止误填飞书 ID - onboard.ts: 清理传给子进程的 env(去掉 CLAUDECODE 嵌套检测变量) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- setup.sh: 只校验非空,不限制 key 格式(兼容第三方代理) - onboard.ts: 认证 401 错误时明确提示检查 ANTHROPIC_API_KEY 和 BASE_URL - onboard.ts: 首次连接时显示等待提示,避免用户以为卡死 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Claude finished @lishuceo's task in 1m 55s —— View job PR Review: feat/onboarding-cli + editablePathPatterns
✅ Approved — No issues found at confidence ≥ 75. Clean, well-structured PR. Review SummaryeditablePathPatterns (
CLI onboarding (
setup.sh simplification
Overall: The |
- Phase 1 拆分为先问 App ID 再问 App Secret,不同时要两个值 - 重要规则强调「每次只问一个问题」 - 终端不支持 markdown 链接,改为直接写 URL Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Claude finished @lishuceo's task in 2m 49s —— View job PR Review: feat/onboarding-cli + editablePathPatterns
✅ Approved — No issues found at confidence ≥ 75. Clean, well-structured PR. Review SummaryeditablePathPatterns (
CLI onboarding (
setup.sh simplification
Overall: The |
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 权限(权限管理)和事件订阅(事件与回调)是飞书后台不同页面,分两步引导 - card.action.trigger 标注为必须,否则卡片按钮不生效 - 提醒用户配置后需要发布版本 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Claude finished @lishuceo's task in 2m 26s —— View job PR Review: feat/onboarding-cli + editablePathPatterns
✅ Approved — No issues found at confidence ≥ 75. Clean, well-structured PR. Review SummaryeditablePathPatterns (
CLI onboarding (
setup.sh simplification
Minor pre-existing note (not introduced by this PR): |
用户在 onboarding 阶段还未启动 bot,不知道自己的飞书 open_id, 不应该问 ALLOWED_USER_IDS。系统有 autoDetectOwner 机制自动将 第一个发消息的用户设为管理员。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Claude finished @lishuceo's task in 3m 36s —— View job PR Review: feat/onboarding-cli + editablePathPatterns
✅ Approved — One minor defensive issue found (confidence 78%). Overall clean, well-structured PR. Findings🟡 Missing The spinner is started before In practice the Agent SDK almost always emits at least one Review SummaryeditablePathPatterns (
CLI onboarding (
setup.sh simplification
|
修复单 bot 模式下 bot 不知道自己名字的问题: - client.ts: fetchBotInfo 存储 app_name - event-handler.ts: buildBotIdentityContext 单 bot 模式也构建身份上下文 (从飞书 API 的 botName + agent config 的 displayName 取名字) 新增 /config 命令(Owner only): - 显示 agent 配置(模型、工具策略、回复模式等) - 显示关联文件路径(persona、knowledge) - 预览人设和知识内容 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Claude finished @lishuceo's task in 2m 12s —— View job PR Review: feat/onboarding-cli + editablePathPatterns
✅ Approved — One minor defensive issue found (confidence 78%). Overall clean, well-structured PR. Findings🟡 Missing The spinner is started before In practice the Agent SDK almost always emits at least one Review SummaryeditablePathPatterns (
CLI onboarding (
setup.sh simplification
Pre-existing note (not introduced by this PR): |
- config/personas/pm.example.md → assistant.example.md(通用名,不绑定角色) - agents.example.json displayName 改为 "<onboarding 中设定>" 明确是占位符 - agents.example.json persona 路径改为 assistant.md - bootstrap prompt 动态配置所有 agent 的 displayName 和 persona, 不再硬编码写入 pm.md Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Claude finished @lishuceo's task in 2m 12s —— View job PR Review: feat/onboarding-cli + editablePathPatterns
✅ Approved — One minor defensive issue found (confidence 80%). Overall clean, well-structured PR. Findings🟡 Missing The spinner is started before Review SummaryeditablePathPatterns (
CLI onboarding (
setup.sh simplification
Pre-existing note (not introduced by this PR): |
- onboard.ts: for-await 循环后调用 stopSpinner(),防止无 assistant 消息时 spinner 残留导致终端输出错乱 (review feedback) - image-compress.test.ts: GIF 压缩测试在 CI 上偶发超时,15s 更安全 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Claude finished @lishuceo's task in 2m 48s —— View job PR Review: feat/onboarding-cli + editablePathPatterns
✅ Approved — No new issues found at confidence ≥ 75. Previous stopSpinner issue has been fixed. Review SummaryeditablePathPatterns (
CLI onboarding (
New
setup.sh simplification
Pre-existing note (not introduced by this PR): |
* feat: editablePathPatterns — readonly agent 也能编辑配置文件 新增 editablePathPatterns 配置项,允许 readonly agent 编辑指定路径的文件。 PM agent 默认可编辑 config/personas/* 和 config/knowledge/*, 用户可以直接让 chatbot 修改自己的人格和知识库配置。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * refactor: 精简 setup.sh,配置交给 CLI onboarding agent setup.sh 从 428 行精简到 ~160 行,仅保留: - 系统依赖检查 (Node.js, python3/make/gcc) - npm install + native 模块验证 - ANTHROPIC_API_KEY 配置 - 编译验证 飞书配置、团队信息、Bot 人格等交由 npm run onboard 完成。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: CLI onboarding agent — 对话式首次配置 新增 npm run onboard 命令,通过 Agent SDK 在终端启动多轮对话, 引导用户完成飞书应用配置、团队信息、Bot 人格和可选功能设定。 - scripts/onboard.ts: CLI 多轮对话入口 - src/onboarding/bootstrap.ts: prompt 生成 + 完成状态检测 - .env.example: 添加 ONBOARDING_COMPLETED 文档 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: onboard 脚本加载 dotenv 并传递 env 给 SDK 子进程 修复 `npm run onboard` 报 "Not logged in" 的问题: - 添加 `import 'dotenv/config'` 加载 .env 中的 ANTHROPIC_API_KEY - query options 传递 `env: process.env` 确保子进程继承 API Key 和 Base URL Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: onboard 添加 stderr 和调试输出,排查子进程无响应 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: setup.sh 校验 API Key 格式 + onboard 清理 env 传递 - setup.sh: 检查 ANTHROPIC_API_KEY 是否以 sk- 开头,防止误填飞书 ID - onboard.ts: 清理传给子进程的 env(去掉 CLAUDECODE 嵌套检测变量) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: 去掉 API Key 格式校验 + 认证失败时给出清晰修复指引 - setup.sh: 只校验非空,不限制 key 格式(兼容第三方代理) - onboard.ts: 认证 401 错误时明确提示检查 ANTHROPIC_API_KEY 和 BASE_URL - onboard.ts: 首次连接时显示等待提示,避免用户以为卡死 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: onboarding prompt 严格一次只问一个问题 - Phase 1 拆分为先问 App ID 再问 App Secret,不同时要两个值 - 重要规则强调「每次只问一个问题」 - 终端不支持 markdown 链接,改为直接写 URL Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: onboard 等待 agent 回复时显示 spinner 动画 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: onboarding prompt 权限和事件订阅分开讲,强调 card.action.trigger 必须 - 权限(权限管理)和事件订阅(事件与回调)是飞书后台不同页面,分两步引导 - card.action.trigger 标注为必须,否则卡片按钮不生效 - 提醒用户配置后需要发布版本 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: onboarding 移除用户访问控制配置,autoDetectOwner 自动处理 用户在 onboarding 阶段还未启动 bot,不知道自己的飞书 open_id, 不应该问 ALLOWED_USER_IDS。系统有 autoDetectOwner 机制自动将 第一个发消息的用户设为管理员。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: 配置完成后同时提示 npm run dev 和 pm2 启动方式 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: 单 bot 模式注入身份上下文 + /config 诊断命令 修复单 bot 模式下 bot 不知道自己名字的问题: - client.ts: fetchBotInfo 存储 app_name - event-handler.ts: buildBotIdentityContext 单 bot 模式也构建身份上下文 (从飞书 API 的 botName + agent config 的 displayName 取名字) 新增 /config 命令(Owner only): - 显示 agent 配置(模型、工具策略、回复模式等) - 显示关联文件路径(persona、knowledge) - 预览人设和知识内容 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * refactor: persona 模板去 PM 耦合 + agents.example 占位符语义化 - config/personas/pm.example.md → assistant.example.md(通用名,不绑定角色) - agents.example.json displayName 改为 "<onboarding 中设定>" 明确是占位符 - agents.example.json persona 路径改为 assistant.md - bootstrap prompt 动态配置所有 agent 的 displayName 和 persona, 不再硬编码写入 pm.md Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: spinner 循环后兜底 stopSpinner + GIF 测试超时加到 15s - onboard.ts: for-await 循环后调用 stopSpinner(),防止无 assistant 消息时 spinner 残留导致终端输出错乱 (review feedback) - image-compress.test.ts: GIF 压缩测试在 CI 上偶发超时,15s 更安全 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Summary
npm run onboard启动 Agent SDK 多轮对话,引导用户完成飞书配置、团队信息、Bot 人格和可选功能设定Test plan
npx vitest run全部通过(1323 passed,1 pre-existing flaky failure in memory quality)🤖 Generated with Claude Code