@nghyane/arcane 0.1.8 → 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 (131) hide show
  1. package/package.json +6 -6
  2. package/src/config/settings-schema.ts +0 -10
  3. package/src/discovery/helpers.ts +1 -6
  4. package/src/index.ts +1 -0
  5. package/src/main.ts +3 -0
  6. package/src/memories/index.ts +3 -3
  7. package/src/modes/components/model-selector.ts +1 -1
  8. package/src/modes/components/settings-defs.ts +0 -8
  9. package/src/modes/components/status-line.ts +15 -40
  10. package/src/modes/components/user-message.ts +2 -0
  11. package/src/modes/components/welcome.ts +1 -1
  12. package/src/modes/interactive-mode.ts +2 -0
  13. package/src/modes/theme/dark.json +56 -59
  14. package/src/modes/theme/defaults/dark-catppuccin.json +47 -56
  15. package/src/modes/theme/defaults/dark-dracula.json +24 -32
  16. package/src/modes/theme/defaults/dark-gruvbox.json +53 -74
  17. package/src/modes/theme/defaults/dark-solarized.json +33 -35
  18. package/src/modes/theme/defaults/dark-tokyo-night.json +57 -67
  19. package/src/modes/theme/defaults/index.ts +3 -179
  20. package/src/modes/theme/defaults/light-catppuccin.json +42 -50
  21. package/src/modes/theme/defaults/light-github.json +68 -94
  22. package/src/modes/theme/defaults/light-solarized.json +41 -49
  23. package/src/modes/theme/light.json +14 -12
  24. package/src/modes/theme/theme-schema.json +4 -0
  25. package/src/modes/theme/theme.ts +89 -6
  26. package/src/patch/applicator.ts +12 -4
  27. package/src/prompts/agents/task.md +1 -1
  28. package/src/prompts/system/subagent-system-prompt.md +2 -14
  29. package/src/prompts/system/system-prompt.md +12 -14
  30. package/src/prompts/tools/task.md +49 -178
  31. package/src/prompts/tools/todo-write.md +4 -4
  32. package/src/sdk.ts +15 -16
  33. package/src/session/session-manager.ts +1 -3
  34. package/src/task/executor.ts +2 -2
  35. package/src/task/index.ts +5 -5
  36. package/src/task/types.ts +7 -20
  37. package/src/tools/index.ts +16 -33
  38. package/src/tools/subagent-tool.ts +5 -5
  39. package/src/tools/todo-write.ts +0 -37
  40. package/src/tui/output-block.ts +2 -12
  41. package/src/modes/theme/defaults/alabaster.json +0 -93
  42. package/src/modes/theme/defaults/amethyst.json +0 -96
  43. package/src/modes/theme/defaults/anthracite.json +0 -93
  44. package/src/modes/theme/defaults/basalt.json +0 -91
  45. package/src/modes/theme/defaults/birch.json +0 -95
  46. package/src/modes/theme/defaults/dark-abyss.json +0 -91
  47. package/src/modes/theme/defaults/dark-arctic.json +0 -104
  48. package/src/modes/theme/defaults/dark-aurora.json +0 -95
  49. package/src/modes/theme/defaults/dark-cavern.json +0 -91
  50. package/src/modes/theme/defaults/dark-copper.json +0 -95
  51. package/src/modes/theme/defaults/dark-cosmos.json +0 -90
  52. package/src/modes/theme/defaults/dark-cyberpunk.json +0 -102
  53. package/src/modes/theme/defaults/dark-eclipse.json +0 -91
  54. package/src/modes/theme/defaults/dark-ember.json +0 -95
  55. package/src/modes/theme/defaults/dark-equinox.json +0 -90
  56. package/src/modes/theme/defaults/dark-forest.json +0 -96
  57. package/src/modes/theme/defaults/dark-github.json +0 -105
  58. package/src/modes/theme/defaults/dark-lavender.json +0 -95
  59. package/src/modes/theme/defaults/dark-lunar.json +0 -89
  60. package/src/modes/theme/defaults/dark-midnight.json +0 -95
  61. package/src/modes/theme/defaults/dark-monochrome.json +0 -94
  62. package/src/modes/theme/defaults/dark-monokai.json +0 -98
  63. package/src/modes/theme/defaults/dark-nebula.json +0 -90
  64. package/src/modes/theme/defaults/dark-nord.json +0 -97
  65. package/src/modes/theme/defaults/dark-ocean.json +0 -101
  66. package/src/modes/theme/defaults/dark-one.json +0 -100
  67. package/src/modes/theme/defaults/dark-rainforest.json +0 -91
  68. package/src/modes/theme/defaults/dark-reef.json +0 -91
  69. package/src/modes/theme/defaults/dark-retro.json +0 -92
  70. package/src/modes/theme/defaults/dark-rose-pine.json +0 -96
  71. package/src/modes/theme/defaults/dark-sakura.json +0 -95
  72. package/src/modes/theme/defaults/dark-slate.json +0 -95
  73. package/src/modes/theme/defaults/dark-solstice.json +0 -90
  74. package/src/modes/theme/defaults/dark-starfall.json +0 -91
  75. package/src/modes/theme/defaults/dark-sunset.json +0 -99
  76. package/src/modes/theme/defaults/dark-swamp.json +0 -90
  77. package/src/modes/theme/defaults/dark-synthwave.json +0 -103
  78. package/src/modes/theme/defaults/dark-taiga.json +0 -91
  79. package/src/modes/theme/defaults/dark-terminal.json +0 -95
  80. package/src/modes/theme/defaults/dark-tundra.json +0 -91
  81. package/src/modes/theme/defaults/dark-twilight.json +0 -91
  82. package/src/modes/theme/defaults/dark-volcanic.json +0 -91
  83. package/src/modes/theme/defaults/graphite.json +0 -92
  84. package/src/modes/theme/defaults/light-arctic.json +0 -107
  85. package/src/modes/theme/defaults/light-aurora-day.json +0 -91
  86. package/src/modes/theme/defaults/light-canyon.json +0 -91
  87. package/src/modes/theme/defaults/light-cirrus.json +0 -90
  88. package/src/modes/theme/defaults/light-coral.json +0 -95
  89. package/src/modes/theme/defaults/light-cyberpunk.json +0 -96
  90. package/src/modes/theme/defaults/light-dawn.json +0 -90
  91. package/src/modes/theme/defaults/light-dunes.json +0 -91
  92. package/src/modes/theme/defaults/light-eucalyptus.json +0 -95
  93. package/src/modes/theme/defaults/light-forest.json +0 -100
  94. package/src/modes/theme/defaults/light-frost.json +0 -95
  95. package/src/modes/theme/defaults/light-glacier.json +0 -91
  96. package/src/modes/theme/defaults/light-gruvbox.json +0 -108
  97. package/src/modes/theme/defaults/light-haze.json +0 -90
  98. package/src/modes/theme/defaults/light-honeycomb.json +0 -95
  99. package/src/modes/theme/defaults/light-lagoon.json +0 -91
  100. package/src/modes/theme/defaults/light-lavender.json +0 -95
  101. package/src/modes/theme/defaults/light-meadow.json +0 -91
  102. package/src/modes/theme/defaults/light-mint.json +0 -95
  103. package/src/modes/theme/defaults/light-monochrome.json +0 -101
  104. package/src/modes/theme/defaults/light-ocean.json +0 -99
  105. package/src/modes/theme/defaults/light-one.json +0 -99
  106. package/src/modes/theme/defaults/light-opal.json +0 -91
  107. package/src/modes/theme/defaults/light-orchard.json +0 -91
  108. package/src/modes/theme/defaults/light-paper.json +0 -95
  109. package/src/modes/theme/defaults/light-prism.json +0 -90
  110. package/src/modes/theme/defaults/light-retro.json +0 -98
  111. package/src/modes/theme/defaults/light-sand.json +0 -95
  112. package/src/modes/theme/defaults/light-savanna.json +0 -91
  113. package/src/modes/theme/defaults/light-soleil.json +0 -90
  114. package/src/modes/theme/defaults/light-sunset.json +0 -99
  115. package/src/modes/theme/defaults/light-synthwave.json +0 -98
  116. package/src/modes/theme/defaults/light-tokyo-night.json +0 -111
  117. package/src/modes/theme/defaults/light-wetland.json +0 -91
  118. package/src/modes/theme/defaults/light-zenith.json +0 -89
  119. package/src/modes/theme/defaults/limestone.json +0 -94
  120. package/src/modes/theme/defaults/mahogany.json +0 -97
  121. package/src/modes/theme/defaults/marble.json +0 -93
  122. package/src/modes/theme/defaults/obsidian.json +0 -91
  123. package/src/modes/theme/defaults/onyx.json +0 -91
  124. package/src/modes/theme/defaults/pearl.json +0 -93
  125. package/src/modes/theme/defaults/porcelain.json +0 -91
  126. package/src/modes/theme/defaults/quartz.json +0 -96
  127. package/src/modes/theme/defaults/sandstone.json +0 -95
  128. package/src/modes/theme/defaults/titanium.json +0 -90
  129. package/src/prompts/system/subagent-submit-reminder.md +0 -11
  130. package/src/tools/jtd-to-json-schema.ts +0 -247
  131. package/src/tools/submit-result.ts +0 -152
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@nghyane/arcane",
4
- "version": "0.1.8",
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",
@@ -44,12 +44,12 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "@mozilla/readability": "0.6.0",
47
- "@nghyane/arcane-stats": "^0.1.7",
48
- "@nghyane/arcane-agent": "^0.1.7",
49
- "@nghyane/arcane-codemode": "^0.1.7",
50
- "@nghyane/arcane-ai": "^0.1.7",
47
+ "@nghyane/arcane-stats": "^0.1.8",
48
+ "@nghyane/arcane-agent": "^0.1.9",
49
+ "@nghyane/arcane-codemode": "^0.1.10",
50
+ "@nghyane/arcane-ai": "^0.1.8",
51
51
  "@nghyane/arcane-natives": "^0.1.7",
52
- "@nghyane/arcane-tui": "^0.1.7",
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",
@@ -548,16 +548,6 @@ export const SETTINGS_SCHEMA = {
548
548
  submenu: true,
549
549
  },
550
550
  },
551
- "task.maxRecursionDepth": {
552
- type: "number",
553
- default: 2,
554
- ui: {
555
- tab: "tools",
556
- label: "Task max recursion depth",
557
- description: "How many levels deep subagents can spawn their own subagents",
558
- submenu: true,
559
- },
560
- },
561
551
  "task.disabledAgents": {
562
552
  type: "array",
563
553
  default: [] as string[],
@@ -232,12 +232,7 @@ export function parseAgentFields(frontmatter: Record<string, unknown>): ParsedAg
232
232
  return null;
233
233
  }
234
234
 
235
- let tools = parseArrayOrCSV(frontmatter.tools);
236
-
237
- // Subagents with output schema need submit_result to return structured data
238
- if (tools && frontmatter.output && !tools.includes("submit_result")) {
239
- tools = [...tools, "submit_result"];
240
- }
235
+ const tools = parseArrayOrCSV(frontmatter.tools);
241
236
 
242
237
  const model = parseModelList(frontmatter.model);
243
238
  const thinkingLevel = parseThinkingLevel(frontmatter);
package/src/index.ts CHANGED
@@ -179,6 +179,7 @@ export {
179
179
  loadSshTool,
180
180
  PythonTool,
181
181
  ReadTool,
182
+ type SubagentContext,
182
183
  type ToolSession,
183
184
  WriteTool,
184
185
  } from "./sdk";
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
 
@@ -121,12 +121,12 @@ export function startMemoryStartupTask(options: {
121
121
  settings: Settings;
122
122
  modelRegistry: ModelRegistry;
123
123
  agentDir: string;
124
- taskDepth: number;
124
+ isSubagent: boolean;
125
125
  }): void {
126
- const { session, settings, modelRegistry, agentDir, taskDepth } = options;
126
+ const { session, settings, modelRegistry, agentDir, isSubagent } = options;
127
127
  const cfg = loadMemoryConfig(settings);
128
128
  if (!cfg.enabled) return;
129
- if (taskDepth > 0) return;
129
+ if (isSubagent) return;
130
130
  if (!session.sessionManager.getSessionFile()) return;
131
131
 
132
132
  const dbPath = getAgentDbPath(agentDir);
@@ -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 {
@@ -85,14 +85,6 @@ const OPTION_PROVIDERS: Partial<Record<SettingPath, OptionProvider>> = {
85
85
  { value: "32", label: "32 tasks" },
86
86
  { value: "64", label: "64 tasks" },
87
87
  ],
88
- // Task max recursion depth
89
- "task.maxRecursionDepth": [
90
- { value: "-1", label: "Unlimited" },
91
- { value: "0", label: "None" },
92
- { value: "1", label: "Single" },
93
- { value: "2", label: "Double" },
94
- { value: "3", label: "Triple" },
95
- ],
96
88
  // Todo max reminders
97
89
  "todo.reminders.max": [
98
90
  { value: "1", label: "1 reminder" },
@@ -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
  }