@vybestack/llxprt-ui 0.7.0-nightly.251211.5750c518a

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 (123) hide show
  1. package/PLAN-messages.md +681 -0
  2. package/PLAN.md +47 -0
  3. package/README.md +25 -0
  4. package/bun.lock +1024 -0
  5. package/dev-docs/ARCHITECTURE.md +178 -0
  6. package/dev-docs/CODE_ORGANIZATION.md +232 -0
  7. package/dev-docs/STANDARDS.md +235 -0
  8. package/dev-docs/UI_DESIGN.md +425 -0
  9. package/eslint.config.cjs +194 -0
  10. package/images/nui.png +0 -0
  11. package/llxprt.png +0 -0
  12. package/llxprt.svg +128 -0
  13. package/package.json +66 -0
  14. package/scripts/check-limits.ts +177 -0
  15. package/scripts/start.js +71 -0
  16. package/src/app.tsx +599 -0
  17. package/src/bootstrap.tsx +23 -0
  18. package/src/commands/AuthCommand.tsx +80 -0
  19. package/src/commands/ModelCommand.tsx +102 -0
  20. package/src/commands/ProviderCommand.tsx +103 -0
  21. package/src/commands/ThemeCommand.tsx +71 -0
  22. package/src/features/chat/history.ts +178 -0
  23. package/src/features/chat/index.ts +3 -0
  24. package/src/features/chat/persistentHistory.ts +102 -0
  25. package/src/features/chat/responder.ts +217 -0
  26. package/src/features/completion/completions.ts +161 -0
  27. package/src/features/completion/index.ts +3 -0
  28. package/src/features/completion/slash.test.ts +82 -0
  29. package/src/features/completion/slash.ts +248 -0
  30. package/src/features/completion/suggestions.test.ts +51 -0
  31. package/src/features/completion/suggestions.ts +112 -0
  32. package/src/features/config/configSession.test.ts +189 -0
  33. package/src/features/config/configSession.ts +179 -0
  34. package/src/features/config/index.ts +4 -0
  35. package/src/features/config/llxprtAdapter.integration.test.ts +202 -0
  36. package/src/features/config/llxprtAdapter.test.ts +139 -0
  37. package/src/features/config/llxprtAdapter.ts +257 -0
  38. package/src/features/config/llxprtCommands.test.ts +40 -0
  39. package/src/features/config/llxprtCommands.ts +35 -0
  40. package/src/features/config/llxprtConfig.test.ts +261 -0
  41. package/src/features/config/llxprtConfig.ts +418 -0
  42. package/src/features/theme/index.ts +2 -0
  43. package/src/features/theme/theme.test.ts +51 -0
  44. package/src/features/theme/theme.ts +105 -0
  45. package/src/features/theme/themeManager.ts +84 -0
  46. package/src/hooks/useAppCommands.ts +129 -0
  47. package/src/hooks/useApprovalKeyboard.ts +156 -0
  48. package/src/hooks/useChatStore.test.ts +112 -0
  49. package/src/hooks/useChatStore.ts +252 -0
  50. package/src/hooks/useInputManager.ts +99 -0
  51. package/src/hooks/useKeyboardHandlers.ts +130 -0
  52. package/src/hooks/useListNavigation.test.ts +166 -0
  53. package/src/hooks/useListNavigation.ts +62 -0
  54. package/src/hooks/usePersistentHistory.ts +94 -0
  55. package/src/hooks/useScrollManagement.ts +107 -0
  56. package/src/hooks/useSelectionClipboard.ts +48 -0
  57. package/src/hooks/useSessionManager.test.ts +85 -0
  58. package/src/hooks/useSessionManager.ts +101 -0
  59. package/src/hooks/useStreamingLifecycle.ts +71 -0
  60. package/src/hooks/useStreamingResponder.ts +401 -0
  61. package/src/hooks/useSuggestionSetup.ts +23 -0
  62. package/src/hooks/useToolApproval.test.ts +140 -0
  63. package/src/hooks/useToolApproval.ts +264 -0
  64. package/src/hooks/useToolScheduler.ts +432 -0
  65. package/src/index.ts +3 -0
  66. package/src/jsx.d.ts +11 -0
  67. package/src/lib/clipboard.ts +18 -0
  68. package/src/lib/logger.ts +107 -0
  69. package/src/lib/random.ts +5 -0
  70. package/src/main.tsx +13 -0
  71. package/src/test/mockTheme.ts +51 -0
  72. package/src/types/events.ts +87 -0
  73. package/src/types.ts +13 -0
  74. package/src/ui/components/ChatLayout.tsx +694 -0
  75. package/src/ui/components/CommandComponents.tsx +74 -0
  76. package/src/ui/components/DiffViewer.tsx +306 -0
  77. package/src/ui/components/FilterInput.test.ts +69 -0
  78. package/src/ui/components/FilterInput.tsx +62 -0
  79. package/src/ui/components/HeaderBar.tsx +137 -0
  80. package/src/ui/components/RadioSelect.test.ts +140 -0
  81. package/src/ui/components/RadioSelect.tsx +88 -0
  82. package/src/ui/components/SelectableList.test.ts +83 -0
  83. package/src/ui/components/SelectableList.tsx +35 -0
  84. package/src/ui/components/StatusBar.tsx +45 -0
  85. package/src/ui/components/SuggestionPanel.tsx +102 -0
  86. package/src/ui/components/messages/ModelMessage.tsx +14 -0
  87. package/src/ui/components/messages/SystemMessage.tsx +29 -0
  88. package/src/ui/components/messages/ThinkingMessage.tsx +14 -0
  89. package/src/ui/components/messages/UserMessage.tsx +26 -0
  90. package/src/ui/components/messages/index.ts +15 -0
  91. package/src/ui/components/messages/renderMessage.test.ts +49 -0
  92. package/src/ui/components/messages/renderMessage.tsx +43 -0
  93. package/src/ui/components/messages/types.test.ts +24 -0
  94. package/src/ui/components/messages/types.ts +36 -0
  95. package/src/ui/modals/AuthModal.tsx +106 -0
  96. package/src/ui/modals/ModalShell.tsx +60 -0
  97. package/src/ui/modals/SearchSelectModal.tsx +236 -0
  98. package/src/ui/modals/ThemeModal.tsx +204 -0
  99. package/src/ui/modals/ToolApprovalModal.test.ts +206 -0
  100. package/src/ui/modals/ToolApprovalModal.tsx +282 -0
  101. package/src/ui/modals/index.ts +20 -0
  102. package/src/ui/modals/modals.test.ts +26 -0
  103. package/src/ui/modals/types.ts +19 -0
  104. package/src/uicontext/Command.tsx +102 -0
  105. package/src/uicontext/Dialog.tsx +65 -0
  106. package/src/uicontext/index.ts +2 -0
  107. package/themes/ansi-light.json +59 -0
  108. package/themes/ansi.json +59 -0
  109. package/themes/atom-one-dark.json +59 -0
  110. package/themes/ayu-light.json +59 -0
  111. package/themes/ayu.json +59 -0
  112. package/themes/default-light.json +59 -0
  113. package/themes/default.json +59 -0
  114. package/themes/dracula.json +59 -0
  115. package/themes/github-dark.json +59 -0
  116. package/themes/github-light.json +59 -0
  117. package/themes/googlecode.json +59 -0
  118. package/themes/green-screen.json +59 -0
  119. package/themes/no-color.json +59 -0
  120. package/themes/shades-of-purple.json +59 -0
  121. package/themes/xcode.json +59 -0
  122. package/tsconfig.json +28 -0
  123. package/vitest.config.ts +10 -0
@@ -0,0 +1,65 @@
1
+ import React from 'react';
2
+ import {
3
+ createContext,
4
+ useCallback,
5
+ useContext,
6
+ useMemo,
7
+ useState,
8
+ type ReactNode,
9
+ } from 'react';
10
+ import { useKeyboard } from '@vybestack/opentui-react';
11
+
12
+ interface DialogContextValue {
13
+ readonly replace: (element: ReactNode) => void;
14
+ readonly clear: () => void;
15
+ readonly isOpen: boolean;
16
+ }
17
+
18
+ const DialogContext = createContext<DialogContextValue | null>(null);
19
+
20
+ export function useDialog(): DialogContextValue {
21
+ const context = useContext(DialogContext);
22
+ if (context === null) {
23
+ throw new Error('useDialog must be used within Dialog');
24
+ }
25
+ return context;
26
+ }
27
+
28
+ interface DialogProps {
29
+ readonly children: ReactNode;
30
+ }
31
+
32
+ export function Dialog({ children }: DialogProps): React.ReactNode {
33
+ const [dialogStack, setDialogStack] = useState<ReactNode[]>([]);
34
+
35
+ const replace = useCallback((element: ReactNode) => {
36
+ setDialogStack([element]);
37
+ }, []);
38
+
39
+ const clear = useCallback(() => {
40
+ setDialogStack([]);
41
+ }, []);
42
+
43
+ const isOpen = dialogStack.length > 0;
44
+ const currentDialog = dialogStack[0] ?? null;
45
+
46
+ useKeyboard((key) => {
47
+ if (key.eventType === 'press' && key.name === 'escape' && isOpen) {
48
+ clear();
49
+ }
50
+ });
51
+
52
+ const contextValue = useMemo(
53
+ () => ({ replace, clear, isOpen }),
54
+ [replace, clear, isOpen],
55
+ );
56
+
57
+ return (
58
+ <DialogContext.Provider value={contextValue}>
59
+ {children}
60
+ {currentDialog}
61
+ </DialogContext.Provider>
62
+ );
63
+ }
64
+
65
+ export type { DialogContextValue };
@@ -0,0 +1,2 @@
1
+ export { Dialog, useDialog, type DialogContextValue } from './Dialog';
2
+ export { Command, useCommand, type CommandDef } from './Command';
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "ANSI Light",
3
+ "slug": "ansi-light",
4
+ "kind": "light",
5
+ "colors": {
6
+ "background": "white",
7
+ "panel": {
8
+ "bg": "white",
9
+ "border": "gray",
10
+ "headerBg": "white",
11
+ "headerFg": "#444"
12
+ },
13
+ "text": {
14
+ "primary": "#444",
15
+ "muted": "gray",
16
+ "user": "blue",
17
+ "responder": "orange",
18
+ "thinking": "gray",
19
+ "tool": "green"
20
+ },
21
+ "input": {
22
+ "bg": "white",
23
+ "fg": "#444",
24
+ "placeholder": "gray",
25
+ "border": "gray"
26
+ },
27
+ "status": {
28
+ "fg": "green",
29
+ "muted": "gray"
30
+ },
31
+ "accent": {
32
+ "primary": "blue",
33
+ "secondary": "purple",
34
+ "warning": "orange",
35
+ "error": "red",
36
+ "success": "green"
37
+ },
38
+ "selection": {
39
+ "fg": "#f8fafc",
40
+ "bg": "blue"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#E5F2E5",
44
+ "addedFg": "black",
45
+ "removedBg": "#FFE5E5",
46
+ "removedFg": "black"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "blue",
50
+ "track": "gray"
51
+ },
52
+ "message": {
53
+ "userBorder": "blue",
54
+ "systemBorder": "orange",
55
+ "systemText": "orange",
56
+ "systemBg": "#f0f0f0"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "ANSI",
3
+ "slug": "ansi",
4
+ "kind": "dark",
5
+ "colors": {
6
+ "background": "black",
7
+ "panel": {
8
+ "bg": "black",
9
+ "border": "gray",
10
+ "headerBg": "black",
11
+ "headerFg": "white"
12
+ },
13
+ "text": {
14
+ "primary": "white",
15
+ "muted": "gray",
16
+ "user": "bluebright",
17
+ "responder": "yellow",
18
+ "thinking": "gray",
19
+ "tool": "green"
20
+ },
21
+ "input": {
22
+ "bg": "black",
23
+ "fg": "white",
24
+ "placeholder": "gray",
25
+ "border": "gray"
26
+ },
27
+ "status": {
28
+ "fg": "green",
29
+ "muted": "gray"
30
+ },
31
+ "accent": {
32
+ "primary": "blue",
33
+ "secondary": "magenta",
34
+ "warning": "yellow",
35
+ "error": "red",
36
+ "success": "green"
37
+ },
38
+ "selection": {
39
+ "fg": "#0f172a",
40
+ "bg": "blue"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#003300",
44
+ "addedFg": "white",
45
+ "removedBg": "#4D0000",
46
+ "removedFg": "white"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "blue",
50
+ "track": "gray"
51
+ },
52
+ "message": {
53
+ "userBorder": "bluebright",
54
+ "systemBorder": "yellow",
55
+ "systemText": "yellow",
56
+ "systemBg": "#1a1a1a"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "Atom One",
3
+ "slug": "atom-one",
4
+ "kind": "dark",
5
+ "colors": {
6
+ "background": "#282c34",
7
+ "panel": {
8
+ "bg": "#282c34",
9
+ "border": "#5c6370",
10
+ "headerBg": "#282c34",
11
+ "headerFg": "#abb2bf"
12
+ },
13
+ "text": {
14
+ "primary": "#abb2bf",
15
+ "muted": "#5c6370",
16
+ "user": "#61aeee",
17
+ "responder": "#e6c07b",
18
+ "thinking": "#5c6370",
19
+ "tool": "#98c379"
20
+ },
21
+ "input": {
22
+ "bg": "#282c34",
23
+ "fg": "#abb2bf",
24
+ "placeholder": "#5c6370",
25
+ "border": "#5c6370"
26
+ },
27
+ "status": {
28
+ "fg": "#98c379",
29
+ "muted": "#5c6370"
30
+ },
31
+ "accent": {
32
+ "primary": "#61aeee",
33
+ "secondary": "#c678dd",
34
+ "warning": "#e6c07b",
35
+ "error": "#e06c75",
36
+ "success": "#98c379"
37
+ },
38
+ "selection": {
39
+ "fg": "#0f172a",
40
+ "bg": "#61aeee"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#39544E",
44
+ "addedFg": "white",
45
+ "removedBg": "#562B2F",
46
+ "removedFg": "white"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#61aeee",
50
+ "track": "#5c6370"
51
+ },
52
+ "message": {
53
+ "userBorder": "#61aeee",
54
+ "systemBorder": "#e6c07b",
55
+ "systemText": "#e6c07b",
56
+ "systemBg": "#31363f"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "Ayu Light",
3
+ "slug": "ayu-light",
4
+ "kind": "light",
5
+ "colors": {
6
+ "background": "#f8f9fa",
7
+ "panel": {
8
+ "bg": "#f8f9fa",
9
+ "border": "#a6aaaf",
10
+ "headerBg": "#f8f9fa",
11
+ "headerFg": "#5c6166"
12
+ },
13
+ "text": {
14
+ "primary": "#5c6166",
15
+ "muted": "#ABADB1",
16
+ "user": "#55b4d4",
17
+ "responder": "#f2ae49",
18
+ "thinking": "#a6aaaf",
19
+ "tool": "#86b300"
20
+ },
21
+ "input": {
22
+ "bg": "#f8f9fa",
23
+ "fg": "#5c6166",
24
+ "placeholder": "#ABADB1",
25
+ "border": "#a6aaaf"
26
+ },
27
+ "status": {
28
+ "fg": "#86b300",
29
+ "muted": "#ABADB1"
30
+ },
31
+ "accent": {
32
+ "primary": "#399ee6",
33
+ "secondary": "#a37acc",
34
+ "warning": "#f2ae49",
35
+ "error": "#f07171",
36
+ "success": "#86b300"
37
+ },
38
+ "selection": {
39
+ "fg": "#f8fafc",
40
+ "bg": "#399ee6"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#C6EAD8",
44
+ "addedFg": "#5c6166",
45
+ "removedBg": "#FFCCCC",
46
+ "removedFg": "#5c6166"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#399ee6",
50
+ "track": "#a6aaaf"
51
+ },
52
+ "message": {
53
+ "userBorder": "#55b4d4",
54
+ "systemBorder": "#f2ae49",
55
+ "systemText": "#f2ae49",
56
+ "systemBg": "#f0f1f2"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "Ayu",
3
+ "slug": "ayu",
4
+ "kind": "dark",
5
+ "colors": {
6
+ "background": "#0b0e14",
7
+ "panel": {
8
+ "bg": "#0b0e14",
9
+ "border": "#3D4149",
10
+ "headerBg": "#0b0e14",
11
+ "headerFg": "#bfbdb6"
12
+ },
13
+ "text": {
14
+ "primary": "#bfbdb6",
15
+ "muted": "#646A71",
16
+ "user": "#59C2FF",
17
+ "responder": "#FFB454",
18
+ "thinking": "#3D4149",
19
+ "tool": "#AAD94C"
20
+ },
21
+ "input": {
22
+ "bg": "#0b0e14",
23
+ "fg": "#bfbdb6",
24
+ "placeholder": "#646A71",
25
+ "border": "#3D4149"
26
+ },
27
+ "status": {
28
+ "fg": "#AAD94C",
29
+ "muted": "#646A71"
30
+ },
31
+ "accent": {
32
+ "primary": "#39BAE6",
33
+ "secondary": "#D2A6FF",
34
+ "warning": "#FFB454",
35
+ "error": "#F26D78",
36
+ "success": "#AAD94C"
37
+ },
38
+ "selection": {
39
+ "fg": "#0f172a",
40
+ "bg": "#39BAE6"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#293022",
44
+ "addedFg": "#bfbdb6",
45
+ "removedBg": "#3D1215",
46
+ "removedFg": "#bfbdb6"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#39BAE6",
50
+ "track": "#3D4149"
51
+ },
52
+ "message": {
53
+ "userBorder": "#59C2FF",
54
+ "systemBorder": "#FFB454",
55
+ "systemText": "#FFB454",
56
+ "systemBg": "#151922"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "Default Light",
3
+ "slug": "default-light",
4
+ "kind": "light",
5
+ "colors": {
6
+ "background": "#FAFAFA",
7
+ "panel": {
8
+ "bg": "#FAFAFA",
9
+ "border": "#97a0b0",
10
+ "headerBg": "#FAFAFA",
11
+ "headerFg": "#1f2937"
12
+ },
13
+ "text": {
14
+ "primary": "#1f2937",
15
+ "muted": "#008000",
16
+ "user": "#89BDCD",
17
+ "responder": "#D5A40A",
18
+ "thinking": "#97a0b0",
19
+ "tool": "#3CA84B"
20
+ },
21
+ "input": {
22
+ "bg": "#FAFAFA",
23
+ "fg": "#1f2937",
24
+ "placeholder": "#008000",
25
+ "border": "#97a0b0"
26
+ },
27
+ "status": {
28
+ "fg": "#3CA84B",
29
+ "muted": "#008000"
30
+ },
31
+ "accent": {
32
+ "primary": "#3B82F6",
33
+ "secondary": "#8B5CF6",
34
+ "warning": "#D5A40A",
35
+ "error": "#DD4C4C",
36
+ "success": "#3CA84B"
37
+ },
38
+ "selection": {
39
+ "fg": "#f8fafc",
40
+ "bg": "#3B82F6"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#C6EAD8",
44
+ "addedFg": "#1f2937",
45
+ "removedBg": "#FFCCCC",
46
+ "removedFg": "#1f2937"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#3B82F6",
50
+ "track": "#97a0b0"
51
+ },
52
+ "message": {
53
+ "userBorder": "#89BDCD",
54
+ "systemBorder": "#D5A40A",
55
+ "systemText": "#D5A40A",
56
+ "systemBg": "#f2f2f2"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "Default",
3
+ "slug": "default",
4
+ "kind": "dark",
5
+ "colors": {
6
+ "background": "#1E1E2E",
7
+ "panel": {
8
+ "bg": "#1E1E2E",
9
+ "border": "#6C7086",
10
+ "headerBg": "#1E1E2E",
11
+ "headerFg": "#e5e7eb"
12
+ },
13
+ "text": {
14
+ "primary": "#e5e7eb",
15
+ "muted": "#6C7086",
16
+ "user": "#ADD8E6",
17
+ "responder": "#F9E2AF",
18
+ "thinking": "#6C7086",
19
+ "tool": "#A6E3A1"
20
+ },
21
+ "input": {
22
+ "bg": "#1E1E2E",
23
+ "fg": "#e5e7eb",
24
+ "placeholder": "#6C7086",
25
+ "border": "#6C7086"
26
+ },
27
+ "status": {
28
+ "fg": "#A6E3A1",
29
+ "muted": "#6C7086"
30
+ },
31
+ "accent": {
32
+ "primary": "#89B4FA",
33
+ "secondary": "#CBA6F7",
34
+ "warning": "#F9E2AF",
35
+ "error": "#F38BA8",
36
+ "success": "#A6E3A1"
37
+ },
38
+ "selection": {
39
+ "fg": "#0f172a",
40
+ "bg": "#89B4FA"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#28350B",
44
+ "addedFg": "#e5e7eb",
45
+ "removedBg": "#430000",
46
+ "removedFg": "#e5e7eb"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#89B4FA",
50
+ "track": "#6C7086"
51
+ },
52
+ "message": {
53
+ "userBorder": "#ADD8E6",
54
+ "systemBorder": "#F9E2AF",
55
+ "systemText": "#F9E2AF",
56
+ "systemBg": "#2a2a3a"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "Dracula",
3
+ "slug": "dracula",
4
+ "kind": "dark",
5
+ "colors": {
6
+ "background": "#282a36",
7
+ "panel": {
8
+ "bg": "#282a36",
9
+ "border": "#6272a4",
10
+ "headerBg": "#282a36",
11
+ "headerFg": "#f8f8f2"
12
+ },
13
+ "text": {
14
+ "primary": "#f8f8f2",
15
+ "muted": "#6272a4",
16
+ "user": "#8be9fd",
17
+ "responder": "#f1fa8c",
18
+ "thinking": "#6272a4",
19
+ "tool": "#50fa7b"
20
+ },
21
+ "input": {
22
+ "bg": "#282a36",
23
+ "fg": "#f8f8f2",
24
+ "placeholder": "#6272a4",
25
+ "border": "#6272a4"
26
+ },
27
+ "status": {
28
+ "fg": "#50fa7b",
29
+ "muted": "#6272a4"
30
+ },
31
+ "accent": {
32
+ "primary": "#8be9fd",
33
+ "secondary": "#ff79c6",
34
+ "warning": "#f1fa8c",
35
+ "error": "#ff5555",
36
+ "success": "#50fa7b"
37
+ },
38
+ "selection": {
39
+ "fg": "#0f172a",
40
+ "bg": "#8be9fd"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#11431d",
44
+ "addedFg": "white",
45
+ "removedBg": "#6e1818",
46
+ "removedFg": "white"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#8be9fd",
50
+ "track": "#6272a4"
51
+ },
52
+ "message": {
53
+ "userBorder": "#8be9fd",
54
+ "systemBorder": "#f1fa8c",
55
+ "systemText": "#f1fa8c",
56
+ "systemBg": "#343746"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "GitHub",
3
+ "slug": "github",
4
+ "kind": "dark",
5
+ "colors": {
6
+ "background": "#24292e",
7
+ "panel": {
8
+ "bg": "#24292e",
9
+ "border": "#6A737D",
10
+ "headerBg": "#24292e",
11
+ "headerFg": "#d1d5da"
12
+ },
13
+ "text": {
14
+ "primary": "#d1d5da",
15
+ "muted": "#6A737D",
16
+ "user": "#79B8FF",
17
+ "responder": "#FFAB70",
18
+ "thinking": "#6A737D",
19
+ "tool": "#85E89D"
20
+ },
21
+ "input": {
22
+ "bg": "#24292e",
23
+ "fg": "#d1d5da",
24
+ "placeholder": "#6A737D",
25
+ "border": "#6A737D"
26
+ },
27
+ "status": {
28
+ "fg": "#85E89D",
29
+ "muted": "#6A737D"
30
+ },
31
+ "accent": {
32
+ "primary": "#79B8FF",
33
+ "secondary": "#B392F0",
34
+ "warning": "#FFAB70",
35
+ "error": "#F97583",
36
+ "success": "#85E89D"
37
+ },
38
+ "selection": {
39
+ "fg": "#0f172a",
40
+ "bg": "#79B8FF"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#3C4636",
44
+ "addedFg": "#d1d5da",
45
+ "removedBg": "#502125",
46
+ "removedFg": "#d1d5da"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#79B8FF",
50
+ "track": "#6A737D"
51
+ },
52
+ "message": {
53
+ "userBorder": "#79B8FF",
54
+ "systemBorder": "#FFAB70",
55
+ "systemText": "#FFAB70",
56
+ "systemBg": "#2d3339"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "GitHub Light",
3
+ "slug": "github-light",
4
+ "kind": "light",
5
+ "colors": {
6
+ "background": "#f8f8f8",
7
+ "panel": {
8
+ "bg": "#f8f8f8",
9
+ "border": "#999",
10
+ "headerBg": "#f8f8f8",
11
+ "headerFg": "#24292E"
12
+ },
13
+ "text": {
14
+ "primary": "#24292E",
15
+ "muted": "#998",
16
+ "user": "#0086b3",
17
+ "responder": "#990073",
18
+ "thinking": "#999",
19
+ "tool": "#008080"
20
+ },
21
+ "input": {
22
+ "bg": "#f8f8f8",
23
+ "fg": "#24292E",
24
+ "placeholder": "#998",
25
+ "border": "#999"
26
+ },
27
+ "status": {
28
+ "fg": "#008080",
29
+ "muted": "#998"
30
+ },
31
+ "accent": {
32
+ "primary": "#458",
33
+ "secondary": "#900",
34
+ "warning": "#990073",
35
+ "error": "#d14",
36
+ "success": "#008080"
37
+ },
38
+ "selection": {
39
+ "fg": "#f8fafc",
40
+ "bg": "#458"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#C6EAD8",
44
+ "addedFg": "#24292E",
45
+ "removedBg": "#FFCCCC",
46
+ "removedFg": "#24292E"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#458",
50
+ "track": "#999"
51
+ },
52
+ "message": {
53
+ "userBorder": "#0086b3",
54
+ "systemBorder": "#990073",
55
+ "systemText": "#990073",
56
+ "systemBg": "#f0f0f0"
57
+ }
58
+ }
59
+ }