Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions apps/ui/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ import { shortcutForAria } from "./keyboard/keymap";

// The Compass ADE shell — an Orca-inspired layout over the compass.v1 surface
// (docs/specs/product/compass.md). A CSS grid: a topbar, a left agent-folder
// tree, a central Bridge (swimlane board) / agent (ACP + terminals) view, a
// tree, a central Bridge (swimlane board) / agent (session + terminals) view, a
// right sidebar (fleet conversations + files/VCS/PR), and a bottom usage bar.
// The board is primary; the "channel" and "agent" surfaces render as center
// matches within the same shell (single Switch), reached via the store.
//
// This is the dev walking-skeleton made fully explorable: every surface reads
// the in-memory stub (stub-data.ts) through one store (store.ts), so it renders
// and is clickable in `vite dev` with no daemon and no Wails IPC. When the
// daemon grows the real board / agent / ACP / audit streams, the store's
// daemon grows the real board / agent / session / audit streams, the store's
// accessors swap the fixture for the generated @compass/client and the
// components stay as-is.

Expand Down
4 changes: 2 additions & 2 deletions apps/ui/src/agent-state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import type { AgentState } from "./stub-data";
* set, the projection falls back to the pure enum mapping.
*/
export interface AgentStreamRefinement {
/** An ACP permission / `ask` request is open on the stream — the agent has
* asked for input. Refines `WORKING` → `waiting` (Matt's "ask tool" state). */
/** An agent permission / `ask` request is open on the stream — the agent has
* asked for input. Refines `WORKING` → `waiting`. */
awaitingInput?: boolean;
/** The agent completed a turn and no human has opened its view yet. Refines
* `READY` → `done` (emerald check, deliberately not idle grey). */
Expand Down
26 changes: 13 additions & 13 deletions apps/ui/src/app.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* Compass ADE — dev UI styling. Dark, dense, board-first. An Orca-inspired
* shell: a left folder tree of agents, a central Bridge (swimlane board) or
* agent (ACP + terminals) view, and a right sidebar carrying the fleet
* agent (session + terminals) view, and a right sidebar carrying the fleet
* conversations (Supervisor · Status) above the issue files/VCS/PR
* tabs, plus a bottom usage bar. All read one store. */

Expand Down Expand Up @@ -761,7 +761,7 @@
color: var(--cx-error);
}

/* ── Agent view: ACP conversation + terminals ──────────────────────────── */
/* ── Agent view: session conversation + terminals ───────────────────────── */

.agent-view {
display: grid;
Expand Down Expand Up @@ -915,16 +915,16 @@
padding: 1px 4px;
}

/* ACP conversation column. */
.acp {
/* Session conversation column. */
.session {
display: flex;
flex-direction: column;
min-height: 0;
border-right: 1px solid var(--cx-border);
overflow: hidden;
}

.acp-stream {
.session-stream {
flex: 1;
overflow-y: auto;
padding: 14px;
Expand Down Expand Up @@ -1283,7 +1283,7 @@
}

/* The prompt composer (non-functional in the mockup). */
.acp-composer {
.session-composer {
flex: none;
border-top: 1px solid var(--cx-border);
padding: 10px 12px;
Expand All @@ -1292,7 +1292,7 @@
align-items: flex-end;
}

.acp-composer .field {
.session-composer .field {
flex: 1;
background: var(--cx-bg-panel);
border: 1px solid var(--cx-border);
Expand All @@ -1302,7 +1302,7 @@
font-size: 12px;
}

.acp-composer .send {
.session-composer .send {
background: var(--cx-accent);
border: none;
border-radius: var(--cx-radius-sm);
Expand Down Expand Up @@ -2362,14 +2362,14 @@

/* Fleet panes host a full-height flex conversation, not a scrolling document —
* the counterpart of .r-pane { overflow-y: auto }. The border-right suppression
* mirrors the dock's own .acp override against .acp's base border
* mirrors the dock's own session override against the session base border
* (dock-in-sidebar D3/T1). */
.r-pane.fleet {
display: flex;
overflow: hidden;
}

.r-pane.fleet .acp {
.r-pane.fleet .session {
flex: 1;
min-height: 0;
border-right: none;
Expand Down Expand Up @@ -2716,7 +2716,7 @@
overflow: hidden;
}

.av-pane-body .acp {
.av-pane-body .session {
flex: 1;
min-height: 0;
border-right: none;
Expand Down Expand Up @@ -3246,8 +3246,8 @@
font-size: 11px;
}

/* Conversation messages reuse the .msg family from the ACP view (role coloring,
* head layout). Channel-specific bits below. */
/* Conversation messages reuse the .msg family from the agent view (role
* coloring, head layout). Channel-specific bits below. */
.msg-text {
white-space: pre-wrap;
overflow-wrap: anywhere;
Expand Down
8 changes: 4 additions & 4 deletions apps/ui/src/comms-stub.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ export interface ChannelGroup {
}

/** A channel's kind (comms.proto ChannelKind). A plain channel is the default;
* DMs are direct conversations. An agent's ACP surface is NOT a channel — it is
* the agent workspace (the session observation panel), a separate surface. */
* DMs are direct conversations. An agent's session observation surface is not a
* channel — it is a separate workspace panel. */
export type ChannelKind = "channel" | "dm" | "group_dm";

/** Per-channel membership state — the still-in-design join/subscribe model
Expand Down Expand Up @@ -197,8 +197,8 @@ export function isQuestionAnswered(q: AskQuestion): boolean {
/** A durable content block inside a channel message. The comms model
* narrows the proto's MessageBlock oneof to the two durable conversation kinds:
* `text` (settled markdown, may carry @-mentions) and `ask` (an inline async
* question). The rich ACP blocks (thought/tool_call/plan/diff) are NOT part of
* the conversation — they render in the session observation panel. */
* question). Rich execution blocks (thought/tool_call/plan/diff) are not part
* of the conversation — they render in the session observation panel. */
export type ConvBlock =
| { kind: "text"; text: string }
| { kind: "ask"; ask: Ask };
Expand Down
10 changes: 5 additions & 5 deletions apps/ui/src/live/adapt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -263,11 +263,11 @@ export function adaptAsk(w: WireAsk): Ask {

/** Map a wire MessageBlock's oneof to a durable domain block, or `undefined` for
* any other/unset case. The domain narrows the proto oneof to the two DURABLE
* conversation kinds (comms-stub.ts:143-147): the rich ACP blocks
* (thought/tool_call/plan/diff) are execution trace that renders in the session
* observation panel, not the conversation, so a non-durable case is DROPPED —
* not mapped to a placeholder (which would render as a phantom message body)
* and not thrown on (which would blank the whole channel over one block). */
* conversation kinds (`ConvBlock` in comms-stub.ts): rich execution blocks
* (thought/tool_call/plan/diff) are session trace rendered in the observation
* panel, not conversation content, so a non-durable case is DROPPED — not
* mapped to a placeholder (which would render a phantom message body) and not
* thrown on (which would blank the whole channel over one block). */
function adaptBlock(w: WireMessage["blocks"][number]): ConvBlock | undefined {
switch (w.block.case) {
case "text":
Expand Down
42 changes: 21 additions & 21 deletions go/gen/compass/v1/comms.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 12 additions & 12 deletions go/gen/compass/v1/compassv1connect/comms.connect.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading