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.
- package/README.md +56 -2
- package/dist/bin/auq.js +36 -3
- package/dist/bin/tui-app.js +30 -15
- package/dist/package.json +7 -2
- package/dist/src/__tests__/schema-validation.test.js +61 -1
- package/dist/src/cli/commands/__tests__/fetch-answers.test.js +310 -0
- package/dist/src/cli/commands/__tests__/history.test.js +211 -0
- package/dist/src/cli/commands/answer.js +11 -0
- package/dist/src/cli/commands/config.js +48 -0
- package/dist/src/cli/commands/fetch-answers.js +205 -0
- package/dist/src/cli/commands/history.js +375 -0
- package/dist/src/config/__tests__/ConfigLoader.test.js +38 -0
- package/dist/src/config/defaults.js +1 -0
- package/dist/src/config/types.js +1 -0
- package/dist/src/core/ask-user-questions.js +63 -0
- package/dist/src/i18n/locales/en.js +2 -2
- package/dist/src/server.js +59 -2
- package/dist/src/session/ResponseFormatter.js +79 -2
- package/dist/src/session/SessionManager.js +36 -0
- package/dist/src/session/__tests__/ResponseFormatter.test.js +86 -0
- package/dist/src/session/__tests__/SessionManager.test.js +129 -0
- package/dist/src/shared/schemas.js +8 -0
- package/dist/src/tui/ThemeProvider.js +3 -3
- package/dist/src/tui/components/Header.js +2 -1
- package/dist/src/tui/components/OptionsList.js +1 -1
- package/dist/src/tui/components/SessionPicker.js +1 -1
- package/dist/src/tui/components/StepperView.js +1 -1
- package/dist/src/tui/components/__tests__/ConfirmationDialog.test.js +1 -1
- package/dist/src/tui/components/__tests__/Footer.test.js +1 -1
- package/dist/src/tui/components/__tests__/MarkdownPrompt.test.js +1 -1
- package/dist/src/tui/components/__tests__/ReviewScreen.test.js +1 -1
- package/dist/src/tui/components/__tests__/SessionDots.test.js +1 -1
- package/dist/src/tui/components/__tests__/SessionPicker.test.js +1 -1
- package/dist/src/tui/components/__tests__/StepperView.abandoned.test.js +1 -1
- package/dist/src/tui/components/__tests__/StepperView.keyboard.test.js +1 -1
- package/dist/src/tui/components/__tests__/StepperView.state.test.js +1 -1
- package/dist/src/tui/components/__tests__/WaitingScreen.test.js +1 -1
- package/dist/src/tui/shared/session-events.js +4 -0
- package/dist/src/tui/shared/themes/catppuccin-latte.js +130 -0
- package/dist/src/tui/shared/themes/catppuccin-mocha.js +131 -0
- package/dist/src/tui/shared/themes/dark.js +131 -0
- package/dist/src/tui/shared/themes/dracula.js +131 -0
- package/dist/src/tui/shared/themes/github-dark.js +129 -0
- package/dist/src/tui/shared/themes/github-light.js +129 -0
- package/dist/src/tui/shared/themes/gruvbox-dark.js +130 -0
- package/dist/src/tui/shared/themes/gruvbox-light.js +130 -0
- package/dist/src/tui/shared/themes/index.js +70 -0
- package/dist/src/tui/shared/themes/light.js +130 -0
- package/dist/src/tui/shared/themes/loader.js +111 -0
- package/dist/src/tui/shared/themes/monokai.js +132 -0
- package/dist/src/tui/shared/themes/nord.js +130 -0
- package/dist/src/tui/shared/themes/one-dark.js +131 -0
- package/dist/src/tui/shared/themes/rose-pine.js +131 -0
- package/dist/src/tui/shared/themes/solarized-dark.js +130 -0
- package/dist/src/tui/shared/themes/solarized-light.js +130 -0
- package/dist/src/tui/shared/themes/tokyo-night.js +131 -0
- package/dist/src/tui/shared/themes/types.js +1 -0
- package/dist/src/tui/shared/types.js +1 -0
- package/dist/src/tui/shared/utils/config.js +80 -0
- package/dist/src/tui/shared/utils/detectTheme.js +33 -0
- package/dist/src/tui/shared/utils/index.js +6 -0
- package/dist/src/tui/shared/utils/recommended.js +52 -0
- package/dist/src/tui/shared/utils/relativeTime.js +24 -0
- package/dist/src/tui/shared/utils/sessionSwitching.js +56 -0
- package/dist/src/tui/shared/utils/staleDetection.js +51 -0
- package/dist/src/tui/themes/catppuccin-latte.js +2 -127
- package/dist/src/tui/themes/catppuccin-mocha.js +2 -127
- package/dist/src/tui/themes/dark.js +2 -128
- package/dist/src/tui/themes/dracula.js +2 -127
- package/dist/src/tui/themes/github-dark.js +2 -126
- package/dist/src/tui/themes/github-light.js +2 -126
- package/dist/src/tui/themes/gruvbox-dark.js +2 -127
- package/dist/src/tui/themes/gruvbox-light.js +2 -127
- package/dist/src/tui/themes/index.js +2 -70
- package/dist/src/tui/themes/light.js +2 -127
- package/dist/src/tui/themes/loader.js +2 -111
- package/dist/src/tui/themes/monokai.js +2 -128
- package/dist/src/tui/themes/nord.js +2 -127
- package/dist/src/tui/themes/one-dark.js +2 -127
- package/dist/src/tui/themes/rose-pine.js +2 -128
- package/dist/src/tui/themes/solarized-dark.js +2 -127
- package/dist/src/tui/themes/solarized-light.js +2 -127
- package/dist/src/tui/themes/tokyo-night.js +2 -127
- package/dist/src/tui/themes/types.js +2 -1
- package/dist/src/tui/types.js +1 -1
- package/dist/src/tui/utils/__tests__/recommended.test.js +1 -1
- package/dist/src/tui/utils/__tests__/relativeTime.test.js +1 -1
- package/dist/src/tui/utils/__tests__/sessionSwitching.test.js +1 -1
- package/dist/src/tui/utils/__tests__/staleDetection.test.js +1 -1
- package/dist/src/tui/utils/config.js +1 -80
- package/dist/src/tui/utils/detectTheme.js +1 -22
- package/dist/src/tui/utils/recommended.js +1 -52
- package/dist/src/tui/utils/relativeTime.js +1 -24
- package/dist/src/tui/utils/sessionSwitching.js +1 -56
- package/dist/src/tui/utils/staleDetection.js +1 -51
- 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
|
+
};
|