Repository navigation
Conversation
sidkmenon
added this pull request to stack #1055
October 9, 2026 01:03
upgrade and uninstall
sidkmenon
force-pushed
the
sm/diffr-install-sh
branch
from
October 9, 2026 02:40
24a75f5 to
f9af9e5
Compare
sidkmenon
force-pushed
the
sm/diffr-upgrade
branch
from
October 9, 2026 02:40
f45acc8 to
c495e2c
Compare
sidkmenon
removed this pull request from stack #1055
October 9, 2026 02:40
sidkmenon
added this pull request to stack #1060
October 9, 2026 02:40
sidkmenon
removed this pull request from stack #1060
October 9, 2026 02:40
sidkmenon
force-pushed
the
sm/diffr-upgrade
branch
from
October 9, 2026 03:44
c495e2c to
9b3a083
Compare
sidkmenon
force-pushed
the
sm/diffr-install-sh
branch
from
October 9, 2026 04:06
f9af9e5 to
d1853ee
Compare
sidkmenon
force-pushed
the
sm/diffr-upgrade
branch
2 times, most recently
from
October 9, 2026 04:08
02a12b4 to
6e72dc9
Compare
sidkmenon
force-pushed
the
sm/diffr-install-sh
branch
from
October 9, 2026 04:09
d1853ee to
6545169
Compare
sidkmenon
force-pushed
the
sm/diffr-upgrade
branch
from
October 9, 2026 04:09
6e72dc9 to
9e0f600
Compare
The agents, their plugin commands and the install record move from init.rs to install.rs, so `upgrade` and `uninstall` can use them without going through the prompts. No change in behavior. Claude-Session: https://claude.ai/code/session_01LYrgBPQFAiQVjNV6D7UkQv Agent-Session: 01a11aca-5007-7b80-ad35-c0a0f746a05d Agent-Session: ec5d2c35-3045-44f3-9c41-ba4378797c8e Agent-Session: 01a11ded-d896-7251-bf8f-c71bf07fd283 Agent-Session: 01a11e03-81df-7d63-bfa5-953f535444d2 Agent-Session: 01a11e0a-d042-71d2-9bc9-ac7b652487d1 Agent-Session: b5985b3c-e5d2-4bb4-b6ac-7fec168d8328 Agent-Session: 7ba69deb-2039-47e6-900f-0f30a79e167a Agent-Session: 01a11ecf-aa86-7a81-a5e6-c5dfe72d48eb
…nstall` Both commands work the way diffr was installed, which they read from where the binary is, as `opencode upgrade` does: - Homebrew (a Cellar/diffr path): `brew upgrade` or `brew uninstall` devdotfast/tap/diffr. - Cargo (the Cargo bin directory): `cargo install` or `cargo uninstall` diffr-cli. - Inside node_modules: refuse. That diffr came with an app, such as Whiteboard, which updates it. - Anywhere else: install.sh from install.dev.fast into the binary's directory, or remove diffr and diffr-tui from it. install.sh asks the setup questions only when no diffr was in its directory before, so an upgrade through it doesn't ask them again. After the upgrade, each agent in the install record updates its plugin. `diffr uninstall` removes those plugins first, then the record, then diffr; a failed plugin removal stops it with diffr in place. ~/.config/diffr stays, because Whiteboard reads it too. Claude-Session: https://claude.ai/code/session_01LYrgBPQFAiQVjNV6D7UkQv Agent-Session: ec5d2c35-3045-44f3-9c41-ba4378797c8e Agent-Session: b5985b3c-e5d2-4bb4-b6ac-7fec168d8328 Agent-Session: 01a11ded-d896-7251-bf8f-c71bf07fd283 Agent-Session: 7ba69deb-2039-47e6-900f-0f30a79e167a Agent-Session: 01a11ecf-aa86-7a81-a5e6-c5dfe72d48eb
sidkmenon
force-pushed
the
sm/diffr-install-sh
branch
from
October 9, 2026 05:02
6545169 to
50bdbc7
Compare
sidkmenon
force-pushed
the
sm/diffr-upgrade
branch
from
October 9, 2026 05:02
9e0f600 to
19b61be
Compare
Contributor
Author
sidkmenon
added a commit
that referenced
this pull request
Oct 9, 2026
One command installs diffr and its Claude Code plugin: ```sh curl -fsSL https://install.dev.fast/diffr | sh ``` Commit by commit: - **`DIFFR_CONFIG_DIR`**: a host such as Whiteboard can keep its own diffr config file. Without the variable, diffr reads the same file as before. - **`--help` guides**: `diffr --help` ends with a guide for agents (`docs/agents.md`), and `diffr config --help` with the plugins guide (`docs/plugin.md`). `-h` stays short. An agent runs `diffr --help` in its shell, so what it reads always matches the installed diffr. - **`diffr config init`**: in a terminal, asks which agents get the diffr plugin and which provider writes summaries, and asks for a key only when neither the config nor the environment has one. Without a terminal, `config init --json` prints the questions and a schema, and `config init --json ANSWERS` applies them; the key never goes through `--json`. Claude Code is the only agent: `claude plugin install diffr@devfast` after adding or updating the devfast marketplace, the same marketplace Whiteboard's plugin uses. Installed agents are recorded in `$XDG_STATE_HOME/diffr/install.json`, outside the synced config directory. - **`install.sh`**: finds the newest `diffr/X.Y.Z` release (or `DIFFR_VERSION`), checks the archive against the release's SHA256SUMS, installs diffr and diffr-tui in `DIFFR_INSTALL_DIR` (`~/.local/bin` by default), then runs `diffr config init` on a first install. - **Install module**: what `config init` installs moves to `install.rs`, so `upgrade` and `uninstall` use it without the prompts. No behavior change. - **`diffr upgrade` and `diffr uninstall`**: work the way diffr was installed, read from where the binary is (Homebrew, Cargo, inside `node_modules`: refuse, otherwise install.sh). After an upgrade, each recorded agent updates its plugin. `uninstall` keeps `~/.config/diffr`, which Whiteboard shares. - **Docs**: the plugins guide for agents, the man page's commands, files and environment, and a README that leads with the install script. - **Summaries**: `config init` asks yes or no for pseudocode summaries, then the provider, then its key. - **PATH and failures**: install.sh offers to put diffr on PATH and points install failures at the issue tracker. - **Steps**: setup shows each step as it runs. ## Before the install route goes live - Release `diffr/0.1.18` after this and #1019 merge. install.sh installs the newest `diffr/*` release; 0.1.17 has no `config init` or `upgrade`, and the plugin needs 0.1.18. - Then merge Fix-Fast/dev#1119, which points `install.dev.fast/diffr` at `diffr/install.sh` on main. ## Testing - `cargo fmt --check` and `cargo test`, including the CLI tests for `DIFFR_CONFIG_DIR`, the `--help` guides, `config init --json`, `upgrade` and `uninstall`. Replaces #1039, #1040, #1054, #1056, #1057 and #1063. Stack: #1065 → #1066 → #1019 → #1023 → #1024 → #1025 → #1026 https://claude.ai/code/session_01HNbERuYJjvvAjBN19zEDbo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
diffr: keep what
config initinstalls in its own moduleThe agents, their plugin commands and the install record move from
init.rs to install.rs, so
upgradeanduninstallcan use themwithout going through the prompts. No change in behavior.
diffr: update or remove diffr and its plugins with
upgradeanduninstallBoth commands work the way diffr was installed, which they read from
where the binary is, as
opencode upgradedoes:brew upgradeorbrew uninstalldevdotfast/tap/diffr.
cargo installorcargo uninstalldiffr-cli.
Whiteboard, which updates it.
directory, or remove diffr and diffr-tui from it.
install.sh asks the setup questions only when no diffr was in its
directory before, so an upgrade through it doesn't ask them again.
After the upgrade, each agent in the install record updates its plugin.
diffr uninstallremoves those plugins first, then the record, thendiffr; a failed plugin removal stops it with diffr in place.
~/.config/diffr stays, because Whiteboard reads it too.
https://claude.ai/code/session_01LYrgBPQFAiQVjNV6D7UkQv