@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,59 @@
1
+ {
2
+ "name": "Google Code",
3
+ "slug": "google-code",
4
+ "kind": "light",
5
+ "colors": {
6
+ "background": "white",
7
+ "panel": {
8
+ "bg": "white",
9
+ "border": "#97a0b0",
10
+ "headerBg": "white",
11
+ "headerFg": "#444"
12
+ },
13
+ "text": {
14
+ "primary": "#444",
15
+ "muted": "#5f6368",
16
+ "user": "#066",
17
+ "responder": "#660",
18
+ "thinking": "#97a0b0",
19
+ "tool": "#080"
20
+ },
21
+ "input": {
22
+ "bg": "white",
23
+ "fg": "#444",
24
+ "placeholder": "#5f6368",
25
+ "border": "#97a0b0"
26
+ },
27
+ "status": {
28
+ "fg": "#080",
29
+ "muted": "#5f6368"
30
+ },
31
+ "accent": {
32
+ "primary": "#008",
33
+ "secondary": "#606",
34
+ "warning": "#660",
35
+ "error": "#800",
36
+ "success": "#080"
37
+ },
38
+ "selection": {
39
+ "fg": "#f8fafc",
40
+ "bg": "#008"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#C6EAD8",
44
+ "addedFg": "#444",
45
+ "removedBg": "#FEDEDE",
46
+ "removedFg": "#444"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#008",
50
+ "track": "#97a0b0"
51
+ },
52
+ "message": {
53
+ "userBorder": "#066",
54
+ "systemBorder": "#660",
55
+ "systemText": "#660",
56
+ "systemBg": "#f5f5f5"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "Green Screen",
3
+ "slug": "green-screen",
4
+ "kind": "dark",
5
+ "colors": {
6
+ "background": "#000000",
7
+ "panel": {
8
+ "bg": "#000000",
9
+ "border": "#6a9955",
10
+ "headerBg": "#000000",
11
+ "headerFg": "#6a9955"
12
+ },
13
+ "text": {
14
+ "primary": "#6a9955",
15
+ "muted": "#6a9955",
16
+ "user": "#6a9955",
17
+ "responder": "#6a9955",
18
+ "thinking": "#6a9955",
19
+ "tool": "#6a9955"
20
+ },
21
+ "input": {
22
+ "bg": "#000000",
23
+ "fg": "#6a9955",
24
+ "placeholder": "#3b7a3b",
25
+ "border": "#6a9955"
26
+ },
27
+ "status": {
28
+ "fg": "#6a9955",
29
+ "muted": "#6a9955"
30
+ },
31
+ "accent": {
32
+ "primary": "#6a9955",
33
+ "secondary": "#6a9955",
34
+ "warning": "#6a9955",
35
+ "error": "#6a9955",
36
+ "success": "#00ff00"
37
+ },
38
+ "selection": {
39
+ "fg": "#000000",
40
+ "bg": "#6a9955"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#6a9955",
44
+ "addedFg": "#000000",
45
+ "removedBg": "#6a9955",
46
+ "removedFg": "#000000"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#6a9955",
50
+ "track": "#1a3318"
51
+ },
52
+ "message": {
53
+ "userBorder": "#6a9955",
54
+ "systemBorder": "#00ff00",
55
+ "systemText": "#00ff00",
56
+ "systemBg": "#0a1a0a"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "NoColor",
3
+ "slug": "nocolor",
4
+ "kind": "dark",
5
+ "colors": {
6
+ "background": "#0f172a",
7
+ "panel": {
8
+ "bg": "#0f172a",
9
+ "border": "#94a3b8",
10
+ "headerBg": "#0f172a",
11
+ "headerFg": "#e5e7eb"
12
+ },
13
+ "text": {
14
+ "primary": "#e5e7eb",
15
+ "muted": "#94a3b8",
16
+ "user": "#e5e7eb",
17
+ "responder": "#e5e7eb",
18
+ "thinking": "#94a3b8",
19
+ "tool": "#e5e7eb"
20
+ },
21
+ "input": {
22
+ "bg": "#0f172a",
23
+ "fg": "#e5e7eb",
24
+ "placeholder": "#94a3b8",
25
+ "border": "#94a3b8"
26
+ },
27
+ "status": {
28
+ "fg": "#e5e7eb",
29
+ "muted": "#94a3b8"
30
+ },
31
+ "accent": {
32
+ "primary": "#e5e7eb",
33
+ "secondary": "#e5e7eb",
34
+ "warning": "#e5e7eb",
35
+ "error": "#e5e7eb",
36
+ "success": "#e5e7eb"
37
+ },
38
+ "selection": {
39
+ "fg": "#0f172a",
40
+ "bg": "#e5e7eb"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#e5e7eb",
44
+ "addedFg": "#e5e7eb",
45
+ "removedBg": "#e5e7eb",
46
+ "removedFg": "#e5e7eb"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#e5e7eb",
50
+ "track": "#94a3b8"
51
+ },
52
+ "message": {
53
+ "userBorder": "#e5e7eb",
54
+ "systemBorder": "#e5e7eb",
55
+ "systemText": "#e5e7eb",
56
+ "systemBg": "#1a2435"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "Shades Of Purple",
3
+ "slug": "shades-of-purple",
4
+ "kind": "dark",
5
+ "colors": {
6
+ "background": "#2d2b57",
7
+ "panel": {
8
+ "bg": "#2d2b57",
9
+ "border": "#726c86",
10
+ "headerBg": "#2d2b57",
11
+ "headerFg": "#e3dfff"
12
+ },
13
+ "text": {
14
+ "primary": "#e3dfff",
15
+ "muted": "#B362FF",
16
+ "user": "#847ace",
17
+ "responder": "#fad000",
18
+ "thinking": "#726c86",
19
+ "tool": "#A5FF90"
20
+ },
21
+ "input": {
22
+ "bg": "#2d2b57",
23
+ "fg": "#e3dfff",
24
+ "placeholder": "#B362FF",
25
+ "border": "#726c86"
26
+ },
27
+ "status": {
28
+ "fg": "#A5FF90",
29
+ "muted": "#B362FF"
30
+ },
31
+ "accent": {
32
+ "primary": "#a599e9",
33
+ "secondary": "#ac65ff",
34
+ "warning": "#fad000",
35
+ "error": "#ff628c",
36
+ "success": "#A5FF90"
37
+ },
38
+ "selection": {
39
+ "fg": "#0f172a",
40
+ "bg": "#a599e9"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#383E45",
44
+ "addedFg": "#e3dfff",
45
+ "removedBg": "#572244",
46
+ "removedFg": "#e3dfff"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#a599e9",
50
+ "track": "#726c86"
51
+ },
52
+ "message": {
53
+ "userBorder": "#847ace",
54
+ "systemBorder": "#fad000",
55
+ "systemText": "#fad000",
56
+ "systemBg": "#3a3866"
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "Xcode",
3
+ "slug": "xcode",
4
+ "kind": "light",
5
+ "colors": {
6
+ "background": "#fff",
7
+ "panel": {
8
+ "bg": "#fff",
9
+ "border": "#c0c0c0",
10
+ "headerBg": "#fff",
11
+ "headerFg": "#444"
12
+ },
13
+ "text": {
14
+ "primary": "#444",
15
+ "muted": "#007400",
16
+ "user": "#0E0EFF",
17
+ "responder": "#836C28",
18
+ "thinking": "#c0c0c0",
19
+ "tool": "#007400"
20
+ },
21
+ "input": {
22
+ "bg": "#fff",
23
+ "fg": "#444",
24
+ "placeholder": "#007400",
25
+ "border": "#c0c0c0"
26
+ },
27
+ "status": {
28
+ "fg": "#007400",
29
+ "muted": "#007400"
30
+ },
31
+ "accent": {
32
+ "primary": "#1c00cf",
33
+ "secondary": "#aa0d91",
34
+ "warning": "#836C28",
35
+ "error": "#c41a16",
36
+ "success": "#007400"
37
+ },
38
+ "selection": {
39
+ "fg": "#f8fafc",
40
+ "bg": "#1c00cf"
41
+ },
42
+ "diff": {
43
+ "addedBg": "#C6EAD8",
44
+ "addedFg": "#444",
45
+ "removedBg": "#FEDEDE",
46
+ "removedFg": "#444"
47
+ },
48
+ "scrollbar": {
49
+ "thumb": "#1c00cf",
50
+ "track": "#c0c0c0"
51
+ },
52
+ "message": {
53
+ "userBorder": "#0E0EFF",
54
+ "systemBorder": "#836C28",
55
+ "systemText": "#836C28",
56
+ "systemBg": "#f5f5f5"
57
+ }
58
+ }
59
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "lib": ["ESNext", "DOM", "DOM.Iterable"],
7
+ "jsx": "react-jsx",
8
+ "jsxImportSource": "@vybestack/opentui-react",
9
+ "strict": true,
10
+ "noImplicitAny": true,
11
+ "strictNullChecks": true,
12
+ "resolveJsonModule": true,
13
+ "esModuleInterop": true,
14
+ "allowSyntheticDefaultImports": true,
15
+ "allowImportingTsExtensions": true,
16
+ "noEmit": true,
17
+ "types": ["node", "bun", "vitest/globals"],
18
+ "skipLibCheck": true,
19
+ "baseUrl": ".",
20
+ "paths": {
21
+ "@vybestack/llxprt-code-core": ["../core/src/index.ts"],
22
+ "@vybestack/llxprt-code-core/*": ["../core/src/*"]
23
+ }
24
+ },
25
+ "include": ["src", "scripts"],
26
+ "exclude": ["node_modules", "dist"],
27
+ "references": [{ "path": "../core" }]
28
+ }
@@ -0,0 +1,10 @@
1
+ import { defineConfig } from 'vitest/config';
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ include: ['src/**/*.test.ts'],
6
+ exclude: ['reference/**'],
7
+ globals: true,
8
+ environment: 'happy-dom',
9
+ },
10
+ });