@tokentop/ttop 0.2.2 → 0.4.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 (160) hide show
  1. package/README.md +2 -5
  2. package/package.json +8 -5
  3. package/src/agents/aggregator.ts +39 -19
  4. package/src/agents/costing.ts +11 -9
  5. package/src/agents/index.ts +7 -9
  6. package/src/agents/types.ts +2 -2
  7. package/src/cli.ts +28 -23
  8. package/src/config/schema.test.ts +42 -40
  9. package/src/config/schema.ts +26 -26
  10. package/src/demo/simulator.ts +161 -122
  11. package/src/plugins/agents/index.ts +2 -2
  12. package/src/plugins/auth-sources.ts +42 -38
  13. package/src/plugins/lifecycle.ts +42 -38
  14. package/src/plugins/loader.test.ts +49 -49
  15. package/src/plugins/loader.ts +67 -63
  16. package/src/plugins/notification-bus.ts +21 -16
  17. package/src/plugins/notifications/index.ts +2 -2
  18. package/src/plugins/notifications/terminal-bell.ts +36 -23
  19. package/src/plugins/notifications/visual-flash.ts +31 -19
  20. package/src/plugins/npm-installer.ts +23 -25
  21. package/src/plugins/plugin-context-factory.ts +10 -10
  22. package/src/plugins/plugin-host.ts +12 -5
  23. package/src/plugins/providers/anthropic.ts +64 -57
  24. package/src/plugins/providers/antigravity.ts +81 -69
  25. package/src/plugins/providers/codex.ts +42 -42
  26. package/src/plugins/providers/gemini.ts +106 -87
  27. package/src/plugins/providers/github-copilot.ts +49 -45
  28. package/src/plugins/providers/index.ts +10 -12
  29. package/src/plugins/providers/minimax.ts +50 -44
  30. package/src/plugins/providers/openai-api.ts +82 -62
  31. package/src/plugins/providers/opencode-zen.ts +46 -39
  32. package/src/plugins/providers/perplexity.ts +55 -46
  33. package/src/plugins/providers/zai.ts +68 -57
  34. package/src/plugins/registry.ts +80 -71
  35. package/src/plugins/sandbox-guard.test.ts +45 -48
  36. package/src/plugins/sandbox-guard.ts +20 -25
  37. package/src/plugins/sandbox.ts +26 -48
  38. package/src/plugins/themes/catppuccin-latte.ts +29 -29
  39. package/src/plugins/themes/catppuccin-mocha.ts +29 -29
  40. package/src/plugins/themes/claude-code.ts +29 -29
  41. package/src/plugins/themes/dracula.ts +29 -29
  42. package/src/plugins/themes/github-light.ts +29 -29
  43. package/src/plugins/themes/gruvbox-dark.ts +29 -29
  44. package/src/plugins/themes/gruvbox-light.ts +29 -29
  45. package/src/plugins/themes/index.ts +15 -15
  46. package/src/plugins/themes/kanagawa.ts +29 -29
  47. package/src/plugins/themes/nord.ts +29 -29
  48. package/src/plugins/themes/one-dark.ts +29 -29
  49. package/src/plugins/themes/opencode.ts +31 -31
  50. package/src/plugins/themes/rose-pine-dawn.ts +29 -29
  51. package/src/plugins/themes/rose-pine.ts +29 -29
  52. package/src/plugins/themes/solarized-light.ts +29 -29
  53. package/src/plugins/themes/tokyo-night.ts +29 -29
  54. package/src/plugins/types/agent.ts +5 -5
  55. package/src/plugins/types/base.ts +35 -24
  56. package/src/plugins/types/index.ts +9 -9
  57. package/src/plugins/types/notification.ts +12 -12
  58. package/src/plugins/types/provider.ts +12 -8
  59. package/src/plugins/types/theme.ts +31 -23
  60. package/src/plugins/update-checker.ts +6 -6
  61. package/src/pricing/estimator.test.ts +39 -44
  62. package/src/pricing/estimator.ts +7 -13
  63. package/src/pricing/fallback.test.ts +30 -34
  64. package/src/pricing/fallback.ts +54 -27
  65. package/src/pricing/index.ts +18 -12
  66. package/src/pricing/models-dev.ts +6 -6
  67. package/src/storage/database.ts +56 -46
  68. package/src/storage/db.ts +12 -12
  69. package/src/storage/index.ts +44 -45
  70. package/src/storage/migrations/index.ts +2 -2
  71. package/src/storage/paths.ts +13 -13
  72. package/src/storage/persistence-service.ts +206 -0
  73. package/src/storage/repos/agentSessions.ts +33 -23
  74. package/src/storage/repos/providerSnapshots.ts +5 -5
  75. package/src/storage/repos/usageEvents.ts +40 -28
  76. package/src/storage/retention.ts +146 -0
  77. package/src/storage/types.ts +5 -5
  78. package/src/tui/App.tsx +180 -137
  79. package/src/tui/components/CommandPalette.tsx +46 -34
  80. package/src/tui/components/DebugConsole.tsx +39 -33
  81. package/src/tui/components/DebugPanel.tsx +314 -183
  82. package/src/tui/components/FooterHints.tsx +2 -2
  83. package/src/tui/components/GhostProviderCard.tsx +37 -35
  84. package/src/tui/components/Header.tsx +68 -35
  85. package/src/tui/components/HelpOverlay.tsx +99 -29
  86. package/src/tui/components/InlineGauge.tsx +10 -7
  87. package/src/tui/components/InlineSparkline.tsx +17 -11
  88. package/src/tui/components/KpiStrip.tsx +128 -98
  89. package/src/tui/components/LimitGauge.tsx +96 -59
  90. package/src/tui/components/ModalBackdrop.tsx +4 -4
  91. package/src/tui/components/ProviderAggregateStrip.tsx +69 -38
  92. package/src/tui/components/ProviderCard.tsx +232 -226
  93. package/src/tui/components/ProviderDetailPanel.tsx +133 -58
  94. package/src/tui/components/ProviderLimitsPanel.tsx +126 -89
  95. package/src/tui/components/ProvidersList.tsx +215 -126
  96. package/src/tui/components/SessionDetailsDrawer.tsx +191 -94
  97. package/src/tui/components/SessionsTable.tsx +320 -169
  98. package/src/tui/components/SettingsModal.tsx +593 -269
  99. package/src/tui/components/SidebarBreakdown.tsx +30 -16
  100. package/src/tui/components/Skeleton.tsx +24 -17
  101. package/src/tui/components/SmartSidebar.tsx +360 -258
  102. package/src/tui/components/Sparkline.tsx +64 -52
  103. package/src/tui/components/Spinner.tsx +3 -3
  104. package/src/tui/components/StatusBar.tsx +27 -27
  105. package/src/tui/components/ThemePicker.tsx +67 -66
  106. package/src/tui/components/Toast.tsx +9 -6
  107. package/src/tui/components/UsageGauge.tsx +10 -13
  108. package/src/tui/components/index.ts +5 -5
  109. package/src/tui/contexts/AgentSessionContext.tsx +164 -151
  110. package/src/tui/contexts/ConfigContext.tsx +15 -13
  111. package/src/tui/contexts/DashboardRuntimeContext.tsx +26 -26
  112. package/src/tui/contexts/DemoModeContext.tsx +22 -15
  113. package/src/tui/contexts/DrawerContext.tsx +11 -9
  114. package/src/tui/contexts/InputContext.tsx +2 -2
  115. package/src/tui/contexts/LogContext.tsx +62 -47
  116. package/src/tui/contexts/PluginContext.tsx +238 -183
  117. package/src/tui/contexts/RealTimeActivityContext.tsx +70 -36
  118. package/src/tui/contexts/StorageContext.tsx +95 -149
  119. package/src/tui/contexts/ThemeContext.tsx +21 -16
  120. package/src/tui/contexts/TimeWindowContext.tsx +72 -61
  121. package/src/tui/contexts/ToastContext.tsx +10 -7
  122. package/src/tui/contexts/index.ts +9 -5
  123. package/src/tui/createApp.tsx +8 -12
  124. package/src/tui/debug/captureFrame.ts +25 -28
  125. package/src/tui/debug/snapshot.tsx +179 -162
  126. package/src/tui/driver/assertions.ts +30 -22
  127. package/src/tui/driver/cli.ts +231 -221
  128. package/src/tui/driver/coverage.ts +27 -44
  129. package/src/tui/driver/demo-snapshot.ts +33 -33
  130. package/src/tui/driver/diff.ts +26 -32
  131. package/src/tui/driver/driver.ts +43 -48
  132. package/src/tui/driver/index.ts +36 -40
  133. package/src/tui/driver/recorder.ts +37 -48
  134. package/src/tui/driver/test-workflow.ts +51 -51
  135. package/src/tui/driver/test.ts +25 -25
  136. package/src/tui/hooks/index.ts +24 -20
  137. package/src/tui/hooks/useAnimatedValue.ts +13 -18
  138. package/src/tui/hooks/useDashboardKeyboard.ts +118 -98
  139. package/src/tui/hooks/useDashboardState.ts +26 -24
  140. package/src/tui/hooks/useEmaActivity.ts +82 -74
  141. package/src/tui/hooks/useEntranceAnimation.ts +11 -11
  142. package/src/tui/hooks/useExitAnimation.ts +7 -3
  143. package/src/tui/hooks/usePulse.ts +4 -4
  144. package/src/tui/hooks/useSafeRenderer.ts +5 -5
  145. package/src/tui/hooks/useSessionEnrichedProviders.ts +150 -0
  146. package/src/tui/hooks/useValueFlash.ts +10 -14
  147. package/src/tui/index.tsx +29 -6
  148. package/src/tui/shutdown.ts +19 -0
  149. package/src/tui/utils/providerColor.ts +1 -1
  150. package/src/tui/views/Dashboard.tsx +164 -102
  151. package/src/tui/views/HistoricalTrendsView.tsx +579 -250
  152. package/src/tui/views/ProjectsView.tsx +495 -243
  153. package/src/tui/views/RealTimeDashboard.tsx +176 -116
  154. package/src/tui/views/SettingsView.tsx +225 -189
  155. package/src/tui/views/index.ts +2 -2
  156. package/src/types/opentui-test-utils.d.ts +7 -7
  157. package/src/utils/clipboard.ts +29 -29
  158. package/src/utils/currency.test.ts +53 -53
  159. package/src/utils/currency.ts +35 -32
  160. package/src/version.ts +1 -1
@@ -1,22 +1,18 @@
1
1
  import {
2
- PluginPermissionError,
3
- type PluginPermissions,
4
2
  type PluginHttpClient,
5
3
  type PluginLogger,
6
- } from './types/index.ts';
4
+ PluginPermissionError,
5
+ type PluginPermissions,
6
+ } from "./types/index.ts";
7
7
 
8
8
  export function createSandboxedHttpClient(
9
9
  pluginId: string,
10
- permissions: PluginPermissions
10
+ permissions: PluginPermissions,
11
11
  ): PluginHttpClient {
12
12
  return {
13
13
  async fetch(url: string, init?: RequestInit): Promise<Response> {
14
14
  if (!permissions.network?.enabled) {
15
- throw new PluginPermissionError(
16
- pluginId,
17
- 'network',
18
- 'Network access not permitted'
19
- );
15
+ throw new PluginPermissionError(pluginId, "network", "Network access not permitted");
20
16
  }
21
17
 
22
18
  const urlObj = new URL(url);
@@ -24,16 +20,14 @@ export function createSandboxedHttpClient(
24
20
 
25
21
  if (allowedDomains && allowedDomains.length > 0) {
26
22
  const isAllowed = allowedDomains.some(
27
- (domain) =>
28
- urlObj.hostname === domain ||
29
- urlObj.hostname.endsWith(`.${domain}`)
23
+ (domain) => urlObj.hostname === domain || urlObj.hostname.endsWith(`.${domain}`),
30
24
  );
31
25
 
32
26
  if (!isAllowed) {
33
27
  throw new PluginPermissionError(
34
28
  pluginId,
35
- 'network',
36
- `Domain "${urlObj.hostname}" not in allowlist: ${allowedDomains.join(', ')}`
29
+ "network",
30
+ `Domain "${urlObj.hostname}" not in allowlist: ${allowedDomains.join(", ")}`,
37
31
  );
38
32
  }
39
33
  }
@@ -49,17 +43,17 @@ export function createPluginLogger(pluginId: string): PluginLogger {
49
43
  return {
50
44
  debug(message: string, data?: Record<string, unknown>) {
51
45
  if (process.env.DEBUG) {
52
- console.debug(prefix, message, data ?? '');
46
+ console.debug(prefix, message, data ?? "");
53
47
  }
54
48
  },
55
49
  info(message: string, data?: Record<string, unknown>) {
56
- console.info(prefix, message, data ?? '');
50
+ console.info(prefix, message, data ?? "");
57
51
  },
58
52
  warn(message: string, data?: Record<string, unknown>) {
59
- console.warn(prefix, message, data ?? '');
53
+ console.warn(prefix, message, data ?? "");
60
54
  },
61
55
  error(message: string, data?: Record<string, unknown>) {
62
- console.error(prefix, message, data ?? '');
56
+ console.error(prefix, message, data ?? "");
63
57
  },
64
58
  };
65
59
  }
@@ -67,22 +61,18 @@ export function createPluginLogger(pluginId: string): PluginLogger {
67
61
  export function validateEnvAccess(
68
62
  pluginId: string,
69
63
  permissions: PluginPermissions,
70
- varName: string
64
+ varName: string,
71
65
  ): void {
72
66
  if (!permissions.env?.read) {
73
- throw new PluginPermissionError(
74
- pluginId,
75
- 'env',
76
- 'Environment variable access not permitted'
77
- );
67
+ throw new PluginPermissionError(pluginId, "env", "Environment variable access not permitted");
78
68
  }
79
69
 
80
70
  const allowedVars = permissions.env.vars;
81
71
  if (allowedVars && allowedVars.length > 0 && !allowedVars.includes(varName)) {
82
72
  throw new PluginPermissionError(
83
73
  pluginId,
84
- 'env',
85
- `Environment variable "${varName}" not in allowlist`
74
+ "env",
75
+ `Environment variable "${varName}" not in allowlist`,
86
76
  );
87
77
  }
88
78
  }
@@ -91,48 +81,36 @@ export function validateFilesystemAccess(
91
81
  pluginId: string,
92
82
  permissions: PluginPermissions,
93
83
  path: string,
94
- mode: 'read' | 'write'
84
+ mode: "read" | "write",
95
85
  ): void {
96
86
  const fsPerms = permissions.filesystem;
97
87
 
98
88
  if (!fsPerms) {
99
- throw new PluginPermissionError(
100
- pluginId,
101
- 'filesystem',
102
- 'Filesystem access not permitted'
103
- );
89
+ throw new PluginPermissionError(pluginId, "filesystem", "Filesystem access not permitted");
104
90
  }
105
91
 
106
- if (mode === 'read' && !fsPerms.read) {
107
- throw new PluginPermissionError(
108
- pluginId,
109
- 'filesystem',
110
- 'Filesystem read access not permitted'
111
- );
92
+ if (mode === "read" && !fsPerms.read) {
93
+ throw new PluginPermissionError(pluginId, "filesystem", "Filesystem read access not permitted");
112
94
  }
113
95
 
114
- if (mode === 'write' && !fsPerms.write) {
96
+ if (mode === "write" && !fsPerms.write) {
115
97
  throw new PluginPermissionError(
116
98
  pluginId,
117
- 'filesystem',
118
- 'Filesystem write access not permitted'
99
+ "filesystem",
100
+ "Filesystem write access not permitted",
119
101
  );
120
102
  }
121
103
 
122
104
  const allowedPaths = fsPerms.paths;
123
105
  if (allowedPaths && allowedPaths.length > 0) {
124
- const normalizedPath = path.replace(/^~/, process.env.HOME ?? '');
106
+ const normalizedPath = path.replace(/^~/, process.env.HOME ?? "");
125
107
  const isAllowed = allowedPaths.some((allowed) => {
126
- const normalizedAllowed = allowed.replace(/^~/, process.env.HOME ?? '');
108
+ const normalizedAllowed = allowed.replace(/^~/, process.env.HOME ?? "");
127
109
  return normalizedPath.startsWith(normalizedAllowed);
128
110
  });
129
111
 
130
112
  if (!isAllowed) {
131
- throw new PluginPermissionError(
132
- pluginId,
133
- 'filesystem',
134
- `Path "${path}" not in allowlist`
135
- );
113
+ throw new PluginPermissionError(pluginId, "filesystem", `Path "${path}" not in allowlist`);
136
114
  }
137
115
  }
138
116
  }
@@ -1,45 +1,45 @@
1
- import type { ThemePlugin } from '../types/theme.ts';
1
+ import type { ThemePlugin } from "../types/theme.ts";
2
2
 
3
3
  export const catppuccinLatteTheme: ThemePlugin = {
4
4
  apiVersion: 2,
5
- id: 'catppuccin-latte',
6
- type: 'theme',
7
- name: 'Catppuccin Latte',
8
- family: 'catppuccin',
9
- version: '1.0.0',
5
+ id: "catppuccin-latte",
6
+ type: "theme",
7
+ name: "Catppuccin Latte",
8
+ family: "catppuccin",
9
+ version: "1.0.0",
10
10
  permissions: {},
11
11
 
12
- colorScheme: 'light',
12
+ colorScheme: "light",
13
13
 
14
14
  colors: {
15
- background: '#eff1f5',
16
- foreground: '#e6e9ef',
17
- text: '#4c4f69',
18
- textMuted: '#6c6f85',
19
- textSubtle: '#9ca0b0',
20
- primary: '#1e66f5',
21
- secondary: '#8839ef',
22
- accent: '#179299',
23
- success: '#40a02b',
24
- warning: '#df8e1d',
25
- error: '#d20f39',
26
- info: '#04a5e5',
27
- border: '#bcc0cc',
28
- borderMuted: '#ccd0da',
29
- selection: '#dce0e8',
30
- highlight: '#e6e9ef',
31
- gaugeBackground: '#ccd0da',
32
- gaugeFill: '#1e66f5',
33
- gaugeWarning: '#df8e1d',
34
- gaugeDanger: '#d20f39',
15
+ background: "#eff1f5",
16
+ foreground: "#e6e9ef",
17
+ text: "#4c4f69",
18
+ textMuted: "#6c6f85",
19
+ textSubtle: "#9ca0b0",
20
+ primary: "#1e66f5",
21
+ secondary: "#8839ef",
22
+ accent: "#179299",
23
+ success: "#40a02b",
24
+ warning: "#df8e1d",
25
+ error: "#d20f39",
26
+ info: "#04a5e5",
27
+ border: "#bcc0cc",
28
+ borderMuted: "#ccd0da",
29
+ selection: "#dce0e8",
30
+ highlight: "#e6e9ef",
31
+ gaugeBackground: "#ccd0da",
32
+ gaugeFill: "#1e66f5",
33
+ gaugeWarning: "#df8e1d",
34
+ gaugeDanger: "#d20f39",
35
35
  },
36
36
 
37
37
  components: {
38
38
  header: {
39
- background: '#e6e9ef',
39
+ background: "#e6e9ef",
40
40
  },
41
41
  statusBar: {
42
- background: '#dce0e8',
42
+ background: "#dce0e8",
43
43
  },
44
44
  },
45
45
  };
@@ -1,45 +1,45 @@
1
- import type { ThemePlugin } from '../types/theme.ts';
1
+ import type { ThemePlugin } from "../types/theme.ts";
2
2
 
3
3
  export const catppuccinMochaTheme: ThemePlugin = {
4
4
  apiVersion: 2,
5
- id: 'catppuccin-mocha',
6
- type: 'theme',
7
- name: 'Catppuccin Mocha',
8
- family: 'catppuccin',
9
- version: '1.0.0',
5
+ id: "catppuccin-mocha",
6
+ type: "theme",
7
+ name: "Catppuccin Mocha",
8
+ family: "catppuccin",
9
+ version: "1.0.0",
10
10
  permissions: {},
11
11
 
12
- colorScheme: 'dark',
12
+ colorScheme: "dark",
13
13
 
14
14
  colors: {
15
- background: '#1e1e2e',
16
- foreground: '#313244',
17
- text: '#cdd6f4',
18
- textMuted: '#a6adc8',
19
- textSubtle: '#6c7086',
20
- primary: '#89b4fa',
21
- secondary: '#cba6f7',
22
- accent: '#94e2d5',
23
- success: '#a6e3a1',
24
- warning: '#f9e2af',
25
- error: '#f38ba8',
26
- info: '#89dceb',
27
- border: '#45475a',
28
- borderMuted: '#313244',
29
- selection: '#45475a',
30
- highlight: '#313244',
31
- gaugeBackground: '#313244',
32
- gaugeFill: '#89b4fa',
33
- gaugeWarning: '#f9e2af',
34
- gaugeDanger: '#f38ba8',
15
+ background: "#1e1e2e",
16
+ foreground: "#313244",
17
+ text: "#cdd6f4",
18
+ textMuted: "#a6adc8",
19
+ textSubtle: "#6c7086",
20
+ primary: "#89b4fa",
21
+ secondary: "#cba6f7",
22
+ accent: "#94e2d5",
23
+ success: "#a6e3a1",
24
+ warning: "#f9e2af",
25
+ error: "#f38ba8",
26
+ info: "#89dceb",
27
+ border: "#45475a",
28
+ borderMuted: "#313244",
29
+ selection: "#45475a",
30
+ highlight: "#313244",
31
+ gaugeBackground: "#313244",
32
+ gaugeFill: "#89b4fa",
33
+ gaugeWarning: "#f9e2af",
34
+ gaugeDanger: "#f38ba8",
35
35
  },
36
36
 
37
37
  components: {
38
38
  header: {
39
- background: '#181825',
39
+ background: "#181825",
40
40
  },
41
41
  statusBar: {
42
- background: '#11111b',
42
+ background: "#11111b",
43
43
  },
44
44
  },
45
45
  };
@@ -1,45 +1,45 @@
1
- import type { ThemePlugin } from '../types/theme.ts';
1
+ import type { ThemePlugin } from "../types/theme.ts";
2
2
 
3
3
  export const claudeCodeTheme: ThemePlugin = {
4
4
  apiVersion: 2,
5
- id: 'claude-code',
6
- type: 'theme',
7
- name: 'Claude Code',
8
- family: 'claude-code',
9
- version: '1.0.0',
5
+ id: "claude-code",
6
+ type: "theme",
7
+ name: "Claude Code",
8
+ family: "claude-code",
9
+ version: "1.0.0",
10
10
  permissions: {},
11
11
 
12
- colorScheme: 'dark',
12
+ colorScheme: "dark",
13
13
 
14
14
  colors: {
15
- background: '#000000',
16
- foreground: '#373737',
17
- text: '#ffffff',
18
- textMuted: '#999999',
19
- textSubtle: '#505050',
20
- primary: '#D77757',
21
- secondary: '#B1B9F9',
22
- accent: '#EB9F7F',
23
- success: '#4EBA65',
24
- warning: '#FFC107',
25
- error: '#FF6B80',
26
- info: '#93A5FF',
27
- border: '#505050',
28
- borderMuted: '#373737',
29
- selection: '#413C41',
30
- highlight: '#374146',
31
- gaugeBackground: '#373737',
32
- gaugeFill: '#D77757',
33
- gaugeWarning: '#FFC107',
34
- gaugeDanger: '#FF6B80',
15
+ background: "#000000",
16
+ foreground: "#373737",
17
+ text: "#ffffff",
18
+ textMuted: "#999999",
19
+ textSubtle: "#505050",
20
+ primary: "#D77757",
21
+ secondary: "#B1B9F9",
22
+ accent: "#EB9F7F",
23
+ success: "#4EBA65",
24
+ warning: "#FFC107",
25
+ error: "#FF6B80",
26
+ info: "#93A5FF",
27
+ border: "#505050",
28
+ borderMuted: "#373737",
29
+ selection: "#413C41",
30
+ highlight: "#374146",
31
+ gaugeBackground: "#373737",
32
+ gaugeFill: "#D77757",
33
+ gaugeWarning: "#FFC107",
34
+ gaugeDanger: "#FF6B80",
35
35
  },
36
36
 
37
37
  components: {
38
38
  header: {
39
- background: '#000000',
39
+ background: "#000000",
40
40
  },
41
41
  statusBar: {
42
- background: '#373737',
42
+ background: "#373737",
43
43
  },
44
44
  },
45
45
  };
@@ -1,45 +1,45 @@
1
- import type { ThemePlugin } from '../types/theme.ts';
1
+ import type { ThemePlugin } from "../types/theme.ts";
2
2
 
3
3
  export const draculaTheme: ThemePlugin = {
4
4
  apiVersion: 2,
5
- id: 'dracula',
6
- type: 'theme',
7
- name: 'Dracula',
8
- family: 'dracula',
9
- version: '1.0.0',
5
+ id: "dracula",
6
+ type: "theme",
7
+ name: "Dracula",
8
+ family: "dracula",
9
+ version: "1.0.0",
10
10
  permissions: {},
11
11
 
12
- colorScheme: 'dark',
12
+ colorScheme: "dark",
13
13
 
14
14
  colors: {
15
- background: '#282a36',
16
- foreground: '#44475a',
17
- text: '#f8f8f2',
18
- textMuted: '#bfbfbf',
19
- textSubtle: '#6272a4',
20
- primary: '#bd93f9',
21
- secondary: '#ff79c6',
22
- accent: '#8be9fd',
23
- success: '#50fa7b',
24
- warning: '#ffb86c',
25
- error: '#ff5555',
26
- info: '#8be9fd',
27
- border: '#44475a',
28
- borderMuted: '#383a46',
29
- selection: '#44475a',
30
- highlight: '#383a46',
31
- gaugeBackground: '#44475a',
32
- gaugeFill: '#bd93f9',
33
- gaugeWarning: '#ffb86c',
34
- gaugeDanger: '#ff5555',
15
+ background: "#282a36",
16
+ foreground: "#44475a",
17
+ text: "#f8f8f2",
18
+ textMuted: "#bfbfbf",
19
+ textSubtle: "#6272a4",
20
+ primary: "#bd93f9",
21
+ secondary: "#ff79c6",
22
+ accent: "#8be9fd",
23
+ success: "#50fa7b",
24
+ warning: "#ffb86c",
25
+ error: "#ff5555",
26
+ info: "#8be9fd",
27
+ border: "#44475a",
28
+ borderMuted: "#383a46",
29
+ selection: "#44475a",
30
+ highlight: "#383a46",
31
+ gaugeBackground: "#44475a",
32
+ gaugeFill: "#bd93f9",
33
+ gaugeWarning: "#ffb86c",
34
+ gaugeDanger: "#ff5555",
35
35
  },
36
36
 
37
37
  components: {
38
38
  header: {
39
- background: '#21222c',
39
+ background: "#21222c",
40
40
  },
41
41
  statusBar: {
42
- background: '#191a21',
42
+ background: "#191a21",
43
43
  },
44
44
  },
45
45
  };
@@ -1,45 +1,45 @@
1
- import type { ThemePlugin } from '../types/theme.ts';
1
+ import type { ThemePlugin } from "../types/theme.ts";
2
2
 
3
3
  export const githubLightTheme: ThemePlugin = {
4
4
  apiVersion: 2,
5
- id: 'github-light',
6
- type: 'theme',
7
- name: 'GitHub Light',
8
- family: 'github',
9
- version: '1.0.0',
5
+ id: "github-light",
6
+ type: "theme",
7
+ name: "GitHub Light",
8
+ family: "github",
9
+ version: "1.0.0",
10
10
  permissions: {},
11
11
 
12
- colorScheme: 'light',
12
+ colorScheme: "light",
13
13
 
14
14
  colors: {
15
- background: '#ffffff',
16
- foreground: '#f6f8fa',
17
- text: '#1f2328',
18
- textMuted: '#59636e',
19
- textSubtle: '#656d76',
20
- primary: '#0969da',
21
- secondary: '#8250df',
22
- accent: '#0550ae',
23
- success: '#1a7f37',
24
- warning: '#9a6700',
25
- error: '#cf222e',
26
- info: '#0969da',
27
- border: '#d0d7de',
28
- borderMuted: '#d8dee4',
29
- selection: '#ddf4ff',
30
- highlight: '#f6f8fa',
31
- gaugeBackground: '#d0d7de',
32
- gaugeFill: '#0969da',
33
- gaugeWarning: '#9a6700',
34
- gaugeDanger: '#cf222e',
15
+ background: "#ffffff",
16
+ foreground: "#f6f8fa",
17
+ text: "#1f2328",
18
+ textMuted: "#59636e",
19
+ textSubtle: "#656d76",
20
+ primary: "#0969da",
21
+ secondary: "#8250df",
22
+ accent: "#0550ae",
23
+ success: "#1a7f37",
24
+ warning: "#9a6700",
25
+ error: "#cf222e",
26
+ info: "#0969da",
27
+ border: "#d0d7de",
28
+ borderMuted: "#d8dee4",
29
+ selection: "#ddf4ff",
30
+ highlight: "#f6f8fa",
31
+ gaugeBackground: "#d0d7de",
32
+ gaugeFill: "#0969da",
33
+ gaugeWarning: "#9a6700",
34
+ gaugeDanger: "#cf222e",
35
35
  },
36
36
 
37
37
  components: {
38
38
  header: {
39
- background: '#f6f8fa',
39
+ background: "#f6f8fa",
40
40
  },
41
41
  statusBar: {
42
- background: '#f6f8fa',
42
+ background: "#f6f8fa",
43
43
  },
44
44
  },
45
45
  };
@@ -1,45 +1,45 @@
1
- import type { ThemePlugin } from '../types/theme.ts';
1
+ import type { ThemePlugin } from "../types/theme.ts";
2
2
 
3
3
  export const gruvboxDarkTheme: ThemePlugin = {
4
4
  apiVersion: 2,
5
- id: 'gruvbox-dark',
6
- type: 'theme',
7
- name: 'Gruvbox Dark',
8
- family: 'gruvbox',
9
- version: '1.0.0',
5
+ id: "gruvbox-dark",
6
+ type: "theme",
7
+ name: "Gruvbox Dark",
8
+ family: "gruvbox",
9
+ version: "1.0.0",
10
10
  permissions: {},
11
11
 
12
- colorScheme: 'dark',
12
+ colorScheme: "dark",
13
13
 
14
14
  colors: {
15
- background: '#282828',
16
- foreground: '#3c3836',
17
- text: '#ebdbb2',
18
- textMuted: '#bdae93',
19
- textSubtle: '#665c54',
20
- primary: '#83a598',
21
- secondary: '#d3869b',
22
- accent: '#8ec07c',
23
- success: '#b8bb26',
24
- warning: '#fabd2f',
25
- error: '#fb4934',
26
- info: '#83a598',
27
- border: '#504945',
28
- borderMuted: '#3c3836',
29
- selection: '#504945',
30
- highlight: '#3c3836',
31
- gaugeBackground: '#3c3836',
32
- gaugeFill: '#83a598',
33
- gaugeWarning: '#fabd2f',
34
- gaugeDanger: '#fb4934',
15
+ background: "#282828",
16
+ foreground: "#3c3836",
17
+ text: "#ebdbb2",
18
+ textMuted: "#bdae93",
19
+ textSubtle: "#665c54",
20
+ primary: "#83a598",
21
+ secondary: "#d3869b",
22
+ accent: "#8ec07c",
23
+ success: "#b8bb26",
24
+ warning: "#fabd2f",
25
+ error: "#fb4934",
26
+ info: "#83a598",
27
+ border: "#504945",
28
+ borderMuted: "#3c3836",
29
+ selection: "#504945",
30
+ highlight: "#3c3836",
31
+ gaugeBackground: "#3c3836",
32
+ gaugeFill: "#83a598",
33
+ gaugeWarning: "#fabd2f",
34
+ gaugeDanger: "#fb4934",
35
35
  },
36
36
 
37
37
  components: {
38
38
  header: {
39
- background: '#1d2021',
39
+ background: "#1d2021",
40
40
  },
41
41
  statusBar: {
42
- background: '#1d2021',
42
+ background: "#1d2021",
43
43
  },
44
44
  },
45
45
  };