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,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Visual direction: Rosé Pine - All natural pine, faux fur and a bit of soho vibes.
|
|
3
|
+
* A warm, cozy theme with soft pinks and purples.
|
|
4
|
+
*
|
|
5
|
+
* Based on the Rosé Pine color palette: https://rosepinetheme.com/
|
|
6
|
+
*/
|
|
7
|
+
export const rosePineTheme = {
|
|
8
|
+
name: "rose-pine",
|
|
9
|
+
gradient: {
|
|
10
|
+
start: "#ebbcba",
|
|
11
|
+
middle: "#f6c177",
|
|
12
|
+
end: "#ebbcba",
|
|
13
|
+
},
|
|
14
|
+
colors: {
|
|
15
|
+
bg: "#191724",
|
|
16
|
+
surface: "#1F1D2E",
|
|
17
|
+
surfaceAlt: "#26233A",
|
|
18
|
+
primary: "#ebbcba",
|
|
19
|
+
success: "#31748f",
|
|
20
|
+
warning: "#f6c177",
|
|
21
|
+
error: "#eb6f92",
|
|
22
|
+
info: "#9ccfd8",
|
|
23
|
+
focused: "#ebbcba",
|
|
24
|
+
selected: "#31748f",
|
|
25
|
+
pending: "#f6c177",
|
|
26
|
+
unansweredHighlight: "#eb6f92",
|
|
27
|
+
text: "#e0def4",
|
|
28
|
+
textDim: "#8884a0", // brightened
|
|
29
|
+
textBold: "#e0def4",
|
|
30
|
+
},
|
|
31
|
+
borders: {
|
|
32
|
+
primary: "#ebbcba",
|
|
33
|
+
warning: "#f6c177",
|
|
34
|
+
error: "#eb6f92",
|
|
35
|
+
neutral: "#26233a",
|
|
36
|
+
},
|
|
37
|
+
components: {
|
|
38
|
+
header: {
|
|
39
|
+
border: "#403d52",
|
|
40
|
+
queueActive: "#ebbcba",
|
|
41
|
+
queueEmpty: "#8884a0",
|
|
42
|
+
queueFlash: "#f6c177",
|
|
43
|
+
pillBg: "#1f1d2e",
|
|
44
|
+
},
|
|
45
|
+
directory: {
|
|
46
|
+
label: "#8884a0",
|
|
47
|
+
path: "#e0def4",
|
|
48
|
+
},
|
|
49
|
+
tabBar: {
|
|
50
|
+
selected: "#e0def4",
|
|
51
|
+
selectedBg: "#1f1d2e",
|
|
52
|
+
default: "#8884a0",
|
|
53
|
+
answered: "#31748f",
|
|
54
|
+
unanswered: "#8884a0",
|
|
55
|
+
divider: "#26233a",
|
|
56
|
+
},
|
|
57
|
+
options: {
|
|
58
|
+
focused: "#31748f",
|
|
59
|
+
focusedBg: "#191724",
|
|
60
|
+
selected: "#ebbcba",
|
|
61
|
+
selectedBg: "#1f1d2e",
|
|
62
|
+
default: "#e0def4",
|
|
63
|
+
description: "#908caa", // subtle - brighter for readability
|
|
64
|
+
hint: "#908caa", // subtle - brighter for readability
|
|
65
|
+
},
|
|
66
|
+
input: {
|
|
67
|
+
border: "#26233a",
|
|
68
|
+
borderFocused: "#ebbcba",
|
|
69
|
+
placeholder: "#8884a0",
|
|
70
|
+
cursor: "#ebbcba",
|
|
71
|
+
cursorDim: "#f6c177",
|
|
72
|
+
},
|
|
73
|
+
review: {
|
|
74
|
+
border: "#26233a",
|
|
75
|
+
confirmBorder: "#ebbcba",
|
|
76
|
+
selectedOption: "#31748f",
|
|
77
|
+
customAnswer: "#f6c177",
|
|
78
|
+
questionId: "#8884a0",
|
|
79
|
+
divider: "#26233a",
|
|
80
|
+
},
|
|
81
|
+
questionDisplay: {
|
|
82
|
+
questionId: "#ebbcba",
|
|
83
|
+
typeIndicator: "#8884a0",
|
|
84
|
+
elapsed: "#8884a0",
|
|
85
|
+
},
|
|
86
|
+
footer: {
|
|
87
|
+
border: "#26233a",
|
|
88
|
+
keyBg: "#1f1d2e",
|
|
89
|
+
keyFg: "#ebbcba",
|
|
90
|
+
action: "#908caa", // subtle - brighter for visibility
|
|
91
|
+
separator: "#26233a",
|
|
92
|
+
},
|
|
93
|
+
toast: {
|
|
94
|
+
success: "#31748f",
|
|
95
|
+
successPillBg: "#191724",
|
|
96
|
+
error: "#eb6f92",
|
|
97
|
+
info: "#9ccfd8",
|
|
98
|
+
warning: "#f6c177",
|
|
99
|
+
border: "#26233a",
|
|
100
|
+
},
|
|
101
|
+
markdown: {
|
|
102
|
+
codeBlockBg: "#191724",
|
|
103
|
+
codeBlockText: "#e0def4",
|
|
104
|
+
codeBlockBorder: "#26233a",
|
|
105
|
+
},
|
|
106
|
+
sessionDots: {
|
|
107
|
+
active: "#ebbcba",
|
|
108
|
+
answered: "#31748f",
|
|
109
|
+
inProgress: "#f6c177",
|
|
110
|
+
untouched: "#8884a0",
|
|
111
|
+
number: "#e0def4",
|
|
112
|
+
activeNumber: "#ebbcba",
|
|
113
|
+
stale: "#f6c177",
|
|
114
|
+
abandoned: "#eb6f92",
|
|
115
|
+
},
|
|
116
|
+
sessionPicker: {
|
|
117
|
+
border: "#ebbcba",
|
|
118
|
+
title: "#ebbcba",
|
|
119
|
+
rowText: "#e0def4",
|
|
120
|
+
rowDim: "#8884a0",
|
|
121
|
+
highlightBg: "#191724",
|
|
122
|
+
highlightFg: "#31748f",
|
|
123
|
+
activeMark: "#ebbcba",
|
|
124
|
+
progress: "#9ccfd8",
|
|
125
|
+
staleIcon: "#f6c177",
|
|
126
|
+
staleText: "#f6c177",
|
|
127
|
+
staleAge: "#f6c177",
|
|
128
|
+
staleSubtitle: "#8884a0",
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
};
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solarized Dark Theme
|
|
3
|
+
* Precision colors for machines and people.
|
|
4
|
+
* https://ethanschoonover.com/solarized/
|
|
5
|
+
*/
|
|
6
|
+
export const solarizedDarkTheme = {
|
|
7
|
+
name: "solarized-dark",
|
|
8
|
+
gradient: {
|
|
9
|
+
start: "#268bd2", // blue
|
|
10
|
+
middle: "#2aa198", // cyan
|
|
11
|
+
end: "#268bd2",
|
|
12
|
+
},
|
|
13
|
+
colors: {
|
|
14
|
+
bg: "#002B36",
|
|
15
|
+
surface: "#073642",
|
|
16
|
+
surfaceAlt: "#0A4050",
|
|
17
|
+
primary: "#268bd2", // blue
|
|
18
|
+
success: "#859900", // green
|
|
19
|
+
warning: "#b58900", // yellow
|
|
20
|
+
error: "#dc322f", // red
|
|
21
|
+
info: "#2aa198", // cyan
|
|
22
|
+
focused: "#268bd2",
|
|
23
|
+
selected: "#859900",
|
|
24
|
+
pending: "#b58900",
|
|
25
|
+
unansweredHighlight: "#dc322f",
|
|
26
|
+
text: "#93A1A1", // base1 - brighter for readability
|
|
27
|
+
textDim: "#7D8E95", // base01 brightened for contrast
|
|
28
|
+
textBold: "#EEE8D5", // base2 - clearly bold
|
|
29
|
+
},
|
|
30
|
+
borders: {
|
|
31
|
+
primary: "#268bd2",
|
|
32
|
+
warning: "#b58900",
|
|
33
|
+
error: "#dc322f",
|
|
34
|
+
neutral: "#073642", // base02
|
|
35
|
+
},
|
|
36
|
+
components: {
|
|
37
|
+
header: {
|
|
38
|
+
border: "#586e75", // base01 - slightly more visible
|
|
39
|
+
queueActive: "#268bd2",
|
|
40
|
+
queueEmpty: "#6c7c83",
|
|
41
|
+
queueFlash: "#2aa198",
|
|
42
|
+
pillBg: "#073642",
|
|
43
|
+
},
|
|
44
|
+
directory: {
|
|
45
|
+
label: "#6c7c83",
|
|
46
|
+
path: "#839496",
|
|
47
|
+
},
|
|
48
|
+
tabBar: {
|
|
49
|
+
selected: "#93a1a1",
|
|
50
|
+
selectedBg: "#073642",
|
|
51
|
+
default: "#6c7c83",
|
|
52
|
+
answered: "#859900",
|
|
53
|
+
unanswered: "#6c7c83",
|
|
54
|
+
divider: "#073642",
|
|
55
|
+
},
|
|
56
|
+
options: {
|
|
57
|
+
focused: "#859900",
|
|
58
|
+
focusedBg: "#073642",
|
|
59
|
+
selected: "#268bd2",
|
|
60
|
+
selectedBg: "#073642",
|
|
61
|
+
default: "#839496",
|
|
62
|
+
description: "#93a1a1", // base1 - lighter for readability
|
|
63
|
+
hint: "#93a1a1", // base1 - lighter for readability
|
|
64
|
+
},
|
|
65
|
+
input: {
|
|
66
|
+
border: "#073642",
|
|
67
|
+
borderFocused: "#268bd2",
|
|
68
|
+
placeholder: "#6c7c83",
|
|
69
|
+
cursor: "#268bd2",
|
|
70
|
+
cursorDim: "#2aa198",
|
|
71
|
+
},
|
|
72
|
+
review: {
|
|
73
|
+
border: "#073642",
|
|
74
|
+
confirmBorder: "#268bd2",
|
|
75
|
+
selectedOption: "#859900",
|
|
76
|
+
customAnswer: "#b58900",
|
|
77
|
+
questionId: "#6c7c83",
|
|
78
|
+
divider: "#073642",
|
|
79
|
+
},
|
|
80
|
+
questionDisplay: {
|
|
81
|
+
questionId: "#268bd2",
|
|
82
|
+
typeIndicator: "#6c7c83",
|
|
83
|
+
elapsed: "#6c7c83",
|
|
84
|
+
},
|
|
85
|
+
footer: {
|
|
86
|
+
border: "#073642",
|
|
87
|
+
keyBg: "#073642",
|
|
88
|
+
keyFg: "#268bd2",
|
|
89
|
+
action: "#839496", // base0 - brighter for visibility
|
|
90
|
+
separator: "#073642",
|
|
91
|
+
},
|
|
92
|
+
toast: {
|
|
93
|
+
success: "#859900",
|
|
94
|
+
successPillBg: "#073642",
|
|
95
|
+
error: "#dc322f",
|
|
96
|
+
info: "#268bd2",
|
|
97
|
+
warning: "#b58900",
|
|
98
|
+
border: "#073642",
|
|
99
|
+
},
|
|
100
|
+
markdown: {
|
|
101
|
+
codeBlockBg: "#002b36",
|
|
102
|
+
codeBlockText: "#839496",
|
|
103
|
+
codeBlockBorder: "#073642",
|
|
104
|
+
},
|
|
105
|
+
sessionDots: {
|
|
106
|
+
active: "#268bd2",
|
|
107
|
+
answered: "#859900",
|
|
108
|
+
inProgress: "#b58900",
|
|
109
|
+
untouched: "#6c7c83",
|
|
110
|
+
number: "#839496",
|
|
111
|
+
activeNumber: "#268bd2",
|
|
112
|
+
stale: "#b58900",
|
|
113
|
+
abandoned: "#dc322f",
|
|
114
|
+
},
|
|
115
|
+
sessionPicker: {
|
|
116
|
+
border: "#268bd2",
|
|
117
|
+
title: "#268bd2",
|
|
118
|
+
rowText: "#839496",
|
|
119
|
+
rowDim: "#6c7c83",
|
|
120
|
+
highlightBg: "#073642",
|
|
121
|
+
highlightFg: "#859900",
|
|
122
|
+
activeMark: "#268bd2",
|
|
123
|
+
progress: "#2aa198",
|
|
124
|
+
staleIcon: "#b58900",
|
|
125
|
+
staleText: "#b58900",
|
|
126
|
+
staleAge: "#b58900",
|
|
127
|
+
staleSubtitle: "#6c7c83",
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
};
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solarized Light Theme
|
|
3
|
+
* Precision colors for machines and people - light variant.
|
|
4
|
+
* https://ethanschoonover.com/solarized/
|
|
5
|
+
*/
|
|
6
|
+
export const solarizedLightTheme = {
|
|
7
|
+
name: "solarized-light",
|
|
8
|
+
gradient: {
|
|
9
|
+
start: "#268bd2", // blue
|
|
10
|
+
middle: "#2aa198", // cyan
|
|
11
|
+
end: "#268bd2",
|
|
12
|
+
},
|
|
13
|
+
colors: {
|
|
14
|
+
bg: "#FDF6E3",
|
|
15
|
+
surface: "#EEE8D5",
|
|
16
|
+
surfaceAlt: "#DDD6C1",
|
|
17
|
+
primary: "#268bd2", // blue
|
|
18
|
+
success: "#859900", // green
|
|
19
|
+
warning: "#b58900", // yellow
|
|
20
|
+
error: "#dc322f", // red
|
|
21
|
+
info: "#2aa198", // cyan
|
|
22
|
+
focused: "#268bd2",
|
|
23
|
+
selected: "#859900",
|
|
24
|
+
pending: "#b58900",
|
|
25
|
+
unansweredHighlight: "#dc322f",
|
|
26
|
+
text: "#657b83", // base00
|
|
27
|
+
textDim: "#8A9899", // base1 darkened for contrast on cream
|
|
28
|
+
textBold: "#586e75", // base01
|
|
29
|
+
},
|
|
30
|
+
borders: {
|
|
31
|
+
primary: "#268bd2",
|
|
32
|
+
warning: "#b58900",
|
|
33
|
+
error: "#dc322f",
|
|
34
|
+
neutral: "#eee8d5", // base2
|
|
35
|
+
},
|
|
36
|
+
components: {
|
|
37
|
+
header: {
|
|
38
|
+
border: "#93a1a1", // base1 - slightly more visible
|
|
39
|
+
queueActive: "#268bd2",
|
|
40
|
+
queueEmpty: "#a3b1b1",
|
|
41
|
+
queueFlash: "#2aa198",
|
|
42
|
+
pillBg: "#eee8d5",
|
|
43
|
+
},
|
|
44
|
+
directory: {
|
|
45
|
+
label: "#8A9899",
|
|
46
|
+
path: "#657b83",
|
|
47
|
+
},
|
|
48
|
+
tabBar: {
|
|
49
|
+
selected: "#586e75",
|
|
50
|
+
selectedBg: "#eee8d5",
|
|
51
|
+
default: "#8A9899",
|
|
52
|
+
answered: "#859900",
|
|
53
|
+
unanswered: "#a3b1b1",
|
|
54
|
+
divider: "#eee8d5",
|
|
55
|
+
},
|
|
56
|
+
options: {
|
|
57
|
+
focused: "#859900",
|
|
58
|
+
focusedBg: "#eee8d5",
|
|
59
|
+
selected: "#268bd2",
|
|
60
|
+
selectedBg: "#eee8d5",
|
|
61
|
+
default: "#657b83",
|
|
62
|
+
description: "#586e75", // base01 - darker for readability
|
|
63
|
+
hint: "#586e75", // base01 - darker for readability
|
|
64
|
+
},
|
|
65
|
+
input: {
|
|
66
|
+
border: "#eee8d5",
|
|
67
|
+
borderFocused: "#268bd2",
|
|
68
|
+
placeholder: "#a3b1b1",
|
|
69
|
+
cursor: "#268bd2",
|
|
70
|
+
cursorDim: "#2aa198",
|
|
71
|
+
},
|
|
72
|
+
review: {
|
|
73
|
+
border: "#eee8d5",
|
|
74
|
+
confirmBorder: "#268bd2",
|
|
75
|
+
selectedOption: "#859900",
|
|
76
|
+
customAnswer: "#b58900",
|
|
77
|
+
questionId: "#a3b1b1",
|
|
78
|
+
divider: "#eee8d5",
|
|
79
|
+
},
|
|
80
|
+
questionDisplay: {
|
|
81
|
+
questionId: "#268bd2",
|
|
82
|
+
typeIndicator: "#a3b1b1",
|
|
83
|
+
elapsed: "#a3b1b1",
|
|
84
|
+
},
|
|
85
|
+
footer: {
|
|
86
|
+
border: "#eee8d5",
|
|
87
|
+
keyBg: "#eee8d5",
|
|
88
|
+
keyFg: "#268bd2",
|
|
89
|
+
action: "#657b83", // base00 - darker for visibility
|
|
90
|
+
separator: "#eee8d5",
|
|
91
|
+
},
|
|
92
|
+
toast: {
|
|
93
|
+
success: "#859900",
|
|
94
|
+
successPillBg: "#eee8d5",
|
|
95
|
+
error: "#dc322f",
|
|
96
|
+
info: "#268bd2",
|
|
97
|
+
warning: "#b58900",
|
|
98
|
+
border: "#eee8d5",
|
|
99
|
+
},
|
|
100
|
+
markdown: {
|
|
101
|
+
codeBlockBg: "#fdf6e3",
|
|
102
|
+
codeBlockText: "#657b83",
|
|
103
|
+
codeBlockBorder: "#eee8d5",
|
|
104
|
+
},
|
|
105
|
+
sessionDots: {
|
|
106
|
+
active: "#268bd2",
|
|
107
|
+
answered: "#859900",
|
|
108
|
+
inProgress: "#b58900",
|
|
109
|
+
untouched: "#a3b1b1",
|
|
110
|
+
number: "#657b83",
|
|
111
|
+
activeNumber: "#268bd2",
|
|
112
|
+
stale: "#b58900",
|
|
113
|
+
abandoned: "#dc322f",
|
|
114
|
+
},
|
|
115
|
+
sessionPicker: {
|
|
116
|
+
border: "#268bd2",
|
|
117
|
+
title: "#268bd2",
|
|
118
|
+
rowText: "#657b83",
|
|
119
|
+
rowDim: "#a3b1b1",
|
|
120
|
+
highlightBg: "#eee8d5",
|
|
121
|
+
highlightFg: "#859900",
|
|
122
|
+
activeMark: "#268bd2",
|
|
123
|
+
progress: "#2aa198",
|
|
124
|
+
staleIcon: "#b58900",
|
|
125
|
+
staleText: "#b58900",
|
|
126
|
+
staleAge: "#b58900",
|
|
127
|
+
staleSubtitle: "#a3b1b1",
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tokyo Night Theme
|
|
3
|
+
* A clean, dark theme celebrating the lights of downtown Tokyo.
|
|
4
|
+
* https://github.com/enkia/tokyo-night-vscode-theme
|
|
5
|
+
*/
|
|
6
|
+
export const tokyoNightTheme = {
|
|
7
|
+
name: "tokyo-night",
|
|
8
|
+
gradient: {
|
|
9
|
+
start: "#7aa2f7", // blue
|
|
10
|
+
middle: "#7dcfff", // cyan
|
|
11
|
+
end: "#7aa2f7",
|
|
12
|
+
},
|
|
13
|
+
colors: {
|
|
14
|
+
// Background layers (OpenCode-style filled surfaces)
|
|
15
|
+
bg: "#1A1B26",
|
|
16
|
+
surface: "#1F2335",
|
|
17
|
+
surfaceAlt: "#292E42",
|
|
18
|
+
primary: "#7aa2f7", // blue
|
|
19
|
+
success: "#9ece6a", // green
|
|
20
|
+
warning: "#e0af68", // yellow
|
|
21
|
+
error: "#f7768e", // red
|
|
22
|
+
info: "#7dcfff", // cyan
|
|
23
|
+
focused: "#7aa2f7",
|
|
24
|
+
selected: "#9ece6a",
|
|
25
|
+
pending: "#e0af68",
|
|
26
|
+
unansweredHighlight: "#f7768e",
|
|
27
|
+
text: "#c0caf5", // foreground
|
|
28
|
+
textDim: "#7F87B5", // comment brightened
|
|
29
|
+
textBold: "#c0caf5",
|
|
30
|
+
},
|
|
31
|
+
borders: {
|
|
32
|
+
primary: "#7aa2f7",
|
|
33
|
+
warning: "#e0af68",
|
|
34
|
+
error: "#f7768e",
|
|
35
|
+
neutral: "#24283b", // storm bg
|
|
36
|
+
},
|
|
37
|
+
components: {
|
|
38
|
+
header: {
|
|
39
|
+
border: "#3b4261", // slightly more visible
|
|
40
|
+
queueActive: "#7aa2f7",
|
|
41
|
+
queueEmpty: "#7078A3",
|
|
42
|
+
queueFlash: "#7dcfff",
|
|
43
|
+
pillBg: "#24283b",
|
|
44
|
+
},
|
|
45
|
+
directory: {
|
|
46
|
+
label: "#7078A3",
|
|
47
|
+
path: "#c0caf5",
|
|
48
|
+
},
|
|
49
|
+
tabBar: {
|
|
50
|
+
selected: "#c0caf5",
|
|
51
|
+
selectedBg: "#24283b",
|
|
52
|
+
default: "#7078A3",
|
|
53
|
+
answered: "#9ece6a",
|
|
54
|
+
unanswered: "#7078A3",
|
|
55
|
+
divider: "#24283b",
|
|
56
|
+
},
|
|
57
|
+
options: {
|
|
58
|
+
focused: "#9ece6a",
|
|
59
|
+
focusedBg: "#24283b",
|
|
60
|
+
selected: "#7aa2f7",
|
|
61
|
+
selectedBg: "#24283b",
|
|
62
|
+
default: "#c0caf5",
|
|
63
|
+
description: "#9aa5ce", // lighter for readability
|
|
64
|
+
hint: "#9aa5ce", // lighter for readability
|
|
65
|
+
},
|
|
66
|
+
input: {
|
|
67
|
+
border: "#24283b",
|
|
68
|
+
borderFocused: "#7aa2f7",
|
|
69
|
+
placeholder: "#7078A3",
|
|
70
|
+
cursor: "#7aa2f7",
|
|
71
|
+
cursorDim: "#7dcfff",
|
|
72
|
+
},
|
|
73
|
+
review: {
|
|
74
|
+
border: "#24283b",
|
|
75
|
+
confirmBorder: "#7aa2f7",
|
|
76
|
+
selectedOption: "#9ece6a",
|
|
77
|
+
customAnswer: "#e0af68",
|
|
78
|
+
questionId: "#7078A3",
|
|
79
|
+
divider: "#24283b",
|
|
80
|
+
},
|
|
81
|
+
questionDisplay: {
|
|
82
|
+
questionId: "#7aa2f7",
|
|
83
|
+
typeIndicator: "#7078A3",
|
|
84
|
+
elapsed: "#7078A3",
|
|
85
|
+
},
|
|
86
|
+
footer: {
|
|
87
|
+
border: "#24283b",
|
|
88
|
+
keyBg: "#24283b",
|
|
89
|
+
keyFg: "#7aa2f7",
|
|
90
|
+
action: "#8E9AB5",
|
|
91
|
+
separator: "#24283b",
|
|
92
|
+
},
|
|
93
|
+
toast: {
|
|
94
|
+
success: "#9ece6a",
|
|
95
|
+
successPillBg: "#1a1b26",
|
|
96
|
+
error: "#f7768e",
|
|
97
|
+
info: "#7aa2f7",
|
|
98
|
+
warning: "#e0af68",
|
|
99
|
+
border: "#24283b",
|
|
100
|
+
},
|
|
101
|
+
markdown: {
|
|
102
|
+
codeBlockBg: "#1a1b26",
|
|
103
|
+
codeBlockText: "#c0caf5",
|
|
104
|
+
codeBlockBorder: "#24283b",
|
|
105
|
+
},
|
|
106
|
+
sessionDots: {
|
|
107
|
+
active: "#7aa2f7",
|
|
108
|
+
answered: "#9ece6a",
|
|
109
|
+
inProgress: "#e0af68",
|
|
110
|
+
untouched: "#7078A3",
|
|
111
|
+
number: "#c0caf5",
|
|
112
|
+
activeNumber: "#7aa2f7",
|
|
113
|
+
stale: "#e0af68",
|
|
114
|
+
abandoned: "#f7768e",
|
|
115
|
+
},
|
|
116
|
+
sessionPicker: {
|
|
117
|
+
border: "#7aa2f7",
|
|
118
|
+
title: "#7aa2f7",
|
|
119
|
+
rowText: "#c0caf5",
|
|
120
|
+
rowDim: "#7078A3",
|
|
121
|
+
highlightBg: "#24283b",
|
|
122
|
+
highlightFg: "#9ece6a",
|
|
123
|
+
activeMark: "#7aa2f7",
|
|
124
|
+
progress: "#7dcfff",
|
|
125
|
+
staleIcon: "#e0af68",
|
|
126
|
+
staleText: "#e0af68",
|
|
127
|
+
staleAge: "#e0af68",
|
|
128
|
+
staleSubtitle: "#7078A3",
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import * as os from "node:os";
|
|
4
|
+
/**
|
|
5
|
+
* Get the config directory for AUQ
|
|
6
|
+
* Respects XDG_CONFIG_HOME on Linux, defaults to ~/.config/auq
|
|
7
|
+
*/
|
|
8
|
+
function getConfigDirectory() {
|
|
9
|
+
const xdgConfig = process.env.XDG_CONFIG_HOME;
|
|
10
|
+
const baseConfig = xdgConfig || path.join(os.homedir(), ".config");
|
|
11
|
+
return path.join(baseConfig, "auq");
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get the config file path
|
|
15
|
+
*/
|
|
16
|
+
function getConfigPath() {
|
|
17
|
+
return path.join(getConfigDirectory(), "config.json");
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Load config from file
|
|
21
|
+
* Returns empty config if file doesn't exist or is invalid
|
|
22
|
+
*/
|
|
23
|
+
export function loadConfig() {
|
|
24
|
+
try {
|
|
25
|
+
const configPath = getConfigPath();
|
|
26
|
+
if (!fs.existsSync(configPath)) {
|
|
27
|
+
return {};
|
|
28
|
+
}
|
|
29
|
+
const content = fs.readFileSync(configPath, "utf-8");
|
|
30
|
+
const data = JSON.parse(content);
|
|
31
|
+
if (typeof data !== "object" || data === null) {
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
return data;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Silently return empty config on any error
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Save config to file
|
|
43
|
+
* Creates the config directory if it doesn't exist
|
|
44
|
+
*/
|
|
45
|
+
export function saveConfig(config) {
|
|
46
|
+
try {
|
|
47
|
+
const configDir = getConfigDirectory();
|
|
48
|
+
const configPath = getConfigPath();
|
|
49
|
+
// Ensure directory exists
|
|
50
|
+
if (!fs.existsSync(configDir)) {
|
|
51
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
// Merge with existing config to preserve other settings
|
|
54
|
+
const existingConfig = loadConfig();
|
|
55
|
+
const mergedConfig = { ...existingConfig, ...config };
|
|
56
|
+
fs.writeFileSync(configPath, JSON.stringify(mergedConfig, null, 2) + "\n");
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Silently ignore save errors - config is optional
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get saved theme from config
|
|
64
|
+
*/
|
|
65
|
+
export function getSavedTheme() {
|
|
66
|
+
const config = loadConfig();
|
|
67
|
+
return config.theme;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Save theme to config
|
|
71
|
+
*/
|
|
72
|
+
export function saveTheme(themeName) {
|
|
73
|
+
saveConfig({ theme: themeName });
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get the config directory path (for display purposes)
|
|
77
|
+
*/
|
|
78
|
+
export function getConfigDirectoryPath() {
|
|
79
|
+
return getConfigDirectory();
|
|
80
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
let cachedResult = null;
|
|
2
|
+
/**
|
|
3
|
+
* Detect whether the system prefers dark or light mode.
|
|
4
|
+
* Uses the COLORFGBG environment variable if available, otherwise defaults to dark.
|
|
5
|
+
* Results are cached for performance.
|
|
6
|
+
*
|
|
7
|
+
* @returns The resolved theme name ("AUQ dark" or "AUQ light")
|
|
8
|
+
*/
|
|
9
|
+
export function detectSystemTheme() {
|
|
10
|
+
if (cachedResult !== null) {
|
|
11
|
+
return cachedResult;
|
|
12
|
+
}
|
|
13
|
+
const colorfgbg = process.env.COLORFGBG;
|
|
14
|
+
if (colorfgbg) {
|
|
15
|
+
const parts = colorfgbg.split(";");
|
|
16
|
+
if (parts.length >= 2) {
|
|
17
|
+
const bg = parseInt(parts[1], 10);
|
|
18
|
+
if (!isNaN(bg)) {
|
|
19
|
+
cachedResult = bg < 8 ? "AUQ dark" : "AUQ light";
|
|
20
|
+
return cachedResult;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
cachedResult = "AUQ dark";
|
|
25
|
+
return cachedResult;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Clear the cached theme detection result.
|
|
29
|
+
* Call this when the system theme may have changed.
|
|
30
|
+
*/
|
|
31
|
+
export function clearDetectionCache() {
|
|
32
|
+
cachedResult = null;
|
|
33
|
+
}
|