ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

飞书知识空间删除指南:lark-cli `wiki +delete-space` 同步/异步任务与安全确认全解析

飞书知识空间删除指南:lark-cli `wiki +delete-space` 同步/异步任务与安全确认全解析 CLIAI 技能【免费下载链接】cliThe official Lark/飞书 CLI tool, maintained by the larksuite team — built for humans and AI Agents. Covers core business domains including Messenger, Docs, Base, Sheets, Calendar, Mail, Tasks, Meetings, and more, with 200 commands and 20 AI Agent Skills.项目地址https://gitcode.com/gh_mirrors/cli414/cli点击查看免费下载导读wiki delete-space是 lark-cli飞书官方 CLI由 larksuite 团队维护中用于删除整个飞书知识空间知识库的高风险 shortcut底层对应 OpenAPIDELETE /open-apis/wiki/v2/spaces/:space_id。本文将完整讲解该命令的参数、同步/异步两种返回形态、有限轮询机制、--yes强制确认门禁、以及从知识库名称或 URL 解析出真实space_id的完整流程并深入其源码实现shortcuts/wiki/wiki_delete.go 与 shortcuts/wiki/wiki_async_task.go说明底层调用链与状态分类逻辑。读完本文你可以安全、可控地通过 lark-cli 完成知识空间删除并在异步任务超时后正确续跑查询。一、前置条件与安全基调使用本命令前必须先阅读共享底座文档 skills/lark-shared/SKILL.md它规定了认证方式、--as user/--as bot身份模型、JSON 输出契约与高风险操作规则。核心要点身份决定你代表谁操作--as user代表用户本人--as bot代表应用自己。知识空间和节点是用户的个人资源lark-wiki 的策略是优先显式使用--as userCLI 的--as默认值是auto不带--as时常被解析成bot列出的是应用所属空间而非用户的。详见 skills/lark-wiki/SKILL.md 与身份/权限说明。写入/删除操作前必须确认用户意图目标命令支持--dry-run时应先用--dry-run预览危险请求。退出码 10 是高风险确认门禁不是错误risk: high-risk-write的命令缺少--yes时会直接返回结构化错误而非真正发请求详见 skills/lark-shared/references/lark-shared-high-risk-approval.md。wiki delete-space的本质语义不可逆该操作会将知识空间连同其下所有节点彻底删除执行前必须反复确认同步 / 异步两种返回接口可能直接返回空task_id删除同步完成也可能返回非空task_id后端排队异步删除此时 shortcut 会对任务做有限轮询。二、命令与参数# 同步或异步删除一个知识空间必须显式加 --yes 确认 lark-cli wiki delete-space \ --space-id SPACE_ID \ --yes # 预览底层调用链不会真的删除 lark-cli wiki delete-space \ --space-id SPACE_ID \ --dry-run参数一览参数必填说明--space-id是要删除的知识空间 ID数字型 space_id不是 wiki URL、不是 node token、不是知识库名称--yes是真删时高风险写操作确认。不传则 CLI 直接返回unsafe_operation_blocked错误不会发出任何请求从源码看shortcuts/wiki/wiki_delete.go该 shortcut 的定义为Service: wiki、Command: delete-spaceRisk: high-risk-write——框架层强制要求--yesScopes: [wiki:space:write_only, wiki:space:read]AuthTypes: [user, bot]即两种身份均可发起删除唯一 flag 是必填的--space-id并在校验阶段对空值和资源名格式做检查--space-id is required、validateOptionalResourceName。需要特别注意的是不要把 wiki URL / 名称直接当--space-id传例如--space-id https://.../wiki/wiki_token是反例务必先用下文的空间解析流程拿到真实space_id再传。三、请求与同步/异步返回形态请求shortcut 对/open-apis/wiki/v2/spaces/{space_id}发送DELETE源码中通过validate.EncodePathSegment(spaceID)对路径段做编码见 shortcuts/wiki/wiki_delete.go。随后读取响应data.task_id同步返回data.task_id为空字符串 → 删除已同步完成直接返回readytrue、failedfalse、status_msgsuccess。异步返回data.task_id非空 → 进入有限轮询。值得注意的源码细节同步和异步的成功信封保持同一形状都包含status/status_msg这样下游脚本无论走哪条分支都能统一读取status字段判断成功。任务轮询异步场景下调用GET /open-apis/wiki/v2/tasks/{task_id}?task_typedelete_space读取响应data.task.delete_space_result.status进行状态分类statussuccess→readytruestatusfailure/statusfailed→ 返回错误wiki delete-space task failed: status_msg 或 status其他值如processing、running→ 视为进行中继续轮询。状态分类逻辑集中在 shortcuts/wiki/wiki_async_task.gonormalizedStatus()会先对状态字符串做大小写归一化与去空白保证 SUCCESS 与success分类一致Ready()仅当归一化后等于success时为真Failed()仅当显式为failure/failed时为真未知的非成功状态一律视为进行中——这是有意设计避免把后端新出现的状态字符串误报成硬失败显示层StatusCode()/StatusLabel()则刻意保留后端原始值若响应缺失status字段或为空白StatusCode()回退为processing保证文档描述的轮询超时形状依然准确。轮询参数在源码中有明确常量shortcuts/wiki/wiki_delete.go有限轮询窗口固定最多轮询30次每次间隔2秒wikiDeleteSpacePollAttempts 30、wikiDeleteSpacePollInterval 2 * time.Second。轮询超时不是失败如果窗口结束任务仍在处理中命令会返回task_id、status、status_msg、readyfalse、timed_outtrue并附带next_commandlark-cli drive task_result --scenario wiki_delete_space --task-id TASK_ID --as usernext_command由wikiDeleteSpaceTaskResultCommand生成shortcuts/wiki/wiki_delete.go会自动带上与本次调用一致的--as身份身份为空时回退为user。轮询请求全部失败时直接报错如果删除请求已成功创建任务但后续每一次状态查询都失败hadSuccessfulPollfalse且存在错误shortcut 不会丢弃 task_id而是返回带 hint 的错误hint 中附带继续查询命令。源码中的处理逻辑shortcuts/wiki/wiki_async_task.go会尽量保留原始 typed error分类、subtype、code、log_id把续跑提示以hint形式拼接进去——符合仓库 errs/ERROR_CONTRACT.md 中typed errors 原样传播的契约。四、返回结果与输出字段同步删除{ space_id: 7629741305993170448, ready: true, failed: false, status: success, status_msg: success }异步删除完成{ space_id: 7629741305993170448, task_id: 7631425120875056669-965458aec67417f5982250806c97950697ccb82f, ready: true, failed: false, status: success, status_msg: success }异步轮询超时{ space_id: 7629741305993170448, task_id: 7631425120875056669-965458aec67417f5982250806c97950697ccb82f, ready: false, failed: false, status: processing, status_msg: processing, timed_out: true, next_command: lark-cli drive task_result --scenario wiki_delete_space --task-id 7631425120875056669-965458aec67417f5982250806c97950697ccb82f --as user }输出字段说明space_id入参的知识空间 IDready任务是否已经完成failed任务是否已失败显式返回failure/failed时为truetask_id异步任务 ID仅异步场景返回status/status_msg异步任务的原始状态和可读标签status_msg为空时回落为statustimed_out、next_command轮询窗口内未完成时返回。续跑查询drive task_result异步超时后的续跑命令lark-cli drive task_result --scenario wiki_delete_space --task-id TASK_ID是异步任务的统一查询入口完整用法见 skills/lark-drive/references/lark-drive-task-result.md。要点--scenario wiki_delete_space为 Wiki 删除知识空间场景--task-id必填且必须原样传递完整 IDtask_id可能包含多个连字符不要拆分或截断续跑的--profile与--as必须与初始wiki delete-space调用保持一致wiki_delete_space场景下ready在statussuccess时为truefailed在statusfailure或failed时为true未知非成功状态如processing视为进行中status_msg优先取delete_space_result.status_msg否则回落到status再回落到processing。五、dry-run 编排--dry-run只做编排预览、不真正发送请求适合先给用户 review 危险操作。它会展示两步调用链DELETE /open-apis/wiki/v2/spaces/{space_id}GET /open-apis/wiki/v2/tasks/{task_id}?task_typedelete_space仅异步时真实发生。源码中的 dry-run 构建shortcuts/wiki/wiki_delete.go描述为 2-step orchestration: delete wiki space - poll wiki delete task when task_id is returned并在第二步将task_id置为task_id占位符、携带task_typedelete_space查询参数。若--space-id已传dry-run 中会展示编码后的真实 ID未传则展示space_id占位符。六、权限说明当前 shortcut 声明的权限为wiki:space:write_only和wiki:space:readwiki:space:write_only用于发起删除请求wiki:space:read用于轮询同一命令内的异步任务状态。如果本地 token 缺失任一权限CLI 会直接提示重新执行lark-cli auth login --scope wiki:space:write_only wiki:space:read而异步超时后的续跑命令lark-cli drive task_result --scenario wiki_delete_space --task-id TASK_ID只需wiki:space:read纯读任务状态与该命令在 skills/lark-drive/references/lark-drive-task-result.md 中声明的 scope 一致。七、空间解析如何拿到space_idwiki delete-space只接受--space-id作为目标。用户在对话里常常只说知识库的名称或贴一条知识库 URL这时不能把名称 / URL 原样当成space_id传进去必须先解析。三种输入路径1. 已经有space_id直接用无需解析。2. 只有知识库 URL.../wiki/token先确定后续wiki delete-space使用的身份默认使用user用户明确要求应用 / bot 视角时使用bot。下面展示默认 user 身份下游使用 bot 时将两步都改为--as bot。节点解析和删除必须使用相同身份。lark-cli wiki node-get \ --node-token wiki_url \ --as user \ --format json读取返回结果中的data.space_id即可。wiki node-get是获取或解析 Wiki 节点的统一入口支持按node_token/obj_token/ Lark URL 解析细节见 skills/lark-wiki/references/lark-wiki-node-get.md。3. 只有知识库名称调用wiki spaces list# 第一页 lark-cli wiki spaces list --format json # 如果需要继续翻页看下方停止条件带上 page_token lark-cli wiki spaces list --params {page_token:上一页返回的 page_token} --format json翻页与匹配策略边翻边匹配每拿一页就在已累计的 items 上对name做精确匹配区分大小写、保留空格满足任一条件即停止翻页(A)累计精确匹配 ≥ 1 条→ 停止翻页已找到目标(B)has_morefalse已翻完所有页→ 停止翻页。结束后如果累计精确匹配 ≥ 1把所有精确匹配作为候选列给用户如果精确匹配 0此时必然已走到has_morefalse已收集全量 items在全量 items 上做宽松匹配nametrim 空格 大小写不敏感 子串包含作为候选宽松匹配也 0 条停下来问用户是不是名字拼错、或者调用方没权限看到这个空间不要自己改名字重试。不做更激进的归一化比如去括号、去版本号尾缀那些容易把 客户台账归档 误命中到 客户台账。这条策略与 skills/lark-wiki/SKILL.md 中的快速决策描述一致是防止误删同名/近似名称空间的关键约束。早停的小边界早停条件 A意味着可能漏掉位于更后面页的同名空间。这种重名 corner case 由下面的用户确认兜底LLM 展示候选时应照抄name space_id用户如果觉得不是自己想删的那一个可以要求继续翻页。确认流程硬约束无论精确还是模糊无论命中 1 条还是多条发起删除前都必须先把候选列给用户由用户明确回选一个space_id。不要因为只命中一条就跳过确认直接删。列候选时至少包含以下字段方便用户分辨name原始值不做归一化space_idspace_typeteam/person等description若有visibility若有。示例话术根据 客户台账 找到以下候选 1) name客户台账, space_id7629...0448, space_typeteam, description销售部 2) name客户台账归档, space_id7629...0449, space_typeteam, description2023 以前 请回复序号或 space_id 确认要删除的那一个如果都不是请说明。命中 0 条停下来问用户是名称拼错了、还是调用方无权限看到这个空间不要自动尝试改名字再查一次。执行删除用户明确选定space_id后lark-cli wiki delete-space --space-id RESOLVED_SPACE_ID --yes[!IMPORTANT] 删库不可逆。关键不变量发给服务端的--space-id必须是用户在上一轮对话里明确指认过的那一个不是 LLM 单方面从匹配结果自动选。这一硬约束同时在 skills/lark-wiki/SKILL.md 中被强调为关键安全约束。八、风险等级与确认门禁Riskhigh-risk-write框架会强制要求--yes确认不传--yes时命令会直接返回unsafe_operation_blocked错误不会真的发请求。当缺少--yes时CLI 以退出码10返回结构化的确认门禁错误见 skills/lark-shared/references/lark-shared-high-risk-approval.md。正确处理流程是识别 exit 10 与confirmation_required→ 向用户展示action、risk和关键参数等待显式同意 → 同意后将--yes追加到原始 argv 末尾重试绝不静默加确认 flag 绕过门禁也不要用sh -c等 shell 拼接方式重试用参数数组形式传参。[!CAUTION]wiki delete-space是不可逆的写入操作。执行前务必与用户再次确认--space-id并清楚该空间下的所有节点都会一并被删除。建议在真正执行前先用--dry-run让用户 review 请求详情。九、与其他命令的协作关系异步续跑轮询超时后的next_command指向drive task_result --scenario wiki_delete_space这是所有 Wiki/Drive 异步任务的统一结果查询入口聚合了导入、导出、移动、删除等多种场景详见 skills/lark-drive/references/lark-drive-task-result.md。同类异步删除删除单个 Wiki 节点使用wiki node-delete见 skills/lark-wiki/references/lark-wiki-node-delete.md两者共享同一套轮询基础设施。从 shortcuts/wiki/wiki_async_task.go 可以看到/wiki/v2/tasks/{task_id}对不同类型的任务把状态放在不同字段下delete-space 用delete_space_resultdelete-node 用通用的simple_task_result轮询循环与状态分类则统一复用pollWikiAsyncTask/parseWikiAsyncTaskStatus。完整命令列表知识库相关的全部 shortcut空间创建/列表、节点增删查、成员管理、移动等见 skills/lark-wiki/SKILL.md认证与全局参数、高风险操作审批协议见 skills/lark-shared/SKILL.md。参考lark-wiki — 知识库全部命令lark-shared — 认证和全局参数drive task_result — 异步任务的续跑查询命令lark-shared-high-risk-approval — exit 10 高风险确认门禁协议wiki node-delete — 同类异步删除节点的对照实现源码shortcuts/wiki/wiki_delete.go、shortcuts/wiki/wiki_async_task.go轮询参数、状态分类与续跑命令生成逻辑赞分享CLIAI 技能【免费下载链接】cliThe official Lark/飞书 CLI tool, maintained by the larksuite team — built for humans and AI Agents. Covers core business domains including Messenger, Docs, Base, Sheets, Calendar, Mail, Tasks, Meetings, and more, with 200 commands and 20 AI Agent Skills.项目地址https://gitcode.com/gh_mirrors/cli414/cli点击查看免费下载相关推荐飞书云空间安全删除实战指南lark-cli drive delete 命令的确认门禁、异步轮询与续跑机制飞书云空间安全删除实战指南lark cli drive delete 命令的确认门禁、异步轮询与续跑机制 本文以 lark drive Skill 中的 lCLIAI 技能lark-cli drive version-delete 完全指南删除飞书云空间文件历史版本lark cli drive version delete 完全指南删除飞书云空间文件历史版本 导读 本文围绕飞书官方 CLI 工具 lark cli 的CLIAI 技能Lark CLI 知识库Wiki成员管理决策指南空间解析、成员类型与安全删除的完整实战Lark CLI 知识库Wiki成员管理决策指南空间解析、成员类型与安全删除的完整实战 导读 本文是面向 lark cli Lark/飞书官方 CLICLIAI 技能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表