69 Commits
Author SHA1 Message Date
Daniel Norman 040906ba6d Add list_canonical_tags command
- Load the release modal's tags with it
- Sort them with the shared sortedTags helper
- Test that peers' tags are left out
2026-10-08 18:21:48 +02:00
837766212e Add artifact node port and commands
- Add the ArtifactNode port over radicle-artifact-client
- Seed, unseed, download and fetch artifacts per release
- Unseed artifacts on redaction and release deletion
- Report artifact node status and installed binaries
- Probe the artifact node alongside the radicle node
- Add node commands and mirror them in test API

Co-authored-by: Brandon Oxendine <brandon.oxendine@gmail.com>
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-08 18:20:59 +02:00
7a0b67da64 Add release COB ports and commands
- Add release types and the Releases and ReleasesMut ports
- Create, delete and redact releases
- Register, attest and locate artifacts
- Filter releases with radicle-artifact
- Add release commands and mirror them in test API

Co-authored-by: Brandon Oxendine <brandon.oxendine@gmail.com>
Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-08 18:20:59 +02:00
Brandon OxendineandRūdolfs Ošiņš ab8300e09a Show repository images in READMEs
Relative images in markdown and AsciiDoc files were broken, nothing
resolved them against the repository. They're read through a new
`repo_blob_bytes` command, which skips the text encoding and last
commit lookup of `repo_blob`. Images now also keep their alt text.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-07 16:56:16 +02:00
Rūdolfs Ošiņš b2bbf6f5ad Send embed bytes over IPC without JSON
Embeds went over IPC as JSON number arrays, so a 9MB image turned into
~36MB of JSON. On upload Tauri parses that on the main thread, which
beachballed the app while dropping a large screenshot.
2026-10-06 15:53:56 +02:00
Brandon OxendineandRūdolfs Ošiņš 8175823ab8 Fix pasted images not rendering
Pasting a single image went through save_embed_by_clipboard, which
stored the clipboard's raw RGBA pixels instead of an encoded image.
The result could not be decoded, so the embed showed as a broken image.
Always store the pasted file's own bytes instead. Nothing else uses
save_embed_by_clipboard, so it's removed.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-06 15:04:57 +02:00
Brandon OxendineandRūdolfs Ošiņš 91ab693b4b Link Radicle entities from comments
References are picked or pasted in the composer, stored as `rad:` URIs
with a readable label, and shown as chips or links that open in-app when
the entity is here.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-05 17:29:02 +02:00
Brandon OxendineandRūdolfs Ošiņš bee84e9d40 Search node aliases for mentions
Mentioning someone starts from their alias, but aliases are
self-declared and unrelated nodes often share one. Results say who is
followed or is you, so the composer can tell them apart.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-10-05 17:29:02 +02:00
Rūdolfs Ošiņš eaf2740907 Drop unused radicle-surf leftovers 2026-10-01 19:56:53 +02:00
Rūdolfs Ošiņš 851fbc54be Read request bodies before test-http-api handlers run
Hyper closes a keep-alive connection when a handler leaves the body unread,
and browsers don't retry the next POST on it, which made e2e tests flaky.
2026-10-01 18:16:29 +02:00
Rūdolfs Ošiņš b0a519d1c5 Mirror every Tauri command in test-http-api
Several commands had no route or returned stubs, so e2e tests silently got
null or empty data. A missing route now fails loudly, the profile loads on
first use so onboarding works, and node status is polled over HTTP. A
parity test keeps the routes from drifting from the Tauri handlers again;
it also caught revisions_by_patch being registered twice.
2026-10-01 18:16:29 +02:00
Rūdolfs Ošiņš 73bea06ee1 Serialize writes in the test HTTP API
Parallel e2e tests hit the repo's sigrefs lock when creating COBs
concurrently, which the Tauri avoids by running these commands on
the main thread serially.
2026-09-29 17:28:34 +02:00
Brandon Oxendine 1d2cdaf033 Align issue page design with patch page
Rebuild the issue page as a single column matching the patch page:
the state dropdown sits next to the title, with author, issue ID,
labels and assignees in a row beneath it.

Let issue authors change the state, not only delegates. Add a
delete_issue command so authors can delete their own issues.

Share the delete confirmation and ID chip with the patch page.
2026-09-25 12:48:35 +02:00
Brandon OxendineandRūdolfs Ošiņš 54835363a9 Add a repository identity document view
Adds a read-only page for a repository's identity document. It shows the
current document together with its full revision history. The data and
wording follow heartwood and the rad id / rad inspect CLI.

Co-Authored-By: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-09-24 17:04:54 +02:00
Rūdolfs Ošiņš 092f3354ee Distinguish local repos from seeded ones
A repository can sit in storage without being seeded, which `rad ls`
hides and `rad ls --all` shows as "local". A new Settings preference
picks the `Show` passed to `list_repos_summary`, defaulting to seeded.
2026-09-09 14:51:21 +02:00
Rūdolfs Ošiņš 5f86b10f05 Fix unseed error paths and seeded repo filter
Unseeding only deletes the policy row, so a node defaulting to `allow`
keeps seeding: `unseed` now reports `DefaultPolicySeeds` instead of
claiming success, and both callers refresh in a `finally` so a failed
`clean` no longer leaves a stale row behind.
2026-09-09 14:50:28 +02:00
Rūdolfs Ošiņš 535f5e2a18 Show the detected git binary in the settings 2026-09-08 10:04:49 +02:00
Brandon OxendineandRūdolfs Ošiņš fe37d6a85c Add Stop seeding to the sidebar context menu
`rad unseed` only drops the seeding policy and leaves the repository in
storage, so while `list_repos_summary` listed everything on disk an
unseeded repository never left the sidebar and unseeding looked like it
had done nothing. That call now filters by seeding policy.

The confirmation dialog also offers to delete the files, running the
equivalent of `rad clean` after the unseed.

Co-authored-by: Rūdolfs Ošiņš <rudolfs@osins.org>
2026-09-03 19:21:16 +02:00
Rūdolfs Ošiņš 3688218060 Resolve the patch target branch in the API
Serve `targetBranch` so the UI can tell where a patch is headed. Editing
a title no longer sends its own target, which reset branch-targeted
patches to the default branch.
2026-09-03 16:46:29 +02:00
Rūdolfs Ošiņš 42a141bd8b Render patch changes with Pierre 2026-08-14 17:30:46 +02:00
Brandon Oxendine d19d1f21f1 Add patch deletion 2026-08-10 12:54:39 +02:00
Brandon Oxendine 62e150c29a Rebuild the patch page, review UI, and activity timeline 2026-08-10 12:54:39 +02:00
Rūdolfs Ošiņš 935b02308a Upgrade rust dependencies
Upgrade all radicle-* dependencies to the latest versions regardless of
cooldown and the remaining rust dependencies honoring cooldown period.
2026-07-27 15:19:45 +02:00
Rūdolfs Ošiņš 9bd20fa15c Move patch pagination into the patch service 2026-07-03 11:33:12 +02:00
Rūdolfs Ošiņš ce5e270ecb Open the COB cache database once per driver 2026-07-03 11:33:01 +02:00
Rūdolfs Ošiņš 151db44c28 Move issue pagination into the issue service 2026-07-03 11:32:58 +02:00
Rūdolfs Ošiņš 1ba7369392 Generate copyable patch text via libgit2 2026-07-03 11:32:33 +02:00
Rūdolfs Ošiņš 5b121b131a Add a diff actions menu with copy and save to disk
Replace the file-header and whole-diff copy buttons with a popover menu
offering "Copy to clipboard" and "Save to disk".
2026-07-03 11:28:57 +02:00
Rūdolfs Ošiņš 8970fd6f68 Project issues through a timestamp-ordered SQLite query
list_issues previously read through heartwood's id-ordered issue cache,
forcing it to load and sort every issue in memory on each page. Mirror
the patch path instead: a domain/issue Service backed by an IssueStorage
adapter that queries the issues table directly.
2026-07-03 11:26:36 +02:00
Rūdolfs Ošiņš e1b940b21d Paginate the issues list view
The issues list loaded every issue at once and rendered them all.
Paginate it the same way as commits and patches.
2026-07-03 11:26:03 +02:00
Rūdolfs Ošiņš efea7f1ab2 Add peer selector to repo source browsing
Introduce a peer/branch/tag selector in the repository source and commits
views, letting you browse the canonical refs or any peer's namespace.
2026-06-04 17:19:31 +02:00
Rūdolfs Ošiņš 3057fd7644 Fix clippy lints for Rust 1.90 2026-05-19 17:40:37 +02:00
Fintan Halpenny aa767003de crates: Use Edition 2024 2026-05-19 11:40:52 +01:00
Daniel Norman 073a5fb574 Bump deps to radicle 0.24 / radicle-job 0.6
- bump radicle 0.22 -> 0.24, radicle-job 0.5.2 -> 0.6, and
  radicle-surf 0.27.0 -> 0.27.1 to match heartwood
- raise radicle-tauri rust-version to 1.86 for radicle-job 0.6's MSRV
- migrate to the 0.24 COB store API: signer moves onto the cache via
  WriteAs, so issues_mut/patches_mut take &signer and the per-call
  signer arg disappears from every issue/patch action method
- pass ReadOnly to JobsStore::open for radicle-job 0.6's new Access
  type param
- replace the removed Profile::socket() with home().socket_from_env()
  and the removed WriteRepository::set_head() with the
  set_canonical_symbolic_refs + set_default_branch_to_canonical_head
  pair used by rad::init
- split the old ssh::agent::Error into AgentError + ConnectError so
  Agent::connect failures still bubble through ?
- swap SignedRefsInfo::is_ok() (gone in 0.23) for an explicit
  matches!(_, Some(_)) on the new None/Some/NeedsMigration enum
2026-05-12 11:26:53 +02:00
Rūdolfs OšiņšandJulien Donck 65c453e37d Add commit history list and single commit views
Co-authored-by: Julien Donck <donckjulien@gmail.com>
2026-04-27 18:00:14 +02:00
justarandomgeek d6d0fbfb7a chore: Update dependencies related to Tauri 2026-04-27 11:35:56 +02:00
Rūdolfs Ošiņš 99996f168e Rename radicle.xyz -> radicle.dev and app.radicle.xyz -> radicle.network 2026-04-27 11:26:17 +02:00
Lorenz Leutgeb a7fc588653 cargo: Bump dependencies 2026-03-21 18:54:42 +01:00
Rūdolfs Ošiņš 010cac0377 Redesign app with new UI kit
Redesign the entire app with a new UI kit. Typography, colors, icons,
avatars, and border radii have all been updated for a more polished,
consistent appearance that matches our other products like
radicle-explorer.

- Replace blockies-based avatars with a new DID-based avatar system
- Move Settings and Create Issue into fullscreen modals
- Change the default theme to follow the system theme
- Remove window decorations on macOS for a cleaner, more native feel
- Update the app icon
- Fix popovers and tooltips

Navigation:

- Rewrite app navigation and layouts
- Add a sidebar that gives you access to all your repos
- Change the startup screen to open directly to the notification inbox
- Add a getting started guide shown to new users on first launch

Settings:

- Add a setting to disable the notification badge
- Add a code font setting

Bug fixes:

- Fix reactions and edits incorrectly targeting the root comment
  instead of the intended reply
- Restrict issue/patch state, labels and assignees to delegates only
2026-03-20 17:48:38 -06:00
Rūdolfs Ošiņš 656ddd172c Add notification endpoint stubs to test-http-api 2026-03-20 14:07:42 -06:00
Rūdolfs Ošiņš e06a371447 Mirror seeded_not_replicated command in test-http-api 2026-03-20 14:07:24 -06:00
Rūdolfs Ošiņš 8b2df264af Add list_repos_summary Tauri command 2026-03-20 14:06:48 -06:00
Rūdolfs Ošiņš bfa38d9fe9 Show job cobs on latest revision and default branch commits 2025-07-29 16:16:56 +02:00
Sebastian Martinez 7765b7d765 Update radicle crate 2025-07-18 16:09:05 +02:00
Sebastian Martinez 8c3a629ecf Add missing readme_handler endpoint 2025-07-16 09:41:47 +02:00
Sebastian Martinez e0ae5b5501 Add source browsing 2025-07-16 09:41:46 +02:00
Sebastian Martinez 581a9b6af6 Add version endpoint to test-http-api 2025-07-10 11:31:43 +02:00
Sebastian Martinez e6db48b69d Update heartwood crates 2025-06-05 11:17:48 +02:00
Sebastian Martinez a265267110 Remove test-http-api Cargo.lock 2025-05-21 23:04:59 +02:00
Rūdolfs Ošiņš 71069ef19e Move inbox to a global popover 2025-05-20 15:46:00 +02:00