gsd-pi 2.34.0-dev.0150ae9 → 2.34.0-dev.ed0bfbf

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.
Files changed (28) hide show
  1. package/package.json +1 -1
  2. package/packages/pi-coding-agent/dist/modes/interactive/theme/dark.json +85 -0
  3. package/packages/pi-coding-agent/dist/modes/interactive/theme/light.json +84 -0
  4. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +335 -0
  5. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +0 -65
  6. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  7. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +16 -6
  8. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  9. package/packages/pi-coding-agent/src/modes/interactive/theme/dark.json +85 -0
  10. package/packages/pi-coding-agent/src/modes/interactive/theme/light.json +84 -0
  11. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.json +335 -0
  12. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +18 -7
  13. package/pkg/dist/modes/interactive/theme/dark.json +85 -0
  14. package/pkg/dist/modes/interactive/theme/light.json +84 -0
  15. package/pkg/dist/modes/interactive/theme/theme-schema.json +335 -0
  16. package/pkg/dist/modes/interactive/theme/theme.d.ts +0 -65
  17. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  18. package/pkg/dist/modes/interactive/theme/theme.js +16 -6
  19. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  20. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +0 -12
  21. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +0 -1
  22. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +0 -175
  23. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +0 -1
  24. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +0 -196
  25. package/pkg/dist/modes/interactive/theme/themes.d.ts +0 -12
  26. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +0 -1
  27. package/pkg/dist/modes/interactive/theme/themes.js +0 -175
  28. package/pkg/dist/modes/interactive/theme/themes.js.map +0 -1
@@ -0,0 +1,335 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Pi Coding Agent Theme",
4
+ "description": "Theme schema for Pi coding agent",
5
+ "type": "object",
6
+ "required": ["name", "colors"],
7
+ "properties": {
8
+ "$schema": {
9
+ "type": "string",
10
+ "description": "JSON schema reference"
11
+ },
12
+ "name": {
13
+ "type": "string",
14
+ "description": "Theme name"
15
+ },
16
+ "vars": {
17
+ "type": "object",
18
+ "description": "Reusable color variables",
19
+ "additionalProperties": {
20
+ "oneOf": [
21
+ {
22
+ "type": "string",
23
+ "description": "Hex color (#RRGGBB), variable reference, or empty string for terminal default"
24
+ },
25
+ {
26
+ "type": "integer",
27
+ "minimum": 0,
28
+ "maximum": 255,
29
+ "description": "256-color palette index (0-255)"
30
+ }
31
+ ]
32
+ }
33
+ },
34
+ "colors": {
35
+ "type": "object",
36
+ "description": "Theme color definitions (all required)",
37
+ "required": [
38
+ "accent",
39
+ "border",
40
+ "borderAccent",
41
+ "borderMuted",
42
+ "success",
43
+ "error",
44
+ "warning",
45
+ "muted",
46
+ "dim",
47
+ "text",
48
+ "thinkingText",
49
+ "selectedBg",
50
+ "userMessageBg",
51
+ "userMessageText",
52
+ "customMessageBg",
53
+ "customMessageText",
54
+ "customMessageLabel",
55
+ "toolPendingBg",
56
+ "toolSuccessBg",
57
+ "toolErrorBg",
58
+ "toolTitle",
59
+ "toolOutput",
60
+ "mdHeading",
61
+ "mdLink",
62
+ "mdLinkUrl",
63
+ "mdCode",
64
+ "mdCodeBlock",
65
+ "mdCodeBlockBorder",
66
+ "mdQuote",
67
+ "mdQuoteBorder",
68
+ "mdHr",
69
+ "mdListBullet",
70
+ "toolDiffAdded",
71
+ "toolDiffRemoved",
72
+ "toolDiffContext",
73
+ "syntaxComment",
74
+ "syntaxKeyword",
75
+ "syntaxFunction",
76
+ "syntaxVariable",
77
+ "syntaxString",
78
+ "syntaxNumber",
79
+ "syntaxType",
80
+ "syntaxOperator",
81
+ "syntaxPunctuation",
82
+ "thinkingOff",
83
+ "thinkingMinimal",
84
+ "thinkingLow",
85
+ "thinkingMedium",
86
+ "thinkingHigh",
87
+ "thinkingXhigh",
88
+ "bashMode"
89
+ ],
90
+ "properties": {
91
+ "accent": {
92
+ "$ref": "#/$defs/colorValue",
93
+ "description": "Primary accent color (logo, selected items, cursor)"
94
+ },
95
+ "border": {
96
+ "$ref": "#/$defs/colorValue",
97
+ "description": "Normal borders"
98
+ },
99
+ "borderAccent": {
100
+ "$ref": "#/$defs/colorValue",
101
+ "description": "Highlighted borders"
102
+ },
103
+ "borderMuted": {
104
+ "$ref": "#/$defs/colorValue",
105
+ "description": "Subtle borders"
106
+ },
107
+ "success": {
108
+ "$ref": "#/$defs/colorValue",
109
+ "description": "Success states"
110
+ },
111
+ "error": {
112
+ "$ref": "#/$defs/colorValue",
113
+ "description": "Error states"
114
+ },
115
+ "warning": {
116
+ "$ref": "#/$defs/colorValue",
117
+ "description": "Warning states"
118
+ },
119
+ "muted": {
120
+ "$ref": "#/$defs/colorValue",
121
+ "description": "Secondary/dimmed text"
122
+ },
123
+ "dim": {
124
+ "$ref": "#/$defs/colorValue",
125
+ "description": "Very dimmed text (more subtle than muted)"
126
+ },
127
+ "text": {
128
+ "$ref": "#/$defs/colorValue",
129
+ "description": "Default text color (usually empty string)"
130
+ },
131
+ "thinkingText": {
132
+ "$ref": "#/$defs/colorValue",
133
+ "description": "Thinking block text color"
134
+ },
135
+ "selectedBg": {
136
+ "$ref": "#/$defs/colorValue",
137
+ "description": "Selected item background"
138
+ },
139
+ "userMessageBg": {
140
+ "$ref": "#/$defs/colorValue",
141
+ "description": "User message background"
142
+ },
143
+ "userMessageText": {
144
+ "$ref": "#/$defs/colorValue",
145
+ "description": "User message text color"
146
+ },
147
+ "customMessageBg": {
148
+ "$ref": "#/$defs/colorValue",
149
+ "description": "Custom message background (hook-injected messages)"
150
+ },
151
+ "customMessageText": {
152
+ "$ref": "#/$defs/colorValue",
153
+ "description": "Custom message text color"
154
+ },
155
+ "customMessageLabel": {
156
+ "$ref": "#/$defs/colorValue",
157
+ "description": "Custom message type label color"
158
+ },
159
+ "toolPendingBg": {
160
+ "$ref": "#/$defs/colorValue",
161
+ "description": "Tool execution box (pending state)"
162
+ },
163
+ "toolSuccessBg": {
164
+ "$ref": "#/$defs/colorValue",
165
+ "description": "Tool execution box (success state)"
166
+ },
167
+ "toolErrorBg": {
168
+ "$ref": "#/$defs/colorValue",
169
+ "description": "Tool execution box (error state)"
170
+ },
171
+ "toolTitle": {
172
+ "$ref": "#/$defs/colorValue",
173
+ "description": "Tool execution box title color"
174
+ },
175
+ "toolOutput": {
176
+ "$ref": "#/$defs/colorValue",
177
+ "description": "Tool execution box output text color"
178
+ },
179
+ "mdHeading": {
180
+ "$ref": "#/$defs/colorValue",
181
+ "description": "Markdown heading text"
182
+ },
183
+ "mdLink": {
184
+ "$ref": "#/$defs/colorValue",
185
+ "description": "Markdown link text"
186
+ },
187
+ "mdLinkUrl": {
188
+ "$ref": "#/$defs/colorValue",
189
+ "description": "Markdown link URL"
190
+ },
191
+ "mdCode": {
192
+ "$ref": "#/$defs/colorValue",
193
+ "description": "Markdown inline code"
194
+ },
195
+ "mdCodeBlock": {
196
+ "$ref": "#/$defs/colorValue",
197
+ "description": "Markdown code block content"
198
+ },
199
+ "mdCodeBlockBorder": {
200
+ "$ref": "#/$defs/colorValue",
201
+ "description": "Markdown code block fences"
202
+ },
203
+ "mdQuote": {
204
+ "$ref": "#/$defs/colorValue",
205
+ "description": "Markdown blockquote text"
206
+ },
207
+ "mdQuoteBorder": {
208
+ "$ref": "#/$defs/colorValue",
209
+ "description": "Markdown blockquote border"
210
+ },
211
+ "mdHr": {
212
+ "$ref": "#/$defs/colorValue",
213
+ "description": "Markdown horizontal rule"
214
+ },
215
+ "mdListBullet": {
216
+ "$ref": "#/$defs/colorValue",
217
+ "description": "Markdown list bullets/numbers"
218
+ },
219
+ "toolDiffAdded": {
220
+ "$ref": "#/$defs/colorValue",
221
+ "description": "Added lines in tool diffs"
222
+ },
223
+ "toolDiffRemoved": {
224
+ "$ref": "#/$defs/colorValue",
225
+ "description": "Removed lines in tool diffs"
226
+ },
227
+ "toolDiffContext": {
228
+ "$ref": "#/$defs/colorValue",
229
+ "description": "Context lines in tool diffs"
230
+ },
231
+ "syntaxComment": {
232
+ "$ref": "#/$defs/colorValue",
233
+ "description": "Syntax highlighting: comments"
234
+ },
235
+ "syntaxKeyword": {
236
+ "$ref": "#/$defs/colorValue",
237
+ "description": "Syntax highlighting: keywords"
238
+ },
239
+ "syntaxFunction": {
240
+ "$ref": "#/$defs/colorValue",
241
+ "description": "Syntax highlighting: function names"
242
+ },
243
+ "syntaxVariable": {
244
+ "$ref": "#/$defs/colorValue",
245
+ "description": "Syntax highlighting: variable names"
246
+ },
247
+ "syntaxString": {
248
+ "$ref": "#/$defs/colorValue",
249
+ "description": "Syntax highlighting: string literals"
250
+ },
251
+ "syntaxNumber": {
252
+ "$ref": "#/$defs/colorValue",
253
+ "description": "Syntax highlighting: number literals"
254
+ },
255
+ "syntaxType": {
256
+ "$ref": "#/$defs/colorValue",
257
+ "description": "Syntax highlighting: type names"
258
+ },
259
+ "syntaxOperator": {
260
+ "$ref": "#/$defs/colorValue",
261
+ "description": "Syntax highlighting: operators"
262
+ },
263
+ "syntaxPunctuation": {
264
+ "$ref": "#/$defs/colorValue",
265
+ "description": "Syntax highlighting: punctuation"
266
+ },
267
+ "thinkingOff": {
268
+ "$ref": "#/$defs/colorValue",
269
+ "description": "Thinking level border: off"
270
+ },
271
+ "thinkingMinimal": {
272
+ "$ref": "#/$defs/colorValue",
273
+ "description": "Thinking level border: minimal"
274
+ },
275
+ "thinkingLow": {
276
+ "$ref": "#/$defs/colorValue",
277
+ "description": "Thinking level border: low"
278
+ },
279
+ "thinkingMedium": {
280
+ "$ref": "#/$defs/colorValue",
281
+ "description": "Thinking level border: medium"
282
+ },
283
+ "thinkingHigh": {
284
+ "$ref": "#/$defs/colorValue",
285
+ "description": "Thinking level border: high"
286
+ },
287
+ "thinkingXhigh": {
288
+ "$ref": "#/$defs/colorValue",
289
+ "description": "Thinking level border: xhigh (OpenAI codex-max only)"
290
+ },
291
+ "bashMode": {
292
+ "$ref": "#/$defs/colorValue",
293
+ "description": "Editor border color in bash mode"
294
+ }
295
+ },
296
+ "additionalProperties": false
297
+ },
298
+ "export": {
299
+ "type": "object",
300
+ "description": "Optional colors for HTML export (defaults derived from userMessageBg if not specified)",
301
+ "properties": {
302
+ "pageBg": {
303
+ "$ref": "#/$defs/colorValue",
304
+ "description": "Page background color"
305
+ },
306
+ "cardBg": {
307
+ "$ref": "#/$defs/colorValue",
308
+ "description": "Card/container background color"
309
+ },
310
+ "infoBg": {
311
+ "$ref": "#/$defs/colorValue",
312
+ "description": "Info sections background (system prompt, notices)"
313
+ }
314
+ },
315
+ "additionalProperties": false
316
+ }
317
+ },
318
+ "additionalProperties": false,
319
+ "$defs": {
320
+ "colorValue": {
321
+ "oneOf": [
322
+ {
323
+ "type": "string",
324
+ "description": "Hex color (#RRGGBB), variable reference, or empty string for terminal default"
325
+ },
326
+ {
327
+ "type": "integer",
328
+ "minimum": 0,
329
+ "maximum": 255,
330
+ "description": "256-color palette index (0-255)"
331
+ }
332
+ ]
333
+ }
334
+ }
335
+ }
@@ -9,8 +9,7 @@ import {
9
9
  supportsLanguage,
10
10
  type HighlightColors,
11
11
  } from "@gsd/native";
12
- import { getCustomThemesDir } from "../../../config.js";
13
- import { builtinThemes } from "./themes.js";
12
+ import { getCustomThemesDir, getThemesDir } from "../../../config.js";
14
13
 
15
14
  // Issue #453: native preview highlighting can wedge the entire interactive
16
15
  // session after a successful file tool. Keep the safer plain-text path as the
@@ -101,7 +100,7 @@ const ThemeJsonSchema = Type.Object({
101
100
  ),
102
101
  });
103
102
 
104
- export type ThemeJson = Static<typeof ThemeJsonSchema>;
103
+ type ThemeJson = Static<typeof ThemeJsonSchema>;
105
104
 
106
105
  const validateThemeJson = TypeCompiler.Compile(ThemeJsonSchema);
107
106
 
@@ -451,8 +450,19 @@ export class Theme {
451
450
  // Theme Loading
452
451
  // ============================================================================
453
452
 
453
+ let BUILTIN_THEMES: Record<string, ThemeJson> | undefined;
454
+
454
455
  function getBuiltinThemes(): Record<string, ThemeJson> {
455
- return builtinThemes;
456
+ if (!BUILTIN_THEMES) {
457
+ const themesDir = getThemesDir();
458
+ const darkPath = path.join(themesDir, "dark.json");
459
+ const lightPath = path.join(themesDir, "light.json");
460
+ BUILTIN_THEMES = {
461
+ dark: JSON.parse(fs.readFileSync(darkPath, "utf-8")) as ThemeJson,
462
+ light: JSON.parse(fs.readFileSync(lightPath, "utf-8")) as ThemeJson,
463
+ };
464
+ }
465
+ return BUILTIN_THEMES;
456
466
  }
457
467
 
458
468
  export function getAvailableThemes(): string[] {
@@ -478,12 +488,13 @@ export interface ThemeInfo {
478
488
  }
479
489
 
480
490
  export function getAvailableThemesWithPaths(): ThemeInfo[] {
491
+ const themesDir = getThemesDir();
481
492
  const customThemesDir = getCustomThemesDir();
482
493
  const result: ThemeInfo[] = [];
483
494
 
484
- // Built-in themes (embedded in code, no file path)
495
+ // Built-in themes
485
496
  for (const name of Object.keys(getBuiltinThemes())) {
486
- result.push({ name, path: undefined });
497
+ result.push({ name, path: path.join(themesDir, `${name}.json`) });
487
498
  }
488
499
 
489
500
  // Custom themes
@@ -528,7 +539,7 @@ function parseThemeJson(label: string, json: unknown): ThemeJson {
528
539
  errorMessage += "\nMissing required color tokens:\n";
529
540
  errorMessage += missingColors.map((c) => ` - ${c}`).join("\n");
530
541
  errorMessage += '\n\nPlease add these colors to your theme\'s "colors" object.';
531
- errorMessage += "\nSee the built-in dark/light themes for reference values.";
542
+ errorMessage += "\nSee the built-in themes (dark.json, light.json) for reference values.";
532
543
  }
533
544
  if (otherErrors.length > 0) {
534
545
  errorMessage += `\n\nOther errors:\n${otherErrors.join("\n")}`;
@@ -0,0 +1,85 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/badlogic/pi-mono/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
+ "name": "dark",
4
+ "vars": {
5
+ "cyan": "#00d7ff",
6
+ "blue": "#5f87ff",
7
+ "green": "#b5bd68",
8
+ "red": "#cc6666",
9
+ "yellow": "#ffff00",
10
+ "gray": "#808080",
11
+ "dimGray": "#666666",
12
+ "darkGray": "#505050",
13
+ "accent": "#8abeb7",
14
+ "selectedBg": "#3a3a4a",
15
+ "userMsgBg": "#343541",
16
+ "toolPendingBg": "#282832",
17
+ "toolSuccessBg": "#283228",
18
+ "toolErrorBg": "#3c2828",
19
+ "customMsgBg": "#2d2838"
20
+ },
21
+ "colors": {
22
+ "accent": "accent",
23
+ "border": "blue",
24
+ "borderAccent": "cyan",
25
+ "borderMuted": "darkGray",
26
+ "success": "green",
27
+ "error": "red",
28
+ "warning": "yellow",
29
+ "muted": "gray",
30
+ "dim": "dimGray",
31
+ "text": "",
32
+ "thinkingText": "gray",
33
+
34
+ "selectedBg": "selectedBg",
35
+ "userMessageBg": "userMsgBg",
36
+ "userMessageText": "",
37
+ "customMessageBg": "customMsgBg",
38
+ "customMessageText": "",
39
+ "customMessageLabel": "#9575cd",
40
+ "toolPendingBg": "toolPendingBg",
41
+ "toolSuccessBg": "toolSuccessBg",
42
+ "toolErrorBg": "toolErrorBg",
43
+ "toolTitle": "",
44
+ "toolOutput": "gray",
45
+
46
+ "mdHeading": "#f0c674",
47
+ "mdLink": "#81a2be",
48
+ "mdLinkUrl": "dimGray",
49
+ "mdCode": "accent",
50
+ "mdCodeBlock": "green",
51
+ "mdCodeBlockBorder": "gray",
52
+ "mdQuote": "gray",
53
+ "mdQuoteBorder": "gray",
54
+ "mdHr": "gray",
55
+ "mdListBullet": "accent",
56
+
57
+ "toolDiffAdded": "green",
58
+ "toolDiffRemoved": "red",
59
+ "toolDiffContext": "gray",
60
+
61
+ "syntaxComment": "#6A9955",
62
+ "syntaxKeyword": "#569CD6",
63
+ "syntaxFunction": "#DCDCAA",
64
+ "syntaxVariable": "#9CDCFE",
65
+ "syntaxString": "#CE9178",
66
+ "syntaxNumber": "#B5CEA8",
67
+ "syntaxType": "#4EC9B0",
68
+ "syntaxOperator": "#D4D4D4",
69
+ "syntaxPunctuation": "#D4D4D4",
70
+
71
+ "thinkingOff": "darkGray",
72
+ "thinkingMinimal": "#6e6e6e",
73
+ "thinkingLow": "#5f87af",
74
+ "thinkingMedium": "#81a2be",
75
+ "thinkingHigh": "#b294bb",
76
+ "thinkingXhigh": "#d183e8",
77
+
78
+ "bashMode": "green"
79
+ },
80
+ "export": {
81
+ "pageBg": "#18181e",
82
+ "cardBg": "#1e1e24",
83
+ "infoBg": "#3c3728"
84
+ }
85
+ }
@@ -0,0 +1,84 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/badlogic/pi-mono/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
3
+ "name": "light",
4
+ "vars": {
5
+ "teal": "#5a8080",
6
+ "blue": "#547da7",
7
+ "green": "#588458",
8
+ "red": "#aa5555",
9
+ "yellow": "#9a7326",
10
+ "mediumGray": "#6c6c6c",
11
+ "dimGray": "#767676",
12
+ "lightGray": "#b0b0b0",
13
+ "selectedBg": "#d0d0e0",
14
+ "userMsgBg": "#e8e8e8",
15
+ "toolPendingBg": "#e8e8f0",
16
+ "toolSuccessBg": "#e8f0e8",
17
+ "toolErrorBg": "#f0e8e8",
18
+ "customMsgBg": "#ede7f6"
19
+ },
20
+ "colors": {
21
+ "accent": "teal",
22
+ "border": "blue",
23
+ "borderAccent": "teal",
24
+ "borderMuted": "lightGray",
25
+ "success": "green",
26
+ "error": "red",
27
+ "warning": "yellow",
28
+ "muted": "mediumGray",
29
+ "dim": "dimGray",
30
+ "text": "",
31
+ "thinkingText": "mediumGray",
32
+
33
+ "selectedBg": "selectedBg",
34
+ "userMessageBg": "userMsgBg",
35
+ "userMessageText": "",
36
+ "customMessageBg": "customMsgBg",
37
+ "customMessageText": "",
38
+ "customMessageLabel": "#7e57c2",
39
+ "toolPendingBg": "toolPendingBg",
40
+ "toolSuccessBg": "toolSuccessBg",
41
+ "toolErrorBg": "toolErrorBg",
42
+ "toolTitle": "",
43
+ "toolOutput": "mediumGray",
44
+
45
+ "mdHeading": "yellow",
46
+ "mdLink": "blue",
47
+ "mdLinkUrl": "dimGray",
48
+ "mdCode": "teal",
49
+ "mdCodeBlock": "green",
50
+ "mdCodeBlockBorder": "mediumGray",
51
+ "mdQuote": "mediumGray",
52
+ "mdQuoteBorder": "mediumGray",
53
+ "mdHr": "mediumGray",
54
+ "mdListBullet": "green",
55
+
56
+ "toolDiffAdded": "green",
57
+ "toolDiffRemoved": "red",
58
+ "toolDiffContext": "mediumGray",
59
+
60
+ "syntaxComment": "#008000",
61
+ "syntaxKeyword": "#0000FF",
62
+ "syntaxFunction": "#795E26",
63
+ "syntaxVariable": "#001080",
64
+ "syntaxString": "#A31515",
65
+ "syntaxNumber": "#098658",
66
+ "syntaxType": "#267F99",
67
+ "syntaxOperator": "#000000",
68
+ "syntaxPunctuation": "#000000",
69
+
70
+ "thinkingOff": "lightGray",
71
+ "thinkingMinimal": "#767676",
72
+ "thinkingLow": "blue",
73
+ "thinkingMedium": "teal",
74
+ "thinkingHigh": "#875f87",
75
+ "thinkingXhigh": "#8b008b",
76
+
77
+ "bashMode": "green"
78
+ },
79
+ "export": {
80
+ "pageBg": "#f8f8f8",
81
+ "cardBg": "#ffffff",
82
+ "infoBg": "#fffae6"
83
+ }
84
+ }