Catalog npm
Back to packageRELEASE DETAILS

1.1.0

npm

115ctln

115 网盘 CLI + pi agent 插件 — 基于 115pan-node 的 TypeScript 实现

115115cloud115网盘clipanpi-agentpi-extension
Published25 Jul 2026
Direct dependencies6
Transitive dependenciesNot calculated

README

Current package documentation

115ctln

115 网盘 CLI 工具 + pi agent 插件 — 基于 115pan-node 的 TypeScript 实现

115ctl 的 Node.js 重构版,使用 115pan-node SDK (v0.0.2),提供完整的 115 云盘文件管理和 pi agent 深度集成。

🚨 风险警告 — 115 网盘风控须知

115 网盘对 API 请求频率极其敏感,错误的操作方式会导致账号被风控甚至封禁。 AI Agent 使用本工具时必须遵守以下规则。

核心原则

原则说明
🔴 单线程串行所有写操作必须串行执行,禁止并发。多线程 rename 会导致文件系统损坏(见 Issue #1)
⏱ 操作间隔每个写操作间至少间隔 3 秒。批量操作时每 10-15 个操作暂停 30 秒
🐢 宁慢勿快115 没有提供官方 API,所有接口均属逆向。宁可操作慢,不可被封控
📋 先预览再执行批量操作前先用 ls/stat/find 确认目标,减少无效请求

禁止行为

❌ ThreadPoolExecutor + 并发 rename      → 文件变空目录,不可恢复
❌ 每秒超过 3 次 API 请求                 → 触发 429 风控
❌ 短时间内大量删除/移动操作              → 账号临时限制
❌ 忽略 429 错误继续请求                  → 冷却期延长甚至封禁

推荐做法

# ✅ 串行 rename
115ctln rename /path/file1 new_name1
sleep 3
115ctln rename /path/file2 new_name2

# ✅ 小批量删除,间隔执行
115ctln rm /path/file1
sleep 3
115ctln rm /path/file2

# ✅ 操作前先用 --dry-run 风格预览(ls/stat)
115ctln ls /path --json          # 先看有什么
115ctln stat /path/file --json   # 再看是不是要操作的

环境变量调优

变量说明默认
_115CTLN_WRITE_DELAY写操作间隔(毫秒)3000
DEBUG 或 NODE_ENV=debug显示完整错误调用栈(调试用)关闭

🎯 设计目标

维度说明
替代 115ctl使用 115pan-node 替代 115driver,从 Go 迁移到 TypeScript
Pi Agent 原生集成同时提供 CLI 和 pi extension 两种入口
渐进兼容CLI 命令和参数尽可能与 115ctl 保持一致

🏗 架构

115ctln/
├── src/
│   ├── index.ts          ← pi extension 入口(注册11个自定义工具)
│   ├── cli.ts            ← CLI 入口(commander)
│   ├── client.ts         ← CloudClient — 115pan-node 封装层
│   ├── config.ts         ← 配置加载(兼容 media115/config.toml)
│   ├── util.ts           ← 工具函数(解析器、分类器)
│   ├── types.ts          ← 共享类型定义
│   ├── commands/         ← CLI 命令实现(与工具共享逻辑)
│   │   ├── ls.ts, stat.ts, mv.ts, rename.ts, rm.ts, mkdir.ts
│   │   ├── find.ts, tree.ts, scan.ts, doctor.ts, auth.ts
│   │   └── link.ts, share.ts
│   └── tools/            ← (预留) 纯 tool 实现
├── SKILL.md              ← pi agent skill 描述
├── USAGE.md              ← 使用规范
└── package.json

两种使用方式

CLI                           Pi Extension
───────                       ─────────────
node dist/cli.js ls /JAV      LLM 调用 list_files
node dist/cli.js mv a b       LLM 调用 move_file
node dist/cli.js scan /JAV    LLM 调用 scan_videos

🚀 安装

# 1. 克隆
git clone http://192.168.2.222:13050/yxin/115ctln.git
cd 115ctln

# 2. 安装依赖
npm install

# 3. 构建
npm run build

# 4. 全局安装(可选)
npm link

⚡ 快速开始

# 配置 cookies
export 115_COOKIES="UID=...; CID=...; SEID=..."

# 检查连接
115ctln doctor --json

# 列出目录
115ctln ls /JAV --json

# 移动文件
115ctln mv /src/file.mp4 /dst/

🔌 Pi Extension 集成

在 ~/.pi/settings.json 中添加:

{
  "packages": ["/path/to/115ctln"]
}

重启 pi 后,LLM 自动获得 11 个自定义工具(list_files、stat_file、move_file 等)。

📋 功能对照

功能115ctl (Go)115ctln (TS)
ls / ls -R✅✅
stat / stat --by-id✅✅
mv / mv --by-id✅✅
rename / rename --by-id✅✅
rm / rm --by-id✅✅
mkdir✅✅
find✅✅
tree✅✅
scan / scan -R✅✅
doctor✅✅
auth qr✅✅
link⏳ (需 OpenList)✅ (115原生)
share✅ (需 OpenList)⏳
upload✅ (需 OpenList)⏳
sync (缓存)✅⏳
batch-rename✅⏳
Pi extension 工具❌✅

📄 License

MIT

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 6

Native requirements
6 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
commander
Environment
{
  "local_name": "commander",
  "alias": false,
  "peer_metadata": null
}
^13.0.0runtime
115pan-node
Environment
{
  "local_name": "115pan-node",
  "alias": false,
  "peer_metadata": null
}
^0.0.2runtime
@types/bun
Environment
{
  "local_name": "@types/bun",
  "alias": false,
  "peer_metadata": null
}
latestdevelopment
typescript
Environment
{
  "local_name": "typescript",
  "alias": false,
  "peer_metadata": null
}
^5.7.0development
typebox
Environment
{
  "local_name": "typebox",
  "alias": false,
  "peer_metadata": null
}
*peer
@earendil-works/pi-coding-agent
Environment
{
  "local_name": "@earendil-works/pi-coding-agent",
  "alias": false,
  "peer_metadata": null
}
*peer

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "43e95a2967a2f7a9cc9073407a171b814d655876",
  "tarball": "https://registry.npmjs.org/115ctln/-/115ctln-1.1.0.tgz",
  "fileCount": 6,
  "integrity": "sha512-p1qSTK2Al0lGSI1pooFECz68zWeDoOyyvExo3zB9IddkROLRgq/AdPTGAOQDBDo0w+9GVr8/zvvK0SMo8mY8SQ==",
  "signatures": [
    {
      "sig": "MEQCIGH2hbrJNVWTXyOgxMj+MMyGaktiX2s2Bx/4qdUG9+S0AiBKHIop1ZHINOfeAgDbdQXpGgK/TajypWhRJl3vaa9ogA==",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    }
  ],
  "unpackedSize": 545263
}

Repository

PENDING
wwyxin/115ctln

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 18:05 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:4ac79de247f1ba44c791dc9ffff0ea239739b3f44ba7826564cc3b994b01ec35

Other collected versions

1.7.227 Jul1.7.127 Jul1.7.027 Jul1.6.227 Jul1.6.127 Jul1.5.525 JulView all collected versions →