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
2 changes: 1 addition & 1 deletion apps/ui/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import { useStore } from "./context";
//
// 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 Tauri IPC. When the
// 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
// accessors swap the fixture for the generated @compass/client and the
// components stay as-is.
Expand Down
21 changes: 15 additions & 6 deletions apps/ui/src/components/MarkdownText.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
createResource,
createSignal,
For,
on,
onCleanup,
Show,
} from "solid-js";
Expand Down Expand Up @@ -332,12 +333,20 @@ function CodeBlock(props: {
const [settled, setSettled] = createSignal<readonly [string, string] | null>(
null,
);
createEffect(() => {
if (props.inline) return;
const next = [code(), lang()] as const;
const t = setTimeout(() => setSettled(next), HIGHLIGHT_DEBOUNCE_MS);
onCleanup(() => clearTimeout(t));
});
// Static-dep effect: track code/lang (and inline defensively — see below) via
// `on`, keeping the debounce apply UNTRACKED so the setTimeout/onCleanup cycle
// only re-runs when a tracked source changes. `inline` is a structural prop
// (the code override sets it once per node instance and never mutates it), but
// it is included in the deps rather than asserted invariant so the guard can
// never read a stale value if that ever changes.
createEffect(
on([code, lang, () => props.inline], ([nextCode, nextLang, inline]) => {
if (inline) return;
const next = [nextCode, nextLang] as const;
const t = setTimeout(() => setSettled(next), HIGHLIGHT_DEBOUNCE_MS);
onCleanup(() => clearTimeout(t));
}),
);
const [html] = createResource(
() => (props.inline ? null : settled()),
async (src) => {
Expand Down
2 changes: 1 addition & 1 deletion apps/ui/src/live/client.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Live client construction: a resolved Connection → the typed compass.v1 clients
// the store dials. The one place transport is chosen (compass-tauri-shell.md:
// 110-124) — the browser MVP builds gRPC-Web clients over the T3b network door
// through the shipped @compass/client factories; a hosted/Tauri transport is a
// through the shipped @compass/client factories; a hosted/Wails transport is a
// sibling built here later without touching a caller above this seam.
//
// Two clients from one connection: the CommsClient (the channel surface — the
Expand Down
2 changes: 1 addition & 1 deletion apps/ui/src/live/connection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// Transport is chosen at client construction (compass-tauri-shell.md:110-124):
// the browser MVP dials the T3b authenticated network door over gRPC-Web with a
// bearer token (the T3-door account token → `authorization: Bearer`). The
// hosted/handshake modes (GetServerInfo, a Tauri custom-fetch to a UDS) are
// hosted/handshake modes (GetServerInfo, a Wails custom-fetch to a UDS) are
// sibling transports layered at this same seam later — this module is the one
// place the baseUrl+token are resolved, so adding a mode never leaks a
// local-assumption above the transport boundary.
Expand Down
2 changes: 1 addition & 1 deletion apps/ui/src/markdown/highlighter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { HighlighterCore } from "shiki/core";

// Shiki code highlighting with a fine-grained bundle.
//
// The Compass UI ships inside the Tauri shell, so Shiki's pre-composed bundles
// The Compass UI ships inside the Wails shell, so Shiki's pre-composed bundles
// (full: 1.2 MB gzip; web: 695 KB) are disqualifying. Instead: `shiki/core`
// (~12 KB) + the JavaScript regex engine (no WASM asset to ship or load in the
// webview) + ONLY the grammars/themes this UI actually shows, imported as
Expand Down
4 changes: 2 additions & 2 deletions apps/ui/src/stub-data.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// Dev-only stub data for the Compass ADE UI.
//
// Compass is an Agentic Development Environment: a persistent daemon (compassd)
// with a Tauri shell rendering this web UI, meeting at the compass.v1 gRPC
// with a Wails shell rendering this web UI, meeting at the compass.v1 gRPC
// contract (docs/specs/product/compass.md). The real board / agent / ACP /
// audit event payloads are not built yet — the daemon today reports liveness and
// a daemon-status stream — so this module hand-fakes a representative fleet so
// the full interface is explorable in `vite dev` with no daemon and no Tauri IPC.
// the full interface is explorable in `vite dev` with no daemon and no Wails IPC.
//
// Everything here is a plain in-memory fixture. When the daemon grows the board,
// agent-runtime (ACP over compass.v1, design record compass-0.4), and audit
Expand Down
Loading