mixdog 0.9.1 → 0.9.2
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/package.json +8 -1
- package/scripts/_bench-cwc.json +20 -0
- package/scripts/agent-loop-policy-test.mjs +37 -0
- package/scripts/agent-parallel-smoke.mjs +54 -10
- package/scripts/background-task-meta-smoke.mjs +1 -1
- package/scripts/bench-run.mjs +262 -0
- package/scripts/compact-smoke.mjs +12 -0
- package/scripts/compact-trigger-migration-smoke.mjs +67 -1
- package/scripts/ingest-pure-conversation-smoke.mjs +148 -0
- package/scripts/internal-comms-bench.mjs +727 -0
- package/scripts/internal-comms-smoke.mjs +75 -0
- package/scripts/lead-workflow-smoke.mjs +4 -4
- package/scripts/live-worker-smoke.mjs +9 -9
- package/scripts/output-style-bench.mjs +285 -0
- package/scripts/output-style-smoke.mjs +13 -10
- package/scripts/patch-replay.mjs +90 -0
- package/scripts/provider-stream-stall-test.mjs +276 -0
- package/scripts/provider-toolcall-test.mjs +599 -1
- package/scripts/routing-corpus.mjs +281 -0
- package/scripts/session-bench.mjs +1526 -0
- package/scripts/session-diag.mjs +595 -0
- package/scripts/task-bench.mjs +207 -0
- package/scripts/tool-failures.mjs +6 -6
- package/scripts/tool-smoke.mjs +306 -66
- package/scripts/toolcall-args-test.mjs +81 -0
- package/src/agents/debugger/AGENT.md +4 -4
- package/src/agents/heavy-worker/AGENT.md +4 -2
- package/src/agents/reviewer/AGENT.md +4 -4
- package/src/agents/worker/AGENT.md +4 -2
- package/src/app.mjs +10 -6
- package/src/defaults/{hidden-roles.json → agents.json} +7 -7
- package/src/examples/schedules/SCHEDULE.example.md +32 -0
- package/src/examples/webhooks/WEBHOOK.example.md +40 -0
- package/src/headless-role.mjs +14 -14
- package/src/help.mjs +1 -0
- package/src/lib/rules-builder.cjs +32 -54
- package/src/mixdog-session-runtime.mjs +710 -318
- package/src/output-styles/default.md +12 -7
- package/src/output-styles/minimal.md +25 -0
- package/src/output-styles/oneline.md +21 -0
- package/src/output-styles/simple.md +10 -9
- package/src/repl.mjs +12 -2
- package/src/rules/agent/00-common.md +7 -5
- package/src/rules/agent/30-explorer.md +7 -8
- package/src/rules/lead/01-general.md +3 -1
- package/src/rules/lead/lead-tool.md +7 -0
- package/src/rules/shared/01-tool.md +17 -12
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +90 -32
- package/src/runtime/agent/orchestrator/agent-runtime/agent-loop-policy.mjs +32 -0
- package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +18 -6
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +23 -20
- package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +48 -14
- package/src/runtime/agent/orchestrator/agent-trace.mjs +87 -12
- package/src/runtime/agent/orchestrator/config.mjs +3 -0
- package/src/runtime/agent/orchestrator/context/collect.mjs +131 -67
- package/src/runtime/agent/orchestrator/{internal-roles.mjs → internal-agents.mjs} +72 -72
- package/src/runtime/agent/orchestrator/internal-tools.mjs +13 -26
- package/src/runtime/agent/orchestrator/mcp/client.mjs +94 -16
- package/src/runtime/agent/orchestrator/providers/anthropic-betas.mjs +7 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +188 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-leaked-toolcall.mjs +444 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +332 -57
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +59 -32
- package/src/runtime/agent/orchestrator/providers/api-usage.mjs +27 -20
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +184 -17
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +8 -1
- package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +18 -8
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +210 -21
- package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +78 -3
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +202 -98
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +183 -20
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +18 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +11 -5
- package/src/runtime/agent/orchestrator/providers/registry.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +15 -9
- package/src/runtime/agent/orchestrator/session/compact.mjs +560 -51
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +250 -3
- package/src/runtime/agent/orchestrator/session/loop.mjs +394 -132
- package/src/runtime/agent/orchestrator/session/manager.mjs +217 -170
- package/src/runtime/agent/orchestrator/session/store.mjs +4 -4
- package/src/runtime/agent/orchestrator/session/tool-envelope.mjs +61 -0
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +5 -0
- package/src/runtime/agent/orchestrator/stall-policy.mjs +63 -15
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +194 -24
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.test.mjs +143 -0
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +34 -18
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +0 -0
- package/src/runtime/agent/orchestrator/tools/builtin/list-formatting.mjs +10 -0
- package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +5 -4
- package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +15 -0
- package/src/runtime/agent/orchestrator/tools/builtin/read-args.mjs +9 -44
- package/src/runtime/agent/orchestrator/tools/builtin/read-constants.mjs +2 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +13 -4
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool.mjs +10 -17
- package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +18 -2
- package/src/runtime/agent/orchestrator/tools/builtin/shell-output.mjs +3 -2
- package/src/runtime/agent/orchestrator/tools/builtin/tool-output-limit.mjs +10 -0
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +59 -1
- package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +5 -5
- package/src/runtime/agent/orchestrator/tools/code-graph.mjs +4076 -3985
- package/src/runtime/agent/orchestrator/tools/patch.mjs +116 -2
- package/src/runtime/channels/backends/discord.mjs +99 -9
- package/src/runtime/channels/backends/telegram.mjs +501 -0
- package/src/runtime/channels/index.mjs +441 -1224
- package/src/runtime/channels/lib/config.mjs +54 -2
- package/src/runtime/channels/lib/format.mjs +4 -2
- package/src/runtime/channels/lib/output-forwarder.mjs +80 -67
- package/src/runtime/channels/lib/runtime-paths.mjs +29 -0
- package/src/runtime/channels/lib/scheduler.mjs +1 -1
- package/src/runtime/channels/lib/telegram-format.mjs +283 -0
- package/src/runtime/channels/lib/tool-format.mjs +1 -1
- package/src/runtime/channels/lib/transcript-discovery.mjs +19 -1
- package/src/runtime/channels/lib/webhook.mjs +59 -31
- package/src/runtime/channels/tool-defs.mjs +1 -1
- package/src/runtime/memory/index.mjs +184 -19
- package/src/runtime/memory/lib/agent-ipc.mjs +2 -2
- package/src/runtime/memory/lib/core-memory-store.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle1.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle2.mjs +9 -6
- package/src/runtime/memory/lib/memory-cycle3.mjs +1 -1
- package/src/runtime/memory/lib/memory.mjs +101 -4
- package/src/runtime/memory/lib/pg/adapter.mjs +139 -15
- package/src/runtime/memory/lib/session-ingest.mjs +107 -0
- package/src/runtime/memory/lib/trace-store.mjs +69 -22
- package/src/runtime/memory/tool-defs.mjs +6 -3
- package/src/runtime/shared/channel-notification-routing.mjs +12 -0
- package/src/runtime/shared/channel-notification-routing.test.mjs +45 -0
- package/src/runtime/shared/config.mjs +9 -0
- package/src/runtime/shared/llm/http-agent.mjs +12 -5
- package/src/runtime/shared/schedules-store.mjs +21 -19
- package/src/runtime/shared/tool-surface.mjs +98 -13
- package/src/runtime/shared/transcript-writer.mjs +129 -0
- package/src/runtime/shared/update-checker.mjs +214 -0
- package/src/standalone/agent-tool.mjs +255 -109
- package/src/standalone/channel-admin.mjs +133 -40
- package/src/standalone/channel-worker.mjs +8 -291
- package/src/standalone/explore-tool.mjs +2 -2
- package/src/standalone/memory-runtime-proxy.mjs +3 -1
- package/src/standalone/provider-admin.mjs +11 -0
- package/src/standalone/usage-dashboard.mjs +1 -1
- package/src/tui/App.jsx +2096 -732
- package/src/tui/components/ConfirmBar.jsx +47 -0
- package/src/tui/components/ContextPanel.jsx +5 -3
- package/src/tui/components/ItemRightHintOverprint.jsx +54 -0
- package/src/tui/components/Markdown.jsx +22 -98
- package/src/tui/components/Message.jsx +14 -35
- package/src/tui/components/Picker.jsx +87 -12
- package/src/tui/components/PromptInput.jsx +83 -7
- package/src/tui/components/QueuedCommands.jsx +1 -1
- package/src/tui/components/SlashCommandPalette.jsx +8 -5
- package/src/tui/components/Spinner.jsx +7 -7
- package/src/tui/components/StatusLine.jsx +40 -21
- package/src/tui/components/TextEntryPanel.jsx +51 -7
- package/src/tui/components/ToolExecution.jsx +170 -98
- package/src/tui/components/TurnDone.jsx +4 -4
- package/src/tui/components/UsagePanel.jsx +1 -1
- package/src/tui/components/tool-output-format.mjs +159 -21
- package/src/tui/components/tool-output-format.test.mjs +87 -0
- package/src/tui/display-width.mjs +69 -0
- package/src/tui/display-width.test.mjs +35 -0
- package/src/tui/dist/index.mjs +6965 -2391
- package/src/tui/engine.mjs +287 -126
- package/src/tui/index.jsx +117 -7
- package/src/tui/keyboard-protocol.mjs +42 -0
- package/src/tui/lib/voice-recorder.mjs +453 -0
- package/src/tui/markdown/format-token.mjs +129 -76
- package/src/tui/markdown/format-token.test.mjs +61 -19
- package/src/tui/markdown/measure-rendered-rows.mjs +85 -0
- package/src/tui/markdown/render-ansi.test.mjs +1 -1
- package/src/tui/markdown/streaming-markdown.mjs +167 -0
- package/src/tui/markdown/streaming-markdown.test.mjs +70 -0
- package/src/tui/markdown/table-layout.mjs +9 -9
- package/src/tui/paste-attachments.mjs +0 -11
- package/src/tui/prompt-history-store.mjs +129 -0
- package/src/tui/prompt-history-store.test.mjs +52 -0
- package/src/tui/statusline-ansi-bridge.test.mjs +3 -3
- package/src/tui/theme.mjs +41 -657
- package/src/tui/themes/base.mjs +86 -0
- package/src/tui/themes/basic.mjs +85 -0
- package/src/tui/themes/catppuccin.mjs +72 -0
- package/src/tui/themes/dracula.mjs +70 -0
- package/src/tui/themes/everforest.mjs +71 -0
- package/src/tui/themes/gruvbox.mjs +71 -0
- package/src/tui/themes/index.mjs +71 -0
- package/src/tui/themes/indigo.mjs +78 -0
- package/src/tui/themes/kanagawa.mjs +80 -0
- package/src/tui/themes/light.mjs +81 -0
- package/src/tui/themes/nord.mjs +72 -0
- package/src/tui/themes/onedark.mjs +16 -0
- package/src/tui/themes/rosepine.mjs +70 -0
- package/src/tui/themes/teal.mjs +81 -0
- package/src/tui/themes/tokyonight.mjs +79 -0
- package/src/tui/themes/utils.mjs +106 -0
- package/src/tui/themes/warm.mjs +79 -0
- package/src/tui/transcript-tool-failures.mjs +13 -2
- package/src/ui/markdown.mjs +1 -1
- package/src/ui/model-display.mjs +2 -2
- package/src/ui/statusline.mjs +26 -27
- package/src/vendor/statusline/bin/statusline-route.mjs +5 -12
- package/src/vendor/statusline/src/gateway/claude-current.mjs +3 -3
- package/src/vendor/statusline/src/gateway/route-meta.mjs +30 -16
- package/src/workflows/default/WORKFLOW.md +39 -12
- package/src/workflows/sequential/WORKFLOW.md +46 -0
- package/src/workflows/solo/WORKFLOW.md +7 -0
- package/vendor/ink/build/display-width.js +62 -0
- package/vendor/ink/build/ink.js +100 -12
- package/vendor/ink/build/measure-text.js +4 -1
- package/vendor/ink/build/output.js +115 -9
- package/vendor/ink/build/render-node-to-output.js +4 -1
- package/vendor/ink/build/render.js +4 -0
- package/src/output-styles/extreme-simple.md +0 -20
- package/src/rules/lead/04-workflow.md +0 -51
- package/src/workflows/default/workflow.json +0 -13
- package/src/workflows/solo/workflow.json +0 -7
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tui/themes/base.mjs — One Dark base palette (the full key set).
|
|
3
|
+
*
|
|
4
|
+
* Every TUI theme is defined as a COMPLETE set of `rgb(r,g,b)` string keys.
|
|
5
|
+
* Non-default palettes spread this base first (`{ ...basePalette, ...overrides }`)
|
|
6
|
+
* so a missing key can never leak the previous theme's color through the live
|
|
7
|
+
* `Object.assign(theme, palette)` switch in theme.mjs.
|
|
8
|
+
*
|
|
9
|
+
* Source: One Dark (atom/joshdick) — bg0 #282c34, fg #abb2bf, blue #61afef
|
|
10
|
+
* (signature accent), purple #c678dd, green #98c379, orange #d19a66,
|
|
11
|
+
* yellow #e5c07b, cyan #56b6c2, red #e86671, grey #5c6370.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/** One Dark — full key set; signature accent is blue (#61afef). */
|
|
15
|
+
export const basePalette = {
|
|
16
|
+
background: 'transparent', // bg0 #282c34
|
|
17
|
+
claude: 'rgb(97,175,239)', // blue accent
|
|
18
|
+
logo: 'rgb(120,195,255)', // welcome banner — brighter than the accent
|
|
19
|
+
claudeShimmer: 'rgb(140,200,245)', // lighter blue
|
|
20
|
+
mixdogOrange: 'rgb(97,175,239)', // signature accent (blue)
|
|
21
|
+
mixdogAmber: 'rgb(140,200,245)', // lighter accent
|
|
22
|
+
mixdogIvory: 'rgb(171,178,191)', // fg #abb2bf
|
|
23
|
+
spinnerGlyph: 'rgb(97,175,239)',
|
|
24
|
+
spinnerText: 'rgb(97,175,239)',
|
|
25
|
+
spinnerShimmer: 'rgb(140,200,245)',
|
|
26
|
+
thinkingAccent: 'rgb(132,139,152)', // light_grey #848b98
|
|
27
|
+
thinkingText: 'rgb(171,178,191)', // fg
|
|
28
|
+
thinkingBase: 'rgb(92,99,112)', // grey #5c6370
|
|
29
|
+
thinkingGlow: 'rgb(200,206,216)', // brighter fg
|
|
30
|
+
statusText: 'rgb(171,178,191)', // fg
|
|
31
|
+
statusSubtle: 'rgb(132,139,152)', // light_grey
|
|
32
|
+
timerText: 'rgb(132,139,152)', // light_grey
|
|
33
|
+
text: 'rgb(171,178,191)', // fg
|
|
34
|
+
inverseText: 'rgb(40,44,52)', // background
|
|
35
|
+
// Picker/list focus row. This is intentionally stronger than text selection.
|
|
36
|
+
selectionText: 'rgb(230,238,255)', // readable on selectionBackground
|
|
37
|
+
selectionBackground: 'rgb(38,79,120)', // classic dark-mode selection blue
|
|
38
|
+
// Mouse/drag text-selection overlay. Claude Code keeps this role separate:
|
|
39
|
+
// it replaces the cell background while text remains copy-highlight readable.
|
|
40
|
+
selectionHighlightText: 'rgb(255,255,255)',
|
|
41
|
+
selectionHighlightBackground: 'rgb(38,79,120)',
|
|
42
|
+
inactive: 'rgb(132,139,152)', // light_grey
|
|
43
|
+
subtle: 'rgb(132,139,152)', // light_grey
|
|
44
|
+
promptBorder: 'rgb(92,99,112)', // grey
|
|
45
|
+
success: 'rgb(152,195,121)', // green #98c379
|
|
46
|
+
error: 'rgb(224,108,117)', // red #e06c75
|
|
47
|
+
warning: 'rgb(229,192,123)', // yellow #e5c07b
|
|
48
|
+
suggestion: 'rgb(97,175,239)', // blue
|
|
49
|
+
panelTitle: 'rgb(97,175,239)', // blue
|
|
50
|
+
permission: 'rgb(224,108,117)', // red
|
|
51
|
+
code: 'rgb(97,175,239)', // blue
|
|
52
|
+
codeBlock: 'rgb(171,178,191)', // fg
|
|
53
|
+
mdHeading: 'rgb(229,192,123)', // yellow
|
|
54
|
+
mdCode: 'rgb(152,195,121)', // green
|
|
55
|
+
mdCodeBlock: 'rgb(171,178,191)', // fg
|
|
56
|
+
mdQuote: 'rgb(132,139,152)', // light_grey
|
|
57
|
+
mdQuoteBorder: 'rgb(132,139,152)', // light_grey
|
|
58
|
+
mdHr: 'rgb(132,139,152)', // light_grey
|
|
59
|
+
mdListBullet: 'rgb(97,175,239)', // blue accent
|
|
60
|
+
mdCodeBlockBorder: 'rgb(59,63,76)', // bg3 #3b3f4c
|
|
61
|
+
mdCodeBlockBg: 'rgb(49,53,63)', // bg1 #31353f
|
|
62
|
+
mdCodeSpanBg: 'rgb(57,63,74)', // bg2 #393f4a
|
|
63
|
+
mdLink: 'rgb(97,175,239)', // blue
|
|
64
|
+
mdLinkText: 'rgb(86,182,194)', // cyan #56b6c2
|
|
65
|
+
mdStrong: 'rgb(209,154,102)', // orange #d19a66
|
|
66
|
+
mdEmph: 'rgb(229,192,123)', // yellow
|
|
67
|
+
mdDiffAdded: 'rgb(152,195,121)', // green
|
|
68
|
+
mdDiffRemoved: 'rgb(224,108,117)', // red
|
|
69
|
+
mdDiffHunk: 'rgb(92,99,112)', // grey
|
|
70
|
+
mdDiffHeader: 'rgb(198,120,221)', // purple #c678dd
|
|
71
|
+
mdDiffContext: 'rgb(132,139,152)', // light_grey
|
|
72
|
+
mdDiffAddedBg: 'rgb(49,57,43)', // diff_add #31392b
|
|
73
|
+
mdDiffRemovedBg: 'rgb(56,43,44)', // diff_delete #382b2c
|
|
74
|
+
syntaxComment: 'rgb(92,99,112)', // grey
|
|
75
|
+
syntaxKeyword: 'rgb(198,120,221)', // purple
|
|
76
|
+
syntaxFunction: 'rgb(97,175,239)', // blue
|
|
77
|
+
syntaxVariable: 'rgb(224,108,117)', // red
|
|
78
|
+
syntaxString: 'rgb(152,195,121)', // green
|
|
79
|
+
syntaxNumber: 'rgb(209,154,102)', // orange
|
|
80
|
+
syntaxType: 'rgb(229,192,123)', // yellow
|
|
81
|
+
syntaxOperator: 'rgb(86,182,194)', // cyan
|
|
82
|
+
syntaxPunctuation: 'rgb(171,178,191)', // fg
|
|
83
|
+
userMessageBackground: 'rgb(49,53,63)', // bg1
|
|
84
|
+
userMessageBackgroundHover: 'rgb(57,63,74)', // bg2
|
|
85
|
+
fastMode: 'rgb(255,140,60)', // vivid in-theme orange
|
|
86
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tui/themes/basic.mjs — Basic (amber-gold default dark).
|
|
3
|
+
*
|
|
4
|
+
* A clean amber / golden-orange accent carries the default theme identity
|
|
5
|
+
* (titles, headings, links, code), with a slightly hotter orange live spinner.
|
|
6
|
+
* Body text stays neutral/cool for readability so the theme does not feel
|
|
7
|
+
* muddy or yellowed. Warm stays more terracotta / cream, while Indigo owns the
|
|
8
|
+
* cool violet-blue family. Spreads `basePalette` first so the full key set is
|
|
9
|
+
* always present.
|
|
10
|
+
*/
|
|
11
|
+
import { basePalette } from './base.mjs';
|
|
12
|
+
|
|
13
|
+
/** Basic — amber-gold default dark with a hot orange live state. */
|
|
14
|
+
export const basicPalette = {
|
|
15
|
+
...basePalette,
|
|
16
|
+
background: 'transparent',
|
|
17
|
+
text: 'rgb(232,234,238)',
|
|
18
|
+
statusText: 'rgb(232,234,238)',
|
|
19
|
+
// Thinking + spinner run a hotter orange than the golden UI accent.
|
|
20
|
+
thinkingText: 'rgb(238,184,122)',
|
|
21
|
+
thinkingGlow: 'rgb(255,214,158)',
|
|
22
|
+
mixdogIvory: 'rgb(232,234,238)',
|
|
23
|
+
inactive: 'rgb(142,144,150)',
|
|
24
|
+
subtle: 'rgb(124,126,132)',
|
|
25
|
+
thinkingAccent: 'rgb(242,136,48)',
|
|
26
|
+
thinkingBase: 'rgb(242,136,48)',
|
|
27
|
+
statusSubtle: 'rgb(154,156,162)',
|
|
28
|
+
timerText: 'rgb(154,156,162)',
|
|
29
|
+
promptBorder: 'rgb(112,112,118)',
|
|
30
|
+
// Accent: bright orange across titles, headings, links and code.
|
|
31
|
+
claude: 'rgb(255,150,58)',
|
|
32
|
+
logo: 'rgb(238,150,64)', // welcome banner — slightly deeper than the accent
|
|
33
|
+
mixdogOrange: 'rgb(255,150,58)',
|
|
34
|
+
panelTitle: 'rgb(255,150,58)',
|
|
35
|
+
mdHeading: 'rgb(255,150,58)',
|
|
36
|
+
claudeShimmer: 'rgb(255,210,118)',
|
|
37
|
+
mixdogAmber: 'rgb(255,210,118)',
|
|
38
|
+
suggestion: 'rgb(255,196,92)',
|
|
39
|
+
code: 'rgb(246,184,78)',
|
|
40
|
+
mdLink: 'rgb(255,196,92)',
|
|
41
|
+
mdListBullet: 'rgb(184,140,74)', // muted amber structural marker
|
|
42
|
+
mdCode: 'rgb(246,184,78)',
|
|
43
|
+
mdLinkText: 'rgb(255,218,138)',
|
|
44
|
+
// Spinner glyph/text/shimmer run a warm orange (a touch hotter than the gold
|
|
45
|
+
// accent, but no longer strongly red) so they harmonize with the thinking tone.
|
|
46
|
+
spinnerGlyph: 'rgb(244,120,58)',
|
|
47
|
+
spinnerText: 'rgb(244,120,58)',
|
|
48
|
+
spinnerShimmer: 'rgb(255,164,110)',
|
|
49
|
+
codeBlock: 'rgb(224,226,230)',
|
|
50
|
+
mdCodeBlock: 'rgb(224,226,230)',
|
|
51
|
+
success: 'rgb(140,190,118)',
|
|
52
|
+
error: 'rgb(224,92,96)',
|
|
53
|
+
warning: 'rgb(236,170,90)',
|
|
54
|
+
permission: 'rgb(224,92,96)',
|
|
55
|
+
mdStrong: 'rgb(255,196,92)',
|
|
56
|
+
mdEmph: 'rgb(255,218,138)',
|
|
57
|
+
inverseText: 'rgb(24,18,18)',
|
|
58
|
+
selectionText: 'rgb(255,238,208)',
|
|
59
|
+
selectionBackground: 'rgb(96,58,28)',
|
|
60
|
+
mdCodeBlockBg: 'rgb(27,27,30)',
|
|
61
|
+
mdCodeSpanBg: 'rgb(38,37,38)',
|
|
62
|
+
mdCodeBlockBorder: 'rgb(50,49,50)',
|
|
63
|
+
userMessageBackground: 'rgb(36,35,36)',
|
|
64
|
+
userMessageBackgroundHover: 'rgb(48,46,46)',
|
|
65
|
+
mdQuote: 'rgb(124,126,132)',
|
|
66
|
+
mdQuoteBorder: 'rgb(124,126,132)',
|
|
67
|
+
mdHr: 'rgb(124,126,132)',
|
|
68
|
+
syntaxComment: 'rgb(124,126,132)',
|
|
69
|
+
mdDiffContext: 'rgb(124,126,132)',
|
|
70
|
+
mdDiffAdded: 'rgb(140,190,118)',
|
|
71
|
+
mdDiffRemoved: 'rgb(224,92,96)',
|
|
72
|
+
mdDiffHunk: 'rgb(255,196,92)',
|
|
73
|
+
mdDiffHeader: 'rgb(255,210,118)',
|
|
74
|
+
mdDiffAddedBg: 'rgb(28,42,28)',
|
|
75
|
+
mdDiffRemovedBg: 'rgb(52,28,30)',
|
|
76
|
+
syntaxKeyword: 'rgb(232,156,48)',
|
|
77
|
+
syntaxFunction: 'rgb(255,196,92)',
|
|
78
|
+
syntaxString: 'rgb(170,194,128)',
|
|
79
|
+
syntaxNumber: 'rgb(236,170,90)',
|
|
80
|
+
syntaxType: 'rgb(255,218,138)',
|
|
81
|
+
syntaxVariable: 'rgb(232,234,238)',
|
|
82
|
+
syntaxOperator: 'rgb(255,196,92)',
|
|
83
|
+
syntaxPunctuation: 'rgb(224,226,230)',
|
|
84
|
+
fastMode: 'rgb(255,140,40)',
|
|
85
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { basePalette } from './base.mjs';
|
|
2
|
+
|
|
3
|
+
/** Catppuccin Mocha — https://github.com/catppuccin/catppuccin */
|
|
4
|
+
export const catppuccinPalette = {
|
|
5
|
+
...basePalette,
|
|
6
|
+
background: 'transparent',
|
|
7
|
+
claude: 'rgb(137,180,250)',
|
|
8
|
+
logo: 'rgb(170,202,255)', // welcome banner — brighter than accent
|
|
9
|
+
claudeShimmer: 'rgb(180,190,254)',
|
|
10
|
+
mixdogOrange: 'rgb(137,180,250)',
|
|
11
|
+
mixdogAmber: 'rgb(180,190,254)',
|
|
12
|
+
mixdogIvory: 'rgb(205,214,244)',
|
|
13
|
+
spinnerGlyph: 'rgb(250,179,135)', // most-emphasized: peach
|
|
14
|
+
spinnerText: 'rgb(250,179,135)',
|
|
15
|
+
spinnerShimmer: 'rgb(252,200,170)',
|
|
16
|
+
thinkingAccent: 'rgb(108,112,134)',
|
|
17
|
+
thinkingText: 'rgb(205,214,244)',
|
|
18
|
+
thinkingBase: 'rgb(147,153,178)',
|
|
19
|
+
thinkingGlow: 'rgb(215,222,250)',
|
|
20
|
+
statusText: 'rgb(205,214,244)',
|
|
21
|
+
statusSubtle: 'rgb(147,153,178)',
|
|
22
|
+
timerText: 'rgb(147,153,178)',
|
|
23
|
+
text: 'rgb(205,214,244)',
|
|
24
|
+
inverseText: 'rgb(30,30,46)',
|
|
25
|
+
selectionText: 'rgb(226,232,255)',
|
|
26
|
+
selectionBackground: 'rgb(69,71,120)',
|
|
27
|
+
inactive: 'rgb(147,153,178)',
|
|
28
|
+
subtle: 'rgb(127,132,156)',
|
|
29
|
+
promptBorder: 'rgb(127,132,156)',
|
|
30
|
+
success: 'rgb(166,227,161)',
|
|
31
|
+
error: 'rgb(243,139,168)',
|
|
32
|
+
warning: 'rgb(249,226,175)',
|
|
33
|
+
suggestion: 'rgb(137,180,250)',
|
|
34
|
+
panelTitle: 'rgb(137,180,250)',
|
|
35
|
+
permission: 'rgb(243,139,168)',
|
|
36
|
+
code: 'rgb(137,180,250)',
|
|
37
|
+
codeBlock: 'rgb(205,214,244)',
|
|
38
|
+
mdHeading: 'rgb(203,166,247)',
|
|
39
|
+
mdCode: 'rgb(166,227,161)',
|
|
40
|
+
mdCodeBlock: 'rgb(205,214,244)',
|
|
41
|
+
mdQuote: 'rgb(147,153,178)',
|
|
42
|
+
mdQuoteBorder: 'rgb(147,153,178)',
|
|
43
|
+
mdHr: 'rgb(147,153,178)',
|
|
44
|
+
mdListBullet: 'rgb(137,180,250)',
|
|
45
|
+
mdCodeBlockBorder: 'rgb(69,71,90)',
|
|
46
|
+
mdCodeBlockBg: 'rgb(49,50,68)',
|
|
47
|
+
mdCodeSpanBg: 'rgb(69,71,90)',
|
|
48
|
+
mdLink: 'rgb(137,180,250)',
|
|
49
|
+
mdLinkText: 'rgb(137,220,235)',
|
|
50
|
+
mdStrong: 'rgb(250,179,135)',
|
|
51
|
+
mdEmph: 'rgb(249,226,175)',
|
|
52
|
+
mdDiffAdded: 'rgb(166,227,161)',
|
|
53
|
+
mdDiffRemoved: 'rgb(243,139,168)',
|
|
54
|
+
mdDiffHunk: 'rgb(250,179,135)',
|
|
55
|
+
mdDiffHeader: 'rgb(203,166,247)',
|
|
56
|
+
mdDiffContext: 'rgb(147,153,178)',
|
|
57
|
+
mdDiffAddedBg: 'rgb(36,49,43)',
|
|
58
|
+
mdDiffRemovedBg: 'rgb(60,42,50)',
|
|
59
|
+
syntaxComment: 'rgb(147,153,178)',
|
|
60
|
+
syntaxKeyword: 'rgb(203,166,247)',
|
|
61
|
+
syntaxFunction: 'rgb(137,180,250)',
|
|
62
|
+
syntaxVariable: 'rgb(243,139,168)',
|
|
63
|
+
syntaxString: 'rgb(166,227,161)',
|
|
64
|
+
syntaxNumber: 'rgb(250,179,135)',
|
|
65
|
+
syntaxType: 'rgb(249,226,175)',
|
|
66
|
+
syntaxOperator: 'rgb(137,220,235)',
|
|
67
|
+
syntaxPunctuation: 'rgb(205,214,244)',
|
|
68
|
+
userMessageBackground: 'rgb(49,50,68)',
|
|
69
|
+
userMessageBackgroundHover: 'rgb(69,71,90)',
|
|
70
|
+
fastMode: 'rgb(250,179,135)',
|
|
71
|
+
};
|
|
72
|
+
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { basePalette } from './base.mjs';
|
|
2
|
+
/** Dracula — https://draculatheme.com/contribute */
|
|
3
|
+
export const draculaPalette = {
|
|
4
|
+
...basePalette,
|
|
5
|
+
background: 'transparent',
|
|
6
|
+
text: 'rgb(248,248,242)',
|
|
7
|
+
inverseText: 'rgb(40,42,54)',
|
|
8
|
+
selectionText: 'rgb(248,248,242)',
|
|
9
|
+
selectionBackground: 'rgb(68,71,120)',
|
|
10
|
+
claude: 'rgb(189,147,249)',
|
|
11
|
+
logo: 'rgb(214,180,255)', // welcome banner — brighter than accent
|
|
12
|
+
claudeShimmer: 'rgb(212,182,251)',
|
|
13
|
+
mixdogOrange: 'rgb(189,147,249)',
|
|
14
|
+
mixdogAmber: 'rgb(212,182,251)',
|
|
15
|
+
mixdogIvory: 'rgb(248,248,242)',
|
|
16
|
+
spinnerGlyph: 'rgb(255,121,198)', // most-emphasized: pink
|
|
17
|
+
spinnerText: 'rgb(255,121,198)',
|
|
18
|
+
spinnerShimmer: 'rgb(255,160,215)',
|
|
19
|
+
thinkingAccent: 'rgb(98,114,164)',
|
|
20
|
+
thinkingText: 'rgb(248,248,242)',
|
|
21
|
+
thinkingBase: 'rgb(98,114,164)',
|
|
22
|
+
thinkingGlow: 'rgb(220,220,235)',
|
|
23
|
+
statusText: 'rgb(248,248,242)',
|
|
24
|
+
statusSubtle: 'rgb(98,114,164)',
|
|
25
|
+
timerText: 'rgb(98,114,164)',
|
|
26
|
+
inactive: 'rgb(98,114,164)',
|
|
27
|
+
subtle: 'rgb(98,114,164)',
|
|
28
|
+
promptBorder: 'rgb(98,114,164)',
|
|
29
|
+
success: 'rgb(80,250,123)',
|
|
30
|
+
error: 'rgb(255,85,85)',
|
|
31
|
+
warning: 'rgb(241,250,140)',
|
|
32
|
+
suggestion: 'rgb(139,233,253)',
|
|
33
|
+
panelTitle: 'rgb(189,147,249)',
|
|
34
|
+
permission: 'rgb(255,85,85)',
|
|
35
|
+
code: 'rgb(139,233,253)',
|
|
36
|
+
codeBlock: 'rgb(248,248,242)',
|
|
37
|
+
mdHeading: 'rgb(189,147,249)',
|
|
38
|
+
mdCode: 'rgb(80,250,123)',
|
|
39
|
+
mdCodeBlock: 'rgb(248,248,242)',
|
|
40
|
+
mdQuote: 'rgb(145,154,195)',
|
|
41
|
+
mdQuoteBorder: 'rgb(145,154,195)',
|
|
42
|
+
mdHr: 'rgb(98,114,164)',
|
|
43
|
+
mdListBullet: 'rgb(189,147,249)',
|
|
44
|
+
mdCodeBlockBorder: 'rgb(68,71,90)',
|
|
45
|
+
mdCodeBlockBg: 'rgb(45,47,61)',
|
|
46
|
+
mdCodeSpanBg: 'rgb(52,55,70)',
|
|
47
|
+
mdLink: 'rgb(139,233,253)',
|
|
48
|
+
mdLinkText: 'rgb(255,121,198)',
|
|
49
|
+
mdStrong: 'rgb(255,184,108)',
|
|
50
|
+
mdEmph: 'rgb(241,250,140)',
|
|
51
|
+
mdDiffAdded: 'rgb(80,250,123)',
|
|
52
|
+
mdDiffRemoved: 'rgb(255,85,85)',
|
|
53
|
+
mdDiffHunk: 'rgb(98,114,164)',
|
|
54
|
+
mdDiffHeader: 'rgb(255,121,198)',
|
|
55
|
+
mdDiffContext: 'rgb(98,114,164)',
|
|
56
|
+
mdDiffAddedBg: 'rgb(26,58,26)',
|
|
57
|
+
mdDiffRemovedBg: 'rgb(58,26,26)',
|
|
58
|
+
syntaxComment: 'rgb(125,135,175)',
|
|
59
|
+
syntaxKeyword: 'rgb(255,121,198)',
|
|
60
|
+
syntaxFunction: 'rgb(80,250,123)',
|
|
61
|
+
syntaxVariable: 'rgb(248,248,242)',
|
|
62
|
+
syntaxString: 'rgb(241,250,140)',
|
|
63
|
+
syntaxNumber: 'rgb(189,147,249)',
|
|
64
|
+
syntaxType: 'rgb(139,233,253)',
|
|
65
|
+
syntaxOperator: 'rgb(255,121,198)',
|
|
66
|
+
syntaxPunctuation: 'rgb(248,248,242)',
|
|
67
|
+
userMessageBackground: 'rgb(68,71,90)',
|
|
68
|
+
userMessageBackgroundHover: 'rgb(86,89,114)',
|
|
69
|
+
fastMode: 'rgb(255,184,108)',
|
|
70
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { basePalette } from './base.mjs';
|
|
2
|
+
|
|
3
|
+
/** Everforest dark medium (sainnhe/everforest) */
|
|
4
|
+
export const everforestPalette = {
|
|
5
|
+
...basePalette,
|
|
6
|
+
background: 'transparent',
|
|
7
|
+
text: 'rgb(211,198,170)',
|
|
8
|
+
inverseText: 'rgb(45,53,59)',
|
|
9
|
+
selectionText: 'rgb(230,220,195)',
|
|
10
|
+
selectionBackground: 'rgb(72,88,76)',
|
|
11
|
+
inactive: 'rgb(133,146,137)',
|
|
12
|
+
subtle: 'rgb(133,146,137)',
|
|
13
|
+
promptBorder: 'rgb(133,146,137)',
|
|
14
|
+
statusText: 'rgb(211,198,170)',
|
|
15
|
+
statusSubtle: 'rgb(133,146,137)',
|
|
16
|
+
timerText: 'rgb(133,146,137)',
|
|
17
|
+
thinkingText: 'rgb(211,198,170)',
|
|
18
|
+
thinkingBase: 'rgb(133,146,137)',
|
|
19
|
+
thinkingAccent: 'rgb(133,146,137)',
|
|
20
|
+
thinkingGlow: 'rgb(230,220,195)',
|
|
21
|
+
claude: 'rgb(214,153,182)',
|
|
22
|
+
logo: 'rgb(232,180,205)', // welcome banner — brighter than accent
|
|
23
|
+
claudeShimmer: 'rgb(131,192,146)',
|
|
24
|
+
mixdogOrange: 'rgb(214,153,182)',
|
|
25
|
+
mixdogAmber: 'rgb(131,192,146)',
|
|
26
|
+
mixdogIvory: 'rgb(211,198,170)',
|
|
27
|
+
spinnerGlyph: 'rgb(230,152,117)', // most-emphasized: earthy orange (fits muted green)
|
|
28
|
+
spinnerText: 'rgb(230,152,117)',
|
|
29
|
+
spinnerShimmer: 'rgb(243,180,150)',
|
|
30
|
+
panelTitle: 'rgb(214,153,182)',
|
|
31
|
+
success: 'rgb(167,192,128)',
|
|
32
|
+
error: 'rgb(230,126,128)',
|
|
33
|
+
warning: 'rgb(230,152,117)',
|
|
34
|
+
permission: 'rgb(230,126,128)',
|
|
35
|
+
suggestion: 'rgb(127,187,179)',
|
|
36
|
+
code: 'rgb(127,187,179)',
|
|
37
|
+
codeBlock: 'rgb(211,198,170)',
|
|
38
|
+
userMessageBackground: 'rgb(52,63,68)',
|
|
39
|
+
userMessageBackgroundHover: 'rgb(61,72,77)',
|
|
40
|
+
fastMode: 'rgb(230,152,117)',
|
|
41
|
+
mdHeading: 'rgb(214,153,182)',
|
|
42
|
+
mdCode: 'rgb(167,192,128)',
|
|
43
|
+
mdCodeBlock: 'rgb(211,198,170)',
|
|
44
|
+
mdQuote: 'rgb(219,188,127)',
|
|
45
|
+
mdQuoteBorder: 'rgb(133,146,137)',
|
|
46
|
+
mdHr: 'rgb(133,146,137)',
|
|
47
|
+
mdListBullet: 'rgb(167,192,128)',
|
|
48
|
+
mdCodeBlockBorder: 'rgb(61,72,77)',
|
|
49
|
+
mdCodeBlockBg: 'rgb(52,63,68)',
|
|
50
|
+
mdCodeSpanBg: 'rgb(61,72,77)',
|
|
51
|
+
mdLink: 'rgb(167,192,128)',
|
|
52
|
+
mdLinkText: 'rgb(131,192,146)',
|
|
53
|
+
mdStrong: 'rgb(230,152,117)',
|
|
54
|
+
mdEmph: 'rgb(219,188,127)',
|
|
55
|
+
mdDiffAdded: 'rgb(167,192,128)',
|
|
56
|
+
mdDiffRemoved: 'rgb(230,126,128)',
|
|
57
|
+
mdDiffHunk: 'rgb(127,187,179)',
|
|
58
|
+
mdDiffHeader: 'rgb(214,153,182)',
|
|
59
|
+
mdDiffContext: 'rgb(133,146,137)',
|
|
60
|
+
mdDiffAddedBg: 'rgb(32,48,59)',
|
|
61
|
+
mdDiffRemovedBg: 'rgb(55,34,44)',
|
|
62
|
+
syntaxComment: 'rgb(133,146,137)',
|
|
63
|
+
syntaxKeyword: 'rgb(214,153,182)',
|
|
64
|
+
syntaxFunction: 'rgb(167,192,128)',
|
|
65
|
+
syntaxVariable: 'rgb(230,126,128)',
|
|
66
|
+
syntaxString: 'rgb(167,192,128)',
|
|
67
|
+
syntaxNumber: 'rgb(230,152,117)',
|
|
68
|
+
syntaxType: 'rgb(219,188,127)',
|
|
69
|
+
syntaxOperator: 'rgb(131,192,146)',
|
|
70
|
+
syntaxPunctuation: 'rgb(211,198,170)',
|
|
71
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { basePalette } from './base.mjs';
|
|
2
|
+
|
|
3
|
+
/** Gruvbox dark medium (morhetz/gruvbox) */
|
|
4
|
+
export const gruvboxPalette = {
|
|
5
|
+
...basePalette,
|
|
6
|
+
background: 'transparent',
|
|
7
|
+
text: 'rgb(235,219,178)',
|
|
8
|
+
inverseText: 'rgb(40,40,40)',
|
|
9
|
+
selectionText: 'rgb(251,241,199)',
|
|
10
|
+
selectionBackground: 'rgb(92,70,42)',
|
|
11
|
+
inactive: 'rgb(146,131,116)',
|
|
12
|
+
subtle: 'rgb(146,131,116)',
|
|
13
|
+
promptBorder: 'rgb(146,131,116)',
|
|
14
|
+
statusText: 'rgb(235,219,178)',
|
|
15
|
+
statusSubtle: 'rgb(146,131,116)',
|
|
16
|
+
timerText: 'rgb(146,131,116)',
|
|
17
|
+
thinkingText: 'rgb(235,219,178)',
|
|
18
|
+
thinkingBase: 'rgb(146,131,116)',
|
|
19
|
+
thinkingAccent: 'rgb(146,131,116)',
|
|
20
|
+
thinkingGlow: 'rgb(251,241,199)',
|
|
21
|
+
claude: 'rgb(142,192,124)',
|
|
22
|
+
logo: 'rgb(176,216,152)', // welcome banner — brighter than accent
|
|
23
|
+
claudeShimmer: 'rgb(184,187,38)',
|
|
24
|
+
mixdogOrange: 'rgb(142,192,124)',
|
|
25
|
+
mixdogAmber: 'rgb(184,187,38)',
|
|
26
|
+
mixdogIvory: 'rgb(235,219,178)',
|
|
27
|
+
spinnerGlyph: 'rgb(214,93,14)', // most-emphasized: gruvbox neutral orange (retro-fit)
|
|
28
|
+
spinnerText: 'rgb(214,93,14)',
|
|
29
|
+
spinnerShimmer: 'rgb(244,135,50)',
|
|
30
|
+
panelTitle: 'rgb(142,192,124)',
|
|
31
|
+
success: 'rgb(184,187,38)',
|
|
32
|
+
error: 'rgb(251,73,52)',
|
|
33
|
+
warning: 'rgb(254,128,25)',
|
|
34
|
+
permission: 'rgb(251,73,52)',
|
|
35
|
+
suggestion: 'rgb(131,165,152)',
|
|
36
|
+
code: 'rgb(131,165,152)',
|
|
37
|
+
codeBlock: 'rgb(235,219,178)',
|
|
38
|
+
userMessageBackground: 'rgb(60,56,54)',
|
|
39
|
+
userMessageBackgroundHover: 'rgb(80,73,69)',
|
|
40
|
+
fastMode: 'rgb(254,128,25)',
|
|
41
|
+
mdHeading: 'rgb(131,165,152)',
|
|
42
|
+
mdCode: 'rgb(250,189,47)',
|
|
43
|
+
mdCodeBlock: 'rgb(235,219,178)',
|
|
44
|
+
mdQuote: 'rgb(146,131,116)',
|
|
45
|
+
mdQuoteBorder: 'rgb(146,131,116)',
|
|
46
|
+
mdHr: 'rgb(146,131,116)',
|
|
47
|
+
mdListBullet: 'rgb(131,165,152)',
|
|
48
|
+
mdCodeBlockBorder: 'rgb(80,73,69)',
|
|
49
|
+
mdCodeBlockBg: 'rgb(60,56,54)',
|
|
50
|
+
mdCodeSpanBg: 'rgb(80,73,69)',
|
|
51
|
+
mdLink: 'rgb(142,192,124)',
|
|
52
|
+
mdLinkText: 'rgb(184,187,38)',
|
|
53
|
+
mdStrong: 'rgb(254,128,25)',
|
|
54
|
+
mdEmph: 'rgb(211,134,155)',
|
|
55
|
+
mdDiffAdded: 'rgb(152,151,26)',
|
|
56
|
+
mdDiffRemoved: 'rgb(204,36,29)',
|
|
57
|
+
mdDiffHunk: 'rgb(131,165,152)',
|
|
58
|
+
mdDiffHeader: 'rgb(211,134,155)',
|
|
59
|
+
mdDiffContext: 'rgb(146,131,116)',
|
|
60
|
+
mdDiffAddedBg: 'rgb(50,48,47)',
|
|
61
|
+
mdDiffRemovedBg: 'rgb(50,41,41)',
|
|
62
|
+
syntaxComment: 'rgb(146,131,116)',
|
|
63
|
+
syntaxKeyword: 'rgb(251,73,52)',
|
|
64
|
+
syntaxFunction: 'rgb(184,187,38)',
|
|
65
|
+
syntaxVariable: 'rgb(131,165,152)',
|
|
66
|
+
syntaxString: 'rgb(250,189,47)',
|
|
67
|
+
syntaxNumber: 'rgb(211,134,155)',
|
|
68
|
+
syntaxType: 'rgb(142,192,124)',
|
|
69
|
+
syntaxOperator: 'rgb(254,128,25)',
|
|
70
|
+
syntaxPunctuation: 'rgb(235,219,178)',
|
|
71
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tui/themes/index.mjs — theme registry, order, and default id.
|
|
3
|
+
*
|
|
4
|
+
* Each theme lives in its own module and exports a COMPLETE palette built on
|
|
5
|
+
* `basePalette` (One Dark). This index wires them into the registry consumed by
|
|
6
|
+
* theme.mjs. The runtime singleton (`theme`) is seeded from the softened
|
|
7
|
+
* `basicPalette` export below.
|
|
8
|
+
*/
|
|
9
|
+
import { basePalette } from './base.mjs';
|
|
10
|
+
import { basicPalette as rawBasicPalette } from './basic.mjs';
|
|
11
|
+
import { indigoPalette as rawIndigoPalette } from './indigo.mjs';
|
|
12
|
+
import { warmPalette as rawWarmPalette } from './warm.mjs';
|
|
13
|
+
import { lightPalette as rawLightPalette } from './light.mjs';
|
|
14
|
+
import { tealPalette as rawTealPalette } from './teal.mjs';
|
|
15
|
+
import { onedarkPalette as rawOnedarkPalette } from './onedark.mjs';
|
|
16
|
+
import { tokyonightPalette as rawTokyonightPalette } from './tokyonight.mjs';
|
|
17
|
+
import { kanagawaPalette as rawKanagawaPalette } from './kanagawa.mjs';
|
|
18
|
+
import { catppuccinPalette as rawCatppuccinPalette } from './catppuccin.mjs';
|
|
19
|
+
import { draculaPalette as rawDraculaPalette } from './dracula.mjs';
|
|
20
|
+
import { rosepinePalette as rawRosepinePalette } from './rosepine.mjs';
|
|
21
|
+
import { nordPalette as rawNordPalette } from './nord.mjs';
|
|
22
|
+
import { gruvboxPalette as rawGruvboxPalette } from './gruvbox.mjs';
|
|
23
|
+
import { everforestPalette as rawEverforestPalette } from './everforest.mjs';
|
|
24
|
+
import { softenTypographyColors } from './utils.mjs';
|
|
25
|
+
|
|
26
|
+
/** Default theme id (Basic — amber-gold default dark). */
|
|
27
|
+
export const DEFAULT_THEME_ID = 'basic';
|
|
28
|
+
|
|
29
|
+
/** Backward-compatible ids accepted from older persisted configs. */
|
|
30
|
+
export const THEME_ALIASES = {
|
|
31
|
+
basicIndigo: 'indigo',
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const basicPalette = softenTypographyColors(rawBasicPalette);
|
|
35
|
+
const indigoPalette = softenTypographyColors(rawIndigoPalette);
|
|
36
|
+
const warmPalette = softenTypographyColors(rawWarmPalette);
|
|
37
|
+
// Light is terminal high-contrast; skip soften so syntax/accents stay saturated.
|
|
38
|
+
const lightPalette = rawLightPalette;
|
|
39
|
+
const tealPalette = softenTypographyColors(rawTealPalette);
|
|
40
|
+
const onedarkPalette = softenTypographyColors(rawOnedarkPalette);
|
|
41
|
+
const tokyonightPalette = softenTypographyColors(rawTokyonightPalette);
|
|
42
|
+
const kanagawaPalette = softenTypographyColors(rawKanagawaPalette);
|
|
43
|
+
const catppuccinPalette = softenTypographyColors(rawCatppuccinPalette);
|
|
44
|
+
const draculaPalette = softenTypographyColors(rawDraculaPalette);
|
|
45
|
+
const rosepinePalette = softenTypographyColors(rawRosepinePalette);
|
|
46
|
+
const nordPalette = softenTypographyColors(rawNordPalette);
|
|
47
|
+
const gruvboxPalette = softenTypographyColors(rawGruvboxPalette);
|
|
48
|
+
const everforestPalette = softenTypographyColors(rawEverforestPalette);
|
|
49
|
+
|
|
50
|
+
/** Theme registry: id -> { id, label, description, palette }. */
|
|
51
|
+
export const THEME_REGISTRY = {
|
|
52
|
+
basic: { id: 'basic', label: 'Basic', description: 'Amber-gold default dark with a hot orange live state.', palette: basicPalette },
|
|
53
|
+
indigo: { id: 'indigo', label: 'Indigo', description: 'Cool blue-indigo brand dark with orange live state.', palette: indigoPalette },
|
|
54
|
+
warm: { id: 'warm', label: 'Warm', description: 'Soft sunset coral on neutral charcoal.', palette: warmPalette },
|
|
55
|
+
teal: { id: 'teal', label: 'Teal', description: 'pi-style teal accent with soft body text.', palette: tealPalette },
|
|
56
|
+
onedark: { id: 'onedark', label: 'One Dark', description: 'Atom One Dark — blue accent on slate, balanced syntax.', palette: onedarkPalette },
|
|
57
|
+
tokyonight: { id: 'tokyonight', label: 'Tokyo Night', description: 'Storm variant — soft blue/purple dark with neon markdown.', palette: tokyonightPalette },
|
|
58
|
+
kanagawa: { id: 'kanagawa', label: 'Kanagawa', description: 'Wave variant — muted ink dark with crystal-blue accent.', palette: kanagawaPalette },
|
|
59
|
+
catppuccin: { id: 'catppuccin', label: 'Catppuccin', description: 'Mocha — gentle pastel violet/blue dark.', palette: catppuccinPalette },
|
|
60
|
+
dracula: { id: 'dracula', label: 'Dracula', description: 'Classic purple/pink accents with cyan links.', palette: draculaPalette },
|
|
61
|
+
rosepine: { id: 'rosepine', label: 'Rosé Pine', description: 'Muted rose/pine dark with soho elegance.', palette: rosepinePalette },
|
|
62
|
+
nord: { id: 'nord', label: 'Nord', description: 'Cool arctic blue/teal frost dark.', palette: nordPalette },
|
|
63
|
+
gruvbox: { id: 'gruvbox', label: 'Gruvbox', description: 'Retro warm earthy dark with green/orange accents.', palette: gruvboxPalette },
|
|
64
|
+
everforest: { id: 'everforest', label: 'Everforest', description: 'Soft natural green dark, easy on the eyes.', palette: everforestPalette },
|
|
65
|
+
light: { id: 'light', label: 'Light', description: 'GitHub Light high-contrast — solid blue selection, terminal-ready chrome.', palette: lightPalette },
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/** Display order for the theme picker. */
|
|
69
|
+
export const THEME_ORDER = ['basic', 'indigo', 'warm', 'teal', 'onedark', 'tokyonight', 'kanagawa', 'catppuccin', 'dracula', 'rosepine', 'nord', 'gruvbox', 'everforest', 'light'];
|
|
70
|
+
|
|
71
|
+
export { basePalette };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tui/themes/indigo.mjs — Indigo (cool blue-indigo brand dark).
|
|
3
|
+
*
|
|
4
|
+
* Mixdog brand theme: saturated blue-indigo primary (#5B7CFF family) with
|
|
5
|
+
* cyan secondary on lifted blue-black surfaces — not violet/purple. Spreads
|
|
6
|
+
* `basePalette` first so the full key set is always present.
|
|
7
|
+
*/
|
|
8
|
+
import { basePalette } from './base.mjs';
|
|
9
|
+
|
|
10
|
+
/** Indigo — true blue-indigo brand dark. */
|
|
11
|
+
export const indigoPalette = {
|
|
12
|
+
...basePalette,
|
|
13
|
+
background: 'transparent',
|
|
14
|
+
text: 'rgb(226,228,242)',
|
|
15
|
+
statusText: 'rgb(226,228,242)',
|
|
16
|
+
thinkingText: 'rgb(188,194,222)',
|
|
17
|
+
thinkingGlow: 'rgb(210,220,255)',
|
|
18
|
+
mixdogIvory: 'rgb(226,228,242)',
|
|
19
|
+
inactive: 'rgb(132,140,172)',
|
|
20
|
+
subtle: 'rgb(108,118,152)',
|
|
21
|
+
thinkingAccent: 'rgb(100,124,190)',
|
|
22
|
+
thinkingBase: 'rgb(72,88,140)',
|
|
23
|
+
statusSubtle: 'rgb(132,140,172)',
|
|
24
|
+
timerText: 'rgb(132,140,172)',
|
|
25
|
+
promptBorder: 'rgb(72,82,124)',
|
|
26
|
+
claude: 'rgb(91,124,255)',
|
|
27
|
+
logo: 'rgb(110,168,255)',
|
|
28
|
+
mixdogOrange: 'rgb(91,124,255)',
|
|
29
|
+
spinnerGlyph: 'rgb(255,126,26)',
|
|
30
|
+
spinnerText: 'rgb(255,126,26)',
|
|
31
|
+
panelTitle: 'rgb(91,124,255)',
|
|
32
|
+
mdHeading: 'rgb(110,168,255)',
|
|
33
|
+
claudeShimmer: 'rgb(130,160,255)',
|
|
34
|
+
spinnerShimmer: 'rgb(255,165,90)',
|
|
35
|
+
mixdogAmber: 'rgb(130,160,255)',
|
|
36
|
+
suggestion: 'rgb(150,175,255)',
|
|
37
|
+
code: 'rgb(110,168,255)',
|
|
38
|
+
mdLink: 'rgb(150,175,255)',
|
|
39
|
+
mdListBullet: 'rgb(91,124,255)',
|
|
40
|
+
mdCode: 'rgb(110,168,255)',
|
|
41
|
+
mdLinkText: 'rgb(100,200,230)',
|
|
42
|
+
codeBlock: 'rgb(214,218,232)',
|
|
43
|
+
mdCodeBlock: 'rgb(214,218,232)',
|
|
44
|
+
success: 'rgb(86,180,110)',
|
|
45
|
+
error: 'rgb(225,95,95)',
|
|
46
|
+
warning: 'rgb(231,172,78)',
|
|
47
|
+
permission: 'rgb(225,95,95)',
|
|
48
|
+
mdStrong: 'rgb(130,160,255)',
|
|
49
|
+
mdEmph: 'rgb(100,200,230)',
|
|
50
|
+
inverseText: 'rgb(16,18,28)',
|
|
51
|
+
selectionText: 'rgb(232,236,255)',
|
|
52
|
+
selectionBackground: 'rgb(48,62,120)',
|
|
53
|
+
mdCodeBlockBg: 'rgb(22,24,40)',
|
|
54
|
+
mdCodeSpanBg: 'rgb(32,34,54)',
|
|
55
|
+
mdCodeBlockBorder: 'rgb(48,54,88)',
|
|
56
|
+
userMessageBackground: 'rgb(28,30,48)',
|
|
57
|
+
userMessageBackgroundHover: 'rgb(40,44,68)',
|
|
58
|
+
mdQuote: 'rgb(108,118,152)',
|
|
59
|
+
mdQuoteBorder: 'rgb(108,118,152)',
|
|
60
|
+
mdHr: 'rgb(108,118,152)',
|
|
61
|
+
syntaxComment: 'rgb(108,118,152)',
|
|
62
|
+
mdDiffContext: 'rgb(108,118,152)',
|
|
63
|
+
mdDiffAdded: 'rgb(86,180,110)',
|
|
64
|
+
mdDiffRemoved: 'rgb(225,95,95)',
|
|
65
|
+
mdDiffHunk: 'rgb(91,124,255)',
|
|
66
|
+
mdDiffHeader: 'rgb(130,160,255)',
|
|
67
|
+
mdDiffAddedBg: 'rgb(24,46,38)',
|
|
68
|
+
mdDiffRemovedBg: 'rgb(48,28,38)',
|
|
69
|
+
syntaxKeyword: 'rgb(150,175,255)',
|
|
70
|
+
syntaxFunction: 'rgb(100,200,230)',
|
|
71
|
+
syntaxString: 'rgb(150,190,120)',
|
|
72
|
+
syntaxNumber: 'rgb(255,176,92)',
|
|
73
|
+
syntaxType: 'rgb(100,200,230)',
|
|
74
|
+
syntaxVariable: 'rgb(226,228,242)',
|
|
75
|
+
syntaxOperator: 'rgb(150,175,255)',
|
|
76
|
+
syntaxPunctuation: 'rgb(214,218,232)',
|
|
77
|
+
fastMode: 'rgb(255,126,26)',
|
|
78
|
+
};
|