auq-mcp-server 2.6.3 → 2.7.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.
Files changed (96) hide show
  1. package/README.md +56 -2
  2. package/dist/bin/auq.js +36 -3
  3. package/dist/bin/tui-app.js +30 -15
  4. package/dist/package.json +7 -2
  5. package/dist/src/__tests__/schema-validation.test.js +61 -1
  6. package/dist/src/cli/commands/__tests__/fetch-answers.test.js +310 -0
  7. package/dist/src/cli/commands/__tests__/history.test.js +211 -0
  8. package/dist/src/cli/commands/answer.js +11 -0
  9. package/dist/src/cli/commands/config.js +48 -0
  10. package/dist/src/cli/commands/fetch-answers.js +205 -0
  11. package/dist/src/cli/commands/history.js +375 -0
  12. package/dist/src/config/__tests__/ConfigLoader.test.js +38 -0
  13. package/dist/src/config/defaults.js +1 -0
  14. package/dist/src/config/types.js +1 -0
  15. package/dist/src/core/ask-user-questions.js +63 -0
  16. package/dist/src/i18n/locales/en.js +2 -2
  17. package/dist/src/server.js +59 -2
  18. package/dist/src/session/ResponseFormatter.js +79 -2
  19. package/dist/src/session/SessionManager.js +36 -0
  20. package/dist/src/session/__tests__/ResponseFormatter.test.js +86 -0
  21. package/dist/src/session/__tests__/SessionManager.test.js +129 -0
  22. package/dist/src/shared/schemas.js +8 -0
  23. package/dist/src/tui/ThemeProvider.js +3 -3
  24. package/dist/src/tui/components/Header.js +2 -1
  25. package/dist/src/tui/components/OptionsList.js +1 -1
  26. package/dist/src/tui/components/SessionPicker.js +1 -1
  27. package/dist/src/tui/components/StepperView.js +1 -1
  28. package/dist/src/tui/components/__tests__/ConfirmationDialog.test.js +1 -1
  29. package/dist/src/tui/components/__tests__/Footer.test.js +1 -1
  30. package/dist/src/tui/components/__tests__/MarkdownPrompt.test.js +1 -1
  31. package/dist/src/tui/components/__tests__/ReviewScreen.test.js +1 -1
  32. package/dist/src/tui/components/__tests__/SessionDots.test.js +1 -1
  33. package/dist/src/tui/components/__tests__/SessionPicker.test.js +1 -1
  34. package/dist/src/tui/components/__tests__/StepperView.abandoned.test.js +1 -1
  35. package/dist/src/tui/components/__tests__/StepperView.keyboard.test.js +1 -1
  36. package/dist/src/tui/components/__tests__/StepperView.state.test.js +1 -1
  37. package/dist/src/tui/components/__tests__/WaitingScreen.test.js +1 -1
  38. package/dist/src/tui/shared/session-events.js +4 -0
  39. package/dist/src/tui/shared/themes/catppuccin-latte.js +130 -0
  40. package/dist/src/tui/shared/themes/catppuccin-mocha.js +131 -0
  41. package/dist/src/tui/shared/themes/dark.js +131 -0
  42. package/dist/src/tui/shared/themes/dracula.js +131 -0
  43. package/dist/src/tui/shared/themes/github-dark.js +129 -0
  44. package/dist/src/tui/shared/themes/github-light.js +129 -0
  45. package/dist/src/tui/shared/themes/gruvbox-dark.js +130 -0
  46. package/dist/src/tui/shared/themes/gruvbox-light.js +130 -0
  47. package/dist/src/tui/shared/themes/index.js +70 -0
  48. package/dist/src/tui/shared/themes/light.js +130 -0
  49. package/dist/src/tui/shared/themes/loader.js +111 -0
  50. package/dist/src/tui/shared/themes/monokai.js +132 -0
  51. package/dist/src/tui/shared/themes/nord.js +130 -0
  52. package/dist/src/tui/shared/themes/one-dark.js +131 -0
  53. package/dist/src/tui/shared/themes/rose-pine.js +131 -0
  54. package/dist/src/tui/shared/themes/solarized-dark.js +130 -0
  55. package/dist/src/tui/shared/themes/solarized-light.js +130 -0
  56. package/dist/src/tui/shared/themes/tokyo-night.js +131 -0
  57. package/dist/src/tui/shared/themes/types.js +1 -0
  58. package/dist/src/tui/shared/types.js +1 -0
  59. package/dist/src/tui/shared/utils/config.js +80 -0
  60. package/dist/src/tui/shared/utils/detectTheme.js +33 -0
  61. package/dist/src/tui/shared/utils/index.js +6 -0
  62. package/dist/src/tui/shared/utils/recommended.js +52 -0
  63. package/dist/src/tui/shared/utils/relativeTime.js +24 -0
  64. package/dist/src/tui/shared/utils/sessionSwitching.js +56 -0
  65. package/dist/src/tui/shared/utils/staleDetection.js +51 -0
  66. package/dist/src/tui/themes/catppuccin-latte.js +2 -127
  67. package/dist/src/tui/themes/catppuccin-mocha.js +2 -127
  68. package/dist/src/tui/themes/dark.js +2 -128
  69. package/dist/src/tui/themes/dracula.js +2 -127
  70. package/dist/src/tui/themes/github-dark.js +2 -126
  71. package/dist/src/tui/themes/github-light.js +2 -126
  72. package/dist/src/tui/themes/gruvbox-dark.js +2 -127
  73. package/dist/src/tui/themes/gruvbox-light.js +2 -127
  74. package/dist/src/tui/themes/index.js +2 -70
  75. package/dist/src/tui/themes/light.js +2 -127
  76. package/dist/src/tui/themes/loader.js +2 -111
  77. package/dist/src/tui/themes/monokai.js +2 -128
  78. package/dist/src/tui/themes/nord.js +2 -127
  79. package/dist/src/tui/themes/one-dark.js +2 -127
  80. package/dist/src/tui/themes/rose-pine.js +2 -128
  81. package/dist/src/tui/themes/solarized-dark.js +2 -127
  82. package/dist/src/tui/themes/solarized-light.js +2 -127
  83. package/dist/src/tui/themes/tokyo-night.js +2 -127
  84. package/dist/src/tui/themes/types.js +2 -1
  85. package/dist/src/tui/types.js +1 -1
  86. package/dist/src/tui/utils/__tests__/recommended.test.js +1 -1
  87. package/dist/src/tui/utils/__tests__/relativeTime.test.js +1 -1
  88. package/dist/src/tui/utils/__tests__/sessionSwitching.test.js +1 -1
  89. package/dist/src/tui/utils/__tests__/staleDetection.test.js +1 -1
  90. package/dist/src/tui/utils/config.js +1 -80
  91. package/dist/src/tui/utils/detectTheme.js +1 -22
  92. package/dist/src/tui/utils/recommended.js +1 -52
  93. package/dist/src/tui/utils/relativeTime.js +1 -24
  94. package/dist/src/tui/utils/sessionSwitching.js +1 -56
  95. package/dist/src/tui/utils/staleDetection.js +1 -51
  96. package/package.json +7 -2
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Light theme variant.
3
+ * Maintains the "electric-cyan" identity but optimized for light backgrounds.
4
+ * Uses darker grays for text and deeper saturations for accents to ensure readability.
5
+ */
6
+ export const lightTheme = {
7
+ name: "AUQ light",
8
+ gradient: {
9
+ start: "#007EA7", // Darker cyan
10
+ middle: "#46D9FF", // Electric cyan (original)
11
+ end: "#007EA7",
12
+ },
13
+ colors: {
14
+ bg: "#FFFFFF",
15
+ surface: "#F6F8FA",
16
+ surfaceAlt: "#EBF0F5",
17
+ primary: "#007EA7", // Deep cyan
18
+ success: "#2DA44E", // GitHub green - readable on white
19
+ warning: "#B07D00", // Dark amber
20
+ error: "#CF222E", // Red
21
+ info: "#007EA7",
22
+ focused: "#007EA7",
23
+ selected: "#2DA44E",
24
+ pending: "#B07D00",
25
+ unansweredHighlight: "#CF222E",
26
+ text: "#24292F", // Graphite
27
+ textDim: "#6E7781", // Slate gray - softened
28
+ textBold: "#050505",
29
+ },
30
+ borders: {
31
+ primary: "#007EA7",
32
+ warning: "#B07D00",
33
+ error: "#CF222E",
34
+ neutral: "#D0D7DE", // Light gray border
35
+ },
36
+ components: {
37
+ header: {
38
+ border: "#A0A8B0", // slightly more visible
39
+ queueActive: "#007EA7",
40
+ queueEmpty: "#6E7781",
41
+ queueFlash: "#E0F7FA", // Light cyan flash
42
+ pillBg: "#E0F7FA", // Light cyan bg
43
+ },
44
+ directory: {
45
+ label: "#6E7781",
46
+ path: "#24292F",
47
+ },
48
+ tabBar: {
49
+ selected: "#24292F",
50
+ selectedBg: "#F0F0F0", // Very light gray
51
+ default: "#6E7781",
52
+ answered: "#2DA44E",
53
+ unanswered: "#6E7781",
54
+ divider: "#D0D7DE",
55
+ },
56
+ options: {
57
+ focused: "#2DA44E", // Green cursor
58
+ focusedBg: "#E6F9EE", // Light green bg
59
+ selected: "#007EA7", // Cyan selected
60
+ selectedBg: "#E0F7FA", // Light cyan bg
61
+ default: "#24292F",
62
+ description: "#57606A",
63
+ hint: "#57606A",
64
+ },
65
+ input: {
66
+ border: "#D0D7DE",
67
+ borderFocused: "#007EA7",
68
+ placeholder: "#6E7781",
69
+ cursor: "#007EA7",
70
+ cursorDim: "#B8F2FF", // Lighter cyan for cursor dim
71
+ },
72
+ review: {
73
+ border: "#D0D7DE",
74
+ confirmBorder: "#007EA7",
75
+ selectedOption: "#2DA44E",
76
+ customAnswer: "#B07D00",
77
+ questionId: "#6E7781",
78
+ divider: "#D0D7DE",
79
+ },
80
+ questionDisplay: {
81
+ questionId: "#007EA7",
82
+ typeIndicator: "#6E7781",
83
+ elapsed: "#6E7781",
84
+ },
85
+ footer: {
86
+ border: "#D0D7DE",
87
+ keyBg: "#F6F8FA", // Light key cap
88
+ keyFg: "#007EA7",
89
+ action: "#57606A",
90
+ separator: "#D0D7DE",
91
+ },
92
+ toast: {
93
+ success: "#2DA44E",
94
+ successPillBg: "#E6F9EE",
95
+ error: "#CF222E",
96
+ info: "#007EA7",
97
+ warning: "#B07D00",
98
+ border: "#D0D7DE",
99
+ },
100
+ markdown: {
101
+ codeBlockBg: "#F6F8FA",
102
+ codeBlockText: "#24292F",
103
+ codeBlockBorder: "#D0D7DE",
104
+ },
105
+ sessionDots: {
106
+ active: "#007EA7",
107
+ answered: "#2DA44E",
108
+ inProgress: "#B07D00",
109
+ untouched: "#6E7781",
110
+ number: "#24292F",
111
+ activeNumber: "#007EA7",
112
+ stale: "#B07D00",
113
+ abandoned: "#CF222E",
114
+ },
115
+ sessionPicker: {
116
+ border: "#007EA7",
117
+ title: "#007EA7",
118
+ rowText: "#24292F",
119
+ rowDim: "#6E7781",
120
+ highlightBg: "#E6F9EE",
121
+ highlightFg: "#2DA44E",
122
+ activeMark: "#007EA7",
123
+ progress: "#007EA7",
124
+ staleIcon: "#B07D00",
125
+ staleText: "#B07D00",
126
+ staleAge: "#B07D00",
127
+ staleSubtitle: "#6E7781",
128
+ },
129
+ },
130
+ };
@@ -0,0 +1,111 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import * as os from "node:os";
4
+ import { darkTheme } from "./dark.js";
5
+ import { registerTheme } from "./index.js";
6
+ /**
7
+ * Get the config directory for AUQ themes
8
+ * Respects XDG_CONFIG_HOME on Linux, defaults to ~/.config/auq/themes
9
+ */
10
+ function getThemesDirectory() {
11
+ const xdgConfig = process.env.XDG_CONFIG_HOME;
12
+ const baseConfig = xdgConfig || path.join(os.homedir(), ".config");
13
+ return path.join(baseConfig, "auq", "themes");
14
+ }
15
+ /**
16
+ * Deep merge two objects, with source overriding target
17
+ */
18
+ function deepMerge(target, source) {
19
+ const result = { ...target };
20
+ for (const key of Object.keys(source)) {
21
+ const sourceValue = source[key];
22
+ const targetValue = target[key];
23
+ if (sourceValue !== undefined &&
24
+ typeof sourceValue === "object" &&
25
+ sourceValue !== null &&
26
+ !Array.isArray(sourceValue) &&
27
+ typeof targetValue === "object" &&
28
+ targetValue !== null) {
29
+ // Recursively merge objects
30
+ result[key] = deepMerge(targetValue, sourceValue);
31
+ }
32
+ else if (sourceValue !== undefined) {
33
+ result[key] = sourceValue;
34
+ }
35
+ }
36
+ return result;
37
+ }
38
+ /**
39
+ * Validate a theme file against basic structure requirements
40
+ */
41
+ function validateThemeFile(data) {
42
+ if (typeof data !== "object" || data === null) {
43
+ return false;
44
+ }
45
+ const obj = data;
46
+ // Name is required
47
+ if (typeof obj.name !== "string" || obj.name.length === 0) {
48
+ return false;
49
+ }
50
+ return true;
51
+ }
52
+ /**
53
+ * Load a single theme file
54
+ * Returns the theme if valid, or null if invalid/missing
55
+ */
56
+ export function loadThemeFile(filePath) {
57
+ try {
58
+ const content = fs.readFileSync(filePath, "utf-8");
59
+ const data = JSON.parse(content);
60
+ if (!validateThemeFile(data)) {
61
+ console.error(`[AUQ] Invalid theme file: ${filePath} - missing required 'name' field`);
62
+ return null;
63
+ }
64
+ // Merge with dark theme as base
65
+ const mergedTheme = deepMerge(darkTheme, data);
66
+ // Override the name from the file
67
+ return {
68
+ ...mergedTheme,
69
+ name: data.name,
70
+ };
71
+ }
72
+ catch (error) {
73
+ if (error.code !== "ENOENT") {
74
+ console.error(`[AUQ] Failed to load theme file ${filePath}:`, error);
75
+ }
76
+ return null;
77
+ }
78
+ }
79
+ /**
80
+ * Discover and load all custom themes from the themes directory
81
+ * Registers them in the theme registry
82
+ */
83
+ export function loadCustomThemes() {
84
+ const themesDir = getThemesDirectory();
85
+ // Check if directory exists
86
+ if (!fs.existsSync(themesDir)) {
87
+ return; // No custom themes directory, nothing to load
88
+ }
89
+ try {
90
+ const files = fs.readdirSync(themesDir);
91
+ for (const file of files) {
92
+ if (!file.endsWith(".theme.json")) {
93
+ continue;
94
+ }
95
+ const filePath = path.join(themesDir, file);
96
+ const theme = loadThemeFile(filePath);
97
+ if (theme) {
98
+ registerTheme(theme.name, theme);
99
+ }
100
+ }
101
+ }
102
+ catch (error) {
103
+ console.error(`[AUQ] Failed to read themes directory:`, error);
104
+ }
105
+ }
106
+ /**
107
+ * Get the themes directory path (for display purposes)
108
+ */
109
+ export function getThemesDirectoryPath() {
110
+ return getThemesDirectory();
111
+ }
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Visual direction: classic Monokai dark theme.
3
+ * Vibrant syntax highlighting colors on a dark background.
4
+ *
5
+ * Based on the popular Monokai color scheme.
6
+ */
7
+ export const monokaiTheme = {
8
+ name: "monokai",
9
+ gradient: {
10
+ start: "#66D9EF",
11
+ middle: "#F8F8F2",
12
+ end: "#66D9EF",
13
+ },
14
+ colors: {
15
+ // Background layers (OpenCode-style filled surfaces)
16
+ bg: "#1E1F1A",
17
+ surface: "#272822",
18
+ surfaceAlt: "#383830",
19
+ primary: "#66D9EF",
20
+ success: "#A6E22E",
21
+ warning: "#E6DB74",
22
+ error: "#F92672",
23
+ info: "#66D9EF",
24
+ focused: "#66D9EF",
25
+ selected: "#A6E22E",
26
+ pending: "#E6DB74",
27
+ unansweredHighlight: "#f92672",
28
+ text: "#F8F8F2",
29
+ textDim: "#A09B88", // brightened
30
+ textBold: "#F8F8F2",
31
+ },
32
+ borders: {
33
+ primary: "#66D9EF",
34
+ warning: "#E6DB74",
35
+ error: "#F92672",
36
+ neutral: "#49483E",
37
+ },
38
+ components: {
39
+ header: {
40
+ border: "#5C5B50", // was identical to neutral, now brighter
41
+ queueActive: "#66D9EF",
42
+ queueEmpty: "#908B78",
43
+ queueFlash: "#F8F8F2",
44
+ pillBg: "#3E3D32",
45
+ },
46
+ directory: {
47
+ label: "#908B78",
48
+ path: "#F8F8F2",
49
+ },
50
+ tabBar: {
51
+ selected: "#F8F8F2",
52
+ selectedBg: "#3E3D32",
53
+ default: "#908B78",
54
+ answered: "#A6E22E",
55
+ unanswered: "#908B78",
56
+ divider: "#49483E",
57
+ },
58
+ options: {
59
+ focused: "#A6E22E",
60
+ focusedBg: "#383830",
61
+ selected: "#66D9EF",
62
+ selectedBg: "#3E3D32",
63
+ default: "#F8F8F2",
64
+ description: "#A0998A",
65
+ hint: "#A0998A",
66
+ },
67
+ input: {
68
+ border: "#49483E",
69
+ borderFocused: "#66D9EF",
70
+ placeholder: "#908B78",
71
+ cursor: "#66D9EF",
72
+ cursorDim: "#F8F8F2",
73
+ },
74
+ review: {
75
+ border: "#49483E",
76
+ confirmBorder: "#66D9EF",
77
+ selectedOption: "#A6E22E",
78
+ customAnswer: "#E6DB74",
79
+ questionId: "#908B78",
80
+ divider: "#49483E",
81
+ },
82
+ questionDisplay: {
83
+ questionId: "#66D9EF",
84
+ typeIndicator: "#908B78",
85
+ elapsed: "#908B78",
86
+ },
87
+ footer: {
88
+ border: "#49483E",
89
+ keyBg: "#3E3D32",
90
+ keyFg: "#66D9EF",
91
+ action: "#A0998A",
92
+ separator: "#49483E",
93
+ },
94
+ toast: {
95
+ success: "#A6E22E",
96
+ successPillBg: "#272822",
97
+ error: "#F92672",
98
+ info: "#66D9EF",
99
+ warning: "#E6DB74",
100
+ border: "#49483E",
101
+ },
102
+ markdown: {
103
+ codeBlockBg: "#272822",
104
+ codeBlockText: "#F8F8F2",
105
+ codeBlockBorder: "#49483E",
106
+ },
107
+ sessionDots: {
108
+ active: "#66D9EF",
109
+ answered: "#A6E22E",
110
+ inProgress: "#E6DB74",
111
+ untouched: "#908B78",
112
+ number: "#F8F8F2",
113
+ activeNumber: "#66D9EF",
114
+ stale: "#E6DB74",
115
+ abandoned: "#F92672",
116
+ },
117
+ sessionPicker: {
118
+ border: "#66D9EF",
119
+ title: "#66D9EF",
120
+ rowText: "#F8F8F2",
121
+ rowDim: "#908B78",
122
+ highlightBg: "#383830",
123
+ highlightFg: "#A6E22E",
124
+ activeMark: "#66D9EF",
125
+ progress: "#66D9EF",
126
+ staleIcon: "#E6DB74",
127
+ staleText: "#E6DB74",
128
+ staleAge: "#E6DB74",
129
+ staleSubtitle: "#908B78",
130
+ },
131
+ },
132
+ };
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Nord Theme
3
+ * An arctic, north-bluish color palette.
4
+ * https://www.nordtheme.com/
5
+ */
6
+ export const nordTheme = {
7
+ name: "nord",
8
+ gradient: {
9
+ start: "#88c0d0", // nord8 - frost
10
+ middle: "#8fbcbb", // nord7 - teal
11
+ end: "#88c0d0",
12
+ },
13
+ colors: {
14
+ bg: "#2E3440",
15
+ surface: "#3B4252",
16
+ surfaceAlt: "#434C5E",
17
+ primary: "#88c0d0", // nord8 - frost
18
+ success: "#a3be8c", // nord14 - aurora green
19
+ warning: "#ebcb8b", // nord13 - aurora yellow
20
+ error: "#bf616a", // nord11 - aurora red
21
+ info: "#81a1c1", // nord9 - frost blue
22
+ focused: "#88c0d0", // nord8
23
+ selected: "#a3be8c", // nord14
24
+ pending: "#ebcb8b", // nord13
25
+ unansweredHighlight: "#bf616a", // nord11 aurora red
26
+ text: "#eceff4", // nord6 - snow storm
27
+ textDim: "#616E88", // nord3 brightened
28
+ textBold: "#eceff4", // nord6
29
+ },
30
+ borders: {
31
+ primary: "#88c0d0", // nord8
32
+ warning: "#ebcb8b", // nord13
33
+ error: "#bf616a", // nord11
34
+ neutral: "#3b4252", // nord1
35
+ },
36
+ components: {
37
+ header: {
38
+ border: "#4c566a", // nord3 - slightly more visible
39
+ queueActive: "#88c0d0", // nord8
40
+ queueEmpty: "#616E88", // nord3 brightened
41
+ queueFlash: "#8fbcbb", // nord7
42
+ pillBg: "#3b4252", // nord1
43
+ },
44
+ directory: {
45
+ label: "#616E88", // nord3 brightened
46
+ path: "#eceff4", // nord6
47
+ },
48
+ tabBar: {
49
+ selected: "#eceff4", // nord6
50
+ selectedBg: "#3b4252", // nord1
51
+ default: "#616E88", // nord3 brightened
52
+ answered: "#a3be8c", // nord14
53
+ unanswered: "#616E88", // nord3 brightened
54
+ divider: "#3b4252", // nord1
55
+ },
56
+ options: {
57
+ focused: "#a3be8c", // nord14 - green cursor
58
+ focusedBg: "#3b4252", // nord1
59
+ selected: "#88c0d0", // nord8 - cyan selected
60
+ selectedBg: "#3b4252", // nord1
61
+ default: "#eceff4", // nord6
62
+ description: "#d8dee9", // nord4 - lighter for readability
63
+ hint: "#d8dee9", // nord4 - lighter for readability
64
+ },
65
+ input: {
66
+ border: "#3b4252", // nord1
67
+ borderFocused: "#88c0d0", // nord8
68
+ placeholder: "#616E88", // nord3 brightened
69
+ cursor: "#88c0d0", // nord8
70
+ cursorDim: "#5e81ac", // nord10
71
+ },
72
+ review: {
73
+ border: "#3b4252", // nord1
74
+ confirmBorder: "#88c0d0", // nord8
75
+ selectedOption: "#a3be8c", // nord14
76
+ customAnswer: "#ebcb8b", // nord13
77
+ questionId: "#616E88", // nord3 brightened
78
+ divider: "#3b4252", // nord1
79
+ },
80
+ questionDisplay: {
81
+ questionId: "#88c0d0", // nord8
82
+ typeIndicator: "#616E88", // nord3 brightened
83
+ elapsed: "#616E88", // nord3 brightened
84
+ },
85
+ footer: {
86
+ border: "#3b4252", // nord1
87
+ keyBg: "#3b4252", // nord1
88
+ keyFg: "#88c0d0", // nord8
89
+ action: "#7B88A1", // nord3 brightened
90
+ separator: "#3b4252", // nord1
91
+ },
92
+ toast: {
93
+ success: "#a3be8c", // nord14
94
+ successPillBg: "#3b4252", // nord1
95
+ error: "#bf616a", // nord11
96
+ info: "#88c0d0", // nord8
97
+ warning: "#ebcb8b",
98
+ border: "#3b4252", // nord1
99
+ },
100
+ markdown: {
101
+ codeBlockBg: "#2e3440",
102
+ codeBlockText: "#eceff4",
103
+ codeBlockBorder: "#3b4252",
104
+ },
105
+ sessionDots: {
106
+ active: "#88c0d0",
107
+ answered: "#a3be8c",
108
+ inProgress: "#ebcb8b",
109
+ untouched: "#616E88",
110
+ number: "#eceff4",
111
+ activeNumber: "#88c0d0",
112
+ stale: "#ebcb8b",
113
+ abandoned: "#bf616a",
114
+ },
115
+ sessionPicker: {
116
+ border: "#88c0d0",
117
+ title: "#88c0d0",
118
+ rowText: "#eceff4",
119
+ rowDim: "#616E88",
120
+ highlightBg: "#3b4252",
121
+ highlightFg: "#a3be8c",
122
+ activeMark: "#88c0d0",
123
+ progress: "#81a1c1",
124
+ staleIcon: "#ebcb8b",
125
+ staleText: "#ebcb8b",
126
+ staleAge: "#ebcb8b",
127
+ staleSubtitle: "#616E88",
128
+ },
129
+ },
130
+ };
@@ -0,0 +1,131 @@
1
+ /**
2
+ * One Dark Theme
3
+ * The iconic default theme from the Atom editor.
4
+ * https://github.com/atom/atom/tree/master/packages/one-dark-syntax
5
+ */
6
+ export const oneDarkTheme = {
7
+ name: "one-dark",
8
+ gradient: {
9
+ start: "#61afef", // blue
10
+ middle: "#56b6c2", // cyan
11
+ end: "#61afef",
12
+ },
13
+ colors: {
14
+ // Background layers (OpenCode-style filled surfaces)
15
+ bg: "#1B1D23",
16
+ surface: "#21252B",
17
+ surfaceAlt: "#2C313A",
18
+ primary: "#61afef", // blue
19
+ success: "#98c379", // green
20
+ warning: "#d19a66", // yellow/orange
21
+ error: "#e06c75", // red
22
+ info: "#56b6c2", // cyan
23
+ focused: "#61afef",
24
+ selected: "#98c379",
25
+ pending: "#d19a66",
26
+ unansweredHighlight: "#e06c75",
27
+ text: "#abb2bf", // foreground
28
+ textDim: "#838A97", // comment gray brightened
29
+ textBold: "#d7dae0", // lighter
30
+ },
31
+ borders: {
32
+ primary: "#61afef",
33
+ warning: "#d19a66",
34
+ error: "#e06c75",
35
+ neutral: "#3e4451", // gutter
36
+ },
37
+ components: {
38
+ header: {
39
+ border: "#4b5263", // slightly more visible
40
+ queueActive: "#61afef",
41
+ queueEmpty: "#767D8A",
42
+ queueFlash: "#56b6c2",
43
+ pillBg: "#3e4451",
44
+ },
45
+ directory: {
46
+ label: "#767D8A",
47
+ path: "#abb2bf",
48
+ },
49
+ tabBar: {
50
+ selected: "#abb2bf",
51
+ selectedBg: "#3e4451",
52
+ default: "#767D8A",
53
+ answered: "#98c379",
54
+ unanswered: "#767D8A",
55
+ divider: "#3e4451",
56
+ },
57
+ options: {
58
+ focused: "#98c379",
59
+ focusedBg: "#3e4451",
60
+ selected: "#61afef",
61
+ selectedBg: "#3e4451",
62
+ default: "#abb2bf",
63
+ description: "#848b98", // lighter for readability
64
+ hint: "#848b98", // lighter for readability
65
+ },
66
+ input: {
67
+ border: "#3e4451",
68
+ borderFocused: "#61afef",
69
+ placeholder: "#767D8A",
70
+ cursor: "#61afef",
71
+ cursorDim: "#56b6c2",
72
+ },
73
+ review: {
74
+ border: "#3e4451",
75
+ confirmBorder: "#61afef",
76
+ selectedOption: "#98c379",
77
+ customAnswer: "#d19a66",
78
+ questionId: "#767D8A",
79
+ divider: "#3e4451",
80
+ },
81
+ questionDisplay: {
82
+ questionId: "#61afef",
83
+ typeIndicator: "#767D8A",
84
+ elapsed: "#767D8A",
85
+ },
86
+ footer: {
87
+ border: "#3e4451",
88
+ keyBg: "#3e4451",
89
+ keyFg: "#61afef",
90
+ action: "#949BAA",
91
+ separator: "#3e4451",
92
+ },
93
+ toast: {
94
+ success: "#98c379",
95
+ successPillBg: "#282c34",
96
+ error: "#e06c75",
97
+ info: "#61afef",
98
+ warning: "#d19a66",
99
+ border: "#3e4451",
100
+ },
101
+ markdown: {
102
+ codeBlockBg: "#21252b",
103
+ codeBlockText: "#abb2bf",
104
+ codeBlockBorder: "#3e4451",
105
+ },
106
+ sessionDots: {
107
+ active: "#61afef",
108
+ answered: "#98c379",
109
+ inProgress: "#d19a66",
110
+ untouched: "#767D8A",
111
+ number: "#abb2bf",
112
+ activeNumber: "#61afef",
113
+ stale: "#d19a66",
114
+ abandoned: "#e06c75",
115
+ },
116
+ sessionPicker: {
117
+ border: "#61afef",
118
+ title: "#61afef",
119
+ rowText: "#abb2bf",
120
+ rowDim: "#767D8A",
121
+ highlightBg: "#3e4451",
122
+ highlightFg: "#98c379",
123
+ activeMark: "#61afef",
124
+ progress: "#56b6c2",
125
+ staleIcon: "#d19a66",
126
+ staleText: "#d19a66",
127
+ staleAge: "#d19a66",
128
+ staleSubtitle: "#767D8A",
129
+ },
130
+ },
131
+ };