Skip to content

release: v0.9.2 - #7

Merged
rozx merged 4 commits into
mainfrom
release/0.9.2
Oct 25, 2026
Merged

rozx merged 4 commits into
mainfrom
release/0.9.2

Conversation

@rozx

@rozx rozx commented Oct 25, 2026

Copy link
Copy Markdown
Owner

PikPak DL CLI v0.9.2

发布日期:2026-10-25

提取码缺失或错误时,分享不再一直显示“扫描中”,可以在界面里直接补填提取码;也能识别只有链接和一行提取码的分享文本。

改进

  • 在界面中补填提取码:分享因提取码缺失或错误而停下时,选中该分享按 Enter 打开提取码输入框,提交后立即重新扫描。按键提示中的 Enter 会相应显示为“提取码”。提取码只能是 1 到 32 位字母或数字,格式不对时在输入框内说明。
  • 识别单独一行的提取码:整段文本只有一行链接和一行提取码(中间可以有空行)时,即使没有“提取码:”之类的标注,也能识别。其他没有标注的文字仍不当成提取码。

修复

  • 扫描失败不再显示为“扫描中”:提取码被拒绝、分享已失效或扫描多次失败时,分享行以红色显示原因,不再显示“扫描中”和动态图标。提取码问题分为“分享需要提取码”和“提取码错误”两种,分别显示。

下载

平台 文件
macOS Apple 芯片 pikpak-dl-cli-darwin-arm64
macOS Intel pikpak-dl-cli-darwin-x64
Windows x64 pikpak-dl-cli-windows-x64.exe
Windows arm64 pikpak-dl-cli-windows-arm64.exe
Linux x64(glibc) pikpak-dl-cli-linux-x64
Linux arm64(glibc) pikpak-dl-cli-linux-arm64

SHA256SUMS.txt 列出各文件的校验和。

升级说明

直接替换可执行文件即可。任务库结构不变,不需要迁移或重新登录。

升级前已经因提取码停下的分享仍显示“分享需要提取码,或提取码不正确”,同样可以按 Enter 补填提取码。

已知问题与待验收

  • 提取码输入框尚未在真实终端中手动演练,目前只经过自动化界面测试。
  • 之后单独复制的提取码仍不会自动配对到等待中的分享,需要按 Enter 输入,或重新复制包含链接和提取码的完整文本。
  • v0.9.1 与 v0.8.1 列出的待验收项仍然有效。

🤖 Generated with Claude Code

rozx and others added 4 commits October 25, 2026 00:27
- Recognize a link followed by a lone pass code line as a paired share.
- Record missing and wrong pass codes as separate scan reasons.
- Show failed scans in red instead of "scanning"; press Enter on a share
  waiting for a pass code to type it and scan again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@rozx rozx added the release 合并后构建并发布 label Oct 25, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-25T04:32:31.266071Z d9b6ca7 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@rozx
rozx merged commit f03300c into main Oct 25, 2026
1 check passed
Comment thread src/tui/pages.tsx
return (
<Box marginLeft={2} borderStyle="round" {...theme.enabled ? { borderColor: "cyan" } : {}} flexDirection="column" paddingX={2} width={Math.min(width, 76)} height={PASS_CODE_LINES}>
<Text {...theme.paint("active")} bold wrap="truncate-end">{text.title(share)}</Text>
<Text><Text {...theme.paint("muted")}>{text.label}</Text><Text {...theme.paint("strong")}>{draft}</Text><Text {...theme.paint("key")}>▏</Text></Text>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: PassCodeBox input row lacks wrap="truncate-end", so a long draft wraps and pushes the message row out of the fixed-height box

Nothing caps the draft length while typing or pasting (src/tui/app.tsx:195-200), so a long draft — e.g. accidentally pasting the whole share text into the code box — makes this row wrap to a second line. The box height is exactly PASS_CODE_LINES = 5 (border + title + input + message, zero slack), so the wrapped row pushes the message/hint row out of view, including the 提取码应为 1 到 32 位字母或数字 feedback shown after a failed submit. Every PasteBox content row uses wrap="truncate-end" (pages.tsx:209-212); this is the only input row missing it.

Suggested change
<Text><Text {...theme.paint("muted")}>{text.label}</Text><Text {...theme.paint("strong")}>{draft}</Text><Text {...theme.paint("key")}>▏</Text></Text>
<Text wrap="truncate-end"><Text {...theme.paint("muted")}>{text.label}</Text><Text {...theme.paint("strong")}>{draft}</Text><Text {...theme.paint("key")}>▏</Text></Text>

Comment thread src/runtime/session.ts
} else if (command.kind === "setPassCode") {
// 只报告失败;成功由下面的命令事件确认,不再发出“已接收”。提取码不进入事件。
const intake = await this.receiver.receivePassCode(command.id, command.passCode);
if (intake.failure) { this.report(intake); return { ok: false, reason: intake.failure }; }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: Pass-code save failure is reported through report(), which pauses the engine as a database problem and emits a generic, misleading event

report() (session.ts:214) calls this.engine.blockPersistence() → pause("database") (engine.ts:77) and emits intake_failed, rendered as “部分输入未确认接收,请重新复制” (zh-CN.ts:215). For a pass code typed into the new input box, “请重新复制” is the wrong advice (there is nothing to re-copy), and a credentials failure (secret store unavailable — failureOf, receiver.ts:8) pauses the queue labeled as a database failure. The box already shows the precise reason via result.reason (app.tsx:192), so consider handling this failure without blockPersistence/intake_failed, or with a dedicated event/reason.

Comment thread docs/clipboard.md
标注后可以跟冒号(含全角)、等号、空格或“是/为”,码也可以放在括号或引号里;冒号在行尾时,码可以单独写在下一行,但这一行须是最后一行或后面空一行(否则可能是模板里的文件名,不会当成提取码)。英文等以空格分词的语言,标注与码之间需要冒号、等号或 `is`。解压密码、账号或登录密码、Vault 加密分享的密钥和 Wi-Fi 密码不会被当成提取码。标注后同一行没有内容时按未提供提取码处理;PikPak 网页版的日文界面复制的文本就是这样(“パスワード:”后面是空的),需要补上提取码后重新复制或粘贴。

也支持链接内明确标记的 `pwd`、`password`、`passcode` 或 `pass_code` 参数;无码分享可以只复制链接。真实缺码、错误码分别已观察到 `PASS_CODE_EMPTY`、`PASS_CODE_ERROR`,应等待新的完整文本,不把它们当成全局账号失效。
没有任何标注时,只有一种写法会被识别:整段文本只有一行链接和一行单独的提取码(中间可以有空行)。其他没有标注的文字一律不当成提取码。

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: Document the constraints of the unlabeled two-line form: the code must be 4–32 letters/digits and the link line must contain only the link

loneCode (src/intake/parse.ts:81) only pairs the second line when it is 4–32 alphanumeric characters (NFKC-normalized) and the first line matches /^https?:\/\/\S+$/ (URL only). A 1–3 character code, or a link line with extra text, is silently not recognized (tests/share-text.test.ts:62-63) and the share is accepted without a code. This sentence — and its parallels in docs/en/clipboard.md, docs/ja/clipboard.md, and docs/releaseNotes/v0.9.2.md — states no limits, while openspec/specs/clipboard-intake/spec.md explicitly requires “一行仅含 4 到 32 位字母数字的行”. The release notes' nearby “提取码只能是 1 到 32 位” (about the input box) invites readers to assume the same range applies to the copied two-line shape. Mentioning the minimum length would avoid that confusion.

@kilo-code-bot

kilo-code-bot Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Code Review Summary

Status: 3 Issues Found | Recommendation: Address in a follow-up (PR was merged during review)

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 2
Issue Details (click to expand)

WARNING

File Line Issue
src/tui/pages.tsx 224 PassCodeBox input row lacks wrap="truncate-end"; a long draft (e.g. pasting full share text) wraps and clips the hint/message row inside the fixed 5-line box, hiding the invalid-format feedback

SUGGESTION

File Line Issue
src/runtime/session.ts 175 Pass-code save failure routes through report() → blockPersistence() ("database" pause) and a generic intake_failed event whose "请重新复制" advice is wrong for a typed pass code; a credentials failure is also mislabeled as a database pause
docs/clipboard.md 17 Unlabeled two-line form omits the 4–32 length minimum and link-only-line constraint (same gap in en/ja clipboard docs and docs/releaseNotes/v0.9.2.md, which conflicts with the nearby "1 到 32 位" input-box rule)
Files Reviewed (28 files)
  • src/intake/parse.ts — no issues (loneCode NFKC normalization verified safe end-to-end via downstream codes()/valueAt)
  • src/intake/receiver.ts — no issues (throws are caught by RuntimeSession.apply's catch-all)
  • src/pikpak/shares.ts — no issues (all ShareScanError.reason values validated against finishScan and i18n coverage)
  • src/runtime/engine.ts — no issues (scan_waiting reason flow verified; interrupted never reaches the event)
  • src/runtime/session.ts — 1 suggestion
  • src/tui/app.tsx — no issues (input isolation via isActive guards verified; run() cannot throw)
  • src/tui/main-panel.tsx — no issues (scanning/failed states mutually exclusive; spinner fix correct)
  • src/tui/pages.tsx — 1 warning
  • src/tui/view-model.ts — no issues (explain() has a total fallback for every reachable lastError)
  • src/i18n/messages/zh-CN.ts, en.ts, ja.ts — no issues (full key parity across 44 reason keys and all new sections; type-enforced)
  • tests/share-text.test.ts, tests/shares.test.ts, tests/runtime-session.test.ts, tests/tui-screens.test.tsx — no issues (assertions match implementation)
  • package.json — no issues
  • README.md, README.en.md, README.ja.md — no issues (key-table and clipboard claims verified accurate)
  • docs/clipboard.md, docs/en/clipboard.md, docs/ja/clipboard.md — 1 suggestion (shared omission)
  • docs/releaseNotes/v0.9.2.md — covered by the docs suggestion
  • openspec/changes/archive/2026-10-25-fix-share-pass-code-waiting/* (5 files), openspec/specs/clipboard-intake/spec.md, openspec/specs/terminal-ui/spec.md — no issues (archive deltas byte-identical to live specs; design decisions 1–4 all trace to code)

Reviewed by glm-5.3 · Input: 99.8K · Output: 28.5K · Cached: 722.2K

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release 合并后构建并发布

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant