osdy-pi 1.8.0 → 1.9.0

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/README.md CHANGED
@@ -6,11 +6,12 @@ Osdy Pi gives [Pi](https://github.com/earendil-works/pi) a themed, responsive te
6
6
 
7
7
  ## Release highlights
8
8
 
9
- The **1.8.0 release candidate** includes the changes below; npm publication is not yet confirmed.
9
+ **1.9.0 adds Halloween and Halloween Killer**, bringing the bundle to **20 themes**. The table below summarizes these additions and existing features.
10
10
 
11
11
  | Area | What ships |
12
12
  | --- | --- |
13
- | New themes (included starting in 1.8.0) | Gruvbox Dark, Nord, Rosé Pine base dark, and Daniela Cute bring the bundle to 18 themes. |
13
+ | New themes (1.9.0) | Halloween and Halloween Killer add two dark palettes, bringing the bundle to 20 themes. |
14
+ | Themes introduced in 1.8.0 | Gruvbox Dark, Nord, Rosé Pine base dark, and Daniela Cute. |
14
15
  | Message cards | Pi-native colored user cards without emojis and plain assistant Markdown preceded by a separate `🦝` transcript row. |
15
16
  | Header and mascot | A theme-aware `neon` header and selectable `bts` mascot, both responsive and persisted independently. |
16
17
  | Accounts | `/osdy-account` switches Codex profiles in place with atomic activation, rollback, bounded auth files, and process-safe locks. |
@@ -45,7 +46,7 @@ The **1.8.0 release candidate** includes the changes below; npm publication is n
45
46
  pi
46
47
  ```
47
48
 
48
- Osdy Pi's own extension and themes are bundled—do not install them separately. The **1.8.0 release candidate** bundles **18 themes**, including Gruvbox Dark, Nord, Rosé Pine base dark, and Daniela Cute starting in 1.8.0. Check your installed npm version; publication of 1.8.0 is not yet confirmed. Launch through `osdy-pi` (or `npm run pi:dev`) to activate a valid Osdy default account into Pi's shared agent directory before Pi starts. With no default, Pi remains unmanaged; run `/osdy-account` to create a profile and establish a default. On session start, Osdy Pi restores its persisted enabled state when a UI is available and preserves your selected Pi theme. When disabled, it leaves Gentle Shell (or Pi's native UI) untouched.
49
+ Osdy Pi's own extension and themes are bundled—do not install them separately. Version **1.9.0** bundles **20 themes**: Gruvbox Dark, Nord, Rosé Pine base dark, and Daniela Cute were introduced in 1.8.0; Halloween and Halloween Killer are added in 1.9.0. Check your installed npm version to see which themes are available. Launch through `osdy-pi` (or `npm run pi:dev`) to activate a valid Osdy default account into Pi's shared agent directory before Pi starts. With no default, Pi remains unmanaged; run `/osdy-account` to create a profile and establish a default. On session start, Osdy Pi restores its persisted enabled state when a UI is available and preserves your selected Pi theme. When disabled, it leaves Gentle Shell (or Pi's native UI) untouched.
49
50
 
50
51
  ### Optional: isolated `osdy` command
51
52
 
@@ -249,7 +250,7 @@ Before rename or removal, close this Pi process when it uses the target and **ma
249
250
 
250
251
  | Area | Included behavior |
251
252
  | --- | --- |
252
- | Themes | 18 built-in themes, including Osdy, Kanagawa, Dracula, Gruvbox, Nord, Rosé Pine, Daniela Cute, Catppuccin, Matrix, and Lucent Orange palettes |
253
+ | Themes | 20 built-in themes, including Osdy, Kanagawa, Dracula, Gruvbox, Nord, Rosé Pine, Daniela Cute, Halloween, Halloween Killer, Catppuccin, Matrix, and Lucent Orange palettes |
253
254
  | Header and mascot | Independently selectable `osdy-theme`/`neon` headers and `current`/`bts` mascots |
254
255
  | Messages | Native colored user cards without emojis and plain assistant Markdown with a separate assistant `🦝` row |
255
256
  | Input | Responsive auto editor by default, with selectable simple Pi-native or extended framed modes |
@@ -263,10 +264,10 @@ Before rename or removal, close this Pi process when it uses the target and **ma
263
264
 
264
265
  ### Themes
265
266
 
266
- The bundle contains **18 themes**; Gruvbox Dark, Nord, Rosé Pine base dark, and Daniela Cute are included starting in **1.8.0**. To try the **1.8.0 release candidate** before npm publication is confirmed:
267
+ Version **1.9.0** contains **20 themes**. Gruvbox Dark, Nord, Rosé Pine base dark, and Daniela Cute were introduced in **1.8.0**; **1.9.0** adds Halloween and Halloween Killer. To try the themes from a checkout:
267
268
 
268
- 1. Run `npm run pi:dev` from the 1.8.0 checkout, or `/reload` if that checkout is already loaded in Pi.
269
- 2. Open `/settings` → **Theme** and select `osdy-pi-gruvbox-dark`, `osdy-pi-nord`, `osdy-pi-rose-pine`, `osdy-pi-daniela-cute`, or another name below.
269
+ 1. Run `npm run pi:dev` from the 1.9.0 checkout, or `/reload` if that checkout is already loaded in Pi.
270
+ 2. Open `/settings` → **Theme** and select `osdy-pi-gruvbox-dark`, `osdy-pi-nord`, `osdy-pi-rose-pine`, `osdy-pi-daniela-cute`, `osdy-pi-halloween`, `osdy-pi-halloween-killer`, or another name below.
270
271
 
271
272
  | Theme | Use |
272
273
  | --- | --- |
@@ -282,6 +283,8 @@ The bundle contains **18 themes**; Gruvbox Dark, Nord, Rosé Pine base dark, and
282
283
  | `osdy-pi-nord` | [Nord](https://www.nordtheme.com/docs/colors-and-palettes) dark palette: cool, restrained Polar Night, Snow Storm, Frost, and Aurora colors. |
283
284
  | `osdy-pi-rose-pine` | [Rosé Pine](https://rosepinetheme.com/palette/ingredients/) base dark palette: soft colors, not Moon or Dawn. |
284
285
  | `osdy-pi-daniela-cute` | Daniela Cute: navy panels/export page (`#0B1220`), blue cards (`#111F33`), borders (`#253A55`), blue accents (`#3584E4`), main text (`#D8E2EF`), secondary text (`#93A6BE`), and selection (`#193655`). Distinct status and syntax colors remain; the terminal background remains unchanged. |
286
+ | `osdy-pi-halloween` | Pumpkin orange, spectral violet, and lime accents on dark plum panels, with warm text and distinct success/error colors. |
287
+ | `osdy-pi-halloween-killer` | Gothic/slasher dark palette: near-black panels, blood-red and violet accents, bone-colored text, and sage success indicators distinct from red errors. |
285
288
  | `osdy-pi-catppuccin-latte` | Catppuccin Latte light palette. |
286
289
  | `osdy-pi-catppuccin-frappe` | Catppuccin Frappé dark palette. |
287
290
  | `osdy-pi-catppuccin-macchiato` | Catppuccin Macchiato dark palette. |
@@ -408,8 +408,8 @@ void test("every registered theme defines native user message colors", () => {
408
408
  readFileSync(new URL("../../package.json", import.meta.url), "utf8"),
409
409
  ) as { pi: { themes: string[] } };
410
410
 
411
- assert.equal(manifest.pi.themes.length, 18);
412
- assert.equal(new Set(manifest.pi.themes).size, 18, "theme registrations must be unique");
411
+ assert.equal(manifest.pi.themes.length, 20);
412
+ assert.equal(new Set(manifest.pi.themes).size, 20, "theme registrations must be unique");
413
413
  for (const themePath of manifest.pi.themes) {
414
414
  const theme = JSON.parse(
415
415
  readFileSync(
@@ -438,17 +438,21 @@ void test("new dark themes are explicitly registered with unique matching names"
438
438
  return theme.name;
439
439
  });
440
440
  assert.equal(new Set(names).size, names.length, "theme names must be unique");
441
- for (const name of ["osdy-pi-gruvbox-dark", "osdy-pi-nord", "osdy-pi-rose-pine", "osdy-pi-daniela-cute"]) {
441
+ for (const name of ["osdy-pi-gruvbox-dark", "osdy-pi-nord", "osdy-pi-rose-pine", "osdy-pi-daniela-cute", "osdy-pi-halloween", "osdy-pi-halloween-killer"]) {
442
442
  assert.equal(manifest.pi.themes.filter((path) => path === `./themes/${name}.json`).length, 1);
443
443
  assert.equal(names.filter((registered) => registered === name).length, 1);
444
444
  }
445
445
  });
446
446
 
447
- void test("README documents all 18 themes including Daniela Cute", () => {
447
+ void test("README documents all 20 themes including both Halloween palettes", () => {
448
448
  const readme = readFileSync(new URL("../../README.md", import.meta.url), "utf8");
449
- assert.match(readme, /\*\*18 themes\*\*/);
450
- assert.match(readme, /18 built-in themes/);
449
+ assert.match(readme, /\*\*20 themes\*\*/);
450
+ assert.match(readme, /20 built-in themes/);
451
+ assert.doesNotMatch(readme, /\b18 (?:built-in )?themes\b/);
452
+ assert.equal(readme.match(/^\| `osdy-pi-[^`]+` \|/gm)?.length, 20);
451
453
  assert.match(readme, /\| `osdy-pi-daniela-cute` \| Daniela Cute/);
454
+ assert.match(readme, /\| `osdy-pi-halloween` \|.*[Pp]umpkin.*violet.*lime/);
455
+ assert.match(readme, /\| `osdy-pi-halloween-killer` \|.*[Gg]othic.*blood.red.*violet/);
452
456
  });
453
457
 
454
458
  void test("Tokyo Night retains its approved native user card colors", () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "osdy-pi",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "Osdy Pi package: themes, header, and custom editor for Pi.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -45,6 +45,8 @@
45
45
  "./themes/osdy-pi-nord.json",
46
46
  "./themes/osdy-pi-rose-pine.json",
47
47
  "./themes/osdy-pi-daniela-cute.json",
48
+ "./themes/osdy-pi-halloween.json",
49
+ "./themes/osdy-pi-halloween-killer.json",
48
50
  "./themes/osdy-pi-catppuccin-latte.json",
49
51
  "./themes/osdy-pi-catppuccin-frappe.json",
50
52
  "./themes/osdy-pi-catppuccin-macchiato.json",
@@ -0,0 +1,87 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
+ "name": "osdy-pi-halloween-killer",
4
+ "appearance": "dark",
5
+ "vars": {
6
+ "black": "#09080D",
7
+ "card": "#2D1C26",
8
+ "border": "#854356",
9
+ "borderMuted": "#482B3A",
10
+ "selection": "#321D35",
11
+ "pending": "#16111C",
12
+ "successBg": "#15221D",
13
+ "errorBg": "#2D111B",
14
+ "bone": "#EEE5E1",
15
+ "muted": "#BFAFBF",
16
+ "dim": "#A38BA9",
17
+ "blood": "#F2677A",
18
+ "violet": "#BCA0ED",
19
+ "sage": "#96C9A2",
20
+ "amber": "#E9BC78",
21
+ "rose": "#DF96BA",
22
+ "silver": "#BCC4D8"
23
+ },
24
+ "colors": {
25
+ "accent": "blood",
26
+ "border": "border",
27
+ "borderAccent": "blood",
28
+ "borderMuted": "borderMuted",
29
+ "success": "sage",
30
+ "error": "blood",
31
+ "warning": "amber",
32
+ "muted": "muted",
33
+ "dim": "dim",
34
+ "text": "bone",
35
+ "thinkingText": "muted",
36
+ "selectedBg": "selection",
37
+ "scrollbarTrack": "borderMuted",
38
+ "scrollbarThumb": "blood",
39
+ "searchMatchBg": "violet",
40
+ "searchMatchText": "black",
41
+ "userMessageBg": "card",
42
+ "userMessageText": "bone",
43
+ "customMessageBg": "card",
44
+ "customMessageText": "bone",
45
+ "customMessageLabel": "violet",
46
+ "toolPendingBg": "pending",
47
+ "toolSuccessBg": "successBg",
48
+ "toolErrorBg": "errorBg",
49
+ "toolTitle": "blood",
50
+ "toolOutput": "bone",
51
+ "mdHeading": "blood",
52
+ "mdLink": "violet",
53
+ "mdLinkUrl": "muted",
54
+ "mdCode": "rose",
55
+ "mdCodeBlock": "bone",
56
+ "mdCodeBlockBorder": "border",
57
+ "mdQuote": "muted",
58
+ "mdQuoteBorder": "violet",
59
+ "mdHr": "border",
60
+ "mdListBullet": "blood",
61
+ "toolDiffAdded": "sage",
62
+ "toolDiffRemoved": "blood",
63
+ "toolDiffContext": "muted",
64
+ "syntaxComment": "dim",
65
+ "syntaxKeyword": "violet",
66
+ "syntaxFunction": "blood",
67
+ "syntaxVariable": "bone",
68
+ "syntaxString": "sage",
69
+ "syntaxNumber": "rose",
70
+ "syntaxType": "silver",
71
+ "syntaxOperator": "blood",
72
+ "syntaxPunctuation": "muted",
73
+ "thinkingOff": "dim",
74
+ "thinkingMinimal": "silver",
75
+ "thinkingLow": "sage",
76
+ "thinkingMedium": "violet",
77
+ "thinkingHigh": "rose",
78
+ "thinkingXhigh": "blood",
79
+ "thinkingMax": "amber",
80
+ "bashMode": "violet"
81
+ },
82
+ "export": {
83
+ "pageBg": "black",
84
+ "cardBg": "card",
85
+ "infoBg": "pending"
86
+ }
87
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
+ "name": "osdy-pi-halloween",
4
+ "appearance": "dark",
5
+ "vars": {
6
+ "night": "#140F1D",
7
+ "card": "#302039",
8
+ "border": "#75568C",
9
+ "borderMuted": "#493650",
10
+ "selection": "#3B2547",
11
+ "pending": "#211829",
12
+ "successBg": "#1C291B",
13
+ "errorBg": "#321922",
14
+ "text": "#F5EBDD",
15
+ "muted": "#C3B0CC",
16
+ "dim": "#AA94B6",
17
+ "pumpkin": "#FFAA55",
18
+ "violet": "#C7A0FF",
19
+ "lime": "#B8E66B",
20
+ "red": "#FF8391",
21
+ "yellow": "#FFD580",
22
+ "pink": "#EF9ED5"
23
+ },
24
+ "colors": {
25
+ "accent": "pumpkin",
26
+ "border": "border",
27
+ "borderAccent": "pumpkin",
28
+ "borderMuted": "borderMuted",
29
+ "success": "lime",
30
+ "error": "red",
31
+ "warning": "yellow",
32
+ "muted": "muted",
33
+ "dim": "dim",
34
+ "text": "text",
35
+ "thinkingText": "muted",
36
+ "selectedBg": "selection",
37
+ "scrollbarTrack": "borderMuted",
38
+ "scrollbarThumb": "pumpkin",
39
+ "searchMatchBg": "yellow",
40
+ "searchMatchText": "night",
41
+ "userMessageBg": "card",
42
+ "userMessageText": "text",
43
+ "customMessageBg": "card",
44
+ "customMessageText": "text",
45
+ "customMessageLabel": "violet",
46
+ "toolPendingBg": "pending",
47
+ "toolSuccessBg": "successBg",
48
+ "toolErrorBg": "errorBg",
49
+ "toolTitle": "pumpkin",
50
+ "toolOutput": "text",
51
+ "mdHeading": "pumpkin",
52
+ "mdLink": "violet",
53
+ "mdLinkUrl": "muted",
54
+ "mdCode": "lime",
55
+ "mdCodeBlock": "text",
56
+ "mdCodeBlockBorder": "border",
57
+ "mdQuote": "muted",
58
+ "mdQuoteBorder": "violet",
59
+ "mdHr": "border",
60
+ "mdListBullet": "pumpkin",
61
+ "toolDiffAdded": "lime",
62
+ "toolDiffRemoved": "red",
63
+ "toolDiffContext": "muted",
64
+ "syntaxComment": "dim",
65
+ "syntaxKeyword": "violet",
66
+ "syntaxFunction": "pumpkin",
67
+ "syntaxVariable": "text",
68
+ "syntaxString": "lime",
69
+ "syntaxNumber": "pumpkin",
70
+ "syntaxType": "yellow",
71
+ "syntaxOperator": "pink",
72
+ "syntaxPunctuation": "muted",
73
+ "thinkingOff": "dim",
74
+ "thinkingMinimal": "pumpkin",
75
+ "thinkingLow": "yellow",
76
+ "thinkingMedium": "lime",
77
+ "thinkingHigh": "violet",
78
+ "thinkingXhigh": "pink",
79
+ "thinkingMax": "red",
80
+ "bashMode": "lime"
81
+ },
82
+ "export": {
83
+ "pageBg": "night",
84
+ "cardBg": "card",
85
+ "infoBg": "pending"
86
+ }
87
+ }