bots-garden/sidekickspublic Fork
⑂ 9f73e9e
Commits
⬇ Clone ▾
git clone https://git.rickub.com/bots-garden/sidekicks.git
git clone ssh://git@rickub.com/bots-garden/sidekicks.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP

🛟 Updated.

k33g committed 2026-10-29T10:41:28+01:00 Browse files
9f73e9e parent: 2e8042b
modified .memory/handoffs/2026-10-29-milestone-initialize.md +2 -0
@@ -32,4 +32,6 @@ Initialize is implemented on branch `feature/initialize` (not committed by the a
3232 - Running the Wails app headless: Xvfb + `GDK_BACKEND=x11 WEBKIT_DISABLE_DMABUF_RENDERER=1 dbus-launch`; drive with `xdotool`, capture with `import -window root`.
3333 - rsvg collapses spaces in SVG text: the wireframe generator sets `xml:space="preserve"`.
3434 - `make` prints "Clock skew detected" on the shared folder; harmless.
35+- The repository folder is shared with the owner's Mac: after `npm install` on macOS, `spikes/wails-ui/frontend/node_modules` holds darwin-only native bindings (rolldown, lightningcss) and the frontend build fails in the Linux sandbox ("Cannot find native binding"). Do not reinstall there (it would break the Mac); build a copy in the scratchpad (`tar --exclude=frontend/node_modules …`, `npm ci`).
36+- macOS hidden-inset title bar: the left dock is padded by `--titlebar-inset` (38px under `:root.macos`, set from `System.IsMac()`), which must match `InvisibleTitleBarHeight` in `spikes/wails-ui/main.go`. The real Sidekicks shell (#12) must keep this.
3537 - The ACP traces of Riker (`riker-reject.jsonl`, ~470 kB) are large on purpose: they document the retry loop.
@@ -32,4 +32,6 @@ Initialize is implemented on branch `feature/initialize` (not committed by the a
32 - Running the Wails app headless: Xvfb + `GDK_BACKEND=x11 WEBKIT_DISABLE_DMABUF_RENDERER=1 dbus-launch`; drive with `xdotool`, capture with `import -window root`.32 - Running the Wails app headless: Xvfb + `GDK_BACKEND=x11 WEBKIT_DISABLE_DMABUF_RENDERER=1 dbus-launch`; drive with `xdotool`, capture with `import -window root`.
33 - rsvg collapses spaces in SVG text: the wireframe generator sets `xml:space="preserve"`.33 - rsvg collapses spaces in SVG text: the wireframe generator sets `xml:space="preserve"`.
34 - `make` prints "Clock skew detected" on the shared folder; harmless.34 - `make` prints "Clock skew detected" on the shared folder; harmless.
35+- The repository folder is shared with the owner's Mac: after `npm install` on macOS, `spikes/wails-ui/frontend/node_modules` holds darwin-only native bindings (rolldown, lightningcss) and the frontend build fails in the Linux sandbox ("Cannot find native binding"). Do not reinstall there (it would break the Mac); build a copy in the scratchpad (`tar --exclude=frontend/node_modules …`, `npm ci`).
36+- macOS hidden-inset title bar: the left dock is padded by `--titlebar-inset` (38px under `:root.macos`, set from `System.IsMac()`), which must match `InvisibleTitleBarHeight` in `spikes/wails-ui/main.go`. The real Sidekicks shell (#12) must keep this.
35 - The ACP traces of Riker (`riker-reject.jsonl`, ~470 kB) are large on purpose: they document the retry loop.37 - The ACP traces of Riker (`riker-reject.jsonl`, ~470 kB) are large on purpose: they document the retry loop.
modified .memory/history.md +6 -0
@@ -23,3 +23,9 @@
2323 - **Changes**: `docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md`, `docs/en/how-to/test-milestone-initialize-on-macos.md`, both indexes; comment on #3. Fixed `spikes/wails-ui/README.md`: the `.app` comes from `wails3 package`, not `wails3 build`.
2424 - **Tests**: guide commands cross-checked against the sandbox runs and the Wails v3 CLI (`wails3 package` exists, darwin Taskfile creates `bin/wails-ui.app`); not run on a Mac.
2525 - **Docs**: how-to in EN and FR.
26+
27+## 2026-10-29 — macOS check feedback: traffic lights over "CHANNELS"
28+
29+- **Goal**: the owner ran the macOS guide; everything works except the traffic lights overlapping the "CHANNELS" heading.
30+- **Changes**: `spikes/wails-ui`: `--titlebar-inset` CSS variable (0, 38px under `:root.macos`), `macos` class set from `System.IsMac()` in `main.ts`, left dock padded by it; comment linking it to `InvisibleTitleBarHeight` in `main.go`. Guide point 7 updated (EN/FR).
31+- **Tests**: shared `node_modules` now holds the Mac's darwin bindings, so the build was verified on a scratchpad copy (`npm ci`, `npm run build`, `svelte-check` 0/0, `go vet`), and the layout checked under Xvfb with the class forced on. Not re-checked on the Mac yet.
@@ -23,3 +23,9 @@
23 - **Changes**: `docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md`, `docs/en/how-to/test-milestone-initialize-on-macos.md`, both indexes; comment on #3. Fixed `spikes/wails-ui/README.md`: the `.app` comes from `wails3 package`, not `wails3 build`.23 - **Changes**: `docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md`, `docs/en/how-to/test-milestone-initialize-on-macos.md`, both indexes; comment on #3. Fixed `spikes/wails-ui/README.md`: the `.app` comes from `wails3 package`, not `wails3 build`.
24 - **Tests**: guide commands cross-checked against the sandbox runs and the Wails v3 CLI (`wails3 package` exists, darwin Taskfile creates `bin/wails-ui.app`); not run on a Mac.24 - **Tests**: guide commands cross-checked against the sandbox runs and the Wails v3 CLI (`wails3 package` exists, darwin Taskfile creates `bin/wails-ui.app`); not run on a Mac.
25 - **Docs**: how-to in EN and FR.25 - **Docs**: how-to in EN and FR.
26+
27+## 2026-10-29 — macOS check feedback: traffic lights over "CHANNELS"
28+
29+- **Goal**: the owner ran the macOS guide; everything works except the traffic lights overlapping the "CHANNELS" heading.
30+- **Changes**: `spikes/wails-ui`: `--titlebar-inset` CSS variable (0, 38px under `:root.macos`), `macos` class set from `System.IsMac()` in `main.ts`, left dock padded by it; comment linking it to `InvisibleTitleBarHeight` in `main.go`. Guide point 7 updated (EN/FR).
31+- **Tests**: shared `node_modules` now holds the Mac's darwin bindings, so the build was verified on a scratchpad copy (`npm ci`, `npm run build`, `svelte-check` 0/0, `go vet`), and the layout checked under Xvfb with the class forced on. Not re-checked on the Mac yet.
modified docs/en/how-to/test-milestone-initialize-on-macos.md +1 -1
@@ -157,7 +157,7 @@ The first run compiles Go and the frontend (one to two minutes). A "Sidekicks
157157 4. **Terminal**: click in the black panel, type `ls`, then `top`; enlarge the bottom panel while `top` runs: the display follows. Leave `top` with `q`.
158158 5. **YAML editor**: the right panel colours the YAML; typing works.
159159 6. **Theme**: System Settings → Appearance → switch Light / Dark: the conversation, the code and the dock follow (the YAML editor keeps the theme it started with — a known limit of the prototype).
160-7. **macOS window**: the title bar is integrated (red/orange/green buttons over the application's background).
160+7. **macOS window**: the title bar is integrated (red/orange/green buttons over the application's background) and the left dock starts below those buttons: "CHANNELS" is not covered.
161161
162162 - [ ] Points 1 to 7 are as described.
163163
@@ -157,7 +157,7 @@ The first run compiles Go and the frontend (one to two minutes). A "Sidekicks
157 4. **Terminal**: click in the black panel, type `ls`, then `top`; enlarge the bottom panel while `top` runs: the display follows. Leave `top` with `q`.157 4. **Terminal**: click in the black panel, type `ls`, then `top`; enlarge the bottom panel while `top` runs: the display follows. Leave `top` with `q`.
158 5. **YAML editor**: the right panel colours the YAML; typing works.158 5. **YAML editor**: the right panel colours the YAML; typing works.
159 6. **Theme**: System Settings → Appearance → switch Light / Dark: the conversation, the code and the dock follow (the YAML editor keeps the theme it started with — a known limit of the prototype).159 6. **Theme**: System Settings → Appearance → switch Light / Dark: the conversation, the code and the dock follow (the YAML editor keeps the theme it started with — a known limit of the prototype).
160-7. **macOS window**: the title bar is integrated (red/orange/green buttons over the application's background).160+7. **macOS window**: the title bar is integrated (red/orange/green buttons over the application's background) and the left dock starts below those buttons: "CHANNELS" is not covered.
161 161
162 - [ ] Points 1 to 7 are as described.162 - [ ] Points 1 to 7 are as described.
163 163
modified docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md +1 -1
@@ -157,7 +157,7 @@ Le premier lancement compile le Go et le frontend (une à deux minutes). Une fen
157157 4. **Terminal** : cliquez dans le panel noir, tapez `ls`, puis `top` ; agrandissez le panel du bas pendant que `top` tourne : l'affichage suit. Quittez `top` avec `q`.
158158 5. **Éditeur YAML** : le panel de droite colore le YAML ; tapez du texte, l'édition fonctionne.
159159 6. **Thème** : Réglages Système → Apparence → basculez Clair / Sombre : la conversation, le code et le dock suivent (l'éditeur YAML garde le thème du lancement — limite connue du prototype).
160-7. **Fenêtre macOS** : la barre de titre est intégrée (boutons rouge/orange/vert sur le fond de l'application).
160+7. **Fenêtre macOS** : la barre de titre est intégrée (boutons rouge/orange/vert sur le fond de l'application) et le dock gauche commence sous ces boutons : « CHANNELS » n'est pas recouvert.
161161
162162 - [ ] Les points 1 à 7 sont conformes.
163163
@@ -157,7 +157,7 @@ Le premier lancement compile le Go et le frontend (une à deux minutes). Une fen
157 4. **Terminal** : cliquez dans le panel noir, tapez `ls`, puis `top` ; agrandissez le panel du bas pendant que `top` tourne : l'affichage suit. Quittez `top` avec `q`.157 4. **Terminal** : cliquez dans le panel noir, tapez `ls`, puis `top` ; agrandissez le panel du bas pendant que `top` tourne : l'affichage suit. Quittez `top` avec `q`.
158 5. **Éditeur YAML** : le panel de droite colore le YAML ; tapez du texte, l'édition fonctionne.158 5. **Éditeur YAML** : le panel de droite colore le YAML ; tapez du texte, l'édition fonctionne.
159 6. **Thème** : Réglages Système → Apparence → basculez Clair / Sombre : la conversation, le code et le dock suivent (l'éditeur YAML garde le thème du lancement — limite connue du prototype).159 6. **Thème** : Réglages Système → Apparence → basculez Clair / Sombre : la conversation, le code et le dock suivent (l'éditeur YAML garde le thème du lancement — limite connue du prototype).
160-7. **Fenêtre macOS** : la barre de titre est intégrée (boutons rouge/orange/vert sur le fond de l'application).160+7. **Fenêtre macOS** : la barre de titre est intégrée (boutons rouge/orange/vert sur le fond de l'application) et le dock gauche commence sous ces boutons : « CHANNELS » n'est pas recouvert.
161 161
162 - [ ] Les points 1 à 7 sont conformes.162 - [ ] Les points 1 à 7 sont conformes.
163 163
modified spikes/wails-ui/build/darwin/Assets.car +0 -0
Binary files a/spikes/wails-ui/build/darwin/Assets.car and b/spikes/wails-ui/build/darwin/Assets.car differ
Binary files a/spikes/wails-ui/build/darwin/Assets.car and b/spikes/wails-ui/build/darwin/Assets.car differBinary files a/spikes/wails-ui/build/darwin/Assets.car and b/spikes/wails-ui/build/darwin/Assets.car differ
modified spikes/wails-ui/build/darwin/icons.icns +0 -0
Binary files a/spikes/wails-ui/build/darwin/icons.icns and b/spikes/wails-ui/build/darwin/icons.icns differ
Binary files a/spikes/wails-ui/build/darwin/icons.icns and b/spikes/wails-ui/build/darwin/icons.icns differBinary files a/spikes/wails-ui/build/darwin/icons.icns and b/spikes/wails-ui/build/darwin/icons.icns differ
modified spikes/wails-ui/build/windows/icon.ico +0 -0
Binary files a/spikes/wails-ui/build/windows/icon.ico and b/spikes/wails-ui/build/windows/icon.ico differ
Binary files a/spikes/wails-ui/build/windows/icon.ico and b/spikes/wails-ui/build/windows/icon.ico differBinary files a/spikes/wails-ui/build/windows/icon.ico and b/spikes/wails-ui/build/windows/icon.ico differ
modified spikes/wails-ui/frontend/bindings/git.rickub.com/bots-garden/sidekicks/spikes/wails-ui/index.ts +1 -1
@@ -8,6 +8,6 @@ export {
88 TerminalService
99 };
1010
11-export {
11+export type {
1212 StreamChunk
1313 } from "./models.js";
@@ -8,6 +8,6 @@ export {
8 TerminalService8 TerminalService
9 };9 };
10 10
11-export {11+export type {
12 StreamChunk12 StreamChunk
13 } from "./models.js";13 } from "./models.js";
modified spikes/wails-ui/frontend/bindings/git.rickub.com/bots-garden/sidekicks/spikes/wails-ui/models.ts +1 -25
@@ -1,35 +1,11 @@
11 // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
22 // This file is automatically generated. DO NOT EDIT
33
4-// eslint-disable-next-line @typescript-eslint/ban-ts-comment
5-// @ts-ignore: Unused imports
6-import { Create as $Create } from "@wailsio/runtime";
7-
84 /**
95 * StreamChunk is one fragment of a simulated agent answer, like an ACP
106 * agent_message_chunk. Done marks the end of the turn.
117 */
12-export class StreamChunk {
8+export interface StreamChunk {
139 "text": string;
1410 "done": boolean;
15-
16- /** Creates a new StreamChunk instance. */
17- constructor($$source: Partial<StreamChunk> = {}) {
18- if (!("text" in $$source)) {
19- this["text"] = "";
20- }
21- if (!("done" in $$source)) {
22- this["done"] = false;
23- }
24-
25- Object.assign(this, $$source);
26- }
27-
28- /**
29- * Creates a new StreamChunk instance from a string or object.
30- */
31- static createFrom($$source: any = {}): StreamChunk {
32- let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
33- return new StreamChunk($$parsedSource as Partial<StreamChunk>);
34- }
3511 }
@@ -1,35 +1,11 @@
1 // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL1 // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
2 // This file is automatically generated. DO NOT EDIT2 // This file is automatically generated. DO NOT EDIT
3 3
4-// eslint-disable-next-line @typescript-eslint/ban-ts-comment
5-// @ts-ignore: Unused imports
6-import { Create as $Create } from "@wailsio/runtime";
7-
8 /**4 /**
9 * StreamChunk is one fragment of a simulated agent answer, like an ACP5 * StreamChunk is one fragment of a simulated agent answer, like an ACP
10 * agent_message_chunk. Done marks the end of the turn.6 * agent_message_chunk. Done marks the end of the turn.
11 */7 */
12-export class StreamChunk {8+export interface StreamChunk {
13 "text": string;9 "text": string;
14 "done": boolean;10 "done": boolean;
15-
16- /** Creates a new StreamChunk instance. */
17- constructor($$source: Partial<StreamChunk> = {}) {
18- if (!("text" in $$source)) {
19- this["text"] = "";
20- }
21- if (!("done" in $$source)) {
22- this["done"] = false;
23- }
24-
25- Object.assign(this, $$source);
26- }
27-
28- /**
29- * Creates a new StreamChunk instance from a string or object.
30- */
31- static createFrom($$source: any = {}): StreamChunk {
32- let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
33- return new StreamChunk($$parsedSource as Partial<StreamChunk>);
34- }
35 }11 }
modified spikes/wails-ui/frontend/bindings/git.rickub.com/bots-garden/sidekicks/spikes/wails-ui/streamservice.ts +1 -1
@@ -9,7 +9,7 @@
99
1010 // eslint-disable-next-line @typescript-eslint/ban-ts-comment
1111 // @ts-ignore: Unused imports
12-import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "@wailsio/runtime";
12+import { Call as $Call, CancellablePromise as $CancellablePromise } from "@wailsio/runtime";
1313
1414 /**
1515 * Simulate emits sampleAnswer as fragments of chunkSize runes, one every
@@ -9,7 +9,7 @@
9 9
10 // eslint-disable-next-line @typescript-eslint/ban-ts-comment10 // eslint-disable-next-line @typescript-eslint/ban-ts-comment
11 // @ts-ignore: Unused imports11 // @ts-ignore: Unused imports
12-import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "@wailsio/runtime";12+import { Call as $Call, CancellablePromise as $CancellablePromise } from "@wailsio/runtime";
13 13
14 /**14 /**
15 * Simulate emits sampleAnswer as fragments of chunkSize runes, one every15 * Simulate emits sampleAnswer as fragments of chunkSize runes, one every
modified spikes/wails-ui/frontend/bindings/git.rickub.com/bots-garden/sidekicks/spikes/wails-ui/terminalservice.ts +1 -1
@@ -10,7 +10,7 @@
1010
1111 // eslint-disable-next-line @typescript-eslint/ban-ts-comment
1212 // @ts-ignore: Unused imports
13-import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "@wailsio/runtime";
13+import { Call as $Call, CancellablePromise as $CancellablePromise } from "@wailsio/runtime";
1414
1515 /**
1616 * Resize follows the size of the terminal panel (sends SIGWINCH to the shell).
@@ -10,7 +10,7 @@
10 10
11 // eslint-disable-next-line @typescript-eslint/ban-ts-comment11 // eslint-disable-next-line @typescript-eslint/ban-ts-comment
12 // @ts-ignore: Unused imports12 // @ts-ignore: Unused imports
13-import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "@wailsio/runtime";13+import { Call as $Call, CancellablePromise as $CancellablePromise } from "@wailsio/runtime";
14 14
15 /**15 /**
16 * Resize follows the size of the terminal panel (sends SIGWINCH to the shell).16 * Resize follows the size of the terminal panel (sends SIGWINCH to the shell).
modified spikes/wails-ui/frontend/bindings/github.com/wailsapp/wails/v3/internal/eventcreate.ts +1 -14
@@ -6,17 +6,4 @@
66 // @ts-ignore: Unused imports
77 import { Create as $Create } from "@wailsio/runtime";
88
9-// eslint-disable-next-line @typescript-eslint/ban-ts-comment
10-// @ts-ignore: Unused imports
11-import * as main$0 from "../../../../../git.rickub.com/bots-garden/sidekicks/spikes/wails-ui/models.js";
12-
13-function configure() {
14- Object.freeze(Object.assign($Create.Events, {
15- "chat:chunk": $$createType0,
16- }));
17-}
18-
19-// Private type creation functions
20-const $$createType0 = main$0.StreamChunk.createFrom;
21-
22-configure();
9+Object.freeze($Create.Events);
@@ -6,17 +6,4 @@
6 // @ts-ignore: Unused imports6 // @ts-ignore: Unused imports
7 import { Create as $Create } from "@wailsio/runtime";7 import { Create as $Create } from "@wailsio/runtime";
8 8
9-// eslint-disable-next-line @typescript-eslint/ban-ts-comment9+Object.freeze($Create.Events);
10-// @ts-ignore: Unused imports
11-import * as main$0 from "../../../../../git.rickub.com/bots-garden/sidekicks/spikes/wails-ui/models.js";
12-
13-function configure() {
14- Object.freeze(Object.assign($Create.Events, {
15- "chat:chunk": $$createType0,
16- }));
17-}
18-
19-// Private type creation functions
20-const $$createType0 = main$0.StreamChunk.createFrom;
21-
22-configure();
modified spikes/wails-ui/frontend/public/style.css +7 -0
@@ -14,9 +14,16 @@
1414 --radius: 8px;
1515 --font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
1616 --mono: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
17+ /* Height of the area covered by the macOS traffic lights; 0 elsewhere. */
18+ --titlebar-inset: 0px;
1719 color-scheme: dark;
1820 }
1921
22+/* Must match InvisibleTitleBarHeight in main.go. */
23+:root.macos {
24+ --titlebar-inset: 38px;
25+}
26+
2027 @media (prefers-color-scheme: light) {
2128 :root {
2229 --bg: #f6f6f7;
@@ -14,9 +14,16 @@
14 --radius: 8px;14 --radius: 8px;
15 --font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;15 --font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
16 --mono: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;16 --mono: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
17+ /* Height of the area covered by the macOS traffic lights; 0 elsewhere. */
18+ --titlebar-inset: 0px;
17 color-scheme: dark;19 color-scheme: dark;
18 }20 }
19 21
22+/* Must match InvisibleTitleBarHeight in main.go. */
23+:root.macos {
24+ --titlebar-inset: 38px;
25+}
26+
20 @media (prefers-color-scheme: light) {27 @media (prefers-color-scheme: light) {
21 :root {28 :root {
22 --bg: #f6f6f7;29 --bg: #f6f6f7;
modified spikes/wails-ui/frontend/src/App.svelte +1 -1
@@ -40,7 +40,7 @@
4040 </PaneGroup>
4141
4242 <style>
43- .dock { height: 100%; padding: 12px 8px; background: var(--panel); overflow-y: auto; }
43+ .dock { height: 100%; padding: calc(12px + var(--titlebar-inset)) 8px 12px; background: var(--panel); overflow-y: auto; }
4444 h2 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); margin: 16px 8px 6px; }
4545 h2:first-child { margin-top: 0; }
4646 a, .agent { display: block; padding: 5px 8px; border-radius: 6px; color: var(--text); text-decoration: none; }
@@ -40,7 +40,7 @@
40 </PaneGroup>40 </PaneGroup>
41 41
42 <style>42 <style>
43- .dock { height: 100%; padding: 12px 8px; background: var(--panel); overflow-y: auto; }43+ .dock { height: 100%; padding: calc(12px + var(--titlebar-inset)) 8px 12px; background: var(--panel); overflow-y: auto; }
44 h2 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); margin: 16px 8px 6px; }44 h2 { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--muted); margin: 16px 8px 6px; }
45 h2:first-child { margin-top: 0; }45 h2:first-child { margin-top: 0; }
46 a, .agent { display: block; padding: 5px 8px; border-radius: 6px; color: var(--text); text-decoration: none; }46 a, .agent { display: block; padding: 5px 8px; border-radius: 6px; color: var(--text); text-decoration: none; }
modified spikes/wails-ui/frontend/src/main.ts +5 -0
@@ -1,6 +1,11 @@
11 // Copyright (c) 2026 Philippe Charrière — Sidekicks Source-Available License 1.0, see LICENSE
22
33 import { mount } from 'svelte'
4+import { System } from '@wailsio/runtime'
45 import App from './App.svelte'
56
7+// On macOS the title bar is hidden and the traffic lights are drawn over the
8+// content: the stylesheet reserves room for them under this class.
9+document.documentElement.classList.toggle('macos', System.IsMac())
10+
611 mount(App, { target: document.getElementById('app')! })
@@ -1,6 +1,11 @@
1 // Copyright (c) 2026 Philippe Charrière — Sidekicks Source-Available License 1.0, see LICENSE1 // Copyright (c) 2026 Philippe Charrière — Sidekicks Source-Available License 1.0, see LICENSE
2 2
3 import { mount } from 'svelte'3 import { mount } from 'svelte'
4+import { System } from '@wailsio/runtime'
4 import App from './App.svelte'5 import App from './App.svelte'
5 6
7+// On macOS the title bar is hidden and the traffic lights are drawn over the
8+// content: the stylesheet reserves room for them under this class.
9+document.documentElement.classList.toggle('macos', System.IsMac())
10+
6 mount(App, { target: document.getElementById('app')! })11 mount(App, { target: document.getElementById('app')! })
modified spikes/wails-ui/main.go +1 -1
@@ -41,7 +41,7 @@ func main() {
4141 Width: 1280,
4242 Height: 800,
4343 Mac: application.MacWindow{
44- InvisibleTitleBarHeight: 38,
44+ InvisibleTitleBarHeight: 38, // keep in sync with --titlebar-inset (frontend/public/style.css)
4545 Backdrop: application.MacBackdropTranslucent,
4646 TitleBar: application.MacTitleBarHiddenInset,
4747 },
@@ -41,7 +41,7 @@ func main() {
41 Width: 1280,41 Width: 1280,
42 Height: 800,42 Height: 800,
43 Mac: application.MacWindow{43 Mac: application.MacWindow{
44- InvisibleTitleBarHeight: 38,44+ InvisibleTitleBarHeight: 38, // keep in sync with --titlebar-inset (frontend/public/style.css)
45 Backdrop: application.MacBackdropTranslucent,45 Backdrop: application.MacBackdropTranslucent,
46 TitleBar: application.MacTitleBarHiddenInset,46 TitleBar: application.MacTitleBarHiddenInset,
47 },47 },