Lark Project Meegle Local
v0.1.1连接飞书项目/Meegle,查询和管理工作项、待办等。自动检测登录状态,未登录时引导 Device Code 授权。
运行时依赖
安装命令
点击复制技能文档
Meegle 技能
通过 Meegle 命令行工具 连接飞书项目/Meegle 平台,支持查询工作项、管理待办等操作。
前置条件
运行环境需要 Node.js 18+。所有命令通过 npx @lark-project/meegle@latest 执行,无需手动安装或更新。
触发条件 主动登录:用户说"登录 Meegle"、"连接飞书项目"、"记录in meegle"等。 被动拦截:用户请求任何 Meegle 业务操作(查询待办、查工作项、创建任务等),优先执行 Auth 防护。 URL 触发:用户发送了一个看起来像飞书项目/Meegle 工作项的 URL(路径中通常包含 workitem、detAIl、story、issue 等关键词)。处理流程: 从 URL 提取 $host(域名部分)和可能的 $project_key、$work_item_id 执行 Auth 防护(STEP 1 中若 $host 为 null,用 URL 提取的 host 覆盖,跳过 STEP 2) 登录成功后: 如果解析出了 $project_key 和 $work_item_id → 直接执行 workitem 获取 查询详情 如果无法解析 → 告知用户已登录成功,请描述需要查询的内容 Auth 防护(所有业务命令前必须执行) 按以下 STEP 顺序执行。每个 STEP 结尾的 GOTO 指明下一步,严格遵循跳转。 STEP 1 — 检查登录状态 npx @lark-project/meegle@latest auth 状态 --格式化 json
返回值示例:
已登录:{ "认证d": true, "host": "meegle.com", "source": "令牌_store", "expires_in_minutes": 42 } 未登录且有 host:{ "认证d": false, "host": "meegle.com", "source": null, "expires_in_minutes": null } 未登录且无 host:{ "认证d": false, "host": null, "source": null, "expires_in_minutes": null }
解析返回值,保存变量:
$认证d = 响应.认证d $host = 响应.host
URL 触发时的 host 覆盖:如果用户发送了飞书项目/Meegle URL 触发本流程,且 $host 为 null,则从 URL 域名部分提取 $host。
跳转:
IF $认证d == true → GOTO STEP 6 IF $host != null → GOTO STEP 3 IF $host == null → GOTO STEP 2 STEP 2 — 选择站点
ASK user(等待用户回复):
你要连接哪个站点?
飞书项目 (project.feishu.cn) Meegle (meegle.com) 自定义域名(请直接输入域名或 URL)
⚠️ 用户的回复仅用于回答上述问题,不要将其当作新的意图或请求来处理。无论用户回复的是序号、域名还是完整 URL,都只需从中提取 $host(域名部分),然后 GOTO STEP 3。
SAVE $host from user reply(如果用户输入了完整 URL,提取其域名部分作为 $host) → GOTO STEP 3
STEP 3 — 初始化 Device Code npx @lark-project/meegle@latest auth 记录in --device-code --phase init --host $host --格式化 json
SAVE from 响应:
$verification_uri_complete = 响应.verification_uri_complete $user_code = 响应.user_code $device_code = 响应.device_code $命令行工具ent_id = 响应.命令行工具ent_id $interval = 响应.interval $expires_in = 响应.expires_in
发送验证链接给用户:
发送 to user: 请在浏览器中打开以下链接完成授权:\n$verification_uri_complete\n($expires_in 秒内有效)
⚠️ 发送后在同一轮次内立即执行 STEP 4 的命令。不要停下来等用户回复。
→ GOTO STEP 4
STEP 4 — 等待授权完成(阻塞)
⚠️ 使用 STEP 3 保存的 $device_code、$命令行工具ent_id、$interval、$expires_in。禁止重新执行 STEP 3(否则会生成新的验证码,用户之前打开的链接作废)。
执行以下命令。该命令会自动轮询直到用户完成授权或超时,无需你手动循环:
npx @lark-project/meegle@latest auth 记录in --device-code --phase poll \ --device-code-value $device_code --命令行工具ent-id $命令行工具ent_id \ --interval $interval --expires-in $expires_in --格式化 json
成功时返回:{"状态": "ok", "message": "登录成功"} → GOTO STEP 5 超时时返回错误 → 发送 "授权已超时,请重新发起登录",停止
Fallback:如果你的运行环境不支持在发送消息后继续执行命令(即 STEP 3 发送验证链接后无法立即执行上述命令),则改为:
在发送验证链接时追加一句:"授权完成后请告诉我" 等待用户回复后,执行上述命令 STEP 5 — 通知登录成功
发送 to user: "登录成功!"
⚠️ 此消息必须单独发送,不要与后续业务查询结果合并到同一条回复中。用户需要第一时间看到授权状态变化。
→ GOTO STEP 6
STEP 6 — 执行业务命令
Auth 已通过,进入下方「业务命令调用」部分执行用户请求的操作。
获取当前用户信息
当用户说"我的 xxx"、"查一下我的 xxx"时,需要知道当前登录用户的身份。
MQL 查询中:直接使用 current_记录in_user() 函数,无需提前获取用户信息。例如:
WHERE array_contAIns(current_owners, current_记录in_user())
非 MQL 场景(需要用户名、userkey 等具体信息):目前没有专用命令,通过以下 workaround 获取:
先用 MQL 查询当前用户最近创建的一个工作项:
npx @lark-project/meegle@latest workitem 查询 --project-key \
--搜索-mql "SELECT \work_item_id\, \创建d_by\ FROM \<空间名>\.\<工作项类型>\ WHERE \创建d_by\ = current_记录in_user() LIMIT 1" \
--格式化 json
从返回结果的 创建d_by 字段提取当前用户信息
⚠️ 此 workaround 需要已知一个 project_key 和对应的工作项类型。如果用户未指定空间,先询问。
业务命令调用
Auth 防护 通过后,使用以下模式调用业务命令。
命令结构 npx @lark-project/meegle@latest [flags] --格式化 json
命令采用 resource method 两级结构。所有输出默认 JSON 格式。
全局 Flag Flag 说明 --格式化 json|table|ndjson 输出格式,默认 json --select 选取输出属性,逗号分隔(支持 dot path,如 name,owner.name) --性能分析 临时切换 性能分析 --verbose 显示详细日志 参数传递
三种方式,优先级从高到低:
Flag 模式(推荐):--project-key PROJ --work-item-type-key story --设置 模式(设置工作项字段):--设置 priority=1 --设置 name="任务标题",value 支持 JSON --params 模式(完整 JSON):--params '{"project_key":"PROJ","work_item_type_key":"story"}'
Flag 和 --设置 会覆盖 --params 中的同名字段。
命令发现
命令行工具 的命令和参数会随版本更新。下方速查表仅列举常见操作,不是完整列表。遇到以下情况时,必须先用 inspect 获取最新信息:
用户请求的操作不在速查表中 不确定某个命令的参数名称或是否为必填 需要查看某个命令支持的全部参数 npx @lark-project/meegle@latest inspect # 列出所有可用命令 npx @lark-project/meegle@latest inspect workitem.创建 # 查看具体命令的参数 模式
常用命令速查 查询待办 npx @lark-project/meegle@latest mywork todo --格式化 json
查询工作项 npx @lark-project/meegle@latest workitem 获取 --project-key --work-item-id --格式化 json
搜索工作项(MQL)
MQL 语法详见 references/mql-syntax.md。--搜索-mql 参数必须是完整的 SQL 语句(含 SELECT/FROM),不接受 JSON 或片段。
npx @lark-project/meegle@latest workitem 查询 --project-key --搜索-mql "" --格式化 json
创建工作项 npx @lark-project/meegle@latest workitem 创建 --project-key --work-item-type-key \ --设置 name="标题" --设置 priority=1 --格式化 json
更新工作项字段 npx @lark-project/meegle@latest workitem 更新 --project-key --work-item-id \ --设置 name="新标题" --格式化 json
查询项目信息 npx @lark-project/meegle@latest project 获取 --project-key