@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 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 the Licensor for inclusion in the Work by the copyright owner
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 the Licensor and
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 any notices that do not
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. Please also get an
185
- "Applicability of Apache License" file from the Apache Software
186
- Foundation at http://www.apache.org/foundation/license-faq.html.
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 HighlandJewls, PikkonMG, FaqFirebase
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: "system",
5486
- systemLightTheme: "light",
5487
- systemDarkTheme: "dark",
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: "system",
16214
- systemLightTheme: "light",
16215
- systemDarkTheme: "dark",
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 = "dark";
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 ?? "system";
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.15"
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 piLogo = "" + new URL("pi-logo-B48rElrT.svg", import.meta.url).href;
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: piLogo,
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: piLogo, alt: PI_DESKTOP_PRODUCT_NAME, className: "h-16 w-16" }),
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 bg-app text-primary", children: [
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>
@@ -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/pi-logo-B48rElrT.svg" />
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-DS1LEasG.js"></script>
14
- <link rel="stylesheet" crossorigin href="./assets/index-Ny2JywQb.css">
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.15",
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
  }
@@ -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/pi-logo.svg" />
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>
@@ -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 bg-app text-primary">
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 piLogo from '../assets/pi-logo.svg'
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={piLogo}
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 piLogo from '../assets/pi-logo.svg'
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={piLogo} alt={PI_DESKTOP_PRODUCT_NAME} className="h-16 w-16" />
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 ?? 'system'
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 = 'dark'
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: 'system',
17
- systemLightTheme: 'light',
18
- systemDarkTheme: 'dark',
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
- 'dark', 'light', 'nord', 'gruvbox', 'breeze-dark', 'breeze-light', 'breeze-claudius', 'sessrumnir', 'fensalir',
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>