@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.
- package/package.json +6 -6
- package/src/config/settings-schema.ts +0 -10
- package/src/discovery/helpers.ts +1 -6
- package/src/index.ts +1 -0
- package/src/main.ts +3 -0
- package/src/memories/index.ts +3 -3
- package/src/modes/components/model-selector.ts +1 -1
- package/src/modes/components/settings-defs.ts +0 -8
- package/src/modes/components/status-line.ts +15 -40
- package/src/modes/components/user-message.ts +2 -0
- package/src/modes/components/welcome.ts +1 -1
- package/src/modes/interactive-mode.ts +2 -0
- package/src/modes/theme/dark.json +56 -59
- package/src/modes/theme/defaults/dark-catppuccin.json +47 -56
- package/src/modes/theme/defaults/dark-dracula.json +24 -32
- package/src/modes/theme/defaults/dark-gruvbox.json +53 -74
- package/src/modes/theme/defaults/dark-solarized.json +33 -35
- package/src/modes/theme/defaults/dark-tokyo-night.json +57 -67
- package/src/modes/theme/defaults/index.ts +3 -179
- package/src/modes/theme/defaults/light-catppuccin.json +42 -50
- package/src/modes/theme/defaults/light-github.json +68 -94
- package/src/modes/theme/defaults/light-solarized.json +41 -49
- package/src/modes/theme/light.json +14 -12
- package/src/modes/theme/theme-schema.json +4 -0
- package/src/modes/theme/theme.ts +89 -6
- package/src/patch/applicator.ts +12 -4
- package/src/prompts/agents/task.md +1 -1
- package/src/prompts/system/subagent-system-prompt.md +2 -14
- package/src/prompts/system/system-prompt.md +12 -14
- package/src/prompts/tools/task.md +49 -178
- package/src/prompts/tools/todo-write.md +4 -4
- package/src/sdk.ts +15 -16
- package/src/session/session-manager.ts +1 -3
- package/src/task/executor.ts +2 -2
- package/src/task/index.ts +5 -5
- package/src/task/types.ts +7 -20
- package/src/tools/index.ts +16 -33
- package/src/tools/subagent-tool.ts +5 -5
- package/src/tools/todo-write.ts +0 -37
- package/src/tui/output-block.ts +2 -12
- package/src/modes/theme/defaults/alabaster.json +0 -93
- package/src/modes/theme/defaults/amethyst.json +0 -96
- package/src/modes/theme/defaults/anthracite.json +0 -93
- package/src/modes/theme/defaults/basalt.json +0 -91
- package/src/modes/theme/defaults/birch.json +0 -95
- package/src/modes/theme/defaults/dark-abyss.json +0 -91
- package/src/modes/theme/defaults/dark-arctic.json +0 -104
- package/src/modes/theme/defaults/dark-aurora.json +0 -95
- package/src/modes/theme/defaults/dark-cavern.json +0 -91
- package/src/modes/theme/defaults/dark-copper.json +0 -95
- package/src/modes/theme/defaults/dark-cosmos.json +0 -90
- package/src/modes/theme/defaults/dark-cyberpunk.json +0 -102
- package/src/modes/theme/defaults/dark-eclipse.json +0 -91
- package/src/modes/theme/defaults/dark-ember.json +0 -95
- package/src/modes/theme/defaults/dark-equinox.json +0 -90
- package/src/modes/theme/defaults/dark-forest.json +0 -96
- package/src/modes/theme/defaults/dark-github.json +0 -105
- package/src/modes/theme/defaults/dark-lavender.json +0 -95
- package/src/modes/theme/defaults/dark-lunar.json +0 -89
- package/src/modes/theme/defaults/dark-midnight.json +0 -95
- package/src/modes/theme/defaults/dark-monochrome.json +0 -94
- package/src/modes/theme/defaults/dark-monokai.json +0 -98
- package/src/modes/theme/defaults/dark-nebula.json +0 -90
- package/src/modes/theme/defaults/dark-nord.json +0 -97
- package/src/modes/theme/defaults/dark-ocean.json +0 -101
- package/src/modes/theme/defaults/dark-one.json +0 -100
- package/src/modes/theme/defaults/dark-rainforest.json +0 -91
- package/src/modes/theme/defaults/dark-reef.json +0 -91
- package/src/modes/theme/defaults/dark-retro.json +0 -92
- package/src/modes/theme/defaults/dark-rose-pine.json +0 -96
- package/src/modes/theme/defaults/dark-sakura.json +0 -95
- package/src/modes/theme/defaults/dark-slate.json +0 -95
- package/src/modes/theme/defaults/dark-solstice.json +0 -90
- package/src/modes/theme/defaults/dark-starfall.json +0 -91
- package/src/modes/theme/defaults/dark-sunset.json +0 -99
- package/src/modes/theme/defaults/dark-swamp.json +0 -90
- package/src/modes/theme/defaults/dark-synthwave.json +0 -103
- package/src/modes/theme/defaults/dark-taiga.json +0 -91
- package/src/modes/theme/defaults/dark-terminal.json +0 -95
- package/src/modes/theme/defaults/dark-tundra.json +0 -91
- package/src/modes/theme/defaults/dark-twilight.json +0 -91
- package/src/modes/theme/defaults/dark-volcanic.json +0 -91
- package/src/modes/theme/defaults/graphite.json +0 -92
- package/src/modes/theme/defaults/light-arctic.json +0 -107
- package/src/modes/theme/defaults/light-aurora-day.json +0 -91
- package/src/modes/theme/defaults/light-canyon.json +0 -91
- package/src/modes/theme/defaults/light-cirrus.json +0 -90
- package/src/modes/theme/defaults/light-coral.json +0 -95
- package/src/modes/theme/defaults/light-cyberpunk.json +0 -96
- package/src/modes/theme/defaults/light-dawn.json +0 -90
- package/src/modes/theme/defaults/light-dunes.json +0 -91
- package/src/modes/theme/defaults/light-eucalyptus.json +0 -95
- package/src/modes/theme/defaults/light-forest.json +0 -100
- package/src/modes/theme/defaults/light-frost.json +0 -95
- package/src/modes/theme/defaults/light-glacier.json +0 -91
- package/src/modes/theme/defaults/light-gruvbox.json +0 -108
- package/src/modes/theme/defaults/light-haze.json +0 -90
- package/src/modes/theme/defaults/light-honeycomb.json +0 -95
- package/src/modes/theme/defaults/light-lagoon.json +0 -91
- package/src/modes/theme/defaults/light-lavender.json +0 -95
- package/src/modes/theme/defaults/light-meadow.json +0 -91
- package/src/modes/theme/defaults/light-mint.json +0 -95
- package/src/modes/theme/defaults/light-monochrome.json +0 -101
- package/src/modes/theme/defaults/light-ocean.json +0 -99
- package/src/modes/theme/defaults/light-one.json +0 -99
- package/src/modes/theme/defaults/light-opal.json +0 -91
- package/src/modes/theme/defaults/light-orchard.json +0 -91
- package/src/modes/theme/defaults/light-paper.json +0 -95
- package/src/modes/theme/defaults/light-prism.json +0 -90
- package/src/modes/theme/defaults/light-retro.json +0 -98
- package/src/modes/theme/defaults/light-sand.json +0 -95
- package/src/modes/theme/defaults/light-savanna.json +0 -91
- package/src/modes/theme/defaults/light-soleil.json +0 -90
- package/src/modes/theme/defaults/light-sunset.json +0 -99
- package/src/modes/theme/defaults/light-synthwave.json +0 -98
- package/src/modes/theme/defaults/light-tokyo-night.json +0 -111
- package/src/modes/theme/defaults/light-wetland.json +0 -91
- package/src/modes/theme/defaults/light-zenith.json +0 -89
- package/src/modes/theme/defaults/limestone.json +0 -94
- package/src/modes/theme/defaults/mahogany.json +0 -97
- package/src/modes/theme/defaults/marble.json +0 -93
- package/src/modes/theme/defaults/obsidian.json +0 -91
- package/src/modes/theme/defaults/onyx.json +0 -91
- package/src/modes/theme/defaults/pearl.json +0 -93
- package/src/modes/theme/defaults/porcelain.json +0 -91
- package/src/modes/theme/defaults/quartz.json +0 -96
- package/src/modes/theme/defaults/sandstone.json +0 -95
- package/src/modes/theme/defaults/titanium.json +0 -90
- package/src/prompts/system/subagent-submit-reminder.md +0 -11
- package/src/tools/jtd-to-json-schema.ts +0 -247
- 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.
|
|
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.
|
|
48
|
-
"@nghyane/arcane-agent": "^0.1.
|
|
49
|
-
"@nghyane/arcane-codemode": "^0.1.
|
|
50
|
-
"@nghyane/arcane-ai": "^0.1.
|
|
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.
|
|
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[],
|
package/src/discovery/helpers.ts
CHANGED
|
@@ -232,12 +232,7 @@ export function parseAgentFields(frontmatter: Record<string, unknown>): ParsedAg
|
|
|
232
232
|
return null;
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
|
|
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
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
|
|
package/src/memories/index.ts
CHANGED
|
@@ -121,12 +121,12 @@ export function startMemoryStartupTask(options: {
|
|
|
121
121
|
settings: Settings;
|
|
122
122
|
modelRegistry: ModelRegistry;
|
|
123
123
|
agentDir: string;
|
|
124
|
-
|
|
124
|
+
isSubagent: boolean;
|
|
125
125
|
}): void {
|
|
126
|
-
const { session, settings, modelRegistry, agentDir,
|
|
126
|
+
const { session, settings, modelRegistry, agentDir, isSubagent } = options;
|
|
127
127
|
const cfg = loadMemoryConfig(settings);
|
|
128
128
|
if (!cfg.enabled) return;
|
|
129
|
-
if (
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
337
|
+
return partsWidth + sepTotal + 2;
|
|
348
338
|
};
|
|
349
339
|
|
|
350
|
-
let leftWidth = groupWidth(left,
|
|
351
|
-
let rightWidth = groupWidth(right,
|
|
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,
|
|
347
|
+
rightWidth = groupWidth(right, rightSepWidth);
|
|
358
348
|
}
|
|
359
349
|
while (totalWidth() > topFillWidth && left.length > 0) {
|
|
360
350
|
left.pop();
|
|
361
|
-
leftWidth = groupWidth(left,
|
|
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
|
-
|
|
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,
|
|
395
|
-
rightWidth = groupWidth(right,
|
|
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("
|
|
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": "#
|
|
6
|
-
"blue": "#
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
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": "
|
|
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": "
|
|
34
|
-
"userMessageBg": "
|
|
29
|
+
"selectedBg": "^2",
|
|
30
|
+
"userMessageBg": "^2",
|
|
35
31
|
"userMessageText": "",
|
|
36
|
-
"customMessageBg": "
|
|
32
|
+
"customMessageBg": "^2",
|
|
37
33
|
"customMessageText": "",
|
|
38
|
-
"customMessageLabel": "
|
|
39
|
-
"toolPendingBg": "
|
|
40
|
-
"toolSuccessBg": "
|
|
41
|
-
"toolErrorBg": "
|
|
34
|
+
"customMessageLabel": "accent",
|
|
35
|
+
"toolPendingBg": "^3",
|
|
36
|
+
"toolSuccessBg": "^2",
|
|
37
|
+
"toolErrorBg": "^3",
|
|
42
38
|
"toolTitle": "",
|
|
43
39
|
"toolOutput": "gray",
|
|
44
|
-
"mdHeading": "
|
|
45
|
-
"mdLink": "
|
|
40
|
+
"mdHeading": "accent",
|
|
41
|
+
"mdLink": "blue",
|
|
46
42
|
"mdLinkUrl": "dimGray",
|
|
47
|
-
"mdCode": "
|
|
48
|
-
"mdCodeBlock": "
|
|
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": "
|
|
58
|
-
"syntaxComment": "
|
|
59
|
-
"syntaxKeyword": "
|
|
60
|
-
"syntaxFunction": "
|
|
61
|
-
"syntaxVariable": "
|
|
62
|
-
"syntaxString": "
|
|
63
|
-
"syntaxNumber": "#
|
|
64
|
-
"syntaxType": "
|
|
65
|
-
"syntaxOperator": "
|
|
66
|
-
"syntaxPunctuation": "
|
|
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": "
|
|
70
|
-
"thinkingMedium": "
|
|
71
|
-
"thinkingHigh": "
|
|
72
|
-
"thinkingXhigh": "#
|
|
73
|
-
"bashMode": "
|
|
74
|
-
"statusLineBg": "
|
|
75
|
-
"statusLineSep":
|
|
76
|
-
"statusLineModel": "
|
|
77
|
-
"statusLinePath": "
|
|
78
|
-
"statusLineGitClean": "
|
|
79
|
-
"statusLineGitDirty": "
|
|
80
|
-
"statusLineContext": "
|
|
81
|
-
"statusLineSpend": "
|
|
82
|
-
"statusLineStaged":
|
|
83
|
-
"statusLineDirty":
|
|
84
|
-
"statusLineUntracked":
|
|
85
|
-
"statusLineOutput":
|
|
86
|
-
"statusLineCost":
|
|
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": "#
|
|
92
|
-
"cardBg": "#
|
|
93
|
-
"infoBg": "#
|
|
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": "
|
|
34
|
-
"border": "
|
|
35
|
-
"borderAccent": "
|
|
36
|
-
"borderMuted": "
|
|
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": "
|
|
41
|
-
"dim": "
|
|
31
|
+
"muted": "overlay0",
|
|
32
|
+
"dim": "surface1",
|
|
42
33
|
"text": "",
|
|
43
|
-
"thinkingText": "
|
|
44
|
-
"selectedBg": "
|
|
45
|
-
"userMessageBg": "
|
|
34
|
+
"thinkingText": "overlay0",
|
|
35
|
+
"selectedBg": "^2",
|
|
36
|
+
"userMessageBg": "^2",
|
|
46
37
|
"userMessageText": "",
|
|
47
|
-
"customMessageBg": "
|
|
38
|
+
"customMessageBg": "^2",
|
|
48
39
|
"customMessageText": "",
|
|
49
40
|
"customMessageLabel": "mauve",
|
|
50
|
-
"toolPendingBg": "
|
|
51
|
-
"toolSuccessBg": "
|
|
52
|
-
"toolErrorBg": "
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
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": "
|
|
60
|
-
"mdCodeBlock": "
|
|
61
|
-
"mdCodeBlockBorder": "
|
|
62
|
-
"mdQuote": "
|
|
49
|
+
"mdCode": "peach",
|
|
50
|
+
"mdCodeBlock": "green",
|
|
51
|
+
"mdCodeBlockBorder": "surface1",
|
|
52
|
+
"mdQuote": "overlay0",
|
|
63
53
|
"mdQuoteBorder": "surface0",
|
|
64
|
-
"mdHr": "
|
|
65
|
-
"mdListBullet": "
|
|
54
|
+
"mdHr": "surface1",
|
|
55
|
+
"mdListBullet": "mauve",
|
|
66
56
|
"toolDiffAdded": "green",
|
|
67
57
|
"toolDiffRemoved": "red",
|
|
68
|
-
"toolDiffContext": "
|
|
58
|
+
"toolDiffContext": "overlay0",
|
|
69
59
|
"link": "blue",
|
|
70
60
|
"syntaxComment": "overlay0",
|
|
71
61
|
"syntaxKeyword": "mauve",
|
|
72
62
|
"syntaxFunction": "blue",
|
|
73
|
-
"syntaxVariable": "
|
|
63
|
+
"syntaxVariable": "teal",
|
|
74
64
|
"syntaxString": "green",
|
|
75
65
|
"syntaxNumber": "peach",
|
|
76
66
|
"syntaxType": "yellow",
|
|
77
|
-
"syntaxOperator": "
|
|
78
|
-
"syntaxPunctuation": "
|
|
67
|
+
"syntaxOperator": "subtext0",
|
|
68
|
+
"syntaxPunctuation": "subtext0",
|
|
79
69
|
"thinkingOff": "surface0",
|
|
80
70
|
"thinkingMinimal": "overlay0",
|
|
81
|
-
"thinkingLow": "
|
|
82
|
-
"thinkingMedium": "
|
|
71
|
+
"thinkingLow": "sapphire",
|
|
72
|
+
"thinkingMedium": "blue",
|
|
83
73
|
"thinkingHigh": "mauve",
|
|
84
74
|
"thinkingXhigh": "pink",
|
|
85
|
-
"bashMode": "
|
|
86
|
-
"statusLineBg": "
|
|
75
|
+
"bashMode": "green",
|
|
76
|
+
"statusLineBg": "^-2",
|
|
87
77
|
"statusLineSep": "surface1",
|
|
88
|
-
"statusLineModel": "
|
|
89
|
-
"statusLinePath": "
|
|
78
|
+
"statusLineModel": "mauve",
|
|
79
|
+
"statusLinePath": "blue",
|
|
90
80
|
"statusLineGitClean": "green",
|
|
91
|
-
"statusLineGitDirty": "
|
|
92
|
-
"statusLineContext": "
|
|
93
|
-
"statusLineSpend": "
|
|
94
|
-
"statusLineStaged":
|
|
95
|
-
"statusLineDirty":
|
|
96
|
-
"statusLineUntracked":
|
|
97
|
-
"statusLineOutput":
|
|
98
|
-
"statusLineCost":
|
|
99
|
-
"statusLineSubagents": "
|
|
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": "
|
|
104
|
-
"cardBg": "
|
|
105
|
-
"infoBg": "
|
|
94
|
+
"pageBg": "#1e1e2e",
|
|
95
|
+
"cardBg": "#24243e",
|
|
96
|
+
"infoBg": "#313244"
|
|
106
97
|
}
|
|
107
98
|
}
|