Merge the connection settings into a "Spaces & devices" group
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
- Domain
- developer-experience, frontend
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
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
SshProfilesPanelbehaviour, 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:CurrentSpaceSettingsasks/homes/remote%3A…/settings, which the server'smain | 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(theconnectiongroup:['connection', 'spaces', 'ssh', 'connection-services']),:2446-2448(legacy redirects),:2505(connection-servicespurpose),:2667-2676and:2750-2756(search entries),:2262-2264(connectionServicesTabLabelKey).apps/kiki-gui/src/components/settings/ConnectionServicesSection.tsx:59-99(tabs; thekikitab rendersInboundConnectionsSectionandRemoteConnectionsSectionat:86-91).apps/kiki-gui/src/components/settings/SpacesSection.tsx:57-75(page),:89-95(CurrentSpaceSettings, theremote: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(SshProfilesPanelmount) andapps/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 theconnection-servicespath: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 inpackages/session-core/src/settings/settings.test.tsstays 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, asapps/kiki-gui/scripts/visual-proof-mobile-reading.mjs:294-300does). Phone mode is(pointer: coarse) and (max-width: 639px)(apps/kiki-gui/src/lib/layoutHooks.ts:57), so a width-only--viewport narrowrun ofvisual-proof.mjsshows 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
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from X-T-E-R/kiki
-
Document PowerShell shell semantics and read-only Bash deduplication in Built-in Tools referenceOpendocumentation
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
bug documentation
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
-
bug
Difficulty 4/5 3-5 days Newbie friendliness 54/100
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 1/100
-
documentation
Difficulty 5/5 Over a week Newbie friendliness 25/100
Similar issues
-
area: cli priority: P3 type: bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
appandflow/stim#5640 · 1 comment ·
Maintainers usually reply within 1 day
-
Claude Code: hook systemMessage lines never reach the chatPossibly taken @chphch claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
slopus/happy-agent#139 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
NangoHQ/nango#8285 · 1 comment ·
Maintainers usually reply within 1 day
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulty 1/5 Under an hour Newbie friendliness 85/100
lingdojo/kana-dojo#34009 · 1 comment · 5 reactions ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 73/100
paperclipai/paperclip#21197 ·
Maintainers usually reply within 1 day