Skip to content

体检后续:修复 npm 文档死链、CRLF 围栏与类型检查告警 #69

Description

@tt-a1i

背景

在当前 main@22e77d63b7c23b13e14d47f166e9b295b21c4b97 上复核 OpenPI 体检报告。构建与测试保持通过,但确认存在两项发布制品完整性问题和三项低风险质量债。

本 Issue 只记录已复现的问题;Sessions 扩展使用 .js 相对导入后缀仅是局部历史风格,当前运行、类型检查和测试均正常,不作为缺陷处理。

P1:npm 发布制品中的文档引用不完整

1. README 相对链接在安装包内没有目标

package.json#files 不包含 docs/,但 README 仍有:

  • docs/design/WORKFLOW_INVOCATION_GRAPH.md
  • docs/design/

复现:

npm pack --dry-run --json

实际 packlist 包含 README.md,但不包含任何 docs/ 文件。GitHub 仓库页面可解析这些链接,安装后的 npm 制品本地却无法解析。

建议: README 改为指向 GitHub main 的绝对链接。除非明确希望发布整套研究文档,否则不建议为了两处链接扩大 npm 制品。

2. Subagent Skill 引用被 packlist 排除的文档

skills/subagents/SKILL.md:13 引用:

extensions/subagents/docs/agent-types.md

仓库中目标存在,但 package.json#files!extensions/*/docs 会将其从安装包排除。实测 packlist 包含 Skill,却不包含目标文档。

这会直接破坏安装后 Skill 的渐进披露链路。

建议: 将用户/Agent 需要读取的 agent-types 参考文档移到 skills/subagents/(例如 REFERENCE.md)并使用同目录相对链接;内部设计笔记继续留在扩展目录且不发布。

P2:CRLF fenced code block 被误判为未闭合

extensions/user-input-fold/index.ts 使用 markdown.split("\n"),因此 CRLF 行保留结尾 \r;当前:

const FENCE_CLOSE = /^ {0,3}`{3,}[ \t]*$/;

无法匹配以 CRLF 结尾的关闭围栏行。

同一条长 fenced message 的实测:

LF:   fence count = 2,保留闭合 fence
CRLF: fence count = 1,走 unterminated-fence prose fallback

结果是折叠后的展示可能留下未闭合 Markdown fence。模型上下文和持久历史不受影响,但 TUI 投影不正确。

建议: 在行解析边界统一处理 CRLF,或让关闭 fence 显式接受尾部 \r;补一条包含长代码围栏的 CRLF 回归测试,要求 fence 成对且折叠结构与 LF 等价。

P2:Effect TypeScript 插件仍报告 12 条 warning

bun run check 当前退出码为 0,Biome lint 也干净;但 bun run typecheck 会在 extensions/file-search/src/binaries.ts 输出 12 条 Effect warning:

  • 11 条 TS377023 globalErrorInEffectFailure
  • 1 条 TS377033 multipleEffectProvide

因此应准确描述为“Effect TypeScript 插件 warning”,不是 Biome lint failure。

建议: 使用带 tag 的领域错误并合并 Layer provide;若某条确实需要保留,使用最窄范围、带原因的显式抑制,不要全局关闭规则。

P2:文档和模型提示引用不存在的 /handoff

已确认以下位置把 /handoff 描述成可用入口:

  • SETUP.md:74
  • extensions/context-pivot/index.ts 的低于阈值提示
  • context_pivot 工具说明

OpenPI 没有 /handoff 命令;可选的 pi-intercom 提供的是 pi-intercom Skill、intercom 工具和 /intercom-id,也没有 /handoff

建议: 改为真实路径:同一会话阶段切换用 /context-pivot,会话浏览/切换用 /sessions,需要跨顶层 Session 传递上下文时使用可选 pi-intercom。不要暗示一个不存在的 Slash Command。

验收标准

  • npm pack --dry-run 后,README 和已发布 Skills 的仓库内相对链接均能在制品中解析,或已改成稳定的 GitHub 绝对链接
  • Subagent Skill 的 agent-types 参考资料随 npm 制品发布
  • LF 与 CRLF 长 fenced message 都输出成对 fence,且折叠语义一致
  • bun run typecheck 不再输出上述 12 条 Effect warning,或每个保留项都有窄范围书面理由
  • OpenPI 文档和模型提示不再宣传不存在的 /handoff
  • bun run checkbun run test 通过

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions