Merge the connection settings into a "Spaces & devices" group

Open
#16 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
42/100
Issue type
Feature
Clarity
Clearly specified
Activity status
Active
Tech stack
tauri, typescript

Research direction

Read the settings registration in packages/session-core/src/settings/settings.ts and the page components SpacesSection.tsx, ConnectionServicesSection.tsx, RemoteConnectionsSection.tsx, and InboundConnectionsSection.tsx; then trace the existing tests and visual-proof scripts named in the issue. Move the listed settings content into the Spaces and Access pages, update navigation, search, translations, and recovery linking, and run the specified tests and visual proofs. Done means the listed behaviors, navigation, and desktop and phone screenshots all match the acceptance criteria.

Written by the indexing model from the issue text.

Description

enhancement

What feature would you like to see?

"Where can I go" and "who can come in" are spread over four places. Local spaces are under Settings → Spaces; spaces on other computers ("Kikis I connect to") are under Access from elsewhere → Other Kiki, below the list of who may connect to this Kiki; and a third "connect to a remote Kiki" form (SSH alias plus a typed owner token) sits at the bottom of the Workspaces page. The space menu's "Manage spaces…" opens Settings → Spaces, where an offline space on another computer that the menu just showed cannot be found.

Decided
  • The settings group "Connection & remote / 连接与远程" is renamed "Spaces & devices / 空间与设备" and holds four pages: Spaces (where I can go), Access (who can come in), This device's connection (is it working now), SSH hosts (unchanged).
  • Spaces on other computers move back to the Spaces page. The Access page keeps only what comes in.
  • The owner (SSH) profiles leave the Workspaces page and become rows in the Spaces page's "other computers" section, labelled "Owner (SSH)". They are not retired.
  • Page URLs do not change (/settings/spaces, /settings/connection-services, /settings/connection); only display names change, and the old names stay findable in settings search.
  • In a browser or on a phone, spaces on this computer are listed read-only: no "New space" and no "Add existing space…".
  • The identity block and the manual exchange of identities leave the regular page and go under "Advanced → Manual identity exchange", shown as one row with "Copy", not as raw JSON.
  • No storage or protocol changes.
Design

UI vocabulary: space (a place for work: conversations, memory, workspaces, settings, credentials), computer (the machine a space lives on), device (this desktop window, a browser, a phone), pairing (permission one space gives another space or a device). "Kiki" is not used as a countable noun ("remote Kiki", "other Kiki", "this Kiki") in new copy, and "owner", "home", "host", "inbound", "outbound", "invitation", "bridge" and "scope" do not appear in regular UI.

Group and pages (in this order):

Page Answers Content
空间 / Spaces where can I go spaces on this computer; spaces on other computers; (in a non-main space) accounts and keys, follow / pin; at the bottom, "本设备 / This device": window mode
接入 / Access who can come in tabs: 设备 / Devices (browsers and phones) · 其他空间 / Other spaces · 外部客户端 / External clients
本设备的连接 / This device's connection is it working today's diagnostics (the segmented view is a separate issue)
SSH 主机 / SSH hosts where agents execute unchanged

Keep the tab ids web, kiki, clients so ?tab= links keep working; only their labels change.

Spaces page.

Spaces
Each space has its own conversations, memory and workspaces.

Spaces on this computer                  [+ New space] [Add existing space…]
 ● Main space         …/.kiki                         Current     ⋯
 ● ACME confidential  Shared accounts · …/kiki-acme   Running  [Switch] ⋯
 ● Thesis writing     Separate accounts · …/thesis    Not started [Switch] ⋯

Spaces on other computers · openable from “Main space”          [+ Pair…]
 ◍ Workstation B
   b.example.test · Connected · 1 minute ago             [Switch] ⋯
 ◍ Home desktop
   home.example.test:8443 · Offline · as of 9 minutes ago [Switch] ⋯
 ◍ Build box                                    Owner (SSH)  [Connect…]

This device
 Window mode  [One window, switch between spaces] [One window per space]
              Takes effect the next time Kiki starts.
  • Section titles: zh "这台电脑上的空间" and "其他电脑上的空间 · 从「{空间名}」可以打开"; the second names the space whose pairing list this is.
  • The verb is "切换 / Switch" everywhere (phase 1 already renamed the row button).
  • Row menu for a paired space: Retry, Turn off / Turn on, Remove pairing…. (A "Thread messages…" item and a permissions line are added by the thread-message issue; "Rename" comes with phase 4.)
  • "+ Pair…" opens today's add-connection panel (pairing code or SSH) until the pairing-sheet issue replaces it.
  • Empty state: "还没有其他电脑上的空间。用“配对…”添加一个。" / "No spaces on other computers yet. Add one with “Pair…”."
  • Owner (SSH) rows: label "所有者(SSH)/ Owner (SSH)", action "连接… / Connect…", which opens today's form that asks for the token (the SshProfilesPanel behaviour, unchanged).
  • Browser and phone: spaces on this computer are listed without the create and add buttons; spaces on other computers show only those the owner allows this browser to open.
  • Opened while the window is in a space on another computer: the page starts with one line, "这里显示的是 {本机空间名} 的空间与配对。" (en: "These are the spaces and pairings of {space}."), followed by the two sections read from this device's own space. It must not request settings for a remote: space from this device's server (today it does: CurrentSpaceSettings asks /homes/remote%3A…/settings, which the server's main | h-… parameter rejects).
  • "This device" at the bottom holds the window-mode choice that today opens the page.

Access page.

  • Devices tab: Web access (today's content); signed-in browsers (today's content); "允许这些设备打开的其他空间" (today's "允许在浏览器切换的已连接远端 Kiki" checklist, renamed). A "Paired phones" list arrives with phase 4.
  • Other spaces tab: master switch "允许其他空间连接" / "Allow other spaces to connect"; the "配对码 / Pairing code" button; the list of grants, each row with its name, status ("已允许 / 等对方使用配对码 / 已撤销"; en: "Allowed / Waiting for the code to be used / Revoked") and last connection, menu "撤销… / Revoke…"; then one line "要打开的其他空间在“空间”页管理。" with a link to Settings → Spaces (en: "Spaces you open are managed on the Spaces page."). Under "高级 / Advanced": "手动交换身份 / Manual identity exchange", with this space's identity as one copyable row.
  • External clients tab: unchanged.

Recovery page link. NavScopeBoundary.tsx:23 points "Pair again…" at /settings/connection-services?tab=kiki; point it at /settings/spaces with the other-computers section focused.

Search. Keep every existing search entry resolving to the page that now shows it; add the old names as synonyms ("连接与远程", "外部接入", "其他 Kiki", "远端 Kiki", "Connection & remote", "Access from elsewhere", "Other Kiki", "Remote Kiki"). The outbound card entry already says section: 'spaces' (settings.ts:2752), which becomes true again with this change.

Strings: add and rename keys in both packages/session-core/src/i18n/en.ts and zh.ts. The design fixes the zh copy above; write en copy with the same meaning where only zh is given.

Where
  • packages/session-core/src/settings/settings.ts:2388-2391 (section labels), :2426 (the connection group: ['connection', 'spaces', 'ssh', 'connection-services']), :2446-2448 (legacy redirects), :2505 (connection-services purpose), :2667-2676 and :2750-2756 (search entries), :2262-2264 (connectionServicesTabLabelKey).
  • apps/kiki-gui/src/components/settings/ConnectionServicesSection.tsx:59-99 (tabs; the kiki tab renders InboundConnectionsSection and RemoteConnectionsSection at :86-91).
  • apps/kiki-gui/src/components/settings/SpacesSection.tsx:57-75 (page), :89-95 (CurrentSpaceSettings, the remote: request), :132 (WindowModeCard), :517-526 (create and add buttons, shown whenever not in a subspace).
  • apps/kiki-gui/src/components/settings/RemoteConnectionsSection.tsx:96-147 (outbound card; identity block at :139-146).
  • apps/kiki-gui/src/components/settings/InboundConnectionsSection.tsx:122-230.
  • apps/kiki-gui/src/components/settings/WorkspacesSection.tsx:196-200 (SshProfilesPanel mount) and apps/kiki-gui/src/components/SshProfilesPanel.tsx.
  • apps/kiki-gui/src/components/NavScopeBoundary.tsx:16-23.
  • Visual-proof scripts that select by data-remote-*, data-inbound-* and the connection-services path: apps/kiki-gui/scripts/visual-proof-remote-spaces.mjs (59 matches), visual-proof-spaces.mjs (28), visual-proof-remote-entry.mjs (7), visual-people-spaces-20261005.mjs (5).
Done when
  • The settings navigation shows the group "Spaces & devices / 空间与设备" with Spaces, Access, This device's connection, SSH hosts, in that order (SettingsNav.test.tsx; the distributed-registration regression in packages/session-core/src/settings/settings.test.ts stays green).
  • Every space shown in the space menu (local or on another computer) is on the Spaces page (test in SpacesSection.test.tsx).
  • The Access page's Other spaces tab shows no outbound list and no raw identity JSON; the identity is one copyable row under Advanced (test).
  • In a browser host the Spaces page has no "New space" button; in the desktop host it does (test).
  • In a space on another computer the Spaces page sends no request whose path contains remote: (test) and starts with the "These are the spaces and pairings of …" line.
  • Searching for each old name ("外部接入", "其他 Kiki", "Access from elsewhere", "Other Kiki", "Connection & remote") lands on the page that now holds that content (test).
  • The Workspaces page no longer shows the SSH profiles panel; the Spaces page shows the profiles as "Owner (SSH)" rows whose "Connect…" still asks for the token and connects.
  • "Pair again…" on the recovery page opens Settings → Spaces.
  • The four visual-proof scripts run green against the new layout.
  • Screenshots at desktop and phone width, light and dark, en and zh, with node apps/kiki-gui/scripts/visual-proof.mjs: Spaces page (main space, a subspace, a space on another computer, browser host), Access page on each tab. UI work is accepted only with these screenshots.
  • Phone-width screenshots are taken in a touch context (isMobile: true, hasTouch: true, as apps/kiki-gui/scripts/visual-proof-mobile-reading.mjs:294-300 does). Phone mode is (pointer: coarse) and (max-width: 639px) (apps/kiki-gui/src/lib/layoutHooks.ts:57), so a width-only --viewport narrow run of visual-proof.mjs shows the desktop layout squeezed, not the phone layout.

Additional information

Already in the tree from phase 1: the settings band and the pairing source line no longer show internal keys, the row verb is "Switch", and "owner" no longer appears in the zh copy.

Shared files: settings.ts, en.ts and zh.ts are also edited by the settings redesign of General / Workspaces / Memory / Extensions / Notifications, and WorkspacesSection.tsx by its Workspaces part; this issue only removes one mount from WorkspacesSection.tsx and touches the connection group and search entries in settings.ts, so land it first or rebase onto it without widening the change. NavScopeBoundary.tsx is edited again by the switch-panel issue, which goes after this one. RemoteConnectionsSection.tsx is edited again by the thread-message issue and InboundConnectionsSection.tsx by the pairing-sheet issue; both go after this one.

The "one window per space" mode was never seen running while this was designed; check the window-mode control in that mode as well.

The design wrote "本机的空间"; the GUI's i18n glossary in the tree (apps/kiki-gui/docs/i18n-glossary.md) reserves "这台电脑" for the computer running the server and rules out "本机", so this issue uses "这台电脑上的空间".

The settings page addresses stay as they are; documentation that cites the old names is updated in the documentation issue of this series.

Order and scope. Paths and line numbers refer to the code after the pending GUI interaction and mobile pull request is merged into kiki.
Main files: packages/session-core/src/settings/settings.ts, packages/session-core/src/settings/settings.test.ts, packages/session-core/src/i18n/en.ts, packages/session-core/src/i18n/zh.ts, apps/kiki-gui/src/components/settings/SpacesSection.tsx, apps/kiki-gui/src/components/settings/RemoteConnectionsSection.tsx, apps/kiki-gui/src/components/settings/ConnectionServicesSection.tsx, apps/kiki-gui/src/components/settings/InboundConnectionsSection.tsx, apps/kiki-gui/src/components/settings/WorkspacesSection.tsx, apps/kiki-gui/src/components/SshProfilesPanel.tsx, apps/kiki-gui/src/components/NavScopeBoundary.tsx, apps/kiki-gui/src/components/settings/SpacesSection.test.tsx and others.

Dominant language
TypeScript
Stars
54
Forks
5
Avg merge
2h 54m
Merged PRs (30d)
2

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from X-T-E-R/kiki

All issues in X-T-E-R/kiki

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.