diff --git a/apps/electron/src/renderer/components/settings/FeishuSettings.tsx b/apps/electron/src/renderer/components/settings/FeishuSettings.tsx index a76fa06..9a81116 100644 --- a/apps/electron/src/renderer/components/settings/FeishuSettings.tsx +++ b/apps/electron/src/renderer/components/settings/FeishuSettings.tsx @@ -9,7 +9,7 @@ import * as React from 'react' import { useAtomValue, useSetAtom } from 'jotai' import { toast } from 'sonner' -import { Loader2, CheckCircle2, XCircle, ExternalLink, Users, User, Trash2, RefreshCw, Copy, Check, Power, PowerOff, Plus } from 'lucide-react' +import { Loader2, CheckCircle2, XCircle, ExternalLink, Users, User, Trash2, RefreshCw, Copy, Check, Power, PowerOff, Plus, ChevronRight } from 'lucide-react' import { Button } from '@/components/ui/button' import { Select, @@ -101,6 +101,7 @@ function Link({ href, children }: { href: string; children: React.ReactNode }): /** 权限列表展示 + 一键复制批量权限 JSON */ function PermissionsStep(): React.ReactElement { const [copied, setCopied] = React.useState(false) + const [expanded, setExpanded] = React.useState(false) const handleCopy = React.useCallback(() => { navigator.clipboard.writeText(FEISHU_SCOPES_JSON).then(() => { @@ -123,6 +124,27 @@ function PermissionsStep(): React.ReactElement { 进入「权限管理」页面,点击下方按钮复制权限配置 JSON, 然后在飞书开放平台通过「批量开通」粘贴即可一键添加所有权限:

+ + {expanded && ( +
+
im:message — 获取与发送单聊、群组消息
+
im:message:send_as_bot — 以机器人身份发送消息
+
im:message.p2p_msg:readonly — 接收用户发给机器人的单聊消息
+
im:message.group_at_msg:readonly — 接收群聊中 @机器人 的消息
+
im:message.group_msg — 读取群聊历史消息(群聊上下文)
+
im:chat:readonly — 获取群组信息
+
im:chat.members:read — 获取群成员列表(支持 @某人)
+
im:resource — 获取消息中的资源文件(图片、文档等)
+
contact:contact.base:readonly — 获取用户基本信息(群聊发送者名称)
+
+ )} -
-
im:message — 获取与发送单聊、群组消息
-
im:message:send_as_bot — 以机器人身份发送消息
-
im:message.p2p_msg:readonly — 接收用户发给机器人的单聊消息
-
im:message.group_at_msg:readonly — 接收群聊中 @机器人 的消息
-
im:message.group_msg — 读取群聊历史消息(群聊上下文)
-
im:chat:readonly — 获取群组信息
-
im:chat.members:read — 获取群成员列表(支持 @某人)
-
im:resource — 获取消息中的资源文件(图片、文档等)
-
contact:contact.base:readonly — 获取用户基本信息(群聊发送者名称)
-
) } +// ===== 飞书 CLI 预置 Prompt ===== + +const FEISHU_CLI_PROMPT = `请帮我配置飞书 CLI 开发环境,按以下步骤执行: + +1. 安装飞书 CLI 到全局 +npm install -g @larksuite/cli + +2. 将 SKILL 配置到本工作区(不要安装在全局) +npx skills add https://github.com/larksuite/cli -y -g + +3. 初始化 CLI 配置 +lark-cli config init --new + +到最后一步配置环节需要特别提醒用户:已有Bot应用则选择已有应用,没有再选择新建飞书CLI应用。` + +/** 飞书 CLI 配置引导 */ +function FeishuCliSection(): React.ReactElement { + const [expanded, setExpanded] = React.useState(false) + const [copied, setCopied] = React.useState(false) + + const handleSendToAgent = React.useCallback(() => { + navigator.clipboard.writeText(FEISHU_CLI_PROMPT).then(() => { + setCopied(true) + toast.success('配置指令已复制,请在 Agent 对话中粘贴发送') + setTimeout(() => setCopied(false), 2000) + }).catch(() => { + toast.error('复制失败') + }) + }, []) + + return ( + + +
+

复制配置提示词,并前往飞书Bot日常绑定的默认工作区,发送即可让 Proma 协助完成配置。

+ + + {expanded && ( +
+
步骤 1 — 安装飞书 CLI 到全局
+
npm install -g @larksuite/cli
+
步骤 2 — 将 SKILL 配置到本工作区(默认配置本工作区,但请提醒用户是否需要额外安装到全局,会使得预置上下文增加,造成不必要的Token消耗)
+
npx skills add https://github.com/larksuite/cli -y -g
+
步骤 3 — 初始化 CLI 配置
+
lark-cli config init --new
+
+ )} + + +
+
+
+ ) +} + // ===== 绑定卡片组件 ===== interface FeishuBindingCardProps { @@ -730,7 +814,7 @@ function FeishuConfigTab(): React.ReactElement { 飞书开放平台 {' '}(海外版: Lark 开放平台 - ),点击「创建自建应用」,填写应用名称和描述。 + ),点击「创建自建应用」并填写名称描述。

@@ -741,10 +825,10 @@ function FeishuConfigTab(): React.ReactElement { 获取凭证

- 进入应用详情页,在「凭证与基础信息」中找到{' '} + 进入详情页,在「凭证与基础信息」中找到{' '} App ID 和{' '} App Secret, - 复制到上方的配置表单中。 + 复制到上方的配置表单。

@@ -811,6 +895,9 @@ function FeishuConfigTab(): React.ReactElement { + {/* 飞书 CLI 配置引导 */} + + ) }