用途:在不依赖 Bluesky AppView 的前提下读取 ATProto/Bluesky 数据,数据来源选择能独立存活的层:已知仓库的记录走其 PDS,互动关系走 Constellation,身份与迁移走 plc.directory,全网活跃集合走 UFOs。搜索、feed 生成器、聊天只能走 AppView,没有替代。
用法:python3 <skill>/scripts/atproto.py <command> [--json]。默认输出 digest,适合作记录;仅当需要程序化转换结果时用 --json。命令包括:feed(重建 Following 时间线并串联)、status(判断当前哪层故障)、interactions(谁点赞/回复/转发/引用)、thread(帖子回复)、posts(某个 actor 的帖子)、records(任意集合)、resolve(DID、handle、PDS 主机)、backlinks(任意 lexicon 中引用某记录或账号的内容)、identity(PLC 审计日志中的改名与迁移)、lexicons(全网活跃集合,--others 排除官方前缀,--schema NSID 拉取已发布的 lexicon 文档)。
能力与限制:interactions 与 backlinks 为两阶段查询,先用 links/all 判断非空路径再枚举。feed 为复合读取,由关注关系重建时间线,并补全 AppView 本会内联的内容;排名、静音、屏蔽属于 AppView,天然缺失。时间来自记录键中的 TID,仅供近似排序。第三方 PDS 可能被出口屏蔽(约 3% 的关注图自建 PDS),读取会给出 allowlist 提示。不可用(出口屏蔽、4xx、重试耗尽)时 CLI 以退出码 2 结束并把原因写到 stderr,应报告哪一层失败。状态使用 /tmp 下的 SQLite 缓存(可用 ATPROTO_CACHE 迁移),为会话级设计。写入不在本技能范围内,发帖可用 muninn_utils.bsky_card。