@zerwiz/sessrumnir 0.1.15 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +9 -7
- package/NOTICE +33 -0
- package/out/main/index.js +3 -10
- package/out/renderer/assets/{index-DS1LEasG.js → index-B3mV3a_n.js} +11 -126
- package/out/renderer/assets/{index-Ny2JywQb.css → index-D0j--OQJ.css} +11 -0
- package/out/renderer/assets/ymir-mark-kY-7e1x6.svg +55 -0
- package/out/renderer/index.html +3 -3
- package/package.json +3 -2
- package/src/renderer/index.html +1 -1
- package/src/renderer/src/app.tsx +1 -1
- package/src/renderer/src/assets/ymir-mark.svg +55 -0
- package/src/renderer/src/components/chat-panel.tsx +2 -2
- package/src/renderer/src/components/home-screen.tsx +2 -2
- package/src/renderer/src/index.css +2 -1
- package/src/renderer/src/store.ts +1 -1
- package/src/renderer/src/themes/index.ts +0 -21
- package/src/renderer/src/utils/theme.ts +1 -1
- package/src/shared/default-settings.ts +3 -3
- package/src/shared/theme/builtin-ids.ts +1 -1
- package/out/renderer/assets/pi-logo-B48rElrT.svg +0 -27
package/LICENSE
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
|
|
1
2
|
Apache License
|
|
2
3
|
Version 2.0, January 2004
|
|
3
4
|
http://www.apache.org/licenses/
|
|
@@ -48,7 +49,7 @@
|
|
|
48
49
|
"Contribution" shall mean any work of authorship, including
|
|
49
50
|
the original version of the Work and any modifications or additions
|
|
50
51
|
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
-
submitted to
|
|
52
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
53
|
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
54
|
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
55
|
means any form of electronic, verbal, or written communication sent
|
|
@@ -60,7 +61,7 @@
|
|
|
60
61
|
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
62
|
|
|
62
63
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
-
on behalf of whom a Contribution has been received by
|
|
64
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
65
|
subsequently incorporated within the Work.
|
|
65
66
|
|
|
66
67
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
@@ -106,7 +107,7 @@
|
|
|
106
107
|
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
108
|
distribution, then any Derivative Works that You distribute must
|
|
108
109
|
include a readable copy of the attribution notices contained
|
|
109
|
-
within such NOTICE file, excluding
|
|
110
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
111
|
pertain to any part of the Derivative Works, in at least one
|
|
111
112
|
of the following places: within a NOTICE text file distributed
|
|
112
113
|
as part of the Derivative Works; within the Source form or
|
|
@@ -181,11 +182,12 @@
|
|
|
181
182
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
183
|
replaced with your own identifying information. (Don't include
|
|
183
184
|
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
-
comment syntax for the file format.
|
|
185
|
-
|
|
186
|
-
|
|
185
|
+
comment syntax for the file format. We also recommend that a
|
|
186
|
+
file or class name and description of purpose be included on the
|
|
187
|
+
same "printed page" as the copyright notice for easier
|
|
188
|
+
identification within third-party archives.
|
|
187
189
|
|
|
188
|
-
Copyright 2026
|
|
190
|
+
Copyright 2026 zerwiz
|
|
189
191
|
|
|
190
192
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
191
193
|
you may not use this file except in compliance with the License.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
Sessrúmnir
|
|
2
|
+
Copyright 2026 zerwiz
|
|
3
|
+
|
|
4
|
+
This project is a vendored, re-themed fork of **pi-desktop**, an Electron
|
|
5
|
+
desktop GUI for the Pi and OMP coding agents, distributed under the Apache
|
|
6
|
+
License, Version 2.0. The vendored source is kept in this directory; the
|
|
7
|
+
upstream repository is https://github.com/FaqFirebase/pi-desktop (v0.1.7-alpha,
|
|
8
|
+
commit 4a5601b).
|
|
9
|
+
|
|
10
|
+
The following copyright notice applies to the portions derived from pi-desktop:
|
|
11
|
+
|
|
12
|
+
Copyright 2026 Pi Desktop GUI Contributors.
|
|
13
|
+
|
|
14
|
+
Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
15
|
+
use this work except in compliance with the License. You may obtain a copy of
|
|
16
|
+
the License at
|
|
17
|
+
|
|
18
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
19
|
+
|
|
20
|
+
Unless required by applicable law or agreed to in writing, software
|
|
21
|
+
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
22
|
+
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
23
|
+
License for the specific language governing permissions and limitations under
|
|
24
|
+
the License.
|
|
25
|
+
|
|
26
|
+
Changes made by Ymir beyond the upstream source:
|
|
27
|
+
- Rebranded the GUI to Sessrúmnir (window titles, launcher, package identity,
|
|
28
|
+
tray/autostart strings, data-dir name).
|
|
29
|
+
- Added the Sessrúmnir built-in theme (Ymir way-of palette: sky #38bdf8 on
|
|
30
|
+
deep navy) and made it the default.
|
|
31
|
+
- Replaced the Pi logo asset with the Sessrúmnir Sowilo rune mark.
|
|
32
|
+
- Added bin/sessrumnir.sh and bin/sessrumnir-ensure.sh and wired the app into
|
|
33
|
+
bin/ymir-install.sh.
|
package/out/main/index.js
CHANGED
|
@@ -5482,9 +5482,9 @@ const DEFAULT_SETTINGS = {
|
|
|
5482
5482
|
piExecutablePath: "pi",
|
|
5483
5483
|
piEngine: "auto",
|
|
5484
5484
|
defaultArgs: [],
|
|
5485
|
-
theme: "
|
|
5486
|
-
systemLightTheme: "
|
|
5487
|
-
systemDarkTheme: "
|
|
5485
|
+
theme: "fensalir",
|
|
5486
|
+
systemLightTheme: "fensalir",
|
|
5487
|
+
systemDarkTheme: "fensalir",
|
|
5488
5488
|
defaultModel: null,
|
|
5489
5489
|
defaultProvider: null,
|
|
5490
5490
|
defaultCwd: null,
|
|
@@ -7302,13 +7302,6 @@ function themeIdFromName(name) {
|
|
|
7302
7302
|
return name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
7303
7303
|
}
|
|
7304
7304
|
const BUILTIN_THEME_IDS = [
|
|
7305
|
-
"dark",
|
|
7306
|
-
"light",
|
|
7307
|
-
"nord",
|
|
7308
|
-
"gruvbox",
|
|
7309
|
-
"breeze-dark",
|
|
7310
|
-
"breeze-light",
|
|
7311
|
-
"breeze-claudius",
|
|
7312
7305
|
"sessrumnir",
|
|
7313
7306
|
"fensalir"
|
|
7314
7307
|
];
|
|
@@ -16210,9 +16210,9 @@ function resolveSidebarWidth(draft, persisted) {
|
|
|
16210
16210
|
const DEFAULT_SETTINGS = {
|
|
16211
16211
|
piExecutablePath: "pi",
|
|
16212
16212
|
piEngine: "auto",
|
|
16213
|
-
theme: "
|
|
16214
|
-
systemLightTheme: "
|
|
16215
|
-
systemDarkTheme: "
|
|
16213
|
+
theme: "fensalir",
|
|
16214
|
+
systemLightTheme: "fensalir",
|
|
16215
|
+
systemDarkTheme: "fensalir",
|
|
16216
16216
|
fontSize: 16,
|
|
16217
16217
|
terminalFontSize: 12,
|
|
16218
16218
|
codeEditorFontSize: 14,
|
|
@@ -16426,110 +16426,9 @@ function resolveThemeVars(file) {
|
|
|
16426
16426
|
return vars;
|
|
16427
16427
|
}
|
|
16428
16428
|
const BUILTIN_THEME_IDS$1 = [
|
|
16429
|
-
"dark",
|
|
16430
|
-
"light",
|
|
16431
|
-
"nord",
|
|
16432
|
-
"gruvbox",
|
|
16433
|
-
"breeze-dark",
|
|
16434
|
-
"breeze-light",
|
|
16435
|
-
"breeze-claudius",
|
|
16436
16429
|
"sessrumnir",
|
|
16437
16430
|
"fensalir"
|
|
16438
16431
|
];
|
|
16439
|
-
const $schema$8 = "pi-theme/v1";
|
|
16440
|
-
const name$a = "Dark";
|
|
16441
|
-
const kind$8 = "dark";
|
|
16442
|
-
const seeds$8 = { "app": "#0a0a0a", "surface": "#171717", "text": "#f5f5f5", "accent": "#2563eb", "success": "#34d399", "warning": "#facc15", "error": "#f87171" };
|
|
16443
|
-
const overrides$9 = { "surface-hover": "#262626", "card": "#262626", "elevated": "#404040", "highlight": "#171717", "highlight-strong": "#262626", "secondary": "#d4d4d4", "muted": "#a3a3a3", "dim": "#737373", "faint": "#525252", "ghost": "#404040", "inverse": "#0a0a0a", "border": "#262626", "border-strong": "#404040", "focus": "#3b82f6", "accent-hover": "#1d4ed8", "accent-fg": "#60a5fa", "accent-bg": "rgba(30, 58, 138, 0.3)", "success-bg": "rgba(6, 78, 59, 0.3)", "warning-bg": "rgba(113, 63, 18, 0.3)", "error-bg": "rgba(127, 29, 29, 0.3)", "info": "#60a5fa", "info-bg": "rgba(30, 58, 138, 0.3)", "special": "#c084fc", "special-bg": "rgba(88, 28, 135, 0.3)", "chat-column": "#0a0a0a", "chat-column-border": "#262626", "scrollbar": "#2a2a2a", "scrollbar-hover": "#3a3a3a", "md-code": "#60a5fa", "md-pre-bg": "#0d1117" };
|
|
16444
|
-
const dark = {
|
|
16445
|
-
$schema: $schema$8,
|
|
16446
|
-
name: name$a,
|
|
16447
|
-
kind: kind$8,
|
|
16448
|
-
seeds: seeds$8,
|
|
16449
|
-
overrides: overrides$9
|
|
16450
|
-
};
|
|
16451
|
-
const $schema$7 = "pi-theme/v1";
|
|
16452
|
-
const name$9 = "Light";
|
|
16453
|
-
const kind$7 = "light";
|
|
16454
|
-
const seeds$7 = { "app": "#ffffff", "surface": "#f5f5f5", "text": "#171717", "accent": "#2563eb", "success": "#10b981", "warning": "#f59e0b", "error": "#ef4444" };
|
|
16455
|
-
const overrides$8 = { "surface-hover": "#e5e5e5", "card": "#e5e5e5", "elevated": "#d4d4d4", "highlight": "#f5f5f5", "highlight-strong": "#e5e5e5", "secondary": "#404040", "muted": "#525252", "dim": "#737373", "faint": "#a3a3a3", "ghost": "#d4d4d4", "inverse": "#ffffff", "border": "#e5e5e5", "border-strong": "#d4d4d4", "focus": "#3b82f6", "accent-hover": "#1d4ed8", "accent-fg": "#3b82f6", "accent-bg": "rgba(30, 64, 175, 0.15)", "success-bg": "rgba(6, 95, 70, 0.15)", "warning-bg": "rgba(113, 63, 18, 0.15)", "error-bg": "rgba(153, 27, 27, 0.15)", "info": "#3b82f6", "info-bg": "rgba(30, 64, 175, 0.15)", "special": "#a855f7", "special-bg": "rgba(88, 28, 135, 0.15)", "chat-column": "#ffffff", "chat-column-border": "#e5e5e5", "scrollbar": "#d4d4d4", "scrollbar-hover": "#a3a3a3", "md-code": "#a855f7", "md-pre-bg": "#f8f9fa" };
|
|
16456
|
-
const light = {
|
|
16457
|
-
$schema: $schema$7,
|
|
16458
|
-
name: name$9,
|
|
16459
|
-
kind: kind$7,
|
|
16460
|
-
seeds: seeds$7,
|
|
16461
|
-
overrides: overrides$8
|
|
16462
|
-
};
|
|
16463
|
-
const $schema$6 = "pi-theme/v1";
|
|
16464
|
-
const name$8 = "Nord";
|
|
16465
|
-
const kind$6 = "dark";
|
|
16466
|
-
const seeds$6 = { "app": "#2E3440", "surface": "#3B4252", "text": "#ECEFF4", "accent": "#5E81AC", "success": "#A3BE8C", "warning": "#EBCB8B", "error": "#BF616A" };
|
|
16467
|
-
const overrides$7 = { "surface-hover": "#434C5E", "card": "#434C5E", "elevated": "#4C566A", "highlight": "#3B4252", "highlight-strong": "#434C5E", "secondary": "#D8DEE9", "muted": "#9599A3", "dim": "#616E88", "faint": "#4C566A", "ghost": "#434C5E", "inverse": "#2E3440", "border": "#434C5E", "border-strong": "#4C566A", "focus": "#88C0D0", "accent-hover": "#81A1C1", "accent-fg": "#81A1C1", "accent-bg": "rgba(46, 52, 64, 0.5)", "success-bg": "rgba(163, 190, 140, 0.15)", "warning-bg": "rgba(235, 203, 139, 0.15)", "error-bg": "rgba(191, 97, 106, 0.15)", "info": "#81A1C1", "info-bg": "rgba(46, 52, 64, 0.5)", "special": "#B48EAD", "special-bg": "rgba(180, 142, 173, 0.15)", "chat-column": "#2E3440", "chat-column-border": "#434C5E", "scrollbar": "#434C5E", "scrollbar-hover": "#4C566A", "md-code": "#B48EAD", "md-pre-bg": "#242932" };
|
|
16468
|
-
const syntax$6 = { "keyword": "#C792EA", "string": "#C3E88D", "comment": "#7B88A1", "function": "#82AAFF", "type": "#FFCB6B", "number": "#F78C6C", "operator": "#89DDFF", "property": "#F78C6C", "tag": "#F07178", "variable": "#EEFFFF", "constant": "#F78C6C", "heading": "#C792EA", "link": "#C3E88D", "list": "#F78C6C", "quote": "#7B88A1", "meta": "#B2CCD6", "mark": "#C792EA", "invalid": "#F07178", "active-line-bg": "rgba(216, 222, 233, 0.05)", "selection-bg": "rgba(94, 129, 172, 0.40)", "selection-match-bg": "rgba(216, 222, 233, 0.08)" };
|
|
16469
|
-
const nord = {
|
|
16470
|
-
$schema: $schema$6,
|
|
16471
|
-
name: name$8,
|
|
16472
|
-
kind: kind$6,
|
|
16473
|
-
seeds: seeds$6,
|
|
16474
|
-
overrides: overrides$7,
|
|
16475
|
-
syntax: syntax$6
|
|
16476
|
-
};
|
|
16477
|
-
const $schema$5 = "pi-theme/v1";
|
|
16478
|
-
const name$7 = "Gruvbox";
|
|
16479
|
-
const kind$5 = "dark";
|
|
16480
|
-
const seeds$5 = { "app": "#282828", "surface": "#3C3836", "text": "#EBDBB2", "accent": "#458588", "success": "#B8BB26", "warning": "#FABD2F", "error": "#FB4934" };
|
|
16481
|
-
const overrides$6 = { "surface-hover": "#504945", "card": "#504945", "elevated": "#665C54", "highlight": "#3C3836", "highlight-strong": "#504945", "secondary": "#BDAE93", "muted": "#A89984", "dim": "#928374", "faint": "#7C6F64", "ghost": "#665C54", "inverse": "#282828", "border": "#504945", "border-strong": "#665C54", "focus": "#D79921", "accent-hover": "#689D6A", "accent-fg": "#83A598", "accent-bg": "rgba(40, 40, 40, 0.5)", "success-bg": "rgba(152, 151, 26, 0.15)", "warning-bg": "rgba(215, 153, 33, 0.15)", "error-bg": "rgba(204, 36, 29, 0.15)", "info": "#83A598", "info-bg": "rgba(40, 40, 40, 0.5)", "special": "#D3869B", "special-bg": "rgba(177, 98, 134, 0.15)", "chat-column": "#282828", "chat-column-border": "#504945", "scrollbar": "#504945", "scrollbar-hover": "#665C54", "md-code": "#D3869B", "md-pre-bg": "#1D2021" };
|
|
16482
|
-
const syntax$5 = { "keyword": "#D3869B", "string": "#B8BB26", "comment": "#A89984", "function": "#FABD2F", "type": "#FABD2F", "number": "#FE8019", "operator": "#83A598", "property": "#FE8019", "tag": "#FB4934", "variable": "#EBDBB2", "constant": "#FE8019", "heading": "#D3869B", "link": "#B8BB26", "list": "#FE8019", "quote": "#A89984", "meta": "#BDAE93", "mark": "#D3869B", "invalid": "#FB4934", "active-line-bg": "rgba(235, 219, 178, 0.04)", "selection-bg": "rgba(69, 133, 136, 0.40)", "selection-match-bg": "rgba(235, 219, 178, 0.08)" };
|
|
16483
|
-
const gruvbox = {
|
|
16484
|
-
$schema: $schema$5,
|
|
16485
|
-
name: name$7,
|
|
16486
|
-
kind: kind$5,
|
|
16487
|
-
seeds: seeds$5,
|
|
16488
|
-
overrides: overrides$6,
|
|
16489
|
-
syntax: syntax$5
|
|
16490
|
-
};
|
|
16491
|
-
const $schema$4 = "pi-theme/v1";
|
|
16492
|
-
const name$6 = "Breeze Dark";
|
|
16493
|
-
const kind$4 = "dark";
|
|
16494
|
-
const seeds$4 = { "app": "#232629", "surface": "#31363b", "text": "#cfcfc2", "accent": "#2980b9", "success": "#1c8042", "warning": "#fdbc4b", "error": "#da4453" };
|
|
16495
|
-
const overrides$5 = { "surface-hover": "#3f4347", "card": "#3f4347", "elevated": "#4d5358", "highlight": "#31363b", "highlight-strong": "#3f4347", "secondary": "#a5a6a8", "muted": "#898a8c", "dim": "#7a7c7d", "faint": "#5f6266", "ghost": "#4d5358", "inverse": "#232629", "border": "#3f4347", "border-strong": "#4d5358", "focus": "#3daee9", "accent-hover": "#3daee9", "accent-fg": "#3daee9", "accent-bg": "rgba(45, 92, 118, 0.5)", "success-bg": "rgba(28, 128, 66, 0.15)", "warning-bg": "rgba(246, 116, 0, 0.15)", "error-bg": "rgba(218, 68, 83, 0.15)", "info": "#3daee9", "info-bg": "rgba(45, 92, 118, 0.5)", "special": "#8e44ad", "special-bg": "rgba(142, 68, 173, 0.15)", "chat-column": "#232629", "chat-column-border": "#3f4347", "scrollbar": "#3f4347", "scrollbar-hover": "#4d5358", "md-code": "#60a5fa", "md-pre-bg": "#1d2024" };
|
|
16496
|
-
const syntax$4 = { "keyword": "#fdbc4b", "string": "#f44f4f", "comment": "#7a7c7d", "function": "#8e44ad", "type": "#2980b9", "number": "#f67400", "operator": "#3f8058", "property": "#27aeae", "tag": "#2980b9", "variable": "#cfcfc2", "constant": "#27aeae", "heading": "#8e44ad", "link": "#0099ff", "list": "#da4453", "quote": "#7a7c7d", "meta": "#a5a6a8", "mark": "#8e44ad", "invalid": "#da4453", "active-line-bg": "#2A2E32", "selection-bg": "rgba(45, 92, 118, 0.65)", "selection-match-bg": "rgba(65, 72, 87, 0.5)" };
|
|
16497
|
-
const breezeDark = {
|
|
16498
|
-
$schema: $schema$4,
|
|
16499
|
-
name: name$6,
|
|
16500
|
-
kind: kind$4,
|
|
16501
|
-
seeds: seeds$4,
|
|
16502
|
-
overrides: overrides$5,
|
|
16503
|
-
syntax: syntax$4
|
|
16504
|
-
};
|
|
16505
|
-
const $schema$3 = "pi-theme/v1";
|
|
16506
|
-
const name$5 = "Breeze Light";
|
|
16507
|
-
const kind$3 = "light";
|
|
16508
|
-
const seeds$3 = { "app": "#ffffff", "surface": "#f8f7f6", "text": "#1f1c1b", "accent": "#0057ae", "success": "#006e28", "warning": "#b08000", "error": "#bf0303" };
|
|
16509
|
-
const overrides$4 = { "surface-hover": "#ebebeb", "card": "#ebebeb", "elevated": "#d8d8d8", "highlight": "#f8f7f6", "highlight-strong": "#ebebeb", "secondary": "#444444", "muted": "#5d5d5d", "dim": "#7a7c7d", "faint": "#898887", "ghost": "#d8d8d8", "inverse": "#ffffff", "border": "#d8d8d8", "border-strong": "#c0c0bf", "focus": "#0057ae", "accent-hover": "#2980b9", "accent-fg": "#0057ae", "accent-bg": "rgba(0, 87, 174, 0.12)", "success-bg": "rgba(0, 110, 40, 0.12)", "warning-bg": "rgba(176, 128, 0, 0.12)", "error-bg": "rgba(191, 3, 3, 0.12)", "info": "#0057ae", "info-bg": "rgba(0, 87, 174, 0.12)", "special": "#644a9b", "special-bg": "rgba(100, 74, 155, 0.12)", "chat-column": "#ffffff", "chat-column-border": "#d8d8d8", "scrollbar": "#d8d8d8", "scrollbar-hover": "#898887", "md-code": "#644a9b", "md-pre-bg": "#f8f7f6" };
|
|
16510
|
-
const syntax$3 = { "keyword": "#b08000", "string": "#bf0303", "comment": "#898887", "function": "#644a9b", "type": "#0057ae", "number": "#b08000", "operator": "#ca60ca", "property": "#0057ae", "tag": "#0057ae", "variable": "#1f1c1b", "constant": "#aa5500", "heading": "#644a9b", "link": "#0095ff", "list": "#bf0303", "quote": "#898887", "meta": "#898887", "mark": "#644a9b", "invalid": "#bf0303", "active-line-bg": "#f8f7f6", "selection-bg": "rgba(148, 202, 239, 0.6)", "selection-match-bg": "rgba(0, 0, 0, 0.05)" };
|
|
16511
|
-
const breezeLight = {
|
|
16512
|
-
$schema: $schema$3,
|
|
16513
|
-
name: name$5,
|
|
16514
|
-
kind: kind$3,
|
|
16515
|
-
seeds: seeds$3,
|
|
16516
|
-
overrides: overrides$4,
|
|
16517
|
-
syntax: syntax$3
|
|
16518
|
-
};
|
|
16519
|
-
const $schema$2 = "pi-theme/v1";
|
|
16520
|
-
const name$4 = "Breeze Claudius";
|
|
16521
|
-
const kind$2 = "dark";
|
|
16522
|
-
const seeds$2 = { "app": "#232629", "surface": "#31363b", "text": "#cfcfc2", "accent": "#2980b9", "success": "#1c8042", "warning": "#fdbc4b", "error": "#da4453" };
|
|
16523
|
-
const overrides$3 = { "surface-hover": "#3f4347", "card": "#3f4347", "elevated": "#4d5358", "highlight": "#31363b", "highlight-strong": "#3f4347", "secondary": "#a5a6a8", "muted": "#898a8c", "dim": "#7a7c7d", "faint": "#5f6266", "ghost": "#4d5358", "inverse": "#232629", "border": "#3f4347", "border-strong": "#4d5358", "focus": "#3daee9", "accent-hover": "#3daee9", "accent-fg": "#3daee9", "accent-bg": "rgba(45, 92, 118, 0.5)", "success-bg": "rgba(28, 128, 66, 0.15)", "warning-bg": "rgba(246, 116, 0, 0.15)", "error-bg": "rgba(218, 68, 83, 0.15)", "info": "#3daee9", "info-bg": "rgba(45, 92, 118, 0.5)", "special": "#8e44ad", "special-bg": "rgba(142, 68, 173, 0.15)", "chat-column": "#1e1e1e", "chat-column-border": "transparent", "scrollbar": "#3f4347", "scrollbar-hover": "#4d5358", "md-code": "#60a5fa", "md-pre-bg": "#1d2024" };
|
|
16524
|
-
const syntax$2 = { "keyword": "#fdbc4b", "string": "#f44f4f", "comment": "#7a7c7d", "function": "#8e44ad", "type": "#2980b9", "number": "#f67400", "operator": "#3f8058", "property": "#27aeae", "tag": "#2980b9", "variable": "#cfcfc2", "constant": "#27aeae", "heading": "#8e44ad", "link": "#0099ff", "list": "#da4453", "quote": "#7a7c7d", "meta": "#a5a6a8", "mark": "#8e44ad", "invalid": "#da4453", "active-line-bg": "#2A2E32", "selection-bg": "rgba(45, 92, 118, 0.65)", "selection-match-bg": "rgba(65, 72, 87, 0.5)" };
|
|
16525
|
-
const breezeClaudius = {
|
|
16526
|
-
$schema: $schema$2,
|
|
16527
|
-
name: name$4,
|
|
16528
|
-
kind: kind$2,
|
|
16529
|
-
seeds: seeds$2,
|
|
16530
|
-
overrides: overrides$3,
|
|
16531
|
-
syntax: syntax$2
|
|
16532
|
-
};
|
|
16533
16432
|
const $schema$1 = "pi-theme/v1";
|
|
16534
16433
|
const name$3 = "Sessrúmnir";
|
|
16535
16434
|
const kind$1 = "dark";
|
|
@@ -16568,27 +16467,13 @@ const fensalir = {
|
|
|
16568
16467
|
};
|
|
16569
16468
|
const BUILTIN_THEMES = [
|
|
16570
16469
|
{ id: "sessrumnir", file: sessrumnir },
|
|
16571
|
-
{ id: "fensalir", file: fensalir }
|
|
16572
|
-
{ id: "dark", file: dark },
|
|
16573
|
-
{ id: "light", file: light },
|
|
16574
|
-
{ id: "nord", file: nord },
|
|
16575
|
-
{ id: "gruvbox", file: gruvbox },
|
|
16576
|
-
{ id: "breeze-dark", file: breezeDark },
|
|
16577
|
-
{ id: "breeze-light", file: breezeLight },
|
|
16578
|
-
{ id: "breeze-claudius", file: breezeClaudius }
|
|
16470
|
+
{ id: "fensalir", file: fensalir }
|
|
16579
16471
|
];
|
|
16580
16472
|
const BUILTIN_THEME_IDS = BUILTIN_THEMES.map((t2) => t2.id);
|
|
16581
16473
|
function isBuiltinThemeId(id2) {
|
|
16582
16474
|
return BUILTIN_THEME_IDS$1.includes(id2);
|
|
16583
16475
|
}
|
|
16584
16476
|
const BUILTIN_THEME_NAME_KEYS = {
|
|
16585
|
-
dark: "themes.builtin.dark",
|
|
16586
|
-
light: "themes.builtin.light",
|
|
16587
|
-
nord: "themes.builtin.nord",
|
|
16588
|
-
gruvbox: "themes.builtin.gruvbox",
|
|
16589
|
-
"breeze-dark": "themes.builtin.breeze-dark",
|
|
16590
|
-
"breeze-light": "themes.builtin.breeze-light",
|
|
16591
|
-
"breeze-claudius": "themes.builtin.breeze-claudius",
|
|
16592
16477
|
sessrumnir: "themes.builtin.sessrumnir",
|
|
16593
16478
|
fensalir: "themes.builtin.fensalir"
|
|
16594
16479
|
};
|
|
@@ -16605,7 +16490,7 @@ function applyThemeVars(target, vars, previous2) {
|
|
|
16605
16490
|
return next;
|
|
16606
16491
|
}
|
|
16607
16492
|
const SYSTEM_THEME_ID = "system";
|
|
16608
|
-
const FALLBACK_THEME_ID = "
|
|
16493
|
+
const FALLBACK_THEME_ID = "fensalir";
|
|
16609
16494
|
const DARK_SCHEME_QUERY = "(prefers-color-scheme: dark)";
|
|
16610
16495
|
const SYSTEM_THEME_DEFAULTS = {
|
|
16611
16496
|
light: DEFAULT_SETTINGS.systemLightTheme,
|
|
@@ -18098,7 +17983,7 @@ const useAppStore = create$1((set, get2) => ({
|
|
|
18098
17983
|
rememberBootTheme(settings2);
|
|
18099
17984
|
watchSystemTheme(() => {
|
|
18100
17985
|
const state = get2();
|
|
18101
|
-
return state.settingsDraft.theme ?? state.settings?.theme ?? "
|
|
17986
|
+
return state.settingsDraft.theme ?? state.settings?.theme ?? "fensalir";
|
|
18102
17987
|
});
|
|
18103
17988
|
document.documentElement.style.fontSize = `${settings2.fontSize}px`;
|
|
18104
17989
|
await applyLanguageSetting(settings2.language);
|
|
@@ -21272,7 +21157,7 @@ function StatusPopover() {
|
|
|
21272
21157
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-4 py-2 border-t border-border flex items-center justify-between text-[10px] text-faint", children: [
|
|
21273
21158
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
|
|
21274
21159
|
"v",
|
|
21275
|
-
"0.1.
|
|
21160
|
+
"0.1.17"
|
|
21276
21161
|
] }),
|
|
21277
21162
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
21278
21163
|
"button",
|
|
@@ -89204,7 +89089,7 @@ function TerminalPanel() {
|
|
|
89204
89089
|
}
|
|
89205
89090
|
);
|
|
89206
89091
|
}
|
|
89207
|
-
const
|
|
89092
|
+
const ymirMark = "" + new URL("ymir-mark-kY-7e1x6.svg", import.meta.url).href;
|
|
89208
89093
|
const DEFAULT_COMPOSER_PAD_PX = 144;
|
|
89209
89094
|
function ChatPanel() {
|
|
89210
89095
|
const { t: t2 } = useTranslation();
|
|
@@ -89383,7 +89268,7 @@ function ChatPanel() {
|
|
|
89383
89268
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
89384
89269
|
"img",
|
|
89385
89270
|
{
|
|
89386
|
-
src:
|
|
89271
|
+
src: ymirMark,
|
|
89387
89272
|
alt: PI_DESKTOP_PRODUCT_NAME,
|
|
89388
89273
|
className: "mx-auto mb-4 block h-14 w-14"
|
|
89389
89274
|
}
|
|
@@ -94119,7 +94004,7 @@ function HomeScreenInfo() {
|
|
|
94119
94004
|
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: clsx("mx-auto max-w-[952px] px-8 py-12", busy && "pointer-events-none opacity-60"), children: [
|
|
94120
94005
|
/* @__PURE__ */ jsxRuntimeExports.jsx(PiErrorBanner, {}),
|
|
94121
94006
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-6 flex flex-col items-center text-center", children: [
|
|
94122
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("img", { src:
|
|
94007
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: ymirMark, alt: PI_DESKTOP_PRODUCT_NAME, className: "h-16 w-16" }),
|
|
94123
94008
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "mt-4 text-2xl font-semibold text-primary", children: PI_DESKTOP_PRODUCT_NAME }),
|
|
94124
94009
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-1 text-sm text-dim", children: t2("home.subtitle") })
|
|
94125
94010
|
] }),
|
|
@@ -97261,7 +97146,7 @@ function App() {
|
|
|
97261
97146
|
const showChrome = !isHome;
|
|
97262
97147
|
const showUpdateBanner = !!updateInfo?.updateAvailable && !updateDismissed;
|
|
97263
97148
|
const globalWorkflowOpen = showChrome && workflowPanelOpen && !workflowPanelFilter && workflowPanelWorkspaceId === null;
|
|
97264
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative flex h-screen flex-col
|
|
97149
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative flex h-screen flex-col text-primary", children: [
|
|
97265
97150
|
/* @__PURE__ */ jsxRuntimeExports.jsx(EmberBackground, {}),
|
|
97266
97151
|
isDraggingFolder && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
97267
97152
|
"div",
|
|
@@ -3391,6 +3391,11 @@
|
|
|
3391
3391
|
opacity: .9;
|
|
3392
3392
|
}
|
|
3393
3393
|
|
|
3394
|
+
.shadow {
|
|
3395
|
+
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, #0000001a), 0 1px 2px -1px var(--tw-shadow-color, #0000001a);
|
|
3396
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
3397
|
+
}
|
|
3398
|
+
|
|
3394
3399
|
.shadow-2xl {
|
|
3395
3400
|
--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, #00000040);
|
|
3396
3401
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
@@ -4109,10 +4114,16 @@
|
|
|
4109
4114
|
.ember-bg {
|
|
4110
4115
|
z-index: -1;
|
|
4111
4116
|
pointer-events: none;
|
|
4117
|
+
opacity: .55;
|
|
4118
|
+
mix-blend-mode: screen;
|
|
4112
4119
|
position: fixed;
|
|
4113
4120
|
inset: 0;
|
|
4114
4121
|
}
|
|
4115
4122
|
|
|
4123
|
+
html, body {
|
|
4124
|
+
background-color: var(--app, #0e0c09);
|
|
4125
|
+
}
|
|
4126
|
+
|
|
4116
4127
|
@property --tw-translate-x {
|
|
4117
4128
|
syntax: "*";
|
|
4118
4129
|
inherits: false;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="100%" height="100%">
|
|
2
|
+
<defs>
|
|
3
|
+
<!-- Background Slate -->
|
|
4
|
+
<linearGradient id="bg-grad" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
5
|
+
<stop offset="0%" stop-color="#0e0c09" />
|
|
6
|
+
<stop offset="100%" stop-color="#151209" />
|
|
7
|
+
</linearGradient>
|
|
8
|
+
|
|
9
|
+
<!-- Outer Dark Metal Forging -->
|
|
10
|
+
<linearGradient id="dark-metal" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
11
|
+
<stop offset="0%" stop-color="#7d5f2a" />
|
|
12
|
+
<stop offset="100%" stop-color="#0e0c09" />
|
|
13
|
+
</linearGradient>
|
|
14
|
+
|
|
15
|
+
<!-- Inner Cyan Edge / Chisel Highlight -->
|
|
16
|
+
<linearGradient id="cyan-glow" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
17
|
+
<stop offset="0%" stop-color="#e0b257" />
|
|
18
|
+
<stop offset="50%" stop-color="#c9973f" />
|
|
19
|
+
<stop offset="100%" stop-color="#7d5f2a" />
|
|
20
|
+
</linearGradient>
|
|
21
|
+
|
|
22
|
+
<!-- Drop Shadow for Depth -->
|
|
23
|
+
<filter id="shadow" x="-10%" y="-10%" width="120%" height="120%">
|
|
24
|
+
<feDropShadow dx="0" dy="8" stdDeviation="12" flood-color="#000000" flood-opacity="0.6"/>
|
|
25
|
+
</filter>
|
|
26
|
+
</defs>
|
|
27
|
+
|
|
28
|
+
<!-- Canvas -->
|
|
29
|
+
<rect width="512" height="512" rx="48" fill="url(#bg-grad)" stroke="#2b241a" stroke-width="4"/>
|
|
30
|
+
|
|
31
|
+
<!-- Master Group with Drop Shadow -->
|
|
32
|
+
<g filter="url(#shadow)">
|
|
33
|
+
|
|
34
|
+
<!-- 1. THICK OUTER BASE (The Iron Mass) -->
|
|
35
|
+
<g fill="none" stroke="url(#dark-metal)" stroke-width="48" stroke-linecap="square" stroke-linejoin="miter">
|
|
36
|
+
<!-- Algiz Y-Stem & Branches -->
|
|
37
|
+
<path d="M 144 144 L 256 256 L 368 144 M 256 256 V 352" />
|
|
38
|
+
<!-- Top Anvil Bar -->
|
|
39
|
+
<path d="M 128 352 H 384" />
|
|
40
|
+
<!-- Bottom Anvil Bar (Slightly narrower) -->
|
|
41
|
+
<path d="M 160 432 H 352" />
|
|
42
|
+
</g>
|
|
43
|
+
|
|
44
|
+
<!-- 2. THIN INNER HIGHLIGHT (The Glowing Chiseled Edge) -->
|
|
45
|
+
<g fill="none" stroke="url(#cyan-glow)" stroke-width="12" stroke-linecap="square" stroke-linejoin="miter">
|
|
46
|
+
<!-- Algiz Y-Stem & Branches -->
|
|
47
|
+
<path d="M 144 144 L 256 256 L 368 144 M 256 256 V 352" />
|
|
48
|
+
<!-- Top Anvil Bar -->
|
|
49
|
+
<path d="M 128 352 H 384" />
|
|
50
|
+
<!-- Bottom Anvil Bar -->
|
|
51
|
+
<path d="M 160 432 H 352" />
|
|
52
|
+
</g>
|
|
53
|
+
|
|
54
|
+
</g>
|
|
55
|
+
</svg>
|
package/out/renderer/index.html
CHANGED
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
http-equiv="Content-Security-Policy"
|
|
8
8
|
content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'"
|
|
9
9
|
/>
|
|
10
|
-
<link rel="icon" type="image/svg+xml" href="./assets/
|
|
10
|
+
<link rel="icon" type="image/svg+xml" href="./assets/ymir-mark-kY-7e1x6.svg" />
|
|
11
11
|
<title>Sessrúmnir</title>
|
|
12
12
|
<script src="./theme-boot.js"></script>
|
|
13
|
-
<script type="module" crossorigin src="./assets/index-
|
|
14
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
13
|
+
<script type="module" crossorigin src="./assets/index-B3mV3a_n.js"></script>
|
|
14
|
+
<link rel="stylesheet" crossorigin href="./assets/index-D0j--OQJ.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body class="bg-app text-primary antialiased">
|
|
17
17
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zerwiz/sessrumnir",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.17",
|
|
4
4
|
"description": "Desktop GUI frontend for the Pi coding agent",
|
|
5
5
|
"main": "out/main/index.js",
|
|
6
6
|
"desktopName": "pi-desktop.desktop",
|
|
@@ -164,5 +164,6 @@
|
|
|
164
164
|
"artifactName": "Pi-Desktop-${version}-${os}-${arch}-setup.${ext}"
|
|
165
165
|
}
|
|
166
166
|
},
|
|
167
|
-
"productName": "Sessr\u00famnir"
|
|
167
|
+
"productName": "Sessr\u00famnir",
|
|
168
|
+
"private": false
|
|
168
169
|
}
|
package/src/renderer/index.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
http-equiv="Content-Security-Policy"
|
|
8
8
|
content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'"
|
|
9
9
|
/>
|
|
10
|
-
<link rel="icon" type="image/svg+xml" href="./src/assets/
|
|
10
|
+
<link rel="icon" type="image/svg+xml" href="./src/assets/ymir-mark.svg" />
|
|
11
11
|
<title>Sessrúmnir</title>
|
|
12
12
|
<script src="/theme-boot.js"></script>
|
|
13
13
|
</head>
|
package/src/renderer/src/app.tsx
CHANGED
|
@@ -96,7 +96,7 @@ export function App(): React.JSX.Element {
|
|
|
96
96
|
showChrome && workflowPanelOpen && !workflowPanelFilter && workflowPanelWorkspaceId === null
|
|
97
97
|
|
|
98
98
|
return (
|
|
99
|
-
<div className="relative flex h-screen flex-col
|
|
99
|
+
<div className="relative flex h-screen flex-col text-primary">
|
|
100
100
|
<EmberBackground />
|
|
101
101
|
{isDraggingFolder && (
|
|
102
102
|
<div
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="100%" height="100%">
|
|
2
|
+
<defs>
|
|
3
|
+
<!-- Background Slate -->
|
|
4
|
+
<linearGradient id="bg-grad" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
5
|
+
<stop offset="0%" stop-color="#0e0c09" />
|
|
6
|
+
<stop offset="100%" stop-color="#151209" />
|
|
7
|
+
</linearGradient>
|
|
8
|
+
|
|
9
|
+
<!-- Outer Dark Metal Forging -->
|
|
10
|
+
<linearGradient id="dark-metal" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
11
|
+
<stop offset="0%" stop-color="#7d5f2a" />
|
|
12
|
+
<stop offset="100%" stop-color="#0e0c09" />
|
|
13
|
+
</linearGradient>
|
|
14
|
+
|
|
15
|
+
<!-- Inner Cyan Edge / Chisel Highlight -->
|
|
16
|
+
<linearGradient id="cyan-glow" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
17
|
+
<stop offset="0%" stop-color="#e0b257" />
|
|
18
|
+
<stop offset="50%" stop-color="#c9973f" />
|
|
19
|
+
<stop offset="100%" stop-color="#7d5f2a" />
|
|
20
|
+
</linearGradient>
|
|
21
|
+
|
|
22
|
+
<!-- Drop Shadow for Depth -->
|
|
23
|
+
<filter id="shadow" x="-10%" y="-10%" width="120%" height="120%">
|
|
24
|
+
<feDropShadow dx="0" dy="8" stdDeviation="12" flood-color="#000000" flood-opacity="0.6"/>
|
|
25
|
+
</filter>
|
|
26
|
+
</defs>
|
|
27
|
+
|
|
28
|
+
<!-- Canvas -->
|
|
29
|
+
<rect width="512" height="512" rx="48" fill="url(#bg-grad)" stroke="#2b241a" stroke-width="4"/>
|
|
30
|
+
|
|
31
|
+
<!-- Master Group with Drop Shadow -->
|
|
32
|
+
<g filter="url(#shadow)">
|
|
33
|
+
|
|
34
|
+
<!-- 1. THICK OUTER BASE (The Iron Mass) -->
|
|
35
|
+
<g fill="none" stroke="url(#dark-metal)" stroke-width="48" stroke-linecap="square" stroke-linejoin="miter">
|
|
36
|
+
<!-- Algiz Y-Stem & Branches -->
|
|
37
|
+
<path d="M 144 144 L 256 256 L 368 144 M 256 256 V 352" />
|
|
38
|
+
<!-- Top Anvil Bar -->
|
|
39
|
+
<path d="M 128 352 H 384" />
|
|
40
|
+
<!-- Bottom Anvil Bar (Slightly narrower) -->
|
|
41
|
+
<path d="M 160 432 H 352" />
|
|
42
|
+
</g>
|
|
43
|
+
|
|
44
|
+
<!-- 2. THIN INNER HIGHLIGHT (The Glowing Chiseled Edge) -->
|
|
45
|
+
<g fill="none" stroke="url(#cyan-glow)" stroke-width="12" stroke-linecap="square" stroke-linejoin="miter">
|
|
46
|
+
<!-- Algiz Y-Stem & Branches -->
|
|
47
|
+
<path d="M 144 144 L 256 256 L 368 144 M 256 256 V 352" />
|
|
48
|
+
<!-- Top Anvil Bar -->
|
|
49
|
+
<path d="M 128 352 H 384" />
|
|
50
|
+
<!-- Bottom Anvil Bar -->
|
|
51
|
+
<path d="M 160 432 H 352" />
|
|
52
|
+
</g>
|
|
53
|
+
|
|
54
|
+
</g>
|
|
55
|
+
</svg>
|
|
@@ -28,7 +28,7 @@ import { useChatScroll, useGlobalWorkflowOpen } from '../hooks'
|
|
|
28
28
|
import { useState, useCallback, useEffect, useMemo, useRef } from 'react'
|
|
29
29
|
import { useTranslation } from 'react-i18next'
|
|
30
30
|
import { clsx } from 'clsx'
|
|
31
|
-
import
|
|
31
|
+
import ymirMark from '../assets/ymir-mark.svg'
|
|
32
32
|
import {
|
|
33
33
|
FolderTree,
|
|
34
34
|
GitCompare,
|
|
@@ -249,7 +249,7 @@ export function ChatPanel(): React.JSX.Element {
|
|
|
249
249
|
<div className="flex min-h-0 flex-1 flex-col items-center justify-center overflow-y-auto px-4 py-10">
|
|
250
250
|
<div className="mb-8 text-center">
|
|
251
251
|
<img
|
|
252
|
-
src={
|
|
252
|
+
src={ymirMark}
|
|
253
253
|
alt={PI_DESKTOP_PRODUCT_NAME}
|
|
254
254
|
className="mx-auto mb-4 block h-14 w-14"
|
|
255
255
|
/>
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
Play,
|
|
16
16
|
} from 'lucide-react'
|
|
17
17
|
import { useAppStore } from '../store'
|
|
18
|
-
import
|
|
18
|
+
import ymirMark from '../assets/ymir-mark.svg'
|
|
19
19
|
import { formatGitStatus } from './review-rail'
|
|
20
20
|
import { StatsPanel } from './stats-panel'
|
|
21
21
|
import type { GitFileStatus, SessionListItem } from '../../../shared/ipc-contracts'
|
|
@@ -344,7 +344,7 @@ function HomeScreenInfo(): React.JSX.Element {
|
|
|
344
344
|
<PiErrorBanner />
|
|
345
345
|
|
|
346
346
|
<div className="mb-6 flex flex-col items-center text-center">
|
|
347
|
-
<img src={
|
|
347
|
+
<img src={ymirMark} alt={PI_DESKTOP_PRODUCT_NAME} className="h-16 w-16" />
|
|
348
348
|
<h1 className="mt-4 text-2xl font-semibold text-primary">{PI_DESKTOP_PRODUCT_NAME}</h1>
|
|
349
349
|
<p className="mt-1 text-sm text-dim">{t('home.subtitle')}</p>
|
|
350
350
|
</div>
|
|
@@ -378,4 +378,5 @@
|
|
|
378
378
|
at build time, so they can't live here. */
|
|
379
379
|
|
|
380
380
|
/* The hearth — embers rising over the cloth. */
|
|
381
|
-
.ember-bg { position: fixed; inset: 0; z-index: -1; pointer-events: none; }
|
|
381
|
+
.ember-bg { position: fixed; inset: 0; z-index: -1; pointer-events: none; opacity: 0.55; mix-blend-mode: screen; }
|
|
382
|
+
html, body { background-color: var(--app, #0e0c09); }
|
|
@@ -1908,7 +1908,7 @@ export const useAppStore = create<AppState & AppActions>((set, get) => ({
|
|
|
1908
1908
|
// when the effective (draft or saved) theme is 'system'.
|
|
1909
1909
|
watchSystemTheme(() => {
|
|
1910
1910
|
const state = get()
|
|
1911
|
-
return state.settingsDraft.theme ?? state.settings?.theme ?? '
|
|
1911
|
+
return state.settingsDraft.theme ?? state.settings?.theme ?? 'fensalir'
|
|
1912
1912
|
})
|
|
1913
1913
|
|
|
1914
1914
|
// Apply font size
|
|
@@ -1,26 +1,12 @@
|
|
|
1
1
|
import type { ThemeFile } from '../../../shared/theme/theme-file'
|
|
2
2
|
import { t } from '../../../shared/i18n'
|
|
3
3
|
import { BUILTIN_THEME_IDS as SHARED_BUILTIN_THEME_IDS } from '../../../shared/theme/builtin-ids'
|
|
4
|
-
import dark from './dark.json'
|
|
5
|
-
import light from './light.json'
|
|
6
|
-
import nord from './nord.json'
|
|
7
|
-
import gruvbox from './gruvbox.json'
|
|
8
|
-
import breezeDark from './breeze-dark.json'
|
|
9
|
-
import breezeLight from './breeze-light.json'
|
|
10
|
-
import breezeClaudius from './breeze-claudius.json'
|
|
11
4
|
import sessrumnir from './sessrumnir.json'
|
|
12
5
|
import fensalir from './fensalir.json'
|
|
13
6
|
|
|
14
7
|
export const BUILTIN_THEMES: ReadonlyArray<{ id: string; file: ThemeFile }> = [
|
|
15
8
|
{ id: 'sessrumnir', file: sessrumnir as ThemeFile },
|
|
16
9
|
{ id: 'fensalir', file: fensalir as ThemeFile },
|
|
17
|
-
{ id: 'dark', file: dark as ThemeFile },
|
|
18
|
-
{ id: 'light', file: light as ThemeFile },
|
|
19
|
-
{ id: 'nord', file: nord as ThemeFile },
|
|
20
|
-
{ id: 'gruvbox', file: gruvbox as ThemeFile },
|
|
21
|
-
{ id: 'breeze-dark', file: breezeDark as ThemeFile },
|
|
22
|
-
{ id: 'breeze-light', file: breezeLight as ThemeFile },
|
|
23
|
-
{ id: 'breeze-claudius', file: breezeClaudius as ThemeFile },
|
|
24
10
|
]
|
|
25
11
|
|
|
26
12
|
export const BUILTIN_THEME_IDS: readonly string[] = BUILTIN_THEMES.map((t) => t.id)
|
|
@@ -39,13 +25,6 @@ function isBuiltinThemeId(id: string): id is BuiltinThemeId {
|
|
|
39
25
|
// permission-mode.ts's `getPermissionModeLabel`, extracts fine). An explicit
|
|
40
26
|
// key per id keeps them extractable and typo-checked by tsc.
|
|
41
27
|
const BUILTIN_THEME_NAME_KEYS = {
|
|
42
|
-
dark: 'themes.builtin.dark',
|
|
43
|
-
light: 'themes.builtin.light',
|
|
44
|
-
nord: 'themes.builtin.nord',
|
|
45
|
-
gruvbox: 'themes.builtin.gruvbox',
|
|
46
|
-
'breeze-dark': 'themes.builtin.breeze-dark',
|
|
47
|
-
'breeze-light': 'themes.builtin.breeze-light',
|
|
48
|
-
'breeze-claudius': 'themes.builtin.breeze-claudius',
|
|
49
28
|
sessrumnir: 'themes.builtin.sessrumnir',
|
|
50
29
|
fensalir: 'themes.builtin.fensalir',
|
|
51
30
|
} as const satisfies Record<BuiltinThemeId, string>
|
|
@@ -11,7 +11,7 @@ export type ThemeKind = ThemeFile['kind']
|
|
|
11
11
|
export type ThemeSettings = Pick<AppSettings, 'theme' | 'systemLightTheme' | 'systemDarkTheme'>
|
|
12
12
|
|
|
13
13
|
export const SYSTEM_THEME_ID = 'system'
|
|
14
|
-
const FALLBACK_THEME_ID = '
|
|
14
|
+
const FALLBACK_THEME_ID = 'fensalir'
|
|
15
15
|
const DARK_SCHEME_QUERY = '(prefers-color-scheme: dark)'
|
|
16
16
|
const SYSTEM_THEME_DEFAULTS: Readonly<Record<ThemeKind, string>> = {
|
|
17
17
|
light: DEFAULT_SETTINGS.systemLightTheme,
|
|
@@ -13,9 +13,9 @@ export const DEFAULT_SETTINGS: AppSettings = {
|
|
|
13
13
|
piExecutablePath: 'pi',
|
|
14
14
|
piEngine: 'auto',
|
|
15
15
|
defaultArgs: [],
|
|
16
|
-
theme: '
|
|
17
|
-
systemLightTheme: '
|
|
18
|
-
systemDarkTheme: '
|
|
16
|
+
theme: 'fensalir',
|
|
17
|
+
systemLightTheme: 'fensalir',
|
|
18
|
+
systemDarkTheme: 'fensalir',
|
|
19
19
|
defaultModel: null,
|
|
20
20
|
defaultProvider: null,
|
|
21
21
|
defaultCwd: null,
|
|
@@ -7,5 +7,5 @@
|
|
|
7
7
|
// those (separate process/bundle), so this module is the single shared
|
|
8
8
|
// source of truth for just the id strings.
|
|
9
9
|
export const BUILTIN_THEME_IDS = [
|
|
10
|
-
'
|
|
10
|
+
'sessrumnir', 'fensalir',
|
|
11
11
|
] as const
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="none">
|
|
2
|
-
<!-- Charcoal rounded background -->
|
|
3
|
-
<rect width="512" height="512" rx="77" fill="#36454F"/>
|
|
4
|
-
|
|
5
|
-
<!-- Pi letterforms: official brand marks, scaled from 800 -> 512 -->
|
|
6
|
-
<g transform="translate(5.5, 5.5) scale(0.62625)">
|
|
7
|
-
<!-- P shape: outer boundary clockwise, inner hole counter-clockwise -->
|
|
8
|
-
<path fill="#e67e22" fill-rule="evenodd" d="
|
|
9
|
-
M165.29 165.29
|
|
10
|
-
H517.36
|
|
11
|
-
V400
|
|
12
|
-
H400
|
|
13
|
-
V517.36
|
|
14
|
-
H282.65
|
|
15
|
-
V634.72
|
|
16
|
-
H165.29
|
|
17
|
-
Z
|
|
18
|
-
M282.65 282.65
|
|
19
|
-
V400
|
|
20
|
-
H400
|
|
21
|
-
V282.65
|
|
22
|
-
Z
|
|
23
|
-
"/>
|
|
24
|
-
<!-- i dot -->
|
|
25
|
-
<path fill="#e67e22" d="M517.36 400 H634.72 V634.72 H517.36 Z"/>
|
|
26
|
-
</g>
|
|
27
|
-
</svg>
|