chadtmiller.com/knotless
Git hosted in your atproto account, on any stock PDS, fast enough for agents.
git clone knotless://chadtmiller.com/knotlessneeds the knotless git helper. set it up
CLI: knotless edit and knotless delete-comment
Showing 1 changed file with 24 additions and 0 deletions
crates/knotless/src/cli.rs+24−0
| @@ -87,6 +87,10 @@ const USAGE: &str = "usage: knotless <command> | ||
list <url> [--pulls | --issues] pulls and issues, newest first | ||
show <url> <at-uri> a pull or issue and its comments | ||
comment <url> <at-uri> <text> [--approve | --changes] | ||
edit <url> <at-uri> [--title <title>] [-m <body>] | ||
change your pull, issue or comment; | ||
-m '' drops a pull's or issue's body | ||
delete-comment <url> <at-uri> take back your comment or review | ||
close <url> <at-uri> | ||
reopen <url> <at-uri> | ||
branch <url> <name> [<from>] create a branch, at the default branch | ||
| @@ -427,6 +431,26 @@ async fn command( | ||
let uri = forge::comment(ctx, &url, subject, text, verdict).await?; | ||
writeln!(out, "{uri}")?; | ||
} | ||
"edit" => { | ||
let url = args.url()?; | ||
let subject = args.next("<at-uri>")?; | ||
let (mut title, mut body) = (None, None); | ||
while let Some(flag) = args.rest.next() { | ||
let slot = match flag.as_str() { | ||
"--title" => &mut title, | ||
"-m" => &mut body, | ||
other => bail!("unexpected {other}"), | ||
}; | ||
*slot = Some(args.next("<text>")?); | ||
} | ||
forge::edit(ctx, &url, subject, title, body).await?; | ||
writeln!(out, "edited")?; | ||
} | ||
"delete-comment" => { | ||
let url = args.url()?; | ||
forge::delete_comment(ctx, &url, args.next("<at-uri>")?).await?; | ||
writeln!(out, "deleted")?; | ||
} | ||
"close" | "reopen" => { | ||
let url = args.url()?; | ||
let subject = args.next("<at-uri>")?; | ||