From 5567bfbdd00be799ae1de5cbf1572ad487de8b8b Mon Sep 17 00:00:00 2001 From: meetsu <96637888+klNuno@users.noreply.github.com> Date: Wed, 14 Oct 2026 10:29:18 +0000 Subject: [PATCH] feat(group): threads and agents of every machine in the island --- README.md | 4 +- src/components/island/MachineChip.svelte | 31 +++ .../island/assistant/AgentMenu.svelte | 23 +- .../island/assistant/AssistantChat.svelte | 2 +- .../island/sessions/SessionRow.svelte | 10 +- .../island/sessions/SessionsList.svelte | 10 +- src/lib/companion/companion.svelte.ts | 14 +- src/lib/companion/crew.svelte.ts | 19 ++ src/lib/companion/shell.ts | 6 +- src/lib/fake-client.ts | 8 +- src/lib/fake-client/assistant-demo.ts | 4 +- src/lib/fake-client/machines-demo.ts | 62 ++++-- src/lib/fake-client/server-demo.ts | 95 +++++--- src/lib/group/agents.ts | 68 ++++++ src/lib/group/group-client.ts | 51 ++++- src/lib/group/machines.test.ts | 207 ++++++++++++++++++ src/lib/group/routing.ts | 22 +- src/lib/island/assistant.svelte.test.ts | 21 +- src/lib/island/assistant.svelte.ts | 91 ++++---- src/lib/island/pose.ts | 9 +- src/lib/reveal.test.ts | 65 +++++- src/lib/reveal.ts | 72 ++++-- src/lib/strings.en.ts | 4 + src/lib/strings.fr.ts | 2 + 24 files changed, 747 insertions(+), 153 deletions(-) create mode 100644 src/components/island/MachineChip.svelte create mode 100644 src/lib/group/agents.ts create mode 100644 src/lib/group/machines.test.ts diff --git a/README.md b/README.md index 1c85f08..d4f35d3 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The pictures below come from the [demo mode](#demo-mode), on Boite's fake core. ### Every session at a glance -Point at the pill and the island opens as a deck of tabs. **Threads** lists every conversation running in Boite, however many there are, including those running on your other machines. Sub-agents fold under the conversation that started them. A click opens the thread in Boite. +Point at the pill and the island opens as a deck of tabs. **Threads** lists every conversation running in Boite, however many there are, including those running on your other machines, each with its machine's name. Sub-agents fold under the conversation that started them. A click opens the thread in Boite.

The deck open on its threads tab, listing the sessions at work, one of them unfolded on its sub-agents @@ -36,7 +36,7 @@ When an agent asks for a permission or has a question, the pill says so. Open it - **Threads**: the sessions at work and the requests waiting for you. - **Today**: the clock and the week, the next scheduled mission, your to-do list, a focus timer and the day's numbers. -- **Chat**: your conversation with B.O.T.S. +- **Chat**: your conversation with B.O.T.S, or with any agent of your Boite, on this machine or another one. - **Stats**: each subscription's quota windows and when they reset, the threads finished today with their files, time and tokens, and the memory your agents hold. - **Music**: the player, with the words. - **Apps**, **Clipboard**, **Wallpapers** and **System**: your computer, on Windows. diff --git a/src/components/island/MachineChip.svelte b/src/components/island/MachineChip.svelte new file mode 100644 index 0000000..348d7e0 --- /dev/null +++ b/src/components/island/MachineChip.svelte @@ -0,0 +1,31 @@ + + + +{machine} + + diff --git a/src/components/island/assistant/AgentMenu.svelte b/src/components/island/assistant/AgentMenu.svelte index 85faa5f..9aff6a8 100644 --- a/src/components/island/assistant/AgentMenu.svelte +++ b/src/components/island/assistant/AgentMenu.svelte @@ -1,7 +1,8 @@ @@ -71,20 +74,22 @@ > {agent.name} + {#if assistant.machine}{/if} {#if open}

diff --git a/src/components/island/assistant/AssistantChat.svelte b/src/components/island/assistant/AssistantChat.svelte index 862ee2f..3b7ce0f 100644 --- a/src/components/island/assistant/AssistantChat.svelte +++ b/src/components/island/assistant/AssistantChat.svelte @@ -123,7 +123,7 @@ class="ghost icon reveal" aria-label={fill(copy.openAgent, { name })} title={fill(copy.openAgent, { name })} - onclick={() => agent && void showAgent(agent.id).catch(() => {})} + onclick={() => agent && void showAgent(agent.id, assistant.coreId).catch(() => {})} data-testid="assistant-reveal" > diff --git a/src/components/island/sessions/SessionRow.svelte b/src/components/island/sessions/SessionRow.svelte index 6dba5c6..a53d3ba 100644 --- a/src/components/island/sessions/SessionRow.svelte +++ b/src/components/island/sessions/SessionRow.svelte @@ -8,7 +8,8 @@ here. An ended row offers to start the thread again, archive it, or show the changes in its folder (`NoticeActions.svelte`); archived, it can be undone for a few seconds (`archive-undo.ts`). A row can be followed in the pill - (`followed.ts`): a small eye before its time says so. The actions show on + (`followed.ts`): a small eye before its time says so. A thread of another + machine of the group names it in a chip after its project. The actions show on the row under the pointer or the focus, over the row's end and over its second line, so they take no room and the list never moves. The time reads calm (`session-time.ts`): seconds under a minute only. @@ -25,12 +26,15 @@ import { strings } from '../../../lib/strings'; import RobotFace from '../../agents/RobotFace.svelte'; import CompanionReply from '../../companion/CompanionReply.svelte'; + import MachineChip from '../MachineChip.svelte'; import NoticeActions from './NoticeActions.svelte'; import SubAgentList from './SubAgentList.svelte'; interface Props { row: SessionRow; project: string; + /** The machine of the group it runs on, when it is not this one. */ + machine?: string | null; now: number; /** The sub-agents of its current run, in start order (`sub-agents.ts`). */ agents: readonly SubAgent[]; @@ -47,7 +51,7 @@ onarchive(): Promise; } - let { row, project, now, agents, foldSpace, notice, notes, followed, onreveal, onfollow, onarchive }: Props = $props(); + let { row, project, machine = null, now, agents, foldSpace, notice, notes, followed, onreveal, onfollow, onarchive }: Props = $props(); const copy = strings.island.sessions; const foldable = $derived(agents.length > 0); @@ -70,7 +74,7 @@