Skip to content

feat: edit a shared secret everywhere, repo links, agent dry runs - #387

Merged
cvince merged 7 commits into
mainfrom
vince/cap-698-secrets-multi-edit
Oct 4, 2026
Merged

cvince merged 7 commits into
mainfrom
vince/cap-698-secrets-multi-edit

Conversation

@cvince

@cvince cvince commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

feat: edit a shared secret everywhere, repo links, agent dry runs

Repo links (CLI side of capysc/capy#603): the CLI reports each
project's origin repo and repo-relative keep.lock folder (also from
capy run), warns on KEEP_LOCK_REPO_MISMATCH, and capy projects --json
lists repos. REPO_LINKS_UNSUPPORTED when the server predates it.

capy secrets multi edit: open a row (ctrl+e, or e in details) into an
Old value / New value dialog (ctrl+r reveals both), pick locations and
repos in tables (◉/◯), push every location and open one keep.lock PR
per repo on its default branch. capy secrets --dry-run walks the same
flow and changes nothing. Pushes run 6 at a time and PRs 4 at a time,
with one key unlock per run, pacing on RateLimit-Remaining and 429
retries (RATE_LIMITED, GITHUB_RATE_LIMITED). Every GitHub and Capy call
is time-bounded (GITHUB_TIMEOUT) and ctrl+c stops after the items in
flight.

capy secrets set NAME is the agent form: value on stdin only,
--row/--all-rows/--exclude/--no-pr-for/--no-pr, --dry-run plan with a
plan_id, and a required --confirm <plan_id> (PLAN_CONFIRM_REQUIRED,
PLAN_CHANGED, SECRET_AMBIGUOUS).

capy edit NAME, capy add NAME and capy remove honour --dry-run on their
agent paths and refuse it (DRY_RUN_UNSUPPORTED) on the interactive
screens; capy help --json marks supportsDryRun.

cvince added 7 commits October 2, 2026 23:28
One shared matcher (the capy secrets search rule) and searchable
single and multi-select prompts for the capy setup, org, Dokploy,
Vercel, invite and users pickers. Existing hotkeys are unchanged;
the invite checkbox starts search with /.
Removes the global --web option and every web-only path and screen.
Browser pages opened without --web (deploy pages, login callback)
stay. Passing --web now refuses with WEB_MODE_REMOVED (exit 1).
capy add drops --reason, --help-url and --no-open.
feat!: remove the --web browser screens
feat: type-to-filter in every project picker
The searchable pickers import @inquirer/core directly. It was already
installed as an inquirer dependency at the same version; check:screens
only needs it listed.
Repo links (CLI side of capysc/capy#603): the CLI reports each
project's origin repo and repo-relative keep.lock folder (also from
capy run), warns on KEEP_LOCK_REPO_MISMATCH, and capy projects --json
lists repos. REPO_LINKS_UNSUPPORTED when the server predates it.

capy secrets multi edit: open a row (ctrl+e, or e in details) into an
Old value / New value dialog (ctrl+r reveals both), pick locations and
repos in tables (◉/◯), push every location and open one keep.lock PR
per repo on its default branch. capy secrets --dry-run walks the same
flow and changes nothing. Pushes run 6 at a time and PRs 4 at a time,
with one key unlock per run, pacing on RateLimit-Remaining and 429
retries (RATE_LIMITED, GITHUB_RATE_LIMITED). Every GitHub and Capy call
is time-bounded (GITHUB_TIMEOUT) and ctrl+c stops after the items in
flight.

capy secrets set NAME is the agent form: value on stdin only,
--row/--all-rows/--exclude/--no-pr-for/--no-pr, --dry-run plan with a
plan_id, and a required --confirm <plan_id> (PLAN_CONFIRM_REQUIRED,
PLAN_CHANGED, SECRET_AMBIGUOUS).

capy edit NAME, capy add NAME and capy remove honour --dry-run on their
agent paths and refuse it (DRY_RUN_UNSUPPORTED) on the interactive
screens; capy help --json marks supportsDryRun.
On CI's Linux runner an earlier batch file left process.stdout.isTTY
unassignable, so terminalQr.test.ts failed with "readonly property".
Run it in its own process, set the TTY fields with defineProperty, and
make the dryRunInteractive and secretsCommand stubs writable and
restored.
@cvince
cvince merged commit 1977529 into main Oct 4, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant