Skip to content

fix(plugins): read Square HTTPS sources with the Block SSH agent - #2465

Merged
bostonaholic merged 1 commit into
mainfrom
bostonaholic--plugin-https-squareup-ssh
Nov 5, 2026
Merged

bostonaholic merged 1 commit into
mainfrom
bostonaholic--plugin-https-squareup-ssh

Conversation

@bostonaholic

@bostonaholic bostonaholic commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Why

Adding a plugin from an HTTPS URL for a private repository under github.com/squareup fails with Git could not read this repository: … could not read Username for 'https://github.com': terminal prompts disabled. Imports run Git without credential helpers or interactive prompts, so the HTTPS clone is anonymous. The same repository is readable over SSH with the Block agent the importer already supports for ssh://[email protected]/squareup/… sources.

What

On macOS, when the Block SSH agent socket exists, an https://github.com/squareup/… source (default port, no relay authorization) is cloned over ssh://[email protected]/squareup/… with that agent. The saved source keeps the HTTPS URL the user entered, so updates apply the same transport. Without the socket, or on other platforms, behavior is unchanged.

Paths containing % no longer select the Block agent for either form. Git decodes SSH paths, so %2F.. could leave /squareup/ after the prefix check.

Risk

When the socket exists, public squareup repositories entered as HTTPS also go through the agent. If the agent is unusable they fail where anonymous HTTPS used to work. The plugin architecture doc states this.

Testing

  • New block_agent_reads_squareup_https_over_ssh failed on the rewrite assertion before the change and passes after it. The selection test now also covers non-Square HTTPS, non-default ports, lookalike hosts, and percent-encoded paths. It failed without the % guard.
  • buzzodz-plugins tests, clippy (-D warnings), and fmt pass.
  • On macOS with SSH_AUTH_SOCK unset, prepare_git reads a private squareup repository from its HTTPS URL. The recorded source is the HTTPS URL.
  • Not yet tested: the Add a plugin flow in the native app, and the non-macOS cfg branch (only read, not built). No test covers the prepare_git_authorized wiring between the clone URL and the saved source.

🤖 Generated with Claude Code

@bostonaholic

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 4, 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-11-04T18:48:55.614012Z c02d516 Manual request
ℹ️ 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.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Swish!

Reviewed commit: c02d51642c

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@bostonaholic
bostonaholic marked this pull request as ready for review November 4, 2026 18:52
@bostonaholic
bostonaholic requested a review from a team as a code owner November 4, 2026 18:52
@bostonaholic
bostonaholic force-pushed the bostonaholic--plugin-https-squareup-ssh branch from ccee748 to e3d7028 Compare November 4, 2026 18:55

@kazemek21 kazemek21 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Kyle reviewed this PR and the Nexus review-tracker notes and approved with no comments.

Posted by Codex (gpt-6.1-sol) on behalf of kylez

@bostonaholic
bostonaholic added this pull request to stack #2515 November 4, 2026 22:45
@bostonaholic
bostonaholic force-pushed the bostonaholic--plugin-https-squareup-ssh branch from e3d7028 to b5ef7c2 Compare November 4, 2026 22:47
Adding a plugin from an HTTPS URL for a private repository under
github.com/squareup failed with "could not read Username for
'https://github.com': terminal prompts disabled". Imports run Git
without credential helpers or prompts, so the HTTPS clone is anonymous.

On macOS, when the Block agent socket exists, clone such HTTPS sources
over ssh://[email protected]/squareup/... with that agent. The
saved source keeps the HTTPS URL. Paths containing `%` no longer select
the agent, because Git decodes SSH paths after the `/squareup/` check.

Co-authored-by: mboston Implementer <932d3b6ebea6cc83e091551ae46d1c7e7f8f7d0fa8e9cef5e6facc8544af413b@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Matthew Boston <[email protected]>
@bostonaholic
bostonaholic force-pushed the bostonaholic--plugin-https-squareup-ssh branch from b5ef7c2 to f57b2c9 Compare November 4, 2026 23:47
@bostonaholic
bostonaholic merged commit ebbdb5a into main Nov 5, 2026
75 of 77 checks passed
@bostonaholic
bostonaholic deleted the bostonaholic--plugin-https-squareup-ssh branch November 5, 2026 00:21
cheng-block added a commit to cheng-block/buzz-app that referenced this pull request Nov 5, 2026
…punctuation

* upstream/main: (78 commits)
  fix(plugins): read Square HTTPS sources with the Block SSH agent (block#2465)
  feat(plugins): let agents request plugin changes for owner review (block#2280)
  fix(messages): keep the hover toolbar while its menu is open (block#2439)
  feat(workflows): suggest channel members for @ in Send Message text (block#2309)
  AIDA-2344: Exclude muted channels from Dock (block#2313)
  feat(search): add slack-style message search operators on desktop (block#2463)
  test: fix invitation and coordination checks on main (block#2517)
  perf(search): name searched people from the profile search response (block#2353)
  Use the merge queue for pull requests that require it (block#2452)
  fix(browser): load scheme-less address input over https, falling back to http (block#2467)
  fix(identity): stop one-click key unlinks and show the linked backed-up key (block#2486)
  fix(test): observe coordination transition events (block#2297)
  fix(profiles): keep the next view's profile reads through a shrink (block#2395)
  fix(channels): show Add and Send message errors above the Manage members list (block#2421)
  fix(threads): keep reply hooks off agent activity bubbles (block#2422)
  fix(channels): offer only Copy link in a not-joined preview's sidebar actions (block#2425)
  test: scope row menu placement checks to active section rows (block#2493)
  feat(relay): detach channel windows to a point in history (block#2042)
  feat(identity): decide a missing backup choice from community membership (block#2378)
  Offer Builderlab decisions in FI builds (block#2227)
  ...

Signed-off-by: Cheng Peng <[email protected]>

# Conflicts:
#	docs/buzz-help.md
gilgtm added a commit that referenced this pull request Nov 5, 2026
…lled-read

* origin/main: (28 commits)
  Run native Codex through plugin execution targets (#2150)
  test: split Solo access browser scenarios (#2499)
  feat(agents): let any agent change Buzz settings through the MCP (#2248)
  Let plugins decorate host sidebar rows and add sort modes (#1853)
  NEXUS-4082: Keep the new-message boundary stable during a visit (#2083)
  feat(agents): move version history into settings (#2374)
  fix(agents): read goose Activity by saved session ids and render memory bodies on open (#2466)
  feat(channels): starter channels: admin switch and relay auto_join flag (#1624)
  fix(plugins): read Square HTTPS sources with the Block SSH agent (#2465)
  feat(plugins): let agents request plugin changes for owner review (#2280)
  fix(messages): keep the hover toolbar while its menu is open (#2439)
  feat(workflows): suggest channel members for @ in Send Message text (#2309)
  AIDA-2344: Exclude muted channels from Dock (#2313)
  feat(search): add slack-style message search operators on desktop (#2463)
  test: fix invitation and coordination checks on main (#2517)
  perf(search): name searched people from the profile search response (#2353)
  Use the merge queue for pull requests that require it (#2452)
  fix(browser): load scheme-less address input over https, falling back to http (#2467)
  fix(identity): stop one-click key unlinks and show the linked backed-up key (#2486)
  fix(test): observe coordination transition events (#2297)
  ...

Signed-off-by: Gil Birman <[email protected]>
Co-authored-by: Claude <[email protected]>

# Conflicts:
#	docs/buzz-help.md
cheng-block added a commit to cheng-block/buzz-app that referenced this pull request Nov 5, 2026
…ettings-shift-esc

* upstream/main: (91 commits)
  test(browser): click timeline rows only after the timeline settles (block#2560)
  ci: split Vitest across six shards so 3/4 stops hitting the job cap (block#2571)
  feat(github): unfurl PR and issue links inline with their title (block#1693)
  fix(auth): style federated sign-in callback pages (block#2549)
  fix(agents): align creation model controls with identity (block#2480)
  Run native Codex through plugin execution targets (block#2150)
  test: split Solo access browser scenarios (block#2499)
  feat(agents): let any agent change Buzz settings through the MCP (block#2248)
  Let plugins decorate host sidebar rows and add sort modes (block#1853)
  NEXUS-4082: Keep the new-message boundary stable during a visit (block#2083)
  feat(agents): move version history into settings (block#2374)
  fix(agents): read goose Activity by saved session ids and render memory bodies on open (block#2466)
  feat(channels): starter channels: admin switch and relay auto_join flag (block#1624)
  fix(plugins): read Square HTTPS sources with the Block SSH agent (block#2465)
  feat(plugins): let agents request plugin changes for owner review (block#2280)
  fix(messages): keep the hover toolbar while its menu is open (block#2439)
  feat(workflows): suggest channel members for @ in Send Message text (block#2309)
  AIDA-2344: Exclude muted channels from Dock (block#2313)
  feat(search): add slack-style message search operators on desktop (block#2463)
  test: fix invitation and coordination checks on main (block#2517)
  ...

Signed-off-by: Cheng Peng <[email protected]>
Co-authored-by: Cursor <[email protected]>
cheng-block added a commit to cheng-block/buzz-app that referenced this pull request Nov 5, 2026
* upstream/main: (22 commits)
  test(browser): click timeline rows only after the timeline settles (block#2560)
  ci: split Vitest across six shards so 3/4 stops hitting the job cap (block#2571)
  feat(github): unfurl PR and issue links inline with their title (block#1693)
  fix(auth): style federated sign-in callback pages (block#2549)
  fix(agents): align creation model controls with identity (block#2480)
  Run native Codex through plugin execution targets (block#2150)
  test: split Solo access browser scenarios (block#2499)
  feat(agents): let any agent change Buzz settings through the MCP (block#2248)
  Let plugins decorate host sidebar rows and add sort modes (block#1853)
  NEXUS-4082: Keep the new-message boundary stable during a visit (block#2083)
  feat(agents): move version history into settings (block#2374)
  fix(agents): read goose Activity by saved session ids and render memory bodies on open (block#2466)
  feat(channels): starter channels: admin switch and relay auto_join flag (block#1624)
  fix(plugins): read Square HTTPS sources with the Block SSH agent (block#2465)
  feat(plugins): let agents request plugin changes for owner review (block#2280)
  fix(messages): keep the hover toolbar while its menu is open (block#2439)
  feat(workflows): suggest channel members for @ in Send Message text (block#2309)
  AIDA-2344: Exclude muted channels from Dock (block#2313)
  feat(search): add slack-style message search operators on desktop (block#2463)
  test: fix invitation and coordination checks on main (block#2517)
  ...

Signed-off-by: Cheng Peng <[email protected]>
Co-authored-by: Cursor <[email protected]>
cheng-block added a commit to cheng-block/buzz-app that referenced this pull request Nov 5, 2026
* upstream/main: (91 commits)
  test(browser): click timeline rows only after the timeline settles (block#2560)
  ci: split Vitest across six shards so 3/4 stops hitting the job cap (block#2571)
  feat(github): unfurl PR and issue links inline with their title (block#1693)
  fix(auth): style federated sign-in callback pages (block#2549)
  fix(agents): align creation model controls with identity (block#2480)
  Run native Codex through plugin execution targets (block#2150)
  test: split Solo access browser scenarios (block#2499)
  feat(agents): let any agent change Buzz settings through the MCP (block#2248)
  Let plugins decorate host sidebar rows and add sort modes (block#1853)
  NEXUS-4082: Keep the new-message boundary stable during a visit (block#2083)
  feat(agents): move version history into settings (block#2374)
  fix(agents): read goose Activity by saved session ids and render memory bodies on open (block#2466)
  feat(channels): starter channels: admin switch and relay auto_join flag (block#1624)
  fix(plugins): read Square HTTPS sources with the Block SSH agent (block#2465)
  feat(plugins): let agents request plugin changes for owner review (block#2280)
  fix(messages): keep the hover toolbar while its menu is open (block#2439)
  feat(workflows): suggest channel members for @ in Send Message text (block#2309)
  AIDA-2344: Exclude muted channels from Dock (block#2313)
  feat(search): add slack-style message search operators on desktop (block#2463)
  test: fix invitation and coordination checks on main (block#2517)
  ...

Signed-off-by: Cheng Peng <[email protected]>
Co-authored-by: Cursor <[email protected]>
ljknight added a commit to ljknight/buzz-app that referenced this pull request Nov 5, 2026
…nks-in-browser

* origin/main: (138 commits)
  feat(composer): optional ⌘/Ctrl+Enter to send (block#2331)
  test: use keyboard activation for reply caret setup (block#2557)
  test: settle member search before invitation expansion (block#2532)
  test(agent-command): isolate the copied executable writer (block#2537)
  test(sidebar): wait for the rolled-back row to leave Starred before collapsing Work (block#2574)
  test(browser): click timeline rows only after the timeline settles (block#2560)
  ci: split Vitest across six shards so 3/4 stops hitting the job cap (block#2571)
  feat(github): unfurl PR and issue links inline with their title (block#1693)
  fix(auth): style federated sign-in callback pages (block#2549)
  fix(agents): align creation model controls with identity (block#2480)
  Run native Codex through plugin execution targets (block#2150)
  test: split Solo access browser scenarios (block#2499)
  feat(agents): let any agent change Buzz settings through the MCP (block#2248)
  Let plugins decorate host sidebar rows and add sort modes (block#1853)
  NEXUS-4082: Keep the new-message boundary stable during a visit (block#2083)
  feat(agents): move version history into settings (block#2374)
  fix(agents): read goose Activity by saved session ids and render memory bodies on open (block#2466)
  feat(channels): starter channels: admin switch and relay auto_join flag (block#1624)
  fix(plugins): read Square HTTPS sources with the Block SSH agent (block#2465)
  feat(plugins): let agents request plugin changes for owner review (block#2280)
  ...

# Conflicts:
#	src/bundled/github/README.md
damienrj added a commit to damienrj/buzz-app that referenced this pull request Nov 5, 2026
* commit 'a39dba132^':
  feat(github): unfurl PR and issue links inline with their title (block#1693)
  fix(auth): style federated sign-in callback pages (block#2549)
  fix(agents): align creation model controls with identity (block#2480)
  Run native Codex through plugin execution targets (block#2150)
  test: split Solo access browser scenarios (block#2499)
  feat(agents): let any agent change Buzz settings through the MCP (block#2248)
  Let plugins decorate host sidebar rows and add sort modes (block#1853)
  NEXUS-4082: Keep the new-message boundary stable during a visit (block#2083)
  feat(agents): move version history into settings (block#2374)
  fix(agents): read goose Activity by saved session ids and render memory bodies on open (block#2466)
  feat(channels): starter channels: admin switch and relay auto_join flag (block#1624)
  fix(plugins): read Square HTTPS sources with the Block SSH agent (block#2465)
  feat(plugins): let agents request plugin changes for owner review (block#2280)
  fix(messages): keep the hover toolbar while its menu is open (block#2439)

Signed-off-by: damienrj <[email protected]>
ljknight added a commit to ljknight/buzz-app that referenced this pull request Nov 5, 2026
* origin/main: (121 commits)
  feat(composer): optional ⌘/Ctrl+Enter to send (block#2331)
  test: use keyboard activation for reply caret setup (block#2557)
  test: settle member search before invitation expansion (block#2532)
  test(agent-command): isolate the copied executable writer (block#2537)
  test(sidebar): wait for the rolled-back row to leave Starred before collapsing Work (block#2574)
  test(browser): click timeline rows only after the timeline settles (block#2560)
  ci: split Vitest across six shards so 3/4 stops hitting the job cap (block#2571)
  feat(github): unfurl PR and issue links inline with their title (block#1693)
  fix(auth): style federated sign-in callback pages (block#2549)
  fix(agents): align creation model controls with identity (block#2480)
  Run native Codex through plugin execution targets (block#2150)
  test: split Solo access browser scenarios (block#2499)
  feat(agents): let any agent change Buzz settings through the MCP (block#2248)
  Let plugins decorate host sidebar rows and add sort modes (block#1853)
  NEXUS-4082: Keep the new-message boundary stable during a visit (block#2083)
  feat(agents): move version history into settings (block#2374)
  fix(agents): read goose Activity by saved session ids and render memory bodies on open (block#2466)
  feat(channels): starter channels: admin switch and relay auto_join flag (block#1624)
  fix(plugins): read Square HTTPS sources with the Block SSH agent (block#2465)
  feat(plugins): let agents request plugin changes for owner review (block#2280)
  ...

# Conflicts:
#	docs/buzz-help.md
bostonaholic added a commit that referenced this pull request Nov 5, 2026
Stacked on #2465.

## Why

Plugin imports run Git without the user's Git or SSH configuration,
credential helpers or prompts. Per-host setups that make `git clone`
work in a terminal, such as an `insteadOf` rule that reads HTTPS over
SSH or an `IdentityAgent` that selects an SSH agent, do not apply to
them. Today the only fix is a hard-coded case for one GitHub
organization (#2012, #2465), so every other organization or host needs a
Buzz code change.

## What

- A versioned `repository-access.json` beside the profile folders (same
location rules as `managed-plugins.json`, overridable with
`BUZZ_REPOSITORY_ACCESS`) declares which sources Git reads over which
SSH user and agent socket, and whether matching HTTPS sources are read
over SSH.
- A rule can change only the scheme, SSH user and agent socket. Host,
port and path stay as entered, the saved source keeps the entered URL,
relay-authorized sources are never moved to SSH, and paths with `%`
never match. No helpers, SSH config or other programs run.
- The existing organization case becomes the one built-in rule with the
same behavior. File rules are tried first; `builtInRules: false` turns
built-ins off.
- Invalid rules are dropped and reported; an unusable file leaves only
the built-in rules. The desktop reads the file on each import and logs
problems and matched rules.
- A failed read names the rule and agent socket it used.
- `buzzodz plugin access [URL]` shows the file, its status and problems,
the rules in order, and for a URL the rule, clone URL and agent socket.
- Docs: new `docs/repository-access.md`; `docs/plugin-architecture.md`
links to it.

## Risk

- With no rules file, behavior matches #2465. One wording change: the
not-a-socket error is now `SSH agent path is not a socket: <path>`.
- A rule that rewrites an HTTPS prefix sends public repositories under
it through the agent too; the doc says how to limit a rule to SSH.
- The first rule matching an HTTPS source decides it: a file rule with
`rewriteHttps: false` keeps those sources on HTTPS even where the
built-in rule would read them over SSH.

## Testing

- Every slice was written test-first. Covered: each field validation,
oversize/unsupported/absent files, the env override, rule order and
`builtInRules`, built-in parity with the cases #2465 tested, other
hosts, `rewriteHttps: false` (including shadowing the built-in rule),
socket-less rules with and without `SSH_AUTH_SOCK`, platform filtering,
`%` paths, relay-authorized imports (fails if authorization is ignored),
the agent socket reaching the Git process, the failure suffix, and the
CLI report.
- `buzzodz-plugins`: 78 tests pass (3 runs), clippy and fmt clean.
Tauri: clippy clean; lib tests pass except `window_state::tests`, which
segfaults on this machine on the base branch too.
- Ran `buzzodz plugin access` against a temporary home with absent,
valid, partly invalid and unusable files, and with accepted and rejected
URLs.
- Not tested: Add a plugin in the native app with a rules file; Windows
build (read only).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Signed-off-by: Matthew Boston <[email protected]>
Co-authored-by: mboston Implementer <932d3b6ebea6cc83e091551ae46d1c7e7f8f7d0fa8e9cef5e6facc8544af413b@buzz.block.builderlab.xyz>
Co-authored-by: Claude Opus 5.5 <[email protected]>
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.

2 participants