Skip to content

[REQ-128][CODE] 本地 Claude 插件读取与安装预览(纯读,零写盘) #780

Description

@jinjunnn

大白话

用户选一个 Claude 插件目录,我们只读不写地把它清点一遍:哪些技能能装、哪些不能装(说人话原因)、哪些组件类型这版不支持。本票执行前后,磁盘和账本逐字节不变

方案基线(已批,不重新裁决)

Phase 3 方案基线 —— 本票 = §10 的 T1-intake
基线经三候选评判 + Codex 方案审计两轮(R1 六 Blocker 三 Major 全部采纳;R2 七条 FIXED)。
§14 的两条残余(R2-a / R2-b)与 §6 的闸具同等效力,不得默认掉。

范围

新增 main/claude-plugin-intake.ts:布局判定(§3.2 五类不支持布局具名);读 plugin.json
version 选填 —— 27/62 真实 manifest 没有它,当必填会拒掉 44%);枚举 skills/*/SKILL.md
逐个跑既有 collectImportSkillPayload + parseSkillFrontmatter改为交出完整键集

  • 独立 lstat 自包含扫描;产 LocalPackagePreviewV1
    ext-ipcpickImportSkillDir 之后加分流点。

Acceptance and named gates

  1. 对本机真实语料全量跑并断言具体数字:62 插件 / 162 SKILL.md / 161 frontmatter 通过 /
    25 个 0-skill 插件 / 18 个自包含被拒 / 12 个控制字段被拒 / 135 可装

    夹具复制进仓,不依赖本机路径。
  2. G18 五类布局各一条(manifestless 用 receipts 的真实结构复制)。
  3. G16 自包含:symlink 合成夹具 + exec 位真实语料 9 个目录 + 一条真会调用支撑脚本的功能夹具。
    含 §14 R2-a:技能目录内含 node_modules / .git / __pycache__具名拒绝
    collector(ext-fs-installer.ts:478)必定静默跳过它们 ⇒ 不处置就是「预览接受、装完缺件」。
  4. G17 控制字段含 §14 R2-b(重要):检测口径是**「顶层键是否出现」
    与它有没有标量值无关 —— 真实语料 块式 7 个、标量式 4 个,
    而解析器的行正则
    要求冒号后有非空值** ⇒ 块式今天根本不进字典。
    负向夹具必须同时含块式与标量式(块式真实样本:imessage/skills/configure);
    只用标量式判为假闸。绕过记录:改回只返回 name/description ⇒ 12 个被放行 ⇒ 必须红。
    仍然零新增解析器:不解析块式的值、不引 YAML、不解析嵌套,只回答「这个顶层键在不在」。
  5. G9 / G13 具名结果:commands/ agents/ hooks/ .mcp.json 逐类具名;
    0-skill 插件(25 个)必须给具名终态,不是空成功
  6. G12 敌意夹具:symlink 逃逸 + 字面 NUL + 超长 frontmatter。枚举一律 -a
  7. G11 上限 —— 真界是 ext-transaction.ts:65064不是发布端的 maxComponents: 16
    (本路根本不过 decoder,拿 16 立闸是前提为假的闸)。在 preview 期具名拒绝,
    事务函数零调用(spy 断言调用次数 == 0)。合成 65 项负向夹具 —— 真实语料最大 13,
    拿它当期望值是假闸形态⑨。
  8. 重复导入在确认之前说清「先移除整包」。
  9. 本票执行前后 installs.json 与磁盘逐字节不变。

依赖

无,可立即开工。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:integrationRepository, API, or external integrationprio:P1High-value near-term deliverytype:featureNew user or system capability

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions