@nghyane/arcane 0.1.10 → 0.1.11

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 (109) hide show
  1. package/package.json +4 -4
  2. package/src/main.ts +3 -0
  3. package/src/modes/components/model-selector.ts +1 -1
  4. package/src/modes/components/status-line.ts +15 -40
  5. package/src/modes/components/user-message.ts +2 -0
  6. package/src/modes/components/welcome.ts +1 -1
  7. package/src/modes/interactive-mode.ts +2 -0
  8. package/src/modes/theme/dark.json +56 -59
  9. package/src/modes/theme/defaults/dark-catppuccin.json +47 -56
  10. package/src/modes/theme/defaults/dark-dracula.json +24 -32
  11. package/src/modes/theme/defaults/dark-gruvbox.json +53 -74
  12. package/src/modes/theme/defaults/dark-solarized.json +33 -35
  13. package/src/modes/theme/defaults/dark-tokyo-night.json +57 -67
  14. package/src/modes/theme/defaults/index.ts +3 -179
  15. package/src/modes/theme/defaults/light-catppuccin.json +42 -50
  16. package/src/modes/theme/defaults/light-github.json +68 -94
  17. package/src/modes/theme/defaults/light-solarized.json +41 -49
  18. package/src/modes/theme/light.json +14 -12
  19. package/src/modes/theme/theme-schema.json +4 -0
  20. package/src/modes/theme/theme.ts +89 -6
  21. package/src/tui/output-block.ts +2 -12
  22. package/src/modes/theme/defaults/alabaster.json +0 -93
  23. package/src/modes/theme/defaults/amethyst.json +0 -96
  24. package/src/modes/theme/defaults/anthracite.json +0 -93
  25. package/src/modes/theme/defaults/basalt.json +0 -91
  26. package/src/modes/theme/defaults/birch.json +0 -95
  27. package/src/modes/theme/defaults/dark-abyss.json +0 -91
  28. package/src/modes/theme/defaults/dark-arctic.json +0 -104
  29. package/src/modes/theme/defaults/dark-aurora.json +0 -95
  30. package/src/modes/theme/defaults/dark-cavern.json +0 -91
  31. package/src/modes/theme/defaults/dark-copper.json +0 -95
  32. package/src/modes/theme/defaults/dark-cosmos.json +0 -90
  33. package/src/modes/theme/defaults/dark-cyberpunk.json +0 -102
  34. package/src/modes/theme/defaults/dark-eclipse.json +0 -91
  35. package/src/modes/theme/defaults/dark-ember.json +0 -95
  36. package/src/modes/theme/defaults/dark-equinox.json +0 -90
  37. package/src/modes/theme/defaults/dark-forest.json +0 -96
  38. package/src/modes/theme/defaults/dark-github.json +0 -105
  39. package/src/modes/theme/defaults/dark-lavender.json +0 -95
  40. package/src/modes/theme/defaults/dark-lunar.json +0 -89
  41. package/src/modes/theme/defaults/dark-midnight.json +0 -95
  42. package/src/modes/theme/defaults/dark-monochrome.json +0 -94
  43. package/src/modes/theme/defaults/dark-monokai.json +0 -98
  44. package/src/modes/theme/defaults/dark-nebula.json +0 -90
  45. package/src/modes/theme/defaults/dark-nord.json +0 -97
  46. package/src/modes/theme/defaults/dark-ocean.json +0 -101
  47. package/src/modes/theme/defaults/dark-one.json +0 -100
  48. package/src/modes/theme/defaults/dark-rainforest.json +0 -91
  49. package/src/modes/theme/defaults/dark-reef.json +0 -91
  50. package/src/modes/theme/defaults/dark-retro.json +0 -92
  51. package/src/modes/theme/defaults/dark-rose-pine.json +0 -96
  52. package/src/modes/theme/defaults/dark-sakura.json +0 -95
  53. package/src/modes/theme/defaults/dark-slate.json +0 -95
  54. package/src/modes/theme/defaults/dark-solstice.json +0 -90
  55. package/src/modes/theme/defaults/dark-starfall.json +0 -91
  56. package/src/modes/theme/defaults/dark-sunset.json +0 -99
  57. package/src/modes/theme/defaults/dark-swamp.json +0 -90
  58. package/src/modes/theme/defaults/dark-synthwave.json +0 -103
  59. package/src/modes/theme/defaults/dark-taiga.json +0 -91
  60. package/src/modes/theme/defaults/dark-terminal.json +0 -95
  61. package/src/modes/theme/defaults/dark-tundra.json +0 -91
  62. package/src/modes/theme/defaults/dark-twilight.json +0 -91
  63. package/src/modes/theme/defaults/dark-volcanic.json +0 -91
  64. package/src/modes/theme/defaults/graphite.json +0 -92
  65. package/src/modes/theme/defaults/light-arctic.json +0 -107
  66. package/src/modes/theme/defaults/light-aurora-day.json +0 -91
  67. package/src/modes/theme/defaults/light-canyon.json +0 -91
  68. package/src/modes/theme/defaults/light-cirrus.json +0 -90
  69. package/src/modes/theme/defaults/light-coral.json +0 -95
  70. package/src/modes/theme/defaults/light-cyberpunk.json +0 -96
  71. package/src/modes/theme/defaults/light-dawn.json +0 -90
  72. package/src/modes/theme/defaults/light-dunes.json +0 -91
  73. package/src/modes/theme/defaults/light-eucalyptus.json +0 -95
  74. package/src/modes/theme/defaults/light-forest.json +0 -100
  75. package/src/modes/theme/defaults/light-frost.json +0 -95
  76. package/src/modes/theme/defaults/light-glacier.json +0 -91
  77. package/src/modes/theme/defaults/light-gruvbox.json +0 -108
  78. package/src/modes/theme/defaults/light-haze.json +0 -90
  79. package/src/modes/theme/defaults/light-honeycomb.json +0 -95
  80. package/src/modes/theme/defaults/light-lagoon.json +0 -91
  81. package/src/modes/theme/defaults/light-lavender.json +0 -95
  82. package/src/modes/theme/defaults/light-meadow.json +0 -91
  83. package/src/modes/theme/defaults/light-mint.json +0 -95
  84. package/src/modes/theme/defaults/light-monochrome.json +0 -101
  85. package/src/modes/theme/defaults/light-ocean.json +0 -99
  86. package/src/modes/theme/defaults/light-one.json +0 -99
  87. package/src/modes/theme/defaults/light-opal.json +0 -91
  88. package/src/modes/theme/defaults/light-orchard.json +0 -91
  89. package/src/modes/theme/defaults/light-paper.json +0 -95
  90. package/src/modes/theme/defaults/light-prism.json +0 -90
  91. package/src/modes/theme/defaults/light-retro.json +0 -98
  92. package/src/modes/theme/defaults/light-sand.json +0 -95
  93. package/src/modes/theme/defaults/light-savanna.json +0 -91
  94. package/src/modes/theme/defaults/light-soleil.json +0 -90
  95. package/src/modes/theme/defaults/light-sunset.json +0 -99
  96. package/src/modes/theme/defaults/light-synthwave.json +0 -98
  97. package/src/modes/theme/defaults/light-tokyo-night.json +0 -111
  98. package/src/modes/theme/defaults/light-wetland.json +0 -91
  99. package/src/modes/theme/defaults/light-zenith.json +0 -89
  100. package/src/modes/theme/defaults/limestone.json +0 -94
  101. package/src/modes/theme/defaults/mahogany.json +0 -97
  102. package/src/modes/theme/defaults/marble.json +0 -93
  103. package/src/modes/theme/defaults/obsidian.json +0 -91
  104. package/src/modes/theme/defaults/onyx.json +0 -91
  105. package/src/modes/theme/defaults/pearl.json +0 -93
  106. package/src/modes/theme/defaults/porcelain.json +0 -91
  107. package/src/modes/theme/defaults/quartz.json +0 -96
  108. package/src/modes/theme/defaults/sandstone.json +0 -95
  109. package/src/modes/theme/defaults/titanium.json +0 -90
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@nghyane/arcane",
4
- "version": "0.1.10",
4
+ "version": "0.1.11",
5
5
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
6
6
  "homepage": "https://github.com/nghyane/arcane",
7
7
  "author": "Can Bölük",
@@ -45,11 +45,11 @@
45
45
  "dependencies": {
46
46
  "@mozilla/readability": "0.6.0",
47
47
  "@nghyane/arcane-stats": "^0.1.8",
48
- "@nghyane/arcane-agent": "^0.1.8",
49
- "@nghyane/arcane-codemode": "^0.1.9",
48
+ "@nghyane/arcane-agent": "^0.1.9",
49
+ "@nghyane/arcane-codemode": "^0.1.10",
50
50
  "@nghyane/arcane-ai": "^0.1.8",
51
51
  "@nghyane/arcane-natives": "^0.1.7",
52
- "@nghyane/arcane-tui": "^0.1.8",
52
+ "@nghyane/arcane-tui": "^0.1.9",
53
53
  "@nghyane/arcane-utils": "^0.1.6",
54
54
  "@sinclair/typebox": "^0.34.48",
55
55
  "@xterm/headless": "^6.0.0",
package/src/main.ts CHANGED
@@ -11,6 +11,7 @@ import * as os from "node:os";
11
11
  import * as path from "node:path";
12
12
  import { createInterface } from "node:readline/promises";
13
13
  import { type ImageContent, supportsXhigh } from "@nghyane/arcane-ai";
14
+ import { queryTerminalBackground } from "@nghyane/arcane-tui";
14
15
  import { $env, postmortem } from "@nghyane/arcane-utils";
15
16
  import { getProjectDir, setProjectDir } from "@nghyane/arcane-utils/dirs";
16
17
  import chalk from "chalk";
@@ -591,12 +592,14 @@ export async function runRootCommand(parsed: Args, rawArgs: string[]): Promise<v
591
592
  });
592
593
  }
593
594
 
595
+ const terminalBg = isInteractive ? await queryTerminalBackground() : null;
594
596
  await initTheme(
595
597
  isInteractive,
596
598
  settings.get("symbolPreset"),
597
599
  settings.get("colorBlindMode"),
598
600
  settings.get("theme.dark"),
599
601
  settings.get("theme.light"),
602
+ terminalBg ?? undefined,
600
603
  );
601
604
  time("initTheme:final");
602
605
 
@@ -21,7 +21,7 @@ import { DynamicBorder } from "./dynamic-border";
21
21
  function makeInvertedBadge(label: string, color: ThemeColor): string {
22
22
  const fgAnsi = theme.getFgAnsi(color);
23
23
  const bgAnsi = fgAnsi.replace(/\x1b\[38;/g, "\x1b[48;");
24
- return `${bgAnsi}\x1b[30m ${label} \x1b[39m\x1b[49m`;
24
+ return `${bgAnsi}\x1b[30m ${label} \x1b[39m${theme.getAppBgAnsi()}`;
25
25
  }
26
26
 
27
27
  interface ModelItem {
@@ -309,78 +309,53 @@ export class StatusLineComponent implements Component {
309
309
  const ctx = this.#buildSegmentContext(width);
310
310
  const effectiveSettings = this.#resolveSettings();
311
311
  const separatorDef = getSeparator(effectiveSettings.separator ?? "powerline-thin", theme);
312
-
313
- const bgAnsi = theme.getBgAnsi("statusLineBg");
314
312
  const fgAnsi = theme.getFgAnsi("text");
315
313
  const sepAnsi = theme.getFgAnsi("statusLineSep");
314
+ const leftSepWidth = visibleWidth(separatorDef.left);
315
+ const rightSepWidth = visibleWidth(separatorDef.right);
316
316
 
317
- // Collect visible segment contents
318
317
  const leftParts: string[] = [];
319
- for (const segId of effectiveSettings.leftSegments) {
318
+ for (const segId of this.#resolveSettings().leftSegments) {
320
319
  const rendered = renderSegment(segId, ctx);
321
- if (rendered.visible && rendered.content) {
322
- leftParts.push(rendered.content);
323
- }
320
+ if (rendered.visible && rendered.content) leftParts.push(rendered.content);
324
321
  }
325
322
 
326
323
  const rightParts: string[] = [];
327
- for (const segId of effectiveSettings.rightSegments) {
324
+ for (const segId of this.#resolveSettings().rightSegments) {
328
325
  const rendered = renderSegment(segId, ctx);
329
- if (rendered.visible && rendered.content) {
330
- rightParts.push(rendered.content);
331
- }
326
+ if (rendered.visible && rendered.content) rightParts.push(rendered.content);
332
327
  }
333
328
 
334
329
  const topFillWidth = width > 0 ? Math.max(0, width - 4) : 0;
335
330
  const left = [...leftParts];
336
331
  const right = [...rightParts];
337
332
 
338
- const leftSepWidth = visibleWidth(separatorDef.left);
339
- const rightSepWidth = visibleWidth(separatorDef.right);
340
- const leftCapWidth = separatorDef.endCaps ? visibleWidth(separatorDef.endCaps.right) : 0;
341
- const rightCapWidth = separatorDef.endCaps ? visibleWidth(separatorDef.endCaps.left) : 0;
342
-
343
- const groupWidth = (parts: string[], capWidth: number, sepWidth: number): number => {
333
+ const groupWidth = (parts: string[], sepWidth: number): number => {
344
334
  if (parts.length === 0) return 0;
345
335
  const partsWidth = parts.reduce((sum, part) => sum + visibleWidth(part), 0);
346
336
  const sepTotal = Math.max(0, parts.length - 1) * (sepWidth + 2);
347
- return partsWidth + sepTotal + 2 + capWidth;
337
+ return partsWidth + sepTotal + 2;
348
338
  };
349
339
 
350
- let leftWidth = groupWidth(left, leftCapWidth, leftSepWidth);
351
- let rightWidth = groupWidth(right, rightCapWidth, rightSepWidth);
340
+ let leftWidth = groupWidth(left, leftSepWidth);
341
+ let rightWidth = groupWidth(right, rightSepWidth);
352
342
  const totalWidth = () => leftWidth + rightWidth + (left.length > 0 && right.length > 0 ? 1 : 0);
353
343
 
354
344
  if (topFillWidth > 0) {
355
345
  while (totalWidth() > topFillWidth && right.length > 0) {
356
346
  right.pop();
357
- rightWidth = groupWidth(right, rightCapWidth, rightSepWidth);
347
+ rightWidth = groupWidth(right, rightSepWidth);
358
348
  }
359
349
  while (totalWidth() > topFillWidth && left.length > 0) {
360
350
  left.pop();
361
- leftWidth = groupWidth(left, leftCapWidth, leftSepWidth);
351
+ leftWidth = groupWidth(left, leftSepWidth);
362
352
  }
363
353
  }
364
354
 
365
355
  const renderGroup = (parts: string[], direction: "left" | "right"): string => {
366
356
  if (parts.length === 0) return "";
367
357
  const sep = direction === "left" ? separatorDef.left : separatorDef.right;
368
- const cap = separatorDef.endCaps
369
- ? direction === "left"
370
- ? separatorDef.endCaps.right
371
- : separatorDef.endCaps.left
372
- : "";
373
- const capPrefix = separatorDef.endCaps?.useBgAsFg ? bgAnsi.replace("\x1b[48;", "\x1b[38;") : bgAnsi + sepAnsi;
374
- const capText = cap ? `${capPrefix}${cap}\x1b[0m` : "";
375
-
376
- let content = bgAnsi + fgAnsi;
377
- content += ` ${parts.join(` ${sepAnsi}${sep}${fgAnsi} `)} `;
378
- content += "\x1b[0m";
379
-
380
- if (capText) {
381
- return direction === "right" ? capText + content : content + capText;
382
- }
383
- return content;
358
+ return `${fgAnsi} ${parts.join(` ${sepAnsi}${sep}${fgAnsi} `)} \x1b[0m`;
384
359
  };
385
360
 
386
361
  const leftGroup = renderGroup(left, "left");
@@ -391,8 +366,8 @@ export class StatusLineComponent implements Component {
391
366
  return leftGroup + (leftGroup && rightGroup ? " " : "") + rightGroup;
392
367
  }
393
368
 
394
- leftWidth = groupWidth(left, leftCapWidth, leftSepWidth);
395
- rightWidth = groupWidth(right, rightCapWidth, rightSepWidth);
369
+ leftWidth = groupWidth(left, leftSepWidth);
370
+ rightWidth = groupWidth(right, rightSepWidth);
396
371
  const gapWidth = Math.max(1, topFillWidth - leftWidth - rightWidth);
397
372
  return leftGroup + padding(gapWidth) + rightGroup;
398
373
  }
@@ -8,6 +8,7 @@ export class UserMessageComponent extends Container {
8
8
  constructor(text: string, synthetic = false) {
9
9
  super();
10
10
  const bgColor = (value: string) => theme.bg("userMessageBg", value);
11
+ const leftBorder = theme.fg("accent", "▎");
11
12
  const color = synthetic
12
13
  ? (value: string) => theme.fg("dim", value)
13
14
  : (value: string) => theme.fg("userMessageText", value);
@@ -16,6 +17,7 @@ export class UserMessageComponent extends Container {
16
17
  new Markdown(text, 1, 1, getMarkdownTheme(), {
17
18
  bgColor,
18
19
  color,
20
+ leftBorder,
19
21
  }),
20
22
  );
21
23
  }
@@ -82,7 +82,7 @@ export class WelcomeComponent implements Component {
82
82
  ...logoColored.map(l => this.#centerText(l, leftCol)),
83
83
  "",
84
84
  this.#centerText(theme.fg("muted", this.modelName), leftCol),
85
- this.#centerText(theme.fg("borderMuted", this.providerName), leftCol),
85
+ this.#centerText(theme.fg("dim", this.providerName), leftCol),
86
86
  ];
87
87
 
88
88
  // Right column separator
@@ -175,6 +175,7 @@ export class InteractiveMode implements InteractiveModeContext {
175
175
 
176
176
  this.ui = new TUI(new ProcessTerminal(), settings.get("showHardwareCursor"));
177
177
  this.ui.setClearOnShrink(settings.get("clearOnShrink"));
178
+ this.ui.setAppBg(theme.getAppBgPackedRgb());
178
179
  setMermaidRenderCallback(() => this.ui.requestRender());
179
180
  this.chatContainer = new Container();
180
181
  this.pendingMessagesContainer = new Container();
@@ -344,6 +345,7 @@ export class InteractiveMode implements InteractiveModeContext {
344
345
  // Set up theme file watcher
345
346
  onThemeChange(() => {
346
347
  this.ui.invalidate();
348
+ this.ui.setAppBg(theme.getAppBgPackedRgb());
347
349
  this.updateEditorBorderColor();
348
350
  this.ui.requestRender();
349
351
  });
@@ -2,26 +2,22 @@
2
2
  "$schema": "https://raw.githubusercontent.com/nghyane/arcane/main/packages/coding-agent/theme-schema.json",
3
3
  "name": "dark",
4
4
  "vars": {
5
- "cyan": "#0088fa",
6
- "blue": "#178fb9",
7
- "green": "#89d281",
8
- "red": "#fc3a4b",
9
- "yellow": "#e4c00f",
10
- "gray": "#777d88",
11
- "dimGray": "#5f6673",
12
- "darkGray": "#3d424a",
13
- "accent": "#febc38",
14
- "selectedBg": "#31363f",
15
- "userMsgBg": "#221d1a",
16
- "toolPendingBg": "#1d2129",
17
- "toolSuccessBg": "#161a1f",
18
- "toolErrorBg": "#291d1d",
19
- "customMsgBg": "#2a2530"
5
+ "cyan": "#8fbcbb",
6
+ "blue": "#88c0d0",
7
+ "lightBlue": "#81a1c1",
8
+ "green": "#a3be8c",
9
+ "red": "#d06050",
10
+ "yellow": "#ebcb8b",
11
+ "gray": "#7b88a1",
12
+ "dimGray": "#4c566a",
13
+ "darkGray": "#434c5e",
14
+ "accent": "#d08770",
15
+ "darkGrayBg": "#434c5e"
20
16
  },
21
17
  "colors": {
22
18
  "accent": "accent",
23
19
  "border": "blue",
24
- "borderAccent": "cyan",
20
+ "borderAccent": "accent",
25
21
  "borderMuted": "darkGray",
26
22
  "success": "green",
27
23
  "error": "red",
@@ -30,22 +26,22 @@
30
26
  "dim": "dimGray",
31
27
  "text": "",
32
28
  "thinkingText": "gray",
33
- "selectedBg": "selectedBg",
34
- "userMessageBg": "userMsgBg",
29
+ "selectedBg": "^2",
30
+ "userMessageBg": "^2",
35
31
  "userMessageText": "",
36
- "customMessageBg": "customMsgBg",
32
+ "customMessageBg": "^2",
37
33
  "customMessageText": "",
38
- "customMessageLabel": "#b281d6",
39
- "toolPendingBg": "toolPendingBg",
40
- "toolSuccessBg": "toolSuccessBg",
41
- "toolErrorBg": "toolErrorBg",
34
+ "customMessageLabel": "accent",
35
+ "toolPendingBg": "^3",
36
+ "toolSuccessBg": "^2",
37
+ "toolErrorBg": "^3",
42
38
  "toolTitle": "",
43
39
  "toolOutput": "gray",
44
- "mdHeading": "#febc38",
45
- "mdLink": "#0088fa",
40
+ "mdHeading": "accent",
41
+ "mdLink": "blue",
46
42
  "mdLinkUrl": "dimGray",
47
- "mdCode": "#e5c1ff",
48
- "mdCodeBlock": "#9CDCFE",
43
+ "mdCode": "yellow",
44
+ "mdCodeBlock": "green",
49
45
  "mdCodeBlockBorder": "darkGray",
50
46
  "mdQuote": "gray",
51
47
  "mdQuoteBorder": "darkGray",
@@ -54,42 +50,43 @@
54
50
  "toolDiffAdded": "green",
55
51
  "toolDiffRemoved": "red",
56
52
  "toolDiffContext": "gray",
57
- "link": "#0088fa",
58
- "syntaxComment": "#6A9955",
59
- "syntaxKeyword": "#569CD6",
60
- "syntaxFunction": "#DCDCAA",
61
- "syntaxVariable": "#9CDCFE",
62
- "syntaxString": "#CE9178",
63
- "syntaxNumber": "#B5CEA8",
64
- "syntaxType": "#4EC9B0",
65
- "syntaxOperator": "#D4D4D4",
66
- "syntaxPunctuation": "#D4D4D4",
53
+ "link": "blue",
54
+ "syntaxComment": "gray",
55
+ "syntaxKeyword": "lightBlue",
56
+ "syntaxFunction": "blue",
57
+ "syntaxVariable": "cyan",
58
+ "syntaxString": "green",
59
+ "syntaxNumber": "#b48ead",
60
+ "syntaxType": "yellow",
61
+ "syntaxOperator": "gray",
62
+ "syntaxPunctuation": "gray",
67
63
  "thinkingOff": "darkGray",
68
64
  "thinkingMinimal": "dimGray",
69
- "thinkingLow": "#178fb9",
70
- "thinkingMedium": "#0088fa",
71
- "thinkingHigh": "#b281d6",
72
- "thinkingXhigh": "#e5c1ff",
73
- "bashMode": "cyan",
74
- "statusLineBg": "#121212",
75
- "statusLineSep": 244,
76
- "statusLineModel": "#d787af",
77
- "statusLinePath": "#00afaf",
78
- "statusLineGitClean": "#5faf5f",
79
- "statusLineGitDirty": "#d7af5f",
80
- "statusLineContext": "#8787af",
81
- "statusLineSpend": "#5fafaf",
82
- "statusLineStaged": 70,
83
- "statusLineDirty": 178,
84
- "statusLineUntracked": 39,
85
- "statusLineOutput": 205,
86
- "statusLineCost": 205,
65
+ "thinkingLow": "blue",
66
+ "thinkingMedium": "cyan",
67
+ "thinkingHigh": "accent",
68
+ "thinkingXhigh": "#c87558",
69
+ "bashMode": "accent",
70
+ "statusLineBg": "^-2",
71
+ "statusLineSep": "dimGray",
72
+ "statusLineModel": "accent",
73
+ "statusLinePath": "blue",
74
+ "statusLineGitClean": "green",
75
+ "statusLineGitDirty": "yellow",
76
+ "statusLineContext": "gray",
77
+ "statusLineSpend": "cyan",
78
+ "statusLineStaged": 179,
79
+ "statusLineDirty": 173,
80
+ "statusLineUntracked": 180,
81
+ "statusLineOutput": 180,
82
+ "statusLineCost": 173,
87
83
  "statusLineSubagents": "accent",
88
- "pythonMode": "yellow"
84
+ "pythonMode": "yellow",
85
+ "appBg": "^0"
89
86
  },
90
87
  "export": {
91
- "pageBg": "#18181e",
92
- "cardBg": "#1e1e24",
93
- "infoBg": "#3c3728"
88
+ "pageBg": "#242933",
89
+ "cardBg": "#323846",
90
+ "infoBg": "#2d333b"
94
91
  }
95
92
  }
@@ -12,96 +12,87 @@
12
12
  "yellow": "#f9e2af",
13
13
  "green": "#a6e3a1",
14
14
  "teal": "#94e2d5",
15
- "sky": "#89dceb",
16
15
  "sapphire": "#74c7ec",
17
16
  "blue": "#89b4fa",
18
17
  "lavender": "#b4befe",
19
- "text": "#cdd6f4",
20
- "subtext1": "#bac2de",
21
18
  "subtext0": "#a6adc8",
22
- "overlay2": "#9399b2",
23
- "overlay1": "#7f849c",
24
19
  "overlay0": "#6c7086",
25
- "surface2": "#585b70",
26
20
  "surface1": "#45475a",
27
- "surface0": "#313244",
28
- "base": "#1e1e2e",
29
- "mantle": "#181825",
30
- "crust": "#11111b"
21
+ "surface0": "#313244"
31
22
  },
32
23
  "colors": {
33
- "accent": "peach",
34
- "border": "blue",
35
- "borderAccent": "lavender",
36
- "borderMuted": "surface0",
24
+ "accent": "mauve",
25
+ "border": "lavender",
26
+ "borderAccent": "mauve",
27
+ "borderMuted": "surface1",
37
28
  "success": "green",
38
29
  "error": "red",
39
30
  "warning": "yellow",
40
- "muted": "overlay1",
41
- "dim": "overlay0",
31
+ "muted": "overlay0",
32
+ "dim": "surface1",
42
33
  "text": "",
43
- "thinkingText": "overlay1",
44
- "selectedBg": "surface0",
45
- "userMessageBg": "mantle",
34
+ "thinkingText": "overlay0",
35
+ "selectedBg": "^2",
36
+ "userMessageBg": "^2",
46
37
  "userMessageText": "",
47
- "customMessageBg": "crust",
38
+ "customMessageBg": "^2",
48
39
  "customMessageText": "",
49
40
  "customMessageLabel": "mauve",
50
- "toolPendingBg": "surface0",
51
- "toolSuccessBg": "mantle",
52
- "toolErrorBg": "crust",
53
- "toolText": "",
54
- "toolTitle": "lavender",
55
- "toolOutput": "overlay1",
56
- "mdHeading": "peach",
41
+ "toolPendingBg": "^3",
42
+ "toolSuccessBg": "^2",
43
+ "toolErrorBg": "^3",
44
+ "toolTitle": "",
45
+ "toolOutput": "overlay0",
46
+ "mdHeading": "mauve",
57
47
  "mdLink": "blue",
58
48
  "mdLinkUrl": "overlay0",
59
- "mdCode": "rosewater",
60
- "mdCodeBlock": "text",
61
- "mdCodeBlockBorder": "surface0",
62
- "mdQuote": "overlay1",
49
+ "mdCode": "peach",
50
+ "mdCodeBlock": "green",
51
+ "mdCodeBlockBorder": "surface1",
52
+ "mdQuote": "overlay0",
63
53
  "mdQuoteBorder": "surface0",
64
- "mdHr": "surface0",
65
- "mdListBullet": "peach",
54
+ "mdHr": "surface1",
55
+ "mdListBullet": "mauve",
66
56
  "toolDiffAdded": "green",
67
57
  "toolDiffRemoved": "red",
68
- "toolDiffContext": "overlay1",
58
+ "toolDiffContext": "overlay0",
69
59
  "link": "blue",
70
60
  "syntaxComment": "overlay0",
71
61
  "syntaxKeyword": "mauve",
72
62
  "syntaxFunction": "blue",
73
- "syntaxVariable": "text",
63
+ "syntaxVariable": "teal",
74
64
  "syntaxString": "green",
75
65
  "syntaxNumber": "peach",
76
66
  "syntaxType": "yellow",
77
- "syntaxOperator": "sky",
78
- "syntaxPunctuation": "overlay2",
67
+ "syntaxOperator": "subtext0",
68
+ "syntaxPunctuation": "subtext0",
79
69
  "thinkingOff": "surface0",
80
70
  "thinkingMinimal": "overlay0",
81
- "thinkingLow": "blue",
82
- "thinkingMedium": "sapphire",
71
+ "thinkingLow": "sapphire",
72
+ "thinkingMedium": "blue",
83
73
  "thinkingHigh": "mauve",
84
74
  "thinkingXhigh": "pink",
85
- "bashMode": "teal",
86
- "statusLineBg": "crust",
75
+ "bashMode": "green",
76
+ "statusLineBg": "^-2",
87
77
  "statusLineSep": "surface1",
88
- "statusLineModel": "pink",
89
- "statusLinePath": "teal",
78
+ "statusLineModel": "mauve",
79
+ "statusLinePath": "blue",
90
80
  "statusLineGitClean": "green",
91
- "statusLineGitDirty": "yellow",
92
- "statusLineContext": "mauve",
93
- "statusLineSpend": "sapphire",
94
- "statusLineStaged": "green",
95
- "statusLineDirty": "peach",
96
- "statusLineUntracked": "sky",
97
- "statusLineOutput": "maroon",
98
- "statusLineCost": "maroon",
99
- "statusLineSubagents": "peach",
100
- "pythonMode": "yellow"
81
+ "statusLineGitDirty": "peach",
82
+ "statusLineContext": "overlay0",
83
+ "statusLineSpend": "teal",
84
+ "statusLineStaged": 107,
85
+ "statusLineDirty": 216,
86
+ "statusLineUntracked": 183,
87
+ "statusLineOutput": 183,
88
+ "statusLineCost": 107,
89
+ "statusLineSubagents": "mauve",
90
+ "pythonMode": "yellow",
91
+ "appBg": "^0"
101
92
  },
102
93
  "export": {
103
- "pageBg": "base",
104
- "cardBg": "mantle",
105
- "infoBg": "surface0"
94
+ "pageBg": "#1e1e2e",
95
+ "cardBg": "#24243e",
96
+ "infoBg": "#313244"
106
97
  }
107
98
  }
@@ -2,23 +2,15 @@
2
2
  "$schema": "https://raw.githubusercontent.com/nghyane/arcane/main/packages/coding-agent/theme-schema.json",
3
3
  "name": "dark-dracula",
4
4
  "vars": {
5
- "background": "#282A36",
6
- "currentLine": "#44475A",
7
- "foreground": "#F8F8F2",
8
- "comment": "#6272A4",
9
- "cyan": "#8BE9FD",
10
- "green": "#50FA7B",
5
+ "cyan": "#80d4e8",
6
+ "green": "#5af78e",
11
7
  "orange": "#FFB86C",
12
- "pink": "#FF79C6",
8
+ "pink": "#f286c4",
13
9
  "purple": "#BD93F9",
14
- "red": "#FF5555",
15
- "yellow": "#F1FA8C",
16
- "selectedBg": "#44475A",
17
- "userMsgBg": "#1f2029",
18
- "toolPendingBg": "#21222C",
19
- "toolSuccessBg": "#1a1f1e",
20
- "toolErrorBg": "#2a2028",
21
- "customMsgBg": "#2b2640"
10
+ "red": "#f07178",
11
+ "yellow": "#e8d87a",
12
+ "comment": "#6272A4",
13
+ "currentLine": "#44475A"
22
14
  },
23
15
  "colors": {
24
16
  "accent": "purple",
@@ -29,20 +21,19 @@
29
21
  "error": "red",
30
22
  "warning": "yellow",
31
23
  "muted": "comment",
32
- "dim": "currentLine",
24
+ "dim": "#5E6490",
33
25
  "text": "",
34
26
  "thinkingText": "comment",
35
- "selectedBg": "selectedBg",
36
- "userMessageBg": "userMsgBg",
27
+ "selectedBg": "^2",
28
+ "userMessageBg": "^2",
37
29
  "userMessageText": "",
38
- "customMessageBg": "customMsgBg",
30
+ "customMessageBg": "^2",
39
31
  "customMessageText": "",
40
32
  "customMessageLabel": "purple",
41
- "toolPendingBg": "toolPendingBg",
42
- "toolSuccessBg": "toolSuccessBg",
43
- "toolErrorBg": "toolErrorBg",
44
- "toolText": "",
45
- "toolTitle": "cyan",
33
+ "toolPendingBg": "^3",
34
+ "toolSuccessBg": "^2",
35
+ "toolErrorBg": "^3",
36
+ "toolTitle": "",
46
37
  "toolOutput": "comment",
47
38
  "mdHeading": "purple",
48
39
  "mdLink": "cyan",
@@ -66,7 +57,7 @@
66
57
  "syntaxNumber": "purple",
67
58
  "syntaxType": "cyan",
68
59
  "syntaxOperator": "pink",
69
- "syntaxPunctuation": "foreground",
60
+ "syntaxPunctuation": "#F8F8F2",
70
61
  "thinkingOff": "currentLine",
71
62
  "thinkingMinimal": "comment",
72
63
  "thinkingLow": "cyan",
@@ -74,7 +65,7 @@
74
65
  "thinkingHigh": "pink",
75
66
  "thinkingXhigh": "orange",
76
67
  "bashMode": "green",
77
- "statusLineBg": "background",
68
+ "statusLineBg": "^-2",
78
69
  "statusLineSep": "currentLine",
79
70
  "statusLineModel": "purple",
80
71
  "statusLinePath": "cyan",
@@ -82,13 +73,14 @@
82
73
  "statusLineGitDirty": "orange",
83
74
  "statusLineContext": "purple",
84
75
  "statusLineSpend": "cyan",
85
- "statusLineStaged": "green",
86
- "statusLineDirty": "orange",
87
- "statusLineUntracked": "pink",
88
- "statusLineOutput": "pink",
89
- "statusLineCost": "pink",
76
+ "statusLineStaged": 179,
77
+ "statusLineDirty": 173,
78
+ "statusLineUntracked": 180,
79
+ "statusLineOutput": 180,
80
+ "statusLineCost": 173,
90
81
  "statusLineSubagents": "purple",
91
- "pythonMode": "yellow"
82
+ "pythonMode": "yellow",
83
+ "appBg": "^0"
92
84
  },
93
85
  "export": {
94
86
  "pageBg": "#1e1f29",