Skip to content

Commit b13e55f

Browse files
authored
Merge pull request #6302 from jennyf19/desk-groups
feat(signals-dashboard): discover desks in *-desks group folders 🤖🤖🤖
2 parents ec951e5 + 00046f1 commit b13e55f

13 files changed

Lines changed: 567 additions & 138 deletions

File tree

‎.github/plugin/marketplace.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2625,7 +2625,7 @@
26252625
"name": "signals-dashboard",
26262626
"source": "plugins/signals-dashboard",
26272627
"description": "Real-time Workshop dashboard with agent signals, honesty calibration, cost-aware desk profiles, and fail-closed Local Delegation.",
2628-
"version": "0.3.1"
2628+
"version": "0.3.2"
26292629
},
26302630
{
26312631
"name": "site-studio",
@@ -2848,7 +2848,7 @@
28482848
"name": "the-workshop",
28492849
"source": "plugins/the-workshop",
28502850
"description": "Stop being the switchboard between your AI agents — direct a team. The Workshop puts long-running AI agents (desks) in the same room, on the same work, each with its own memory and history, sharing one workspace so you direct the work instead of relaying it.",
2851-
"version": "0.1.1"
2851+
"version": "0.1.2"
28522852
},
28532853
{
28542854
"name": "timebase",

‎agents/workshop-ta.agent.md‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ room. When the operator asks "what's everyone working on?" or
1818
A **workshop** is a named directory containing desks that share a
1919
workspace. Each desk is a persistent workstream — a seat that
2020
independent Copilot CLI sessions pick up over time, not one
21-
long-running process. Each desk has:
21+
long-running process. Desks live in `desks/<name>/` at the workshop
22+
root, or in group folders whose names end in `-desks` (for example
23+
`team-desks/<name>/`). To find a desk, look in `desks/` first, then in
24+
each `*-desks/` folder; if two groups have a desk with the same name,
25+
call it by its folder (`team-desks/<name>`). Each desk has:
2226

2327
- **A journal** (`journal.md`) — persistent memory across sessions.
2428
Every desk reads its own journal at the start and writes to it
@@ -81,6 +85,7 @@ operator decide:
8185
- What the desk's focus is (scanning, ops, review, etc.)
8286
- Which repos or work it covers
8387
- Whether it needs a specific agent configuration
88+
- Whether it belongs in `desks/` (the default) or a `<group>-desks/` folder
8489

8590
### Track desk state
8691

@@ -108,7 +113,8 @@ Use `signal-write` when something needs the operator's attention:
108113

109114
The Workshop has a canvas extension — **🪨 Cairn** — that shows a live dashboard
110115
of every desk's signals, score bars, and escalations. It reads
111-
`desks/*/.signals/` for the latest signal JSON per desk.
116+
`desks/*/.signals/` and every `<group>-desks/*/.signals/` for the latest
117+
signal JSON per desk, with a header per folder when desks are grouped.
112118

113119
The canvas does **not** auto-load when the plugin is installed. To see the live
114120
board, install and register the `signals-dashboard` extension separately. If the

‎extensions/signals-dashboard/README.md‎

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,22 @@ Ask Copilot to open it and pass your workshop root as `workshopDir`:
3030
> my `desks/` directory.
3131
3232
`workshopDir` must be the **absolute path to the workshop root** — the folder
33-
that holds `desks/` (and optionally `classroom/`). If omitted, it falls back to
34-
the current working directory.
33+
that holds `desks/` (and optionally `classroom/` or `*-desks/` group folders).
34+
If omitted, it falls back to the current working directory.
3535

3636
## Features
3737

38-
- **Signal scanning** — walks `desks/*/.signals/` and `classroom/*/.signals/`,
39-
reading the newest `*.json` per desk (mirrors `SignalReader.cs`).
38+
- **Signal scanning** — walks `desks/*/.signals/`, `classroom/*/.signals/`, and
39+
`<group>-desks/*/.signals/`, reading the newest `*.json` per desk.
40+
- **Desk groups** — besides `desks/`, any top-level folder whose name ends in
41+
`-desks` (case-insensitive, for example `team-desks/`) holds desks; dot-folders
42+
are skipped. Each desk keeps its folder name for display and gets a unique
43+
`deskId` of `<group>/<desk>` (for example `team-desks/forge`), so two groups
44+
can each have a `forge` desk. When desks come from more than one folder, the
45+
board pins every escalation in an **Escalations** section at the top (labeled
46+
by `deskId`), then shows a header per folder, newest signal first; folders
47+
with no signals yet follow in scan order (`desks`, `classroom`, then the
48+
groups by name). A workshop that only uses `desks/` looks the same as before.
4049
- **Score bars** — color-coded intent / confidence / accuracy / completeness,
4150
scored out of 5.
4251
- **Escalation alerts** — escalation signals sort to the very top, render with a
@@ -46,7 +55,8 @@ the current working directory.
4655
- **Stash / restore** — pause a workstream by stashing its desk. Stashed desks
4756
drop off the active view and auto-expire after a **48-hour TTL**; restore any
4857
time before then. Stash state lives in `.desk-stash.json` at the workshop
49-
root.
58+
root, keyed by `deskId`. Older entries that hold only a desk name still hide
59+
that desk in `desks/` and `classroom/`.
5060
- **Auto-refresh** — the panel refreshes every 5 seconds using a background
5161
fetch (no full page reload), so scores and escalations stay current smoothly.
5262
- **Summary bar** — desk count, how many are reporting vs. awaiting, an
@@ -65,12 +75,17 @@ the current working directory.
6575

6676
The canvas also exposes actions Copilot can invoke directly:
6777

68-
- `refresh` — force a rescan and return current signal data as JSON.
78+
- `refresh` — force a rescan and return current signal data as JSON, including
79+
each desk's `deskName`, `group`, and `deskId`.
6980
- `stash` — stash a desk by `deskName`.
7081
- `restore` — restore a stashed desk by `deskName`.
7182
- `open_desk` — open a desk with optional `profile: "repo" | "connected"` and
7283
optional `localDelegation: "off" | "on"`, `model`, `reasoningEffort`, and `context`.
7384

85+
`deskName` accepts a `deskId` such as `team-desks/forge`, or a plain folder name,
86+
which resolves to the first match in `desks/`, `classroom/`, then the `*-desks/`
87+
groups in name order.
88+
7489
## Desk launch profiles
7590

7691
`repo` is the default. At launch, Cairn asks Copilot for the enabled

0 commit comments

Comments
 (0)