Commit Graph
6753 Commits
Author SHA1 Message Date
spacedandy-agents-simplex f53eb6ae87 ci: point the iOS app at the test directory and restore the smoke test's search checks
With the test backend, the app is built against the test directory's address, and the smoke test goes on to search it: the Directory header above the results and their avatars in both layouts, the chat list's cards shown while typing and hidden under the results once the profile has a conversation, and "Show more" disabled while its page loads.
2026-10-16 21:01:22 +00:00
spacedandy-agents-simplex 4dc8c357d4 ci: restore the iOS backend's search request probes for directory search
A fresh client sends the directory the search the app sends, and must find ci_group and ci_channel; then "ci seed" and "ci avatar" are followed page by page into seed.md, with each page's entries and size against maxServiceBodyLength. The message search stays. The seeded entries name the cases they serve again.
2026-10-16 21:01:17 +00:00
spacedandy-agents-simplex cbb2480b4e ci: pass the branch name to jq as an argument in the iOS artifact lookup
The branch name was part of the jq program text, so a branch named to close the string could select an artifact from a fork or another branch. Same fix as the desktop lookup.
2026-10-16 21:00:40 +00:00
spacedandy-agents-simplex c67ea513f3 ci: create the iOS backend's probe user before its first named command
A client started with -s gives that server every role, names included, only to the users that exist when it starts, so the name probe's first connect plan on a new database failed with NO_NAME_SERVERS (run 38904976359). The user is now created by a plain run first, as every other peer is and as desktop's backend does.
2026-10-16 21:00:39 +00:00
spacedandy-agents-simplex 17f3011028 Merge branch 'master' into f/directory-search
# Conflicts:
#	apps/multiplatform/product/gaps.md
2026-10-16 20:59:57 +00:00
spaced4ndy 5a80713699 ci: test the desktop app on Linux runners on request, with an optional Claude session (#7736) 2026-10-16 17:34:43 +00:00
spaced4ndy 7c5b6bb3d7 ci: test the iOS app in the simulator on request, with an optional Claude session (#7737) 2026-10-16 17:33:50 +00:00
sh aaa388e570 desktop: add emoji picker (#7708)
* desktop: add emoji picker data and generator

* desktop: emoji picker in compose field

* desktop: document compose emoji picker
2026-10-16 14:34:04 +01:00
spacedandy-agents-simplex 41e9c1284c android, desktop: hide the chat list's banners and cards with one showsCards condition, as iOS does 2026-10-16 13:50:13 +04:00
spacedandy-agents-simplex 48ca4d11ac android, desktop: show the Names and Directory headers above their results in the New chat sheet with the one-hand UI 2026-10-16 13:50:13 +04:00
spacedandy-agents-simplex b402bf4b3e android, desktop: hide the banners and cards above the chats while online search results are shown
While a "Search in Directory" or Search key search runs or shows results, the chat list leaves out its banner slot, the reachable toolbar card and the connect cards. Typing alone, which only filters the chats, keeps them, and they come back when the results go.
2026-10-16 13:50:13 +04:00
spacedandy-agents-simplex 05b8f33f81 android, desktop: show the member and subscriber counts of directory results in the secondary text size
The count used typography.caption, which is 18 sp in this theme, larger than the description above it. It now uses body2, as the other subscriber counts do.
2026-10-16 13:50:13 +04:00
spacedandy-agents-simplex 831396edf6 android, desktop: show the Names and Directory headers above their results with the one-hand UI
The one-hand chat list is reversed, so a header emitted before its rows was drawn below them. searchPart puts the header after the rows in that layout, as the iOS fix does; the rows keep their order, nearest the search field. The onboarding results list, whose first item is now a keyed row, scrolls to its start when name results arrive, since the list would otherwise hold a directory row in place and leave the names below it. Spec links into ChatListView.kt refreshed.
2026-10-16 13:50:13 +04:00
spacedandy-agents-simplex 01eb96c841 ios: show "Show more" in the secondary colour while the next page loads
The row was disabled while loading but kept its primary colour, so it looked tappable. The Kotlin app already does this.
2026-10-16 13:50:13 +04:00
spacedandy-agents-simplex 78627445dd ios: hide the chat list's banner and cards while online search results are shown
After "Search in Directory" or the keyboard's Search key, the results are shown without the Wefunder or badge banner, the one-hand UI card and the "New 1-time link" / "Paste link / Scan" cards. Typing still keeps them, as it only filters the chats, and they come back when the search text is cleared.
2026-10-16 13:50:13 +04:00
spacedandy-agents-simplex ce59e9dc2d ios: show the Names and Directory headers above their results with the one-hand UI
The one-hand chat list is flipped, so a header emitted before its rows was drawn below them. searchPart puts the header after the rows in that layout; the rows keep their order, nearest the search field. Spec links into ChatListView.swift refreshed.
2026-10-16 13:50:13 +04:00
sh fba65d98ee nodejs: ignore local libs directory (#7731) 2026-10-16 09:01:13 +00:00
EvgenyandEvgeny @ SimpleX Chat 5dfe7c1f0e website: downloads page (#7728)
* website: downloads page

* bigger headings

* translations

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-15 22:10:59 +01:00
EvgenyandEvgeny @ SimpleX Chat 41f0c429b3 website: update home page (#7724)
* website: update home page

* update

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-15 12:50:38 +01:00
spaced4ndy f8cf7266a7 fix compilation 2026-10-15 11:53:26 +04:00
EvgenyandEvgeny @ SimpleX Chat e8c98e8231 core, ios: fix notifications for forwarded and channel messages (#7706)
* plan: add notification flag for forwarded messages

* core, ui: fix notifications for forwarded and relay messages

* improvements

* only send duplicate message event in NSE

* query plans

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-15 08:41:57 +01:00
Simplex Operations f5b13f608f packages: release nodejs 7.1.0-beta.6.3 (#7720) 2026-10-15 06:18:30 +00:00
Narasimha-sc 23ca3ea42f desktop: hide SimpleX address and chat preferences rows with no profile and no mobile in use (#7717) 2026-10-15 05:37:37 +01:00
Narasimha-sc 000258224c desktop: fix crash in SimpleX address screen when there is no profile (#7679)
* desktop: fix crash in SimpleX address screen when there is no profile

* desktop: close SimpleX address screen when there is no profile

* desktop: rerun address screen self-close when its modal is reused or the stack changes

* desktop: close SimpleX address screen only when it is the top modal

* plans: correct address no-profile crash triggers and fix description

* plans: correct address no-profile crash fix description and verification

* plans: tighten address no-profile crash wording

* plans: add self-destruct trigger to address no-profile crash

* plans: qualify self-destruct trigger on desktop

* plans: drop desktop-only title from address no-profile crash

* plans: no connected mobile, not no mobile

* spec, product: document isLastModal and address screen without profile

* plans, spec, product: plan sections, address row spec, GAP-08 and GAP-09

* spec, product, plans: fix GAP-08/09 wording, table placement, ModalManager line

* spec, product: GAP-08/09 accuracy, gap count, clickable ModalManager location

* product, plans: GAP-09 at the level the code supports; qualify picker auto-open

* spec, product, plans: fix GAP-09 locations, stale line links, wording

* spec, product, plans: update plain-text line numbers; GAP-09 read wording

* plans: name the picker auto-open condition

* spec, plans: wording; security note

* plans: self-destruct did not crash on Android master; not a trigger

* plans: self-destruct path possible but unconfirmed; Android recovers silently

* spec, product, plans: drop GAP-09 and unrelated line refreshes

* plan: Android self-destruct path confirmed in logcat

* desktop: close Chat preferences screen when there is no profile, as the address screen does
2026-10-14 22:14:55 +01:00
EvgenyandEvgeny @ SimpleX Chat c07d28681f website: update cf links and page (#7722)
* website: update cf links and page

* noopener

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-14 21:42:51 +01:00
EvgenyandEvgeny @ SimpleX Chat 1b980de198 website: page events (#7721)
* website: page events

* rename

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-14 20:59:56 +01:00
Evgeny Poberezkin 4c09af0619 tests: fix tests compilation for postgres 2026-10-14 20:08:33 +01:00
sh 489b07ff4f ci: record package releases in simplex-chat-libs (#7719)
* ci: use default registries for empty variables

* ci: drop package publish tags

* ci: record releases in simplex-chat-libs

* ci: skip recorded versions in publish plan

* nodejs: raise default test timeout for migrations

* nodejs: print download progress without console.error

* nodejs: use the default timeout in migrating core tests
2026-10-14 15:10:31 +00:00
spacedandy-agents-simplex ba5f7bd9d7 review: round 1 fixes
R1-1: state OnlineSearchModel's main-thread premise, which iOS's
@MainActor carries and Kotlin otherwise leaves implicit.
R1-2: state the @Transient mechanism that keeps the directory link
check from being bypassed or deferred.
Spec line references into the two files shift by one accordingly.

Run: 003-kotlin-directory-search, review round 1
2026-10-14 14:31:55 +00:00
spacedandy-agents-simplex 7627e2d4eb android, desktop: refresh stale line references in spec documents
CODE.md asks for every line reference in an affected spec document to be
updated. Most of these were already stale on master. Numbers only: no
wording changes. Kept apart from the feature documentation so it can be
reviewed or dropped on its own.

Run: 003-kotlin-directory-search, slice 7
2026-10-14 14:08:04 +00:00
spacedandy-agents-simplex 33bae2658a android, desktop: document online search in spec and product docs
apps/multiplatform/CODE.md requires spec and product updates with every
code change. Mirror the iOS online search docs in the Kotlin docs' own
formats and numbering, stating where Android and desktop differ, and
fix the ConnectProgressManager signatures the branch's owner parameter
had made stale.

Run: 003-kotlin-directory-search, slice 6
2026-10-14 13:53:11 +00:00
spacedandy-agents-simplex d65c68c075 android, desktop: search names and the directory from New chat
Port the iOS New chat online search: the Search key and the "Search in
Directory" row work as on the chat list, and the Names and Directory
sections follow the contacts, de-duplicated against them. "No filtered
contacts" shows only when the online search found nothing. Archived
contacts are unchanged.

Run: 003-kotlin-directory-search, slice 5
2026-10-14 13:43:29 +00:00
spacedandy-agents-simplex 15f2326704 android, desktop: search names and the directory from the chat list
Port the iOS chat list online search: the Search key resolves a typed
SimpleX name online and searches the directory, the "Search in
Directory" row searches the directory only, and the Names and Directory
parts follow the local chats, de-duplicated against them. The onboarding
state now shows the search bar too, with its results in place of the
onboarding pages (on desktop the pages stay in the centre pane). The
empty-state overlays no longer cover online results.

Run: 003-kotlin-directory-search, slice 4
2026-10-14 13:40:52 +00:00
spacedandy-agents-simplex 1980f96746 android, desktop: online search model, result rows, first-search alert
Port OnlineSearchModel and its rows from the iOS DirectorySearchView:
directory pages and SimpleX name resolution share one lifecycle, run on
the main thread like the iOS @MainActor model, and drop late replies by
generation. Add the "Search in Directory" row, the directory and name
rows, the first-search alert, and an onSearch handler on SearchTextField
(Android IME Search action, desktop Enter). Nothing calls them yet.

Run: 003-kotlin-directory-search, slice 3
2026-10-14 13:34:40 +00:00
spacedandy-agents-simplex 2137884bde android, desktop: validate directory entries, add name results and quiet connection plans
Port the iOS online-search model: a directory entry now carries a
non-optional link that decoding accepts only for group and channel links
(the core fetches an invitation link even in a store-only plan), plus
planLocalChatId, NameSearchResult, DirectoryResult and OnlineSearchRows.
apiConnectPlan gains onFailure so lookups can log instead of alerting,
and the first-search alert gets its hint preference.

Run: 003-kotlin-directory-search, slice 2
2026-10-14 13:27:50 +00:00
spacedandy-agents-simplex 79b1439913 android, desktop: hoist chat list search state, extract the search bar block
The onboarding state will render the same search bar as the chat list,
as iOS renders ChatListSearchBar in both. Move the three search states
to ChatListView, next to searchText, where iOS keeps them, and extract
the sticky header's search bar and tags into ChatListSearchBarWithTags.
No behaviour change.

Run: 003-kotlin-directory-search, slice 1
2026-10-14 13:21:45 +00:00
sh f65c2da587 nodejs: lazy per-backend libsimplex download (#7543)
* ci: drop dlltool from nodejs libs release

* nodejs: download libsimplex into the user cache

* nodejs: load libsimplex at runtime per backend

* support bot: select db backend with --db

* python: match backend switch error text

* nodejs: download prebuilt add-on at runtime

* ci: build nodejs add-on for libs release

* calculator bot: load libs and add-on in image

* support bot: document add-on override

* nodejs: keep worker test output free of colors

* nodejs: verify sha-256 of downloaded assets

* python: pin core libs release with sha-256

* ci: add packages release script

* ci: release nodejs add-on and open release PR

* ci: publish packages after release PR

* nodejs: keep npm from building the add-on

* calculator bot: build the add-on in the image

* ci: merge package release workflows

* ci: open release PR when publishing fails

* ci: build the add-on with node-addon-api only

* ci: skip publishing in a called packages workflow

* ci: update package release actions to Node 24

* nodejs: fix receive test timeout

* ci: test packages on pull requests

* nodejs: reuse the database in the close stress test

* ci: keep failed package tests from hanging

* ci: skip preset server tests

* ci: plan package builds from the changes

* ci: test packages with a given libsimplex

* ci: test packages with libsimplex of core changes
2026-10-14 09:53:53 +01:00
EvgenyandEvgeny @ SimpleX Chat 2f4a443dda ui: markdown viewer (#7702)
* ui: markdown viewer

* simplify

* fixes

* plan

* ios sheet, center modal on desktop

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-13 14:38:37 +01:00
spaced4ndy e7678b634c ios: refresh stale line references in spec documents
apps/ios/CODE.md asks that every #Lxx-Lyy reference in an affected
spec document point at the right lines. Most of these were already
stale on master; this corrects them in the documents the online search
change touched. Numbers only: no wording changes. Kept apart from the
feature documentation so it can be reviewed or dropped on its own.

Run: 002-ios-directory-search-ui, review round 1 (R1-7)
2026-10-13 12:55:37 +00:00
spaced4ndy 4f3dabea26 ios: document online search in spec and product docs
apps/ios/CODE.md asks every iOS change to keep spec/ and product/ in
step with the code. The online search (SimpleX Directory and names, on
the chat list and in New chat) had no documentation, including the
parts added on this branch before: the spec gains a chat-list section
and a New chat section, the API entries for the service request and
the connection plan's failure mode, the impact and index rows and the
Document Map rows for the new source files; the product docs gain the
views, a concept row, rules for what the search may and may not do,
and the known gaps. Only line references moved by this branch's own
code are updated here.

Run: 002-ios-directory-search-ui, review round 1 (R1-7)
2026-10-13 12:46:52 +00:00
spaced4ndy ac1fc2d6c1 review: round 1 fixes
R1-1 New chat clears its online results on a profile switch, as the chat list does
R1-3 the search spinner follows its two flags through property observers
R1-4 the join verb keeps one line, so the name truncates instead

Run: 002-ios-directory-search-ui, review round 1
2026-10-13 12:35:12 +00:00
spaced4ndy eef174ea60 ios: search names and the directory from New chat
The New chat sheet gets the chat list's online search: a "Search in
Directory" row, the keyboard Search key for names and the directory,
and Names and Directory sections after the contacts. Tapping a result
connects and closes the sheet, as other New chat actions do. A contact
the list already shows is not repeated as a name result, and the
contacts list's empty state stays hidden while a search runs or shows
results. Archived contacts, which share the search bar and the list,
are unchanged.

Run: 002-ios-directory-search-ui, slice 4
2026-10-13 11:46:00 +00:00
spaced4ndy bfb62d2606 ios: resolve SimpleX names on search, show each result once
The keyboard Search key on the chat list now also resolves a typed
SimpleX name online, alongside the directory search, and shows what it
finds as a Names part between the local chats and the directory
results. Resolution never raises an alert: apiConnectPlan gains an
onFailure mode, and existing callers keep alerting by default.

Each directory entry is looked up in the store (store-only, as entries
are now group or channel links only) so a chat the user already sees
locally, or found by name, is not shown again; names already in the
local list are hidden the same way. A directory row is matched to a
name only by the link the core resolved, never by a profile field the
name's owner writes, so a name cannot hide a genuine directory row.

The "Search in Directory" row, retry and "Show more" keep the names
already shown. One helper drives the spinner from whether anything is
in flight, and every publish checks the search generation, so a late
reply after a text change or cancel writes nothing. The first-search
alert now also names the server that resolves names.

Run: 002-ios-directory-search-ui, slice 3
2026-10-13 11:42:47 +00:00
spaced4ndy 8bfae1fb53 ios: show directory results only with rows, and only group links
A directory result is untrusted input: an entry is kept only when its
link is a group or channel link, because the core fetches a one-time
invitation link even when asked for a store-only plan, and the next
slice looks every entry up in the store. The entry's link is no longer
optional, so the tap needs no unwrap and the id no fallback.

The Directory part now renders only when it has a row: no header while
loading, no "No results" row; the empty-state overlay shows when the
search finished with nothing. Its header is a row rather than a sticky
section header, which in the flipped one-hand list would pin at an
unverified position. Rows say "Join channel" or "Join group". A pasted
link in one-hand mode leaves the tags in place.

Run: 002-ios-directory-search-ui, slice 2
2026-10-13 11:33:26 +00:00
spaced4ndy 9e5d7fe831 ios: rename the directory search model and share its rows
The search model is about to hold name results beside directory
results, so it becomes OnlineSearchModel. The "Show more" and retry
rows, the first-search consent check and the contacts list's shown-chat
derivation move to where the New chat sheet can reuse them. No
behaviour change.

Run: 002-ios-directory-search-ui, slice 1
2026-10-13 11:26:46 +00:00
EvgenyandEvgeny @ SimpleX Chat 7d870c6ff5 ui: open file after tap when it is received (#7700)
* ui: open file after tap when it is received

* fix ios

* simplify

* simplify

* better

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-13 11:24:14 +01:00
spaced4ndy d009fdeab7 fixup! review: round 1 fixes 2026-10-13 14:19:00 +04:00
spaced4ndy 44902c1425 review: round 1 fixes
R1-1 add the service response to the exhaustive iOS and Kotlin response matches
R1-3 directory search cursor carries only the sort value of its mode, so the RPC no longer sends registration times
R1-4 a directory search does not take the progress spinner from a connection
R1-6 directory entry type, name and rounded times defined once for listing and RPC
R1-7 restore the directory test harness signatures of master, with link-pair variants for the new tests
R1-8 tests: compressed service request through SREQ, reject without a reason
2026-10-13 14:19:00 +04:00
EvgenyandEvgeny @ SimpleX Chat 1bd7c95006 ui: additional check for plain domains (#7699)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-10-13 08:53:04 +01:00
Evgeny d673a6b021 ui: show unicode characters in address as unicode markers (#7698)
* ui: show unicode characters in address as unicode markers

* defence in depth for links in messages (they are non-clickable from parser)

---------

Current code does not have this problem, as markdown parser rejects such links, and they are not clickable - it is needed for new markdown file viewer - this way unicode links in markdown show with unicode sequences instead of look-alike letters.
2026-10-13 08:42:59 +01:00