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
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import { cleanup, render } from "ink-testing-library";
3
3
  import { afterEach, describe, expect, it, vi } from "vitest";
4
4
  import { ThemeContext } from "../../ThemeContext.js";
5
- import { darkTheme } from "../../themes/dark.js";
5
+ import { darkTheme } from "../../shared/themes/dark.js";
6
6
  import { MarkdownPrompt } from "../MarkdownPrompt.js";
7
7
  const mockThemeValue = {
8
8
  theme: darkTheme,
@@ -17,7 +17,7 @@ vi.mock("ink", async () => {
17
17
  };
18
18
  });
19
19
  import { ThemeContext } from "../../ThemeContext.js";
20
- import { darkTheme } from "../../themes/dark.js";
20
+ import { darkTheme } from "../../shared/themes/dark.js";
21
21
  import { ReviewScreen } from "../ReviewScreen.js";
22
22
  const mockThemeValue = {
23
23
  theme: darkTheme,
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import { cleanup, render } from "ink-testing-library";
3
3
  import { afterEach, describe, expect, it, vi } from "vitest";
4
4
  import { ThemeContext } from "../../ThemeContext.js";
5
- import { darkTheme } from "../../themes/dark.js";
5
+ import { darkTheme } from "../../shared/themes/dark.js";
6
6
  import { SessionDots } from "../SessionDots.js";
7
7
  const mockThemeValue = {
8
8
  theme: darkTheme,
@@ -16,7 +16,7 @@ vi.mock("ink", async () => {
16
16
  };
17
17
  });
18
18
  import { ThemeContext } from "../../ThemeContext.js";
19
- import { darkTheme } from "../../themes/dark.js";
19
+ import { darkTheme } from "../../shared/themes/dark.js";
20
20
  import { SessionPicker, } from "../SessionPicker.js";
21
21
  const mockThemeValue = {
22
22
  theme: darkTheme,
@@ -3,7 +3,7 @@ import { cleanup, render } from "ink-testing-library";
3
3
  import { afterEach, describe, expect, it, vi } from "vitest";
4
4
  import { ConfigProvider } from "../../ConfigContext.js";
5
5
  import { ThemeContext } from "../../ThemeContext.js";
6
- import { darkTheme } from "../../themes/dark.js";
6
+ import { darkTheme } from "../../shared/themes/dark.js";
7
7
  import { StepperView } from "../StepperView.js";
8
8
  const mockThemeValue = {
9
9
  theme: darkTheme,
@@ -3,7 +3,7 @@ import { cleanup, render } from "ink-testing-library";
3
3
  import { afterEach, describe, expect, it, vi } from "vitest";
4
4
  import { ConfigProvider } from "../../ConfigContext.js";
5
5
  import { ThemeContext } from "../../ThemeContext.js";
6
- import { darkTheme } from "../../themes/dark.js";
6
+ import { darkTheme } from "../../shared/themes/dark.js";
7
7
  import { StepperView } from "../StepperView.js";
8
8
  const mockThemeValue = {
9
9
  theme: darkTheme,
@@ -3,7 +3,7 @@ import { cleanup, render } from "ink-testing-library";
3
3
  import { afterEach, describe, expect, it, vi } from "vitest";
4
4
  import { ConfigProvider } from "../../ConfigContext.js";
5
5
  import { ThemeContext } from "../../ThemeContext.js";
6
- import { darkTheme } from "../../themes/dark.js";
6
+ import { darkTheme } from "../../shared/themes/dark.js";
7
7
  import { StepperView } from "../StepperView.js";
8
8
  const mockThemeValue = {
9
9
  theme: darkTheme,
@@ -21,7 +21,7 @@ vi.mock("../AnimatedGradient.js", () => ({
21
21
  AnimatedGradient: ({ text }) => React.createElement("ink-text", null, text),
22
22
  }));
23
23
  import { ThemeContext } from "../../ThemeContext.js";
24
- import { darkTheme } from "../../themes/dark.js";
24
+ import { darkTheme } from "../../shared/themes/dark.js";
25
25
  import { WaitingScreen } from "../WaitingScreen.js";
26
26
  const mockThemeValue = {
27
27
  theme: darkTheme,
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Shared session event types for both ink and OpenTUI TUI implementations.
3
+ */
4
+ export {};
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Catppuccin Latte Theme
3
+ * Soothing pastel theme - light flavor.
4
+ * https://github.com/catppuccin/catppuccin
5
+ */
6
+ export const catppuccinLatteTheme = {
7
+ name: "catppuccin-latte",
8
+ gradient: {
9
+ start: "#1e66f5", // blue
10
+ middle: "#8839ef", // mauve
11
+ end: "#1e66f5",
12
+ },
13
+ colors: {
14
+ bg: "#EFF1F5",
15
+ surface: "#E6E9EF",
16
+ surfaceAlt: "#CCD0DA",
17
+ primary: "#1e66f5", // blue
18
+ success: "#40a02b", // green
19
+ warning: "#df8e1d", // yellow
20
+ error: "#d20f39", // red
21
+ info: "#04a5e5", // sky
22
+ focused: "#1e66f5",
23
+ selected: "#40a02b",
24
+ pending: "#fe640b", // peach
25
+ unansweredHighlight: "#d20f39",
26
+ text: "#4c4f69", // text
27
+ textDim: "#8C90A0", // overlay0 darkened for visibility
28
+ textBold: "#4c4f69",
29
+ },
30
+ borders: {
31
+ primary: "#1e66f5",
32
+ warning: "#df8e1d",
33
+ error: "#d20f39",
34
+ neutral: "#ccd0da", // surface0
35
+ },
36
+ components: {
37
+ header: {
38
+ border: "#9ca0b0", // overlay0 - slightly more visible
39
+ queueActive: "#1e66f5",
40
+ queueEmpty: "#acb0c0",
41
+ queueFlash: "#8839ef",
42
+ pillBg: "#ccd0da",
43
+ },
44
+ directory: {
45
+ label: "#8C90A0",
46
+ path: "#4c4f69",
47
+ },
48
+ tabBar: {
49
+ selected: "#4c4f69",
50
+ selectedBg: "#ccd0da",
51
+ default: "#8C90A0",
52
+ answered: "#40a02b",
53
+ unanswered: "#acb0c0",
54
+ divider: "#ccd0da",
55
+ },
56
+ options: {
57
+ focused: "#40a02b",
58
+ focusedBg: "#ccd0da",
59
+ selected: "#1e66f5",
60
+ selectedBg: "#ccd0da",
61
+ default: "#4c4f69",
62
+ description: "#6c6f85", // subtext0 - darker for readability
63
+ hint: "#6c6f85", // subtext0 - darker for readability
64
+ },
65
+ input: {
66
+ border: "#ccd0da",
67
+ borderFocused: "#1e66f5",
68
+ placeholder: "#acb0c0",
69
+ cursor: "#1e66f5",
70
+ cursorDim: "#8839ef",
71
+ },
72
+ review: {
73
+ border: "#ccd0da",
74
+ confirmBorder: "#1e66f5",
75
+ selectedOption: "#40a02b",
76
+ customAnswer: "#df8e1d",
77
+ questionId: "#acb0c0",
78
+ divider: "#ccd0da",
79
+ },
80
+ questionDisplay: {
81
+ questionId: "#1e66f5",
82
+ typeIndicator: "#acb0c0",
83
+ elapsed: "#acb0c0",
84
+ },
85
+ footer: {
86
+ border: "#ccd0da",
87
+ keyBg: "#ccd0da",
88
+ keyFg: "#1e66f5",
89
+ action: "#7c7f93", // overlay1 - darker for visibility
90
+ separator: "#ccd0da",
91
+ },
92
+ toast: {
93
+ success: "#40a02b",
94
+ successPillBg: "#dce0e8",
95
+ error: "#d20f39",
96
+ info: "#1e66f5",
97
+ warning: "#df8e1d",
98
+ border: "#ccd0da",
99
+ },
100
+ markdown: {
101
+ codeBlockBg: "#eff1f5",
102
+ codeBlockText: "#4c4f69",
103
+ codeBlockBorder: "#ccd0da",
104
+ },
105
+ sessionDots: {
106
+ active: "#1e66f5",
107
+ answered: "#40a02b",
108
+ inProgress: "#df8e1d",
109
+ untouched: "#acb0c0",
110
+ number: "#4c4f69",
111
+ activeNumber: "#1e66f5",
112
+ stale: "#df8e1d",
113
+ abandoned: "#d20f39",
114
+ },
115
+ sessionPicker: {
116
+ border: "#1e66f5",
117
+ title: "#1e66f5",
118
+ rowText: "#4c4f69",
119
+ rowDim: "#acb0c0",
120
+ highlightBg: "#ccd0da",
121
+ highlightFg: "#40a02b",
122
+ activeMark: "#1e66f5",
123
+ progress: "#04a5e5",
124
+ staleIcon: "#df8e1d",
125
+ staleText: "#df8e1d",
126
+ staleAge: "#df8e1d",
127
+ staleSubtitle: "#acb0c0",
128
+ },
129
+ },
130
+ };
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Catppuccin Mocha Theme
3
+ * Soothing pastel theme - darkest flavor.
4
+ * https://github.com/catppuccin/catppuccin
5
+ */
6
+ export const catppuccinMochaTheme = {
7
+ name: "catppuccin-mocha",
8
+ gradient: {
9
+ start: "#89b4fa", // blue
10
+ middle: "#cba6f7", // mauve
11
+ end: "#89b4fa",
12
+ },
13
+ colors: {
14
+ // Background layers (OpenCode-style filled surfaces)
15
+ bg: "#181825",
16
+ surface: "#1E1E2E",
17
+ surfaceAlt: "#313244",
18
+ primary: "#89b4fa", // blue
19
+ success: "#a6e3a1", // green
20
+ warning: "#f9e2af", // yellow
21
+ error: "#f38ba8", // red
22
+ info: "#89dceb", // sky
23
+ focused: "#89b4fa",
24
+ selected: "#a6e3a1",
25
+ pending: "#fab387", // peach
26
+ unansweredHighlight: "#f38ba8",
27
+ text: "#cdd6f4", // text
28
+ textDim: "#9395B0", // overlay0 brightened
29
+ textBold: "#cdd6f4",
30
+ },
31
+ borders: {
32
+ primary: "#89b4fa",
33
+ warning: "#f9e2af",
34
+ error: "#f38ba8",
35
+ neutral: "#313244", // surface0
36
+ },
37
+ components: {
38
+ header: {
39
+ border: "#45475a", // surface1 - slightly more visible
40
+ queueActive: "#89b4fa",
41
+ queueEmpty: "#8688a0",
42
+ queueFlash: "#cba6f7",
43
+ pillBg: "#313244",
44
+ },
45
+ directory: {
46
+ label: "#8688a0",
47
+ path: "#cdd6f4",
48
+ },
49
+ tabBar: {
50
+ selected: "#cdd6f4",
51
+ selectedBg: "#313244",
52
+ default: "#8688a0",
53
+ answered: "#a6e3a1",
54
+ unanswered: "#8688a0",
55
+ divider: "#313244",
56
+ },
57
+ options: {
58
+ focused: "#a6e3a1",
59
+ focusedBg: "#313244",
60
+ selected: "#89b4fa",
61
+ selectedBg: "#313244",
62
+ default: "#cdd6f4",
63
+ description: "#a6adc8", // subtext0 - lighter for readability
64
+ hint: "#a6adc8", // subtext0 - lighter for readability
65
+ },
66
+ input: {
67
+ border: "#313244",
68
+ borderFocused: "#89b4fa",
69
+ placeholder: "#8688a0",
70
+ cursor: "#89b4fa",
71
+ cursorDim: "#cba6f7",
72
+ },
73
+ review: {
74
+ border: "#313244",
75
+ confirmBorder: "#89b4fa",
76
+ selectedOption: "#a6e3a1",
77
+ customAnswer: "#f9e2af",
78
+ questionId: "#8688a0",
79
+ divider: "#313244",
80
+ },
81
+ questionDisplay: {
82
+ questionId: "#89b4fa",
83
+ typeIndicator: "#8688a0",
84
+ elapsed: "#8688a0",
85
+ },
86
+ footer: {
87
+ border: "#313244",
88
+ keyBg: "#313244",
89
+ keyFg: "#89b4fa",
90
+ action: "#A5AABF", // overlay2 - brighter for visibility
91
+ separator: "#313244",
92
+ },
93
+ toast: {
94
+ success: "#a6e3a1",
95
+ successPillBg: "#313244",
96
+ error: "#f38ba8",
97
+ info: "#89b4fa",
98
+ warning: "#f9e2af",
99
+ border: "#313244",
100
+ },
101
+ markdown: {
102
+ codeBlockBg: "#1e1e2e",
103
+ codeBlockText: "#cdd6f4",
104
+ codeBlockBorder: "#313244",
105
+ },
106
+ sessionDots: {
107
+ active: "#89b4fa",
108
+ answered: "#a6e3a1",
109
+ inProgress: "#f9e2af",
110
+ untouched: "#8688a0",
111
+ number: "#cdd6f4",
112
+ activeNumber: "#89b4fa",
113
+ stale: "#f9e2af",
114
+ abandoned: "#f38ba8",
115
+ },
116
+ sessionPicker: {
117
+ border: "#89b4fa",
118
+ title: "#89b4fa",
119
+ rowText: "#cdd6f4",
120
+ rowDim: "#8688a0",
121
+ highlightBg: "#313244",
122
+ highlightFg: "#a6e3a1",
123
+ activeMark: "#89b4fa",
124
+ progress: "#89dceb",
125
+ staleIcon: "#f9e2af",
126
+ staleText: "#f9e2af",
127
+ staleAge: "#f9e2af",
128
+ staleSubtitle: "#8688a0",
129
+ },
130
+ },
131
+ };
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Visual direction: graphite + electric-cyan accent.
3
+ * Keep the palette tight; lean on neutrals for structure.
4
+ *
5
+ * This is the original AUQ theme, optimized for dark terminals.
6
+ */
7
+ export const darkTheme = {
8
+ name: "AUQ dark",
9
+ gradient: {
10
+ start: "#46D9FF",
11
+ middle: "#B8F2FF",
12
+ end: "#46D9FF",
13
+ },
14
+ colors: {
15
+ bg: "#0F1419",
16
+ surface: "#242C34",
17
+ surfaceAlt: "#2F3840",
18
+ primary: "#46D9FF",
19
+ success: "#5AF78E",
20
+ warning: "#FFD36A",
21
+ error: "#FF5C57",
22
+ info: "#46D9FF",
23
+ focused: "#46D9FF",
24
+ selected: "#5AF78E",
25
+ pending: "#FFD36A",
26
+ unansweredHighlight: "#FF6B6B",
27
+ text: "#E7EEF5",
28
+ textDim: "#A0AAB4",
29
+ textBold: "#F5FAFF",
30
+ },
31
+ borders: {
32
+ primary: "#46D9FF",
33
+ warning: "#FFD36A",
34
+ error: "#FF5C57",
35
+ neutral: "#2A3238",
36
+ },
37
+ components: {
38
+ header: {
39
+ border: "#3D4852", // slightly more visible
40
+ queueActive: "#46D9FF",
41
+ queueEmpty: "#A0AAB4",
42
+ queueFlash: "#B8F2FF",
43
+ pillBg: "#0B1F26",
44
+ },
45
+ directory: {
46
+ label: "#A0AAB4",
47
+ path: "#E7EEF5",
48
+ },
49
+ tabBar: {
50
+ selected: "#E7EEF5",
51
+ selectedBg: "#0B1F26",
52
+ default: "#A0AAB4",
53
+ answered: "#5AF78E",
54
+ unanswered: "#A0AAB4",
55
+ divider: "#2A3238",
56
+ },
57
+ options: {
58
+ focused: "#5AF78E",
59
+ focusedBg: "#0F2417",
60
+ selected: "#46D9FF",
61
+ selectedBg: "#0B1F26",
62
+ default: "#E7EEF5",
63
+ description: "#A8B2BC",
64
+ hint: "#A8B2BC",
65
+ },
66
+ input: {
67
+ border: "#2A3238",
68
+ borderFocused: "#46D9FF",
69
+ placeholder: "#A0AAB4",
70
+ cursor: "#46D9FF",
71
+ cursorDim: "#B8F2FF",
72
+ },
73
+ review: {
74
+ border: "#2A3238",
75
+ confirmBorder: "#46D9FF",
76
+ selectedOption: "#5AF78E",
77
+ customAnswer: "#FFD36A",
78
+ questionId: "#A0AAB4",
79
+ divider: "#2A3238",
80
+ },
81
+ questionDisplay: {
82
+ questionId: "#46D9FF",
83
+ typeIndicator: "#A0AAB4",
84
+ elapsed: "#A0AAB4",
85
+ },
86
+ footer: {
87
+ border: "#2A3238",
88
+ keyBg: "#0B1F26",
89
+ keyFg: "#46D9FF",
90
+ action: "#A8B2BC",
91
+ separator: "#2A3238",
92
+ },
93
+ toast: {
94
+ success: "#5AF78E",
95
+ successPillBg: "#0F2417",
96
+ error: "#FF5C57",
97
+ info: "#46D9FF",
98
+ warning: "#FFD36A",
99
+ border: "#2A3238",
100
+ },
101
+ markdown: {
102
+ codeBlockBg: "#0F1419",
103
+ codeBlockText: "#E7EEF5",
104
+ codeBlockBorder: "#2A3238",
105
+ },
106
+ sessionDots: {
107
+ active: "#46D9FF",
108
+ answered: "#5AF78E",
109
+ inProgress: "#FFD36A",
110
+ untouched: "#A0AAB4",
111
+ number: "#E7EEF5",
112
+ activeNumber: "#46D9FF",
113
+ stale: "#FFD36A",
114
+ abandoned: "#FF5C57",
115
+ },
116
+ sessionPicker: {
117
+ border: "#46D9FF",
118
+ title: "#46D9FF",
119
+ rowText: "#E7EEF5",
120
+ rowDim: "#A0AAB4",
121
+ highlightBg: "#0F2417",
122
+ highlightFg: "#5AF78E",
123
+ activeMark: "#46D9FF",
124
+ progress: "#46D9FF",
125
+ staleIcon: "#FFD36A",
126
+ staleText: "#FFD36A",
127
+ staleAge: "#FFD36A",
128
+ staleSubtitle: "#A0AAB4",
129
+ },
130
+ },
131
+ };
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Dracula Theme
3
+ * A dark theme for code editors and terminal applications.
4
+ * https://draculatheme.com/
5
+ */
6
+ export const draculaTheme = {
7
+ name: "dracula",
8
+ gradient: {
9
+ start: "#bd93f9", // purple
10
+ middle: "#ff79c6", // pink
11
+ end: "#bd93f9",
12
+ },
13
+ colors: {
14
+ // Background layers (OpenCode-style filled surfaces)
15
+ bg: "#21222C",
16
+ surface: "#282A36",
17
+ surfaceAlt: "#383A4A",
18
+ primary: "#bd93f9", // purple
19
+ success: "#50fa7b", // green
20
+ warning: "#f1fa8c", // yellow
21
+ error: "#ff5555", // red
22
+ info: "#8be9fd", // cyan
23
+ focused: "#bd93f9",
24
+ selected: "#50fa7b",
25
+ pending: "#ffb86c", // orange
26
+ unansweredHighlight: "#ff5555", // dracula red
27
+ text: "#f8f8f2", // foreground
28
+ textDim: "#8B9BCF", // comment brightened
29
+ textBold: "#f8f8f2",
30
+ },
31
+ borders: {
32
+ primary: "#bd93f9",
33
+ warning: "#f1fa8c",
34
+ error: "#ff5555",
35
+ neutral: "#44475a", // current line
36
+ },
37
+ components: {
38
+ header: {
39
+ border: "#6272a4", // comment - slightly more visible
40
+ queueActive: "#bd93f9",
41
+ queueEmpty: "#7C8BBE",
42
+ queueFlash: "#ff79c6",
43
+ pillBg: "#44475a",
44
+ },
45
+ directory: {
46
+ label: "#7C8BBE",
47
+ path: "#f8f8f2",
48
+ },
49
+ tabBar: {
50
+ selected: "#f8f8f2",
51
+ selectedBg: "#44475a",
52
+ default: "#7C8BBE",
53
+ answered: "#50fa7b",
54
+ unanswered: "#7C8BBE",
55
+ divider: "#44475a",
56
+ },
57
+ options: {
58
+ focused: "#50fa7b",
59
+ focusedBg: "#44475a",
60
+ selected: "#bd93f9",
61
+ selectedBg: "#44475a",
62
+ default: "#f8f8f2",
63
+ description: "#CAA8FC", // lighter purple for readability
64
+ hint: "#f8f8f2", // foreground for readability
65
+ },
66
+ input: {
67
+ border: "#44475a",
68
+ borderFocused: "#bd93f9",
69
+ placeholder: "#7C8BBE",
70
+ cursor: "#bd93f9",
71
+ cursorDim: "#ff79c6",
72
+ },
73
+ review: {
74
+ border: "#44475a",
75
+ confirmBorder: "#bd93f9",
76
+ selectedOption: "#50fa7b",
77
+ customAnswer: "#f1fa8c",
78
+ questionId: "#7C8BBE",
79
+ divider: "#44475a",
80
+ },
81
+ questionDisplay: {
82
+ questionId: "#bd93f9",
83
+ typeIndicator: "#7C8BBE",
84
+ elapsed: "#7C8BBE",
85
+ },
86
+ footer: {
87
+ border: "#44475a",
88
+ keyBg: "#44475a",
89
+ keyFg: "#bd93f9",
90
+ action: "#9AA5D4",
91
+ separator: "#44475a",
92
+ },
93
+ toast: {
94
+ success: "#50fa7b",
95
+ successPillBg: "#44475a", // current line
96
+ error: "#ff5555",
97
+ info: "#bd93f9",
98
+ warning: "#f1fa8c",
99
+ border: "#44475a",
100
+ },
101
+ markdown: {
102
+ codeBlockBg: "#282a36",
103
+ codeBlockText: "#f8f8f2",
104
+ codeBlockBorder: "#44475a",
105
+ },
106
+ sessionDots: {
107
+ active: "#bd93f9",
108
+ answered: "#50fa7b",
109
+ inProgress: "#f1fa8c",
110
+ untouched: "#7C8BBE",
111
+ number: "#f8f8f2",
112
+ activeNumber: "#bd93f9",
113
+ stale: "#f1fa8c",
114
+ abandoned: "#ff5555",
115
+ },
116
+ sessionPicker: {
117
+ border: "#bd93f9",
118
+ title: "#bd93f9",
119
+ rowText: "#f8f8f2",
120
+ rowDim: "#7C8BBE",
121
+ highlightBg: "#44475a",
122
+ highlightFg: "#50fa7b",
123
+ activeMark: "#bd93f9",
124
+ progress: "#8be9fd",
125
+ staleIcon: "#f1fa8c",
126
+ staleText: "#f1fa8c",
127
+ staleAge: "#f1fa8c",
128
+ staleSubtitle: "#7C8BBE",
129
+ },
130
+ },
131
+ };