Files
claude-code/src/commands/autofix-pr/parseArgs.ts
claude-code-best 6766f08e47 feat: 添加 GitHub 集成命令(issue、share、autofix-pr)
- /issue: 通过 gh CLI 创建 GitHub issue,支持标签/指派
- /share: 会话日志分享到 GitHub Gist,支持密钥脱敏
- /autofix-pr: 自动修复 CI 失败的 PR,进度追踪
- launchCommand: 共享命令启动器

Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
2026-05-09 23:04:23 +08:00

39 lines
1.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export type ParsedArgs =
| { action: 'stop' }
| { action: 'start'; prNumber: number; owner?: string; repo?: string }
| { action: 'freeform'; prompt: string }
| { action: 'invalid'; reason: string }
/**
* Parse a PR-number string. Restricts to 1..9_999_999_999 (110 digits, no
* leading zero) so we never produce 0, negatives, or unsafe integers.
*/
export function parsePrNumber(raw: string): number | null {
if (!/^[1-9]\d{0,9}$/.test(raw)) return null
const n = Number(raw)
return Number.isSafeInteger(n) ? n : null
}
export function parseAutofixArgs(raw: string): ParsedArgs {
const trimmed = raw.trim()
if (!trimmed) return { action: 'invalid', reason: 'empty' }
if (trimmed === 'stop' || trimmed === 'off') return { action: 'stop' }
const bareNum = parsePrNumber(trimmed)
if (bareNum !== null) {
return { action: 'start', prNumber: bareNum }
}
const cross = trimmed.match(/^([\w.-]+)\/([\w.-]+)#(\d+)$/)
if (cross) {
const crossNum = parsePrNumber(cross[3] as string)
if (crossNum === null)
return { action: 'invalid', reason: 'pr_number_out_of_range' }
return {
action: 'start',
owner: cross[1],
repo: cross[2],
prNumber: crossNum,
}
}
return { action: 'freeform', prompt: trimmed }
}